diff --git a/.gitignore b/.gitignore index 98eaa6f414..60b59e6829 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ LC_MESSAGES .cache *.qmlc .mypy_cache +.pytest_cache #MacOS .DS_Store @@ -25,6 +26,7 @@ LC_MESSAGES *.lprof *~ *.qm +.directory .idea cura.desktop @@ -40,7 +42,6 @@ plugins/cura-siemensnx-plugin plugins/CuraBlenderPlugin plugins/CuraCloudPlugin plugins/CuraDrivePlugin -plugins/CuraDrive plugins/CuraLiveScriptingPlugin plugins/CuraOpenSCADPlugin plugins/CuraPrintProfileCreator diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e9bf4b538..be6c9d938e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,8 @@ if(CURA_DEBUGMODE) set(_cura_debugmode "ON") endif() +set(CURA_APP_NAME "cura" CACHE STRING "Short name of Cura, used for configuration folder") +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/Jenkinsfile b/Jenkinsfile index de62b7ed5a..a345ebbd05 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,8 +1,11 @@ -parallel_nodes(['linux && cura', 'windows && cura']) { - timeout(time: 2, unit: "HOURS") { +parallel_nodes(['linux && cura', 'windows && cura']) +{ + timeout(time: 2, unit: "HOURS") + { // Prepare building - stage('Prepare') { + stage('Prepare') + { // Ensure we start with a clean build directory. step([$class: 'WsCleanup']) @@ -11,13 +14,17 @@ parallel_nodes(['linux && cura', 'windows && cura']) { } // If any error occurs during building, we want to catch it and continue with the "finale" stage. - catchError { + catchError + { // Building and testing should happen in a subdirectory. - dir('build') { + dir('build') + { // Perform the "build". Since Uranium is Python code, this basically only ensures CMake is setup. - stage('Build') { + stage('Build') + { def branch = env.BRANCH_NAME - if(!fileExists("${env.CURA_ENVIRONMENT_PATH}/${branch}")) { + if(!fileExists("${env.CURA_ENVIRONMENT_PATH}/${branch}")) + { branch = "master" } @@ -27,18 +34,37 @@ parallel_nodes(['linux && cura', 'windows && cura']) { } // Try and run the unit tests. If this stage fails, we consider the build to be "unstable". - stage('Unit Test') { - try { - make('test') - } catch(e) { - currentBuild.result = "UNSTABLE" + stage('Unit Test') + { + if (isUnix()) + { + // For Linux + try { + sh 'make CTEST_OUTPUT_ON_FAILURE=TRUE test' + } catch(e) + { + currentBuild.result = "UNSTABLE" + } + } + else + { + // For Windows + try + { + // This also does code style checks. + bat 'ctest -V' + } catch(e) + { + currentBuild.result = "UNSTABLE" + } } } } } // Perform any post-build actions like notification and publishing of unit tests. - stage('Finalize') { + stage('Finalize') + { // Publish the test results to Jenkins. junit allowEmptyResults: true, testResults: 'build/junit*.xml' diff --git a/README.md b/README.md index 70466e9c22..93abcc0c61 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,9 @@ Dependencies ------------ * [Uranium](https://github.com/Ultimaker/Uranium) Cura is built on top of the Uranium framework. * [CuraEngine](https://github.com/Ultimaker/CuraEngine) This will be needed at runtime to perform the actual slicing. +* [fdm_materials](https://github.com/Ultimaker/fdm_materials) Required to load a printer that has swappable material profiles. * [PySerial](https://github.com/pyserial/pyserial) Only required for USB printing support. -* [python-zeroconf](https://github.com/jstasiak/python-zeroconf) Only required to detect mDNS-enabled printers +* [python-zeroconf](https://github.com/jstasiak/python-zeroconf) Only required to detect mDNS-enabled printers. Build scripts ------------- diff --git a/cmake/CuraTests.cmake b/cmake/CuraTests.cmake index 801f054bc3..b6d04de036 100644 --- a/cmake/CuraTests.cmake +++ b/cmake/CuraTests.cmake @@ -6,6 +6,8 @@ include(CMakeParseArguments) find_package(PythonInterp 3.5.0 REQUIRED) +add_custom_target(test-verbose COMMAND ${CMAKE_CTEST_COMMAND} --verbose) + function(cura_add_test) set(_single_args NAME DIRECTORY PYTHONPATH) cmake_parse_arguments("" "" "${_single_args}" "" ${ARGN}) @@ -34,7 +36,7 @@ function(cura_add_test) if (NOT ${test_exists}) add_test( NAME ${_NAME} - COMMAND ${PYTHON_EXECUTABLE} -m pytest --junitxml=${CMAKE_BINARY_DIR}/junit-${_NAME}.xml ${_DIRECTORY} + COMMAND ${PYTHON_EXECUTABLE} -m pytest --verbose --full-trace --capture=no --no-print-log --junitxml=${CMAKE_BINARY_DIR}/junit-${_NAME}.xml ${_DIRECTORY} ) set_tests_properties(${_NAME} PROPERTIES ENVIRONMENT LANG=C) set_tests_properties(${_NAME} PROPERTIES ENVIRONMENT "PYTHONPATH=${_PYTHONPATH}") @@ -57,5 +59,13 @@ endforeach() #Add code style test. add_test( NAME "code-style" - COMMAND ${PYTHON_EXECUTABLE} run_mypy.py WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMAND ${PYTHON_EXECUTABLE} run_mypy.py + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +) + +#Add test for whether the shortcut alt-keys are unique in every translation. +add_test( + NAME "shortcut-keys" + COMMAND ${PYTHON_EXECUTABLE} scripts/check_shortcut_keys.py + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) \ No newline at end of file diff --git a/cura.desktop.in b/cura.desktop.in index fe61b47217..b0195015a5 100644 --- a/cura.desktop.in +++ b/cura.desktop.in @@ -13,6 +13,6 @@ TryExec=@CMAKE_INSTALL_FULL_BINDIR@/cura Icon=cura-icon Terminal=false Type=Application -MimeType=application/sla;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;model/x3d+xml; +MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;model/x3d+xml;text/x-gcode; Categories=Graphics; Keywords=3D;Printing;Slicer; diff --git a/cura.sharedmimeinfo b/cura.sharedmimeinfo index 9629aef5df..ed9099d425 100644 --- a/cura.sharedmimeinfo +++ b/cura.sharedmimeinfo @@ -6,7 +6,7 @@ - + Computer-aided design and manufacturing format @@ -19,4 +19,12 @@ + + + Gcode file + + + + + \ No newline at end of file diff --git a/cura/API/Account.py b/cura/API/Account.py new file mode 100644 index 0000000000..30401454b3 --- /dev/null +++ b/cura/API/Account.py @@ -0,0 +1,126 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional, Dict, TYPE_CHECKING + +from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, pyqtProperty + +from UM.i18n import i18nCatalog +from UM.Message import Message +from cura import UltimakerCloudAuthentication + +from cura.OAuth2.AuthorizationService import AuthorizationService +from cura.OAuth2.Models import OAuth2Settings + +if TYPE_CHECKING: + from cura.CuraApplication import CuraApplication + +i18n_catalog = i18nCatalog("cura") + + +## The account API provides a version-proof bridge to use Ultimaker Accounts +# +# Usage: +# ``from cura.API import CuraAPI +# api = CuraAPI() +# api.account.login() +# api.account.logout() +# api.account.userProfile # Who is logged in`` +# +class Account(QObject): + # Signal emitted when user logged in or out. + loginStateChanged = pyqtSignal(bool) + + def __init__(self, application: "CuraApplication", parent = None) -> None: + super().__init__(parent) + self._application = application + + self._error_message = None # type: Optional[Message] + self._logged_in = False + + self._callback_port = 32118 + self._oauth_root = UltimakerCloudAuthentication.CuraCloudAccountAPIRoot + + self._oauth_settings = OAuth2Settings( + OAUTH_SERVER_URL= self._oauth_root, + CALLBACK_PORT=self._callback_port, + CALLBACK_URL="http://localhost:{}/callback".format(self._callback_port), + CLIENT_ID="um----------------------------ultimaker_cura", + CLIENT_SCOPES="account.user.read drive.backup.read drive.backup.write packages.download " + "packages.rating.read packages.rating.write connect.cluster.read connect.cluster.write " + "cura.printjob.read cura.printjob.write cura.mesh.read cura.mesh.write", + AUTH_DATA_PREFERENCE_KEY="general/ultimaker_auth_data", + AUTH_SUCCESS_REDIRECT="{}/app/auth-success".format(self._oauth_root), + AUTH_FAILED_REDIRECT="{}/app/auth-error".format(self._oauth_root) + ) + + self._authorization_service = AuthorizationService(self._oauth_settings) + + 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.loadAuthDataFromPreferences() + + ## Returns a boolean indicating whether the given authentication is applied against staging or not. + @property + def is_staging(self) -> bool: + return "staging" in self._oauth_root + + @pyqtProperty(bool, notify=loginStateChanged) + def isLoggedIn(self) -> bool: + return self._logged_in + + def _onLoginStateChanged(self, logged_in: bool = False, error_message: Optional[str] = None) -> None: + if error_message: + if self._error_message: + self._error_message.hide() + self._error_message = Message(error_message, title = i18n_catalog.i18nc("@info:title", "Login failed")) + self._error_message.show() + self._logged_in = False + self.loginStateChanged.emit(False) + return + + if self._logged_in != logged_in: + self._logged_in = logged_in + self.loginStateChanged.emit(logged_in) + + @pyqtSlot() + def login(self) -> None: + if self._logged_in: + # Nothing to do, user already logged in. + return + self._authorization_service.startAuthorizationFlow() + + @pyqtProperty(str, notify=loginStateChanged) + def userName(self): + user_profile = self._authorization_service.getUserProfile() + if not user_profile: + return None + return user_profile.username + + @pyqtProperty(str, notify = loginStateChanged) + def profileImageUrl(self): + user_profile = self._authorization_service.getUserProfile() + if not user_profile: + return None + return user_profile.profile_image_url + + @pyqtProperty(str, notify=loginStateChanged) + def accessToken(self) -> Optional[str]: + return self._authorization_service.getAccessToken() + + # Get the profile of the logged in user + # @returns None if no user is logged in, a dict containing user_id, username and profile_image_url + @pyqtProperty("QVariantMap", notify = loginStateChanged) + def userProfile(self) -> Optional[Dict[str, Optional[str]]]: + user_profile = self._authorization_service.getUserProfile() + if not user_profile: + return None + return user_profile.__dict__ + + @pyqtSlot() + def logout(self) -> None: + if not self._logged_in: + return # Nothing to do, user isn't logged in. + + self._authorization_service.deleteAuthData() diff --git a/cura/API/Backups.py b/cura/API/Backups.py index f31933c844..ef74e74be0 100644 --- a/cura/API/Backups.py +++ b/cura/API/Backups.py @@ -1,9 +1,12 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import Tuple, Optional +from typing import Tuple, Optional, TYPE_CHECKING, Dict, Any from cura.Backups.BackupsManager import BackupsManager +if TYPE_CHECKING: + from cura.CuraApplication import CuraApplication + ## The back-ups API provides a version-proof bridge between Cura's # BackupManager and plug-ins that hook into it. @@ -13,19 +16,20 @@ from cura.Backups.BackupsManager import BackupsManager # api = CuraAPI() # api.backups.createBackup() # api.backups.restoreBackup(my_zip_file, {"cura_release": "3.1"})`` - class Backups: - manager = BackupsManager() # Re-used instance of the backups manager. + + def __init__(self, application: "CuraApplication") -> None: + self.manager = BackupsManager(application) ## Create a new back-up using the BackupsManager. # \return Tuple containing a ZIP file with the back-up data and a dict # with metadata about the back-up. - def createBackup(self) -> Tuple[Optional[bytes], Optional[dict]]: + def createBackup(self) -> Tuple[Optional[bytes], Optional[Dict[str, Any]]]: return self.manager.createBackup() ## Restore a back-up using the BackupsManager. # \param zip_file A ZIP file containing the actual back-up data. # \param meta_data Some metadata needed for restoring a back-up, like the # Cura version number. - def restoreBackup(self, zip_file: bytes, meta_data: dict) -> None: + def restoreBackup(self, zip_file: bytes, meta_data: Dict[str, Any]) -> None: return self.manager.restoreBackup(zip_file, meta_data) diff --git a/cura/API/Interface/Settings.py b/cura/API/Interface/Settings.py index 2889db7022..371c40c14c 100644 --- a/cura/API/Interface/Settings.py +++ b/cura/API/Interface/Settings.py @@ -1,7 +1,11 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from cura.CuraApplication import CuraApplication +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from cura.CuraApplication import CuraApplication + ## The Interface.Settings API provides a version-proof bridge between Cura's # (currently) sidebar UI and plug-ins that hook into it. @@ -19,8 +23,9 @@ from cura.CuraApplication import CuraApplication # api.interface.settings.addContextMenuItem(data)`` class Settings: - # Re-used instance of Cura: - application = CuraApplication.getInstance() # type: CuraApplication + + def __init__(self, application: "CuraApplication") -> None: + self.application = application ## Add items to the sidebar context menu. # \param menu_item dict containing the menu item to add. @@ -30,4 +35,4 @@ class Settings: ## Get all custom items currently added to the sidebar context menu. # \return List containing all custom context menu items. def getContextMenuItems(self) -> list: - return self.application.getSidebarCustomMenuItems() \ No newline at end of file + return self.application.getSidebarCustomMenuItems() diff --git a/cura/API/Interface/__init__.py b/cura/API/Interface/__init__.py index b38118949b..cec174bf0a 100644 --- a/cura/API/Interface/__init__.py +++ b/cura/API/Interface/__init__.py @@ -1,9 +1,14 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from UM.PluginRegistry import PluginRegistry +from typing import TYPE_CHECKING + from cura.API.Interface.Settings import Settings +if TYPE_CHECKING: + from cura.CuraApplication import CuraApplication + + ## The Interface class serves as a common root for the specific API # methods for each interface element. # @@ -17,8 +22,6 @@ from cura.API.Interface.Settings import Settings class Interface: - # For now we use the same API version to be consistent. - VERSION = PluginRegistry.APIVersion - - # API methods specific to the settings portion of the UI - settings = Settings() + def __init__(self, application: "CuraApplication") -> None: + # API methods specific to the settings portion of the UI + self.settings = Settings(application) diff --git a/cura/API/__init__.py b/cura/API/__init__.py index 64d636903d..b3e702263a 100644 --- a/cura/API/__init__.py +++ b/cura/API/__init__.py @@ -1,8 +1,16 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from UM.PluginRegistry import PluginRegistry +from typing import Optional, TYPE_CHECKING + +from PyQt5.QtCore import QObject, pyqtProperty + from cura.API.Backups import Backups from cura.API.Interface import Interface +from cura.API.Account import Account + +if TYPE_CHECKING: + from cura.CuraApplication import CuraApplication + ## The official Cura API that plug-ins can use to interact with Cura. # @@ -10,14 +18,46 @@ from cura.API.Interface import Interface # this API provides a version-safe interface with proper deprecation warnings # etc. Usage of any other methods than the ones provided in this API can cause # plug-ins to be unstable. - -class CuraAPI: +class CuraAPI(QObject): # For now we use the same API version to be consistent. - VERSION = PluginRegistry.APIVersion + __instance = None # type: "CuraAPI" + _application = None # type: CuraApplication - # Backups API - backups = Backups() + # This is done to ensure that the first time an instance is created, it's forced that the application is set. + # The main reason for this is that we want to prevent consumers of API to have a dependency on CuraApplication. + # Since the API is intended to be used by plugins, the cura application should have already created this. + def __new__(cls, application: Optional["CuraApplication"] = None): + if cls.__instance is None: + if application is None: + raise Exception("Upon first time creation, the application must be set.") + cls.__instance = super(CuraAPI, cls).__new__(cls) + cls._application = application + return cls.__instance - # Interface API - interface = Interface() + def __init__(self, application: Optional["CuraApplication"] = None) -> None: + super().__init__(parent = CuraAPI._application) + + # Accounts API + self._account = Account(self._application) + + # Backups API + self._backups = Backups(self._application) + + # Interface API + self._interface = Interface(self._application) + + def initialize(self) -> None: + self._account.initialize() + + @pyqtProperty(QObject, constant = True) + def account(self) -> "Account": + return self._account + + @property + def backups(self) -> "Backups": + return self._backups + + @property + def interface(self) -> "Interface": + return self._interface diff --git a/cura/ApplicationMetadata.py b/cura/ApplicationMetadata.py new file mode 100644 index 0000000000..faa3364e08 --- /dev/null +++ b/cura/ApplicationMetadata.py @@ -0,0 +1,50 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +# --------- +# General constants used in Cura +# --------- +DEFAULT_CURA_APP_NAME = "cura" +DEFAULT_CURA_DISPLAY_NAME = "Ultimaker Cura" +DEFAULT_CURA_VERSION = "master" +DEFAULT_CURA_BUILD_TYPE = "" +DEFAULT_CURA_DEBUG_MODE = False +DEFAULT_CURA_SDK_VERSION = "6.0.0" + +try: + from cura.CuraVersion import CuraAppName # type: ignore + if CuraAppName == "": + CuraAppName = DEFAULT_CURA_APP_NAME +except ImportError: + CuraAppName = DEFAULT_CURA_APP_NAME + +try: + from cura.CuraVersion import CuraAppDisplayName # type: ignore + if CuraAppDisplayName == "": + CuraAppDisplayName = DEFAULT_CURA_DISPLAY_NAME +except ImportError: + CuraAppDisplayName = DEFAULT_CURA_DISPLAY_NAME + +try: + from cura.CuraVersion import CuraVersion # type: ignore + if CuraVersion == "": + CuraVersion = DEFAULT_CURA_VERSION +except ImportError: + CuraVersion = DEFAULT_CURA_VERSION # [CodeStyle: Reflecting imported value] + +try: + from cura.CuraVersion import CuraBuildType # type: ignore +except ImportError: + CuraBuildType = DEFAULT_CURA_BUILD_TYPE + +try: + from cura.CuraVersion import CuraDebugMode # type: ignore +except ImportError: + CuraDebugMode = DEFAULT_CURA_DEBUG_MODE + +try: + from cura.CuraVersion import CuraSDKVersion # type: ignore + if CuraSDKVersion == "": + CuraSDKVersion = DEFAULT_CURA_SDK_VERSION +except ImportError: + CuraSDKVersion = DEFAULT_CURA_SDK_VERSION diff --git a/cura/Arranging/Arrange.py b/cura/Arranging/Arrange.py index 5657ee991a..32796005c8 100644 --- a/cura/Arranging/Arrange.py +++ b/cura/Arranging/Arrange.py @@ -66,6 +66,11 @@ class Arrange: continue vertices = vertices.getMinkowskiHull(Polygon.approximatedCircle(min_offset)) points = copy.deepcopy(vertices._points) + + # After scaling (like up to 0.1 mm) the node might not have points + if len(points) == 0: + continue + shape_arr = ShapeArray.fromPolygon(points, scale = scale) arranger.place(0, 0, shape_arr) diff --git a/cura/Arranging/ArrangeObjectsJob.py b/cura/Arranging/ArrangeObjectsJob.py index ce11556b5b..aef051c838 100644 --- a/cura/Arranging/ArrangeObjectsJob.py +++ b/cura/Arranging/ArrangeObjectsJob.py @@ -1,4 +1,4 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from UM.Application import Application @@ -39,10 +39,17 @@ class ArrangeObjectsJob(Job): arranger = Arrange.create(x = machine_width, y = machine_depth, fixed_nodes = self._fixed_nodes, min_offset = self._min_offset) + # Build set to exclude children (those get arranged together with the parents). + included_as_child = set() + for node in self._nodes: + included_as_child.update(node.getAllChildren()) + # Collect nodes to be placed nodes_arr = [] # fill with (size, node, offset_shape_arr, hull_shape_arr) for node in self._nodes: - offset_shape_arr, hull_shape_arr = ShapeArray.fromNode(node, min_offset = self._min_offset) + if node in included_as_child: + continue + offset_shape_arr, hull_shape_arr = ShapeArray.fromNode(node, min_offset = self._min_offset, include_children = True) if offset_shape_arr is None: Logger.log("w", "Node [%s] could not be converted to an array for arranging...", str(node)) continue diff --git a/cura/Arranging/ShapeArray.py b/cura/Arranging/ShapeArray.py index ab785cc3e1..64b78d6f17 100644 --- a/cura/Arranging/ShapeArray.py +++ b/cura/Arranging/ShapeArray.py @@ -42,7 +42,7 @@ class ShapeArray: # \param min_offset offset for the offset ShapeArray # \param scale scale the coordinates @classmethod - def fromNode(cls, node, min_offset, scale = 0.5): + def fromNode(cls, node, min_offset, scale = 0.5, include_children = False): transform = node._transformation transform_x = transform._data[0][3] transform_y = transform._data[2][3] @@ -52,6 +52,21 @@ class ShapeArray: return None, None # For one_at_a_time printing you need the convex hull head. hull_head_verts = node.callDecoration("getConvexHullHead") or hull_verts + if hull_head_verts is None: + hull_head_verts = Polygon() + + # If the child-nodes are included, adjust convex hulls as well: + if include_children: + children = node.getAllChildren() + if not children is None: + for child in children: + # 'Inefficient' combination of convex hulls through known code rather than mess it up: + child_hull = child.callDecoration("getConvexHull") + if not child_hull is None: + hull_verts = hull_verts.unionConvexHulls(child_hull) + child_hull_head = child.callDecoration("getConvexHullHead") or child_hull + if not child_hull_head is None: + hull_head_verts = hull_head_verts.unionConvexHulls(child_hull_head) offset_verts = hull_head_verts.getMinkowskiHull(Polygon.approximatedCircle(min_offset)) offset_points = copy.deepcopy(offset_verts._points) # x, y diff --git a/cura/Backups/Backup.py b/cura/Backups/Backup.py index cc47df770e..714d6527fe 100644 --- a/cura/Backups/Backup.py +++ b/cura/Backups/Backup.py @@ -4,18 +4,18 @@ import io import os import re - import shutil - -from typing import Dict, Optional from zipfile import ZipFile, ZIP_DEFLATED, BadZipfile +from typing import Dict, Optional, TYPE_CHECKING from UM import i18nCatalog from UM.Logger import Logger from UM.Message import Message from UM.Platform import Platform from UM.Resources import Resources -from cura.CuraApplication import CuraApplication + +if TYPE_CHECKING: + from cura.CuraApplication import CuraApplication ## The back-up class holds all data about a back-up. @@ -29,28 +29,30 @@ class Backup: # Re-use translation catalog. catalog = i18nCatalog("cura") - def __init__(self, zip_file: bytes = None, meta_data: Dict[str, str] = None) -> None: + def __init__(self, application: "CuraApplication", zip_file: bytes = None, meta_data: Dict[str, str] = None) -> None: + self._application = application self.zip_file = zip_file # type: Optional[bytes] self.meta_data = meta_data # type: Optional[Dict[str, str]] ## Create a back-up from the current user config folder. def makeFromCurrent(self) -> None: - cura_release = CuraApplication.getInstance().getVersion() + cura_release = self._application.getVersion() version_data_dir = Resources.getDataStoragePath() Logger.log("d", "Creating backup for Cura %s, using folder %s", cura_release, version_data_dir) # Ensure all current settings are saved. - CuraApplication.getInstance().saveSettings() + self._application.saveSettings() # We copy the preferences file to the user data directory in Linux as it's in a different location there. # When restoring a backup on Linux, we move it back. - if Platform.isLinux(): - preferences_file_name = CuraApplication.getInstance().getApplicationName() + if Platform.isLinux(): #TODO: This should check for the config directory not being the same as the data directory, rather than hard-coding that to Linux systems. + preferences_file_name = self._application.getApplicationName() preferences_file = Resources.getPath(Resources.Preferences, "{}.cfg".format(preferences_file_name)) backup_preferences_file = os.path.join(version_data_dir, "{}.cfg".format(preferences_file_name)) - Logger.log("d", "Copying preferences file from %s to %s", preferences_file, backup_preferences_file) - shutil.copyfile(preferences_file, backup_preferences_file) + if os.path.exists(preferences_file) and (not os.path.exists(backup_preferences_file) or not os.path.samefile(preferences_file, backup_preferences_file)): + Logger.log("d", "Copying preferences file from %s to %s", preferences_file, backup_preferences_file) + shutil.copyfile(preferences_file, backup_preferences_file) # Create an empty buffer and write the archive to it. buffer = io.BytesIO() @@ -58,7 +60,7 @@ class Backup: if archive is None: return files = archive.namelist() - + # Count the metadata items. We do this in a rather naive way at the moment. machine_count = len([s for s in files if "machine_instances/" in s]) - 1 material_count = len([s for s in files if "materials/" in s]) - 1 @@ -112,7 +114,7 @@ class Backup: "Tried to restore a Cura backup without having proper data or meta data.")) return False - current_version = CuraApplication.getInstance().getVersion() + current_version = self._application.getVersion() version_to_restore = self.meta_data.get("cura_release", "master") if current_version != version_to_restore: # Cannot restore version older or newer than current because settings might have changed. @@ -128,7 +130,7 @@ class Backup: # Under Linux, preferences are stored elsewhere, so we copy the file to there. if Platform.isLinux(): - preferences_file_name = CuraApplication.getInstance().getApplicationName() + preferences_file_name = self._application.getApplicationName() preferences_file = Resources.getPath(Resources.Preferences, "{}.cfg".format(preferences_file_name)) backup_preferences_file = os.path.join(version_data_dir, "{}.cfg".format(preferences_file_name)) Logger.log("d", "Moving preferences file from %s to %s", backup_preferences_file, preferences_file) diff --git a/cura/Backups/BackupsManager.py b/cura/Backups/BackupsManager.py index 67e2a222f1..a0d3881209 100644 --- a/cura/Backups/BackupsManager.py +++ b/cura/Backups/BackupsManager.py @@ -1,11 +1,13 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import Dict, Optional, Tuple +from typing import Dict, Optional, Tuple, TYPE_CHECKING from UM.Logger import Logger from cura.Backups.Backup import Backup -from cura.CuraApplication import CuraApplication + +if TYPE_CHECKING: + from cura.CuraApplication import CuraApplication ## The BackupsManager is responsible for managing the creating and restoring of @@ -13,15 +15,15 @@ from cura.CuraApplication import CuraApplication # # Back-ups themselves are represented in a different class. class BackupsManager: - def __init__(self): - self._application = CuraApplication.getInstance() + def __init__(self, application: "CuraApplication") -> None: + self._application = application ## Get a back-up of the current configuration. # \return A tuple containing a ZipFile (the actual back-up) and a dict # containing some metadata (like version). def createBackup(self) -> Tuple[Optional[bytes], Optional[Dict[str, str]]]: self._disableAutoSave() - backup = Backup() + backup = Backup(self._application) backup.makeFromCurrent() self._enableAutoSave() # We don't return a Backup here because we want plugins only to interact with our API and not full objects. @@ -39,7 +41,7 @@ class BackupsManager: self._disableAutoSave() - backup = Backup(zip_file = zip_file, meta_data = meta_data) + backup = Backup(self._application, zip_file = zip_file, meta_data = meta_data) restored = backup.restore() if restored: # At this point, Cura will need to restart for the changes to take effect. diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index b029665abd..f8f691a850 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -1,6 +1,6 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. - +from UM.Scene.Camera import Camera from cura.Scene.CuraSceneNode import CuraSceneNode from cura.Settings.ExtruderManager import ExtruderManager from UM.Application import Application #To modify the maximum zoom level. @@ -28,7 +28,7 @@ import copy from typing import List, Optional -# Setting for clearance around the prime +# Radius of disallowed area in mm around prime. I.e. how much distance to keep from prime position. PRIME_CLEARANCE = 6.5 @@ -83,7 +83,14 @@ class BuildVolume(SceneNode): " with printed models."), title = catalog.i18nc("@info:title", "Build Volume")) self._global_container_stack = None + + self._stack_change_timer = QTimer() + self._stack_change_timer.setInterval(100) + self._stack_change_timer.setSingleShot(True) + self._stack_change_timer.timeout.connect(self._onStackChangeTimerFinished) + self._application.globalContainerStackChanged.connect(self._onStackChanged) + self._onStackChanged() self._engine_ready = False @@ -122,7 +129,9 @@ class BuildVolume(SceneNode): def _onSceneChanged(self, source): if self._global_container_stack: - self._scene_change_timer.start() + # Ignore anything that is not something we can slice in the first place! + if source.callDecoration("isSliceable"): + self._scene_change_timer.start() def _onSceneChangeTimerFinished(self): root = self._application.getController().getScene().getRoot() @@ -139,7 +148,7 @@ class BuildVolume(SceneNode): if active_extruder_changed is not None: node.callDecoration("getActiveExtruderChangedSignal").disconnect(self._updateDisallowedAreasAndRebuild) node.decoratorsChanged.disconnect(self._updateNodeListeners) - self._updateDisallowedAreasAndRebuild() # make sure we didn't miss anything before we updated the node listeners + self.rebuild() self._scene_objects = new_scene_objects self._onSettingPropertyChanged("print_sequence", "value") # Create fake event, so right settings are triggered. @@ -491,7 +500,9 @@ class BuildVolume(SceneNode): def _updateRaftThickness(self): old_raft_thickness = self._raft_thickness - self._adhesion_type = self._global_container_stack.getProperty("adhesion_type", "value") + if self._global_container_stack.extruders: + # This might be called before the extruder stacks have initialised, in which case getting the adhesion_type fails + self._adhesion_type = self._global_container_stack.getProperty("adhesion_type", "value") self._raft_thickness = 0.0 if self._adhesion_type == "raft": self._raft_thickness = ( @@ -524,11 +535,14 @@ class BuildVolume(SceneNode): if extra_z != self._extra_z_clearance: self._extra_z_clearance = extra_z - ## Update the build volume visualization def _onStackChanged(self): + self._stack_change_timer.start() + + ## Update the build volume visualization + def _onStackChangeTimerFinished(self): if self._global_container_stack: self._global_container_stack.propertyChanged.disconnect(self._onSettingPropertyChanged) - extruders = ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()) + extruders = ExtruderManager.getInstance().getActiveExtruderStacks() for extruder in extruders: extruder.propertyChanged.disconnect(self._onSettingPropertyChanged) @@ -536,7 +550,7 @@ class BuildVolume(SceneNode): if self._global_container_stack: self._global_container_stack.propertyChanged.connect(self._onSettingPropertyChanged) - extruders = ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()) + extruders = ExtruderManager.getInstance().getActiveExtruderStacks() for extruder in extruders: extruder.propertyChanged.connect(self._onSettingPropertyChanged) @@ -653,6 +667,7 @@ class BuildVolume(SceneNode): # ``_updateDisallowedAreas`` method itself shouldn't call ``rebuild``, # since there may be other changes before it needs to be rebuilt, which # would hit performance. + def _updateDisallowedAreasAndRebuild(self): self._updateDisallowedAreas() self._updateRaftThickness() @@ -720,21 +735,27 @@ class BuildVolume(SceneNode): # Add prime tower location as disallowed area. if len(used_extruders) > 1: #No prime tower in single-extrusion. - prime_tower_collision = False - prime_tower_areas = self._computeDisallowedAreasPrinted(used_extruders) - for extruder_id in prime_tower_areas: - for prime_tower_area in prime_tower_areas[extruder_id]: - for area in result_areas[extruder_id]: - if prime_tower_area.intersectsPolygon(area) is not None: - prime_tower_collision = True + + if len([x for x in used_extruders if x.isEnabled == True]) > 1: #No prime tower if only one extruder is enabled + prime_tower_collision = False + prime_tower_areas = self._computeDisallowedAreasPrinted(used_extruders) + for extruder_id in prime_tower_areas: + for i_area, prime_tower_area in enumerate(prime_tower_areas[extruder_id]): + for area in result_areas[extruder_id]: + if prime_tower_area.intersectsPolygon(area) is not None: + prime_tower_collision = True + break + if prime_tower_collision: #Already found a collision. break - if prime_tower_collision: #Already found a collision. - break - if not prime_tower_collision: - result_areas[extruder_id].extend(prime_tower_areas[extruder_id]) - result_areas_no_brim[extruder_id].extend(prime_tower_areas[extruder_id]) - else: - self._error_areas.extend(prime_tower_areas[extruder_id]) + if (ExtruderManager.getInstance().getResolveOrValue("prime_tower_brim_enable") and + ExtruderManager.getInstance().getResolveOrValue("adhesion_type") != "raft"): + prime_tower_areas[extruder_id][i_area] = prime_tower_area.getMinkowskiHull( + Polygon.approximatedCircle(disallowed_border_size)) + if not prime_tower_collision: + result_areas[extruder_id].extend(prime_tower_areas[extruder_id]) + result_areas_no_brim[extruder_id].extend(prime_tower_areas[extruder_id]) + else: + self._error_areas.extend(prime_tower_areas[extruder_id]) self._has_errors = len(self._error_areas) > 0 @@ -769,6 +790,16 @@ class BuildVolume(SceneNode): prime_tower_x = prime_tower_x - machine_width / 2 #Offset by half machine_width and _depth to put the origin in the front-left. prime_tower_y = prime_tower_y + machine_depth / 2 + if (ExtruderManager.getInstance().getResolveOrValue("prime_tower_brim_enable") and + ExtruderManager.getInstance().getResolveOrValue("adhesion_type") != "raft"): + brim_size = ( + extruder.getProperty("brim_line_count", "value") * + extruder.getProperty("skirt_brim_line_width", "value") / 100.0 * + extruder.getProperty("initial_layer_line_width_factor", "value") + ) + prime_tower_x -= brim_size + prime_tower_y += brim_size + if self._global_container_stack.getProperty("prime_tower_circular", "value"): radius = prime_tower_size / 2 prime_tower_area = Polygon.approximatedCircle(radius) @@ -1008,7 +1039,9 @@ class BuildVolume(SceneNode): # We don't create an additional line for the extruder we're printing the skirt with. bed_adhesion_size -= skirt_brim_line_width * initial_layer_line_width_factor / 100.0 - elif adhesion_type == "brim": + elif (adhesion_type == "brim" or + (self._global_container_stack.getProperty("prime_tower_brim_enable", "value") and + self._global_container_stack.getProperty("adhesion_type", "value") != "raft")): brim_line_count = self._global_container_stack.getProperty("brim_line_count", "value") bed_adhesion_size = skirt_brim_line_width * brim_line_count * initial_layer_line_width_factor / 100.0 @@ -1027,6 +1060,12 @@ class BuildVolume(SceneNode): else: raise Exception("Unknown bed adhesion type. Did you forget to update the build volume calculations for your new bed adhesion type?") + max_length_available = 0.5 * min( + self._global_container_stack.getProperty("machine_width", "value"), + self._global_container_stack.getProperty("machine_depth", "value") + ) + bed_adhesion_size = min(bed_adhesion_size, max_length_available) + support_expansion = 0 support_enabled = self._global_container_stack.getProperty("support_enable", "value") support_offset = self._global_container_stack.getProperty("support_offset", "value") @@ -1061,7 +1100,7 @@ class BuildVolume(SceneNode): _raft_settings = ["adhesion_type", "raft_base_thickness", "raft_interface_thickness", "raft_surface_layers", "raft_surface_thickness", "raft_airgap", "layer_0_z_overlap"] _extra_z_settings = ["retraction_hop_enabled", "retraction_hop"] _prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "extruder_prime_pos_z", "prime_blob_enable"] - _tower_settings = ["prime_tower_enable", "prime_tower_circular", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y"] + _tower_settings = ["prime_tower_enable", "prime_tower_circular", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y", "prime_tower_brim_enable"] _ooze_shield_settings = ["ooze_shield_enabled", "ooze_shield_dist"] _distance_settings = ["infill_wipe_dist", "travel_avoid_distance", "support_offset", "support_enable", "travel_avoid_other_parts", "travel_avoid_supports"] _extruder_settings = ["support_enable", "support_bottom_enable", "support_roof_enable", "support_infill_extruder_nr", "support_extruder_nr_layer_0", "support_bottom_extruder_nr", "support_roof_extruder_nr", "brim_line_count", "adhesion_extruder_nr", "adhesion_type"] #Settings that can affect which extruders are used. diff --git a/cura/CameraImageProvider.py b/cura/CameraImageProvider.py deleted file mode 100644 index ff5c51f24b..0000000000 --- a/cura/CameraImageProvider.py +++ /dev/null @@ -1,23 +0,0 @@ -from PyQt5.QtGui import QImage -from PyQt5.QtQuick import QQuickImageProvider -from PyQt5.QtCore import QSize - -from UM.Application import Application - - -class CameraImageProvider(QQuickImageProvider): - def __init__(self): - super().__init__(QQuickImageProvider.Image) - - ## Request a new image. - def requestImage(self, id, size): - for output_device in Application.getInstance().getOutputDeviceManager().getOutputDevices(): - try: - image = output_device.activePrinter.camera.getImage() - if image.isNull(): - image = QImage() - - return image, QSize(15, 15) - except AttributeError: - pass - return QImage(), QSize(15, 15) diff --git a/cura/CrashHandler.py b/cura/CrashHandler.py index 46544ca0ef..d43743bc37 100644 --- a/cura/CrashHandler.py +++ b/cura/CrashHandler.py @@ -36,18 +36,14 @@ else: except ImportError: CuraDebugMode = False # [CodeStyle: Reflecting imported value] -# List of exceptions that should be considered "fatal" and abort the program. -# These are primarily some exception types that we simply cannot really recover from -# (MemoryError and SystemError) and exceptions that indicate grave errors in the -# code that cause the Python interpreter to fail (SyntaxError, ImportError). -fatal_exception_types = [ - MemoryError, - SyntaxError, - ImportError, - SystemError, +# List of exceptions that should not be considered "fatal" and abort the program. +# These are primarily some exception types that we simply skip +skip_exception_types = [ + SystemExit, + KeyboardInterrupt, + GeneratorExit ] - class CrashHandler: crash_url = "https://stats.ultimaker.com/api/cura" @@ -70,7 +66,7 @@ class CrashHandler: # If Cura has fully started, we only show fatal errors. # If Cura has not fully started yet, we always show the early crash dialog. Otherwise, Cura will just crash # without any information. - if has_started and exception_type not in fatal_exception_types: + if has_started and exception_type in skip_exception_types: return if not has_started: @@ -387,7 +383,7 @@ class CrashHandler: Application.getInstance().callLater(self._show) def _show(self): - # When the exception is not in the fatal_exception_types list, the dialog is not created, so we don't need to show it + # When the exception is in the skip_exception_types list, the dialog is not created, so we don't need to show it if self.dialog: self.dialog.exec_() os._exit(1) diff --git a/cura/CuraActions.py b/cura/CuraActions.py index 93a18318df..91e0966fed 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -3,7 +3,7 @@ from PyQt5.QtCore import QObject, QUrl from PyQt5.QtGui import QDesktopServices -from typing import List, TYPE_CHECKING +from typing import List, TYPE_CHECKING, cast from UM.Event import CallFunctionEvent from UM.FlameProfiler import pyqtSlot @@ -36,12 +36,12 @@ class CuraActions(QObject): # Starting a web browser from a signal handler connected to a menu will crash on windows. # So instead, defer the call to the next run of the event loop, since that does work. # Note that weirdly enough, only signal handlers that open a web browser fail like that. - event = CallFunctionEvent(self._openUrl, [QUrl("http://ultimaker.com/en/support/software")], {}) + event = CallFunctionEvent(self._openUrl, [QUrl("https://ultimaker.com/en/resources/manuals/software")], {}) cura.CuraApplication.CuraApplication.getInstance().functionEvent(event) @pyqtSlot() def openBugReportPage(self) -> None: - event = CallFunctionEvent(self._openUrl, [QUrl("http://github.com/Ultimaker/Cura/issues")], {}) + event = CallFunctionEvent(self._openUrl, [QUrl("https://github.com/Ultimaker/Cura/issues")], {}) cura.CuraApplication.CuraApplication.getInstance().functionEvent(event) ## Reset camera position and direction to default @@ -61,8 +61,10 @@ class CuraActions(QObject): operation = GroupedOperation() for node in Selection.getAllSelectedObjects(): current_node = node - while current_node.getParent() and current_node.getParent().callDecoration("isGroup"): - current_node = current_node.getParent() + parent_node = current_node.getParent() + while parent_node and parent_node.callDecoration("isGroup"): + current_node = parent_node + parent_node = current_node.getParent() # This was formerly done with SetTransformOperation but because of # unpredictable matrix deconstruction it was possible that mirrors @@ -150,13 +152,13 @@ class CuraActions(QObject): root = cura.CuraApplication.CuraApplication.getInstance().getController().getScene().getRoot() - nodes_to_change = [] + nodes_to_change = [] # type: List[SceneNode] for node in Selection.getAllSelectedObjects(): parent_node = node # Find the parent node to change instead while parent_node.getParent() != root: - parent_node = parent_node.getParent() + parent_node = cast(SceneNode, parent_node.getParent()) - for single_node in BreadthFirstIterator(parent_node): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. + for single_node in BreadthFirstIterator(parent_node): # type: ignore #Ignore type error because iter() should get called automatically by Python syntax. nodes_to_change.append(single_node) if not nodes_to_change: diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 4dee5ae813..4d3d2434ff 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1,10 +1,10 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import os import sys import time -from typing import cast, TYPE_CHECKING +from typing import cast, TYPE_CHECKING, Optional, Callable, List import numpy @@ -13,6 +13,8 @@ from PyQt5.QtGui import QColor, QIcon from PyQt5.QtWidgets import QMessageBox from PyQt5.QtQml import qmlRegisterUncreatableType, qmlRegisterSingletonType, qmlRegisterType +from UM.Application import Application +from UM.PluginError import PluginNotFoundError from UM.Scene.SceneNode import SceneNode from UM.Scene.Camera import Camera from UM.Math.Vector import Vector @@ -36,18 +38,18 @@ from UM.Settings.Validator import Validator from UM.Message import Message from UM.i18n import i18nCatalog from UM.Workspace.WorkspaceReader import WorkspaceReader -from UM.Decorators import deprecated from UM.Operations.AddSceneNodeOperation import AddSceneNodeOperation -from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation from UM.Operations.GroupedOperation import GroupedOperation from UM.Operations.SetTransformOperation import SetTransformOperation +from cura.API import CuraAPI from cura.Arranging.Arrange import Arrange from cura.Arranging.ArrangeObjectsJob import ArrangeObjectsJob from cura.Arranging.ArrangeObjectsAllBuildPlatesJob import ArrangeObjectsAllBuildPlatesJob from cura.Arranging.ShapeArray import ShapeArray from cura.MultiplyObjectsJob import MultiplyObjectsJob +from cura.GlobalStacksModel import GlobalStacksModel from cura.Scene.ConvexHullDecorator import ConvexHullDecorator from cura.Operations.SetParentOperation import SetParentOperation from cura.Scene.SliceableObjectDecorator import SliceableObjectDecorator @@ -60,6 +62,7 @@ from cura.Scene.CuraSceneController import CuraSceneController from UM.Settings.SettingDefinition import SettingDefinition, DefinitionPropertyType from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.SettingFunction import SettingFunction +from cura.Settings.CuraContainerRegistry import CuraContainerRegistry from cura.Settings.MachineNameValidator import MachineNameValidator from cura.Machines.Models.BuildPlateModel import BuildPlateModel @@ -67,9 +70,9 @@ from cura.Machines.Models.NozzleModel import NozzleModel from cura.Machines.Models.QualityProfilesDropDownMenuModel import QualityProfilesDropDownMenuModel from cura.Machines.Models.CustomQualityProfilesDropDownMenuModel import CustomQualityProfilesDropDownMenuModel from cura.Machines.Models.MultiBuildPlateModel import MultiBuildPlateModel -from cura.Machines.Models.MaterialManagementModel import MaterialManagementModel +from cura.Machines.Models.FavoriteMaterialsModel import FavoriteMaterialsModel from cura.Machines.Models.GenericMaterialsModel import GenericMaterialsModel -from cura.Machines.Models.BrandMaterialsModel import BrandMaterialsModel +from cura.Machines.Models.MaterialBrandsModel import MaterialBrandsModel from cura.Machines.Models.QualityManagementModel import QualityManagementModel from cura.Machines.Models.QualitySettingsModel import QualitySettingsModel from cura.Machines.Models.MachineManagementModel import MachineManagementModel @@ -92,7 +95,7 @@ from . import PrintInformation from . import CuraActions from cura.Scene import ZOffsetDecorator from . import CuraSplashScreen -from . import CameraImageProvider +from . import PrintJobPreviewImageProvider from . import MachineActionManager from cura.TaskManagement.OnExitCallbackManager import OnExitCallbackManager @@ -105,32 +108,33 @@ from cura.Settings.MaterialSettingsVisibilityHandler import MaterialSettingsVisi from cura.Settings.ContainerManager import ContainerManager from cura.Settings.SidebarCustomMenuItemsModel import SidebarCustomMenuItemsModel import cura.Settings.cura_empty_instance_containers +from cura.Settings.CuraFormulaFunctions import CuraFormulaFunctions from cura.ObjectsModel import ObjectsModel -from UM.FlameProfiler import pyqtSlot +from cura.PrinterOutputDevice import PrinterOutputDevice +from cura.PrinterOutput.NetworkMJPGImage import NetworkMJPGImage +from cura import ApplicationMetadata, UltimakerCloudAuthentication + +from UM.FlameProfiler import pyqtSlot +from UM.Decorators import override if TYPE_CHECKING: - from plugins.SliceInfoPlugin.SliceInfo import SliceInfo + from cura.Machines.MaterialManager import MaterialManager + from cura.Machines.QualityManager import QualityManager + from UM.Settings.EmptyInstanceContainer import EmptyInstanceContainer + from cura.Settings.GlobalStack import GlobalStack numpy.seterr(all = "ignore") -try: - from cura.CuraVersion import CuraVersion, CuraBuildType, CuraDebugMode, CuraSDKVersion -except ImportError: - CuraVersion = "master" # [CodeStyle: Reflecting imported value] - CuraBuildType = "" - CuraDebugMode = False - CuraSDKVersion = "" - class CuraApplication(QtApplication): # SettingVersion represents the set of settings available in the machine/extruder definitions. # You need to make sure that this version number needs to be increased if there is any non-backwards-compatible # changes of the settings. - SettingVersion = 5 + SettingVersion = 7 Created = False @@ -150,15 +154,19 @@ class CuraApplication(QtApplication): Q_ENUMS(ResourceTypes) def __init__(self, *args, **kwargs): - super().__init__(name = "cura", - version = CuraVersion, - buildtype = CuraBuildType, - is_debug_mode = CuraDebugMode, + super().__init__(name = ApplicationMetadata.CuraAppName, + app_display_name = ApplicationMetadata.CuraAppDisplayName, + version = ApplicationMetadata.CuraVersion, + api_version = ApplicationMetadata.CuraSDKVersion, + buildtype = ApplicationMetadata.CuraBuildType, + is_debug_mode = ApplicationMetadata.CuraDebugMode, tray_icon_name = "cura-icon-32.png", **kwargs) self.default_theme = "cura-light" + self.change_log_url = "https://ultimaker.com/ultimaker-cura-latest-features" + self._boot_loading_time = time.time() self._on_exit_callback_manager = OnExitCallbackManager(self) @@ -166,20 +174,21 @@ class CuraApplication(QtApplication): # Variables set from CLI self._files_to_open = [] self._use_single_instance = False - self._trigger_early_crash = False # For debug only self._single_instance = None + self._cura_formula_functions = None # type: Optional[CuraFormulaFunctions] + self._cura_package_manager = None self._machine_action_manager = None - self.empty_container = None - self.empty_definition_changes_container = None - self.empty_variant_container = None - self.empty_material_container = None - self.empty_quality_container = None - self.empty_quality_changes_container = None + self.empty_container = None # type: EmptyInstanceContainer + self.empty_definition_changes_container = None # type: EmptyInstanceContainer + self.empty_variant_container = None # type: EmptyInstanceContainer + self.empty_material_container = None # type: EmptyInstanceContainer + self.empty_quality_container = None # type: EmptyInstanceContainer + self.empty_quality_changes_container = None # type: EmptyInstanceContainer self._variant_manager = None self._material_manager = None @@ -189,6 +198,8 @@ class CuraApplication(QtApplication): self._container_manager = None self._object_manager = None + self._extruders_model = None + self._extruders_model_with_optional = None self._build_plate_model = None self._multi_build_plate_model = None self._setting_visibility_presets_model = None @@ -199,6 +210,7 @@ class CuraApplication(QtApplication): self._quality_profile_drop_down_menu_model = None self._custom_quality_profile_drop_down_menu_model = None + self._cura_API = CuraAPI(self) self._physics = None self._volume = None @@ -215,7 +227,6 @@ class CuraApplication(QtApplication): self._message_box_callback = None self._message_box_callback_arguments = [] - self._preferred_mimetype = "" self._i18n_catalog = None self._currently_loading_files = [] @@ -238,9 +249,19 @@ class CuraApplication(QtApplication): from cura.Settings.CuraContainerRegistry import CuraContainerRegistry self._container_registry_class = CuraContainerRegistry + # Redefined here in order to please the typing. + self._container_registry = None # type: CuraContainerRegistry from cura.CuraPackageManager import CuraPackageManager self._package_manager_class = CuraPackageManager + @pyqtProperty(str, constant=True) + def ultimakerCloudApiRootUrl(self) -> str: + return UltimakerCloudAuthentication.CuraCloudAPIRoot + + @pyqtProperty(str, constant = True) + def ultimakerCloudAccountRootUrl(self) -> str: + return UltimakerCloudAuthentication.CuraCloudAccountAPIRoot + # Adds command line options to the command line parser. This should be called after the application is created and # before the pre-start. def addCommandLineOptions(self): @@ -262,6 +283,9 @@ class CuraApplication(QtApplication): help = "FOR TESTING ONLY. Trigger an early crash to show the crash dialog.") self._cli_parser.add_argument("file", nargs = "*", help = "Files to load after starting the application.") + def getContainerRegistry(self) -> "CuraContainerRegistry": + return self._container_registry + def parseCliOptions(self): super().parseCliOptions() @@ -270,7 +294,10 @@ class CuraApplication(QtApplication): sys.exit(0) self._use_single_instance = self._cli_args.single_instance - self._trigger_early_crash = self._cli_args.trigger_early_crash + # FOR TESTING ONLY + if self._cli_args.trigger_early_crash: + assert not "This crash is triggered by the trigger_early_crash command line argument." + for filename in self._cli_args.file: self._files_to_open.append(os.path.abspath(filename)) @@ -280,7 +307,8 @@ class CuraApplication(QtApplication): super().initialize() self.__sendCommandToSingleInstance() - self.__initializeSettingDefinitionsAndFunctions() + self._initializeSettingDefinitions() + self._initializeSettingFunctions() self.__addAllResourcesAndContainerResources() self.__addAllEmptyContainers() self.__setLatestResouceVersionsForVersionUpgrade() @@ -288,8 +316,6 @@ class CuraApplication(QtApplication): self._machine_action_manager = MachineActionManager.MachineActionManager(self) self._machine_action_manager.initialize() - self.change_log_url = "https://ultimaker.com/ultimaker-cura-latest-features" - def __sendCommandToSingleInstance(self): self._single_instance = SingleInstance(self, self._files_to_open) @@ -311,33 +337,44 @@ class CuraApplication(QtApplication): resource_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "..", "resources") Resources.addSearchPath(resource_path) - # Adds custom property types, settings types, and extra operators (functions) that need to be registered in - # SettingDefinition and SettingFunction. - def __initializeSettingDefinitionsAndFunctions(self): + @classmethod + def _initializeSettingDefinitions(cls): # Need to do this before ContainerRegistry tries to load the machines - SettingDefinition.addSupportedProperty("settable_per_mesh", DefinitionPropertyType.Any, default = True, read_only = True) - SettingDefinition.addSupportedProperty("settable_per_extruder", DefinitionPropertyType.Any, default = True, read_only = True) + SettingDefinition.addSupportedProperty("settable_per_mesh", DefinitionPropertyType.Any, default=True, + read_only=True) + SettingDefinition.addSupportedProperty("settable_per_extruder", DefinitionPropertyType.Any, default=True, + read_only=True) # this setting can be changed for each group in one-at-a-time mode - SettingDefinition.addSupportedProperty("settable_per_meshgroup", DefinitionPropertyType.Any, default = True, read_only = True) - SettingDefinition.addSupportedProperty("settable_globally", DefinitionPropertyType.Any, default = True, read_only = True) + SettingDefinition.addSupportedProperty("settable_per_meshgroup", DefinitionPropertyType.Any, default=True, + read_only=True) + SettingDefinition.addSupportedProperty("settable_globally", DefinitionPropertyType.Any, default=True, + read_only=True) # From which stack the setting would inherit if not defined per object (handled in the engine) # AND for settings which are not settable_per_mesh: # which extruder is the only extruder this setting is obtained from - SettingDefinition.addSupportedProperty("limit_to_extruder", DefinitionPropertyType.Function, default = "-1", depends_on = "value") + SettingDefinition.addSupportedProperty("limit_to_extruder", DefinitionPropertyType.Function, default="-1", + depends_on="value") # For settings which are not settable_per_mesh and not settable_per_extruder: # A function which determines the glabel/meshgroup value by looking at the values of the setting in all (used) extruders - SettingDefinition.addSupportedProperty("resolve", DefinitionPropertyType.Function, default = None, depends_on = "value") + SettingDefinition.addSupportedProperty("resolve", DefinitionPropertyType.Function, default=None, + depends_on="value") SettingDefinition.addSettingType("extruder", None, str, Validator) SettingDefinition.addSettingType("optional_extruder", None, str, None) SettingDefinition.addSettingType("[int]", None, str, None) - SettingFunction.registerOperator("extruderValues", ExtruderManager.getExtruderValues) - SettingFunction.registerOperator("extruderValue", ExtruderManager.getExtruderValue) - SettingFunction.registerOperator("resolveOrValue", ExtruderManager.getResolveOrValue) - SettingFunction.registerOperator("defaultExtruderPosition", ExtruderManager.getDefaultExtruderPosition) + + # Adds custom property types, settings types, and extra operators (functions) that need to be registered in + # SettingDefinition and SettingFunction. + def _initializeSettingFunctions(self): + self._cura_formula_functions = CuraFormulaFunctions(self) + + SettingFunction.registerOperator("extruderValue", self._cura_formula_functions.getValueInExtruder) + SettingFunction.registerOperator("extruderValues", self._cura_formula_functions.getValuesInAllExtruders) + SettingFunction.registerOperator("resolveOrValue", self._cura_formula_functions.getResolveOrValue) + SettingFunction.registerOperator("defaultExtruderPosition", self._cura_formula_functions.getDefaultExtruderPosition) # Adds all resources and container related resources. def __addAllResourcesAndContainerResources(self) -> None: @@ -368,7 +405,7 @@ class CuraApplication(QtApplication): # Add empty variant, material and quality containers. # Since they are empty, they should never be serialized and instead just programmatically created. # We need them to simplify the switching between materials. - self.empty_container = cura.Settings.cura_empty_instance_containers.empty_container + self.empty_container = cura.Settings.cura_empty_instance_containers.empty_container # type: EmptyInstanceContainer self._container_registry.addContainer( cura.Settings.cura_empty_instance_containers.empty_definition_changes_container) @@ -403,40 +440,39 @@ class CuraApplication(QtApplication): ) # Runs preparations that needs to be done before the starting process. - def startSplashWindowPhase(self): + def startSplashWindowPhase(self) -> None: super().startSplashWindowPhase() - self.setWindowIcon(QIcon(Resources.getPath(Resources.Images, "cura-icon.png"))) + if not self.getIsHeadLess(): + self.setWindowIcon(QIcon(Resources.getPath(Resources.Images, "cura-icon.png"))) self.setRequiredPlugins([ # Misc.: - "ConsoleLogger", - "CuraEngineBackend", - "UserAgreement", - "FileLogger", - "XmlMaterialProfile", - "Toolbox", - "PrepareStage", - "MonitorStage", - "LocalFileOutputDevice", - "LocalContainerProvider", + "ConsoleLogger", #You want to be able to read the log if something goes wrong. + "CuraEngineBackend", #Cura is useless without this one since you can't slice. + "UserAgreement", #Our lawyers want every user to see this at least once. + "FileLogger", #You want to be able to read the log if something goes wrong. + "XmlMaterialProfile", #Cura crashes without this one. + "Toolbox", #This contains the interface to enable/disable plug-ins, so if you disable it you can't enable it back. + "PrepareStage", #Cura is useless without this one since you can't load models. + "PreviewStage", #This shows the list of the plugin views that are installed in Cura. + "MonitorStage", #Major part of Cura's functionality. + "LocalFileOutputDevice", #Major part of Cura's functionality. + "LocalContainerProvider", #Cura is useless without any profiles or setting definitions. # Views: - "SimpleView", - "SimulationView", - "SolidView", + "SimpleView", #Dependency of SolidView. + "SolidView", #Displays models. Cura is useless without it. # Readers & Writers: - "GCodeWriter", - "STLReader", + "GCodeWriter", #Cura is useless if it can't write its output. + "STLReader", #Most common model format, so disabling this makes Cura 90% useless. + "3MFWriter", #Required for writing project files. # Tools: - "CameraTool", - "MirrorTool", - "RotateTool", - "ScaleTool", - "SelectionTool", - "TranslateTool", + "CameraTool", #Needed to see the scene. Cura is useless without it. + "SelectionTool", #Dependency of the rest of the tools. + "TranslateTool", #You'll need this for almost every print. ]) self._i18n_catalog = i18nCatalog("cura") @@ -473,7 +509,8 @@ class CuraApplication(QtApplication): preferences.addPreference("cura/choice_on_profile_override", "always_ask") preferences.addPreference("cura/choice_on_open_project", "always_ask") preferences.addPreference("cura/use_multi_build_plate", False) - + preferences.addPreference("view/settings_list_height", 400) + preferences.addPreference("view/settings_visible", False) preferences.addPreference("cura/currency", "€") preferences.addPreference("cura/material_settings", "{}") @@ -481,7 +518,11 @@ class CuraApplication(QtApplication): preferences.addPreference("view/filter_current_build_plate", False) preferences.addPreference("cura/sidebar_collapsed", False) - self._need_to_show_user_agreement = not self.getPreferences().getValue("general/accepted_user_agreement") + preferences.addPreference("cura/favorite_materials", "") + preferences.addPreference("cura/expanded_brands", "") + preferences.addPreference("cura/expanded_types", "") + + self._need_to_show_user_agreement = not preferences.getValue("general/accepted_user_agreement") for key in [ "dialog_load_path", # dialog_save_path is in LocalFileOutputDevicePlugin @@ -495,26 +536,23 @@ class CuraApplication(QtApplication): self.applicationShuttingDown.connect(self.saveSettings) self.engineCreatedSignal.connect(self._onEngineCreated) - self.globalContainerStackChanged.connect(self._onGlobalContainerChanged) - self._onGlobalContainerChanged() - self.getCuraSceneController().setActiveBuildPlate(0) # Initialize CuraApplication.Created = True def _onEngineCreated(self): - self._qml_engine.addImageProvider("camera", CameraImageProvider.CameraImageProvider()) + self._qml_engine.addImageProvider("print_job_preview", PrintJobPreviewImageProvider.PrintJobPreviewImageProvider()) @pyqtProperty(bool) - def needToShowUserAgreement(self): + def needToShowUserAgreement(self) -> bool: return self._need_to_show_user_agreement - def setNeedToShowUserAgreement(self, set_value = True): + def setNeedToShowUserAgreement(self, set_value = True) -> None: self._need_to_show_user_agreement = set_value # DO NOT call this function to close the application, use checkAndExitApplication() instead which will perform # pre-exit checks such as checking for in-progress USB printing, etc. - def closeApplication(self): + def closeApplication(self) -> None: Logger.log("i", "Close application") main_window = self.getMainWindow() if main_window is not None: @@ -541,11 +579,11 @@ class CuraApplication(QtApplication): showConfirmExitDialog = pyqtSignal(str, arguments = ["message"]) - def setConfirmExitDialogCallback(self, callback): + def setConfirmExitDialogCallback(self, callback: Callable) -> None: self._confirm_exit_dialog_callback = callback @pyqtSlot(bool) - def callConfirmExitDialogCallback(self, yes_or_no: bool): + def callConfirmExitDialogCallback(self, yes_or_no: bool) -> None: self._confirm_exit_dialog_callback(yes_or_no) ## Signal to connect preferences action in QML @@ -553,9 +591,17 @@ class CuraApplication(QtApplication): ## Show the preferences window @pyqtSlot() - def showPreferences(self): + def showPreferences(self) -> None: self.showPreferencesWindow.emit() + @override(Application) + def getGlobalContainerStack(self) -> Optional["GlobalStack"]: + return self._global_container_stack + + @override(Application) + def setGlobalContainerStack(self, stack: "GlobalStack") -> None: + super().setGlobalContainerStack(stack) + ## A reusable dialogbox # showMessageBox = pyqtSignal(str, str, str, str, int, int, arguments = ["title", "text", "informativeText", "detailedText", "buttons", "icon"]) @@ -567,7 +613,7 @@ class CuraApplication(QtApplication): showDiscardOrKeepProfileChanges = pyqtSignal() - def discardOrKeepProfileChanges(self): + def discardOrKeepProfileChanges(self) -> bool: has_user_interaction = False choice = self.getPreferences().getValue("cura/choice_on_profile_override") if choice == "always_discard": @@ -583,7 +629,7 @@ class CuraApplication(QtApplication): return has_user_interaction @pyqtSlot(str) - def discardOrKeepProfileChangesClosed(self, option): + def discardOrKeepProfileChangesClosed(self, option: str) -> None: global_stack = self.getGlobalContainerStack() if option == "discard": for extruder in global_stack.extruders.values(): @@ -603,9 +649,7 @@ class CuraApplication(QtApplication): self._message_box_callback(button, *self._message_box_callback_arguments) self._message_box_callback = None self._message_box_callback_arguments = [] - - showPrintMonitor = pyqtSignal(bool, arguments = ["show"]) - + def setSaveDataEnabled(self, enabled: bool) -> None: self._save_data_enabled = enabled @@ -631,12 +675,12 @@ class CuraApplication(QtApplication): ## Handle loading of all plugin types (and the backend explicitly) # \sa PluginRegistry - def _loadPlugins(self): + def _loadPlugins(self) -> None: self._plugin_registry.addType("profile_reader", self._addProfileReader) self._plugin_registry.addType("profile_writer", self._addProfileWriter) if Platform.isLinux(): - lib_suffixes = {"", "64", "32", "x32"} #A few common ones on different distributions. + lib_suffixes = {"", "64", "32", "x32"} # A few common ones on different distributions. else: lib_suffixes = {""} for suffix in lib_suffixes: @@ -668,11 +712,11 @@ class CuraApplication(QtApplication): Logger.log("i", "Initializing quality manager") from cura.Machines.QualityManager import QualityManager - self._quality_manager = QualityManager(container_registry, parent = self) + self._quality_manager = QualityManager(self, parent = self) self._quality_manager.initialize() Logger.log("i", "Initializing machine manager") - self._machine_manager = MachineManager(self) + self._machine_manager = MachineManager(self, parent = self) Logger.log("i", "Initializing container manager") self._container_manager = ContainerManager(self) @@ -695,10 +739,11 @@ class CuraApplication(QtApplication): self._print_information = PrintInformation.PrintInformation(self) self._cura_actions = CuraActions.CuraActions(self) - # Initialize setting visibility presets model - self._setting_visibility_presets_model = SettingVisibilityPresetsModel(self) - default_visibility_profile = self._setting_visibility_presets_model.getItem(0) - self.getPreferences().setDefault("general/visible_settings", ";".join(default_visibility_profile["settings"])) + # Initialize setting visibility presets model. + self._setting_visibility_presets_model = SettingVisibilityPresetsModel(self.getPreferences(), parent = self) + + # Initialize Cura API + self._cura_API.initialize() # Detect in which mode to run and execute that mode if self._is_headless: @@ -798,6 +843,11 @@ class CuraApplication(QtApplication): def getSettingVisibilityPresetsModel(self, *args) -> SettingVisibilityPresetsModel: return self._setting_visibility_presets_model + def getCuraFormulaFunctions(self, *args) -> "CuraFormulaFunctions": + if self._cura_formula_functions is None: + self._cura_formula_functions = CuraFormulaFunctions(self) + return self._cura_formula_functions + def getMachineErrorChecker(self, *args) -> MachineErrorChecker: return self._machine_error_checker @@ -806,20 +856,20 @@ class CuraApplication(QtApplication): self._machine_manager = MachineManager(self) return self._machine_manager - def getExtruderManager(self, *args): + def getExtruderManager(self, *args) -> ExtruderManager: if self._extruder_manager is None: self._extruder_manager = ExtruderManager() return self._extruder_manager - def getVariantManager(self, *args): + def getVariantManager(self, *args) -> VariantManager: return self._variant_manager @pyqtSlot(result = QObject) - def getMaterialManager(self, *args): + def getMaterialManager(self, *args) -> "MaterialManager": return self._material_manager @pyqtSlot(result = QObject) - def getQualityManager(self, *args): + def getQualityManager(self, *args) -> "QualityManager": return self._quality_manager def getObjectsModel(self, *args): @@ -828,23 +878,36 @@ class CuraApplication(QtApplication): return self._object_manager @pyqtSlot(result = QObject) - def getMultiBuildPlateModel(self, *args): + def getExtrudersModel(self, *args) -> "ExtrudersModel": + if self._extruders_model is None: + self._extruders_model = ExtrudersModel(self) + return self._extruders_model + + @pyqtSlot(result = QObject) + def getExtrudersModelWithOptional(self, *args) -> "ExtrudersModel": + if self._extruders_model_with_optional is None: + self._extruders_model_with_optional = ExtrudersModel(self) + self._extruders_model_with_optional.setAddOptionalExtruder(True) + return self._extruders_model_with_optional + + @pyqtSlot(result = QObject) + def getMultiBuildPlateModel(self, *args) -> MultiBuildPlateModel: if self._multi_build_plate_model is None: self._multi_build_plate_model = MultiBuildPlateModel(self) return self._multi_build_plate_model @pyqtSlot(result = QObject) - def getBuildPlateModel(self, *args): + def getBuildPlateModel(self, *args) -> BuildPlateModel: if self._build_plate_model is None: self._build_plate_model = BuildPlateModel(self) return self._build_plate_model - def getCuraSceneController(self, *args): + def getCuraSceneController(self, *args) -> CuraSceneController: if self._cura_scene_controller is None: self._cura_scene_controller = CuraSceneController.createCuraSceneController() return self._cura_scene_controller - def getSettingInheritanceManager(self, *args): + def getSettingInheritanceManager(self, *args) -> SettingInheritanceManager: if self._setting_inheritance_manager is None: self._setting_inheritance_manager = SettingInheritanceManager.createSettingInheritanceManager() return self._setting_inheritance_manager @@ -887,6 +950,9 @@ class CuraApplication(QtApplication): self._custom_quality_profile_drop_down_menu_model = CustomQualityProfilesDropDownMenuModel(self) return self._custom_quality_profile_drop_down_menu_model + def getCuraAPI(self, *args, **kwargs) -> "CuraAPI": + return self._cura_API + ## Registers objects for the QML engine to use. # # \param engine The QML engine. @@ -898,7 +964,7 @@ class CuraApplication(QtApplication): engine.rootContext().setContextProperty("CuraApplication", self) engine.rootContext().setContextProperty("PrintInformation", self._print_information) engine.rootContext().setContextProperty("CuraActions", self._cura_actions) - engine.rootContext().setContextProperty("CuraSDKVersion", CuraSDKVersion) + engine.rootContext().setContextProperty("CuraSDKVersion", ApplicationMetadata.CuraSDKVersion) qmlRegisterUncreatableType(CuraApplication, "Cura", 1, 0, "ResourceTypes", "Just an Enum type") @@ -909,15 +975,18 @@ class CuraApplication(QtApplication): qmlRegisterSingletonType(SimpleModeSettingsManager, "Cura", 1, 0, "SimpleModeSettingsManager", self.getSimpleModeSettingsManager) qmlRegisterSingletonType(MachineActionManager.MachineActionManager, "Cura", 1, 0, "MachineActionManager", self.getMachineActionManager) + qmlRegisterType(NetworkMJPGImage, "Cura", 1, 0, "NetworkMJPGImage") + qmlRegisterSingletonType(ObjectsModel, "Cura", 1, 0, "ObjectsModel", self.getObjectsModel) qmlRegisterType(BuildPlateModel, "Cura", 1, 0, "BuildPlateModel") qmlRegisterType(MultiBuildPlateModel, "Cura", 1, 0, "MultiBuildPlateModel") qmlRegisterType(InstanceContainer, "Cura", 1, 0, "InstanceContainer") qmlRegisterType(ExtrudersModel, "Cura", 1, 0, "ExtrudersModel") + qmlRegisterType(GlobalStacksModel, "Cura", 1, 0, "GlobalStacksModel") + qmlRegisterType(FavoriteMaterialsModel, "Cura", 1, 0, "FavoriteMaterialsModel") qmlRegisterType(GenericMaterialsModel, "Cura", 1, 0, "GenericMaterialsModel") - qmlRegisterType(BrandMaterialsModel, "Cura", 1, 0, "BrandMaterialsModel") - qmlRegisterType(MaterialManagementModel, "Cura", 1, 0, "MaterialManagementModel") + qmlRegisterType(MaterialBrandsModel, "Cura", 1, 0, "MaterialBrandsModel") qmlRegisterType(QualityManagementModel, "Cura", 1, 0, "QualityManagementModel") qmlRegisterType(MachineManagementModel, "Cura", 1, 0, "MachineManagementModel") @@ -935,6 +1004,11 @@ class CuraApplication(QtApplication): qmlRegisterSingletonType(ContainerManager, "Cura", 1, 0, "ContainerManager", ContainerManager.getInstance) qmlRegisterType(SidebarCustomMenuItemsModel, "Cura", 1, 0, "SidebarCustomMenuItemsModel") + qmlRegisterType(PrinterOutputDevice, "Cura", 1, 0, "PrinterOutputDevice") + + from cura.API import CuraAPI + qmlRegisterSingletonType(CuraAPI, "Cura", 1, 1, "API", self.getCuraAPI) + # As of Qt5.7, it is necessary to get rid of any ".." in the path for the singleton to work. actions_url = QUrl.fromLocalFile(os.path.abspath(Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, "Actions.qml"))) qmlRegisterSingletonType(actions_url, "Cura", 1, 0, "Actions") @@ -981,30 +1055,14 @@ class CuraApplication(QtApplication): self._camera_animation.setTarget(Selection.getSelectedObject(0).getWorldPosition()) self._camera_animation.start() - def _onGlobalContainerChanged(self): - if self._global_container_stack is not None: - machine_file_formats = [file_type.strip() for file_type in self._global_container_stack.getMetaDataEntry("file_formats").split(";")] - new_preferred_mimetype = "" - if machine_file_formats: - new_preferred_mimetype = machine_file_formats[0] - - if new_preferred_mimetype != self._preferred_mimetype: - self._preferred_mimetype = new_preferred_mimetype - self.preferredOutputMimetypeChanged.emit() - requestAddPrinter = pyqtSignal() activityChanged = pyqtSignal() sceneBoundingBoxChanged = pyqtSignal() - preferredOutputMimetypeChanged = pyqtSignal() @pyqtProperty(bool, notify = activityChanged) def platformActivity(self): return self._platform_activity - @pyqtProperty(str, notify=preferredOutputMimetypeChanged) - def preferredOutputMimetype(self): - return self._preferred_mimetype - @pyqtProperty(str, notify = sceneBoundingBoxChanged) def getSceneBoundingBoxString(self): return self._i18n_catalog.i18nc("@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm.", "%(width).1f x %(depth).1f x %(height).1f mm") % {'width' : self._scene_bounding_box.width.item(), 'depth': self._scene_bounding_box.depth.item(), 'height' : self._scene_bounding_box.height.item()} @@ -1058,88 +1116,6 @@ class CuraApplication(QtApplication): self._platform_activity = True if count > 0 else False self.activityChanged.emit() - # Remove all selected objects from the scene. - @pyqtSlot() - @deprecated("Moved to CuraActions", "2.6") - def deleteSelection(self): - if not self.getController().getToolsEnabled(): - return - removed_group_nodes = [] - op = GroupedOperation() - nodes = Selection.getAllSelectedObjects() - for node in nodes: - op.addOperation(RemoveSceneNodeOperation(node)) - group_node = node.getParent() - if group_node and group_node.callDecoration("isGroup") and group_node not in removed_group_nodes: - remaining_nodes_in_group = list(set(group_node.getChildren()) - set(nodes)) - if len(remaining_nodes_in_group) == 1: - removed_group_nodes.append(group_node) - op.addOperation(SetParentOperation(remaining_nodes_in_group[0], group_node.getParent())) - op.addOperation(RemoveSceneNodeOperation(group_node)) - op.push() - - ## Remove an object from the scene. - # Note that this only removes an object if it is selected. - @pyqtSlot("quint64") - @deprecated("Use deleteSelection instead", "2.6") - def deleteObject(self, object_id): - if not self.getController().getToolsEnabled(): - return - - node = self.getController().getScene().findObject(object_id) - - if not node and object_id != 0: # Workaround for tool handles overlapping the selected object - node = Selection.getSelectedObject(0) - - if node: - op = GroupedOperation() - op.addOperation(RemoveSceneNodeOperation(node)) - - group_node = node.getParent() - if group_node: - # Note that at this point the node has not yet been deleted - if len(group_node.getChildren()) <= 2 and group_node.callDecoration("isGroup"): - op.addOperation(SetParentOperation(group_node.getChildren()[0], group_node.getParent())) - op.addOperation(RemoveSceneNodeOperation(group_node)) - - op.push() - - ## Create a number of copies of existing object. - # \param object_id - # \param count number of copies - # \param min_offset minimum offset to other objects. - @pyqtSlot("quint64", int) - @deprecated("Use CuraActions::multiplySelection", "2.6") - def multiplyObject(self, object_id, count, min_offset = 8): - node = self.getController().getScene().findObject(object_id) - if not node: - node = Selection.getSelectedObject(0) - - while node.getParent() and node.getParent().callDecoration("isGroup"): - node = node.getParent() - - job = MultiplyObjectsJob([node], count, min_offset) - job.start() - return - - ## Center object on platform. - @pyqtSlot("quint64") - @deprecated("Use CuraActions::centerSelection", "2.6") - def centerObject(self, object_id): - node = self.getController().getScene().findObject(object_id) - if not node and object_id != 0: # Workaround for tool handles overlapping the selected object - node = Selection.getSelectedObject(0) - - if not node: - return - - if node.getParent() and node.getParent().callDecoration("isGroup"): - node = node.getParent() - - if node: - op = SetTransformOperation(node, Vector()) - op.push() - ## Select all nodes containing mesh data in the scene. @pyqtSlot() def selectAll(self): @@ -1219,62 +1195,75 @@ class CuraApplication(QtApplication): ## Arrange all objects. @pyqtSlot() - def arrangeObjectsToAllBuildPlates(self): - nodes = [] - for node in DepthFirstIterator(self.getController().getScene().getRoot()): + def arrangeObjectsToAllBuildPlates(self) -> None: + nodes_to_arrange = [] + for node in DepthFirstIterator(self.getController().getScene().getRoot()): # type: ignore if not isinstance(node, SceneNode): continue + if not node.getMeshData() and not node.callDecoration("isGroup"): continue # Node that doesnt have a mesh and is not a group. - if node.getParent() and node.getParent().callDecoration("isGroup"): - continue # Grouped nodes don't need resetting as their parent (the group) is resetted) + + parent_node = node.getParent() + if parent_node and parent_node.callDecoration("isGroup"): + continue # Grouped nodes don't need resetting as their parent (the group) is reset) + if not node.callDecoration("isSliceable") and not node.callDecoration("isGroup"): continue # i.e. node with layer data + + bounding_box = node.getBoundingBox() # Skip nodes that are too big - if node.getBoundingBox().width < self._volume.getBoundingBox().width or node.getBoundingBox().depth < self._volume.getBoundingBox().depth: - nodes.append(node) - job = ArrangeObjectsAllBuildPlatesJob(nodes) + if bounding_box is None or bounding_box.width < self._volume.getBoundingBox().width or bounding_box.depth < self._volume.getBoundingBox().depth: + nodes_to_arrange.append(node) + job = ArrangeObjectsAllBuildPlatesJob(nodes_to_arrange) job.start() self.getCuraSceneController().setActiveBuildPlate(0) # Select first build plate # Single build plate @pyqtSlot() - def arrangeAll(self): - nodes = [] + def arrangeAll(self) -> None: + nodes_to_arrange = [] active_build_plate = self.getMultiBuildPlateModel().activeBuildPlate - for node in DepthFirstIterator(self.getController().getScene().getRoot()): + for node in DepthFirstIterator(self.getController().getScene().getRoot()): # type: ignore if not isinstance(node, SceneNode): continue + if not node.getMeshData() and not node.callDecoration("isGroup"): continue # Node that doesnt have a mesh and is not a group. - if node.getParent() and node.getParent().callDecoration("isGroup"): + + parent_node = node.getParent() + if parent_node and parent_node.callDecoration("isGroup"): continue # Grouped nodes don't need resetting as their parent (the group) is resetted) + if not node.isSelectable(): continue # i.e. node with layer data + if not node.callDecoration("isSliceable") and not node.callDecoration("isGroup"): continue # i.e. node with layer data + if node.callDecoration("getBuildPlateNumber") == active_build_plate: # Skip nodes that are too big - if node.getBoundingBox().width < self._volume.getBoundingBox().width or node.getBoundingBox().depth < self._volume.getBoundingBox().depth: - nodes.append(node) - self.arrange(nodes, fixed_nodes = []) + bounding_box = node.getBoundingBox() + if bounding_box is None or bounding_box.width < self._volume.getBoundingBox().width or bounding_box.depth < self._volume.getBoundingBox().depth: + nodes_to_arrange.append(node) + self.arrange(nodes_to_arrange, fixed_nodes = []) ## Arrange a set of nodes given a set of fixed nodes # \param nodes nodes that we have to place # \param fixed_nodes nodes that are placed in the arranger before finding spots for nodes - def arrange(self, nodes, fixed_nodes): + def arrange(self, nodes: List[SceneNode], fixed_nodes: List[SceneNode]) -> None: min_offset = self.getBuildVolume().getEdgeDisallowedSize() + 2 # Allow for some rounding errors job = ArrangeObjectsJob(nodes, fixed_nodes, min_offset = max(min_offset, 8)) job.start() ## Reload all mesh data on the screen from file. @pyqtSlot() - def reloadAll(self): + def reloadAll(self) -> None: Logger.log("i", "Reloading all loaded mesh data.") nodes = [] has_merged_nodes = False - for node in DepthFirstIterator(self.getController().getScene().getRoot()): - if not isinstance(node, CuraSceneNode) or not node.getMeshData() : + for node in DepthFirstIterator(self.getController().getScene().getRoot()): # type: ignore + if not isinstance(node, CuraSceneNode) or not node.getMeshData(): if node.getName() == "MergedMesh": has_merged_nodes = True continue @@ -1288,7 +1277,7 @@ class CuraApplication(QtApplication): file_name = node.getMeshData().getFileName() if file_name: job = ReadMeshJob(file_name) - job._node = node + job._node = node # type: ignore job.finished.connect(self._reloadMeshFinished) if has_merged_nodes: job.finished.connect(self.updateOriginOfMergedMeshes) @@ -1297,20 +1286,8 @@ class CuraApplication(QtApplication): else: Logger.log("w", "Unable to reload data because we don't have a filename.") - - ## Get logging data of the backend engine - # \returns \type{string} Logging data - @pyqtSlot(result = str) - def getEngineLog(self): - log = "" - - for entry in self.getBackend().getLog(): - log += entry.decode() - - return log - @pyqtSlot("QStringList") - def setExpandedCategories(self, categories): + def setExpandedCategories(self, categories: List[str]) -> None: categories = list(set(categories)) categories.sort() joined = ";".join(categories) @@ -1321,7 +1298,7 @@ class CuraApplication(QtApplication): expandedCategoriesChanged = pyqtSignal() @pyqtProperty("QStringList", notify = expandedCategoriesChanged) - def expandedCategories(self): + def expandedCategories(self) -> List[str]: return self.getPreferences().getValue("cura/categories_expanded").split(";") @pyqtSlot() @@ -1371,13 +1348,12 @@ class CuraApplication(QtApplication): ## Updates origin position of all merged meshes - # \param jobNode \type{Job} empty object which passed which is required by JobQueue - def updateOriginOfMergedMeshes(self, jobNode): + def updateOriginOfMergedMeshes(self, _): group_nodes = [] for node in DepthFirstIterator(self.getController().getScene().getRoot()): if isinstance(node, CuraSceneNode) and node.getName() == "MergedMesh": - #checking by name might be not enough, the merged mesh should has "GroupDecorator" decorator + # Checking by name might be not enough, the merged mesh should has "GroupDecorator" decorator for decorator in node.getDecorators(): if isinstance(decorator, GroupDecorator): group_nodes.append(node) @@ -1421,7 +1397,7 @@ class CuraApplication(QtApplication): @pyqtSlot() - def groupSelected(self): + def groupSelected(self) -> None: # Create a group-node group_node = CuraSceneNode() group_decorator = GroupDecorator() @@ -1437,7 +1413,8 @@ class CuraApplication(QtApplication): # Remove nodes that are directly parented to another selected node from the selection so they remain parented selected_nodes = Selection.getAllSelectedObjects().copy() for node in selected_nodes: - if node.getParent() in selected_nodes and not node.getParent().callDecoration("isGroup"): + parent = node.getParent() + if parent is not None and parent in selected_nodes and not parent.callDecoration("isGroup"): Selection.remove(node) # Move selected nodes into the group-node @@ -1449,7 +1426,7 @@ class CuraApplication(QtApplication): Selection.add(group_node) @pyqtSlot() - def ungroupSelected(self): + def ungroupSelected(self) -> None: selected_objects = Selection.getAllSelectedObjects().copy() for node in selected_objects: if node.callDecoration("isGroup"): @@ -1472,7 +1449,7 @@ class CuraApplication(QtApplication): # Note: The group removes itself from the scene once all its children have left it, # see GroupDecorator._onChildrenChanged - def _createSplashScreen(self): + def _createSplashScreen(self) -> Optional[CuraSplashScreen.CuraSplashScreen]: if self._is_headless: return None return CuraSplashScreen.CuraSplashScreen() @@ -1590,6 +1567,11 @@ class CuraApplication(QtApplication): job.start() def _readMeshFinished(self, job): + global_container_stack = self.getGlobalContainerStack() + if not global_container_stack: + Logger.log("w", "Can't load meshes before a printer is added.") + return + nodes = job.getResult() file_name = job.getFileName() file_name_lower = file_name.lower() @@ -1604,7 +1586,6 @@ class CuraApplication(QtApplication): for node_ in DepthFirstIterator(root): if node_.callDecoration("isSliceable") and node_.callDecoration("getBuildPlateNumber") == target_build_plate: fixed_nodes.append(node_) - global_container_stack = self.getGlobalContainerStack() machine_width = global_container_stack.getProperty("machine_width", "value") machine_depth = global_container_stack.getProperty("machine_depth", "value") arranger = Arrange.create(x = machine_width, y = machine_depth, fixed_nodes = fixed_nodes) @@ -1634,7 +1615,9 @@ class CuraApplication(QtApplication): is_non_sliceable = "." + file_extension in self._non_sliceable_extensions if is_non_sliceable: - self.callLater(lambda: self.getController().setActiveView("SimulationView")) + # Need to switch first to the preview stage and then to layer view + self.callLater(lambda: (self.getController().setActiveStage("PreviewStage"), + self.getController().setActiveView("SimulationView"))) block_slicing_decorator = BlockSlicingDecorator() node.addDecorator(block_slicing_decorator) @@ -1720,7 +1703,11 @@ class CuraApplication(QtApplication): @pyqtSlot() def showMoreInformationDialogForAnonymousDataCollection(self): - cast(SliceInfo, self._plugin_registry.getPluginObject("SliceInfoPlugin")).showMoreInfoDialog() + try: + slice_info = self._plugin_registry.getPluginObject("SliceInfoPlugin") + slice_info.showMoreInfoDialog() + except PluginNotFoundError: + Logger.log("w", "Plugin SliceInfo was not found, so not able to show the info dialog.") def addSidebarCustomMenuItem(self, menu_item: dict) -> None: self._sidebar_custom_menu_items.append(menu_item) diff --git a/cura/CuraVersion.py.in b/cura/CuraVersion.py.in index 226b2183f2..1a500df248 100644 --- a/cura/CuraVersion.py.in +++ b/cura/CuraVersion.py.in @@ -1,9 +1,12 @@ -# Copyright (c) 2015 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +CuraAppName = "@CURA_APP_NAME@" +CuraAppDisplayName = "@CURA_APP_DISPLAY_NAME@" CuraVersion = "@CURA_VERSION@" CuraBuildType = "@CURA_BUILDTYPE@" CuraDebugMode = True if "@_cura_debugmode@" == "ON" else False CuraSDKVersion = "@CURA_SDK_VERSION@" CuraCloudAPIRoot = "@CURA_CLOUD_API_ROOT@" CuraCloudAPIVersion = "@CURA_CLOUD_API_VERSION@" +CuraCloudAccountAPIRoot = "@CURA_CLOUD_ACCOUNT_API_ROOT@" diff --git a/cura/CuraView.py b/cura/CuraView.py new file mode 100644 index 0000000000..978c651b43 --- /dev/null +++ b/cura/CuraView.py @@ -0,0 +1,24 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from PyQt5.QtCore import pyqtProperty, QUrl + +from UM.View.View import View + + +# Since Cura has a few pre-defined "space claims" for the locations of certain components, we've provided some structure +# to indicate this. +# MainComponent works in the same way the MainComponent of a stage. +# the stageMenuComponent returns an item that should be used somehwere in the stage menu. It's up to the active stage +# to actually do something with this. +class CuraView(View): + def __init__(self, parent = None) -> None: + super().__init__(parent) + + @pyqtProperty(QUrl, constant = True) + def mainComponent(self) -> QUrl: + return self.getDisplayComponent("main") + + @pyqtProperty(QUrl, constant = True) + def stageMenuComponent(self) -> QUrl: + return self.getDisplayComponent("menu") \ No newline at end of file diff --git a/cura/GlobalStacksModel.py b/cura/GlobalStacksModel.py new file mode 100644 index 0000000000..3c3321e5ca --- /dev/null +++ b/cura/GlobalStacksModel.py @@ -0,0 +1,70 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + + +from UM.Qt.ListModel import ListModel + +from PyQt5.QtCore import pyqtProperty, Qt, QTimer + +from cura.PrinterOutputDevice import ConnectionType +from cura.Settings.CuraContainerRegistry import CuraContainerRegistry + +from cura.Settings.GlobalStack import GlobalStack + + +class GlobalStacksModel(ListModel): + NameRole = Qt.UserRole + 1 + IdRole = Qt.UserRole + 2 + HasRemoteConnectionRole = Qt.UserRole + 3 + ConnectionTypeRole = Qt.UserRole + 4 + MetaDataRole = Qt.UserRole + 5 + + def __init__(self, parent = None): + super().__init__(parent) + self.addRoleName(self.NameRole, "name") + self.addRoleName(self.IdRole, "id") + self.addRoleName(self.HasRemoteConnectionRole, "hasRemoteConnection") + self.addRoleName(self.MetaDataRole, "metadata") + self._container_stacks = [] + + self._change_timer = QTimer() + self._change_timer.setInterval(200) + self._change_timer.setSingleShot(True) + self._change_timer.timeout.connect(self._update) + + # Listen to changes + CuraContainerRegistry.getInstance().containerAdded.connect(self._onContainerChanged) + CuraContainerRegistry.getInstance().containerMetaDataChanged.connect(self._onContainerChanged) + CuraContainerRegistry.getInstance().containerRemoved.connect(self._onContainerChanged) + self._filter_dict = {} + self._updateDelayed() + + ## Handler for container added/removed events from registry + def _onContainerChanged(self, container): + # We only need to update when the added / removed container GlobalStack + if isinstance(container, GlobalStack): + self._updateDelayed() + + def _updateDelayed(self): + self._change_timer.start() + + def _update(self) -> None: + items = [] + + container_stacks = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine") + + for container_stack in container_stacks: + has_remote_connection = False + + for connection_type in container_stack.configuredConnectionTypes: + has_remote_connection |= connection_type in [ConnectionType.NetworkConnection.value, ConnectionType.CloudConnection.value] + + if container_stack.getMetaDataEntry("hidden", False) in ["True", True]: + continue + + items.append({"name": container_stack.getMetaDataEntry("group_name", container_stack.getName()), + "id": container_stack.getId(), + "hasRemoteConnection": has_remote_connection, + "metadata": container_stack.getMetaData().copy()}) + items.sort(key=lambda i: not i["hasRemoteConnection"]) + self.setItems(items) diff --git a/cura/LayerDataBuilder.py b/cura/LayerDataBuilder.py index d6cc81a4e9..e8d1b8c59f 100755 --- a/cura/LayerDataBuilder.py +++ b/cura/LayerDataBuilder.py @@ -7,43 +7,36 @@ from UM.Mesh.MeshBuilder import MeshBuilder from .LayerData import LayerData import numpy +from typing import Dict, Optional ## Builder class for constructing a LayerData object class LayerDataBuilder(MeshBuilder): - def __init__(self): + def __init__(self) -> None: super().__init__() - self._layers = {} - self._element_counts = {} + self._layers = {} # type: Dict[int, Layer] + self._element_counts = {} # type: Dict[int, int] - def addLayer(self, layer): + def addLayer(self, layer: int) -> None: if layer not in self._layers: self._layers[layer] = Layer(layer) - def addPolygon(self, layer, polygon_type, data, line_width, line_thickness, line_feedrate): - if layer not in self._layers: - self.addLayer(layer) + def getLayer(self, layer: int) -> Optional[Layer]: + return self._layers.get(layer) - p = LayerPolygon(self, polygon_type, data, line_width, line_thickness, line_feedrate) - self._layers[layer].polygons.append(p) - - def getLayer(self, layer): - if layer in self._layers: - return self._layers[layer] - - def getLayers(self): + def getLayers(self) -> Dict[int, Layer]: return self._layers - def getElementCounts(self): + def getElementCounts(self) -> Dict[int, int]: return self._element_counts - def setLayerHeight(self, layer, height): + def setLayerHeight(self, layer: int, height: float) -> None: if layer not in self._layers: self.addLayer(layer) self._layers[layer].setHeight(height) - def setLayerThickness(self, layer, thickness): + def setLayerThickness(self, layer: int, thickness: float) -> None: if layer not in self._layers: self.addLayer(layer) @@ -71,7 +64,7 @@ class LayerDataBuilder(MeshBuilder): vertex_offset = 0 index_offset = 0 for layer, data in sorted(self._layers.items()): - ( vertex_offset, index_offset ) = data.build( vertex_offset, index_offset, vertices, colors, line_dimensions, feedrates, extruders, line_types, indices) + vertex_offset, index_offset = data.build(vertex_offset, index_offset, vertices, colors, line_dimensions, feedrates, extruders, line_types, indices) self._element_counts[layer] = data.elementCount self.addVertices(vertices) diff --git a/cura/LayerDataDecorator.py b/cura/LayerDataDecorator.py index c04479972a..ef82d8f5cc 100644 --- a/cura/LayerDataDecorator.py +++ b/cura/LayerDataDecorator.py @@ -1,13 +1,25 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from typing import Optional from UM.Scene.SceneNodeDecorator import SceneNodeDecorator +from cura.LayerData import LayerData + + ## Simple decorator to indicate a scene node holds layer data. class LayerDataDecorator(SceneNodeDecorator): def __init__(self): super().__init__() - self._layer_data = None - - def getLayerData(self): + self._layer_data = None # type: Optional[LayerData] + + def getLayerData(self) -> Optional["LayerData"]: return self._layer_data - - def setLayerData(self, layer_data): - self._layer_data = layer_data \ No newline at end of file + + def setLayerData(self, layer_data: LayerData) -> None: + self._layer_data = layer_data + + def __deepcopy__(self, memo) -> "LayerDataDecorator": + copied_decorator = LayerDataDecorator() + copied_decorator._layer_data = self._layer_data + return copied_decorator diff --git a/cura/LayerPolygon.py b/cura/LayerPolygon.py index 9766e0c82a..072d5f94f5 100644 --- a/cura/LayerPolygon.py +++ b/cura/LayerPolygon.py @@ -2,9 +2,11 @@ # Cura is released under the terms of the LGPLv3 or higher. from UM.Application import Application -from typing import Any +from typing import Any, Optional import numpy +from UM.Logger import Logger + class LayerPolygon: NoneType = 0 @@ -18,22 +20,24 @@ class LayerPolygon: MoveCombingType = 8 MoveRetractionType = 9 SupportInterfaceType = 10 - __number_of_types = 11 + PrimeTower = 11 + __number_of_types = 12 __jump_map = numpy.logical_or(numpy.logical_or(numpy.arange(__number_of_types) == NoneType, numpy.arange(__number_of_types) == MoveCombingType), numpy.arange(__number_of_types) == MoveRetractionType) - + ## LayerPolygon, used in ProcessSlicedLayersJob - # \param extruder + # \param extruder The position of the extruder # \param line_types array with line_types # \param data new_points # \param line_widths array with line widths # \param line_thicknesses: array with type as index and thickness as value # \param line_feedrates array with line feedrates - def __init__(self, extruder, line_types, data, line_widths, line_thicknesses, line_feedrates): + def __init__(self, extruder: int, line_types: numpy.ndarray, data: numpy.ndarray, line_widths: numpy.ndarray, line_thicknesses: numpy.ndarray, line_feedrates: numpy.ndarray) -> None: self._extruder = extruder self._types = line_types for i in range(len(self._types)): - if self._types[i] >= self.__number_of_types: #Got faulty line data from the engine. + if self._types[i] >= self.__number_of_types: # Got faulty line data from the engine. + Logger.log("w", "Found an unknown line type: %s", i) self._types[i] = self.NoneType self._data = data self._line_widths = line_widths @@ -53,16 +57,16 @@ class LayerPolygon: # Buffering the colors shouldn't be necessary as it is not # re-used and can save alot of memory usage. self._color_map = LayerPolygon.getColorMap() - self._colors = self._color_map[self._types] + self._colors = self._color_map[self._types] # type: numpy.ndarray # When type is used as index returns true if type == LayerPolygon.InfillType or type == LayerPolygon.SkinType or type == LayerPolygon.SupportInfillType # Should be generated in better way, not hardcoded. self._isInfillOrSkinTypeMap = numpy.array([0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1], dtype=numpy.bool) - self._build_cache_line_mesh_mask = None - self._build_cache_needed_points = None + self._build_cache_line_mesh_mask = None # type: Optional[numpy.ndarray] + self._build_cache_needed_points = None # type: Optional[numpy.ndarray] - def buildCache(self): + def buildCache(self) -> None: # For the line mesh we do not draw Infill or Jumps. Therefore those lines are filtered out. self._build_cache_line_mesh_mask = numpy.ones(self._jump_mask.shape, dtype=bool) mesh_line_count = numpy.sum(self._build_cache_line_mesh_mask) @@ -90,10 +94,14 @@ class LayerPolygon: # \param extruders : vertex numpy array to be filled # \param line_types : vertex numpy array to be filled # \param indices : index numpy array to be filled - def build(self, vertex_offset, index_offset, vertices, colors, line_dimensions, feedrates, extruders, line_types, indices): + def build(self, vertex_offset: int, index_offset: int, vertices: numpy.ndarray, colors: numpy.ndarray, line_dimensions: numpy.ndarray, feedrates: numpy.ndarray, extruders: numpy.ndarray, line_types: numpy.ndarray, indices: numpy.ndarray) -> None: if self._build_cache_line_mesh_mask is None or self._build_cache_needed_points is None: self.buildCache() - + + if self._build_cache_line_mesh_mask is None or self._build_cache_needed_points is None: + Logger.log("w", "Failed to build cache for layer polygon") + return + line_mesh_mask = self._build_cache_line_mesh_mask needed_points_list = self._build_cache_needed_points @@ -236,7 +244,8 @@ class LayerPolygon: theme.getColor("layerview_support_infill").getRgbF(), # SupportInfillType theme.getColor("layerview_move_combing").getRgbF(), # MoveCombingType theme.getColor("layerview_move_retraction").getRgbF(), # MoveRetractionType - theme.getColor("layerview_support_interface").getRgbF() # SupportInterfaceType + theme.getColor("layerview_support_interface").getRgbF(), # SupportInterfaceType + theme.getColor("layerview_prime_tower").getRgbF() ]) return cls.__color_map diff --git a/cura/MachineAction.py b/cura/MachineAction.py index 969fef0edf..94b096f9c1 100644 --- a/cura/MachineAction.py +++ b/cura/MachineAction.py @@ -1,13 +1,13 @@ # Copyright (c) 2016 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +import os + from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal +from UM.Logger import Logger from UM.PluginObject import PluginObject from UM.PluginRegistry import PluginRegistry -from UM.Application import Application - -import os ## Machine actions are actions that are added to a specific machine type. Examples of such actions are @@ -19,7 +19,7 @@ class MachineAction(QObject, PluginObject): ## Create a new Machine action. # \param key unique key of the machine action # \param label Human readable label used to identify the machine action. - def __init__(self, key, label = ""): + def __init__(self, key: str, label: str = "") -> None: super().__init__() self._key = key self._label = label @@ -30,14 +30,14 @@ class MachineAction(QObject, PluginObject): labelChanged = pyqtSignal() onFinished = pyqtSignal() - def getKey(self): + def getKey(self) -> str: return self._key @pyqtProperty(str, notify = labelChanged) - def label(self): + def label(self) -> str: return self._label - def setLabel(self, label): + def setLabel(self, label: str) -> None: if self._label != label: self._label = label self.labelChanged.emit() @@ -46,29 +46,35 @@ class MachineAction(QObject, PluginObject): # This should not be re-implemented by child classes, instead re-implement _reset. # /sa _reset @pyqtSlot() - def reset(self): + def reset(self) -> None: self._finished = False self._reset() ## Protected implementation of reset. # /sa reset() - def _reset(self): + def _reset(self) -> None: pass @pyqtSlot() - def setFinished(self): + def setFinished(self) -> None: self._finished = True self._reset() self.onFinished.emit() @pyqtProperty(bool, notify = onFinished) - def finished(self): + def finished(self) -> bool: return self._finished ## Protected helper to create a view object based on provided QML. - def _createViewFromQML(self): - path = os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), self._qml_url) - self._view = Application.getInstance().createQmlComponent(path, {"manager": self}) + def _createViewFromQML(self) -> None: + plugin_path = PluginRegistry.getInstance().getPluginPath(self.getPluginId()) + if plugin_path is None: + Logger.log("e", "Cannot create QML view: cannot find plugin path for plugin [%s]", self.getPluginId()) + return + path = os.path.join(plugin_path, self._qml_url) + + from cura.CuraApplication import CuraApplication + self._view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self}) @pyqtProperty(QObject, constant = True) def displayItem(self): diff --git a/cura/MachineActionManager.py b/cura/MachineActionManager.py index 65eb33b54c..db0f7bfbff 100644 --- a/cura/MachineActionManager.py +++ b/cura/MachineActionManager.py @@ -1,12 +1,18 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import TYPE_CHECKING, Optional, List, Set, Dict + from PyQt5.QtCore import QObject from UM.FlameProfiler import pyqtSlot from UM.Logger import Logger from UM.PluginRegistry import PluginRegistry # So MachineAction can be added as plugin type -from UM.Settings.DefinitionContainer import DefinitionContainer + +if TYPE_CHECKING: + from cura.CuraApplication import CuraApplication + from cura.Settings.GlobalStack import GlobalStack + from .MachineAction import MachineAction ## Raised when trying to add an unknown machine action as a required action @@ -20,46 +26,54 @@ class NotUniqueMachineActionError(Exception): class MachineActionManager(QObject): - def __init__(self, application, parent = None): - super().__init__(parent) + def __init__(self, application: "CuraApplication", parent: Optional["QObject"] = None) -> None: + super().__init__(parent = parent) self._application = application + self._container_registry = self._application.getContainerRegistry() - self._machine_actions = {} # Dict of all known machine actions - self._required_actions = {} # Dict of all required actions by definition ID - self._supported_actions = {} # Dict of all supported actions by definition ID - self._first_start_actions = {} # Dict of all actions that need to be done when first added by definition ID + # Keeps track of which machines have already been processed so we don't do that again. + self._definition_ids_with_default_actions_added = set() # type: Set[str] + + # Dict of all known machine actions + self._machine_actions = {} # type: Dict[str, MachineAction] + # Dict of all required actions by definition ID + self._required_actions = {} # type: Dict[str, List[MachineAction]] + # Dict of all supported actions by definition ID + self._supported_actions = {} # type: Dict[str, List[MachineAction]] + # Dict of all actions that need to be done when first added by definition ID + self._first_start_actions = {} # type: Dict[str, List[MachineAction]] def initialize(self): - container_registry = self._application.getContainerRegistry() - # Add machine_action as plugin type PluginRegistry.addType("machine_action", self.addMachineAction) - # Ensure that all containers that were registered before creation of this registry are also handled. - # This should not have any effect, but it makes it safer if we ever refactor the order of things. - for container in container_registry.findDefinitionContainers(): - self._onContainerAdded(container) + # Adds all default machine actions that are defined in the machine definition for the given machine. + def addDefaultMachineActions(self, global_stack: "GlobalStack") -> None: + definition_id = global_stack.definition.getId() - container_registry.containerAdded.connect(self._onContainerAdded) + if definition_id in self._definition_ids_with_default_actions_added: + Logger.log("i", "Default machine actions have been added for machine definition [%s], do nothing.", + definition_id) + return - def _onContainerAdded(self, container): - ## Ensure that the actions are added to this manager - if isinstance(container, DefinitionContainer): - supported_actions = container.getMetaDataEntry("supported_actions", []) - for action in supported_actions: - self.addSupportedAction(container.getId(), action) + supported_actions = global_stack.getMetaDataEntry("supported_actions", []) + for action_key in supported_actions: + self.addSupportedAction(definition_id, action_key) - required_actions = container.getMetaDataEntry("required_actions", []) - for action in required_actions: - self.addRequiredAction(container.getId(), action) + required_actions = global_stack.getMetaDataEntry("required_actions", []) + for action_key in required_actions: + self.addRequiredAction(definition_id, action_key) - first_start_actions = container.getMetaDataEntry("first_start_actions", []) - for action in first_start_actions: - self.addFirstStartAction(container.getId(), action) + first_start_actions = global_stack.getMetaDataEntry("first_start_actions", []) + for action_key in first_start_actions: + self.addFirstStartAction(definition_id, action_key) + + self._definition_ids_with_default_actions_added.add(definition_id) + Logger.log("i", "Default machine actions added for machine definition [%s]", definition_id) ## Add a required action to a machine # Raises an exception when the action is not recognised. - def addRequiredAction(self, definition_id, action_key): + def addRequiredAction(self, definition_id: str, action_key: str) -> None: if action_key in self._machine_actions: if definition_id in self._required_actions: if self._machine_actions[action_key] not in self._required_actions[definition_id]: @@ -70,7 +84,7 @@ class MachineActionManager(QObject): raise UnknownMachineActionError("Action %s, which is required for %s is not known." % (action_key, definition_id)) ## Add a supported action to a machine. - def addSupportedAction(self, definition_id, action_key): + def addSupportedAction(self, definition_id: str, action_key: str) -> None: if action_key in self._machine_actions: if definition_id in self._supported_actions: if self._machine_actions[action_key] not in self._supported_actions[definition_id]: @@ -81,13 +95,10 @@ class MachineActionManager(QObject): Logger.log("w", "Unable to add %s to %s, as the action is not recognised", action_key, definition_id) ## Add an action to the first start list of a machine. - def addFirstStartAction(self, definition_id, action_key, index = None): + def addFirstStartAction(self, definition_id: str, action_key: str) -> None: if action_key in self._machine_actions: if definition_id in self._first_start_actions: - if index is not None: - self._first_start_actions[definition_id].insert(index, self._machine_actions[action_key]) - else: - self._first_start_actions[definition_id].append(self._machine_actions[action_key]) + self._first_start_actions[definition_id].append(self._machine_actions[action_key]) else: self._first_start_actions[definition_id] = [self._machine_actions[action_key]] else: @@ -95,7 +106,7 @@ class MachineActionManager(QObject): ## Add a (unique) MachineAction # if the Key of the action is not unique, an exception is raised. - def addMachineAction(self, action): + def addMachineAction(self, action: "MachineAction") -> None: if action.getKey() not in self._machine_actions: self._machine_actions[action.getKey()] = action else: @@ -105,7 +116,7 @@ class MachineActionManager(QObject): # \param definition_id The ID of the definition you want the supported actions of # \returns set of supported actions. @pyqtSlot(str, result = "QVariantList") - def getSupportedActions(self, definition_id): + def getSupportedActions(self, definition_id: str) -> List["MachineAction"]: if definition_id in self._supported_actions: return list(self._supported_actions[definition_id]) else: @@ -114,11 +125,11 @@ class MachineActionManager(QObject): ## Get all actions required by given machine # \param definition_id The ID of the definition you want the required actions of # \returns set of required actions. - def getRequiredActions(self, definition_id): + def getRequiredActions(self, definition_id: str) -> List["MachineAction"]: if definition_id in self._required_actions: return self._required_actions[definition_id] else: - return set() + return list() ## Get all actions that need to be performed upon first start of a given machine. # Note that contrary to required / supported actions a list is returned (as it could be required to run the same @@ -126,7 +137,7 @@ class MachineActionManager(QObject): # \param definition_id The ID of the definition that you want to get the "on added" actions for. # \returns List of actions. @pyqtSlot(str, result="QVariantList") - def getFirstStartActions(self, definition_id): + def getFirstStartActions(self, definition_id: str) -> List["MachineAction"]: if definition_id in self._first_start_actions: return self._first_start_actions[definition_id] else: @@ -134,7 +145,7 @@ class MachineActionManager(QObject): ## Remove Machine action from manager # \param action to remove - def removeMachineAction(self, action): + def removeMachineAction(self, action: "MachineAction") -> None: try: del self._machine_actions[action.getKey()] except KeyError: @@ -143,7 +154,7 @@ class MachineActionManager(QObject): ## Get MachineAction by key # \param key String of key to select # \return Machine action if found, None otherwise - def getMachineAction(self, key): + def getMachineAction(self, key: str) -> Optional["MachineAction"]: if key in self._machine_actions: return self._machine_actions[key] else: diff --git a/cura/Machines/ContainerNode.py b/cura/Machines/ContainerNode.py index 944579e354..eef1c63127 100644 --- a/cura/Machines/ContainerNode.py +++ b/cura/Machines/ContainerNode.py @@ -9,9 +9,6 @@ from UM.ConfigurationErrorMessage import ConfigurationErrorMessage from UM.Logger import Logger from UM.Settings.InstanceContainer import InstanceContainer -if TYPE_CHECKING: - from cura.Machines.QualityGroup import QualityGroup - ## # A metadata / container combination. Use getContainer() to get the container corresponding to the metadata. @@ -24,29 +21,34 @@ if TYPE_CHECKING: # This is used in Variant, Material, and Quality Managers. # class ContainerNode: - __slots__ = ("metadata", "container", "children_map") + __slots__ = ("_metadata", "_container", "children_map") def __init__(self, metadata: Optional[Dict[str, Any]] = None) -> None: - self.metadata = metadata - self.container = None - self.children_map = OrderedDict() #type: OrderedDict[str, Union[QualityGroup, ContainerNode]] + self._metadata = metadata + self._container = None # type: Optional[InstanceContainer] + self.children_map = OrderedDict() # type: ignore # This is because it's children are supposed to override it. ## Get an entry value from the metadata def getMetaDataEntry(self, entry: str, default: Any = None) -> Any: - if self.metadata is None: + if self._metadata is None: return default - return self.metadata.get(entry, default) + return self._metadata.get(entry, default) + + def getMetadata(self) -> Dict[str, Any]: + if self._metadata is None: + return {} + return self._metadata def getChildNode(self, child_key: str) -> Optional["ContainerNode"]: return self.children_map.get(child_key) def getContainer(self) -> Optional["InstanceContainer"]: - if self.metadata is None: + if self._metadata is None: Logger.log("e", "Cannot get container for a ContainerNode without metadata.") return None - if self.container is None: - container_id = self.metadata["id"] + if self._container is None: + container_id = self._metadata["id"] from UM.Settings.ContainerRegistry import ContainerRegistry container_list = ContainerRegistry.getInstance().findInstanceContainers(id = container_id) if not container_list: @@ -54,9 +56,9 @@ class ContainerNode: error_message = ConfigurationErrorMessage.getInstance() error_message.addFaultyContainers(container_id) return None - self.container = container_list[0] + self._container = container_list[0] - return self.container + return self._container def __str__(self) -> str: return "%s[%s]" % (self.__class__.__name__, self.getMetaDataEntry("id")) diff --git a/cura/Machines/MachineErrorChecker.py b/cura/Machines/MachineErrorChecker.py index 37de4f30ce..fb11123af6 100644 --- a/cura/Machines/MachineErrorChecker.py +++ b/cura/Machines/MachineErrorChecker.py @@ -50,7 +50,7 @@ class MachineErrorChecker(QObject): self._error_check_timer.setInterval(100) self._error_check_timer.setSingleShot(True) - def initialize(self): + def initialize(self) -> None: self._error_check_timer.timeout.connect(self._rescheduleCheck) # Reconnect all signals when the active machine gets changed. @@ -62,23 +62,23 @@ class MachineErrorChecker(QObject): self._onMachineChanged() - def _onMachineChanged(self): + def _onMachineChanged(self) -> None: if self._global_stack: - self._global_stack.propertyChanged.disconnect(self.startErrorCheck) + self._global_stack.propertyChanged.disconnect(self.startErrorCheckPropertyChanged) self._global_stack.containersChanged.disconnect(self.startErrorCheck) for extruder in self._global_stack.extruders.values(): - extruder.propertyChanged.disconnect(self.startErrorCheck) + extruder.propertyChanged.disconnect(self.startErrorCheckPropertyChanged) extruder.containersChanged.disconnect(self.startErrorCheck) self._global_stack = self._machine_manager.activeMachine if self._global_stack: - self._global_stack.propertyChanged.connect(self.startErrorCheck) + self._global_stack.propertyChanged.connect(self.startErrorCheckPropertyChanged) self._global_stack.containersChanged.connect(self.startErrorCheck) for extruder in self._global_stack.extruders.values(): - extruder.propertyChanged.connect(self.startErrorCheck) + extruder.propertyChanged.connect(self.startErrorCheckPropertyChanged) extruder.containersChanged.connect(self.startErrorCheck) hasErrorUpdated = pyqtSignal() @@ -93,8 +93,15 @@ class MachineErrorChecker(QObject): def needToWaitForResult(self) -> bool: return self._need_to_check or self._check_in_progress + # Start the error check for property changed + # this is seperate from the startErrorCheck because it ignores a number property types + def startErrorCheckPropertyChanged(self, key, property_name): + if property_name != "value": + return + self.startErrorCheck() + # Starts the error check timer to schedule a new error check. - def startErrorCheck(self, *args): + def startErrorCheck(self, *args) -> None: if not self._check_in_progress: self._need_to_check = True self.needToWaitForResultChanged.emit() @@ -103,7 +110,7 @@ class MachineErrorChecker(QObject): # This function is called by the timer to reschedule a new error check. # If there is no check in progress, it will start a new one. If there is any, it sets the "_need_to_check" flag # to notify the current check to stop and start a new one. - def _rescheduleCheck(self): + def _rescheduleCheck(self) -> None: if self._check_in_progress and not self._need_to_check: self._need_to_check = True self.needToWaitForResultChanged.emit() @@ -128,7 +135,7 @@ class MachineErrorChecker(QObject): self._start_time = time.time() Logger.log("d", "New error check scheduled.") - def _checkStack(self): + def _checkStack(self) -> None: if self._need_to_check: Logger.log("d", "Need to check for errors again. Discard the current progress and reschedule a check.") self._check_in_progress = False @@ -169,7 +176,7 @@ class MachineErrorChecker(QObject): # Schedule the check for the next key self._application.callLater(self._checkStack) - def _setResult(self, result: bool): + def _setResult(self, result: bool) -> None: if result != self._has_errors: self._has_errors = result self.hasErrorUpdated.emit() diff --git a/cura/Machines/MaterialGroup.py b/cura/Machines/MaterialGroup.py index 8a73796a7a..e05647e674 100644 --- a/cura/Machines/MaterialGroup.py +++ b/cura/Machines/MaterialGroup.py @@ -24,8 +24,8 @@ class MaterialGroup: def __init__(self, name: str, root_material_node: "MaterialNode") -> None: self.name = name self.is_read_only = False - self.root_material_node = root_material_node # type: MaterialNode - self.derived_material_node_list = [] # type: List[MaterialNode] + self.root_material_node = root_material_node # type: MaterialNode + self.derived_material_node_list = [] # type: List[MaterialNode] def __str__(self) -> str: return "%s[%s]" % (self.__class__.__name__, self.name) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index d5a7d5d089..68e894642d 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -4,7 +4,7 @@ from collections import defaultdict, OrderedDict import copy import uuid -from typing import Dict, Optional, TYPE_CHECKING +from typing import Dict, Optional, TYPE_CHECKING, Any, Set, List, cast, Tuple from PyQt5.Qt import QTimer, QObject, pyqtSignal, pyqtSlot @@ -39,24 +39,34 @@ if TYPE_CHECKING: class MaterialManager(QObject): materialsUpdated = pyqtSignal() # Emitted whenever the material lookup tables are updated. + favoritesUpdated = pyqtSignal() # Emitted whenever the favorites are changed def __init__(self, container_registry, parent = None): super().__init__(parent) self._application = Application.getInstance() self._container_registry = container_registry # type: ContainerRegistry - self._fallback_materials_map = dict() # material_type -> generic material metadata - self._material_group_map = dict() # root_material_id -> MaterialGroup - self._diameter_machine_nozzle_buildplate_material_map = dict() # approximate diameter str -> dict(machine_definition_id -> MaterialNode) + # Material_type -> generic material metadata + self._fallback_materials_map = dict() # type: Dict[str, Dict[str, Any]] + + # Root_material_id -> MaterialGroup + self._material_group_map = dict() # type: Dict[str, MaterialGroup] + + # Approximate diameter str + self._diameter_machine_nozzle_buildplate_material_map = dict() # type: Dict[str, Dict[str, MaterialNode]] # We're using these two maps to convert between the specific diameter material id and the generic material id # because the generic material ids are used in qualities and definitions, while the specific diameter material is meant # i.e. generic_pla -> generic_pla_175 - self._material_diameter_map = defaultdict(dict) # root_material_id -> approximate diameter str -> root_material_id for that diameter - self._diameter_material_map = dict() # material id including diameter (generic_pla_175) -> material root id (generic_pla) + # root_material_id -> approximate diameter str -> root_material_id for that diameter + self._material_diameter_map = defaultdict(dict) # type: Dict[str, Dict[str, str]] + + # Material id including diameter (generic_pla_175) -> material root id (generic_pla) + self._diameter_material_map = dict() # type: Dict[str, str] # This is used in Legacy UM3 send material function and the material management page. - self._guid_material_groups_map = defaultdict(list) # GUID -> a list of material_groups + # GUID -> a list of material_groups + self._guid_material_groups_map = defaultdict(list) # type: Dict[str, List[MaterialGroup]] # The machine definition ID for the non-machine-specific materials. # This is used as the last fallback option if the given machine-specific material(s) cannot be found. @@ -75,13 +85,15 @@ class MaterialManager(QObject): self._container_registry.containerAdded.connect(self._onContainerMetadataChanged) self._container_registry.containerRemoved.connect(self._onContainerMetadataChanged) - def initialize(self): + self._favorites = set() # type: Set[str] + + def initialize(self) -> None: # Find all materials and put them in a matrix for quick search. material_metadatas = {metadata["id"]: metadata for metadata in self._container_registry.findContainersMetadata(type = "material") if - metadata.get("GUID")} + metadata.get("GUID")} # type: Dict[str, Dict[str, Any]] - self._material_group_map = dict() + self._material_group_map = dict() # type: Dict[str, MaterialGroup] # Map #1 # root_material_id -> MaterialGroup @@ -90,7 +102,7 @@ class MaterialManager(QObject): if material_id == "empty_material": continue - root_material_id = material_metadata.get("base_file") + root_material_id = material_metadata.get("base_file", "") if root_material_id not in self._material_group_map: self._material_group_map[root_material_id] = MaterialGroup(root_material_id, MaterialNode(material_metadatas[root_material_id])) self._material_group_map[root_material_id].is_read_only = self._container_registry.isReadOnly(root_material_id) @@ -106,26 +118,26 @@ class MaterialManager(QObject): # Map #1.5 # GUID -> material group list - self._guid_material_groups_map = defaultdict(list) + self._guid_material_groups_map = defaultdict(list) # type: Dict[str, List[MaterialGroup]] for root_material_id, material_group in self._material_group_map.items(): - guid = material_group.root_material_node.metadata["GUID"] + guid = material_group.root_material_node.getMetaDataEntry("GUID", "") self._guid_material_groups_map[guid].append(material_group) # Map #2 # Lookup table for material type -> fallback material metadata, only for read-only materials - grouped_by_type_dict = dict() + grouped_by_type_dict = dict() # type: Dict[str, Any] material_types_without_fallback = set() for root_material_id, material_node in self._material_group_map.items(): - material_type = material_node.root_material_node.metadata["material"] + material_type = material_node.root_material_node.getMetaDataEntry("material", "") if material_type not in grouped_by_type_dict: grouped_by_type_dict[material_type] = {"generic": None, "others": []} material_types_without_fallback.add(material_type) - brand = material_node.root_material_node.metadata["brand"] + brand = material_node.root_material_node.getMetaDataEntry("brand", "") if brand.lower() == "generic": to_add = True if material_type in grouped_by_type_dict: - diameter = material_node.root_material_node.metadata.get("approximate_diameter") + diameter = material_node.root_material_node.getMetaDataEntry("approximate_diameter", "") if diameter != self._default_approximate_diameter_for_quality_search: to_add = False # don't add if it's not the default diameter @@ -134,7 +146,7 @@ class MaterialManager(QObject): # - if it's in the list, it means that is a new material without fallback # - if it is not, then it is a custom material with a fallback material (parent) if material_type in material_types_without_fallback: - grouped_by_type_dict[material_type] = material_node.root_material_node.metadata + grouped_by_type_dict[material_type] = material_node.root_material_node._metadata material_types_without_fallback.remove(material_type) # Remove the materials that have no fallback materials @@ -151,15 +163,15 @@ class MaterialManager(QObject): self._diameter_material_map = dict() # Group the material IDs by the same name, material, brand, and color but with different diameters. - material_group_dict = dict() + material_group_dict = dict() # type: Dict[Tuple[Any], Dict[str, str]] keys_to_fetch = ("name", "material", "brand", "color") for root_material_id, machine_node in self._material_group_map.items(): - root_material_metadata = machine_node.root_material_node.metadata + root_material_metadata = machine_node.root_material_node._metadata - key_data = [] + key_data_list = [] # type: List[Any] for key in keys_to_fetch: - key_data.append(root_material_metadata.get(key)) - key_data = tuple(key_data) + key_data_list.append(machine_node.root_material_node.getMetaDataEntry(key)) + key_data = cast(Tuple[Any], tuple(key_data_list)) # type: Tuple[Any] # If the key_data doesn't exist, it doesn't matter if the material is read only... if key_data not in material_group_dict: @@ -168,8 +180,8 @@ class MaterialManager(QObject): # ...but if key_data exists, we just overwrite it if the material is read only, otherwise we skip it if not machine_node.is_read_only: continue - approximate_diameter = root_material_metadata.get("approximate_diameter") - material_group_dict[key_data][approximate_diameter] = root_material_metadata["id"] + approximate_diameter = machine_node.root_material_node.getMetaDataEntry("approximate_diameter", "") + material_group_dict[key_data][approximate_diameter] = machine_node.root_material_node.getMetaDataEntry("id", "") # Map [root_material_id][diameter] -> root_material_id for this diameter for data_dict in material_group_dict.values(): @@ -188,13 +200,17 @@ class MaterialManager(QObject): # Map #4 # "machine" -> "nozzle name" -> "buildplate name" -> "root material ID" -> specific material InstanceContainer - self._diameter_machine_nozzle_buildplate_material_map = dict() + self._diameter_machine_nozzle_buildplate_material_map = dict() # type: Dict[str, Dict[str, MaterialNode]] for material_metadata in material_metadatas.values(): self.__addMaterialMetadataIntoLookupTree(material_metadata) + favorites = self._application.getPreferences().getValue("cura/favorite_materials") + for item in favorites.split(";"): + self._favorites.add(item) + self.materialsUpdated.emit() - def __addMaterialMetadataIntoLookupTree(self, material_metadata: dict) -> None: + def __addMaterialMetadataIntoLookupTree(self, material_metadata: Dict[str, Any]) -> None: material_id = material_metadata["id"] # We don't store empty material in the lookup tables @@ -281,11 +297,15 @@ class MaterialManager(QObject): return self._material_diameter_map.get(root_material_id, {}).get(approximate_diameter, root_material_id) def getRootMaterialIDWithoutDiameter(self, root_material_id: str) -> str: - return self._diameter_material_map.get(root_material_id) + 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) + # Returns a dict of all material groups organized by root_material_id. + def getAllMaterialGroups(self) -> Dict[str, "MaterialGroup"]: + return self._material_group_map + # # Return a dict with all root material IDs (k) and ContainerNodes (v) that's suitable for the given setup. # @@ -321,6 +341,7 @@ class MaterialManager(QObject): machine_exclude_materials = machine_definition.getMetaDataEntry("exclude_materials", []) material_id_metadata_dict = dict() # type: Dict[str, MaterialNode] + excluded_materials = set() for current_node in nodes_to_check: if current_node is None: continue @@ -329,25 +350,27 @@ class MaterialManager(QObject): # Do not exclude other materials that are of the same type. for material_id, node in current_node.material_map.items(): if material_id in machine_exclude_materials: - Logger.log("d", "Exclude material [%s] for machine [%s]", - material_id, machine_definition.getId()) + excluded_materials.add(material_id) continue if material_id not in material_id_metadata_dict: material_id_metadata_dict[material_id] = node + if excluded_materials: + Logger.log("d", "Exclude materials {excluded_materials} for machine {machine_definition_id}".format(excluded_materials = ", ".join(excluded_materials), machine_definition_id = machine_definition_id)) + return material_id_metadata_dict # # A convenience function to get available materials for the given machine with the extruder position. # def getAvailableMaterialsForMachineExtruder(self, machine: "GlobalStack", - extruder_stack: "ExtruderStack") -> Optional[dict]: + extruder_stack: "ExtruderStack") -> Optional[Dict[str, MaterialNode]]: buildplate_name = machine.getBuildplateName() nozzle_name = None if extruder_stack.variant.getId() != "empty_variant": nozzle_name = extruder_stack.variant.getName() - diameter = extruder_stack.approximateMaterialDiameter + diameter = extruder_stack.getApproximateMaterialDiameter() # Fetch the available materials (ContainerNode) for the current active machine and extruder setup. return self.getAvailableMaterials(machine.definition, nozzle_name, buildplate_name, diameter) @@ -359,7 +382,7 @@ class MaterialManager(QObject): # 2. cannot find any material InstanceContainers with the given settings. # def getMaterialNode(self, machine_definition_id: str, nozzle_name: Optional[str], - buildplate_name: Optional[str], diameter: float, root_material_id: str) -> Optional["InstanceContainer"]: + buildplate_name: Optional[str], diameter: float, root_material_id: str) -> Optional["MaterialNode"]: # round the diameter to get the approximate diameter rounded_diameter = str(round(diameter)) if rounded_diameter not in self._diameter_machine_nozzle_buildplate_material_map: @@ -368,7 +391,7 @@ class MaterialManager(QObject): return None # If there are nozzle materials, get the nozzle-specific material - machine_nozzle_buildplate_material_map = self._diameter_machine_nozzle_buildplate_material_map[rounded_diameter] + machine_nozzle_buildplate_material_map = self._diameter_machine_nozzle_buildplate_material_map[rounded_diameter] # type: Dict[str, MaterialNode] machine_node = machine_nozzle_buildplate_material_map.get(machine_definition_id) nozzle_node = None buildplate_node = None @@ -417,7 +440,7 @@ class MaterialManager(QObject): # Look at the guid to material dictionary root_material_id = None for material_group in self._guid_material_groups_map[material_guid]: - root_material_id = material_group.root_material_node.metadata["id"] + root_material_id = cast(str, material_group.root_material_node.getMetaDataEntry("id", "")) break if not root_material_id: @@ -428,6 +451,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 = [] # type: List[str] + + material_groups = self.getMaterialGroupListByGUID(material.getMetaDataEntry("GUID")) + 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) + 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 @@ -460,12 +505,22 @@ class MaterialManager(QObject): buildplate_name = global_stack.getBuildplateName() machine_definition = global_stack.definition - if extruder_definition is None: - extruder_definition = global_stack.extruders[position].definition - if extruder_definition and parseBool(global_stack.getMetaDataEntry("has_materials", False)): - # At this point the extruder_definition is not None - material_diameter = extruder_definition.getProperty("material_diameter", "value") + # The extruder-compatible material diameter in the extruder definition may not be the correct value because + # the user can change it in the definition_changes container. + if extruder_definition is None: + extruder_stack_or_definition = global_stack.extruders[position] + is_extruder_stack = True + else: + extruder_stack_or_definition = extruder_definition + is_extruder_stack = False + + if extruder_stack_or_definition and parseBool(global_stack.getMetaDataEntry("has_materials", False)): + if is_extruder_stack: + material_diameter = extruder_stack_or_definition.getCompatibleMaterialDiameter() + else: + material_diameter = extruder_stack_or_definition.getProperty("material_diameter", "value") + if isinstance(material_diameter, SettingFunction): material_diameter = material_diameter(global_stack) approximate_material_diameter = str(round(material_diameter)) @@ -493,7 +548,7 @@ class MaterialManager(QObject): # Sets the new name for the given material. # @pyqtSlot("QVariant", str) - def setMaterialName(self, material_node: "MaterialNode", name: str): + def setMaterialName(self, material_node: "MaterialNode", name: str) -> None: root_material_id = material_node.getMetaDataEntry("base_file") if root_material_id is None: return @@ -511,7 +566,7 @@ class MaterialManager(QObject): # Removes the given material. # @pyqtSlot("QVariant") - def removeMaterial(self, material_node: "MaterialNode"): + def removeMaterial(self, material_node: "MaterialNode") -> None: root_material_id = material_node.getMetaDataEntry("base_file") if root_material_id is not None: self.removeMaterialByRootId(root_material_id) @@ -521,8 +576,8 @@ class MaterialManager(QObject): # Returns the root material ID of the duplicated material if successful. # @pyqtSlot("QVariant", result = str) - def duplicateMaterial(self, material_node, new_base_id = None, new_metadata = None) -> Optional[str]: - root_material_id = material_node.metadata["base_file"] + def duplicateMaterial(self, material_node: MaterialNode, new_base_id: Optional[str] = None, new_metadata: Dict[str, Any] = None) -> Optional[str]: + root_material_id = cast(str, material_node.getMetaDataEntry("base_file", "")) material_group = self.getMaterialGroup(root_material_id) if not material_group: @@ -573,11 +628,16 @@ class MaterialManager(QObject): for container_to_add in new_containers: 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) + return new_base_id # # Create a new material by cloning Generic PLA for the current material diameter and generate a new GUID. - # + # Returns the ID of the newly created material. @pyqtSlot(result = str) def createMaterial(self) -> str: from UM.i18n import i18nCatalog @@ -588,8 +648,10 @@ class MaterialManager(QObject): machine_manager = self._application.getMachineManager() extruder_stack = machine_manager.activeStack + machine_definition = self._application.getGlobalContainerStack().definition + root_material_id = machine_definition.getMetaDataEntry("preferred_material", default = "generic_pla") + approximate_diameter = str(extruder_stack.approximateMaterialDiameter) - root_material_id = "generic_pla" root_material_id = self.getRootMaterialIDForDiameter(root_material_id, approximate_diameter) material_group = self.getMaterialGroup(root_material_id) @@ -608,3 +670,29 @@ class MaterialManager(QObject): new_base_id = new_id, new_metadata = new_metadata) return new_id + + @pyqtSlot(str) + def addFavorite(self, root_material_id: str) -> None: + self._favorites.add(root_material_id) + self.materialsUpdated.emit() + + # Ensure all settings are saved. + self._application.getPreferences().setValue("cura/favorite_materials", ";".join(list(self._favorites))) + self._application.saveSettings() + + @pyqtSlot(str) + def removeFavorite(self, root_material_id: str) -> None: + try: + self._favorites.remove(root_material_id) + except KeyError: + Logger.log("w", "Could not delete material %s from favorites as it was already deleted", root_material_id) + return + self.materialsUpdated.emit() + + # Ensure all settings are saved. + self._application.getPreferences().setValue("cura/favorite_materials", ";".join(list(self._favorites))) + self._application.saveSettings() + + @pyqtSlot() + def getFavorites(self): + return self._favorites diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py index 04423d7b2c..a4dcb0564f 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.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 Optional, Dict - +from typing import Optional, Dict, Any +from collections import OrderedDict from .ContainerNode import ContainerNode @@ -14,6 +14,12 @@ from .ContainerNode import ContainerNode class MaterialNode(ContainerNode): __slots__ = ("material_map", "children_map") - def __init__(self, metadata: Optional[dict] = None) -> None: + def __init__(self, metadata: Optional[Dict[str, Any]] = None) -> None: super().__init__(metadata = metadata) self.material_map = {} # type: Dict[str, MaterialNode] # material_root_id -> material_node + + # We overide this as we want to indicate that MaterialNodes can only contain other material nodes. + self.children_map = OrderedDict() # type: OrderedDict[str, "MaterialNode"] + + def getChildNode(self, child_key: str) -> Optional["MaterialNode"]: + return self.children_map.get(child_key) \ No newline at end of file diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 4759c8b5b0..e936877923 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -1,46 +1,66 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional, Dict, Set from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty - -from UM.Application import Application from UM.Qt.ListModel import ListModel -# -# This is the base model class for GenericMaterialsModel and BrandMaterialsModel -# Those 2 models are used by the material drop down menu to show generic materials and branded materials separately. -# The extruder position defined here is being used to bound a menu to the correct extruder. This is used in the top -# bar menu "Settings" -> "Extruder nr" -> "Material" -> this menu -# +## This is the base model class for GenericMaterialsModel and MaterialBrandsModel. +# Those 2 models are used by the material drop down menu to show generic materials and branded materials separately. +# The extruder position defined here is being used to bound a menu to the correct extruder. This is used in the top +# bar menu "Settings" -> "Extruder nr" -> "Material" -> this menu +from cura.Machines.MaterialNode import MaterialNode + + class BaseMaterialsModel(ListModel): - RootMaterialIdRole = Qt.UserRole + 1 - IdRole = Qt.UserRole + 2 - NameRole = Qt.UserRole + 3 - BrandRole = Qt.UserRole + 4 - MaterialRole = Qt.UserRole + 5 - ColorRole = Qt.UserRole + 6 - ContainerNodeRole = Qt.UserRole + 7 extruderPositionChanged = pyqtSignal() + enabledChanged = pyqtSignal() def __init__(self, parent = None): super().__init__(parent) - self._application = Application.getInstance() - self._machine_manager = self._application.getMachineManager() + from cura.CuraApplication import CuraApplication - self.addRoleName(self.RootMaterialIdRole, "root_material_id") - self.addRoleName(self.IdRole, "id") - self.addRoleName(self.NameRole, "name") - self.addRoleName(self.BrandRole, "brand") - self.addRoleName(self.MaterialRole, "material") - self.addRoleName(self.ColorRole, "color_name") - self.addRoleName(self.ContainerNodeRole, "container_node") + self._application = CuraApplication.getInstance() + + # Make these managers available to all material models + self._container_registry = self._application.getInstance().getContainerRegistry() + self._machine_manager = self._application.getMachineManager() + self._material_manager = self._application.getMaterialManager() + + # Update the stack and the model data when the machine changes + self._machine_manager.globalContainerChanged.connect(self._updateExtruderStack) + + # Update this model when switching machines + self._machine_manager.activeStackChanged.connect(self._update) + + # Update this model when list of materials changes + self._material_manager.materialsUpdated.connect(self._update) + + self.addRoleName(Qt.UserRole + 1, "root_material_id") + self.addRoleName(Qt.UserRole + 2, "id") + self.addRoleName(Qt.UserRole + 3, "GUID") + self.addRoleName(Qt.UserRole + 4, "name") + self.addRoleName(Qt.UserRole + 5, "brand") + self.addRoleName(Qt.UserRole + 6, "description") + self.addRoleName(Qt.UserRole + 7, "material") + self.addRoleName(Qt.UserRole + 8, "color_name") + self.addRoleName(Qt.UserRole + 9, "color_code") + self.addRoleName(Qt.UserRole + 10, "density") + self.addRoleName(Qt.UserRole + 11, "diameter") + self.addRoleName(Qt.UserRole + 12, "approximate_diameter") + self.addRoleName(Qt.UserRole + 13, "adhesion_info") + self.addRoleName(Qt.UserRole + 14, "is_read_only") + self.addRoleName(Qt.UserRole + 15, "container_node") + self.addRoleName(Qt.UserRole + 16, "is_favorite") self._extruder_position = 0 self._extruder_stack = None - # Update the stack and the model data when the machine changes - self._machine_manager.globalContainerChanged.connect(self._updateExtruderStack) + + self._available_materials = None # type: Optional[Dict[str, MaterialNode]] + self._favorite_ids = set() # type: Set[str] + self._enabled = True def _updateExtruderStack(self): global_stack = self._machine_manager.activeMachine @@ -49,9 +69,11 @@ class BaseMaterialsModel(ListModel): if self._extruder_stack is not None: self._extruder_stack.pyqtContainersChanged.disconnect(self._update) + self._extruder_stack.approximateMaterialDiameterChanged.disconnect(self._update) self._extruder_stack = global_stack.extruders.get(str(self._extruder_position)) if self._extruder_stack is not None: self._extruder_stack.pyqtContainersChanged.connect(self._update) + self._extruder_stack.approximateMaterialDiameterChanged.connect(self._update) # Force update the model when the extruder stack changes self._update() @@ -65,8 +87,66 @@ class BaseMaterialsModel(ListModel): def extruderPosition(self) -> int: return self._extruder_position - # - # This is an abstract method that needs to be implemented by - # + def setEnabled(self, enabled): + if self._enabled != enabled: + self._enabled = enabled + if self._enabled: + # ensure the data is there again. + self._update() + self.enabledChanged.emit() + + @pyqtProperty(bool, fset=setEnabled, notify=enabledChanged) + def enabled(self): + return self._enabled + + ## This is an abstract method that needs to be implemented by the specific + # models themselves. def _update(self): pass + + ## This method is used by all material models in the beginning of the + # _update() method in order to prevent errors. It's the same in all models + # so it's placed here for easy access. + def _canUpdate(self): + global_stack = self._machine_manager.activeMachine + + if global_stack is None or not self._enabled: + return False + + extruder_position = str(self._extruder_position) + + if extruder_position not in global_stack.extruders: + return False + + extruder_stack = global_stack.extruders[extruder_position] + self._available_materials = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack, extruder_stack) + if self._available_materials is None: + return False + + return True + + ## This is another convenience function which is shared by all material + # models so it's put here to avoid having so much duplicated code. + def _createMaterialItem(self, root_material_id, container_node): + metadata = container_node.getMetadata() + item = { + "root_material_id": root_material_id, + "id": metadata["id"], + "container_id": metadata["id"], # TODO: Remove duplicate in material manager qml + "GUID": metadata["GUID"], + "name": metadata["name"], + "brand": metadata["brand"], + "description": metadata["description"], + "material": metadata["material"], + "color_name": metadata["color_name"], + "color_code": metadata.get("color_code", ""), + "density": metadata.get("properties", {}).get("density", ""), + "diameter": metadata.get("properties", {}).get("diameter", ""), + "approximate_diameter": metadata["approximate_diameter"], + "adhesion_info": metadata["adhesion_info"], + "is_read_only": self._container_registry.isReadOnly(metadata["id"]), + "container_node": container_node, + "is_favorite": root_material_id in self._favorite_ids + } + return item + diff --git a/cura/Machines/Models/BrandMaterialsModel.py b/cura/Machines/Models/BrandMaterialsModel.py deleted file mode 100644 index ad48b3ea21..0000000000 --- a/cura/Machines/Models/BrandMaterialsModel.py +++ /dev/null @@ -1,157 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. - -from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty - -from UM.Qt.ListModel import ListModel -from UM.Logger import Logger -from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel - - -# -# This is an intermediate model to group materials with different colours for a same brand and type. -# -class MaterialsModelGroupedByType(ListModel): - NameRole = Qt.UserRole + 1 - ColorsRole = Qt.UserRole + 2 - - def __init__(self, parent = None): - super().__init__(parent) - - self.addRoleName(self.NameRole, "name") - self.addRoleName(self.ColorsRole, "colors") - - -# -# This model is used to show branded materials in the material drop down menu. -# The structure of the menu looks like this: -# Brand -> Material Type -> list of materials -# -# To illustrate, a branded material menu may look like this: -# Ultimaker -> PLA -> Yellow PLA -# -> Black PLA -# -> ... -# -> ABS -> White ABS -# ... -# -class BrandMaterialsModel(ListModel): - NameRole = Qt.UserRole + 1 - MaterialsRole = Qt.UserRole + 2 - - extruderPositionChanged = pyqtSignal() - - def __init__(self, parent = None): - super().__init__(parent) - - self.addRoleName(self.NameRole, "name") - self.addRoleName(self.MaterialsRole, "materials") - - self._extruder_position = 0 - self._extruder_stack = None - - from cura.CuraApplication import CuraApplication - self._machine_manager = CuraApplication.getInstance().getMachineManager() - self._extruder_manager = CuraApplication.getInstance().getExtruderManager() - self._material_manager = CuraApplication.getInstance().getMaterialManager() - - self._machine_manager.globalContainerChanged.connect(self._updateExtruderStack) - self._machine_manager.activeStackChanged.connect(self._update) #Update when switching machines. - self._material_manager.materialsUpdated.connect(self._update) #Update when the list of materials changes. - self._update() - - def _updateExtruderStack(self): - global_stack = self._machine_manager.activeMachine - if global_stack is None: - return - - if self._extruder_stack is not None: - self._extruder_stack.pyqtContainersChanged.disconnect(self._update) - self._extruder_stack = global_stack.extruders.get(str(self._extruder_position)) - if self._extruder_stack is not None: - self._extruder_stack.pyqtContainersChanged.connect(self._update) - # Force update the model when the extruder stack changes - self._update() - - def setExtruderPosition(self, position: int): - if self._extruder_stack is None or self._extruder_position != position: - self._extruder_position = position - self._updateExtruderStack() - self.extruderPositionChanged.emit() - - @pyqtProperty(int, fset=setExtruderPosition, notify=extruderPositionChanged) - def extruderPosition(self) -> int: - return self._extruder_position - - def _update(self): - Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__)) - global_stack = self._machine_manager.activeMachine - if global_stack is None: - self.setItems([]) - return - extruder_position = str(self._extruder_position) - if extruder_position not in global_stack.extruders: - self.setItems([]) - return - extruder_stack = global_stack.extruders[str(self._extruder_position)] - - available_material_dict = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack, - extruder_stack) - if available_material_dict is None: - self.setItems([]) - return - - brand_item_list = [] - brand_group_dict = {} - for root_material_id, container_node in available_material_dict.items(): - metadata = container_node.metadata - brand = metadata["brand"] - # Only add results for generic materials - if brand.lower() == "generic": - continue - - # Do not include the materials from a to-be-removed package - if bool(metadata.get("removed", False)): - continue - - if brand not in brand_group_dict: - brand_group_dict[brand] = {} - - material_type = metadata["material"] - if material_type not in brand_group_dict[brand]: - brand_group_dict[brand][material_type] = [] - - item = {"root_material_id": root_material_id, - "id": metadata["id"], - "name": metadata["name"], - "brand": metadata["brand"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "container_node": container_node - } - brand_group_dict[brand][material_type].append(item) - - for brand, material_dict in brand_group_dict.items(): - brand_item = {"name": brand, - "materials": MaterialsModelGroupedByType(self)} - - material_type_item_list = [] - for material_type, material_list in material_dict.items(): - material_type_item = {"name": material_type, - "colors": BaseMaterialsModel(self)} - material_type_item["colors"].clear() - - # Sort materials by name - material_list = sorted(material_list, key = lambda x: x["name"].upper()) - material_type_item["colors"].setItems(material_list) - - material_type_item_list.append(material_type_item) - - # Sort material type by name - material_type_item_list = sorted(material_type_item_list, key = lambda x: x["name"].upper()) - brand_item["materials"].setItems(material_type_item_list) - - brand_item_list.append(brand_item) - - # Sort brand by name - brand_item_list = sorted(brand_item_list, key = lambda x: x["name"].upper()) - self.setItems(brand_item_list) diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py new file mode 100644 index 0000000000..98a2a01597 --- /dev/null +++ b/cura/Machines/Models/FavoriteMaterialsModel.py @@ -0,0 +1,38 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel + +## Model that shows the list of favorite materials. +class FavoriteMaterialsModel(BaseMaterialsModel): + def __init__(self, parent = None): + super().__init__(parent) + self._update() + + def _update(self): + if not self._canUpdate(): + return + + # Get updated list of favorites + self._favorite_ids = self._material_manager.getFavorites() + + item_list = [] + + for root_material_id, container_node in self._available_materials.items(): + metadata = container_node.getMetadata() + + # Do not include the materials from a to-be-removed package + if bool(metadata.get("removed", False)): + continue + + # Only add results for favorite materials + if root_material_id not in self._favorite_ids: + continue + + item = self._createMaterialItem(root_material_id, container_node) + item_list.append(item) + + # Sort the item list alphabetically by name + item_list = sorted(item_list, key = lambda d: d["brand"].upper()) + + self.setItems(item_list) diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index f14b039c91..8f41dd6a70 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -4,63 +4,36 @@ from UM.Logger import Logger from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel - class GenericMaterialsModel(BaseMaterialsModel): def __init__(self, parent = None): super().__init__(parent) - - from cura.CuraApplication import CuraApplication - self._machine_manager = CuraApplication.getInstance().getMachineManager() - self._extruder_manager = CuraApplication.getInstance().getExtruderManager() - self._material_manager = CuraApplication.getInstance().getMaterialManager() - - self._machine_manager.activeStackChanged.connect(self._update) #Update when switching machines. - self._material_manager.materialsUpdated.connect(self._update) #Update when the list of materials changes. self._update() def _update(self): - Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__)) + if not self._canUpdate(): + return - global_stack = self._machine_manager.activeMachine - if global_stack is None: - self.setItems([]) - return - extruder_position = str(self._extruder_position) - if extruder_position not in global_stack.extruders: - self.setItems([]) - return - extruder_stack = global_stack.extruders[extruder_position] - - available_material_dict = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack, - extruder_stack) - if available_material_dict is None: - self.setItems([]) - return + # Get updated list of favorites + self._favorite_ids = self._material_manager.getFavorites() item_list = [] - for root_material_id, container_node in available_material_dict.items(): - metadata = container_node.metadata - # Only add results for generic materials - if metadata["brand"].lower() != "generic": - continue + for root_material_id, container_node in self._available_materials.items(): + metadata = container_node.getMetadata() # Do not include the materials from a to-be-removed package if bool(metadata.get("removed", False)): continue - item = {"root_material_id": root_material_id, - "id": metadata["id"], - "name": metadata["name"], - "brand": metadata["brand"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "container_node": container_node - } + # Only add results for generic materials + if metadata["brand"].lower() != "generic": + continue + + item = self._createMaterialItem(root_material_id, container_node) item_list.append(item) - # Sort the item list by material name alphabetically + # Sort the item list alphabetically by name item_list = sorted(item_list, key = lambda d: d["name"].upper()) self.setItems(item_list) diff --git a/cura/Machines/Models/MachineManagementModel.py b/cura/Machines/Models/MachineManagementModel.py index 7dc51f07f7..3297b8a467 100644 --- a/cura/Machines/Models/MachineManagementModel.py +++ b/cura/Machines/Models/MachineManagementModel.py @@ -52,14 +52,14 @@ class MachineManagementModel(ListModel): "um_network_key": "*", "hidden": "False"} self._network_container_stacks = ContainerRegistry.getInstance().findContainerStacks(**network_filter_printers) - self._network_container_stacks.sort(key = lambda i: i.getMetaDataEntry("connect_group_name")) + self._network_container_stacks.sort(key = lambda i: i.getMetaDataEntry("group_name", "")) for container in self._network_container_stacks: metadata = container.getMetaData().copy() if container.getBottom(): metadata["definition_name"] = container.getBottom().getName() - items.append({"name": metadata["connect_group_name"], + items.append({"name": metadata.get("group_name", ""), "id": container.getId(), "metadata": metadata, "group": catalog.i18nc("@info:title", "Network enabled printers")}) diff --git a/cura/Machines/Models/MaterialBrandsModel.py b/cura/Machines/Models/MaterialBrandsModel.py new file mode 100644 index 0000000000..ac82cf6670 --- /dev/null +++ b/cura/Machines/Models/MaterialBrandsModel.py @@ -0,0 +1,103 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty +from UM.Qt.ListModel import ListModel +from UM.Logger import Logger +from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel + +class MaterialTypesModel(ListModel): + + def __init__(self, parent = None): + super().__init__(parent) + + self.addRoleName(Qt.UserRole + 1, "name") + self.addRoleName(Qt.UserRole + 2, "brand") + self.addRoleName(Qt.UserRole + 3, "colors") + +class MaterialBrandsModel(BaseMaterialsModel): + + extruderPositionChanged = pyqtSignal() + + def __init__(self, parent = None): + super().__init__(parent) + + self.addRoleName(Qt.UserRole + 1, "name") + self.addRoleName(Qt.UserRole + 2, "material_types") + + self._update() + + def _update(self): + if not self._canUpdate(): + return + # Get updated list of favorites + self._favorite_ids = self._material_manager.getFavorites() + + brand_item_list = [] + brand_group_dict = {} + + # Part 1: Generate the entire tree of brands -> material types -> spcific materials + for root_material_id, container_node in self._available_materials.items(): + # Do not include the materials from a to-be-removed package + if bool(container_node.getMetaDataEntry("removed", False)): + continue + + # Add brands we haven't seen yet to the dict, skipping generics + brand = container_node.getMetaDataEntry("brand", "") + if brand.lower() == "generic": + continue + if brand not in brand_group_dict: + brand_group_dict[brand] = {} + + # Add material types we haven't seen yet to the dict + material_type = container_node.getMetaDataEntry("material", "") + if material_type not in brand_group_dict[brand]: + brand_group_dict[brand][material_type] = [] + + # Now handle the individual materials + item = self._createMaterialItem(root_material_id, container_node) + brand_group_dict[brand][material_type].append(item) + + # Part 2: Organize the tree into models + # + # Normally, the structure of the menu looks like this: + # Brand -> Material Type -> Specific Material + # + # To illustrate, a branded material menu may look like this: + # Ultimaker ┳ PLA ┳ Yellow PLA + # ┃ ┣ Black PLA + # ┃ ┗ ... + # ┃ + # ┗ ABS ┳ White ABS + # ┗ ... + for brand, material_dict in brand_group_dict.items(): + + material_type_item_list = [] + brand_item = { + "name": brand, + "material_types": MaterialTypesModel(self) + } + + for material_type, material_list in material_dict.items(): + material_type_item = { + "name": material_type, + "brand": brand, + "colors": BaseMaterialsModel(self) + } + material_type_item["colors"].clear() + + # Sort materials by name + material_list = sorted(material_list, key = lambda x: x["name"].upper()) + material_type_item["colors"].setItems(material_list) + + material_type_item_list.append(material_type_item) + + # Sort material type by name + material_type_item_list = sorted(material_type_item_list, key = lambda x: x["name"].upper()) + brand_item["material_types"].setItems(material_type_item_list) + + brand_item_list.append(brand_item) + + # Sort brand by name + brand_item_list = sorted(brand_item_list, key = lambda x: x["name"].upper()) + self.setItems(brand_item_list) diff --git a/cura/Machines/Models/MaterialManagementModel.py b/cura/Machines/Models/MaterialManagementModel.py deleted file mode 100644 index 46e9cb887a..0000000000 --- a/cura/Machines/Models/MaterialManagementModel.py +++ /dev/null @@ -1,104 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. - -from PyQt5.QtCore import Qt - -from UM.Logger import Logger -from UM.Qt.ListModel import ListModel - - -# -# This model is for the Material management page. -# -class MaterialManagementModel(ListModel): - RootMaterialIdRole = Qt.UserRole + 1 - DisplayNameRole = Qt.UserRole + 2 - BrandRole = Qt.UserRole + 3 - MaterialTypeRole = Qt.UserRole + 4 - ColorNameRole = Qt.UserRole + 5 - ColorCodeRole = Qt.UserRole + 6 - ContainerNodeRole = Qt.UserRole + 7 - ContainerIdRole = Qt.UserRole + 8 - - DescriptionRole = Qt.UserRole + 9 - AdhesionInfoRole = Qt.UserRole + 10 - ApproximateDiameterRole = Qt.UserRole + 11 - GuidRole = Qt.UserRole + 12 - DensityRole = Qt.UserRole + 13 - DiameterRole = Qt.UserRole + 14 - IsReadOnlyRole = Qt.UserRole + 15 - - def __init__(self, parent = None): - super().__init__(parent) - - self.addRoleName(self.RootMaterialIdRole, "root_material_id") - self.addRoleName(self.DisplayNameRole, "name") - self.addRoleName(self.BrandRole, "brand") - self.addRoleName(self.MaterialTypeRole, "material") - self.addRoleName(self.ColorNameRole, "color_name") - self.addRoleName(self.ColorCodeRole, "color_code") - self.addRoleName(self.ContainerNodeRole, "container_node") - self.addRoleName(self.ContainerIdRole, "container_id") - - self.addRoleName(self.DescriptionRole, "description") - self.addRoleName(self.AdhesionInfoRole, "adhesion_info") - self.addRoleName(self.ApproximateDiameterRole, "approximate_diameter") - self.addRoleName(self.GuidRole, "guid") - self.addRoleName(self.DensityRole, "density") - self.addRoleName(self.DiameterRole, "diameter") - self.addRoleName(self.IsReadOnlyRole, "is_read_only") - - from cura.CuraApplication import CuraApplication - self._container_registry = CuraApplication.getInstance().getContainerRegistry() - self._machine_manager = CuraApplication.getInstance().getMachineManager() - self._extruder_manager = CuraApplication.getInstance().getExtruderManager() - self._material_manager = CuraApplication.getInstance().getMaterialManager() - - self._machine_manager.globalContainerChanged.connect(self._update) - self._extruder_manager.activeExtruderChanged.connect(self._update) - self._material_manager.materialsUpdated.connect(self._update) - - self._update() - - def _update(self): - Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__)) - - global_stack = self._machine_manager.activeMachine - if global_stack is None: - self.setItems([]) - return - active_extruder_stack = self._machine_manager.activeStack - - available_material_dict = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack, - active_extruder_stack) - if available_material_dict is None: - self.setItems([]) - return - - material_list = [] - for root_material_id, container_node in available_material_dict.items(): - keys_to_fetch = ("name", - "brand", - "material", - "color_name", - "color_code", - "description", - "adhesion_info", - "approximate_diameter",) - - item = {"root_material_id": container_node.metadata["base_file"], - "container_node": container_node, - "guid": container_node.metadata["GUID"], - "container_id": container_node.metadata["id"], - "density": container_node.metadata.get("properties", {}).get("density", ""), - "diameter": container_node.metadata.get("properties", {}).get("diameter", ""), - "is_read_only": self._container_registry.isReadOnly(container_node.metadata["id"]), - } - - for key in keys_to_fetch: - item[key] = container_node.metadata.get(key, "") - - material_list.append(item) - - material_list = sorted(material_list, key = lambda k: (k["brand"].upper(), k["name"].upper())) - self.setItems(material_list) diff --git a/cura/Machines/Models/MultiBuildPlateModel.py b/cura/Machines/Models/MultiBuildPlateModel.py index 958e93837a..add960a545 100644 --- a/cura/Machines/Models/MultiBuildPlateModel.py +++ b/cura/Machines/Models/MultiBuildPlateModel.py @@ -4,6 +4,7 @@ from PyQt5.QtCore import QTimer, pyqtSignal, pyqtProperty from UM.Application import Application +from UM.Scene.Camera import Camera from UM.Scene.Selection import Selection from UM.Qt.ListModel import ListModel @@ -34,8 +35,9 @@ class MultiBuildPlateModel(ListModel): self._active_build_plate = -1 def setMaxBuildPlate(self, max_build_plate): - self._max_build_plate = max_build_plate - self.maxBuildPlateChanged.emit() + if self._max_build_plate != max_build_plate: + self._max_build_plate = max_build_plate + self.maxBuildPlateChanged.emit() ## Return the highest build plate number @pyqtProperty(int, notify = maxBuildPlateChanged) @@ -43,15 +45,17 @@ class MultiBuildPlateModel(ListModel): return self._max_build_plate def setActiveBuildPlate(self, nr): - self._active_build_plate = nr - self.activeBuildPlateChanged.emit() + if self._active_build_plate != nr: + self._active_build_plate = nr + self.activeBuildPlateChanged.emit() @pyqtProperty(int, notify = activeBuildPlateChanged) def activeBuildPlate(self): return self._active_build_plate def _updateSelectedObjectBuildPlateNumbersDelayed(self, *args): - self._update_timer.start() + if not isinstance(args[0], Camera): + self._update_timer.start() def _updateSelectedObjectBuildPlateNumbers(self, *args): result = set() diff --git a/cura/Machines/Models/NozzleModel.py b/cura/Machines/Models/NozzleModel.py index 9d97106d6b..785ff5b9b9 100644 --- a/cura/Machines/Models/NozzleModel.py +++ b/cura/Machines/Models/NozzleModel.py @@ -33,8 +33,6 @@ class NozzleModel(ListModel): def _update(self): Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__)) - self.items.clear() - global_stack = self._machine_manager.activeMachine if global_stack is None: self.setItems([]) diff --git a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py index 59c4f4fa5b..deabb6e9ba 100644 --- a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py +++ b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py @@ -1,11 +1,12 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from PyQt5.QtCore import Qt +from PyQt5.QtCore import Qt, QTimer from UM.Application import Application from UM.Logger import Logger from UM.Qt.ListModel import ListModel +from UM.Settings.SettingFunction import SettingFunction from cura.Machines.QualityManager import QualityGroup @@ -21,6 +22,7 @@ class QualityProfilesDropDownMenuModel(ListModel): AvailableRole = Qt.UserRole + 5 QualityGroupRole = Qt.UserRole + 6 QualityChangesGroupRole = Qt.UserRole + 7 + IsExperimentalRole = Qt.UserRole + 8 def __init__(self, parent = None): super().__init__(parent) @@ -32,19 +34,28 @@ class QualityProfilesDropDownMenuModel(ListModel): self.addRoleName(self.AvailableRole, "available") #Whether the quality profile is available in our current nozzle + material. self.addRoleName(self.QualityGroupRole, "quality_group") self.addRoleName(self.QualityChangesGroupRole, "quality_changes_group") + self.addRoleName(self.IsExperimentalRole, "is_experimental") self._application = Application.getInstance() self._machine_manager = self._application.getMachineManager() self._quality_manager = Application.getInstance().getQualityManager() - self._application.globalContainerStackChanged.connect(self._update) - self._machine_manager.activeQualityGroupChanged.connect(self._update) - self._machine_manager.extruderChanged.connect(self._update) - self._quality_manager.qualitiesUpdated.connect(self._update) + self._application.globalContainerStackChanged.connect(self._onChange) + self._machine_manager.activeQualityGroupChanged.connect(self._onChange) + self._machine_manager.extruderChanged.connect(self._onChange) + self._quality_manager.qualitiesUpdated.connect(self._onChange) self._layer_height_unit = "" # This is cached - self._update() + self._update_timer = QTimer() # type: QTimer + self._update_timer.setInterval(100) + self._update_timer.setSingleShot(True) + self._update_timer.timeout.connect(self._update) + + self._onChange() + + def _onChange(self) -> None: + self._update_timer.start() def _update(self): Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__)) @@ -74,7 +85,8 @@ class QualityProfilesDropDownMenuModel(ListModel): "layer_height": layer_height, "layer_height_unit": self._layer_height_unit, "available": quality_group.is_available, - "quality_group": quality_group} + "quality_group": quality_group, + "is_experimental": quality_group.is_experimental} item_list.append(item) @@ -106,4 +118,8 @@ class QualityProfilesDropDownMenuModel(ListModel): container = global_stack.definition if container and container.hasProperty("layer_height", "value"): layer_height = container.getProperty("layer_height", "value") + + if isinstance(layer_height, SettingFunction): + layer_height = layer_height(global_stack) + return float(layer_height) diff --git a/cura/Machines/Models/SettingVisibilityPresetsModel.py b/cura/Machines/Models/SettingVisibilityPresetsModel.py index 3062e83889..baa8e3ed29 100644 --- a/cura/Machines/Models/SettingVisibilityPresetsModel.py +++ b/cura/Machines/Models/SettingVisibilityPresetsModel.py @@ -1,135 +1,115 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import Optional -import os -import urllib.parse -from configparser import ConfigParser +from typing import Optional, List -from PyQt5.QtCore import pyqtProperty, Qt, pyqtSignal, pyqtSlot +from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject -from UM.Application import Application from UM.Logger import Logger -from UM.Qt.ListModel import ListModel +from UM.Preferences import Preferences from UM.Resources import Resources -from UM.MimeTypeDatabase import MimeTypeDatabase, MimeTypeNotFoundError from UM.i18n import i18nCatalog +from cura.Settings.SettingVisibilityPreset import SettingVisibilityPreset + catalog = i18nCatalog("cura") -class SettingVisibilityPresetsModel(ListModel): - IdRole = Qt.UserRole + 1 - NameRole = Qt.UserRole + 2 - SettingsRole = Qt.UserRole + 3 +class SettingVisibilityPresetsModel(QObject): + onItemsChanged = pyqtSignal() + activePresetChanged = pyqtSignal() - def __init__(self, parent = None): + def __init__(self, preferences: Preferences, parent = None) -> None: super().__init__(parent) - self.addRoleName(self.IdRole, "id") - self.addRoleName(self.NameRole, "name") - self.addRoleName(self.SettingsRole, "settings") + + self._items = [] # type: List[SettingVisibilityPreset] + self._custom_preset = SettingVisibilityPreset(preset_id = "custom", name = "Custom selection", weight = -100) self._populate() - basic_item = self.items[1] - basic_visibile_settings = ";".join(basic_item["settings"]) - self._preferences = Application.getInstance().getPreferences() + basic_item = self.getVisibilityPresetById("basic") + if basic_item is not None: + basic_visibile_settings = ";".join(basic_item.settings) + else: + Logger.log("w", "Unable to find the basic visiblity preset.") + basic_visibile_settings = "" + + self._preferences = preferences + # Preference to store which preset is currently selected self._preferences.addPreference("cura/active_setting_visibility_preset", "basic") + # Preference that stores the "custom" set so it can always be restored (even after a restart) self._preferences.addPreference("cura/custom_visible_settings", basic_visibile_settings) self._preferences.preferenceChanged.connect(self._onPreferencesChanged) - self._active_preset_item = self._getItem(self._preferences.getValue("cura/active_setting_visibility_preset")) + self._active_preset_item = self.getVisibilityPresetById(self._preferences.getValue("cura/active_setting_visibility_preset")) + # Initialize visible settings if it is not done yet visible_settings = self._preferences.getValue("general/visible_settings") + if not visible_settings: - self._preferences.setValue("general/visible_settings", ";".join(self._active_preset_item["settings"])) + new_visible_settings = self._active_preset_item.settings if self._active_preset_item is not None else [] + self._preferences.setValue("general/visible_settings", ";".join(new_visible_settings)) else: self._onPreferencesChanged("general/visible_settings") self.activePresetChanged.emit() - def _getItem(self, item_id: str) -> Optional[dict]: + def getVisibilityPresetById(self, item_id: str) -> Optional[SettingVisibilityPreset]: result = None - for item in self.items: - if item["id"] == item_id: + for item in self._items: + if item.presetId == item_id: result = item break return result - def _populate(self): + def _populate(self) -> None: from cura.CuraApplication import CuraApplication - items = [] + items = [] # type: List[SettingVisibilityPreset] + items.append(self._custom_preset) for file_path in Resources.getAllResourcesOfType(CuraApplication.ResourceTypes.SettingVisibilityPreset): + setting_visibility_preset = SettingVisibilityPreset() try: - mime_type = MimeTypeDatabase.getMimeTypeForFile(file_path) - except MimeTypeNotFoundError: - Logger.log("e", "Could not determine mime type of file %s", file_path) - continue - - item_id = urllib.parse.unquote_plus(mime_type.stripExtension(os.path.basename(file_path))) - if not os.path.isfile(file_path): - Logger.log("e", "[%s] is not a file", file_path) - continue - - parser = ConfigParser(allow_no_value = True) # accept options without any value, - try: - parser.read([file_path]) - if not parser.has_option("general", "name") or not parser.has_option("general", "weight"): - continue - - settings = [] - for section in parser.sections(): - if section == 'general': - continue - - settings.append(section) - for option in parser[section].keys(): - settings.append(option) - - items.append({ - "id": item_id, - "name": catalog.i18nc("@action:inmenu", parser["general"]["name"]), - "weight": parser["general"]["weight"], - "settings": settings, - }) - + setting_visibility_preset.loadFromFile(file_path) except Exception: Logger.logException("e", "Failed to load setting preset %s", file_path) - items.sort(key = lambda k: (int(k["weight"]), k["id"])) - # Put "custom" at the top - items.insert(0, {"id": "custom", - "name": "Custom selection", - "weight": -100, - "settings": []}) + items.append(setting_visibility_preset) + + # Sort them on weight (and if that fails, use ID) + items.sort(key = lambda k: (int(k.weight), k.presetId)) self.setItems(items) + @pyqtProperty("QVariantList", notify = onItemsChanged) + def items(self) -> List[SettingVisibilityPreset]: + return self._items + + def setItems(self, items: List[SettingVisibilityPreset]) -> None: + if self._items != items: + self._items = items + self.onItemsChanged.emit() + @pyqtSlot(str) - def setActivePreset(self, preset_id: str): - if preset_id == self._active_preset_item["id"]: + def setActivePreset(self, preset_id: str) -> None: + if self._active_preset_item is not None and preset_id == self._active_preset_item.presetId: Logger.log("d", "Same setting visibility preset [%s] selected, do nothing.", preset_id) return - preset_item = None - for item in self.items: - if item["id"] == preset_id: - preset_item = item - break + preset_item = self.getVisibilityPresetById(preset_id) if preset_item is None: Logger.log("w", "Tried to set active preset to unknown id [%s]", preset_id) return - need_to_save_to_custom = self._active_preset_item["id"] == "custom" and preset_id != "custom" + need_to_save_to_custom = self._active_preset_item is None or (self._active_preset_item.presetId == "custom" and preset_id != "custom") if need_to_save_to_custom: # Save the current visibility settings to custom current_visibility_string = self._preferences.getValue("general/visible_settings") if current_visibility_string: self._preferences.setValue("cura/custom_visible_settings", current_visibility_string) - new_visibility_string = ";".join(preset_item["settings"]) + new_visibility_string = ";".join(preset_item.settings) if preset_id == "custom": # Get settings from the stored custom data new_visibility_string = self._preferences.getValue("cura/custom_visible_settings") @@ -141,13 +121,13 @@ class SettingVisibilityPresetsModel(ListModel): self._active_preset_item = preset_item self.activePresetChanged.emit() - activePresetChanged = pyqtSignal() - @pyqtProperty(str, notify = activePresetChanged) def activePreset(self) -> str: - return self._active_preset_item["id"] + if self._active_preset_item is not None: + return self._active_preset_item.presetId + return "" - def _onPreferencesChanged(self, name: str): + def _onPreferencesChanged(self, name: str) -> None: if name != "general/visible_settings": return @@ -158,25 +138,31 @@ class SettingVisibilityPresetsModel(ListModel): visibility_set = set(visibility_string.split(";")) matching_preset_item = None - for item in self.items: - if item["id"] == "custom": + for item in self._items: + if item.presetId == "custom": continue - if set(item["settings"]) == visibility_set: + if set(item.settings) == visibility_set: matching_preset_item = item break 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["id"] == "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: - item_to_set = self.items[0] # 0 is custom + # We need to move to custom preset. + item_to_set = self.getVisibilityPresetById("custom") else: item_to_set = matching_preset_item - if self._active_preset_item is None or self._active_preset_item["id"] != item_to_set["id"]: + # If we didn't find a matching preset, fallback to custom. + if item_to_set is None: + item_to_set = self._custom_preset + + if self._active_preset_item is None or self._active_preset_item.presetId != item_to_set.presetId: self._active_preset_item = item_to_set - self._preferences.setValue("cura/active_setting_visibility_preset", self._active_preset_item["id"]) + if self._active_preset_item is not None: + self._preferences.setValue("cura/active_setting_visibility_preset", self._active_preset_item.presetId) self.activePresetChanged.emit() diff --git a/cura/Machines/QualityChangesGroup.py b/cura/Machines/QualityChangesGroup.py index 2d0e655ed8..7844b935dc 100644 --- a/cura/Machines/QualityChangesGroup.py +++ b/cura/Machines/QualityChangesGroup.py @@ -17,16 +17,16 @@ class QualityChangesGroup(QualityGroup): super().__init__(name, quality_type, parent) self._container_registry = Application.getInstance().getContainerRegistry() - def addNode(self, node: "QualityNode"): + def addNode(self, node: "QualityNode") -> None: extruder_position = node.getMetaDataEntry("position") if extruder_position is None and self.node_for_global is not None or extruder_position in self.nodes_for_extruders: #We would be overwriting another node. ConfigurationErrorMessage.getInstance().addFaultyContainers(node.getMetaDataEntry("id")) return - if extruder_position is None: #Then we're a global quality changes profile. + if extruder_position is None: # Then we're a global quality changes profile. self.node_for_global = node - else: #This is an extruder's quality changes profile. + else: # This is an extruder's quality changes profile. self.nodes_for_extruders[extruder_position] = node def __str__(self) -> str: diff --git a/cura/Machines/QualityGroup.py b/cura/Machines/QualityGroup.py index 90ef63af51..f5bcbb0de8 100644 --- a/cura/Machines/QualityGroup.py +++ b/cura/Machines/QualityGroup.py @@ -4,8 +4,12 @@ from typing import Dict, Optional, List, Set from PyQt5.QtCore import QObject, pyqtSlot + +from UM.Util import parseBool + from cura.Machines.ContainerNode import ContainerNode + # # A QualityGroup represents a group of containers that must be applied to each ContainerStack when it's used. # Some concrete examples are Quality and QualityChanges: when we select quality type "normal", this quality type @@ -28,13 +32,14 @@ class QualityGroup(QObject): self.nodes_for_extruders = {} # type: Dict[int, ContainerNode] self.quality_type = quality_type self.is_available = False + self.is_experimental = False @pyqtSlot(result = str) def getName(self) -> str: return self.name def getAllKeys(self) -> Set[str]: - result = set() #type: Set[str] + result = set() # type: Set[str] for node in [self.node_for_global] + list(self.nodes_for_extruders.values()): if node is None: continue @@ -50,3 +55,17 @@ class QualityGroup(QObject): for extruder_node in self.nodes_for_extruders.values(): result.append(extruder_node) return result + + def setGlobalNode(self, node: "ContainerNode") -> None: + self.node_for_global = node + + # Update is_experimental flag + is_experimental = parseBool(node.getMetaDataEntry("is_experimental", False)) + self.is_experimental |= is_experimental + + def setExtruderNode(self, position: int, node: "ContainerNode") -> None: + self.nodes_for_extruders[position] = node + + # Update is_experimental flag + is_experimental = parseBool(node.getMetaDataEntry("is_experimental", False)) + self.is_experimental |= is_experimental diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index df3bec0827..34cc9ce4b2 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -1,11 +1,10 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import TYPE_CHECKING, Optional, cast +from typing import TYPE_CHECKING, Optional, cast, Dict, List, Set from PyQt5.QtCore import QObject, QTimer, pyqtSignal, pyqtSlot -from UM.Application import Application from UM.ConfigurationErrorMessage import ConfigurationErrorMessage from UM.Logger import Logger from UM.Util import parseBool @@ -17,9 +16,10 @@ from .QualityGroup import QualityGroup from .QualityNode import QualityNode if TYPE_CHECKING: - from UM.Settings.DefinitionContainer import DefinitionContainer + from UM.Settings.Interfaces import DefinitionContainerInterface from cura.Settings.GlobalStack import GlobalStack from .QualityChangesGroup import QualityChangesGroup + from cura.CuraApplication import CuraApplication # @@ -36,17 +36,20 @@ class QualityManager(QObject): qualitiesUpdated = pyqtSignal() - def __init__(self, container_registry, parent = None): + def __init__(self, application: "CuraApplication", parent = None) -> None: super().__init__(parent) - self._application = Application.getInstance() + self._application = application self._material_manager = self._application.getMaterialManager() - self._container_registry = container_registry + self._container_registry = self._application.getContainerRegistry() self._empty_quality_container = self._application.empty_quality_container self._empty_quality_changes_container = self._application.empty_quality_changes_container - self._machine_nozzle_buildplate_material_quality_type_to_quality_dict = {} # for quality lookup - self._machine_quality_type_to_quality_changes_dict = {} # for quality_changes lookup + # For quality lookup + self._machine_nozzle_buildplate_material_quality_type_to_quality_dict = {} # type: Dict[str, QualityNode] + + # For quality_changes lookup + self._machine_quality_type_to_quality_changes_dict = {} # type: Dict[str, QualityNode] self._default_machine_definition_id = "fdmprinter" @@ -62,7 +65,7 @@ class QualityManager(QObject): self._update_timer.setSingleShot(True) self._update_timer.timeout.connect(self._updateMaps) - def initialize(self): + def initialize(self) -> None: # Initialize the lookup tree for quality profiles with following structure: # -> -> -> # -> @@ -133,13 +136,13 @@ class QualityManager(QObject): Logger.log("d", "Lookup tables updated.") self.qualitiesUpdated.emit() - def _updateMaps(self): + def _updateMaps(self) -> None: self.initialize() - def _onContainerMetadataChanged(self, container): + def _onContainerMetadataChanged(self, container: InstanceContainer) -> None: self._onContainerChanged(container) - def _onContainerChanged(self, container): + def _onContainerChanged(self, container: InstanceContainer) -> None: container_type = container.getMetaDataEntry("type") if container_type not in ("quality", "quality_changes"): return @@ -148,7 +151,7 @@ class QualityManager(QObject): self._update_timer.start() # Updates the given quality groups' availabilities according to which extruders are being used/ enabled. - def _updateQualityGroupsAvailability(self, machine: "GlobalStack", quality_group_list): + def _updateQualityGroupsAvailability(self, machine: "GlobalStack", quality_group_list) -> None: used_extruders = set() for i in range(machine.getProperty("machine_extruder_count", "value")): if str(i) in machine.extruders and machine.extruders[str(i)].isEnabled: @@ -196,33 +199,43 @@ class QualityManager(QObject): # Whether a QualityGroup is available can be unknown via the field QualityGroup.is_available. # For more details, see QualityGroup. # - def getQualityGroups(self, machine: "GlobalStack") -> dict: + def getQualityGroups(self, machine: "GlobalStack") -> Dict[str, QualityGroup]: machine_definition_id = getMachineDefinitionIDForQualitySearch(machine.definition) # This determines if we should only get the global qualities for the global stack and skip the global qualities for the extruder stacks - has_variant_materials = parseBool(machine.getMetaDataEntry("has_variant_materials", False)) + has_machine_specific_qualities = machine.getHasMachineQuality() # To find the quality container for the GlobalStack, check in the following fall-back manner: # (1) the machine-specific node # (2) the generic node machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(machine_definition_id) + # Check if this machine has specific quality profiles for its extruders, if so, when looking up extruder + # qualities, we should not fall back to use the global qualities. + has_extruder_specific_qualities = False + if machine_node: + if machine_node.children_map: + has_extruder_specific_qualities = True + default_machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(self._default_machine_definition_id) - nodes_to_check = [machine_node, default_machine_node] + + nodes_to_check = [] # type: List[QualityNode] + if machine_node is not None: + nodes_to_check.append(machine_node) + if default_machine_node is not None: + nodes_to_check.append(default_machine_node) # Iterate over all quality_types in the machine node quality_group_dict = {} for node in nodes_to_check: if node and node.quality_type_map: - # Only include global qualities - if has_variant_materials: - quality_node = list(node.quality_type_map.values())[0] - is_global_quality = parseBool(quality_node.metadata.get("global_quality", False)) - if not is_global_quality: - continue + quality_node = list(node.quality_type_map.values())[0] + is_global_quality = parseBool(quality_node.getMetaDataEntry("global_quality", False)) + if not is_global_quality: + continue for quality_type, quality_node in node.quality_type_map.items(): - quality_group = QualityGroup(quality_node.metadata["name"], quality_type) - quality_group.node_for_global = quality_node + quality_group = QualityGroup(quality_node.getMetaDataEntry("name", ""), quality_type) + quality_group.setGlobalNode(quality_node) quality_group_dict[quality_type] = quality_group break @@ -246,11 +259,15 @@ 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) + + # 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 @@ -259,18 +276,25 @@ class QualityManager(QObject): # 2. machine-nozzle-and-material-specific qualities if exist # 3. machine-nozzle-specific qualities if exist # 4. machine-material-specific qualities if exist - # 5. machine-specific qualities if exist - # 6. generic qualities if exist + # 5. machine-specific global qualities if exist, otherwise generic global qualities + # NOTE: We DO NOT fail back to generic global qualities if machine-specific global qualities exist. + # This is because when a machine defines its own global qualities such as Normal, Fine, etc., + # it is intended to maintain those specific qualities ONLY. If we still fail back to the generic + # global qualities, there can be unimplemented quality types e.g. "coarse", and this is not + # correct. # Each points above can be represented as a node in the lookup tree, so here we simply put those nodes into # the list with priorities as the order. Later, we just need to loop over each node in this list and fetch # qualities from there. - node_info_list_0 = [nozzle_name, buildplate_name, root_material_id] + node_info_list_0 = [nozzle_name, buildplate_name, root_material_id] # type: List[Optional[str]] nodes_to_check = [] # This function tries to recursively find the deepest (the most specific) branch and add those nodes to # the search list in the order described above. So, by iterating over that search node list, we first look # in the more specific branches and then the less specific (generic) ones. - def addNodesToCheck(node, nodes_to_check_list, node_info_list, node_info_idx): + def addNodesToCheck(node: Optional[QualityNode], nodes_to_check_list: List[QualityNode], node_info_list, node_info_idx: int) -> None: + if node is None: + return + if node_info_idx < len(node_info_list): node_name = node_info_list[node_info_idx] if node_name is not None: @@ -289,31 +313,44 @@ class QualityManager(QObject): addNodesToCheck(machine_node, nodes_to_check, node_info_list_0, 0) - nodes_to_check += [machine_node, default_machine_node] - for node in nodes_to_check: + # The last fall back will be the global qualities (either from the machine-specific node or the generic + # node), but we only use one. For details see the overview comments above. + + if machine_node is not None and machine_node.quality_type_map: + nodes_to_check += [machine_node] + elif default_machine_node is not None: + nodes_to_check += [default_machine_node] + + for node_idx, node in enumerate(nodes_to_check): if node and node.quality_type_map: - if has_variant_materials: + if has_extruder_specific_qualities: # Only include variant qualities; skip non global qualities quality_node = list(node.quality_type_map.values())[0] - is_global_quality = parseBool(quality_node.metadata.get("global_quality", False)) + is_global_quality = parseBool(quality_node.getMetaDataEntry("global_quality", False)) if is_global_quality: continue for quality_type, quality_node in node.quality_type_map.items(): if quality_type not in quality_group_dict: - quality_group = QualityGroup(quality_node.metadata["name"], quality_type) + quality_group = QualityGroup(quality_node.getMetaDataEntry("name", ""), quality_type) quality_group_dict[quality_type] = quality_group quality_group = quality_group_dict[quality_type] if position not in quality_group.nodes_for_extruders: - quality_group.nodes_for_extruders[position] = quality_node + quality_group.setExtruderNode(position, quality_node) + + # If the machine has its own specific qualities, for extruders, it should skip the global qualities + # and use the material/variant specific qualities. + if has_extruder_specific_qualities: + if node_idx == len(nodes_to_check) - 1: + break # Update availabilities for each quality group self._updateQualityGroupsAvailability(machine, quality_group_dict.values()) return quality_group_dict - def getQualityGroupsForMachineDefinition(self, machine: "GlobalStack") -> dict: + def getQualityGroupsForMachineDefinition(self, machine: "GlobalStack") -> Dict[str, QualityGroup]: machine_definition_id = getMachineDefinitionIDForQualitySearch(machine.definition) # To find the quality container for the GlobalStack, check in the following fall-back manner: @@ -329,8 +366,8 @@ class QualityManager(QObject): for node in nodes_to_check: if node and node.quality_type_map: for quality_type, quality_node in node.quality_type_map.items(): - quality_group = QualityGroup(quality_node.metadata["name"], quality_type) - quality_group.node_for_global = quality_node + quality_group = QualityGroup(quality_node.getMetaDataEntry("name", ""), quality_type) + quality_group.setGlobalNode(quality_node) quality_group_dict[quality_type] = quality_group break @@ -351,10 +388,21 @@ class QualityManager(QObject): # Remove the given quality changes group. # @pyqtSlot(QObject) - def removeQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup"): + def removeQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup") -> None: Logger.log("i", "Removing quality changes group [%s]", quality_changes_group.name) + removed_quality_changes_ids = set() for node in quality_changes_group.getAllNodes(): - self._container_registry.removeContainer(node.getMetaDataEntry("id")) + container_id = node.getMetaDataEntry("id") + self._container_registry.removeContainer(container_id) + removed_quality_changes_ids.add(container_id) + + # Reset all machines that have activated this quality changes to empty. + for global_stack in self._container_registry.findContainerStacks(type = "machine"): + if global_stack.qualityChanges.getId() in removed_quality_changes_ids: + global_stack.qualityChanges = self._empty_quality_changes_container + for extruder_stack in self._container_registry.findContainerStacks(type = "extruder_train"): + if extruder_stack.qualityChanges.getId() in removed_quality_changes_ids: + extruder_stack.qualityChanges = self._empty_quality_changes_container # # Rename a set of quality changes containers. Returns the new name. @@ -383,7 +431,7 @@ class QualityManager(QObject): # Duplicates the given quality. # @pyqtSlot(str, "QVariantMap") - def duplicateQualityChanges(self, quality_changes_name, quality_model_item): + def duplicateQualityChanges(self, quality_changes_name: str, quality_model_item) -> None: global_stack = self._application.getGlobalContainerStack() if not global_stack: Logger.log("i", "No active global stack, cannot duplicate quality changes.") @@ -411,8 +459,8 @@ class QualityManager(QObject): # the user containers in each stack. These then replace the quality_changes containers in the # stack and clear the user settings. @pyqtSlot(str) - def createQualityChanges(self, base_name): - machine_manager = Application.getInstance().getMachineManager() + def createQualityChanges(self, base_name: str) -> None: + machine_manager = self._application.getMachineManager() global_stack = machine_manager.activeMachine if not global_stack: @@ -490,7 +538,7 @@ class QualityManager(QObject): # Example: for an Ultimaker 3 Extended, it has "quality_definition = ultimaker3". This means Ultimaker 3 Extended # shares the same set of qualities profiles as Ultimaker 3. # -def getMachineDefinitionIDForQualitySearch(machine_definition: "DefinitionContainer", +def getMachineDefinitionIDForQualitySearch(machine_definition: "DefinitionContainerInterface", default_definition_id: str = "fdmprinter") -> str: machine_definition_id = default_definition_id if parseBool(machine_definition.getMetaDataEntry("has_machine_quality", False)): diff --git a/cura/Machines/QualityNode.py b/cura/Machines/QualityNode.py index f384ee7825..991388a4bd 100644 --- a/cura/Machines/QualityNode.py +++ b/cura/Machines/QualityNode.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 Optional, Dict, cast +from typing import Optional, Dict, cast, Any from .ContainerNode import ContainerNode from .QualityChangesGroup import QualityChangesGroup @@ -12,18 +12,21 @@ from .QualityChangesGroup import QualityChangesGroup # class QualityNode(ContainerNode): - def __init__(self, metadata: Optional[dict] = None) -> None: + def __init__(self, metadata: Optional[Dict[str, Any]] = None) -> None: super().__init__(metadata = metadata) self.quality_type_map = {} # type: Dict[str, QualityNode] # quality_type -> QualityNode for InstanceContainer - def addQualityMetadata(self, quality_type: str, metadata: dict): + def getChildNode(self, child_key: str) -> Optional["QualityNode"]: + return self.children_map.get(child_key) + + def addQualityMetadata(self, quality_type: str, metadata: Dict[str, Any]): if quality_type not in self.quality_type_map: self.quality_type_map[quality_type] = QualityNode(metadata) def getQualityNode(self, quality_type: str) -> Optional["QualityNode"]: return self.quality_type_map.get(quality_type) - def addQualityChangesMetadata(self, quality_type: str, metadata: dict): + def addQualityChangesMetadata(self, quality_type: str, metadata: Dict[str, Any]): if quality_type not in self.quality_type_map: self.quality_type_map[quality_type] = QualityNode() quality_type_node = self.quality_type_map[quality_type] diff --git a/cura/Machines/VariantManager.py b/cura/Machines/VariantManager.py index 969fed670e..eaaa9fc5f0 100644 --- a/cura/Machines/VariantManager.py +++ b/cura/Machines/VariantManager.py @@ -2,7 +2,7 @@ # Cura is released under the terms of the LGPLv3 or higher. from collections import OrderedDict -from typing import Optional, TYPE_CHECKING +from typing import Optional, TYPE_CHECKING, Dict from UM.ConfigurationErrorMessage import ConfigurationErrorMessage from UM.Logger import Logger @@ -36,11 +36,11 @@ if TYPE_CHECKING: # class VariantManager: - def __init__(self, container_registry): - self._container_registry = container_registry # type: ContainerRegistry + def __init__(self, container_registry: ContainerRegistry) -> None: + self._container_registry = container_registry - self._machine_to_variant_dict_map = dict() # -> - self._machine_to_buildplate_dict_map = dict() + self._machine_to_variant_dict_map = dict() # type: Dict[str, Dict["VariantType", Dict[str, ContainerNode]]] + self._machine_to_buildplate_dict_map = dict() # type: Dict[str, Dict[str, ContainerNode]] self._exclude_variant_id_list = ["empty_variant"] @@ -48,7 +48,7 @@ class VariantManager: # Initializes the VariantManager including: # - initializing the variant lookup table based on the metadata in ContainerRegistry. # - def initialize(self): + def initialize(self) -> None: self._machine_to_variant_dict_map = OrderedDict() self._machine_to_buildplate_dict_map = OrderedDict() @@ -106,26 +106,33 @@ class VariantManager: variant_node = variant_dict[variant_name] break return variant_node - return self._machine_to_variant_dict_map[machine_definition_id].get(variant_type, {}).get(variant_name) - def getVariantNodes(self, machine: "GlobalStack", - variant_type: Optional["VariantType"] = None) -> dict: + return self._machine_to_variant_dict_map.get(machine_definition_id, {}).get(variant_type, {}).get(variant_name) + + def getVariantNodes(self, machine: "GlobalStack", variant_type: "VariantType") -> Dict[str, ContainerNode]: machine_definition_id = machine.definition.getId() return self._machine_to_variant_dict_map.get(machine_definition_id, {}).get(variant_type, {}) # # Gets the default variant for the given machine definition. + # If the optional GlobalStack is given, the metadata information will be fetched from the GlobalStack instead of + # the DefinitionContainer. Because for machines such as UM2, you can enable Olsson Block, which will set + # "has_variants" to True in the GlobalStack. In those cases, we need to fetch metadata from the GlobalStack or + # it may not be correct. # def getDefaultVariantNode(self, machine_definition: "DefinitionContainer", - variant_type: VariantType) -> Optional["ContainerNode"]: + variant_type: "VariantType", + global_stack: Optional["GlobalStack"] = None) -> Optional["ContainerNode"]: machine_definition_id = machine_definition.getId() + container_for_metadata_fetching = global_stack if global_stack is not None else machine_definition + preferred_variant_name = None if variant_type == VariantType.BUILD_PLATE: - if parseBool(machine_definition.getMetaDataEntry("has_variant_buildplates", False)): - preferred_variant_name = machine_definition.getMetaDataEntry("preferred_variant_buildplate_name") + if parseBool(container_for_metadata_fetching.getMetaDataEntry("has_variant_buildplates", False)): + preferred_variant_name = container_for_metadata_fetching.getMetaDataEntry("preferred_variant_buildplate_name") else: - if parseBool(machine_definition.getMetaDataEntry("has_variants", False)): - preferred_variant_name = machine_definition.getMetaDataEntry("preferred_variant_name") + if parseBool(container_for_metadata_fetching.getMetaDataEntry("has_variants", False)): + preferred_variant_name = container_for_metadata_fetching.getMetaDataEntry("preferred_variant_name") node = None if preferred_variant_name: diff --git a/cura/MultiplyObjectsJob.py b/cura/MultiplyObjectsJob.py index 3cbf795952..e71bbf6668 100644 --- a/cura/MultiplyObjectsJob.py +++ b/cura/MultiplyObjectsJob.py @@ -25,7 +25,7 @@ class MultiplyObjectsJob(Job): def run(self): status_message = Message(i18n_catalog.i18nc("@info:status", "Multiplying and placing objects"), lifetime=0, - dismissable=False, progress=0, title = i18n_catalog.i18nc("@info:title", "Placing Object")) + dismissable=False, progress=0, title = i18n_catalog.i18nc("@info:title", "Placing Objects")) status_message.show() scene = Application.getInstance().getController().getScene() diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py new file mode 100644 index 0000000000..8224e7b51f --- /dev/null +++ b/cura/OAuth2/AuthorizationHelpers.py @@ -0,0 +1,122 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from datetime import datetime +import json +import random +from hashlib import sha512 +from base64 import b64encode +from typing import Optional + +import requests + +from UM.i18n import i18nCatalog +from UM.Logger import Logger + +from cura.OAuth2.Models import AuthenticationResponse, UserProfile, OAuth2Settings +catalog = i18nCatalog("cura") +TOKEN_TIMESTAMP_FORMAT = "%Y-%m-%d %H:%M:%S" + +## Class containing several helpers to deal with the authorization flow. +class AuthorizationHelpers: + def __init__(self, settings: "OAuth2Settings") -> None: + self._settings = settings + self._token_url = "{}/token".format(self._settings.OAUTH_SERVER_URL) + + @property + ## The OAuth2 settings object. + def settings(self) -> "OAuth2Settings": + return self._settings + + ## Request the access token from the authorization server. + # \param authorization_code: The authorization code from the 1st step. + # \param verification_code: The verification code needed for the PKCE + # extension. + # \return An AuthenticationResponse object. + def getAccessTokenUsingAuthorizationCode(self, authorization_code: str, verification_code: str) -> "AuthenticationResponse": + data = { + "client_id": self._settings.CLIENT_ID if self._settings.CLIENT_ID is not None else "", + "redirect_uri": self._settings.CALLBACK_URL if self._settings.CALLBACK_URL is not None else "", + "grant_type": "authorization_code", + "code": authorization_code, + "code_verifier": verification_code, + "scope": self._settings.CLIENT_SCOPES if self._settings.CLIENT_SCOPES is not None else "", + } + return self.parseTokenResponse(requests.post(self._token_url, data = data)) # type: ignore + + ## Request the access token from the authorization server using a refresh token. + # \param refresh_token: + # \return An AuthenticationResponse object. + def getAccessTokenUsingRefreshToken(self, refresh_token: str) -> "AuthenticationResponse": + data = { + "client_id": self._settings.CLIENT_ID if self._settings.CLIENT_ID is not None else "", + "redirect_uri": self._settings.CALLBACK_URL if self._settings.CALLBACK_URL is not None else "", + "grant_type": "refresh_token", + "refresh_token": refresh_token, + "scope": self._settings.CLIENT_SCOPES if self._settings.CLIENT_SCOPES is not None else "", + } + return self.parseTokenResponse(requests.post(self._token_url, data = data)) # type: ignore + + @staticmethod + ## Parse the token response from the authorization server into an AuthenticationResponse object. + # \param token_response: The JSON string data response from the authorization server. + # \return An AuthenticationResponse object. + def parseTokenResponse(token_response: requests.models.Response) -> "AuthenticationResponse": + token_data = None + + try: + token_data = json.loads(token_response.text) + except ValueError: + Logger.log("w", "Could not parse token response data: %s", token_response.text) + + if not token_data: + return AuthenticationResponse(success = False, err_message = catalog.i18nc("@message", "Could not read response.")) + + if token_response.status_code not in (200, 201): + return AuthenticationResponse(success = False, err_message = token_data["error_description"]) + + return AuthenticationResponse(success=True, + token_type=token_data["token_type"], + access_token=token_data["access_token"], + refresh_token=token_data["refresh_token"], + expires_in=token_data["expires_in"], + scope=token_data["scope"], + received_at=datetime.now().strftime(TOKEN_TIMESTAMP_FORMAT)) + + ## Calls the authentication API endpoint to get the token data. + # \param access_token: The encoded JWT token. + # \return Dict containing some profile data. + def parseJWT(self, access_token: str) -> Optional["UserProfile"]: + try: + token_request = requests.get("{}/check-token".format(self._settings.OAUTH_SERVER_URL), headers = { + "Authorization": "Bearer {}".format(access_token) + }) + except requests.exceptions.ConnectionError: + # Connection was suddenly dropped. Nothing we can do about that. + Logger.log("w", "Something failed while attempting to parse the JWT token") + return None + if token_request.status_code not in (200, 201): + Logger.log("w", "Could not retrieve token data from auth server: %s", token_request.text) + return None + user_data = token_request.json().get("data") + if not user_data or not isinstance(user_data, dict): + Logger.log("w", "Could not parse user data from token: %s", user_data) + return None + return UserProfile( + user_id = user_data["user_id"], + username = user_data["username"], + profile_image_url = user_data.get("profile_image_url", "") + ) + + @staticmethod + ## Generate a 16-character verification code. + # \param code_length: How long should the code be? + def generateVerificationCode(code_length: int = 16) -> str: + return "".join(random.choice("0123456789ABCDEF") for i in range(code_length)) + + @staticmethod + ## Generates a base64 encoded sha512 encrypted version of a given string. + # \param verification_code: + # \return The encrypted code in base64 format. + def generateVerificationCodeChallenge(verification_code: str) -> str: + encoded = sha512(verification_code.encode()).digest() + return b64encode(encoded, altchars = b"_-").decode() diff --git a/cura/OAuth2/AuthorizationRequestHandler.py b/cura/OAuth2/AuthorizationRequestHandler.py new file mode 100644 index 0000000000..66ecfc2787 --- /dev/null +++ b/cura/OAuth2/AuthorizationRequestHandler.py @@ -0,0 +1,103 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from http.server import BaseHTTPRequestHandler +from typing import Optional, Callable, Tuple, Dict, Any, List, TYPE_CHECKING +from urllib.parse import parse_qs, urlparse + +from cura.OAuth2.Models import AuthenticationResponse, ResponseData, HTTP_STATUS +from UM.i18n import i18nCatalog + +if TYPE_CHECKING: + from cura.OAuth2.Models import ResponseStatus + from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers + +catalog = i18nCatalog("cura") + +## This handler handles all HTTP requests on the local web server. +# It also requests the access token for the 2nd stage of the OAuth flow. +class AuthorizationRequestHandler(BaseHTTPRequestHandler): + def __init__(self, request, client_address, server) -> None: + super().__init__(request, client_address, server) + + # These values will be injected by the HTTPServer that this handler belongs to. + self.authorization_helpers = None # type: Optional[AuthorizationHelpers] + self.authorization_callback = None # type: Optional[Callable[[AuthenticationResponse], None]] + self.verification_code = None # type: Optional[str] + + def do_GET(self) -> None: + # Extract values from the query string. + parsed_url = urlparse(self.path) + query = parse_qs(parsed_url.query) + + # Handle the possible requests + if parsed_url.path == "/callback": + server_response, token_response = self._handleCallback(query) + else: + server_response = self._handleNotFound() + token_response = None + + # Send the data to the browser. + self._sendHeaders(server_response.status, server_response.content_type, server_response.redirect_uri) + + if server_response.data_stream: + # If there is data in the response, we send it. + self._sendData(server_response.data_stream) + + if token_response and self.authorization_callback is not None: + # Trigger the callback if we got a response. + # This will cause the server to shut down, so we do it at the very end of the request handling. + self.authorization_callback(token_response) + + ## Handler for the callback URL redirect. + # \param query Dict containing the HTTP query parameters. + # \return HTTP ResponseData containing a success page to show to the user. + def _handleCallback(self, query: Dict[Any, List]) -> Tuple[ResponseData, Optional[AuthenticationResponse]]: + code = self._queryGet(query, "code") + if code and self.authorization_helpers is not None and self.verification_code is not None: + # If the code was returned we get the access token. + token_response = self.authorization_helpers.getAccessTokenUsingAuthorizationCode( + code, self.verification_code) + + elif self._queryGet(query, "error_code") == "user_denied": + # Otherwise we show an error message (probably the user clicked "Deny" in the auth dialog). + token_response = AuthenticationResponse( + success = False, + err_message = catalog.i18nc("@message", "Please give the required permissions when authorizing this application.") + ) + + else: + # We don't know what went wrong here, so instruct the user to check the logs. + token_response = AuthenticationResponse( + success = False, + error_message = catalog.i18nc("@message", "Something unexpected happened when trying to log in, please try again.") + ) + if self.authorization_helpers is None: + return ResponseData(), token_response + + return ResponseData( + status = HTTP_STATUS["REDIRECT"], + data_stream = b"Redirecting...", + redirect_uri = self.authorization_helpers.settings.AUTH_SUCCESS_REDIRECT if token_response.success else + self.authorization_helpers.settings.AUTH_FAILED_REDIRECT + ), token_response + + ## Handle all other non-existing server calls. + @staticmethod + def _handleNotFound() -> ResponseData: + return ResponseData(status = HTTP_STATUS["NOT_FOUND"], content_type = "text/html", data_stream = b"Not found.") + + def _sendHeaders(self, status: "ResponseStatus", content_type: str, redirect_uri: str = None) -> None: + self.send_response(status.code, status.message) + self.send_header("Content-type", content_type) + if redirect_uri: + self.send_header("Location", redirect_uri) + self.end_headers() + + def _sendData(self, data: bytes) -> None: + self.wfile.write(data) + + ## Convenience helper for getting values from a pre-parsed query string + @staticmethod + def _queryGet(query_data: Dict[Any, List], key: str, default: Optional[str] = None) -> Optional[str]: + return query_data.get(key, [default])[0] diff --git a/cura/OAuth2/AuthorizationRequestServer.py b/cura/OAuth2/AuthorizationRequestServer.py new file mode 100644 index 0000000000..51a8ceba77 --- /dev/null +++ b/cura/OAuth2/AuthorizationRequestServer.py @@ -0,0 +1,27 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from http.server import HTTPServer +from typing import Callable, Any, TYPE_CHECKING + +if TYPE_CHECKING: + from cura.OAuth2.Models import AuthenticationResponse + from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers + + +## The authorization request callback handler server. +# This subclass is needed to be able to pass some data to the request handler. +# This cannot be done on the request handler directly as the HTTPServer +# creates an instance of the handler after init. +class AuthorizationRequestServer(HTTPServer): + ## Set the authorization helpers instance on the request handler. + def setAuthorizationHelpers(self, authorization_helpers: "AuthorizationHelpers") -> None: + self.RequestHandlerClass.authorization_helpers = authorization_helpers # type: ignore + + ## Set the authorization callback on the request handler. + def setAuthorizationCallback(self, authorization_callback: Callable[["AuthenticationResponse"], Any]) -> None: + self.RequestHandlerClass.authorization_callback = authorization_callback # type: ignore + + ## Set the verification code on the request handler. + def setVerificationCode(self, verification_code: str) -> None: + self.RequestHandlerClass.verification_code = verification_code # type: ignore diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py new file mode 100644 index 0000000000..dd20ea1d96 --- /dev/null +++ b/cura/OAuth2/AuthorizationService.py @@ -0,0 +1,207 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import json +import webbrowser +from datetime import datetime, timedelta +from typing import Optional, TYPE_CHECKING +from urllib.parse import urlencode +import requests.exceptions + + +from UM.Logger import Logger +from UM.Message import Message +from UM.Signal import Signal + +from cura.OAuth2.LocalAuthorizationServer import LocalAuthorizationServer +from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers, TOKEN_TIMESTAMP_FORMAT +from cura.OAuth2.Models import AuthenticationResponse + +from UM.i18n import i18nCatalog +i18n_catalog = i18nCatalog("cura") + +if TYPE_CHECKING: + from cura.OAuth2.Models import UserProfile, OAuth2Settings + from UM.Preferences import Preferences + + +## The authorization service is responsible for handling the login flow, +# storing user credentials and providing account information. +class AuthorizationService: + # Emit signal when authentication is completed. + onAuthStateChanged = Signal() + + # Emit signal when authentication failed. + onAuthenticationError = Signal() + + def __init__(self, settings: "OAuth2Settings", preferences: Optional["Preferences"] = None) -> None: + self._settings = settings + self._auth_helpers = AuthorizationHelpers(settings) + self._auth_url = "{}/authorize".format(self._settings.OAUTH_SERVER_URL) + self._auth_data = None # type: Optional[AuthenticationResponse] + self._user_profile = None # type: Optional["UserProfile"] + self._preferences = preferences + self._server = LocalAuthorizationServer(self._auth_helpers, self._onAuthStateChanged, daemon=True) + + self._unable_to_get_data_message = None # type: Optional[Message] + + self.onAuthStateChanged.connect(self._authChanged) + + def _authChanged(self, logged_in): + if logged_in and self._unable_to_get_data_message is not None: + self._unable_to_get_data_message.hide() + + def initialize(self, preferences: Optional["Preferences"] = None) -> None: + if preferences is not None: + self._preferences = preferences + if self._preferences: + self._preferences.addPreference(self._settings.AUTH_DATA_PREFERENCE_KEY, "{}") + + ## Get the user profile as obtained from the JWT (JSON Web Token). + # If the JWT is not yet parsed, calling this will take care of that. + # \return UserProfile if a user is logged in, None otherwise. + # \sa _parseJWT + def getUserProfile(self) -> Optional["UserProfile"]: + if not self._user_profile: + # If no user profile was stored locally, we try to get it from JWT. + try: + self._user_profile = self._parseJWT() + except requests.exceptions.ConnectionError: + # Unable to get connection, can't login. + return None + + if not self._user_profile and self._auth_data: + # If there is still no user profile from the JWT, we have to log in again. + Logger.log("w", "The user profile could not be loaded. The user must log in again!") + self.deleteAuthData() + return None + + return self._user_profile + + ## Tries to parse the JWT (JSON Web Token) data, which it does if all the needed data is there. + # \return UserProfile if it was able to parse, None otherwise. + def _parseJWT(self) -> Optional["UserProfile"]: + if not self._auth_data or self._auth_data.access_token is None: + # If no auth data exists, we should always log in again. + return None + user_data = self._auth_helpers.parseJWT(self._auth_data.access_token) + if user_data: + # If the profile was found, we return it immediately. + return user_data + # The JWT was expired or invalid and we should request a new one. + if self._auth_data.refresh_token is None: + return None + self._auth_data = self._auth_helpers.getAccessTokenUsingRefreshToken(self._auth_data.refresh_token) + if not self._auth_data or self._auth_data.access_token is None: + # The token could not be refreshed using the refresh token. We should login again. + return None + + return self._auth_helpers.parseJWT(self._auth_data.access_token) + + ## Get the access token as provided by the repsonse data. + def getAccessToken(self) -> Optional[str]: + if self._auth_data is None: + Logger.log("d", "No auth data to retrieve the access_token from") + return None + + # Check if the current access token is expired and refresh it if that is the case. + # We have a fallback on a date far in the past for currently stored auth data in cura.cfg. + received_at = datetime.strptime(self._auth_data.received_at, TOKEN_TIMESTAMP_FORMAT) \ + if self._auth_data.received_at else datetime(2000, 1, 1) + expiry_date = received_at + timedelta(seconds = float(self._auth_data.expires_in or 0)) + if datetime.now() > expiry_date: + self.refreshAccessToken() + + return self._auth_data.access_token if self._auth_data else None + + ## Try to refresh the access token. This should be used when it has expired. + def refreshAccessToken(self) -> None: + if self._auth_data is None or self._auth_data.refresh_token is None: + Logger.log("w", "Unable to refresh access token, since there is no refresh token.") + return + self._storeAuthData(self._auth_helpers.getAccessTokenUsingRefreshToken(self._auth_data.refresh_token)) + self.onAuthStateChanged.emit(logged_in = True) + + ## Delete the authentication data that we have stored locally (eg; logout) + def deleteAuthData(self) -> None: + if self._auth_data is not None: + self._storeAuthData() + self.onAuthStateChanged.emit(logged_in = False) + + ## Start the flow to become authenticated. This will start a new webbrowser tap, prompting the user to login. + def startAuthorizationFlow(self) -> None: + Logger.log("d", "Starting new OAuth2 flow...") + + # Create the tokens needed for the code challenge (PKCE) extension for OAuth2. + # This is needed because the CuraDrivePlugin is a untrusted (open source) client. + # More details can be found at https://tools.ietf.org/html/rfc7636. + verification_code = self._auth_helpers.generateVerificationCode() + challenge_code = self._auth_helpers.generateVerificationCodeChallenge(verification_code) + + # Create the query string needed for the OAuth2 flow. + query_string = urlencode({ + "client_id": self._settings.CLIENT_ID, + "redirect_uri": self._settings.CALLBACK_URL, + "scope": self._settings.CLIENT_SCOPES, + "response_type": "code", + "state": "(.Y.)", + "code_challenge": challenge_code, + "code_challenge_method": "S512" + }) + + # Open the authorization page in a new browser window. + webbrowser.open_new("{}?{}".format(self._auth_url, query_string)) + + # Start a local web server to receive the callback URL on. + self._server.start(verification_code) + + ## Callback method for the authentication flow. + def _onAuthStateChanged(self, auth_response: AuthenticationResponse) -> None: + if auth_response.success: + self._storeAuthData(auth_response) + self.onAuthStateChanged.emit(logged_in = True) + else: + self.onAuthenticationError.emit(logged_in = False, error_message = auth_response.err_message) + self._server.stop() # Stop the web server at all times. + + ## Load authentication data from preferences. + def loadAuthDataFromPreferences(self) -> None: + if self._preferences is None: + Logger.log("e", "Unable to load authentication data, since no preference has been set!") + return + try: + preferences_data = json.loads(self._preferences.getValue(self._settings.AUTH_DATA_PREFERENCE_KEY)) + if preferences_data: + self._auth_data = AuthenticationResponse(**preferences_data) + # Also check if we can actually get the user profile information. + user_profile = self.getUserProfile() + if user_profile is not None: + self.onAuthStateChanged.emit(logged_in = True) + else: + if self._unable_to_get_data_message is not None: + self._unable_to_get_data_message.hide() + + self._unable_to_get_data_message = Message(i18n_catalog.i18nc("@info", "Unable to reach the Ultimaker account server."), title = i18n_catalog.i18nc("@info:title", "Warning")) + self._unable_to_get_data_message.addAction("retry", i18n_catalog.i18nc("@action:button", "Retry"), "[no_icon]", "[no_description]") + self._unable_to_get_data_message.actionTriggered.connect(self._onMessageActionTriggered) + self._unable_to_get_data_message.show() + except ValueError: + Logger.logException("w", "Could not load auth data from preferences") + + ## Store authentication data in preferences. + def _storeAuthData(self, auth_data: Optional[AuthenticationResponse] = None) -> None: + if self._preferences is None: + Logger.log("e", "Unable to save authentication data, since no preference has been set!") + return + + self._auth_data = auth_data + if auth_data: + self._user_profile = self.getUserProfile() + self._preferences.setValue(self._settings.AUTH_DATA_PREFERENCE_KEY, json.dumps(vars(auth_data))) + else: + self._user_profile = None + self._preferences.resetPreference(self._settings.AUTH_DATA_PREFERENCE_KEY) + + def _onMessageActionTriggered(self, _, action): + if action == "retry": + self.loadAuthDataFromPreferences() diff --git a/cura/OAuth2/LocalAuthorizationServer.py b/cura/OAuth2/LocalAuthorizationServer.py new file mode 100644 index 0000000000..25b2435012 --- /dev/null +++ b/cura/OAuth2/LocalAuthorizationServer.py @@ -0,0 +1,68 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import threading +from typing import Optional, Callable, Any, TYPE_CHECKING + +from UM.Logger import Logger + +from cura.OAuth2.AuthorizationRequestServer import AuthorizationRequestServer +from cura.OAuth2.AuthorizationRequestHandler import AuthorizationRequestHandler + +if TYPE_CHECKING: + from cura.OAuth2.Models import AuthenticationResponse + from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers + + +class LocalAuthorizationServer: + ## The local LocalAuthorizationServer takes care of the oauth2 callbacks. + # Once the flow is completed, this server should be closed down again by + # calling stop() + # \param auth_helpers An instance of the authorization helpers class. + # \param auth_state_changed_callback A callback function to be called when + # the authorization state changes. + # \param daemon Whether the server thread should be run in daemon mode. + # Note: Daemon threads are abruptly stopped at shutdown. Their resources + # (e.g. open files) may never be released. + def __init__(self, auth_helpers: "AuthorizationHelpers", + auth_state_changed_callback: Callable[["AuthenticationResponse"], Any], + daemon: bool) -> None: + self._web_server = None # type: Optional[AuthorizationRequestServer] + self._web_server_thread = None # type: Optional[threading.Thread] + self._web_server_port = auth_helpers.settings.CALLBACK_PORT + self._auth_helpers = auth_helpers + self._auth_state_changed_callback = auth_state_changed_callback + self._daemon = daemon + + ## Starts the local web server to handle the authorization callback. + # \param verification_code The verification code part of the OAuth2 client identification. + def start(self, verification_code: str) -> None: + if self._web_server: + # If the server is already running (because of a previously aborted auth flow), we don't have to start it. + # We still inject the new verification code though. + self._web_server.setVerificationCode(verification_code) + return + + if self._web_server_port is None: + raise Exception("Unable to start server without specifying the port.") + + Logger.log("d", "Starting local web server to handle authorization callback on port %s", self._web_server_port) + + # Create the server and inject the callback and code. + self._web_server = AuthorizationRequestServer(("0.0.0.0", self._web_server_port), AuthorizationRequestHandler) + self._web_server.setAuthorizationHelpers(self._auth_helpers) + self._web_server.setAuthorizationCallback(self._auth_state_changed_callback) + self._web_server.setVerificationCode(verification_code) + + # Start the server on a new thread. + self._web_server_thread = threading.Thread(None, self._web_server.serve_forever, daemon = self._daemon) + self._web_server_thread.start() + + ## Stops the web server if it was running. It also does some cleanup. + def stop(self) -> None: + Logger.log("d", "Stopping local oauth2 web server...") + + if self._web_server: + self._web_server.server_close() + self._web_server = None + self._web_server_thread = None diff --git a/cura/OAuth2/Models.py b/cura/OAuth2/Models.py new file mode 100644 index 0000000000..468351c62b --- /dev/null +++ b/cura/OAuth2/Models.py @@ -0,0 +1,61 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional + + +class BaseModel: + def __init__(self, **kwargs): + self.__dict__.update(kwargs) + + +## OAuth OAuth2Settings data template. +class OAuth2Settings(BaseModel): + CALLBACK_PORT = None # type: Optional[int] + OAUTH_SERVER_URL = None # type: Optional[str] + CLIENT_ID = None # type: Optional[str] + CLIENT_SCOPES = None # type: Optional[str] + CALLBACK_URL = None # type: Optional[str] + AUTH_DATA_PREFERENCE_KEY = "" # type: str + AUTH_SUCCESS_REDIRECT = "https://ultimaker.com" # type: str + AUTH_FAILED_REDIRECT = "https://ultimaker.com" # type: str + + +## User profile data template. +class UserProfile(BaseModel): + user_id = None # type: Optional[str] + username = None # type: Optional[str] + profile_image_url = None # type: Optional[str] + + +## Authentication data template. +class AuthenticationResponse(BaseModel): + """Data comes from the token response with success flag and error message added.""" + success = True # type: bool + token_type = None # type: Optional[str] + access_token = None # type: Optional[str] + refresh_token = None # type: Optional[str] + expires_in = None # type: Optional[str] + scope = None # type: Optional[str] + err_message = None # type: Optional[str] + received_at = None # type: Optional[str] + + +## Response status template. +class ResponseStatus(BaseModel): + code = 200 # type: int + message = "" # type: str + + +## Response data template. +class ResponseData(BaseModel): + status = None # type: ResponseStatus + data_stream = None # type: Optional[bytes] + redirect_uri = None # type: Optional[str] + content_type = "text/html" # type: str + +## Possible HTTP responses. +HTTP_STATUS = { + "OK": ResponseStatus(code = 200, message = "OK"), + "NOT_FOUND": ResponseStatus(code = 404, message = "NOT FOUND"), + "REDIRECT": ResponseStatus(code = 302, message = "REDIRECT") +} diff --git a/cura/OAuth2/__init__.py b/cura/OAuth2/__init__.py new file mode 100644 index 0000000000..d5641e902f --- /dev/null +++ b/cura/OAuth2/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. diff --git a/cura/ObjectsModel.py b/cura/ObjectsModel.py index f3c703d424..f9f923b31d 100644 --- a/cura/ObjectsModel.py +++ b/cura/ObjectsModel.py @@ -5,10 +5,12 @@ from PyQt5.QtCore import QTimer from UM.Application import Application from UM.Qt.ListModel import ListModel +from UM.Scene.Camera import Camera from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode from UM.Scene.Selection import Selection from UM.i18n import i18nCatalog +from collections import defaultdict catalog = i18nCatalog("cura") @@ -18,19 +20,24 @@ class ObjectsModel(ListModel): def __init__(self): super().__init__() - Application.getInstance().getController().getScene().sceneChanged.connect(self._updateDelayed) + Application.getInstance().getController().getScene().sceneChanged.connect(self._updateSceneDelayed) Application.getInstance().getPreferences().preferenceChanged.connect(self._updateDelayed) self._update_timer = QTimer() - self._update_timer.setInterval(100) + self._update_timer.setInterval(200) self._update_timer.setSingleShot(True) self._update_timer.timeout.connect(self._update) self._build_plate_number = -1 def setActiveBuildPlate(self, nr): - self._build_plate_number = nr - self._update() + if self._build_plate_number != nr: + self._build_plate_number = nr + self._update() + + def _updateSceneDelayed(self, source): + if not isinstance(source, Camera): + self._update_timer.start() def _updateDelayed(self, *args): self._update_timer.start() @@ -40,6 +47,8 @@ class ObjectsModel(ListModel): filter_current_build_plate = Application.getInstance().getPreferences().getValue("view/filter_current_build_plate") active_build_plate_number = self._build_plate_number group_nr = 1 + name_count_dict = defaultdict(int) + for node in DepthFirstIterator(Application.getInstance().getController().getScene().getRoot()): if not isinstance(node, SceneNode): continue @@ -55,6 +64,7 @@ class ObjectsModel(ListModel): if not node.callDecoration("isGroup"): name = node.getName() + else: name = catalog.i18nc("@label", "Group #{group_nr}").format(group_nr = str(group_nr)) group_nr += 1 @@ -63,6 +73,14 @@ class ObjectsModel(ListModel): is_outside_build_area = node.isOutsideBuildArea() else: is_outside_build_area = False + + #check if we already have an instance of the object based on name + name_count_dict[name] += 1 + name_count = name_count_dict[name] + + if name_count > 1: + name = "{0}({1})".format(name, name_count-1) + node.setName(name) nodes.append({ "name": name, @@ -71,6 +89,7 @@ class ObjectsModel(ListModel): "buildPlateNumber": node_build_plate_number, "node": node }) + nodes = sorted(nodes, key=lambda n: n["name"]) self.setItems(nodes) diff --git a/cura/PlatformPhysics.py b/cura/PlatformPhysics.py index 8ddcdbfb2f..8fffac4501 100755 --- a/cura/PlatformPhysics.py +++ b/cura/PlatformPhysics.py @@ -17,7 +17,6 @@ from cura.Scene import ZOffsetDecorator import random # used for list shuffling - class PlatformPhysics: def __init__(self, controller, volume): super().__init__() @@ -40,8 +39,9 @@ class PlatformPhysics: Application.getInstance().getPreferences().addPreference("physics/automatic_drop_down", True) def _onSceneChanged(self, source): - if not source.getMeshData(): + if not source.callDecoration("isSliceable"): return + self._change_timer.start() def _onChangeTimerFinished(self): diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index 21e2040dc1..ba7c74fd6d 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -6,73 +6,58 @@ import math import os import unicodedata import re # To create abbreviations for printer names. -from typing import Dict +from typing import Dict, List, Optional from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty, pyqtSlot -from UM.i18n import i18nCatalog from UM.Logger import Logger from UM.Qt.Duration import Duration from UM.Scene.SceneNode import SceneNode from UM.i18n import i18nCatalog -from UM.MimeTypeDatabase import MimeTypeDatabase +from UM.MimeTypeDatabase import MimeTypeDatabase, MimeTypeNotFoundError + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from cura.CuraApplication import CuraApplication catalog = i18nCatalog("cura") -## A class for processing and calculating minimum, current and maximum print time as well as managing the job name -# -# This class contains all the logic relating to calculation and slicing for the -# time/quality slider concept. It is a rather tricky combination of event handling -# and state management. The logic behind this is as follows: -# -# - A scene change or setting change event happens. -# We track what the source was of the change, either a scene change, a setting change, an active machine change or something else. -# - This triggers a new slice with the current settings - this is the "current settings pass". -# - When the slice is done, we update the current print time and material amount. -# - If the source of the slice was not a Setting change, we start the second slice pass, the "low quality settings pass". Otherwise we stop here. -# - When that is done, we update the minimum print time and start the final slice pass, the "Extra Fine settings pass". -# - When the Extra Fine pass is done, we update the maximum print time. +## A class for processing and the print times per build plate as well as managing the job name # # This class also mangles the current machine name and the filename of the first loaded mesh into a job name. # This job name is requested by the JobSpecs qml file. class PrintInformation(QObject): - class SlicePass: - CurrentSettings = 1 - LowQualitySettings = 2 - HighQualitySettings = 3 - class SliceReason: - SceneChanged = 1 - SettingChanged = 2 - ActiveMachineChanged = 3 - Other = 4 + UNTITLED_JOB_NAME = "Untitled" - def __init__(self, application, parent = None): + def __init__(self, application: "CuraApplication", parent = None) -> None: super().__init__(parent) self._application = application self.initializeCuraMessagePrintTimeProperties() - self._material_lengths = {} # indexed by build plate number - self._material_weights = {} - self._material_costs = {} - self._material_names = {} + # Indexed by build plate number + self._material_lengths = {} # type: Dict[int, List[float]] + self._material_weights = {} # type: Dict[int, List[float]] + self._material_costs = {} # type: Dict[int, List[float]] + self._material_names = {} # type: Dict[int, List[str]] self._pre_sliced = False self._backend = self._application.getBackend() if self._backend: self._backend.printDurationMessage.connect(self._onPrintDurationMessage) + self._application.getController().getScene().sceneChanged.connect(self._onSceneChanged) self._is_user_specified_job_name = False self._base_name = "" self._abbr_machine = "" self._job_name = "" - self._project_name = "" self._active_build_plate = 0 - self._initVariablesWithBuildPlate(self._active_build_plate) + self._initVariablesByBuildPlate(self._active_build_plate) self._multi_build_plate_model = self._application.getMultiBuildPlateModel() @@ -80,19 +65,15 @@ class PrintInformation(QObject): self._application.globalContainerStackChanged.connect(self.setToZeroPrintInformation) self._application.fileLoaded.connect(self.setBaseName) self._application.workspaceLoaded.connect(self.setProjectName) - self._multi_build_plate_model.activeBuildPlateChanged.connect(self._onActiveBuildPlateChanged) - + self._application.getMachineManager().rootMaterialChanged.connect(self._onActiveMaterialsChanged) self._application.getInstance().getPreferences().preferenceChanged.connect(self._onPreferencesChanged) - self._application.getMachineManager().rootMaterialChanged.connect(self._onActiveMaterialsChanged) + self._multi_build_plate_model.activeBuildPlateChanged.connect(self._onActiveBuildPlateChanged) + self._material_amounts = [] # type: List[float] self._onActiveMaterialsChanged() - self._material_amounts = [] - - # Crate cura message translations and using translation keys initialize empty time Duration object for total time - # and time for each feature - def initializeCuraMessagePrintTimeProperties(self): - self._current_print_time = {} # Duration(None, self) + def initializeCuraMessagePrintTimeProperties(self) -> None: + self._current_print_time = {} # type: Dict[int, Duration] self._print_time_message_translations = { "inset_0": catalog.i18nc("@tooltip", "Outer Wall"), @@ -108,17 +89,17 @@ class PrintInformation(QObject): "none": catalog.i18nc("@tooltip", "Other") } - self._print_time_message_values = {} + self._print_times_per_feature = {} # type: Dict[int, Dict[str, Duration]] - def _initPrintTimeMessageValues(self, build_plate_number): + def _initPrintTimesPerFeature(self, build_plate_number: int) -> None: # Full fill message values using keys from _print_time_message_translations - self._print_time_message_values[build_plate_number] = {} + self._print_times_per_feature[build_plate_number] = {} for key in self._print_time_message_translations.keys(): - self._print_time_message_values[build_plate_number][key] = Duration(None, self) + self._print_times_per_feature[build_plate_number][key] = Duration(None, self) - def _initVariablesWithBuildPlate(self, build_plate_number): - if build_plate_number not in self._print_time_message_values: - self._initPrintTimeMessageValues(build_plate_number) + def _initVariablesByBuildPlate(self, build_plate_number: int) -> None: + if build_plate_number not in self._print_times_per_feature: + self._initPrintTimesPerFeature(build_plate_number) if self._active_build_plate not in self._material_lengths: self._material_lengths[self._active_build_plate] = [] if self._active_build_plate not in self._material_weights: @@ -128,23 +109,24 @@ class PrintInformation(QObject): if self._active_build_plate not in self._material_names: self._material_names[self._active_build_plate] = [] if self._active_build_plate not in self._current_print_time: - self._current_print_time[self._active_build_plate] = Duration(None, self) + self._current_print_time[self._active_build_plate] = Duration(parent = self) currentPrintTimeChanged = pyqtSignal() preSlicedChanged = pyqtSignal() @pyqtProperty(bool, notify=preSlicedChanged) - def preSliced(self): + def preSliced(self) -> bool: return self._pre_sliced - def setPreSliced(self, pre_sliced): - self._pre_sliced = pre_sliced - self._updateJobName() - self.preSlicedChanged.emit() + def setPreSliced(self, pre_sliced: bool) -> None: + if self._pre_sliced != pre_sliced: + self._pre_sliced = pre_sliced + self._updateJobName() + self.preSlicedChanged.emit() @pyqtProperty(Duration, notify = currentPrintTimeChanged) - def currentPrintTime(self): + def currentPrintTime(self) -> Duration: return self._current_print_time[self._active_build_plate] materialLengthsChanged = pyqtSignal() @@ -171,36 +153,41 @@ class PrintInformation(QObject): def materialNames(self): return self._material_names[self._active_build_plate] - def printTimes(self): - return self._print_time_message_values[self._active_build_plate] + # Get all print times (by feature) of the active buildplate. + def printTimes(self) -> Dict[str, Duration]: + return self._print_times_per_feature[self._active_build_plate] - def _onPrintDurationMessage(self, build_plate_number, print_time: Dict[str, int], material_amounts: list): - self._updateTotalPrintTimePerFeature(build_plate_number, print_time) + def _onPrintDurationMessage(self, build_plate_number: int, print_times_per_feature: Dict[str, int], material_amounts: List[float]) -> None: + self._updateTotalPrintTimePerFeature(build_plate_number, print_times_per_feature) self.currentPrintTimeChanged.emit() self._material_amounts = material_amounts self._calculateInformation(build_plate_number) - def _updateTotalPrintTimePerFeature(self, build_plate_number, print_time: Dict[str, int]): + def _updateTotalPrintTimePerFeature(self, build_plate_number: int, print_times_per_feature: Dict[str, int]) -> None: total_estimated_time = 0 - if build_plate_number not in self._print_time_message_values: - self._initPrintTimeMessageValues(build_plate_number) + if build_plate_number not in self._print_times_per_feature: + self._initPrintTimesPerFeature(build_plate_number) + + for feature, time in print_times_per_feature.items(): + if feature not in self._print_times_per_feature[build_plate_number]: + self._print_times_per_feature[build_plate_number][feature] = Duration(parent=self) + duration = self._print_times_per_feature[build_plate_number][feature] - for feature, time in print_time.items(): if time != time: # Check for NaN. Engine can sometimes give us weird values. - self._print_time_message_values[build_plate_number].get(feature).setDuration(0) + duration.setDuration(0) Logger.log("w", "Received NaN for print duration message") continue total_estimated_time += time - self._print_time_message_values[build_plate_number].get(feature).setDuration(time) + duration.setDuration(time) if build_plate_number not in self._current_print_time: self._current_print_time[build_plate_number] = Duration(None, self) self._current_print_time[build_plate_number].setDuration(total_estimated_time) - def _calculateInformation(self, build_plate_number): + def _calculateInformation(self, build_plate_number: int) -> None: global_stack = self._application.getGlobalContainerStack() if global_stack is None: return @@ -213,39 +200,46 @@ class PrintInformation(QObject): material_preference_values = json.loads(self._application.getInstance().getPreferences().getValue("cura/material_settings")) extruder_stacks = global_stack.extruders - for position, extruder_stack in extruder_stacks.items(): + + for position in extruder_stacks: + extruder_stack = extruder_stacks[position] index = int(position) if index >= len(self._material_amounts): continue amount = self._material_amounts[index] - ## Find the right extruder stack. As the list isn't sorted because it's a annoying generator, we do some - # list comprehension filtering to solve this for us. + # Find the right extruder stack. As the list isn't sorted because it's a annoying generator, we do some + # list comprehension filtering to solve this for us. density = extruder_stack.getMetaDataEntry("properties", {}).get("density", 0) - material = extruder_stack.findContainer({"type": "material"}) + material = extruder_stack.material radius = extruder_stack.getProperty("material_diameter", "value") / 2 weight = float(amount) * float(density) / 1000 - cost = 0 - material_name = catalog.i18nc("@label unknown material", "Unknown") - if material: - material_guid = material.getMetaDataEntry("GUID") - material_name = material.getName() - if material_guid in material_preference_values: - material_values = material_preference_values[material_guid] + cost = 0. - weight_per_spool = float(material_values["spool_weight"] if material_values and "spool_weight" in material_values else 0) - cost_per_spool = float(material_values["spool_cost"] if material_values and "spool_cost" in material_values else 0) + material_guid = material.getMetaDataEntry("GUID") + material_name = material.getName() - if weight_per_spool != 0: - cost = cost_per_spool * weight / weight_per_spool - else: - cost = 0 + if material_guid in material_preference_values: + material_values = material_preference_values[material_guid] + + if material_values and "spool_weight" in material_values: + weight_per_spool = float(material_values["spool_weight"]) + else: + weight_per_spool = float(extruder_stack.getMetaDataEntry("properties", {}).get("weight", 0)) + + cost_per_spool = float(material_values["spool_cost"] if material_values and "spool_cost" in material_values else 0) + + if weight_per_spool != 0: + cost = cost_per_spool * weight / weight_per_spool + else: + cost = 0 # Material amount is sent as an amount of mm^3, so calculate length from that if radius != 0: length = round((amount / (math.pi * radius ** 2)) / 1000, 2) else: length = 0 + self._material_weights[build_plate_number].append(weight) self._material_lengths[build_plate_number].append(length) self._material_costs[build_plate_number].append(cost) @@ -256,20 +250,20 @@ class PrintInformation(QObject): self.materialCostsChanged.emit() self.materialNamesChanged.emit() - def _onPreferencesChanged(self, preference): + def _onPreferencesChanged(self, preference: str) -> None: if preference != "cura/material_settings": return for build_plate_number in range(self._multi_build_plate_model.maxBuildPlate + 1): self._calculateInformation(build_plate_number) - def _onActiveBuildPlateChanged(self): + def _onActiveBuildPlateChanged(self) -> None: new_active_build_plate = self._multi_build_plate_model.activeBuildPlate if new_active_build_plate != self._active_build_plate: self._active_build_plate = new_active_build_plate self._updateJobName() - self._initVariablesWithBuildPlate(self._active_build_plate) + self._initVariablesByBuildPlate(self._active_build_plate) self.materialLengthsChanged.emit() self.materialWeightsChanged.emit() @@ -277,14 +271,14 @@ class PrintInformation(QObject): self.materialNamesChanged.emit() self.currentPrintTimeChanged.emit() - def _onActiveMaterialsChanged(self, *args, **kwargs): + def _onActiveMaterialsChanged(self, *args, **kwargs) -> None: for build_plate_number in range(self._multi_build_plate_model.maxBuildPlate + 1): self._calculateInformation(build_plate_number) # Manual override of job name should also set the base name so that when the printer prefix is updated, it the # prefix can be added to the manually added name, not the old base name @pyqtSlot(str, bool) - def setJobName(self, name, is_user_specified_job_name = False): + def setJobName(self, name: str, is_user_specified_job_name = False) -> None: self._is_user_specified_job_name = is_user_specified_job_name self._job_name = name self._base_name = name.replace(self._abbr_machine + "_", "") @@ -298,15 +292,15 @@ class PrintInformation(QObject): def jobName(self): return self._job_name - def _updateJobName(self): + def _updateJobName(self) -> None: if self._base_name == "": - self._job_name = "unnamed" + self._job_name = self.UNTITLED_JOB_NAME self._is_user_specified_job_name = False self.jobNameChanged.emit() return base_name = self._stripAccents(self._base_name) - self._setAbbreviatedMachineName() + self._defineAbbreviatedMachineName() # Only update the job name when it's not user-specified. if not self._is_user_specified_job_name: @@ -333,12 +327,12 @@ class PrintInformation(QObject): self.jobNameChanged.emit() @pyqtSlot(str) - def setProjectName(self, name): + def setProjectName(self, name: str) -> None: self.setBaseName(name, is_project_file = True) baseNameChanged = pyqtSignal() - def setBaseName(self, base_name: str, is_project_file: bool = False): + def setBaseName(self, base_name: str, is_project_file: bool = False) -> None: self._is_user_specified_job_name = False # Ensure that we don't use entire path but only filename @@ -365,7 +359,7 @@ class PrintInformation(QObject): try: mime_type = MimeTypeDatabase.getMimeTypeForFile(name) data = mime_type.stripExtension(name) - except: + except MimeTypeNotFoundError: Logger.log("w", "Unsupported Mime Type Database file extension %s", name) if data is not None and check_name is not None: @@ -373,6 +367,16 @@ class PrintInformation(QObject): else: self._base_name = "" + # Strip the old "curaproject" extension from the name + OLD_CURA_PROJECT_EXT = ".curaproject" + if self._base_name.lower().endswith(OLD_CURA_PROJECT_EXT): + self._base_name = self._base_name[:len(self._base_name) - len(OLD_CURA_PROJECT_EXT)] + + # CURA-5896 Try to strip extra extensions with an infinite amount of ".curaproject.3mf". + OLD_CURA_PROJECT_3MF_EXT = ".curaproject.3mf" + while self._base_name.lower().endswith(OLD_CURA_PROJECT_3MF_EXT): + self._base_name = self._base_name[:len(self._base_name) - len(OLD_CURA_PROJECT_3MF_EXT)] + self._updateJobName() @pyqtProperty(str, fset = setBaseName, notify = baseNameChanged) @@ -382,39 +386,25 @@ class PrintInformation(QObject): ## Created an acronym-like abbreviated machine name from the currently # active machine name. # Called each time the global stack is switched. - def _setAbbreviatedMachineName(self): + def _defineAbbreviatedMachineName(self) -> None: global_container_stack = self._application.getGlobalContainerStack() if not global_container_stack: self._abbr_machine = "" return active_machine_type_name = global_container_stack.definition.getName() - abbr_machine = "" - for word in re.findall(r"[\w']+", active_machine_type_name): - if word.lower() == "ultimaker": - abbr_machine += "UM" - elif word.isdigit(): - abbr_machine += word - else: - stripped_word = self._stripAccents(word.upper()) - # - use only the first character if the word is too long (> 3 characters) - # - use the whole word if it's not too long (<= 3 characters) - if len(stripped_word) > 3: - stripped_word = stripped_word[0] - abbr_machine += stripped_word - - self._abbr_machine = abbr_machine + self._abbr_machine = self._application.getMachineManager().getAbbreviatedMachineName(active_machine_type_name) ## Utility method that strips accents from characters (eg: â -> a) - def _stripAccents(self, str): - return ''.join(char for char in unicodedata.normalize('NFD', str) if unicodedata.category(char) != 'Mn') + def _stripAccents(self, to_strip: str) -> str: + return ''.join(char for char in unicodedata.normalize('NFD', to_strip) if unicodedata.category(char) != 'Mn') @pyqtSlot(result = "QVariantMap") - def getFeaturePrintTimes(self): + def getFeaturePrintTimes(self) -> Dict[str, Duration]: result = {} - if self._active_build_plate not in self._print_time_message_values: - self._initPrintTimeMessageValues(self._active_build_plate) - for feature, time in self._print_time_message_values[self._active_build_plate].items(): + if self._active_build_plate not in self._print_times_per_feature: + self._initPrintTimesPerFeature(self._active_build_plate) + for feature, time in self._print_times_per_feature[self._active_build_plate].items(): if feature in self._print_time_message_translations: result[self._print_time_message_translations[feature]] = time else: @@ -422,22 +412,22 @@ class PrintInformation(QObject): return result # Simulate message with zero time duration - def setToZeroPrintInformation(self, build_plate = None): + def setToZeroPrintInformation(self, build_plate: Optional[int] = None) -> None: if build_plate is None: build_plate = self._active_build_plate # Construct the 0-time message temp_message = {} - if build_plate not in self._print_time_message_values: - self._print_time_message_values[build_plate] = {} - for key in self._print_time_message_values[build_plate].keys(): + if build_plate not in self._print_times_per_feature: + self._print_times_per_feature[build_plate] = {} + for key in self._print_times_per_feature[build_plate].keys(): temp_message[key] = 0 - temp_material_amounts = [0] + temp_material_amounts = [0.] self._onPrintDurationMessage(build_plate, temp_message, temp_material_amounts) ## Listen to scene changes to check if we need to reset the print information - def _onSceneChanged(self, scene_node): + def _onSceneChanged(self, scene_node: SceneNode) -> None: # Ignore any changes that are not related to sliceable objects if not isinstance(scene_node, SceneNode)\ or not scene_node.callDecoration("isSliceable")\ diff --git a/cura/PrintJobPreviewImageProvider.py b/cura/PrintJobPreviewImageProvider.py new file mode 100644 index 0000000000..a8df5aa273 --- /dev/null +++ b/cura/PrintJobPreviewImageProvider.py @@ -0,0 +1,27 @@ +from PyQt5.QtGui import QImage +from PyQt5.QtQuick import QQuickImageProvider +from PyQt5.QtCore import QSize + +from UM.Application import Application + + +class PrintJobPreviewImageProvider(QQuickImageProvider): + def __init__(self): + super().__init__(QQuickImageProvider.Image) + + ## Request a new image. + def requestImage(self, id: str, size: QSize) -> QImage: + # The id will have an uuid and an increment separated by a slash. As we don't care about the value of the + # increment, we need to strip that first. + uuid = id[id.find("/") + 1:] + for output_device in Application.getInstance().getOutputDeviceManager().getOutputDevices(): + if not hasattr(output_device, "printJobs"): + continue + + for print_job in output_device.printJobs: + if print_job.key == uuid: + if print_job.getPreviewImage(): + return print_job.getPreviewImage(), QSize(15, 15) + else: + return QImage(), QSize(15, 15) + return QImage(), QSize(15,15) \ No newline at end of file diff --git a/cura/PrinterOutput/ConfigurationModel.py b/cura/PrinterOutput/ConfigurationModel.py index c03d968b9e..312e3cffb0 100644 --- a/cura/PrinterOutput/ConfigurationModel.py +++ b/cura/PrinterOutput/ConfigurationModel.py @@ -13,42 +13,50 @@ class ConfigurationModel(QObject): configurationChanged = pyqtSignal() - def __init__(self): + def __init__(self) -> None: super().__init__() - self._printer_type = None + self._printer_type = "" self._extruder_configurations = [] # type: List[ExtruderConfigurationModel] - self._buildplate_configuration = None + self._buildplate_configuration = "" def setPrinterType(self, printer_type): self._printer_type = printer_type @pyqtProperty(str, fset = setPrinterType, notify = configurationChanged) - def printerType(self): + def printerType(self) -> str: return self._printer_type - def setExtruderConfigurations(self, extruder_configurations): - self._extruder_configurations = extruder_configurations + def setExtruderConfigurations(self, extruder_configurations: List["ExtruderConfigurationModel"]): + if self._extruder_configurations != extruder_configurations: + self._extruder_configurations = extruder_configurations + + for extruder_configuration in self._extruder_configurations: + extruder_configuration.extruderConfigurationChanged.connect(self.configurationChanged) + + self.configurationChanged.emit() @pyqtProperty("QVariantList", fset = setExtruderConfigurations, notify = configurationChanged) def extruderConfigurations(self): return self._extruder_configurations - def setBuildplateConfiguration(self, buildplate_configuration): - self._buildplate_configuration = buildplate_configuration + def setBuildplateConfiguration(self, buildplate_configuration: str) -> None: + if self._buildplate_configuration != buildplate_configuration: + self._buildplate_configuration = buildplate_configuration + self.configurationChanged.emit() @pyqtProperty(str, fset = setBuildplateConfiguration, notify = configurationChanged) - def buildplateConfiguration(self): + def buildplateConfiguration(self) -> str: return self._buildplate_configuration ## This method is intended to indicate whether the configuration is valid or not. # The method checks if the mandatory fields are or not set - def isValid(self): + def isValid(self) -> bool: if not self._extruder_configurations: return False for configuration in self._extruder_configurations: if configuration is None: return False - return self._printer_type is not None + return self._printer_type != "" def __str__(self): message_chunks = [] diff --git a/cura/PrinterOutput/ExtruderConfigurationModel.py b/cura/PrinterOutput/ExtruderConfigurationModel.py index bc7f1a7c07..da0ad6b0b2 100644 --- a/cura/PrinterOutput/ExtruderConfigurationModel.py +++ b/cura/PrinterOutput/ExtruderConfigurationModel.py @@ -1,56 +1,67 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional from PyQt5.QtCore import pyqtProperty, QObject, pyqtSignal +from cura.PrinterOutput.MaterialOutputModel import MaterialOutputModel + class ExtruderConfigurationModel(QObject): extruderConfigurationChanged = pyqtSignal() - def __init__(self): + def __init__(self, position: int = -1) -> None: super().__init__() - self._position = -1 - self._material = None - self._hotend_id = None + self._position = position # type: int + self._material = None # type: Optional[MaterialOutputModel] + self._hotend_id = None # type: Optional[str] - def setPosition(self, position): + def setPosition(self, position: int) -> None: self._position = position @pyqtProperty(int, fset = setPosition, notify = extruderConfigurationChanged) - def position(self): + def position(self) -> int: return self._position - def setMaterial(self, material): - self._material = material + def setMaterial(self, material: Optional[MaterialOutputModel]) -> None: + if self._hotend_id != material: + self._material = material + self.extruderConfigurationChanged.emit() @pyqtProperty(QObject, fset = setMaterial, notify = extruderConfigurationChanged) - def material(self): + def activeMaterial(self) -> Optional[MaterialOutputModel]: return self._material - def setHotendID(self, hotend_id): - self._hotend_id = hotend_id + @pyqtProperty(QObject, fset=setMaterial, notify=extruderConfigurationChanged) + def material(self) -> Optional[MaterialOutputModel]: + return self._material + + def setHotendID(self, hotend_id: Optional[str]) -> None: + if self._hotend_id != hotend_id: + self._hotend_id = hotend_id + self.extruderConfigurationChanged.emit() @pyqtProperty(str, fset = setHotendID, notify = extruderConfigurationChanged) - def hotendID(self): + def hotendID(self) -> Optional[str]: return self._hotend_id ## This method is intended to indicate whether the configuration is valid or not. # The method checks if the mandatory fields are or not set # At this moment is always valid since we allow to have empty material and variants. - def isValid(self): + def isValid(self) -> bool: return True - def __str__(self): + def __str__(self) -> str: message_chunks = [] message_chunks.append("Position: " + str(self._position)) message_chunks.append("-") - message_chunks.append("Material: " + self.material.type if self.material else "empty") + message_chunks.append("Material: " + self.activeMaterial.type if self.activeMaterial else "empty") message_chunks.append("-") message_chunks.append("HotendID: " + self.hotendID if self.hotendID else "empty") return " ".join(message_chunks) - def __eq__(self, other): + def __eq__(self, other) -> bool: return hash(self) == hash(other) # Calculating a hash function using the position of the extruder, the material GUID and the hotend id to check if is diff --git a/cura/PrinterOutput/ExtruderOutputModel.py b/cura/PrinterOutput/ExtruderOutputModel.py index 0726662c6c..30d53bbd85 100644 --- a/cura/PrinterOutput/ExtruderOutputModel.py +++ b/cura/PrinterOutput/ExtruderOutputModel.py @@ -12,64 +12,61 @@ if TYPE_CHECKING: class ExtruderOutputModel(QObject): - hotendIDChanged = pyqtSignal() targetHotendTemperatureChanged = pyqtSignal() hotendTemperatureChanged = pyqtSignal() - activeMaterialChanged = pyqtSignal() + extruderConfigurationChanged = pyqtSignal() isPreheatingChanged = pyqtSignal() - def __init__(self, printer: "PrinterOutputModel", position, parent=None) -> None: + def __init__(self, printer: "PrinterOutputModel", position: int, parent=None) -> None: super().__init__(parent) - self._printer = printer + self._printer = printer # type: PrinterOutputModel self._position = position - self._target_hotend_temperature = 0 # type: float - self._hotend_temperature = 0 # type: float - self._hotend_id = "" - self._active_material = None # type: Optional[MaterialOutputModel] - self._extruder_configuration = ExtruderConfigurationModel() - self._extruder_configuration.position = self._position + self._target_hotend_temperature = 0.0 # type: float + self._hotend_temperature = 0.0 # type: float self._is_preheating = False - def getPrinter(self): + # The extruder output model wraps the configuration model. This way we can use the same config model for jobs + # and extruders alike. + self._extruder_configuration = ExtruderConfigurationModel() + self._extruder_configuration.position = self._position + self._extruder_configuration.extruderConfigurationChanged.connect(self.extruderConfigurationChanged) + + def getPrinter(self) -> "PrinterOutputModel": return self._printer - def getPosition(self): + def getPosition(self) -> int: return self._position # Does the printer support pre-heating the bed at all @pyqtProperty(bool, constant=True) - def canPreHeatHotends(self): + def canPreHeatHotends(self) -> bool: if self._printer: return self._printer.canPreHeatHotends return False - @pyqtProperty(QObject, notify = activeMaterialChanged) + @pyqtProperty(QObject, notify = extruderConfigurationChanged) def activeMaterial(self) -> Optional["MaterialOutputModel"]: - return self._active_material + return self._extruder_configuration.activeMaterial - def updateActiveMaterial(self, material: Optional["MaterialOutputModel"]): - if self._active_material != material: - self._active_material = material - self._extruder_configuration.material = self._active_material - self.activeMaterialChanged.emit() - self.extruderConfigurationChanged.emit() + def updateActiveMaterial(self, material: Optional["MaterialOutputModel"]) -> None: + self._extruder_configuration.setMaterial(material) ## Update the hotend temperature. This only changes it locally. - def updateHotendTemperature(self, temperature: float): + def updateHotendTemperature(self, temperature: float) -> None: if self._hotend_temperature != temperature: self._hotend_temperature = temperature self.hotendTemperatureChanged.emit() - def updateTargetHotendTemperature(self, temperature: float): + def updateTargetHotendTemperature(self, temperature: float) -> None: if self._target_hotend_temperature != temperature: self._target_hotend_temperature = temperature self.targetHotendTemperatureChanged.emit() ## Set the target hotend temperature. This ensures that it's actually sent to the remote. @pyqtSlot(float) - def setTargetHotendTemperature(self, temperature: float): + def setTargetHotendTemperature(self, temperature: float) -> None: self._printer.getController().setTargetHotendTemperature(self._printer, self, temperature) self.updateTargetHotendTemperature(temperature) @@ -81,30 +78,26 @@ class ExtruderOutputModel(QObject): def hotendTemperature(self) -> float: return self._hotend_temperature - @pyqtProperty(str, notify = hotendIDChanged) + @pyqtProperty(str, notify = extruderConfigurationChanged) def hotendID(self) -> str: - return self._hotend_id + return self._extruder_configuration.hotendID - def updateHotendID(self, id: str): - if self._hotend_id != id: - self._hotend_id = id - self._extruder_configuration.hotendID = self._hotend_id - self.hotendIDChanged.emit() - self.extruderConfigurationChanged.emit() + def updateHotendID(self, hotend_id: str) -> None: + self._extruder_configuration.setHotendID(hotend_id) @pyqtProperty(QObject, notify = extruderConfigurationChanged) - def extruderConfiguration(self): + def extruderConfiguration(self) -> Optional[ExtruderConfigurationModel]: if self._extruder_configuration.isValid(): return self._extruder_configuration return None - def updateIsPreheating(self, pre_heating): + def updateIsPreheating(self, pre_heating: bool) -> None: if self._is_preheating != pre_heating: self._is_preheating = pre_heating self.isPreheatingChanged.emit() @pyqtProperty(bool, notify=isPreheatingChanged) - def isPreheating(self): + def isPreheating(self) -> bool: return self._is_preheating ## Pre-heats the extruder before printer. @@ -113,9 +106,9 @@ class ExtruderOutputModel(QObject): # Celsius. # \param duration How long the bed should stay warm, in seconds. @pyqtSlot(float, float) - def preheatHotend(self, temperature, duration): + def preheatHotend(self, temperature: float, duration: float) -> None: self._printer._controller.preheatHotend(self, temperature, duration) @pyqtSlot() - def cancelPreheatHotend(self): - self._printer._controller.cancelPreheatHotend(self) \ No newline at end of file + def cancelPreheatHotend(self) -> None: + self._printer._controller.cancelPreheatHotend(self) diff --git a/cura/PrinterOutput/FirmwareUpdater.py b/cura/PrinterOutput/FirmwareUpdater.py new file mode 100644 index 0000000000..c6d9513ee0 --- /dev/null +++ b/cura/PrinterOutput/FirmwareUpdater.py @@ -0,0 +1,78 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from PyQt5.QtCore import QObject, QUrl, pyqtSignal, pyqtProperty + +from enum import IntEnum +from threading import Thread +from typing import Union + +MYPY = False +if MYPY: + from cura.PrinterOutputDevice import PrinterOutputDevice + +class FirmwareUpdater(QObject): + firmwareProgressChanged = pyqtSignal() + firmwareUpdateStateChanged = pyqtSignal() + + def __init__(self, output_device: "PrinterOutputDevice") -> None: + super().__init__() + + self._output_device = output_device + + self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True) + + self._firmware_file = "" + self._firmware_progress = 0 + self._firmware_update_state = FirmwareUpdateState.idle + + def updateFirmware(self, firmware_file: Union[str, QUrl]) -> None: + # the file path could be url-encoded. + if firmware_file.startswith("file://"): + self._firmware_file = QUrl(firmware_file).toLocalFile() + else: + self._firmware_file = firmware_file + + self._setFirmwareUpdateState(FirmwareUpdateState.updating) + + self._update_firmware_thread.start() + + def _updateFirmware(self) -> None: + raise NotImplementedError("_updateFirmware needs to be implemented") + + ## Cleanup after a succesful update + def _cleanupAfterUpdate(self) -> None: + # Clean up for next attempt. + self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True) + self._firmware_file = "" + self._onFirmwareProgress(100) + self._setFirmwareUpdateState(FirmwareUpdateState.completed) + + @pyqtProperty(int, notify = firmwareProgressChanged) + def firmwareProgress(self) -> int: + return self._firmware_progress + + @pyqtProperty(int, notify=firmwareUpdateStateChanged) + def firmwareUpdateState(self) -> "FirmwareUpdateState": + return self._firmware_update_state + + def _setFirmwareUpdateState(self, state: "FirmwareUpdateState") -> None: + if self._firmware_update_state != state: + self._firmware_update_state = state + self.firmwareUpdateStateChanged.emit() + + # Callback function for firmware update progress. + def _onFirmwareProgress(self, progress: int, max_progress: int = 100) -> None: + self._firmware_progress = int(progress * 100 / max_progress) # Convert to scale of 0-100 + self.firmwareProgressChanged.emit() + + +class FirmwareUpdateState(IntEnum): + idle = 0 + updating = 1 + completed = 2 + unknown_error = 3 + communication_error = 4 + io_error = 5 + firmware_not_found_error = 6 + diff --git a/cura/PrinterOutput/GenericOutputController.py b/cura/PrinterOutput/GenericOutputController.py index e6310e5bff..1cb416787c 100644 --- a/cura/PrinterOutput/GenericOutputController.py +++ b/cura/PrinterOutput/GenericOutputController.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 +from typing import TYPE_CHECKING, Set, Union, Optional from cura.PrinterOutput.PrinterOutputController import PrinterOutputController from PyQt5.QtCore import QTimer @@ -9,27 +9,28 @@ from PyQt5.QtCore import QTimer if TYPE_CHECKING: from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel + from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice from cura.PrinterOutput.ExtruderOutputModel import ExtruderOutputModel class GenericOutputController(PrinterOutputController): - def __init__(self, output_device): + def __init__(self, output_device: "PrinterOutputDevice") -> None: super().__init__(output_device) self._preheat_bed_timer = QTimer() self._preheat_bed_timer.setSingleShot(True) self._preheat_bed_timer.timeout.connect(self._onPreheatBedTimerFinished) - self._preheat_printer = None + self._preheat_printer = None # type: Optional[PrinterOutputModel] self._preheat_hotends_timer = QTimer() self._preheat_hotends_timer.setSingleShot(True) self._preheat_hotends_timer.timeout.connect(self._onPreheatHotendsTimerFinished) - self._preheat_hotends = set() + self._preheat_hotends = set() # type: Set[ExtruderOutputModel] self._output_device.printersChanged.connect(self._onPrintersChanged) - self._active_printer = None + self._active_printer = None # type: Optional[PrinterOutputModel] - def _onPrintersChanged(self): + def _onPrintersChanged(self) -> None: if self._active_printer: self._active_printer.stateChanged.disconnect(self._onPrinterStateChanged) self._active_printer.targetBedTemperatureChanged.disconnect(self._onTargetBedTemperatureChanged) @@ -43,32 +44,33 @@ class GenericOutputController(PrinterOutputController): for extruder in self._active_printer.extruders: extruder.targetHotendTemperatureChanged.connect(self._onTargetHotendTemperatureChanged) - def _onPrinterStateChanged(self): - if self._active_printer.state != "idle": + def _onPrinterStateChanged(self) -> None: + if self._active_printer and self._active_printer.state != "idle": if self._preheat_bed_timer.isActive(): self._preheat_bed_timer.stop() - self._preheat_printer.updateIsPreheating(False) + if self._preheat_printer: + self._preheat_printer.updateIsPreheating(False) if self._preheat_hotends_timer.isActive(): self._preheat_hotends_timer.stop() for extruder in self._preheat_hotends: extruder.updateIsPreheating(False) - self._preheat_hotends = set() + self._preheat_hotends = set() # type: Set[ExtruderOutputModel] - def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed): + def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed) -> None: self._output_device.sendCommand("G91") self._output_device.sendCommand("G0 X%s Y%s Z%s F%s" % (x, y, z, speed)) self._output_device.sendCommand("G90") - def homeHead(self, printer): + def homeHead(self, printer: "PrinterOutputModel") -> None: self._output_device.sendCommand("G28 X Y") - def homeBed(self, printer): + def homeBed(self, printer: "PrinterOutputModel") -> None: self._output_device.sendCommand("G28 Z") - def sendRawCommand(self, printer: "PrinterOutputModel", command: str): - self._output_device.sendCommand(command) + def sendRawCommand(self, printer: "PrinterOutputModel", command: str) -> None: + self._output_device.sendCommand(command.upper()) #Most printers only understand uppercase g-code commands. - def setJobState(self, job: "PrintJobOutputModel", state: str): + def setJobState(self, job: "PrintJobOutputModel", state: str) -> None: if state == "pause": self._output_device.pausePrint() job.updateState("paused") @@ -79,42 +81,46 @@ class GenericOutputController(PrinterOutputController): self._output_device.cancelPrint() pass - def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: int): - self._output_device.sendCommand("M140 S%s" % temperature) + def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: float) -> None: + self._output_device.sendCommand("M140 S%s" % round(temperature)) # The API doesn't allow floating point. - def _onTargetBedTemperatureChanged(self): - if self._preheat_bed_timer.isActive() and self._preheat_printer.targetBedTemperature == 0: + def _onTargetBedTemperatureChanged(self) -> None: + if self._preheat_bed_timer.isActive() and self._preheat_printer and self._preheat_printer.targetBedTemperature == 0: self._preheat_bed_timer.stop() self._preheat_printer.updateIsPreheating(False) - def preheatBed(self, printer: "PrinterOutputModel", temperature, duration): + def preheatBed(self, printer: "PrinterOutputModel", temperature, duration) -> None: try: temperature = round(temperature) # The API doesn't allow floating point. duration = round(duration) except ValueError: return # Got invalid values, can't pre-heat. - self.setTargetBedTemperature(printer, temperature=temperature) + self.setTargetBedTemperature(printer, temperature = temperature) self._preheat_bed_timer.setInterval(duration * 1000) self._preheat_bed_timer.start() self._preheat_printer = printer printer.updateIsPreheating(True) - def cancelPreheatBed(self, printer: "PrinterOutputModel"): - self.setTargetBedTemperature(printer, temperature=0) + def cancelPreheatBed(self, printer: "PrinterOutputModel") -> None: + self.setTargetBedTemperature(printer, temperature = 0) self._preheat_bed_timer.stop() printer.updateIsPreheating(False) - def _onPreheatBedTimerFinished(self): + def _onPreheatBedTimerFinished(self) -> None: + if not self._preheat_printer: + return self.setTargetBedTemperature(self._preheat_printer, 0) self._preheat_printer.updateIsPreheating(False) - def setTargetHotendTemperature(self, printer: "PrinterOutputModel", position: int, temperature: int): + def setTargetHotendTemperature(self, printer: "PrinterOutputModel", position: int, temperature: Union[int, float]) -> None: self._output_device.sendCommand("M104 S%s T%s" % (temperature, position)) - def _onTargetHotendTemperatureChanged(self): + def _onTargetHotendTemperatureChanged(self) -> None: if not self._preheat_hotends_timer.isActive(): return + if not self._active_printer: + return for extruder in self._active_printer.extruders: if extruder in self._preheat_hotends and extruder.targetHotendTemperature == 0: @@ -123,7 +129,7 @@ class GenericOutputController(PrinterOutputController): if not self._preheat_hotends: self._preheat_hotends_timer.stop() - def preheatHotend(self, extruder: "ExtruderOutputModel", temperature, duration): + def preheatHotend(self, extruder: "ExtruderOutputModel", temperature, duration) -> None: position = extruder.getPosition() number_of_extruders = len(extruder.getPrinter().extruders) if position >= number_of_extruders: @@ -141,7 +147,7 @@ class GenericOutputController(PrinterOutputController): self._preheat_hotends.add(extruder) extruder.updateIsPreheating(True) - def cancelPreheatHotend(self, extruder: "ExtruderOutputModel"): + def cancelPreheatHotend(self, extruder: "ExtruderOutputModel") -> None: self.setTargetHotendTemperature(extruder.getPrinter(), extruder.getPosition(), temperature=0) if extruder in self._preheat_hotends: extruder.updateIsPreheating(False) @@ -149,21 +155,22 @@ class GenericOutputController(PrinterOutputController): if not self._preheat_hotends and self._preheat_hotends_timer.isActive(): self._preheat_hotends_timer.stop() - def _onPreheatHotendsTimerFinished(self): + def _onPreheatHotendsTimerFinished(self) -> None: for extruder in self._preheat_hotends: self.setTargetHotendTemperature(extruder.getPrinter(), extruder.getPosition(), 0) - self._preheat_hotends = set() + self._preheat_hotends = set() #type: Set[ExtruderOutputModel] # Cancel any ongoing preheating timers, without setting back the temperature to 0 # This can be used eg at the start of a print - def stopPreheatTimers(self): + def stopPreheatTimers(self) -> None: if self._preheat_hotends_timer.isActive(): for extruder in self._preheat_hotends: extruder.updateIsPreheating(False) - self._preheat_hotends = set() + self._preheat_hotends = set() #type: Set[ExtruderOutputModel] self._preheat_hotends_timer.stop() if self._preheat_bed_timer.isActive(): - self._preheat_printer.updateIsPreheating(False) + if self._preheat_printer: + self._preheat_printer.updateIsPreheating(False) self._preheat_bed_timer.stop() diff --git a/cura/PrinterOutput/NetworkCamera.py b/cura/PrinterOutput/NetworkCamera.py deleted file mode 100644 index 5b28ffd30d..0000000000 --- a/cura/PrinterOutput/NetworkCamera.py +++ /dev/null @@ -1,119 +0,0 @@ -from UM.Logger import Logger - -from PyQt5.QtCore import QUrl, pyqtProperty, pyqtSignal, QObject, pyqtSlot -from PyQt5.QtGui import QImage -from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManager - - -class NetworkCamera(QObject): - newImage = pyqtSignal() - - def __init__(self, target = None, parent = None): - super().__init__(parent) - self._stream_buffer = b"" - self._stream_buffer_start_index = -1 - self._manager = None - self._image_request = None - self._image_reply = None - self._image = QImage() - self._image_id = 0 - - self._target = target - self._started = False - - @pyqtSlot(str) - def setTarget(self, target): - restart_required = False - if self._started: - self.stop() - restart_required = True - - self._target = target - - if restart_required: - self.start() - - @pyqtProperty(QUrl, notify=newImage) - def latestImage(self): - self._image_id += 1 - # There is an image provider that is called "camera". In order to ensure that the image qml object, that - # requires a QUrl to function, updates correctly we add an increasing number. This causes to see the QUrl - # as new (instead of relying on cached version and thus forces an update. - temp = "image://camera/" + str(self._image_id) - - return QUrl(temp, QUrl.TolerantMode) - - @pyqtSlot() - def start(self): - # Ensure that previous requests (if any) are stopped. - self.stop() - if self._target is None: - Logger.log("w", "Unable to start camera stream without target!") - return - self._started = True - url = QUrl(self._target) - self._image_request = QNetworkRequest(url) - if self._manager is None: - self._manager = QNetworkAccessManager() - - self._image_reply = self._manager.get(self._image_request) - self._image_reply.downloadProgress.connect(self._onStreamDownloadProgress) - - @pyqtSlot() - def stop(self): - self._stream_buffer = b"" - self._stream_buffer_start_index = -1 - - if self._image_reply: - try: - # disconnect the signal - try: - self._image_reply.downloadProgress.disconnect(self._onStreamDownloadProgress) - except Exception: - pass - # abort the request if it's not finished - if not self._image_reply.isFinished(): - self._image_reply.close() - except Exception as e: # RuntimeError - pass # It can happen that the wrapped c++ object is already deleted. - - self._image_reply = None - self._image_request = None - - self._manager = None - - self._started = False - - def getImage(self): - return self._image - - ## Ensure that close gets called when object is destroyed - def __del__(self): - self.stop() - - def _onStreamDownloadProgress(self, bytes_received, bytes_total): - # An MJPG stream is (for our purpose) a stream of concatenated JPG images. - # JPG images start with the marker 0xFFD8, and end with 0xFFD9 - if self._image_reply is None: - return - self._stream_buffer += self._image_reply.readAll() - - if len(self._stream_buffer) > 2000000: # No single camera frame should be 2 Mb or larger - Logger.log("w", "MJPEG buffer exceeds reasonable size. Restarting stream...") - self.stop() # resets stream buffer and start index - self.start() - return - - if self._stream_buffer_start_index == -1: - self._stream_buffer_start_index = self._stream_buffer.indexOf(b'\xff\xd8') - stream_buffer_end_index = self._stream_buffer.lastIndexOf(b'\xff\xd9') - # If this happens to be more than a single frame, then so be it; the JPG decoder will - # ignore the extra data. We do it like this in order not to get a buildup of frames - - if self._stream_buffer_start_index != -1 and stream_buffer_end_index != -1: - jpg_data = self._stream_buffer[self._stream_buffer_start_index:stream_buffer_end_index + 2] - self._stream_buffer = self._stream_buffer[stream_buffer_end_index + 2:] - self._stream_buffer_start_index = -1 - self._image.loadFromData(jpg_data) - - self.newImage.emit() diff --git a/cura/PrinterOutput/NetworkMJPGImage.py b/cura/PrinterOutput/NetworkMJPGImage.py new file mode 100644 index 0000000000..522d684085 --- /dev/null +++ b/cura/PrinterOutput/NetworkMJPGImage.py @@ -0,0 +1,153 @@ +# Copyright (c) 2018 Aldo Hoeben / fieldOfView +# NetworkMJPGImage is released under the terms of the LGPLv3 or higher. + +from PyQt5.QtCore import QUrl, pyqtProperty, pyqtSignal, pyqtSlot, QRect, QByteArray +from PyQt5.QtGui import QImage, QPainter +from PyQt5.QtQuick import QQuickPaintedItem +from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManager + +from UM.Logger import Logger + +# +# A QQuickPaintedItem that progressively downloads a network mjpeg stream, +# picks it apart in individual jpeg frames, and paints it. +# +class NetworkMJPGImage(QQuickPaintedItem): + + def __init__(self, *args, **kwargs) -> None: + super().__init__(*args, **kwargs) + + self._stream_buffer = QByteArray() + self._stream_buffer_start_index = -1 + self._network_manager = None # type: QNetworkAccessManager + self._image_request = None # type: QNetworkRequest + self._image_reply = None # type: QNetworkReply + self._image = QImage() + self._image_rect = QRect() + + self._source_url = QUrl() + self._started = False + + self._mirror = False + + self.setAntialiasing(True) + + ## Ensure that close gets called when object is destroyed + def __del__(self) -> None: + self.stop() + + + def paint(self, painter: "QPainter") -> None: + if self._mirror: + painter.drawImage(self.contentsBoundingRect(), self._image.mirrored()) + return + + painter.drawImage(self.contentsBoundingRect(), self._image) + + + def setSourceURL(self, source_url: "QUrl") -> None: + self._source_url = source_url + self.sourceURLChanged.emit() + if self._started: + self.start() + + def getSourceURL(self) -> "QUrl": + return self._source_url + + sourceURLChanged = pyqtSignal() + source = pyqtProperty(QUrl, fget = getSourceURL, fset = setSourceURL, notify = sourceURLChanged) + + def setMirror(self, mirror: bool) -> None: + if mirror == self._mirror: + return + self._mirror = mirror + self.mirrorChanged.emit() + self.update() + + def getMirror(self) -> bool: + return self._mirror + + mirrorChanged = pyqtSignal() + mirror = pyqtProperty(bool, fget = getMirror, fset = setMirror, notify = mirrorChanged) + + imageSizeChanged = pyqtSignal() + + @pyqtProperty(int, notify = imageSizeChanged) + def imageWidth(self) -> int: + return self._image.width() + + @pyqtProperty(int, notify = imageSizeChanged) + def imageHeight(self) -> int: + return self._image.height() + + + @pyqtSlot() + def start(self) -> None: + self.stop() # Ensure that previous requests (if any) are stopped. + + if not self._source_url: + Logger.log("w", "Unable to start camera stream without target!") + return + self._started = True + + self._image_request = QNetworkRequest(self._source_url) + if self._network_manager is None: + self._network_manager = QNetworkAccessManager() + + self._image_reply = self._network_manager.get(self._image_request) + self._image_reply.downloadProgress.connect(self._onStreamDownloadProgress) + + @pyqtSlot() + def stop(self) -> None: + self._stream_buffer = QByteArray() + self._stream_buffer_start_index = -1 + + if self._image_reply: + try: + try: + self._image_reply.downloadProgress.disconnect(self._onStreamDownloadProgress) + except Exception: + pass + + if not self._image_reply.isFinished(): + self._image_reply.close() + except Exception as e: # RuntimeError + pass # It can happen that the wrapped c++ object is already deleted. + + self._image_reply = None + self._image_request = None + + self._network_manager = None + + self._started = False + + + def _onStreamDownloadProgress(self, bytes_received: int, bytes_total: int) -> None: + # An MJPG stream is (for our purpose) a stream of concatenated JPG images. + # JPG images start with the marker 0xFFD8, and end with 0xFFD9 + if self._image_reply is None: + return + self._stream_buffer += self._image_reply.readAll() + + if len(self._stream_buffer) > 2000000: # No single camera frame should be 2 Mb or larger + Logger.log("w", "MJPEG buffer exceeds reasonable size. Restarting stream...") + self.stop() # resets stream buffer and start index + self.start() + return + + if self._stream_buffer_start_index == -1: + self._stream_buffer_start_index = self._stream_buffer.indexOf(b'\xff\xd8') + stream_buffer_end_index = self._stream_buffer.lastIndexOf(b'\xff\xd9') + # If this happens to be more than a single frame, then so be it; the JPG decoder will + # ignore the extra data. We do it like this in order not to get a buildup of frames + + if self._stream_buffer_start_index != -1 and stream_buffer_end_index != -1: + jpg_data = self._stream_buffer[self._stream_buffer_start_index:stream_buffer_end_index + 2] + self._stream_buffer = self._stream_buffer[stream_buffer_end_index + 2:] + self._stream_buffer_start_index = -1 + self._image.loadFromData(jpg_data) + + if self._image.rect() != self._image_rect: + self.imageSizeChanged.emit() + + self.update() diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py index b7862251c9..0e33a71249 100644 --- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py +++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py @@ -4,19 +4,21 @@ from UM.FileHandler.FileHandler import FileHandler #For typing. from UM.Logger import Logger from UM.Scene.SceneNode import SceneNode #For typing. +from cura.API import Account from cura.CuraApplication import CuraApplication -from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionState +from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionState, ConnectionType from PyQt5.QtNetwork import QHttpMultiPart, QHttpPart, QNetworkRequest, QNetworkAccessManager, QNetworkReply, QAuthenticator from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl, QCoreApplication from time import time -from typing import Any, Callable, Dict, List, Optional +from typing import Callable, Dict, List, Optional, Union from enum import IntEnum import os # To get the username import gzip + class AuthState(IntEnum): NotAuthenticated = 1 AuthenticationRequested = 2 @@ -28,8 +30,8 @@ class AuthState(IntEnum): class NetworkedPrinterOutputDevice(PrinterOutputDevice): authenticationStateChanged = pyqtSignal() - def __init__(self, device_id, address: str, properties: Dict[bytes, bytes], parent: QObject = None) -> None: - super().__init__(device_id = device_id, parent = parent) + def __init__(self, device_id, address: str, properties: Dict[bytes, bytes], connection_type: ConnectionType = ConnectionType.NetworkConnection, parent: QObject = None) -> None: + super().__init__(device_id = device_id, connection_type = connection_type, parent = parent) self._manager = None # type: Optional[QNetworkAccessManager] self._last_manager_create_time = None # type: Optional[float] self._recreate_network_manager_time = 30 @@ -41,7 +43,8 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._api_prefix = "" self._address = address self._properties = properties - self._user_agent = "%s/%s " % (CuraApplication.getInstance().getApplicationName(), CuraApplication.getInstance().getVersion()) + self._user_agent = "%s/%s " % (CuraApplication.getInstance().getApplicationName(), + CuraApplication.getInstance().getVersion()) self._onFinishedCallbacks = {} # type: Dict[str, Callable[[QNetworkReply], None]] self._authentication_state = AuthState.NotAuthenticated @@ -53,22 +56,10 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._sending_gcode = False self._compressing_gcode = False self._gcode = [] # type: List[str] - self._connection_state_before_timeout = None # type: Optional[ConnectionState] - printer_type = self._properties.get(b"machine", b"").decode("utf-8") - printer_type_identifiers = { - "9066": "ultimaker3", - "9511": "ultimaker3_extended", - "9051": "ultimaker_s5" - } - self._printer_type = "Unknown" - for key, value in printer_type_identifiers.items(): - if printer_type.startswith(key): - self._printer_type = value - break - - def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: + def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, + file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: raise NotImplementedError("requestWrite needs to be implemented") def setAuthenticationState(self, authentication_state: AuthState) -> None: @@ -138,17 +129,15 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): if self._connection_state_before_timeout is None: self._connection_state_before_timeout = self._connection_state - self.setConnectionState(ConnectionState.closed) + self.setConnectionState(ConnectionState.Closed) # We need to check if the manager needs to be re-created. If we don't, we get some issues when OSX goes to # sleep. if time_since_last_response > self._recreate_network_manager_time: - if self._last_manager_create_time is None: - self._createNetworkManager() - elif time() - self._last_manager_create_time > self._recreate_network_manager_time: + if self._last_manager_create_time is None or time() - self._last_manager_create_time > self._recreate_network_manager_time: self._createNetworkManager() assert(self._manager is not None) - elif self._connection_state == ConnectionState.closed: + elif self._connection_state == ConnectionState.Closed: # Go out of timeout. if self._connection_state_before_timeout is not None: # sanity check, but it should never be None here self.setConnectionState(self._connection_state_before_timeout) @@ -158,10 +147,15 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): url = QUrl("http://" + self._address + self._api_prefix + target) request = QNetworkRequest(url) if content_type is not None: - request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json") + request.setHeader(QNetworkRequest.ContentTypeHeader, content_type) request.setHeader(QNetworkRequest.UserAgentHeader, self._user_agent) return request + ## This method was only available privately before, but it was actually called from SendMaterialJob.py. + # We now have a public equivalent as well. We did not remove the private one as plugins might be using that. + def createFormPart(self, content_header: str, data: bytes, content_type: Optional[str] = None) -> QHttpPart: + return self._createFormPart(content_header, data, content_type) + def _createFormPart(self, content_header: str, data: bytes, content_type: Optional[str] = None) -> QHttpPart: part = QHttpPart() @@ -175,9 +169,15 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): part.setBody(data) return part - ## Convenience function to get the username from the OS. - # The code was copied from the getpass module, as we try to use as little dependencies as possible. + ## Convenience function to get the username, either from the cloud or from the OS. def _getUserName(self) -> str: + # check first if we are logged in with the Ultimaker Account + account = CuraApplication.getInstance().getCuraAPI().account # type: Account + if account and account.isLoggedIn: + return account.userName + + # Otherwise get the username from the US + # The code below was copied from the getpass module, as we try to use as little dependencies as possible. for name in ("LOGNAME", "USER", "LNAME", "USERNAME"): user = os.environ.get(name) if user: @@ -188,40 +188,95 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): if reply in self._kept_alive_multiparts: del self._kept_alive_multiparts[reply] - def put(self, target: str, data: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: + def _validateManager(self) -> None: if self._manager is None: self._createNetworkManager() assert (self._manager is not None) - request = self._createEmptyRequest(target) + + ## Sends a put request to the given path. + # \param url: The path after the API prefix. + # \param data: The data to be sent in the body + # \param content_type: The content type of the body data. + # \param on_finished: The function to call when the response is received. + # \param on_progress: The function to call when the progress changes. Parameters are bytes_sent / bytes_total. + def put(self, url: str, data: Union[str, bytes], content_type: Optional[str] = "application/json", + on_finished: Optional[Callable[[QNetworkReply], None]] = None, + on_progress: Optional[Callable[[int, int], None]] = None) -> None: + self._validateManager() + + request = self._createEmptyRequest(url, content_type = content_type) self._last_request_time = time() - reply = self._manager.put(request, data.encode()) + + if not self._manager: + Logger.log("e", "No network manager was created to execute the PUT call with.") + return + + body = data if isinstance(data, bytes) else data.encode() # type: bytes + reply = self._manager.put(request, body) self._registerOnFinishedCallback(reply, on_finished) - def get(self, target: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: - if self._manager is None: - self._createNetworkManager() - assert (self._manager is not None) - request = self._createEmptyRequest(target) + if on_progress is not None: + reply.uploadProgress.connect(on_progress) + + ## Sends a delete request to the given path. + # \param url: The path after the API prefix. + # \param on_finished: The function to be call when the response is received. + def delete(self, url: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: + self._validateManager() + + request = self._createEmptyRequest(url) self._last_request_time = time() + + if not self._manager: + Logger.log("e", "No network manager was created to execute the DELETE call with.") + return + + reply = self._manager.deleteResource(request) + self._registerOnFinishedCallback(reply, on_finished) + + ## Sends a get request to the given path. + # \param url: The path after the API prefix. + # \param on_finished: The function to be call when the response is received. + def get(self, url: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: + self._validateManager() + + request = self._createEmptyRequest(url) + self._last_request_time = time() + + if not self._manager: + Logger.log("e", "No network manager was created to execute the GET call with.") + return + reply = self._manager.get(request) self._registerOnFinishedCallback(reply, on_finished) - def post(self, target: str, data: str, on_finished: Optional[Callable[[QNetworkReply], None]], on_progress: Callable = None) -> None: - if self._manager is None: - self._createNetworkManager() - assert (self._manager is not None) - request = self._createEmptyRequest(target) + ## Sends a post request to the given path. + # \param url: The path after the API prefix. + # \param data: The data to be sent in the body + # \param on_finished: The function to call when the response is received. + # \param on_progress: The function to call when the progress changes. Parameters are bytes_sent / bytes_total. + def post(self, url: str, data: Union[str, bytes], + on_finished: Optional[Callable[[QNetworkReply], None]], + on_progress: Optional[Callable[[int, int], None]] = None) -> None: + self._validateManager() + + request = self._createEmptyRequest(url) self._last_request_time = time() - reply = self._manager.post(request, data) + + if not self._manager: + Logger.log("e", "Could not find manager.") + return + + body = data if isinstance(data, bytes) else data.encode() # type: bytes + reply = self._manager.post(request, body) if on_progress is not None: reply.uploadProgress.connect(on_progress) self._registerOnFinishedCallback(reply, on_finished) - def postFormWithParts(self, target: str, parts: List[QHttpPart], on_finished: Optional[Callable[[QNetworkReply], None]], on_progress: Callable = None) -> QNetworkReply: - - if self._manager is None: - self._createNetworkManager() - assert (self._manager is not None) + def postFormWithParts(self, target: str, parts: List[QHttpPart], + on_finished: Optional[Callable[[QNetworkReply], None]], + on_progress: Optional[Callable[[int, int], None]] = None) -> QNetworkReply: + self._validateManager() request = self._createEmptyRequest(target, content_type=None) multi_post_part = QHttpMultiPart(QHttpMultiPart.FormDataType) for part in parts: @@ -229,15 +284,18 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._last_request_time = time() - reply = self._manager.post(request, multi_post_part) + if self._manager is not None: + reply = self._manager.post(request, multi_post_part) - self._kept_alive_multiparts[reply] = multi_post_part + self._kept_alive_multiparts[reply] = multi_post_part - if on_progress is not None: - reply.uploadProgress.connect(on_progress) - self._registerOnFinishedCallback(reply, on_finished) + if on_progress is not None: + reply.uploadProgress.connect(on_progress) + self._registerOnFinishedCallback(reply, on_finished) - return reply + return reply + else: + Logger.log("e", "Could not find manager.") def postForm(self, target: str, header_data: str, body_data: bytes, on_finished: Optional[Callable[[QNetworkReply], None]], on_progress: Callable = None) -> None: post_part = QHttpPart() @@ -252,11 +310,11 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): def _createNetworkManager(self) -> None: Logger.log("d", "Creating network manager") if self._manager: - self._manager.finished.disconnect(self.__handleOnFinished) + self._manager.finished.disconnect(self._handleOnFinished) self._manager.authenticationRequired.disconnect(self._onAuthenticationRequired) self._manager = QNetworkAccessManager() - self._manager.finished.connect(self.__handleOnFinished) + self._manager.finished.connect(self._handleOnFinished) self._last_manager_create_time = time() self._manager.authenticationRequired.connect(self._onAuthenticationRequired) @@ -267,7 +325,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): if on_finished is not None: self._onFinishedCallbacks[reply.url().toString() + str(reply.operation())] = on_finished - def __handleOnFinished(self, reply: QNetworkReply) -> None: + def _handleOnFinished(self, reply: QNetworkReply) -> None: # Due to garbage collection, we need to cache certain bits of post operations. # As we don't want to keep them around forever, delete them if we get a reply. if reply.operation() == QNetworkAccessManager.PostOperation: @@ -279,8 +337,8 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._last_response_time = time() - if self._connection_state == ConnectionState.connecting: - self.setConnectionState(ConnectionState.connected) + if self._connection_state == ConnectionState.Connecting: + self.setConnectionState(ConnectionState.Connected) callback_key = reply.url().toString() + str(reply.operation()) try: @@ -323,7 +381,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): @pyqtProperty(str, constant = True) def printerType(self) -> str: - return self._printer_type + return self._properties.get(b"printer_type", b"Unknown").decode("utf-8") ## IP adress of this printer @pyqtProperty(str, constant = True) diff --git a/cura/PrinterOutput/PrintJobOutputModel.py b/cura/PrinterOutput/PrintJobOutputModel.py index b77600f85c..fb163ef065 100644 --- a/cura/PrinterOutput/PrintJobOutputModel.py +++ b/cura/PrinterOutput/PrintJobOutputModel.py @@ -1,12 +1,16 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot -from typing import Optional, TYPE_CHECKING +from typing import Optional, TYPE_CHECKING, List + +from PyQt5.QtCore import QUrl +from PyQt5.QtGui import QImage if TYPE_CHECKING: from cura.PrinterOutput.PrinterOutputController import PrinterOutputController from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel + from cura.PrinterOutput.ConfigurationModel import ConfigurationModel class PrintJobOutputModel(QObject): @@ -17,6 +21,9 @@ class PrintJobOutputModel(QObject): keyChanged = pyqtSignal() assignedPrinterChanged = pyqtSignal() ownerChanged = pyqtSignal() + configurationChanged = pyqtSignal() + previewImageChanged = pyqtSignal() + compatibleMachineFamiliesChanged = pyqtSignal() def __init__(self, output_controller: "PrinterOutputController", key: str = "", name: str = "", parent=None) -> None: super().__init__(parent) @@ -29,6 +36,48 @@ class PrintJobOutputModel(QObject): self._assigned_printer = None # type: Optional[PrinterOutputModel] self._owner = "" # Who started/owns the print job? + self._configuration = None # type: Optional[ConfigurationModel] + self._compatible_machine_families = [] # type: List[str] + self._preview_image_id = 0 + + self._preview_image = None # type: Optional[QImage] + + @pyqtProperty("QStringList", notify=compatibleMachineFamiliesChanged) + def compatibleMachineFamilies(self): + # Hack; Some versions of cluster will return a family more than once... + return list(set(self._compatible_machine_families)) + + def setCompatibleMachineFamilies(self, compatible_machine_families: List[str]) -> None: + if self._compatible_machine_families != compatible_machine_families: + self._compatible_machine_families = compatible_machine_families + self.compatibleMachineFamiliesChanged.emit() + + @pyqtProperty(QUrl, notify=previewImageChanged) + def previewImageUrl(self): + self._preview_image_id += 1 + # There is an image provider that is called "print_job_preview". In order to ensure that the image qml object, that + # requires a QUrl to function, updates correctly we add an increasing number. This causes to see the QUrl + # as new (instead of relying on cached version and thus forces an update. + temp = "image://print_job_preview/" + str(self._preview_image_id) + "/" + self._key + return QUrl(temp, QUrl.TolerantMode) + + def getPreviewImage(self) -> Optional[QImage]: + return self._preview_image + + def updatePreviewImage(self, preview_image: Optional[QImage]) -> None: + if self._preview_image != preview_image: + self._preview_image = preview_image + self.previewImageChanged.emit() + + @pyqtProperty(QObject, notify=configurationChanged) + def configuration(self) -> Optional["ConfigurationModel"]: + return self._configuration + + def updateConfiguration(self, configuration: Optional["ConfigurationModel"]) -> None: + if self._configuration != configuration: + self._configuration = configuration + self.configurationChanged.emit() + @pyqtProperty(str, notify=ownerChanged) def owner(self): return self._owner @@ -42,7 +91,7 @@ class PrintJobOutputModel(QObject): def assignedPrinter(self): return self._assigned_printer - def updateAssignedPrinter(self, assigned_printer: "PrinterOutputModel"): + def updateAssignedPrinter(self, assigned_printer: Optional["PrinterOutputModel"]) -> None: if self._assigned_printer != assigned_printer: old_printer = self._assigned_printer self._assigned_printer = assigned_printer @@ -70,17 +119,39 @@ class PrintJobOutputModel(QObject): self.nameChanged.emit() @pyqtProperty(int, notify = timeTotalChanged) - def timeTotal(self): + def timeTotal(self) -> int: return self._time_total @pyqtProperty(int, notify = timeElapsedChanged) - def timeElapsed(self): + def timeElapsed(self) -> int: return self._time_elapsed + @pyqtProperty(int, notify = timeElapsedChanged) + def timeRemaining(self) -> int: + # Never get a negative time remaining + return max(self.timeTotal - self.timeElapsed, 0) + + @pyqtProperty(float, notify = timeElapsedChanged) + def progress(self) -> float: + result = float(self.timeElapsed) / max(self.timeTotal, 1.0) # Prevent a division by zero exception. + return min(result, 1.0) # Never get a progress past 1.0 + @pyqtProperty(str, notify=stateChanged) - def state(self): + def state(self) -> str: return self._state + @pyqtProperty(bool, notify=stateChanged) + def isActive(self) -> bool: + inactiveStates = [ + "pausing", + "paused", + "resuming", + "wait_cleanup" + ] + if self.state in inactiveStates and self.timeRemaining > 0: + return False + return True + def updateTimeTotal(self, new_time_total): if self._time_total != new_time_total: self._time_total = new_time_total @@ -98,4 +169,4 @@ class PrintJobOutputModel(QObject): @pyqtSlot(str) def setState(self, state): - self._output_controller.setJobState(self, state) \ No newline at end of file + self._output_controller.setJobState(self, state) diff --git a/cura/PrinterOutput/PrinterOutputController.py b/cura/PrinterOutput/PrinterOutputController.py index 58c6ef05a7..aa06ada8a3 100644 --- a/cura/PrinterOutput/PrinterOutputController.py +++ b/cura/PrinterOutput/PrinterOutputController.py @@ -1,57 +1,68 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from UM.Logger import Logger +from UM.Signal import Signal + +from typing import Union MYPY = False if MYPY: from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel from cura.PrinterOutput.ExtruderOutputModel import ExtruderOutputModel from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel + from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice class PrinterOutputController: - def __init__(self, output_device): + def __init__(self, output_device: "PrinterOutputDevice") -> None: self.can_pause = True self.can_abort = True self.can_pre_heat_bed = True self.can_pre_heat_hotends = True self.can_send_raw_gcode = True self.can_control_manually = True + self.can_update_firmware = False self._output_device = output_device - def setTargetHotendTemperature(self, printer: "PrinterOutputModel", extruder: "ExtruderOutputModel", temperature: int): + def setTargetHotendTemperature(self, printer: "PrinterOutputModel", position: int, temperature: float) -> None: Logger.log("w", "Set target hotend temperature not implemented in controller") - def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: int): + def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: float) -> None: Logger.log("w", "Set target bed temperature not implemented in controller") - def setJobState(self, job: "PrintJobOutputModel", state: str): + def setJobState(self, job: "PrintJobOutputModel", state: str) -> None: Logger.log("w", "Set job state not implemented in controller") - def cancelPreheatBed(self, printer: "PrinterOutputModel"): + def cancelPreheatBed(self, printer: "PrinterOutputModel") -> None: Logger.log("w", "Cancel preheat bed not implemented in controller") - def preheatBed(self, printer: "PrinterOutputModel", temperature, duration): + def preheatBed(self, printer: "PrinterOutputModel", temperature, duration) -> None: Logger.log("w", "Preheat bed not implemented in controller") - def cancelPreheatHotend(self, extruder: "ExtruderOutputModel"): + def cancelPreheatHotend(self, extruder: "ExtruderOutputModel") -> None: Logger.log("w", "Cancel preheat hotend not implemented in controller") - def preheatHotend(self, extruder: "ExtruderOutputModel", temperature, duration): + def preheatHotend(self, extruder: "ExtruderOutputModel", temperature, duration) -> None: Logger.log("w", "Preheat hotend not implemented in controller") - def setHeadPosition(self, printer: "PrinterOutputModel", x, y, z, speed): + def setHeadPosition(self, printer: "PrinterOutputModel", x, y, z, speed) -> None: Logger.log("w", "Set head position not implemented in controller") - def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed): + def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed) -> None: Logger.log("w", "Move head not implemented in controller") - def homeBed(self, printer: "PrinterOutputModel"): + def homeBed(self, printer: "PrinterOutputModel") -> None: Logger.log("w", "Home bed not implemented in controller") - def homeHead(self, printer: "PrinterOutputModel"): + def homeHead(self, printer: "PrinterOutputModel") -> None: Logger.log("w", "Home head not implemented in controller") - def sendRawCommand(self, printer: "PrinterOutputModel", command: str): + def sendRawCommand(self, printer: "PrinterOutputModel", command: str) -> None: Logger.log("w", "Custom command not implemented in controller") + + canUpdateFirmwareChanged = Signal() + def setCanUpdateFirmware(self, can_update_firmware: bool) -> None: + if can_update_firmware != self.can_update_firmware: + self.can_update_firmware = can_update_firmware + self.canUpdateFirmwareChanged.emit() \ No newline at end of file diff --git a/cura/PrinterOutput/PrinterOutputModel.py b/cura/PrinterOutput/PrinterOutputModel.py index f10d6bd75b..12884b5f9b 100644 --- a/cura/PrinterOutput/PrinterOutputModel.py +++ b/cura/PrinterOutput/PrinterOutputModel.py @@ -1,8 +1,8 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant, pyqtSlot -from typing import Optional +from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant, pyqtSlot, QUrl +from typing import List, Dict, Optional from UM.Math.Vector import Vector from cura.PrinterOutput.ConfigurationModel import ConfigurationModel from cura.PrinterOutput.ExtruderOutputModel import ExtruderOutputModel @@ -22,138 +22,140 @@ class PrinterOutputModel(QObject): nameChanged = pyqtSignal() headPositionChanged = pyqtSignal() keyChanged = pyqtSignal() - printerTypeChanged = pyqtSignal() + typeChanged = pyqtSignal() buildplateChanged = pyqtSignal() - cameraChanged = pyqtSignal() + cameraUrlChanged = pyqtSignal() configurationChanged = pyqtSignal() + canUpdateFirmwareChanged = pyqtSignal() def __init__(self, output_controller: "PrinterOutputController", number_of_extruders: int = 1, parent=None, firmware_version = "") -> None: super().__init__(parent) - self._bed_temperature = -1 # Use -1 for no heated bed. - self._target_bed_temperature = 0 + self._bed_temperature = -1 # type: float # Use -1 for no heated bed. + self._target_bed_temperature = 0 # type: float self._name = "" self._key = "" # Unique identifier self._controller = output_controller + self._controller.canUpdateFirmwareChanged.connect(self._onControllerCanUpdateFirmwareChanged) self._extruders = [ExtruderOutputModel(printer = self, position = i) for i in range(number_of_extruders)] - self._printer_configuration = ConfigurationModel() # Indicates the current configuration setup in this printer + self._printer_configuration = ConfigurationModel() # Indicates the current configuration setup in this printer self._head_position = Vector(0, 0, 0) self._active_print_job = None # type: Optional[PrintJobOutputModel] self._firmware_version = firmware_version self._printer_state = "unknown" self._is_preheating = False self._printer_type = "" - self._buildplate_name = None - # Update the printer configuration every time any of the extruders changes its configuration - for extruder in self._extruders: - extruder.extruderConfigurationChanged.connect(self._updateExtruderConfiguration) + self._buildplate = "" - self._camera = None + self._printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in + self._extruders] + + self._camera_url = QUrl() # type: QUrl @pyqtProperty(str, constant = True) - def firmwareVersion(self): + def firmwareVersion(self) -> str: return self._firmware_version - def setCamera(self, camera): - if self._camera is not camera: - self._camera = camera - self.cameraChanged.emit() + def setCameraUrl(self, camera_url: "QUrl") -> None: + if self._camera_url != camera_url: + self._camera_url = camera_url + self.cameraUrlChanged.emit() - def updateIsPreheating(self, pre_heating): + @pyqtProperty(QUrl, fset = setCameraUrl, notify = cameraUrlChanged) + def cameraUrl(self) -> "QUrl": + return self._camera_url + + def updateIsPreheating(self, pre_heating: bool) -> None: if self._is_preheating != pre_heating: self._is_preheating = pre_heating self.isPreheatingChanged.emit() @pyqtProperty(bool, notify=isPreheatingChanged) - def isPreheating(self): + def isPreheating(self) -> bool: return self._is_preheating - @pyqtProperty(QObject, notify=cameraChanged) - def camera(self): - return self._camera - - @pyqtProperty(str, notify = printerTypeChanged) - def type(self): + @pyqtProperty(str, notify = typeChanged) + def type(self) -> str: return self._printer_type - def updateType(self, printer_type): + def updateType(self, printer_type: str) -> None: if self._printer_type != printer_type: self._printer_type = printer_type self._printer_configuration.printerType = self._printer_type - self.printerTypeChanged.emit() + self.typeChanged.emit() self.configurationChanged.emit() @pyqtProperty(str, notify = buildplateChanged) - def buildplate(self): - return self._buildplate_name + def buildplate(self) -> str: + return self._buildplate - def updateBuildplateName(self, buildplate_name): - if self._buildplate_name != buildplate_name: - self._buildplate_name = buildplate_name - self._printer_configuration.buildplateConfiguration = self._buildplate_name + def updateBuildplate(self, buildplate: str) -> None: + if self._buildplate != buildplate: + self._buildplate = buildplate + self._printer_configuration.buildplateConfiguration = self._buildplate self.buildplateChanged.emit() self.configurationChanged.emit() @pyqtProperty(str, notify=keyChanged) - def key(self): + def key(self) -> str: return self._key - def updateKey(self, key: str): + def updateKey(self, key: str) -> None: if self._key != key: self._key = key self.keyChanged.emit() @pyqtSlot() - def homeHead(self): + def homeHead(self) -> None: self._controller.homeHead(self) @pyqtSlot() - def homeBed(self): + def homeBed(self) -> None: self._controller.homeBed(self) @pyqtSlot(str) - def sendRawCommand(self, command: str): + def sendRawCommand(self, command: str) -> None: self._controller.sendRawCommand(self, command) @pyqtProperty("QVariantList", constant = True) - def extruders(self): + def extruders(self) -> List["ExtruderOutputModel"]: return self._extruders @pyqtProperty(QVariant, notify = headPositionChanged) - def headPosition(self): + def headPosition(self) -> Dict[str, float]: return {"x": self._head_position.x, "y": self._head_position.y, "z": self.head_position.z} - def updateHeadPosition(self, x, y, z): + def updateHeadPosition(self, x: float, y: float, z: float) -> None: if self._head_position.x != x or self._head_position.y != y or self._head_position.z != z: self._head_position = Vector(x, y, z) self.headPositionChanged.emit() @pyqtProperty(float, float, float) @pyqtProperty(float, float, float, float) - def setHeadPosition(self, x, y, z, speed = 3000): + def setHeadPosition(self, x: float, y: float, z: float, speed: float = 3000) -> None: self.updateHeadPosition(x, y, z) self._controller.setHeadPosition(self, x, y, z, speed) @pyqtProperty(float) @pyqtProperty(float, float) - def setHeadX(self, x, speed = 3000): + def setHeadX(self, x: float, speed: float = 3000) -> None: self.updateHeadPosition(x, self._head_position.y, self._head_position.z) self._controller.setHeadPosition(self, x, self._head_position.y, self._head_position.z, speed) @pyqtProperty(float) @pyqtProperty(float, float) - def setHeadY(self, y, speed = 3000): + def setHeadY(self, y: float, speed: float = 3000) -> None: self.updateHeadPosition(self._head_position.x, y, self._head_position.z) self._controller.setHeadPosition(self, self._head_position.x, y, self._head_position.z, speed) @pyqtProperty(float) @pyqtProperty(float, float) - def setHeadZ(self, z, speed = 3000): + def setHeadZ(self, z: float, speed:float = 3000) -> None: self.updateHeadPosition(self._head_position.x, self._head_position.y, z) self._controller.setHeadPosition(self, self._head_position.x, self._head_position.y, z, speed) @pyqtSlot(float, float, float) @pyqtSlot(float, float, float, float) - def moveHead(self, x = 0, y = 0, z = 0, speed = 3000): + def moveHead(self, x: float = 0, y: float = 0, z: float = 0, speed: float = 3000) -> None: self._controller.moveHead(self, x, y, z, speed) ## Pre-heats the heated bed of the printer. @@ -162,47 +164,46 @@ class PrinterOutputModel(QObject): # Celsius. # \param duration How long the bed should stay warm, in seconds. @pyqtSlot(float, float) - def preheatBed(self, temperature, duration): + def preheatBed(self, temperature: float, duration: float) -> None: self._controller.preheatBed(self, temperature, duration) @pyqtSlot() - def cancelPreheatBed(self): + def cancelPreheatBed(self) -> None: self._controller.cancelPreheatBed(self) - def getController(self): + def getController(self) -> "PrinterOutputController": return self._controller - @pyqtProperty(str, notify=nameChanged) - def name(self): + @pyqtProperty(str, notify = nameChanged) + def name(self) -> str: return self._name - def setName(self, name): - self._setName(name) + def setName(self, name: str) -> None: self.updateName(name) - def updateName(self, name): + def updateName(self, name: str) -> None: if self._name != name: self._name = name self.nameChanged.emit() ## Update the bed temperature. This only changes it locally. - def updateBedTemperature(self, temperature): + def updateBedTemperature(self, temperature: float) -> None: if self._bed_temperature != temperature: self._bed_temperature = temperature self.bedTemperatureChanged.emit() - def updateTargetBedTemperature(self, temperature): + def updateTargetBedTemperature(self, temperature: float) -> None: if self._target_bed_temperature != temperature: self._target_bed_temperature = temperature self.targetBedTemperatureChanged.emit() ## Set the target bed temperature. This ensures that it's actually sent to the remote. - @pyqtSlot(int) - def setTargetBedTemperature(self, temperature): + @pyqtSlot(float) + def setTargetBedTemperature(self, temperature: float) -> None: self._controller.setTargetBedTemperature(self, temperature) self.updateTargetBedTemperature(temperature) - def updateActivePrintJob(self, print_job): + def updateActivePrintJob(self, print_job: Optional["PrintJobOutputModel"]) -> None: if self._active_print_job != print_job: old_print_job = self._active_print_job @@ -214,76 +215,83 @@ class PrinterOutputModel(QObject): old_print_job.updateAssignedPrinter(None) self.activePrintJobChanged.emit() - def updateState(self, printer_state): + def updateState(self, printer_state: str) -> None: if self._printer_state != printer_state: self._printer_state = printer_state self.stateChanged.emit() @pyqtProperty(QObject, notify = activePrintJobChanged) - def activePrintJob(self): + def activePrintJob(self) -> Optional["PrintJobOutputModel"]: return self._active_print_job - @pyqtProperty(str, notify=stateChanged) - def state(self): + @pyqtProperty(str, notify = stateChanged) + def state(self) -> str: return self._printer_state - @pyqtProperty(int, notify = bedTemperatureChanged) - def bedTemperature(self): + @pyqtProperty(float, notify = bedTemperatureChanged) + def bedTemperature(self) -> float: return self._bed_temperature - @pyqtProperty(int, notify=targetBedTemperatureChanged) - def targetBedTemperature(self): + @pyqtProperty(float, notify = targetBedTemperatureChanged) + def targetBedTemperature(self) -> float: return self._target_bed_temperature # Does the printer support pre-heating the bed at all - @pyqtProperty(bool, constant=True) - def canPreHeatBed(self): + @pyqtProperty(bool, constant = True) + def canPreHeatBed(self) -> bool: if self._controller: return self._controller.can_pre_heat_bed return False # Does the printer support pre-heating the bed at all - @pyqtProperty(bool, constant=True) - def canPreHeatHotends(self): + @pyqtProperty(bool, constant = True) + def canPreHeatHotends(self) -> bool: if self._controller: return self._controller.can_pre_heat_hotends return False # Does the printer support sending raw G-code at all - @pyqtProperty(bool, constant=True) - def canSendRawGcode(self): + @pyqtProperty(bool, constant = True) + def canSendRawGcode(self) -> bool: if self._controller: return self._controller.can_send_raw_gcode return False # Does the printer support pause at all - @pyqtProperty(bool, constant=True) - def canPause(self): + @pyqtProperty(bool, constant = True) + def canPause(self) -> bool: if self._controller: return self._controller.can_pause return False # Does the printer support abort at all - @pyqtProperty(bool, constant=True) - def canAbort(self): + @pyqtProperty(bool, constant = True) + def canAbort(self) -> bool: if self._controller: return self._controller.can_abort return False # Does the printer support manual control at all - @pyqtProperty(bool, constant=True) - def canControlManually(self): + @pyqtProperty(bool, constant = True) + def canControlManually(self) -> bool: if self._controller: return self._controller.can_control_manually return False + # Does the printer support upgrading firmware + @pyqtProperty(bool, notify = canUpdateFirmwareChanged) + def canUpdateFirmware(self) -> bool: + if self._controller: + return self._controller.can_update_firmware + return False + + # Stub to connect UM.Signal to pyqtSignal + def _onControllerCanUpdateFirmwareChanged(self) -> None: + self.canUpdateFirmwareChanged.emit() + # Returns the configuration (material, variant and buildplate) of the current printer @pyqtProperty(QObject, notify = configurationChanged) - def printerConfiguration(self): + def printerConfiguration(self) -> Optional[ConfigurationModel]: if self._printer_configuration.isValid(): return self._printer_configuration - return None - - def _updateExtruderConfiguration(self): - self._printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in self._extruders] - self.configurationChanged.emit() + return None \ No newline at end of file diff --git a/cura/PrinterOutputDevice.py b/cura/PrinterOutputDevice.py index 5ea65adb8e..dbdf8c986c 100644 --- a/cura/PrinterOutputDevice.py +++ b/cura/PrinterOutputDevice.py @@ -1,36 +1,44 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from enum import IntEnum +from typing import Callable, List, Optional, Union from UM.Decorators import deprecated from UM.i18n import i18nCatalog from UM.OutputDevice.OutputDevice import OutputDevice -from PyQt5.QtCore import pyqtProperty, QObject, QTimer, pyqtSignal +from PyQt5.QtCore import pyqtProperty, pyqtSignal, QObject, QTimer, QUrl from PyQt5.QtWidgets import QMessageBox from UM.Logger import Logger -from UM.FileHandler.FileHandler import FileHandler #For typing. -from UM.Scene.SceneNode import SceneNode #For typing. from UM.Signal import signalemitter from UM.Qt.QtApplication import QtApplication - -from enum import IntEnum # For the connection state tracking. -from typing import Callable, List, Optional +from UM.FlameProfiler import pyqtSlot MYPY = False if MYPY: from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel from cura.PrinterOutput.ConfigurationModel import ConfigurationModel + from cura.PrinterOutput.FirmwareUpdater import FirmwareUpdater + from UM.FileHandler.FileHandler import FileHandler + from UM.Scene.SceneNode import SceneNode i18n_catalog = i18nCatalog("cura") ## The current processing state of the backend. class ConnectionState(IntEnum): - closed = 0 - connecting = 1 - connected = 2 - busy = 3 - error = 4 + Closed = 0 + Connecting = 1 + Connected = 2 + Busy = 3 + Error = 4 + + +class ConnectionType(IntEnum): + NotConnected = 0 + UsbConnection = 1 + NetworkConnection = 2 + CloudConnection = 3 ## Printer output device adds extra interface options on top of output device. @@ -44,6 +52,7 @@ class ConnectionState(IntEnum): # For all other uses it should be used in the same way as a "regular" OutputDevice. @signalemitter class PrinterOutputDevice(QObject, OutputDevice): + printersChanged = pyqtSignal() connectionStateChanged = pyqtSignal(str) acceptsCommandsChanged = pyqtSignal() @@ -60,32 +69,34 @@ class PrinterOutputDevice(QObject, OutputDevice): # Signal to indicate that the configuration of one of the printers has changed. uniqueConfigurationsChanged = pyqtSignal() - def __init__(self, device_id: str, parent: QObject = None) -> None: + def __init__(self, device_id: str, connection_type: "ConnectionType" = ConnectionType.NotConnected, parent: QObject = None) -> None: super().__init__(device_id = device_id, parent = parent) # type: ignore # MyPy complains with the multiple inheritance self._printers = [] # type: List[PrinterOutputModel] self._unique_configurations = [] # type: List[ConfigurationModel] - self._monitor_view_qml_path = "" #type: str - self._monitor_component = None #type: Optional[QObject] - self._monitor_item = None #type: Optional[QObject] + self._monitor_view_qml_path = "" # type: str + self._monitor_component = None # type: Optional[QObject] + self._monitor_item = None # type: Optional[QObject] - self._control_view_qml_path = "" #type: str - self._control_component = None #type: Optional[QObject] - self._control_item = None #type: Optional[QObject] + self._control_view_qml_path = "" # type: str + self._control_component = None # type: Optional[QObject] + self._control_item = None # type: Optional[QObject] - self._accepts_commands = False #type: bool + self._accepts_commands = False # type: bool - self._update_timer = QTimer() #type: QTimer + self._update_timer = QTimer() # type: QTimer self._update_timer.setInterval(2000) # TODO; Add preference for update interval self._update_timer.setSingleShot(False) self._update_timer.timeout.connect(self._update) - self._connection_state = ConnectionState.closed #type: ConnectionState + self._connection_state = ConnectionState.Closed # type: ConnectionState + self._connection_type = connection_type # type: ConnectionType - self._firmware_name = None #type: Optional[str] - self._address = "" #type: str - self._connection_text = "" #type: str + self._firmware_updater = None # type: Optional[FirmwareUpdater] + self._firmware_name = None # type: Optional[str] + self._address = "" # type: str + self._connection_text = "" # type: str self.printersChanged.connect(self._onPrintersChanged) QtApplication.getInstance().getOutputDeviceManager().outputDevicesChanged.connect(self._updateUniqueConfigurations) @@ -107,15 +118,19 @@ class PrinterOutputDevice(QObject, OutputDevice): callback(QMessageBox.Yes) def isConnected(self) -> bool: - return self._connection_state != ConnectionState.closed and self._connection_state != ConnectionState.error + return self._connection_state != ConnectionState.Closed and self._connection_state != ConnectionState.Error - def setConnectionState(self, connection_state: ConnectionState) -> None: + def setConnectionState(self, connection_state: "ConnectionState") -> None: if self._connection_state != connection_state: self._connection_state = connection_state self.connectionStateChanged.emit(self._id) - @pyqtProperty(str, notify = connectionStateChanged) - def connectionState(self) -> ConnectionState: + @pyqtProperty(int, constant = True) + def connectionType(self) -> "ConnectionType": + return self._connection_type + + @pyqtProperty(int, notify = connectionStateChanged) + def connectionState(self) -> "ConnectionState": return self._connection_state def _update(self) -> None: @@ -128,7 +143,8 @@ class PrinterOutputDevice(QObject, OutputDevice): return None - def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: + def requestWrite(self, nodes: List["SceneNode"], file_name: Optional[str] = None, limit_mimetypes: bool = False, + file_handler: Optional["FileHandler"] = None, **kwargs: str) -> None: raise NotImplementedError("requestWrite needs to be implemented") @pyqtProperty(QObject, notify = printersChanged) @@ -171,13 +187,13 @@ class PrinterOutputDevice(QObject, OutputDevice): ## Attempt to establish connection def connect(self) -> None: - self.setConnectionState(ConnectionState.connecting) + self.setConnectionState(ConnectionState.Connecting) self._update_timer.start() ## Attempt to close the connection def close(self) -> None: self._update_timer.stop() - self.setConnectionState(ConnectionState.closed) + self.setConnectionState(ConnectionState.Closed) ## Ensure that close gets called when object is destroyed def __del__(self) -> None: @@ -204,10 +220,17 @@ class PrinterOutputDevice(QObject, OutputDevice): return self._unique_configurations def _updateUniqueConfigurations(self) -> None: - self._unique_configurations = list(set([printer.printerConfiguration for printer in self._printers if printer.printerConfiguration is not None])) - self._unique_configurations.sort(key = lambda k: k.printerType) + self._unique_configurations = sorted( + {printer.printerConfiguration for printer in self._printers if printer.printerConfiguration is not None}, + key=lambda config: config.printerType, + ) self.uniqueConfigurationsChanged.emit() + # Returns the unique configurations of the printers within this output device + @pyqtProperty("QStringList", notify = uniqueConfigurationsChanged) + def uniquePrinterTypes(self) -> List[str]: + return list(sorted(set([configuration.printerType for configuration in self._unique_configurations]))) + def _onPrintersChanged(self) -> None: for printer in self._printers: printer.configurationChanged.connect(self._updateUniqueConfigurations) @@ -225,4 +248,14 @@ class PrinterOutputDevice(QObject, OutputDevice): # # This name can be used to define device type def getFirmwareName(self) -> Optional[str]: - return self._firmware_name \ No newline at end of file + return self._firmware_name + + def getFirmwareUpdater(self) -> Optional["FirmwareUpdater"]: + return self._firmware_updater + + @pyqtSlot(str) + def updateFirmware(self, firmware_file: Union[str, QUrl]) -> None: + if not self._firmware_updater: + return + + self._firmware_updater.updateFirmware(firmware_file) diff --git a/cura/Scene/BlockSlicingDecorator.py b/cura/Scene/BlockSlicingDecorator.py index 3fc0015836..0536e1635f 100644 --- a/cura/Scene/BlockSlicingDecorator.py +++ b/cura/Scene/BlockSlicingDecorator.py @@ -1,9 +1,12 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + from UM.Scene.SceneNodeDecorator import SceneNodeDecorator class BlockSlicingDecorator(SceneNodeDecorator): - def __init__(self): + def __init__(self) -> None: super().__init__() - def isBlockSlicing(self): + def isBlockSlicing(self) -> bool: return True diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py index 367144abfc..da71f6920e 100644 --- a/cura/Scene/ConvexHullDecorator.py +++ b/cura/Scene/ConvexHullDecorator.py @@ -5,6 +5,7 @@ from PyQt5.QtCore import QTimer from UM.Application import Application from UM.Math.Polygon import Polygon + from UM.Scene.SceneNodeDecorator import SceneNodeDecorator from UM.Settings.ContainerRegistry import ContainerRegistry @@ -13,39 +14,49 @@ from cura.Scene import ConvexHullNode import numpy +from typing import TYPE_CHECKING, Any, Optional + +if TYPE_CHECKING: + from UM.Scene.SceneNode import SceneNode + from cura.Settings.GlobalStack import GlobalStack + from UM.Mesh.MeshData import MeshData + from UM.Math.Matrix import Matrix + + ## The convex hull decorator is a scene node decorator that adds the convex hull functionality to a scene node. # If a scene node has a convex hull decorator, it will have a shadow in which other objects can not be printed. class ConvexHullDecorator(SceneNodeDecorator): - def __init__(self): + def __init__(self) -> None: super().__init__() - self._convex_hull_node = None + self._convex_hull_node = None # type: Optional["SceneNode"] self._init2DConvexHullCache() - self._global_stack = None + self._global_stack = None # type: Optional[GlobalStack] # Make sure the timer is created on the main thread - self._recompute_convex_hull_timer = None - Application.getInstance().callLater(self.createRecomputeConvexHullTimer) + self._recompute_convex_hull_timer = None # type: Optional[QTimer] + from cura.CuraApplication import CuraApplication + if CuraApplication.getInstance() is not None: + CuraApplication.getInstance().callLater(self.createRecomputeConvexHullTimer) self._raft_thickness = 0.0 - # For raft thickness, DRY - self._build_volume = Application.getInstance().getBuildVolume() + self._build_volume = CuraApplication.getInstance().getBuildVolume() self._build_volume.raftThicknessChanged.connect(self._onChanged) - Application.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged) - Application.getInstance().getController().toolOperationStarted.connect(self._onChanged) - Application.getInstance().getController().toolOperationStopped.connect(self._onChanged) + CuraApplication.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged) + CuraApplication.getInstance().getController().toolOperationStarted.connect(self._onChanged) + CuraApplication.getInstance().getController().toolOperationStopped.connect(self._onChanged) self._onGlobalStackChanged() - def createRecomputeConvexHullTimer(self): + def createRecomputeConvexHullTimer(self) -> None: self._recompute_convex_hull_timer = QTimer() self._recompute_convex_hull_timer.setInterval(200) self._recompute_convex_hull_timer.setSingleShot(True) self._recompute_convex_hull_timer.timeout.connect(self.recomputeConvexHull) - def setNode(self, node): + def setNode(self, node: "SceneNode") -> None: previous_node = self._node # Disconnect from previous node signals if previous_node is not None and node is not previous_node: @@ -53,9 +64,9 @@ class ConvexHullDecorator(SceneNodeDecorator): previous_node.parentChanged.disconnect(self._onChanged) super().setNode(node) - - self._node.transformationChanged.connect(self._onChanged) - self._node.parentChanged.connect(self._onChanged) + # Mypy doesn't understand that self._node is no longer optional, so just use the node. + node.transformationChanged.connect(self._onChanged) + node.parentChanged.connect(self._onChanged) self._onChanged() @@ -63,37 +74,46 @@ class ConvexHullDecorator(SceneNodeDecorator): def __deepcopy__(self, memo): return ConvexHullDecorator() - ## Get the unmodified 2D projected convex hull of the node - def getConvexHull(self): + ## Get the unmodified 2D projected convex hull of the node (if any) + def getConvexHull(self) -> Optional[Polygon]: if self._node is None: return None hull = self._compute2DConvexHull() - if self._global_stack and self._node: + if self._global_stack and self._node is not None and hull is not None: # Parent can be None if node is just loaded. - if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and (self._node.getParent() is None or not self._node.getParent().callDecoration("isGroup")): + if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self.hasGroupAsParent(self._node): hull = hull.getMinkowskiHull(Polygon(numpy.array(self._global_stack.getProperty("machine_head_polygon", "value"), numpy.float32))) hull = self._add2DAdhesionMargin(hull) return hull ## Get the convex hull of the node with the full head size - def getConvexHullHeadFull(self): + def getConvexHullHeadFull(self) -> Optional[Polygon]: if self._node is None: return None return self._compute2DConvexHeadFull() + @staticmethod + def hasGroupAsParent(node: "SceneNode") -> bool: + parent = node.getParent() + if parent is None: + return False + return bool(parent.callDecoration("isGroup")) + ## Get convex hull of the object + head size # In case of printing all at once this is the same as the convex hull. # For one at the time this is area with intersection of mirrored head - def getConvexHullHead(self): + def getConvexHullHead(self) -> Optional[Polygon]: if self._node is None: return None if self._global_stack: - if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and (self._node.getParent() is None or not self._node.getParent().callDecoration("isGroup")): + if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self.hasGroupAsParent(self._node): head_with_fans = self._compute2DConvexHeadMin() + if head_with_fans is None: + return None head_with_fans_with_adhesion_margin = self._add2DAdhesionMargin(head_with_fans) return head_with_fans_with_adhesion_margin return None @@ -101,26 +121,33 @@ class ConvexHullDecorator(SceneNodeDecorator): ## Get convex hull of the node # In case of printing all at once this is the same as the convex hull. # For one at the time this is the area without the head. - def getConvexHullBoundary(self): + def getConvexHullBoundary(self) -> Optional[Polygon]: if self._node is None: return None if self._global_stack: - if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and (self._node.getParent() is None or not self._node.getParent().callDecoration("isGroup")): + if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self.hasGroupAsParent(self._node): # Printing one at a time and it's not an object in a group return self._compute2DConvexHull() return None - def recomputeConvexHullDelayed(self): + ## The same as recomputeConvexHull, but using a timer if it was set. + def recomputeConvexHullDelayed(self) -> None: if self._recompute_convex_hull_timer is not None: self._recompute_convex_hull_timer.start() else: self.recomputeConvexHull() - def recomputeConvexHull(self): + def recomputeConvexHull(self) -> None: 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 @@ -132,33 +159,38 @@ class ConvexHullDecorator(SceneNodeDecorator): hull_node = ConvexHullNode.ConvexHullNode(self._node, convex_hull, self._raft_thickness, root) self._convex_hull_node = hull_node - def _onSettingValueChanged(self, key, property_name): - if property_name != "value": #Not the value that was changed. + def _onSettingValueChanged(self, key: str, property_name: str) -> None: + if property_name != "value": # Not the value that was changed. return if key in self._affected_settings: self._onChanged() if key in self._influencing_settings: - self._init2DConvexHullCache() #Invalidate the cache. + self._init2DConvexHullCache() # Invalidate the cache. self._onChanged() - def _init2DConvexHullCache(self): + def _init2DConvexHullCache(self) -> None: # Cache for the group code path in _compute2DConvexHull() - self._2d_convex_hull_group_child_polygon = None - self._2d_convex_hull_group_result = None + self._2d_convex_hull_group_child_polygon = None # type: Optional[Polygon] + self._2d_convex_hull_group_result = None # type: Optional[Polygon] # Cache for the mesh code path in _compute2DConvexHull() - self._2d_convex_hull_mesh = None - self._2d_convex_hull_mesh_world_transform = None - self._2d_convex_hull_mesh_result = None + self._2d_convex_hull_mesh = None # type: Optional[MeshData] + self._2d_convex_hull_mesh_world_transform = None # type: Optional[Matrix] + self._2d_convex_hull_mesh_result = None # type: Optional[Polygon] - def _compute2DConvexHull(self): + def _compute2DConvexHull(self) -> Optional[Polygon]: + if self._node is None: + return None if self._node.callDecoration("isGroup"): points = numpy.zeros((0, 2), dtype=numpy.int32) for child in self._node.getChildren(): child_hull = child.callDecoration("_compute2DConvexHull") if child_hull: - points = numpy.append(points, child_hull.getPoints(), axis = 0) + try: + points = numpy.append(points, child_hull.getPoints(), axis = 0) + except ValueError: + pass if points.size < 3: return None @@ -178,49 +210,47 @@ class ConvexHullDecorator(SceneNodeDecorator): return offset_hull else: - offset_hull = None - mesh = None - world_transform = None - if self._node.getMeshData(): - mesh = self._node.getMeshData() - world_transform = self._node.getWorldTransformation() - - # Check the cache - if mesh is self._2d_convex_hull_mesh and world_transform == self._2d_convex_hull_mesh_world_transform: - return self._2d_convex_hull_mesh_result - - vertex_data = mesh.getConvexHullTransformedVertices(world_transform) - # Don't use data below 0. - # TODO; We need a better check for this as this gives poor results for meshes with long edges. - # Do not throw away vertices: the convex hull may be too small and objects can collide. - # vertex_data = vertex_data[vertex_data[:,1] >= -0.01] - - if len(vertex_data) >= 4: - # Round the vertex data to 1/10th of a mm, then remove all duplicate vertices - # This is done to greatly speed up further convex hull calculations as the convex hull - # becomes much less complex when dealing with highly detailed models. - vertex_data = numpy.round(vertex_data, 1) - - vertex_data = vertex_data[:, [0, 2]] # Drop the Y components to project to 2D. - - # Grab the set of unique points. - # - # This basically finds the unique rows in the array by treating them as opaque groups of bytes - # which are as long as the 2 float64s in each row, and giving this view to numpy.unique() to munch. - # See http://stackoverflow.com/questions/16970982/find-unique-rows-in-numpy-array - vertex_byte_view = numpy.ascontiguousarray(vertex_data).view( - numpy.dtype((numpy.void, vertex_data.dtype.itemsize * vertex_data.shape[1]))) - _, idx = numpy.unique(vertex_byte_view, return_index=True) - vertex_data = vertex_data[idx] # Select the unique rows by index. - - hull = Polygon(vertex_data) - - if len(vertex_data) >= 3: - convex_hull = hull.getConvexHull() - offset_hull = self._offsetHull(convex_hull) - else: + offset_hull = Polygon([]) + mesh = self._node.getMeshData() + if mesh is None: return Polygon([]) # Node has no mesh data, so just return an empty Polygon. + world_transform = self._node.getWorldTransformation() + + # Check the cache + if mesh is self._2d_convex_hull_mesh and world_transform == self._2d_convex_hull_mesh_world_transform: + return self._2d_convex_hull_mesh_result + + vertex_data = mesh.getConvexHullTransformedVertices(world_transform) + # Don't use data below 0. + # TODO; We need a better check for this as this gives poor results for meshes with long edges. + # Do not throw away vertices: the convex hull may be too small and objects can collide. + # vertex_data = vertex_data[vertex_data[:,1] >= -0.01] + + if len(vertex_data) >= 4: # type: ignore # mypy and numpy don't play along well just yet. + # Round the vertex data to 1/10th of a mm, then remove all duplicate vertices + # This is done to greatly speed up further convex hull calculations as the convex hull + # becomes much less complex when dealing with highly detailed models. + vertex_data = numpy.round(vertex_data, 1) + + vertex_data = vertex_data[:, [0, 2]] # Drop the Y components to project to 2D. + + # Grab the set of unique points. + # + # This basically finds the unique rows in the array by treating them as opaque groups of bytes + # which are as long as the 2 float64s in each row, and giving this view to numpy.unique() to munch. + # See http://stackoverflow.com/questions/16970982/find-unique-rows-in-numpy-array + vertex_byte_view = numpy.ascontiguousarray(vertex_data).view( + numpy.dtype((numpy.void, vertex_data.dtype.itemsize * vertex_data.shape[1]))) + _, idx = numpy.unique(vertex_byte_view, return_index = True) + vertex_data = vertex_data[idx] # Select the unique rows by index. + + hull = Polygon(vertex_data) + + if len(vertex_data) >= 3: + convex_hull = hull.getConvexHull() + offset_hull = self._offsetHull(convex_hull) + # Store the result in the cache self._2d_convex_hull_mesh = mesh self._2d_convex_hull_mesh_world_transform = world_transform @@ -228,42 +258,56 @@ class ConvexHullDecorator(SceneNodeDecorator): return offset_hull - def _getHeadAndFans(self): - return Polygon(numpy.array(self._global_stack.getHeadAndFansCoordinates(), numpy.float32)) + def _getHeadAndFans(self) -> Polygon: + if self._global_stack: + return Polygon(numpy.array(self._global_stack.getHeadAndFansCoordinates(), numpy.float32)) + return Polygon() - def _compute2DConvexHeadFull(self): - return self._compute2DConvexHull().getMinkowskiHull(self._getHeadAndFans()) + def _compute2DConvexHeadFull(self) -> Optional[Polygon]: + convex_hull = self._compute2DConvexHull() + if convex_hull: + return convex_hull.getMinkowskiHull(self._getHeadAndFans()) + return None - def _compute2DConvexHeadMin(self): - headAndFans = self._getHeadAndFans() - mirrored = headAndFans.mirror([0, 0], [0, 1]).mirror([0, 0], [1, 0]) # Mirror horizontally & vertically. + def _compute2DConvexHeadMin(self) -> Optional[Polygon]: + head_and_fans = self._getHeadAndFans() + mirrored = head_and_fans.mirror([0, 0], [0, 1]).mirror([0, 0], [1, 0]) # Mirror horizontally & vertically. head_and_fans = self._getHeadAndFans().intersectionConvexHulls(mirrored) # Min head hull is used for the push free - min_head_hull = self._compute2DConvexHull().getMinkowskiHull(head_and_fans) - return min_head_hull + convex_hull = self._compute2DConvexHull() + if convex_hull: + return convex_hull.getMinkowskiHull(head_and_fans) + return None ## Compensate given 2D polygon with adhesion margin # \return 2D polygon with added margin - def _add2DAdhesionMargin(self, poly): + def _add2DAdhesionMargin(self, poly: Polygon) -> Polygon: + if not self._global_stack: + return Polygon() # Compensate for raft/skirt/brim # Add extra margin depending on adhesion type adhesion_type = self._global_stack.getProperty("adhesion_type", "value") + max_length_available = 0.5 * min( + self._getSettingProperty("machine_width", "value"), + self._getSettingProperty("machine_depth", "value") + ) + if adhesion_type == "raft": - extra_margin = max(0, self._getSettingProperty("raft_margin", "value")) + extra_margin = min(max_length_available, max(0, self._getSettingProperty("raft_margin", "value"))) elif adhesion_type == "brim": - extra_margin = max(0, self._getSettingProperty("brim_line_count", "value") * self._getSettingProperty("skirt_brim_line_width", "value")) + extra_margin = min(max_length_available, max(0, self._getSettingProperty("brim_line_count", "value") * self._getSettingProperty("skirt_brim_line_width", "value"))) elif adhesion_type == "none": extra_margin = 0 elif adhesion_type == "skirt": - extra_margin = max( + extra_margin = min(max_length_available, max( 0, self._getSettingProperty("skirt_gap", "value") + - self._getSettingProperty("skirt_line_count", "value") * self._getSettingProperty("skirt_brim_line_width", "value")) + self._getSettingProperty("skirt_line_count", "value") * self._getSettingProperty("skirt_brim_line_width", "value"))) else: raise Exception("Unknown bed adhesion type. Did you forget to update the convex hull calculations for your new bed adhesion type?") - # adjust head_and_fans with extra margin + # Adjust head_and_fans with extra margin if extra_margin > 0: extra_margin_polygon = Polygon.approximatedCircle(extra_margin) poly = poly.getMinkowskiHull(extra_margin_polygon) @@ -274,7 +318,7 @@ class ConvexHullDecorator(SceneNodeDecorator): # \param convex_hull Polygon of the original convex hull. # \return New Polygon instance that is offset with everything that # influences the collision area. - def _offsetHull(self, convex_hull): + def _offsetHull(self, convex_hull: Polygon) -> Polygon: horizontal_expansion = max( self._getSettingProperty("xy_offset", "value"), self._getSettingProperty("xy_offset_layer_0", "value") @@ -295,16 +339,16 @@ class ConvexHullDecorator(SceneNodeDecorator): else: return convex_hull - def _onChanged(self, *args): + def _onChanged(self, *args) -> None: self._raft_thickness = self._build_volume.getRaftThickness() if not args or args[0] == self._node: self.recomputeConvexHullDelayed() - def _onGlobalStackChanged(self): + def _onGlobalStackChanged(self) -> None: if self._global_stack: self._global_stack.propertyChanged.disconnect(self._onSettingValueChanged) self._global_stack.containersChanged.disconnect(self._onChanged) - extruders = ExtruderManager.getInstance().getMachineExtruders(self._global_stack.getId()) + extruders = ExtruderManager.getInstance().getActiveExtruderStacks() for extruder in extruders: extruder.propertyChanged.disconnect(self._onSettingValueChanged) @@ -314,14 +358,16 @@ class ConvexHullDecorator(SceneNodeDecorator): self._global_stack.propertyChanged.connect(self._onSettingValueChanged) self._global_stack.containersChanged.connect(self._onChanged) - extruders = ExtruderManager.getInstance().getMachineExtruders(self._global_stack.getId()) + extruders = ExtruderManager.getInstance().getActiveExtruderStacks() for extruder in extruders: extruder.propertyChanged.connect(self._onSettingValueChanged) self._onChanged() ## Private convenience function to get a setting from the correct extruder (as defined by limit_to_extruder property). - def _getSettingProperty(self, setting_key, prop = "value"): + def _getSettingProperty(self, setting_key: str, prop: str = "value") -> Any: + if self._global_stack is None or self._node is None: + return None per_mesh_stack = self._node.callDecoration("getStack") if per_mesh_stack: return per_mesh_stack.getProperty(setting_key, prop) @@ -339,8 +385,8 @@ class ConvexHullDecorator(SceneNodeDecorator): # Limit_to_extruder is set. The global stack handles this then return self._global_stack.getProperty(setting_key, prop) - ## Returns true if node is a descendant or the same as the root node. - def __isDescendant(self, root, node): + ## Returns True if node is a descendant or the same as the root node. + def __isDescendant(self, root: "SceneNode", node: Optional["SceneNode"]) -> bool: if node is None: return False if root is node: diff --git a/cura/Scene/ConvexHullNode.py b/cura/Scene/ConvexHullNode.py index 4c79c7d5dc..90bf536308 100644 --- a/cura/Scene/ConvexHullNode.py +++ b/cura/Scene/ConvexHullNode.py @@ -1,7 +1,10 @@ # Copyright (c) 2015 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional from UM.Application import Application +from UM.Math.Polygon import Polygon +from UM.Qt.QtApplication import QtApplication from UM.Scene.SceneNode import SceneNode from UM.Resources import Resources from UM.Math.Color import Color @@ -16,7 +19,7 @@ class ConvexHullNode(SceneNode): # location an object uses on the buildplate. This area (or area's in case of one at a time printing) is # then displayed as a transparent shadow. If the adhesion type is set to raft, the area is extruded # to represent the raft as well. - def __init__(self, node, hull, thickness, parent = None): + def __init__(self, node: SceneNode, hull: Optional[Polygon], thickness: float, parent: Optional[SceneNode] = None) -> None: super().__init__(parent) self.setCalculateBoundingBox(False) @@ -25,7 +28,11 @@ class ConvexHullNode(SceneNode): # Color of the drawn convex hull if not Application.getInstance().getIsHeadLess(): - self._color = Color(*Application.getInstance().getTheme().getColor("convex_hull").getRgb()) + theme = QtApplication.getInstance().getTheme() + if theme: + self._color = Color(*theme.getColor("convex_hull").getRgb()) + else: + self._color = Color(0, 0, 0) else: self._color = Color(0, 0, 0) @@ -47,7 +54,7 @@ class ConvexHullNode(SceneNode): if hull_mesh_builder.addConvexPolygonExtrusion( self._hull.getPoints()[::-1], # bottom layer is reversed - self._mesh_height-thickness, self._mesh_height, color=self._color): + self._mesh_height - thickness, self._mesh_height, color = self._color): hull_mesh = hull_mesh_builder.build() self.setMeshData(hull_mesh) @@ -75,7 +82,7 @@ class ConvexHullNode(SceneNode): return True - def _onNodeDecoratorsChanged(self, node): + def _onNodeDecoratorsChanged(self, node: SceneNode) -> None: convex_hull_head = self._node.callDecoration("getConvexHullHead") if convex_hull_head: convex_hull_head_builder = MeshBuilder() diff --git a/cura/Scene/CuraSceneController.py b/cura/Scene/CuraSceneController.py index 4b19271538..9f26ea7cc3 100644 --- a/cura/Scene/CuraSceneController.py +++ b/cura/Scene/CuraSceneController.py @@ -3,6 +3,7 @@ from UM.Logger import Logger from PyQt5.QtCore import Qt, pyqtSlot, QObject from PyQt5.QtWidgets import QApplication +from UM.Scene.Camera import Camera from cura.ObjectsModel import ObjectsModel from cura.Machines.Models.MultiBuildPlateModel import MultiBuildPlateModel @@ -33,7 +34,7 @@ class CuraSceneController(QObject): source = args[0] else: source = None - if not isinstance(source, SceneNode): + if not isinstance(source, SceneNode) or isinstance(source, Camera): return max_build_plate = self._calcMaxBuildPlate() changed = False diff --git a/cura/Scene/GCodeListDecorator.py b/cura/Scene/GCodeListDecorator.py index 5738d0a7f2..d3dadb3f23 100644 --- a/cura/Scene/GCodeListDecorator.py +++ b/cura/Scene/GCodeListDecorator.py @@ -1,13 +1,19 @@ from UM.Scene.SceneNodeDecorator import SceneNodeDecorator +from typing import List class GCodeListDecorator(SceneNodeDecorator): - def __init__(self): + def __init__(self) -> None: super().__init__() - self._gcode_list = [] + self._gcode_list = [] # type: List[str] - def getGCodeList(self): + def getGCodeList(self) -> List[str]: return self._gcode_list - def setGCodeList(self, list): + def setGCodeList(self, list: List[str]) -> None: self._gcode_list = list + + def __deepcopy__(self, memo) -> "GCodeListDecorator": + copied_decorator = GCodeListDecorator() + copied_decorator.setGCodeList(self.getGCodeList()) + return copied_decorator diff --git a/cura/Scene/SliceableObjectDecorator.py b/cura/Scene/SliceableObjectDecorator.py index 1cb589d9c6..982a38d667 100644 --- a/cura/Scene/SliceableObjectDecorator.py +++ b/cura/Scene/SliceableObjectDecorator.py @@ -2,11 +2,11 @@ from UM.Scene.SceneNodeDecorator import SceneNodeDecorator class SliceableObjectDecorator(SceneNodeDecorator): - def __init__(self): + def __init__(self) -> None: super().__init__() - def isSliceable(self): + def isSliceable(self) -> bool: return True - def __deepcopy__(self, memo): + def __deepcopy__(self, memo) -> "SliceableObjectDecorator": return type(self)() diff --git a/cura/Scene/ZOffsetDecorator.py b/cura/Scene/ZOffsetDecorator.py index d3ee5c8454..b35b17a412 100644 --- a/cura/Scene/ZOffsetDecorator.py +++ b/cura/Scene/ZOffsetDecorator.py @@ -1,18 +1,19 @@ from UM.Scene.SceneNodeDecorator import SceneNodeDecorator + ## A decorator that stores the amount an object has been moved below the platform. class ZOffsetDecorator(SceneNodeDecorator): - def __init__(self): + def __init__(self) -> None: super().__init__() - self._z_offset = 0 + self._z_offset = 0. - def setZOffset(self, offset): + def setZOffset(self, offset: float) -> None: self._z_offset = offset - def getZOffset(self): + def getZOffset(self) -> float: return self._z_offset - def __deepcopy__(self, memo): + def __deepcopy__(self, memo) -> "ZOffsetDecorator": copied_decorator = ZOffsetDecorator() copied_decorator.setZOffset(self.getZOffset()) return copied_decorator diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 2b8ff4a234..133e04e8fc 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -4,12 +4,12 @@ import os import urllib.parse import uuid -from typing import Any -from typing import Dict, Union, Optional +from typing import Dict, Union, Any, TYPE_CHECKING, List -from PyQt5.QtCore import QObject, QUrl, QVariant +from PyQt5.QtCore import QObject, QUrl from PyQt5.QtWidgets import QMessageBox + from UM.i18n import i18nCatalog from UM.FlameProfiler import pyqtSlot from UM.Logger import Logger @@ -21,6 +21,18 @@ from UM.Settings.ContainerStack import ContainerStack from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Settings.InstanceContainer import InstanceContainer + +if TYPE_CHECKING: + from cura.CuraApplication import CuraApplication + from cura.Machines.ContainerNode import ContainerNode + from cura.Machines.MaterialNode import MaterialNode + from cura.Machines.QualityChangesGroup import QualityChangesGroup + from UM.PluginRegistry import PluginRegistry + from cura.Settings.MachineManager import MachineManager + from cura.Machines.MaterialManager import MaterialManager + from cura.Machines.QualityManager import QualityManager + from cura.Settings.CuraContainerRegistry import CuraContainerRegistry + catalog = i18nCatalog("cura") @@ -31,20 +43,20 @@ catalog = i18nCatalog("cura") # when a certain action happens. This can be done through this class. class ContainerManager(QObject): - def __init__(self, application): + def __init__(self, application: "CuraApplication") -> None: if ContainerManager.__instance is not None: raise RuntimeError("Try to create singleton '%s' more than once" % self.__class__.__name__) ContainerManager.__instance = self super().__init__(parent = application) - self._application = application - self._plugin_registry = self._application.getPluginRegistry() - self._container_registry = self._application.getContainerRegistry() - self._machine_manager = self._application.getMachineManager() - self._material_manager = self._application.getMaterialManager() - self._quality_manager = self._application.getQualityManager() - self._container_name_filters = {} # type: Dict[str, Dict[str, Any]] + self._application = application # type: CuraApplication + self._plugin_registry = self._application.getPluginRegistry() # type: PluginRegistry + self._container_registry = self._application.getContainerRegistry() # type: CuraContainerRegistry + self._machine_manager = self._application.getMachineManager() # type: MachineManager + self._material_manager = self._application.getMaterialManager() # type: MaterialManager + self._quality_manager = self._application.getQualityManager() # type: QualityManager + self._container_name_filters = {} # type: Dict[str, Dict[str, Any]] @pyqtSlot(str, str, result=str) def getContainerMetaDataEntry(self, container_id: str, entry_names: str) -> str: @@ -69,21 +81,23 @@ class ContainerManager(QObject): # by using "/" as a separator. For example, to change an entry "foo" in a # dictionary entry "bar", you can specify "bar/foo" as entry name. # - # \param container_id \type{str} The ID of the container to change. + # \param container_node \type{ContainerNode} # \param entry_name \type{str} The name of the metadata entry to change. # \param entry_value The new value of the entry. # - # \return True if successful, False if not. # TODO: This is ONLY used by MaterialView for material containers. Maybe refactor this. # Update: In order for QML to use objects and sub objects, those (sub) objects must all be QObject. Is that what we want? @pyqtSlot("QVariant", str, str) - def setContainerMetaDataEntry(self, container_node, entry_name, entry_value): - root_material_id = container_node.metadata["base_file"] + def setContainerMetaDataEntry(self, container_node: "ContainerNode", entry_name: str, entry_value: str) -> bool: + root_material_id = container_node.getMetaDataEntry("base_file", "") if self._container_registry.isReadOnly(root_material_id): Logger.log("w", "Cannot set metadata of read-only container %s.", root_material_id) return False material_group = self._material_manager.getMaterialGroup(root_material_id) + if material_group is None: + Logger.log("w", "Unable to find material group for: %s.", root_material_id) + return False entries = entry_name.split("/") entry_name = entries.pop() @@ -91,11 +105,11 @@ class ContainerManager(QObject): sub_item_changed = False if entries: root_name = entries.pop(0) - root = material_group.root_material_node.metadata.get(root_name) + root = material_group.root_material_node.getMetaDataEntry(root_name) item = root for _ in range(len(entries)): - item = item.get(entries.pop(0), { }) + item = item.get(entries.pop(0), {}) if item[entry_name] != entry_value: sub_item_changed = True @@ -109,9 +123,10 @@ class ContainerManager(QObject): container.setMetaDataEntry(entry_name, entry_value) if sub_item_changed: #If it was only a sub-item that has changed then the setMetaDataEntry won't correctly notice that something changed, and we must manually signal that the metadata changed. container.metaDataChanged.emit(container) + return True @pyqtSlot(str, result = str) - def makeUniqueName(self, original_name): + def makeUniqueName(self, original_name: str) -> str: return self._container_registry.uniqueName(original_name) ## Get a list of string that can be used as name filters for a Qt File Dialog @@ -125,7 +140,7 @@ class ContainerManager(QObject): # # \return A string list with name filters. @pyqtSlot(str, result = "QStringList") - def getContainerNameFilters(self, type_name): + def getContainerNameFilters(self, type_name: str) -> List[str]: if not self._container_name_filters: self._updateContainerNameFilters() @@ -257,7 +272,7 @@ class ContainerManager(QObject): # # \return \type{bool} True if successful, False if not. @pyqtSlot(result = bool) - def updateQualityChanges(self): + def updateQualityChanges(self) -> bool: global_stack = self._machine_manager.activeMachine if not global_stack: return False @@ -313,10 +328,10 @@ class ContainerManager(QObject): # \param material_id \type{str} the id of the material for which to get the linked materials. # \return \type{list} a list of names of materials with the same GUID @pyqtSlot("QVariant", bool, result = "QStringList") - def getLinkedMaterials(self, material_node, exclude_self = False): - guid = material_node.metadata["GUID"] + def getLinkedMaterials(self, material_node: "MaterialNode", exclude_self: bool = False): + guid = material_node.getMetaDataEntry("GUID", "") - self_root_material_id = material_node.metadata["base_file"] + self_root_material_id = material_node.getMetaDataEntry("base_file") material_group_list = self._material_manager.getMaterialGroupListByGUID(guid) linked_material_names = [] @@ -324,15 +339,19 @@ class ContainerManager(QObject): for material_group in material_group_list: if exclude_self and material_group.name == self_root_material_id: continue - linked_material_names.append(material_group.root_material_node.metadata["name"]) + linked_material_names.append(material_group.root_material_node.getMetaDataEntry("name", "")) return linked_material_names ## Unlink a material from all other materials by creating a new GUID # \param material_id \type{str} the id of the material to create a new GUID for. @pyqtSlot("QVariant") - def unlinkMaterial(self, material_node): + def unlinkMaterial(self, material_node: "MaterialNode") -> None: # Get the material group - material_group = self._material_manager.getMaterialGroup(material_node.metadata["base_file"]) + material_group = self._material_manager.getMaterialGroup(material_node.getMetaDataEntry("base_file", "")) + + if material_group is None: + Logger.log("w", "Unable to find material group for %s", material_node) + return # Generate a new GUID new_guid = str(uuid.uuid4()) @@ -344,7 +363,7 @@ class ContainerManager(QObject): if container is not None: container.setMetaDataEntry("GUID", new_guid) - def _performMerge(self, merge_into, merge, clear_settings = True): + def _performMerge(self, merge_into: InstanceContainer, merge: InstanceContainer, clear_settings: bool = True) -> None: if merge == merge_into: return @@ -372,7 +391,8 @@ class ContainerManager(QObject): continue mime_type = self._container_registry.getMimeTypeForContainer(container_type) - + if mime_type is None: + continue entry = { "type": serialize_type, "mime": mime_type, @@ -399,17 +419,17 @@ class ContainerManager(QObject): self._container_name_filters[name_filter] = entry ## Import single profile, file_url does not have to end with curaprofile - @pyqtSlot(QUrl, result="QVariantMap") - def importProfile(self, file_url): + @pyqtSlot(QUrl, result = "QVariantMap") + def importProfile(self, file_url: QUrl) -> Dict[str, str]: if not file_url.isValid(): - return + return {"status": "error", "message": catalog.i18nc("@info:status", "Invalid file URL:") + " " + str(file_url)} path = file_url.toLocalFile() if not path: - return + return {"status": "error", "message": catalog.i18nc("@info:status", "Invalid file URL:") + " " + str(file_url)} return self._container_registry.importProfile(path) @pyqtSlot(QObject, QUrl, str) - def exportQualityChangesGroup(self, quality_changes_group, file_url: QUrl, file_type: str): + def exportQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup", file_url: QUrl, file_type: str) -> None: if not file_url.isValid(): return path = file_url.toLocalFile() diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index e1f50a157d..a9f79d63d3 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -5,12 +5,12 @@ import os import re import configparser -from typing import cast, Optional - +from typing import cast, Dict, Optional from PyQt5.QtWidgets import QMessageBox from UM.Decorators import override from UM.Settings.ContainerFormatError import ContainerFormatError +from UM.Settings.Interfaces import ContainerInterface from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.ContainerStack import ContainerStack from UM.Settings.InstanceContainer import InstanceContainer @@ -28,7 +28,7 @@ from . import GlobalStack import cura.CuraApplication from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch -from cura.ReaderWriters.ProfileReader import NoProfileException +from cura.ReaderWriters.ProfileReader import NoProfileException, ProfileReader from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") @@ -161,20 +161,20 @@ class CuraContainerRegistry(ContainerRegistry): ## Imports a profile from a file # - # \param file_name \type{str} the full path and filename of the profile to import - # \return \type{Dict} dict with a 'status' key containing the string 'ok' or 'error', and a 'message' key - # containing a message for the user - def importProfile(self, file_name): + # \param file_name The full path and filename of the profile to import. + # \return Dict with a 'status' key containing the string 'ok' or 'error', + # and a 'message' key containing a message for the user. + def importProfile(self, file_name: str) -> Dict[str, str]: Logger.log("d", "Attempting to import profile %s", file_name) if not file_name: - return { "status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "Failed to import profile from {0}: {1}", file_name, "Invalid path")} + return { "status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags !", "Failed to import profile from {0}: {1}", file_name, "Invalid path")} plugin_registry = PluginRegistry.getInstance() extension = file_name.split(".")[-1] global_stack = Application.getInstance().getGlobalContainerStack() if not global_stack: - return + return {"status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags !", "Can't import profile from {0} before a printer is added.", file_name)} machine_extruders = [] for position in sorted(global_stack.extruders): @@ -183,15 +183,15 @@ class CuraContainerRegistry(ContainerRegistry): for plugin_id, meta_data in self._getIOPlugins("profile_reader"): if meta_data["profile_reader"][0]["extension"] != extension: continue - profile_reader = plugin_registry.getPluginObject(plugin_id) + profile_reader = cast(ProfileReader, plugin_registry.getPluginObject(plugin_id)) try: profile_or_list = profile_reader.read(file_name) # Try to open the file with the profile reader. except NoProfileException: - return { "status": "ok", "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "No custom profile to import in file {0}", file_name)} + return { "status": "ok", "message": catalog.i18nc("@info:status Don't translate the XML tags !", "No custom profile to import in file {0}", file_name)} except Exception as e: # Note that this will fail quickly. That is, if any profile reader throws an exception, it will stop reading. It will only continue reading if the reader returned None. Logger.log("e", "Failed to import profile from %s: %s while using profile reader. Got exception %s", file_name, profile_reader.getPluginId(), str(e)) - return { "status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "Failed to import profile from {0}: {1}", file_name, "\n" + str(e))} + return { "status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags !", "Failed to import profile from {0}:", file_name) + "\n" + str(e) + ""} if profile_or_list: # Ensure it is always a list of profiles @@ -215,19 +215,19 @@ class CuraContainerRegistry(ContainerRegistry): if not global_profile: Logger.log("e", "Incorrect profile [%s]. Could not find global profile", file_name) return { "status": "error", - "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "This profile {0} contains incorrect data, could not import it.", file_name)} + "message": catalog.i18nc("@info:status Don't translate the XML tags !", "This profile {0} contains incorrect data, could not import it.", file_name)} profile_definition = global_profile.getMetaDataEntry("definition") # Make sure we have a profile_definition in the file: if profile_definition is None: break - machine_definition = self.findDefinitionContainers(id = profile_definition) - if not machine_definition: + machine_definitions = self.findDefinitionContainers(id = profile_definition) + if not machine_definitions: Logger.log("e", "Incorrect profile [%s]. Unknown machine type [%s]", file_name, profile_definition) return {"status": "error", - "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "This profile {0} contains incorrect data, could not import it.", file_name) + "message": catalog.i18nc("@info:status Don't translate the XML tags !", "This profile {0} contains incorrect data, could not import it.", file_name) } - machine_definition = machine_definition[0] + machine_definition = machine_definitions[0] # Get the expected machine definition. # i.e.: We expect gcode for a UM2 Extended to be defined as normal UM2 gcode... @@ -238,7 +238,7 @@ class CuraContainerRegistry(ContainerRegistry): if profile_definition != expected_machine_definition: Logger.log("e", "Profile [%s] is for machine [%s] but the current active machine is [%s]. Will not import the profile", file_name, profile_definition, expected_machine_definition) return { "status": "error", - "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it.", file_name, profile_definition, expected_machine_definition)} + "message": catalog.i18nc("@info:status Don't translate the XML tags !", "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it.", file_name, profile_definition, expected_machine_definition)} # Fix the global quality profile's definition field in case it's not correct global_profile.setMetaDataEntry("definition", expected_machine_definition) @@ -267,19 +267,19 @@ class CuraContainerRegistry(ContainerRegistry): profile.setMetaDataEntry("position", "0") profile.setDirty(True) if idx == 0: - # move all per-extruder settings to the first extruder's quality_changes + # Move all per-extruder settings to the first extruder's quality_changes for qc_setting_key in global_profile.getAllKeys(): - settable_per_extruder = global_stack.getProperty(qc_setting_key, - "settable_per_extruder") + settable_per_extruder = global_stack.getProperty(qc_setting_key, "settable_per_extruder") if settable_per_extruder: setting_value = global_profile.getProperty(qc_setting_key, "value") setting_definition = global_stack.getSettingDefinition(qc_setting_key) - new_instance = SettingInstance(setting_definition, profile) - new_instance.setProperty("value", setting_value) - new_instance.resetState() # Ensure that the state is not seen as a user state. - profile.addInstance(new_instance) - profile.setDirty(True) + if setting_definition is not None: + new_instance = SettingInstance(setting_definition, profile) + new_instance.setProperty("value", setting_value) + new_instance.resetState() # Ensure that the state is not seen as a user state. + profile.addInstance(new_instance) + profile.setDirty(True) global_profile.removeInstance(qc_setting_key, postpone_emit=True) extruder_profiles.append(profile) @@ -291,7 +291,7 @@ class CuraContainerRegistry(ContainerRegistry): for profile_index, profile in enumerate(profile_or_list): if profile_index == 0: # This is assumed to be the global profile - profile_id = (global_stack.getBottom().getId() + "_" + name_seed).lower().replace(" ", "_") + profile_id = (cast(ContainerInterface, global_stack.getBottom()).getId() + "_" + name_seed).lower().replace(" ", "_") elif profile_index < len(machine_extruders) + 1: # This is assumed to be an extruder profile @@ -303,15 +303,15 @@ class CuraContainerRegistry(ContainerRegistry): profile.setMetaDataEntry("position", extruder_position) profile_id = (extruder_id + "_" + name_seed).lower().replace(" ", "_") - else: #More extruders in the imported file than in the machine. - continue #Delete the additional profiles. + else: # More extruders in the imported file than in the machine. + continue # Delete the additional profiles. result = self._configureProfile(profile, profile_id, new_name, expected_machine_definition) if result is not None: return {"status": "error", "message": catalog.i18nc( "@info:status Don't translate the XML tags or !", - "Failed to import profile from {0}: {1}", - file_name, result)} + "Failed to import profile from {0}:", + file_name) + " " + result + ""} return {"status": "ok", "message": catalog.i18nc("@info:status", "Successfully imported profile {0}", profile_or_list[0].getName())} @@ -386,30 +386,6 @@ class CuraContainerRegistry(ContainerRegistry): result.append( (plugin_id, meta_data) ) return result - ## Returns true if the current machine requires its own materials - # \return True if the current machine requires its own materials - def _machineHasOwnMaterials(self): - global_container_stack = Application.getInstance().getGlobalContainerStack() - if global_container_stack: - return global_container_stack.getMetaDataEntry("has_materials", False) - return False - - ## Gets the ID of the active material - # \return the ID of the active material or the empty string - def _activeMaterialId(self): - global_container_stack = Application.getInstance().getGlobalContainerStack() - if global_container_stack and global_container_stack.material: - return global_container_stack.material.getId() - return "" - - ## Returns true if the current machine requires its own quality profiles - # \return true if the current machine requires its own quality profiles - def _machineHasOwnQualities(self): - global_container_stack = Application.getInstance().getGlobalContainerStack() - if global_container_stack: - return parseBool(global_container_stack.getMetaDataEntry("has_machine_quality", False)) - return False - ## Convert an "old-style" pure ContainerStack to either an Extruder or Global stack. def _convertContainerStack(self, container): assert type(container) == ContainerStack @@ -521,7 +497,7 @@ class CuraContainerRegistry(ContainerRegistry): user_container.setMetaDataEntry("position", extruder_stack.getMetaDataEntry("position")) if machine.userChanges: - # for the newly created extruder stack, we need to move all "per-extruder" settings to the user changes + # For the newly created extruder stack, we need to move all "per-extruder" settings to the user changes # container to the extruder stack. for user_setting_key in machine.userChanges.getAllKeys(): settable_per_extruder = machine.getProperty(user_setting_key, "settable_per_extruder") @@ -583,7 +559,7 @@ class CuraContainerRegistry(ContainerRegistry): extruder_quality_changes_container.setMetaDataEntry("position", extruder_definition.getMetaDataEntry("position")) extruder_stack.qualityChanges = self.findInstanceContainers(id = quality_changes_id)[0] else: - # if we still cannot find a quality changes container for the extruder, create a new one + # If we still cannot find a quality changes container for the extruder, create a new one container_name = machine_quality_changes.getName() container_id = self.uniqueName(extruder_stack.getId() + "_qc_" + container_name) extruder_quality_changes_container = InstanceContainer(container_id, parent = application) @@ -601,7 +577,7 @@ class CuraContainerRegistry(ContainerRegistry): Logger.log("w", "Could not find quality_changes named [%s] for extruder [%s]", machine_quality_changes.getName(), extruder_stack.getId()) else: - # move all per-extruder settings to the extruder's quality changes + # Move all per-extruder settings to the extruder's quality changes for qc_setting_key in machine_quality_changes.getAllKeys(): settable_per_extruder = machine.getProperty(qc_setting_key, "settable_per_extruder") if settable_per_extruder: @@ -642,7 +618,7 @@ class CuraContainerRegistry(ContainerRegistry): if qc_name not in qc_groups: qc_groups[qc_name] = [] qc_groups[qc_name].append(qc) - # try to find from the quality changes cura directory too + # Try to find from the quality changes cura directory too quality_changes_container = self._findQualityChangesContainerInCuraFolder(machine_quality_changes.getName()) if quality_changes_container: qc_groups[qc_name].append(quality_changes_container) @@ -656,7 +632,7 @@ class CuraContainerRegistry(ContainerRegistry): else: qc_dict["global"] = qc if qc_dict["global"] is not None and len(qc_dict["extruders"]) == 1: - # move per-extruder settings + # Move per-extruder settings for qc_setting_key in qc_dict["global"].getAllKeys(): settable_per_extruder = machine.getProperty(qc_setting_key, "settable_per_extruder") if settable_per_extruder: @@ -686,21 +662,21 @@ class CuraContainerRegistry(ContainerRegistry): if not os.path.isfile(file_path): continue - parser = configparser.ConfigParser(interpolation=None) + parser = configparser.ConfigParser(interpolation = None) try: parser.read([file_path]) except: - # skip, it is not a valid stack file + # Skip, it is not a valid stack file continue if not parser.has_option("general", "name"): continue if parser["general"]["name"] == name: - # load the container + # Load the container container_id = os.path.basename(file_path).replace(".inst.cfg", "") if self.findInstanceContainers(id = container_id): - # this container is already in the registry, skip it + # This container is already in the registry, skip it continue instance_container = InstanceContainer(container_id) @@ -734,8 +710,8 @@ class CuraContainerRegistry(ContainerRegistry): else: Logger.log("w", "Could not find machine {machine} for extruder {extruder}", machine = extruder_stack.getMetaDataEntry("machine"), extruder = extruder_stack.getId()) - #Override just for the type. + # Override just for the type. @classmethod @override(ContainerRegistry) def getInstance(cls, *args, **kwargs) -> "CuraContainerRegistry": - return cast(CuraContainerRegistry, super().getInstance(*args, **kwargs)) \ No newline at end of file + return cast(CuraContainerRegistry, super().getInstance(*args, **kwargs)) diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index c8d1d9e370..042b065226 100755 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -145,13 +145,11 @@ class CuraContainerStack(ContainerStack): def setDefinition(self, new_definition: DefinitionContainerInterface) -> None: self.replaceContainer(_ContainerIndexes.Definition, new_definition) - ## Get the definition container. - # - # \return The definition container. Should always be a valid container, but can be equal to the empty InstanceContainer. - @pyqtProperty(QObject, fset = setDefinition, notify = pyqtContainersChanged) - def definition(self) -> DefinitionContainer: + def getDefinition(self) -> "DefinitionContainer": return cast(DefinitionContainer, self._containers[_ContainerIndexes.Definition]) + definition = pyqtProperty(QObject, fget = getDefinition, fset = setDefinition, notify = pyqtContainersChanged) + @override(ContainerStack) def getBottom(self) -> "DefinitionContainer": return self.definition @@ -291,7 +289,7 @@ class CuraContainerStack(ContainerStack): # Helper to make sure we emit a PyQt signal on container changes. def _onContainersChanged(self, container: Any) -> None: - self.pyqtContainersChanged.emit() + Application.getInstance().callLater(self.pyqtContainersChanged.emit) # Helper that can be overridden to get the "machine" definition, that is, the definition that defines the machine # and its properties rather than, for example, the extruder. Defaults to simply returning the definition property. diff --git a/cura/Settings/CuraFormulaFunctions.py b/cura/Settings/CuraFormulaFunctions.py new file mode 100644 index 0000000000..9ef80bd3d4 --- /dev/null +++ b/cura/Settings/CuraFormulaFunctions.py @@ -0,0 +1,135 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from typing import Any, List, Optional, TYPE_CHECKING + +from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext +from UM.Settings.SettingFunction import SettingFunction +from UM.Logger import Logger + +if TYPE_CHECKING: + from cura.CuraApplication import CuraApplication + from cura.Settings.CuraContainerStack import CuraContainerStack + + +# +# This class contains all Cura-related custom functions that can be used in formulas. Some functions requires +# information such as the currently active machine, so this is made into a class instead of standalone functions. +# +class CuraFormulaFunctions: + + def __init__(self, application: "CuraApplication") -> None: + self._application = application + + # ================ + # Custom Functions + # ================ + + # Gets the default extruder position of the currently active machine. + def getDefaultExtruderPosition(self) -> str: + machine_manager = self._application.getMachineManager() + return machine_manager.defaultExtruderPosition + + # Gets the given setting key from the given extruder position. + def getValueInExtruder(self, extruder_position: int, property_key: str, + context: Optional["PropertyEvaluationContext"] = None) -> Any: + machine_manager = self._application.getMachineManager() + + if extruder_position == -1: + extruder_position = int(machine_manager.defaultExtruderPosition) + + global_stack = machine_manager.activeMachine + try: + extruder_stack = global_stack.extruders[str(extruder_position)] + except KeyError: + Logger.log("w", "Value for %s of extruder %s was requested, but that extruder is not available" % (property_key, extruder_position)) + return None + + value = extruder_stack.getRawProperty(property_key, "value", context = context) + if isinstance(value, SettingFunction): + value = value(extruder_stack, context = context) + + return value + + # Gets all extruder values as a list for the given property. + def getValuesInAllExtruders(self, property_key: str, + context: Optional["PropertyEvaluationContext"] = None) -> List[Any]: + machine_manager = self._application.getMachineManager() + extruder_manager = self._application.getExtruderManager() + + global_stack = machine_manager.activeMachine + + result = [] + for extruder in extruder_manager.getActiveExtruderStacks(): + if not extruder.isEnabled: + continue + # only include values from extruders that are "active" for the current machine instance + if int(extruder.getMetaDataEntry("position")) >= global_stack.getProperty("machine_extruder_count", "value", context = context): + continue + + value = extruder.getRawProperty(property_key, "value", context = context) + + if value is None: + continue + + if isinstance(value, SettingFunction): + value = value(extruder, context = context) + + result.append(value) + + if not result: + result.append(global_stack.getProperty(property_key, "value", context = context)) + + return result + + # Get the resolve value or value for a given key. + def getResolveOrValue(self, property_key: str, context: Optional["PropertyEvaluationContext"] = None) -> Any: + machine_manager = self._application.getMachineManager() + + global_stack = machine_manager.activeMachine + resolved_value = global_stack.getProperty(property_key, "value", context = context) + + return resolved_value + + # Gets the default setting value from given extruder position. The default value is what excludes the values in + # the user_changes container. + def getDefaultValueInExtruder(self, extruder_position: int, property_key: str) -> Any: + machine_manager = self._application.getMachineManager() + + global_stack = machine_manager.activeMachine + extruder_stack = global_stack.extruders[str(extruder_position)] + + context = self.createContextForDefaultValueEvaluation(extruder_stack) + + return self.getValueInExtruder(extruder_position, property_key, context = context) + + # Gets all default setting values as a list from all extruders of the currently active machine. + # The default values are those excluding the values in the user_changes container. + def getDefaultValuesInAllExtruders(self, property_key: str) -> List[Any]: + machine_manager = self._application.getMachineManager() + + global_stack = machine_manager.activeMachine + + context = self.createContextForDefaultValueEvaluation(global_stack) + + return self.getValuesInAllExtruders(property_key, context = context) + + # Gets the resolve value or value for a given key without looking the first container (user container). + def getDefaultResolveOrValue(self, property_key: str) -> Any: + machine_manager = self._application.getMachineManager() + + global_stack = machine_manager.activeMachine + + context = self.createContextForDefaultValueEvaluation(global_stack) + return self.getResolveOrValue(property_key, context = context) + + # Creates a context for evaluating default values (skip the user_changes container). + def createContextForDefaultValueEvaluation(self, source_stack: "CuraContainerStack") -> "PropertyEvaluationContext": + context = PropertyEvaluationContext(source_stack) + context.context["evaluate_from_container_index"] = 1 # skip the user settings container + context.context["override_operators"] = { + "extruderValue": self.getDefaultValueInExtruder, + "extruderValues": self.getDefaultValuesInAllExtruders, + "resolveOrValue": self.getDefaultResolveOrValue, + } + return context diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index 12fe732e3e..c98c63f529 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -15,6 +15,7 @@ from .ExtruderStack import ExtruderStack ## Contains helper functions to create new machines. class CuraStackBuilder: + ## Create a new instance of a machine. # # \param name The name of the new machine. @@ -26,7 +27,6 @@ class CuraStackBuilder: from cura.CuraApplication import CuraApplication application = CuraApplication.getInstance() variant_manager = application.getVariantManager() - material_manager = application.getMaterialManager() quality_manager = application.getQualityManager() registry = application.getContainerRegistry() @@ -46,16 +46,6 @@ class CuraStackBuilder: if not global_variant_container: global_variant_container = application.empty_variant_container - # get variant container for extruders - extruder_variant_container = application.empty_variant_container - extruder_variant_node = variant_manager.getDefaultVariantNode(machine_definition, VariantType.NOZZLE) - extruder_variant_name = None - if extruder_variant_node: - extruder_variant_container = extruder_variant_node.getContainer() - if not extruder_variant_container: - extruder_variant_container = application.empty_variant_container - extruder_variant_name = extruder_variant_container.getName() - generated_name = registry.createUniqueName("machine", "", name, machine_definition.getName()) # Make sure the new name does not collide with any definition or (quality) profile # createUniqueName() only looks at other stacks, but not at definitions or quality profiles @@ -74,34 +64,8 @@ class CuraStackBuilder: # Create ExtruderStacks extruder_dict = machine_definition.getMetaDataEntry("machine_extruder_trains") - - for position, extruder_definition_id in extruder_dict.items(): - # Sanity check: make sure that the positions in the extruder definitions are same as in the machine - # definition - extruder_definition = registry.findDefinitionContainers(id = extruder_definition_id)[0] - position_in_extruder_def = extruder_definition.getMetaDataEntry("position") - if position_in_extruder_def != position: - ConfigurationErrorMessage.getInstance().addFaultyContainers(extruder_definition_id) - return None #Don't return any container stack then, not the rest of the extruders either. - - # get material container for extruders - material_container = application.empty_material_container - material_node = material_manager.getDefaultMaterial(new_global_stack, position, extruder_variant_name, extruder_definition = extruder_definition) - if material_node and material_node.getContainer(): - material_container = material_node.getContainer() - - new_extruder_id = registry.uniqueName(extruder_definition_id) - new_extruder = cls.createExtruderStack( - new_extruder_id, - extruder_definition = extruder_definition, - machine_definition_id = definition_id, - position = position, - variant_container = extruder_variant_container, - material_container = material_container, - quality_container = application.empty_quality_container - ) - new_extruder.setNextStack(new_global_stack) - new_global_stack.addExtruder(new_extruder) + for position in extruder_dict: + cls.createExtruderStackWithDefaultSetup(new_global_stack, position) for new_extruder in new_global_stack.extruders.values(): #Only register the extruders if we're sure that all of them are correct. registry.addContainer(new_extruder) @@ -136,19 +100,73 @@ class CuraStackBuilder: return new_global_stack + ## Create a default Extruder Stack + # + # \param global_stack The global stack this extruder refers to. + # \param extruder_position The position of the current extruder. + @classmethod + def createExtruderStackWithDefaultSetup(cls, global_stack: "GlobalStack", extruder_position: int) -> None: + from cura.CuraApplication import CuraApplication + application = CuraApplication.getInstance() + variant_manager = application.getVariantManager() + material_manager = application.getMaterialManager() + registry = application.getContainerRegistry() + + # get variant container for extruders + extruder_variant_container = application.empty_variant_container + extruder_variant_node = variant_manager.getDefaultVariantNode(global_stack.definition, VariantType.NOZZLE, + global_stack = global_stack) + extruder_variant_name = None + if extruder_variant_node: + extruder_variant_container = extruder_variant_node.getContainer() + if not extruder_variant_container: + extruder_variant_container = application.empty_variant_container + extruder_variant_name = extruder_variant_container.getName() + + extruder_definition_dict = global_stack.getMetaDataEntry("machine_extruder_trains") + extruder_definition_id = extruder_definition_dict[str(extruder_position)] + extruder_definition = registry.findDefinitionContainers(id = extruder_definition_id)[0] + + # get material container for extruders + material_container = application.empty_material_container + material_node = material_manager.getDefaultMaterial(global_stack, str(extruder_position), extruder_variant_name, + extruder_definition = extruder_definition) + if material_node and material_node.getContainer(): + material_container = material_node.getContainer() + + new_extruder_id = registry.uniqueName(extruder_definition_id) + new_extruder = cls.createExtruderStack( + new_extruder_id, + extruder_definition = extruder_definition, + machine_definition_id = global_stack.definition.getId(), + position = extruder_position, + variant_container = extruder_variant_container, + material_container = material_container, + quality_container = application.empty_quality_container + ) + new_extruder.setNextStack(global_stack) + + registry.addContainer(new_extruder) + ## Create a new Extruder stack # # \param new_stack_id The ID of the new stack. - # \param definition The definition to base the new stack on. - # \param machine_definition_id The ID of the machine definition to use for - # the user container. - # \param kwargs You can add keyword arguments to specify IDs of containers to use for a specific type, for example "variant": "0.4mm" + # \param extruder_definition The definition to base the new stack on. + # \param machine_definition_id The ID of the machine definition to use for the user container. + # \param position The position the extruder occupies in the machine. + # \param variant_container The variant selected for the current extruder. + # \param material_container The material selected for the current extruder. + # \param quality_container The quality selected for the current extruder. # - # \return A new Global stack instance with the specified parameters. + # \return A new Extruder stack instance with the specified parameters. @classmethod - def createExtruderStack(cls, new_stack_id: str, extruder_definition: DefinitionContainerInterface, machine_definition_id: str, + def createExtruderStack(cls, new_stack_id: str, extruder_definition: DefinitionContainerInterface, + machine_definition_id: str, position: int, - variant_container, material_container, quality_container) -> ExtruderStack: + variant_container: "InstanceContainer", + material_container: "InstanceContainer", + quality_container: "InstanceContainer") -> ExtruderStack: + from cura.CuraApplication import CuraApplication application = CuraApplication.getInstance() registry = application.getContainerRegistry() @@ -157,7 +175,7 @@ class CuraStackBuilder: stack.setName(extruder_definition.getName()) stack.setDefinition(extruder_definition) - stack.setMetaDataEntry("position", position) + stack.setMetaDataEntry("position", str(position)) user_container = cls.createUserChangesContainer(new_stack_id + "_user", machine_definition_id, new_stack_id, is_global_stack = False) @@ -183,9 +201,22 @@ class CuraStackBuilder: # \param kwargs You can add keyword arguments to specify IDs of containers to use for a specific type, for example "variant": "0.4mm" # # \return A new Global stack instance with the specified parameters. + + ## Create a new Global stack + # + # \param new_stack_id The ID of the new stack. + # \param definition The definition to base the new stack on. + # \param variant_container The variant selected for the current stack. + # \param material_container The material selected for the current stack. + # \param quality_container The quality selected for the current stack. + # + # \return A new Global stack instance with the specified parameters. @classmethod def createGlobalStack(cls, new_stack_id: str, definition: DefinitionContainerInterface, - variant_container, material_container, quality_container) -> GlobalStack: + variant_container: "InstanceContainer", + material_container: "InstanceContainer", + quality_container: "InstanceContainer") -> GlobalStack: + from cura.CuraApplication import CuraApplication application = CuraApplication.getInstance() registry = application.getContainerRegistry() diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index e046082b5f..f8dccb4ba6 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -4,23 +4,20 @@ from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant # For communicating data and events to Qt. from UM.FlameProfiler import pyqtSlot -import cura.CuraApplication #To get the global container stack to find the current machine. +import cura.CuraApplication # To get the global container stack to find the current machine. +from cura.Settings.GlobalStack import GlobalStack from UM.Logger import Logger from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode from UM.Scene.Selection import Selection from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator from UM.Settings.ContainerRegistry import ContainerRegistry # Finding containers by ID. -from UM.Settings.SettingFunction import SettingFunction -from UM.Settings.SettingInstance import SettingInstance from UM.Settings.ContainerStack import ContainerStack -from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext -from typing import Optional, List, TYPE_CHECKING, Union, Dict +from typing import Any, cast, Dict, List, Optional, TYPE_CHECKING, Union if TYPE_CHECKING: from cura.Settings.ExtruderStack import ExtruderStack - from cura.Settings.GlobalStack import GlobalStack ## Manages all existing extruder stacks. @@ -38,9 +35,13 @@ class ExtruderManager(QObject): self._application = cura.CuraApplication.CuraApplication.getInstance() - self._extruder_trains = {} # Per machine, a dictionary of extruder container stack IDs. Only for separately defined extruders. + # Per machine, a dictionary of extruder container stack IDs. Only for separately defined extruders. + self._extruder_trains = {} # type: Dict[str, Dict[str, "ExtruderStack"]] self._active_extruder_index = -1 # Indicates the index of the active extruder stack. -1 means no active extruder stack - self._selected_object_extruders = [] + + # TODO; I have no idea why this is a union of ID's and extruder stacks. This needs to be fixed at some point. + self._selected_object_extruders = [] # type: List[Union[str, "ExtruderStack"]] + self._addCurrentMachineExtruders() Selection.selectionChanged.connect(self.resetSelectedObjectExtruders) @@ -62,52 +63,29 @@ class ExtruderManager(QObject): if not self._application.getGlobalContainerStack(): return None # No active machine, so no active extruder. try: - return self._extruder_trains[self._application.getGlobalContainerStack().getId()][str(self._active_extruder_index)].getId() + return self._extruder_trains[self._application.getGlobalContainerStack().getId()][str(self.activeExtruderIndex)].getId() except KeyError: # Extruder index could be -1 if the global tab is selected, or the entry doesn't exist if the machine definition is wrong. return None - ## Return extruder count according to extruder trains. - @pyqtProperty(int, notify = extrudersChanged) - def extruderCount(self): - if not self._application.getGlobalContainerStack(): - return 0 # No active machine, so no extruders. - try: - return len(self._extruder_trains[self._application.getGlobalContainerStack().getId()]) - except KeyError: - return 0 - ## Gets a dict with the extruder stack ids with the extruder number as the key. @pyqtProperty("QVariantMap", notify = extrudersChanged) def extruderIds(self) -> Dict[str, str]: - extruder_stack_ids = {} + extruder_stack_ids = {} # type: Dict[str, str] global_container_stack = self._application.getGlobalContainerStack() if global_container_stack: - global_stack_id = global_container_stack.getId() - - if global_stack_id in self._extruder_trains: - for position in self._extruder_trains[global_stack_id]: - extruder_stack_ids[position] = self._extruder_trains[global_stack_id][position].getId() + extruder_stack_ids = {position: extruder.id for position, extruder in global_container_stack.extruders.items()} return extruder_stack_ids - @pyqtSlot(str, result = str) - def getQualityChangesIdByExtruderStackId(self, extruder_stack_id: str) -> str: - global_container_stack = self._application.getGlobalContainerStack() - if global_container_stack is not None: - for position in self._extruder_trains[global_container_stack.getId()]: - extruder = self._extruder_trains[global_container_stack.getId()][position] - if extruder.getId() == extruder_stack_id: - return extruder.qualityChanges.getId() - return "" - ## Changes the active extruder by index. # # \param index The index of the new active extruder. @pyqtSlot(int) def setActiveExtruderIndex(self, index: int) -> None: - self._active_extruder_index = index - self.activeExtruderChanged.emit() + if self._active_extruder_index != index: + self._active_extruder_index = index + self.activeExtruderChanged.emit() @pyqtProperty(int, notify = activeExtruderChanged) def activeExtruderIndex(self) -> int: @@ -117,9 +95,9 @@ class ExtruderManager(QObject): # # \param index The index of the extruder whose name to get. @pyqtSlot(int, result = str) - def getExtruderName(self, index): + def getExtruderName(self, index: int) -> str: try: - return list(self.getActiveExtruderStacks())[index].getName() + return self.getActiveExtruderStacks()[index].getName() except IndexError: return "" @@ -128,12 +106,12 @@ class ExtruderManager(QObject): ## Provides a list of extruder IDs used by the current selected objects. @pyqtProperty("QVariantList", notify = selectedObjectExtrudersChanged) - def selectedObjectExtruders(self) -> List[str]: + def selectedObjectExtruders(self) -> List[Union[str, "ExtruderStack"]]: if not self._selected_object_extruders: object_extruders = set() # First, build a list of the actual selected objects (including children of groups, excluding group nodes) - selected_nodes = [] + selected_nodes = [] # type: List["SceneNode"] for node in Selection.getAllSelectedObjects(): if node.callDecoration("isGroup"): for grouped_node in BreadthFirstIterator(node): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. @@ -145,16 +123,15 @@ class ExtruderManager(QObject): selected_nodes.append(node) # Then, figure out which nodes are used by those selected nodes. - global_stack = self._application.getGlobalContainerStack() - current_extruder_trains = self._extruder_trains.get(global_stack.getId()) + current_extruder_trains = self.getActiveExtruderStacks() for node in selected_nodes: extruder = node.callDecoration("getActiveExtruder") if extruder: object_extruders.add(extruder) elif current_extruder_trains: - object_extruders.add(current_extruder_trains["0"].getId()) + object_extruders.add(current_extruder_trains[0].getId()) - self._selected_object_extruders = list(object_extruders) + self._selected_object_extruders = list(object_extruders) # type: List[Union[str, "ExtruderStack"]] return self._selected_object_extruders @@ -163,19 +140,12 @@ class ExtruderManager(QObject): # This will trigger a recalculation of the extruders used for the # selection. def resetSelectedObjectExtruders(self) -> None: - self._selected_object_extruders = [] + self._selected_object_extruders = [] # type: List[Union[str, "ExtruderStack"]] self.selectedObjectExtrudersChanged.emit() @pyqtSlot(result = QObject) def getActiveExtruderStack(self) -> Optional["ExtruderStack"]: - global_container_stack = self._application.getGlobalContainerStack() - - if global_container_stack: - if global_container_stack.getId() in self._extruder_trains: - if str(self._active_extruder_index) in self._extruder_trains[global_container_stack.getId()]: - return self._extruder_trains[global_container_stack.getId()][str(self._active_extruder_index)] - - return None + return self.getExtruderStack(self.activeExtruderIndex) ## Get an extruder stack by index def getExtruderStack(self, index) -> Optional["ExtruderStack"]: @@ -186,16 +156,7 @@ class ExtruderManager(QObject): return self._extruder_trains[global_container_stack.getId()][str(index)] return None - ## Get all extruder stacks - def getExtruderStacks(self) -> List["ExtruderStack"]: - result = [] - for i in range(self.extruderCount): - stack = self.getExtruderStack(i) - if stack: - result.append(stack) - return result - - def registerExtruder(self, extruder_train, machine_id): + def registerExtruder(self, extruder_train: "ExtruderStack", machine_id: str) -> None: changed = False if machine_id not in self._extruder_trains: @@ -214,23 +175,20 @@ class ExtruderManager(QObject): if changed: self.extrudersChanged.emit(machine_id) - def getAllExtruderValues(self, setting_key): - return self.getAllExtruderSettings(setting_key, "value") - ## Gets a property of a setting for all extruders. # # \param setting_key \type{str} The setting to get the property of. # \param property \type{str} The property to get. # \return \type{List} the list of results - def getAllExtruderSettings(self, setting_key: str, prop: str): + def getAllExtruderSettings(self, setting_key: str, prop: str) -> List: result = [] - for index in self.extruderIds: - extruder_stack_id = self.extruderIds[str(index)] - extruder_stack = ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack_id)[0] + + for extruder_stack in self.getActiveExtruderStacks(): result.append(extruder_stack.getProperty(setting_key, prop)) + return result - def extruderValueWithDefault(self, value): + def extruderValueWithDefault(self, value: str) -> str: machine_manager = self._application.getMachineManager() if value == "-1": return machine_manager.defaultExtruderPosition @@ -306,7 +264,9 @@ class ExtruderManager(QObject): used_extruder_stack_ids.add(self.extruderIds[self.extruderValueWithDefault(str(global_stack.getProperty("support_roof_extruder_nr", "value")))]) # The platform adhesion extruder. Not used if using none. - if global_stack.getProperty("adhesion_type", "value") != "none": + if global_stack.getProperty("adhesion_type", "value") != "none" or ( + global_stack.getProperty("prime_tower_brim_enable", "value") and + global_stack.getProperty("adhesion_type", "value") != 'raft'): extruder_str_nr = str(global_stack.getProperty("adhesion_extruder_nr", "value")) if extruder_str_nr == "-1": extruder_str_nr = self._application.getMachineManager().defaultExtruderPosition @@ -321,7 +281,7 @@ class ExtruderManager(QObject): ## Removes the container stack and user profile for the extruders for a specific machine. # # \param machine_id The machine to remove the extruders for. - def removeMachineExtruders(self, machine_id: str): + def removeMachineExtruders(self, machine_id: str) -> None: for extruder in self.getMachineExtruders(machine_id): ContainerRegistry.getInstance().removeContainer(extruder.userChanges.getId()) ContainerRegistry.getInstance().removeContainer(extruder.getId()) @@ -331,24 +291,11 @@ class ExtruderManager(QObject): ## Returns extruders for a specific machine. # # \param machine_id The machine to get the extruders of. - def getMachineExtruders(self, machine_id: str): + def getMachineExtruders(self, machine_id: str) -> List["ExtruderStack"]: if machine_id not in self._extruder_trains: return [] return [self._extruder_trains[machine_id][name] for name in self._extruder_trains[machine_id]] - ## Returns a list containing the global stack and active extruder stacks. - # - # The first element is the global container stack, followed by any extruder stacks. - # \return \type{List[ContainerStack]} - def getActiveGlobalAndExtruderStacks(self) -> Optional[List[Union["ExtruderStack", "GlobalStack"]]]: - global_stack = self._application.getGlobalContainerStack() - if not global_stack: - return None - - result = [global_stack] - result.extend(self.getActiveExtruderStacks()) - return result - ## Returns the list of active extruder stacks, taking into account the machine extruder count. # # \return \type{List[ContainerStack]} a list of @@ -356,15 +303,7 @@ class ExtruderManager(QObject): global_stack = self._application.getGlobalContainerStack() if not global_stack: return [] - - result = [] - if global_stack.getId() in self._extruder_trains: - for extruder in sorted(self._extruder_trains[global_stack.getId()]): - result.append(self._extruder_trains[global_stack.getId()][extruder]) - - machine_extruder_count = global_stack.getProperty("machine_extruder_count", "value") - - return result[:machine_extruder_count] + return global_stack.extruderList def _globalContainerStackChanged(self) -> None: # If the global container changed, the machine changed and might have extruders that were not registered yet @@ -403,99 +342,37 @@ class ExtruderManager(QObject): if extruders_changed: self.extrudersChanged.emit(global_stack_id) self.setActiveExtruderIndex(0) + self.activeExtruderChanged.emit() # After 3.4, all single-extrusion machines have their own extruder definition files instead of reusing # "fdmextruder". We need to check a machine here so its extruder definition is correct according to this. - def _fixSingleExtrusionMachineExtruderDefinition(self, global_stack): + def _fixSingleExtrusionMachineExtruderDefinition(self, global_stack: "GlobalStack") -> None: + container_registry = ContainerRegistry.getInstance() expected_extruder_definition_0_id = global_stack.getMetaDataEntry("machine_extruder_trains")["0"] - extruder_stack_0 = global_stack.extruders["0"] - if extruder_stack_0.definition.getId() != expected_extruder_definition_0_id: + extruder_stack_0 = global_stack.extruders.get("0") + # At this point, extruder stacks for this machine may not have been loaded yet. In this case, need to look in + # the container registry as well. + if not global_stack.extruders: + extruder_trains = container_registry.findContainerStacks(type = "extruder_train", + machine = global_stack.getId()) + if extruder_trains: + for extruder in extruder_trains: + if extruder.getMetaDataEntry("position") == "0": + extruder_stack_0 = extruder + break + + if extruder_stack_0 is None: + Logger.log("i", "No extruder stack for global stack [%s], create one", global_stack.getId()) + # Single extrusion machine without an ExtruderStack, create it + from cura.Settings.CuraStackBuilder import CuraStackBuilder + CuraStackBuilder.createExtruderStackWithDefaultSetup(global_stack, 0) + + elif extruder_stack_0.definition.getId() != expected_extruder_definition_0_id: Logger.log("e", "Single extruder printer [{printer}] expected extruder [{expected}], but got [{got}]. I'm making it [{expected}].".format( printer = global_stack.getId(), expected = expected_extruder_definition_0_id, got = extruder_stack_0.definition.getId())) - container_registry = ContainerRegistry.getInstance() extruder_definition = container_registry.findDefinitionContainers(id = expected_extruder_definition_0_id)[0] extruder_stack_0.definition = extruder_definition - ## Get all extruder values for a certain setting. - # - # This is exposed to SettingFunction so it can be used in value functions. - # - # \param key The key of the setting to retrieve values for. - # - # \return A list of values for all extruders. If an extruder does not have a value, it will not be in the list. - # If no extruder has the value, the list will contain the global value. - @staticmethod - def getExtruderValues(key): - global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() - - result = [] - for extruder in ExtruderManager.getInstance().getMachineExtruders(global_stack.getId()): - if not extruder.isEnabled: - continue - # only include values from extruders that are "active" for the current machine instance - if int(extruder.getMetaDataEntry("position")) >= global_stack.getProperty("machine_extruder_count", "value"): - continue - - value = extruder.getRawProperty(key, "value") - - if value is None: - continue - - if isinstance(value, SettingFunction): - value = value(extruder) - - result.append(value) - - if not result: - result.append(global_stack.getProperty(key, "value")) - - return result - - ## Get all extruder values for a certain setting. This function will skip the user settings container. - # - # This is exposed to SettingFunction so it can be used in value functions. - # - # \param key The key of the setting to retrieve values for. - # - # \return A list of values for all extruders. If an extruder does not have a value, it will not be in the list. - # If no extruder has the value, the list will contain the global value. - @staticmethod - def getDefaultExtruderValues(key): - global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() - context = PropertyEvaluationContext(global_stack) - context.context["evaluate_from_container_index"] = 1 # skip the user settings container - context.context["override_operators"] = { - "extruderValue": ExtruderManager.getDefaultExtruderValue, - "extruderValues": ExtruderManager.getDefaultExtruderValues, - "resolveOrValue": ExtruderManager.getDefaultResolveOrValue - } - - result = [] - for extruder in ExtruderManager.getInstance().getMachineExtruders(global_stack.getId()): - # only include values from extruders that are "active" for the current machine instance - if int(extruder.getMetaDataEntry("position")) >= global_stack.getProperty("machine_extruder_count", "value", context = context): - continue - - value = extruder.getRawProperty(key, "value", context = context) - - if value is None: - continue - - if isinstance(value, SettingFunction): - value = value(extruder, context = context) - - result.append(value) - - if not result: - result.append(global_stack.getProperty(key, "value", context = context)) - - return result - - ## Return the default extruder position from the machine manager - @staticmethod - def getDefaultExtruderPosition() -> str: - return cura.CuraApplication.CuraApplication.getInstance().getMachineManager().defaultExtruderPosition - ## Get all extruder values for a certain setting. # # This is exposed to qml for display purposes @@ -504,62 +381,8 @@ class ExtruderManager(QObject): # # \return String representing the extruder values @pyqtSlot(str, result="QVariant") - def getInstanceExtruderValues(self, key): - return ExtruderManager.getExtruderValues(key) - - ## Get the value for a setting from a specific extruder. - # - # This is exposed to SettingFunction to use in value functions. - # - # \param extruder_index The index of the extruder to get the value from. - # \param key The key of the setting to get the value of. - # - # \return The value of the setting for the specified extruder or for the - # global stack if not found. - @staticmethod - def getExtruderValue(extruder_index, key): - if extruder_index == -1: - extruder_index = int(cura.CuraApplication.CuraApplication.getInstance().getMachineManager().defaultExtruderPosition) - extruder = ExtruderManager.getInstance().getExtruderStack(extruder_index) - - if extruder: - value = extruder.getRawProperty(key, "value") - if isinstance(value, SettingFunction): - value = value(extruder) - else: - # Just a value from global. - value = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack().getProperty(key, "value") - - return value - - ## Get the default value from the given extruder. This function will skip the user settings container. - # - # This is exposed to SettingFunction to use in value functions. - # - # \param extruder_index The index of the extruder to get the value from. - # \param key The key of the setting to get the value of. - # - # \return The value of the setting for the specified extruder or for the - # global stack if not found. - @staticmethod - def getDefaultExtruderValue(extruder_index, key): - extruder = ExtruderManager.getInstance().getExtruderStack(extruder_index) - context = PropertyEvaluationContext(extruder) - context.context["evaluate_from_container_index"] = 1 # skip the user settings container - context.context["override_operators"] = { - "extruderValue": ExtruderManager.getDefaultExtruderValue, - "extruderValues": ExtruderManager.getDefaultExtruderValues, - "resolveOrValue": ExtruderManager.getDefaultResolveOrValue - } - - if extruder: - value = extruder.getRawProperty(key, "value", context = context) - if isinstance(value, SettingFunction): - value = value(extruder, context = context) - else: # Just a value from global. - value = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack().getProperty(key, "value", context = context) - - return value + def getInstanceExtruderValues(self, key: str) -> List: + return self._application.getCuraFormulaFunctions().getValuesInAllExtruders(key) ## Get the resolve value or value for a given key # @@ -569,34 +392,12 @@ class ExtruderManager(QObject): # # \return The effective value @staticmethod - def getResolveOrValue(key): - global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() + def getResolveOrValue(key: str) -> Any: + global_stack = cast(GlobalStack, cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()) resolved_value = global_stack.getProperty(key, "value") return resolved_value - ## Get the resolve value or value for a given key without looking the first container (user container) - # - # This is the effective value for a given key, it is used for values in the global stack. - # This is exposed to SettingFunction to use in value functions. - # \param key The key of the setting to get the value of. - # - # \return The effective value - @staticmethod - def getDefaultResolveOrValue(key): - global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() - context = PropertyEvaluationContext(global_stack) - context.context["evaluate_from_container_index"] = 1 # skip the user settings container - context.context["override_operators"] = { - "extruderValue": ExtruderManager.getDefaultExtruderValue, - "extruderValues": ExtruderManager.getDefaultExtruderValues, - "resolveOrValue": ExtruderManager.getDefaultResolveOrValue - } - - resolved_value = global_stack.getProperty(key, "value", context = context) - - return resolved_value - __instance = None # type: ExtruderManager @classmethod diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index ca687e358b..edb0e7d41f 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -52,8 +52,8 @@ class ExtruderStack(CuraContainerStack): return super().getNextStack() def setEnabled(self, enabled: bool) -> None: - if "enabled" not in self._metadata: - self.setMetaDataEntry("enabled", "True") + if self.getMetaDataEntry("enabled", True) == enabled: # No change. + return # Don't emit a signal then. self.setMetaDataEntry("enabled", str(enabled)) self.enabledChanged.emit() @@ -65,16 +65,33 @@ class ExtruderStack(CuraContainerStack): def getLoadingPriority(cls) -> int: return 3 + compatibleMaterialDiameterChanged = pyqtSignal() + ## Return the filament diameter that the machine requires. # # If the machine has no requirement for the diameter, -1 is returned. # \return The filament diameter for the printer - @property - def materialDiameter(self) -> float: + def getCompatibleMaterialDiameter(self) -> float: context = PropertyEvaluationContext(self) context.context["evaluate_from_container_index"] = _ContainerIndexes.Variant - return self.getProperty("material_diameter", "value", context = context) + return float(self.getProperty("material_diameter", "value", context = context)) + + def setCompatibleMaterialDiameter(self, value: float) -> None: + old_approximate_diameter = self.getApproximateMaterialDiameter() + if self.getCompatibleMaterialDiameter() != value: + self.definitionChanges.setProperty("material_diameter", "value", value) + self.compatibleMaterialDiameterChanged.emit() + + # Emit approximate diameter changed signal if needed + if old_approximate_diameter != self.getApproximateMaterialDiameter(): + self.approximateMaterialDiameterChanged.emit() + + compatibleMaterialDiameter = pyqtProperty(float, fset = setCompatibleMaterialDiameter, + fget = getCompatibleMaterialDiameter, + notify = compatibleMaterialDiameterChanged) + + approximateMaterialDiameterChanged = pyqtSignal() ## Return the approximate filament diameter that the machine requires. # @@ -84,9 +101,11 @@ class ExtruderStack(CuraContainerStack): # If the machine has no requirement for the diameter, -1 is returned. # # \return The approximate filament diameter for the printer - @pyqtProperty(float) - def approximateMaterialDiameter(self) -> float: - return round(float(self.materialDiameter)) + def getApproximateMaterialDiameter(self) -> float: + return round(self.getCompatibleMaterialDiameter()) + + approximateMaterialDiameter = pyqtProperty(float, fget = getApproximateMaterialDiameter, + notify = approximateMaterialDiameterChanged) ## Overridden from ContainerStack # diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index f179dabd5a..afc2af94b3 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -1,7 +1,7 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot, pyqtProperty, QTimer +from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty, QTimer from typing import Iterable from UM.i18n import i18nCatalog @@ -24,8 +24,6 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): ## Human-readable name of the extruder. NameRole = Qt.UserRole + 2 - ## Is the extruder enabled? - EnabledRole = Qt.UserRole + 9 ## Colour of the material loaded in the extruder. ColorRole = Qt.UserRole + 3 @@ -47,6 +45,12 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): VariantRole = Qt.UserRole + 7 StackRole = Qt.UserRole + 8 + MaterialBrandRole = Qt.UserRole + 9 + ColorNameRole = Qt.UserRole + 10 + + ## Is the extruder enabled? + EnabledRole = Qt.UserRole + 11 + ## List of colours to display if there is no material or the material has no known # colour. defaultColors = ["#ffc924", "#86ec21", "#22eeee", "#245bff", "#9124ff", "#ff24c8"] @@ -67,14 +71,13 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): self.addRoleName(self.MaterialRole, "material") self.addRoleName(self.VariantRole, "variant") self.addRoleName(self.StackRole, "stack") - + self.addRoleName(self.MaterialBrandRole, "material_brand") + self.addRoleName(self.ColorNameRole, "color_name") self._update_extruder_timer = QTimer() self._update_extruder_timer.setInterval(100) self._update_extruder_timer.setSingleShot(True) self._update_extruder_timer.timeout.connect(self.__updateExtruders) - self._simple_names = False - self._active_machine_extruders = [] # type: Iterable[ExtruderStack] self._add_optional_extruder = False @@ -96,21 +99,6 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): def addOptionalExtruder(self): return self._add_optional_extruder - ## Set the simpleNames property. - def setSimpleNames(self, simple_names): - if simple_names != self._simple_names: - self._simple_names = simple_names - self.simpleNamesChanged.emit() - self._updateExtruders() - - ## Emitted when the simpleNames property changes. - simpleNamesChanged = pyqtSignal() - - ## Whether or not the model should show all definitions regardless of visibility. - @pyqtProperty(bool, fset = setSimpleNames, notify = simpleNamesChanged) - def simpleNames(self): - return self._simple_names - ## Links to the stack-changed signal of the new extruders when an extruder # is swapped out or added in the current machine. # @@ -119,25 +107,28 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): # that signal. Application.globalContainerStackChanged doesn't fill this # signal; it's assumed to be the current printer in that case. def _extrudersChanged(self, machine_id = None): + machine_manager = Application.getInstance().getMachineManager() if machine_id is not None: - if Application.getInstance().getGlobalContainerStack() is None: + if machine_manager.activeMachine is None: # No machine, don't need to update the current machine's extruders return - if machine_id != Application.getInstance().getGlobalContainerStack().getId(): + if machine_id != machine_manager.activeMachine.getId(): # Not the current machine return # Unlink from old extruders for extruder in self._active_machine_extruders: extruder.containersChanged.disconnect(self._onExtruderStackContainersChanged) + extruder.enabledChanged.disconnect(self._updateExtruders) # Link to new extruders self._active_machine_extruders = [] extruder_manager = Application.getInstance().getExtruderManager() - for extruder in extruder_manager.getExtruderStacks(): + for extruder in extruder_manager.getActiveExtruderStacks(): if extruder is None: #This extruder wasn't loaded yet. This happens asynchronously while this model is constructed from QML. continue extruder.containersChanged.connect(self._onExtruderStackContainersChanged) + extruder.enabledChanged.connect(self._updateExtruders) self._active_machine_extruders.append(extruder) self._updateExtruders() # Since the new extruders may have different properties, update our own model. @@ -160,7 +151,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): def __updateExtruders(self): extruders_changed = False - if self.rowCount() != 0: + if self.count != 0: extruders_changed = True items = [] @@ -171,8 +162,8 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): # get machine extruder count for verification machine_extruder_count = global_container_stack.getProperty("machine_extruder_count", "value") - for extruder in Application.getInstance().getExtruderManager().getMachineExtruders(global_container_stack.getId()): - position = extruder.getMetaDataEntry("position", default = "0") # Get the position + for extruder in Application.getInstance().getExtruderManager().getActiveExtruderStacks(): + position = extruder.getMetaDataEntry("position", default = "0") try: position = int(position) except ValueError: @@ -183,7 +174,8 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): default_color = self.defaultColors[position] if 0 <= position < len(self.defaultColors) else self.defaultColors[0] color = extruder.material.getMetaDataEntry("color_code", default = default_color) if extruder.material else default_color - + material_brand = extruder.material.getMetaDataEntry("brand", default = "generic") + color_name = extruder.material.getMetaDataEntry("color_name") # construct an item with only the relevant information item = { "id": extruder.getId(), @@ -195,6 +187,8 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): "material": extruder.material.getName() if extruder.material else "", "variant": extruder.variant.getName() if extruder.variant else "", # e.g. print core "stack": extruder, + "material_brand": material_brand, + "color_name": color_name } items.append(item) @@ -213,9 +207,14 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): "enabled": True, "color": "#ffffff", "index": -1, - "definition": "" + "definition": "", + "material": "", + "variant": "", + "stack": None, + "material_brand": "", + "color_name": "", } items.append(item) - - self.setItems(items) - self.modelChanged.emit() + if self._items != items: + self.setItems(items) + self.modelChanged.emit() diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index dda21f3719..3940af7ecc 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -3,8 +3,8 @@ from collections import defaultdict import threading -from typing import Any, Dict, Optional, Set, TYPE_CHECKING -from PyQt5.QtCore import pyqtProperty +from typing import Any, Dict, Optional, Set, TYPE_CHECKING, List +from PyQt5.QtCore import pyqtProperty, pyqtSlot, pyqtSignal from UM.Decorators import override from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase @@ -13,6 +13,10 @@ from UM.Settings.SettingInstance import InstanceState from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.Interfaces import PropertyEvaluationContext from UM.Logger import Logger +from UM.Resources import Resources +from UM.Platform import Platform +from UM.Util import parseBool + import cura.CuraApplication from . import Exceptions @@ -21,6 +25,7 @@ from .CuraContainerStack import CuraContainerStack if TYPE_CHECKING: from cura.Settings.ExtruderStack import ExtruderStack + ## Represents the Global or Machine stack and its related containers. # class GlobalStack(CuraContainerStack): @@ -37,17 +42,63 @@ class GlobalStack(CuraContainerStack): # Per thread we have our own resolving_settings, or strange things sometimes occur. self._resolving_settings = defaultdict(set) #type: Dict[str, Set[str]] # keys are thread names + # Since the metadatachanged is defined in container stack, we can't use it here as a notifier for pyqt + # properties. So we need to tie them together like this. + self.metaDataChanged.connect(self.configuredConnectionTypesChanged) + + extrudersChanged = pyqtSignal() + configuredConnectionTypesChanged = pyqtSignal() + ## Get the list of extruders of this stack. # # \return The extruders registered with this stack. - @pyqtProperty("QVariantMap") + @pyqtProperty("QVariantMap", notify = extrudersChanged) def extruders(self) -> Dict[str, "ExtruderStack"]: return self._extruders + @pyqtProperty("QVariantList", notify = extrudersChanged) + def extruderList(self) -> List["ExtruderStack"]: + result_tuple_list = sorted(list(self.extruders.items()), key=lambda x: int(x[0])) + result_list = [item[1] for item in result_tuple_list] + + machine_extruder_count = self.getProperty("machine_extruder_count", "value") + return result_list[:machine_extruder_count] + @classmethod def getLoadingPriority(cls) -> int: return 2 + ## The configured connection types can be used to find out if the global + # stack is configured to be connected with a printer, without having to + # know all the details as to how this is exactly done (and without + # actually setting the stack to be active). + # + # This data can then in turn also be used when the global stack is active; + # If we can't get a network connection, but it is configured to have one, + # we can display a different icon to indicate the difference. + @pyqtProperty("QVariantList", notify=configuredConnectionTypesChanged) + def configuredConnectionTypes(self) -> List[int]: + # Requesting it from the metadata actually gets them as strings (as that's what you get from serializing). + # But we do want them returned as a list of ints (so the rest of the code can directly compare) + connection_types = self.getMetaDataEntry("connection_type", "").split(",") + return [int(connection_type) for connection_type in connection_types if connection_type != ""] + + ## \sa configuredConnectionTypes + def addConfiguredConnectionType(self, connection_type: int) -> None: + configured_connection_types = self.configuredConnectionTypes + if connection_type not in configured_connection_types: + # Store the values as a string. + configured_connection_types.append(connection_type) + self.setMetaDataEntry("connection_type", ",".join([str(c_type) for c_type in configured_connection_types])) + + ## \sa configuredConnectionTypes + def removeConfiguredConnectionType(self, connection_type: int) -> None: + configured_connection_types = self.configuredConnectionTypes + if connection_type in self.configured_connection_types: + # Store the values as a string. + configured_connection_types.remove(connection_type) + self.setMetaDataEntry("connection_type", ",".join([str(c_type) for c_type in configured_connection_types])) + @classmethod def getConfigurationTypeFromSerialized(cls, serialized: str) -> Optional[str]: configuration_type = super().getConfigurationTypeFromSerialized(serialized) @@ -61,6 +112,10 @@ class GlobalStack(CuraContainerStack): name = self.variant.getName() return name + @pyqtProperty(str, constant = True) + def preferred_output_file_formats(self) -> str: + return self.getMetaDataEntry("file_formats") + ## Add an extruder to the list of extruders of this stack. # # \param extruder The extruder to add. @@ -78,6 +133,7 @@ class GlobalStack(CuraContainerStack): return self._extruders[position] = extruder + self.extrudersChanged.emit() Logger.log("i", "Extruder[%s] added to [%s] at position [%s]", extruder.id, self.id, position) ## Overridden from ContainerStack @@ -184,6 +240,40 @@ class GlobalStack(CuraContainerStack): def getHeadAndFansCoordinates(self): return self.getProperty("machine_head_with_fans_polygon", "value") + def getHasMaterials(self) -> bool: + return parseBool(self.getMetaDataEntry("has_materials", False)) + + def getHasVariants(self) -> bool: + return parseBool(self.getMetaDataEntry("has_variants", False)) + + def getHasMachineQuality(self) -> bool: + return parseBool(self.getMetaDataEntry("has_machine_quality", False)) + + ## Get default firmware file name if one is specified in the firmware + @pyqtSlot(result = str) + def getDefaultFirmwareName(self) -> str: + machine_has_heated_bed = self.getProperty("machine_heated_bed", "value") + + baudrate = 250000 + if Platform.isLinux(): + # Linux prefers a baudrate of 115200 here because older versions of + # pySerial did not support a baudrate of 250000 + baudrate = 115200 + + # If a firmware file is available, it should be specified in the definition for the printer + hex_file = self.getMetaDataEntry("firmware_file", None) + if machine_has_heated_bed: + hex_file = self.getMetaDataEntry("firmware_hbk_file", hex_file) + + if not hex_file: + Logger.log("w", "There is no firmware for machine %s.", self.getBottom().id) + return "" + + try: + return Resources.getPath(cura.CuraApplication.CuraApplication.ResourceTypes.Firmware, hex_file.format(baudrate=baudrate)) + except FileNotFoundError: + Logger.log("w", "Firmware file %s not found.", hex_file) + return "" ## private: global_stack_mime = MimeType( diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index d65bbfddd9..3416f0a321 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -1,9 +1,10 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -import collections import time -from typing import Any, Callable, List, Dict, TYPE_CHECKING, Optional, cast +import re +import unicodedata +from typing import Any, List, Dict, TYPE_CHECKING, Optional, cast from UM.ConfigurationErrorMessage import ConfigurationErrorMessage from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator @@ -20,15 +21,17 @@ from UM.Message import Message from UM.Settings.SettingFunction import SettingFunction from UM.Signal import postponeSignals, CompressTechnique -import cura.CuraApplication from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch -from cura.PrinterOutputDevice import PrinterOutputDevice +from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionType from cura.PrinterOutput.ConfigurationModel import ConfigurationModel from cura.PrinterOutput.ExtruderConfigurationModel import ExtruderConfigurationModel from cura.PrinterOutput.MaterialOutputModel import MaterialOutputModel from cura.Settings.CuraContainerRegistry import CuraContainerRegistry from cura.Settings.ExtruderManager import ExtruderManager from cura.Settings.ExtruderStack import ExtruderStack +from cura.Settings.cura_empty_instance_containers import (empty_definition_changes_container, empty_variant_container, + empty_material_container, empty_quality_container, + empty_quality_changes_container) from .CuraStackBuilder import CuraStackBuilder @@ -36,6 +39,7 @@ from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") if TYPE_CHECKING: + from cura.CuraApplication import CuraApplication from cura.Settings.CuraContainerStack import CuraContainerStack from cura.Settings.GlobalStack import GlobalStack from cura.Machines.MaterialManager import MaterialManager @@ -47,7 +51,7 @@ if TYPE_CHECKING: class MachineManager(QObject): - def __init__(self, parent: QObject = None) -> None: + def __init__(self, application: "CuraApplication", parent: Optional["QObject"] = None) -> None: super().__init__(parent) self._active_container_stack = None # type: Optional[ExtruderStack] @@ -59,18 +63,17 @@ class MachineManager(QObject): self._default_extruder_position = "0" # to be updated when extruders are switched on and off - self.machine_extruder_material_update_dict = collections.defaultdict(list) #type: Dict[str, List[Callable[[], None]]] - - self._instance_container_timer = QTimer() #type: QTimer + self._instance_container_timer = QTimer() # type: QTimer self._instance_container_timer.setInterval(250) self._instance_container_timer.setSingleShot(True) self._instance_container_timer.timeout.connect(self.__emitChangedSignals) - self._application = cura.CuraApplication.CuraApplication.getInstance() #type: cura.CuraApplication.CuraApplication + self._application = application + self._container_registry = self._application.getContainerRegistry() self._application.globalContainerStackChanged.connect(self._onGlobalContainerChanged) - self._application.getContainerRegistry().containerLoadComplete.connect(self._onContainersChanged) + self._container_registry.containerLoadComplete.connect(self._onContainersChanged) - ## When the global container is changed, active material probably needs to be updated. + # When the global container is changed, active material probably needs to be updated. self.globalContainerChanged.connect(self.activeMaterialChanged) self.globalContainerChanged.connect(self.activeVariantChanged) self.globalContainerChanged.connect(self.activeQualityChanged) @@ -80,21 +83,16 @@ class MachineManager(QObject): self._stacks_have_errors = None # type: Optional[bool] - self._empty_container = CuraContainerRegistry.getInstance().getEmptyInstanceContainer() #type: InstanceContainer - self._empty_definition_changes_container = CuraContainerRegistry.getInstance().findContainers(id = "empty_definition_changes")[0] #type: InstanceContainer - self._empty_variant_container = CuraContainerRegistry.getInstance().findContainers(id = "empty_variant")[0] #type: InstanceContainer - self._empty_material_container = CuraContainerRegistry.getInstance().findContainers(id = "empty_material")[0] #type: InstanceContainer - self._empty_quality_container = CuraContainerRegistry.getInstance().findContainers(id = "empty_quality")[0] #type: InstanceContainer - self._empty_quality_changes_container = CuraContainerRegistry.getInstance().findContainers(id = "empty_quality_changes")[0] #type: InstanceContainer - self._onGlobalContainerChanged() - ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderStackChanged) + extruder_manager = self._application.getExtruderManager() + + extruder_manager.activeExtruderChanged.connect(self._onActiveExtruderStackChanged) self._onActiveExtruderStackChanged() - ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeMaterialChanged) - ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeVariantChanged) - ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeQualityChanged) + extruder_manager.activeExtruderChanged.connect(self.activeMaterialChanged) + extruder_manager.activeExtruderChanged.connect(self.activeVariantChanged) + extruder_manager.activeExtruderChanged.connect(self.activeQualityChanged) self.globalContainerChanged.connect(self.activeStackChanged) self.globalValueChanged.connect(self.activeStackValueChanged) @@ -116,17 +114,13 @@ class MachineManager(QObject): self._application.callLater(self.setInitialActiveMachine) - self._material_incompatible_message = Message(catalog.i18nc("@info:status", - "The selected material is incompatible with the selected machine or configuration."), - title = catalog.i18nc("@info:title", "Incompatible Material")) #type: Message - - containers = CuraContainerRegistry.getInstance().findInstanceContainers(id = self.activeMaterialId) #type: List[InstanceContainer] + containers = CuraContainerRegistry.getInstance().findInstanceContainers(id = self.activeMaterialId) # type: List[InstanceContainer] if containers: containers[0].nameChanged.connect(self._onMaterialNameChanged) - self._material_manager = self._application.getMaterialManager() #type: MaterialManager - self._variant_manager = self._application.getVariantManager() #type: VariantManager - self._quality_manager = self._application.getQualityManager() #type: QualityManager + self._material_manager = self._application.getMaterialManager() # type: MaterialManager + self._variant_manager = self._application.getVariantManager() # type: VariantManager + self._quality_manager = self._application.getQualityManager() # type: QualityManager # When the materials lookup table gets updated, it can mean that a material has its name changed, which should # be reflected on the GUI. This signal emission makes sure that it happens. @@ -159,7 +153,7 @@ class MachineManager(QObject): blurSettings = pyqtSignal() # Emitted to force fields in the advanced sidebar to un-focus, so they update properly outputDevicesChanged = pyqtSignal() - currentConfigurationChanged = pyqtSignal() # Emitted every time the current configurations of the machine changes + currentConfigurationChanged = pyqtSignal() # Emitted every time the current configurations of the machine changes printerConnectedStatusChanged = pyqtSignal() # Emitted every time the active machine change or the outputdevices change rootMaterialChanged = pyqtSignal() @@ -177,6 +171,7 @@ class MachineManager(QObject): self._printer_output_devices.append(printer_output_device) self.outputDevicesChanged.emit() + self.printerConnectedStatusChanged.emit() @pyqtProperty(QObject, notify = currentConfigurationChanged) def currentConfiguration(self) -> ConfigurationModel: @@ -192,19 +187,21 @@ class MachineManager(QObject): for extruder in self._global_container_stack.extruders.values(): extruder_configuration = ExtruderConfigurationModel() # For compare just the GUID is needed at this moment - mat_type = extruder.material.getMetaDataEntry("material") if extruder.material != self._empty_material_container else None - mat_guid = extruder.material.getMetaDataEntry("GUID") if extruder.material != self._empty_material_container else None - mat_color = extruder.material.getMetaDataEntry("color_name") if extruder.material != self._empty_material_container else None - mat_brand = extruder.material.getMetaDataEntry("brand") if extruder.material != self._empty_material_container else None - mat_name = extruder.material.getMetaDataEntry("name") if extruder.material != self._empty_material_container else None + mat_type = extruder.material.getMetaDataEntry("material") if extruder.material != empty_material_container else None + mat_guid = extruder.material.getMetaDataEntry("GUID") if extruder.material != empty_material_container else None + mat_color = extruder.material.getMetaDataEntry("color_name") if extruder.material != empty_material_container else None + mat_brand = extruder.material.getMetaDataEntry("brand") if extruder.material != empty_material_container else None + mat_name = extruder.material.getMetaDataEntry("name") if extruder.material != empty_material_container else None material_model = MaterialOutputModel(mat_guid, mat_type, mat_color, mat_brand, mat_name) extruder_configuration.position = int(extruder.getMetaDataEntry("position")) extruder_configuration.material = material_model - extruder_configuration.hotendID = extruder.variant.getName() if extruder.variant != self._empty_variant_container else None + extruder_configuration.hotendID = extruder.variant.getName() if extruder.variant != empty_variant_container else None self._current_printer_configuration.extruderConfigurations.append(extruder_configuration) - self._current_printer_configuration.buildplateConfiguration = self._global_container_stack.getProperty("machine_buildplate_type", "value") if self._global_container_stack.variant != self._empty_variant_container else None + # An empty build plate configuration from the network printer is presented as an empty string, so use "" for an + # empty build plate. + self._current_printer_configuration.buildplateConfiguration = self._global_container_stack.getProperty("machine_buildplate_type", "value") if self._global_container_stack.variant != empty_variant_container else "" self.currentConfigurationChanged.emit() @pyqtSlot(QObject, result = bool) @@ -248,7 +245,7 @@ class MachineManager(QObject): self.updateNumberExtrudersEnabled() self.globalContainerChanged.emit() - # after switching the global stack we reconnect all the signals and set the variant and material references + # After switching the global stack we reconnect all the signals and set the variant and material references if self._global_container_stack: self._application.getPreferences().setValue("cura/active_machine", self._global_container_stack.getId()) @@ -258,44 +255,33 @@ class MachineManager(QObject): # Global stack can have only a variant if it is a buildplate global_variant = self._global_container_stack.variant - if global_variant != self._empty_variant_container: + if global_variant != empty_variant_container: if global_variant.getMetaDataEntry("hardware_type") != "buildplate": - self._global_container_stack.setVariant(self._empty_variant_container) + self._global_container_stack.setVariant(empty_variant_container) - # set the global material to empty as we now use the extruder stack at all times - CURA-4482 + # Set the global material to empty as we now use the extruder stack at all times - CURA-4482 global_material = self._global_container_stack.material - if global_material != self._empty_material_container: - self._global_container_stack.setMaterial(self._empty_material_container) + if global_material != empty_material_container: + self._global_container_stack.setMaterial(empty_material_container) # Listen for changes on all extruder stacks for extruder_stack in ExtruderManager.getInstance().getActiveExtruderStacks(): extruder_stack.propertyChanged.connect(self._onPropertyChanged) extruder_stack.containersChanged.connect(self._onContainersChanged) - if self._global_container_stack.getId() in self.machine_extruder_material_update_dict: - for func in self.machine_extruder_material_update_dict[self._global_container_stack.getId()]: - self._application.callLater(func) - del self.machine_extruder_material_update_dict[self._global_container_stack.getId()] - self.activeQualityGroupChanged.emit() def _onActiveExtruderStackChanged(self) -> None: self.blurSettings.emit() # Ensure no-one has focus. - old_active_container_stack = self._active_container_stack - self._active_container_stack = ExtruderManager.getInstance().getActiveExtruderStack() - if old_active_container_stack != self._active_container_stack: - # Many methods and properties related to the active quality actually depend - # on _active_container_stack. If it changes, then the properties change. - self.activeQualityChanged.emit() - def __emitChangedSignals(self) -> None: self.activeQualityChanged.emit() self.activeVariantChanged.emit() self.activeMaterialChanged.emit() self.rootMaterialChanged.emit() + self.numberExtrudersEnabledChanged.emit() def _onContainersChanged(self, container: ContainerInterface) -> None: self._instance_container_timer.start() @@ -367,15 +353,21 @@ class MachineManager(QObject): return global_stack = containers[0] + + # Make sure that the default machine actions for this machine have been added + self._application.getMachineActionManager().addDefaultMachineActions(global_stack) + + ExtruderManager.getInstance()._fixSingleExtrusionMachineExtruderDefinition(global_stack) if not global_stack.isValid(): # Mark global stack as invalid ConfigurationErrorMessage.getInstance().addFaultyContainers(global_stack.getId()) return # We're done here ExtruderManager.getInstance().setActiveExtruderIndex(0) # Switch to first extruder + self._global_container_stack = global_stack self._application.setGlobalContainerStack(global_stack) ExtruderManager.getInstance()._globalContainerStackChanged() - self._initMachineState(containers[0]) + self._initMachineState(global_stack) self._onGlobalContainerChanged() self.__emitChangedSignals() @@ -385,7 +377,9 @@ class MachineManager(QObject): # \param definition_id \type{str} definition id that needs to look for # \param metadata_filter \type{dict} list of metadata keys and values used for filtering @staticmethod - def getMachine(definition_id: str, metadata_filter: Dict[str, str] = None) -> Optional["GlobalStack"]: + def getMachine(definition_id: str, metadata_filter: Optional[Dict[str, str]] = None) -> Optional["GlobalStack"]: + if metadata_filter is None: + metadata_filter = {} machines = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine", **metadata_filter) for machine in machines: if machine.definition.getId() == definition_id: @@ -412,8 +406,8 @@ class MachineManager(QObject): # Not a very pretty solution, but the extruder manager doesn't really know how many extruders there are machine_extruder_count = self._global_container_stack.getProperty("machine_extruder_count", "value") - extruder_stacks = ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()) - count = 1 # we start with the global stack + extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() + count = 1 # We start with the global stack for stack in extruder_stacks: md = stack.getMetaData() if "position" in md and int(md["position"]) >= machine_extruder_count: @@ -432,12 +426,12 @@ class MachineManager(QObject): if not self._global_container_stack: return False - if self._global_container_stack.getTop().findInstances(): + if self._global_container_stack.getTop().getNumInstances() != 0: return True - stacks = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())) + stacks = ExtruderManager.getInstance().getActiveExtruderStacks() for stack in stacks: - if stack.getTop().findInstances(): + if stack.getTop().getNumInstances() != 0: return True return False @@ -447,10 +441,10 @@ class MachineManager(QObject): if not self._global_container_stack: return 0 num_user_settings = 0 - num_user_settings += len(self._global_container_stack.getTop().findInstances()) - stacks = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())) + num_user_settings += self._global_container_stack.getTop().getNumInstances() + stacks = self._global_container_stack.extruderList for stack in stacks: - num_user_settings += len(stack.getTop().findInstances()) + num_user_settings += stack.getTop().getNumInstances() return num_user_settings ## Delete a user setting from the global stack and all extruder stacks. @@ -473,7 +467,7 @@ class MachineManager(QObject): stack = ExtruderManager.getInstance().getActiveExtruderStack() stacks = [stack] else: - stacks = ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()) + stacks = ExtruderManager.getInstance().getActiveExtruderStacks() for stack in stacks: if stack is not None: @@ -500,7 +494,7 @@ class MachineManager(QObject): @pyqtProperty(str, notify = globalContainerChanged) def activeMachineName(self) -> str: if self._global_container_stack: - return self._global_container_stack.getName() + return self._global_container_stack.getMetaDataEntry("group_name", self._global_container_stack.getName()) return "" @pyqtProperty(str, notify = globalContainerChanged) @@ -509,11 +503,57 @@ class MachineManager(QObject): return self._global_container_stack.getId() return "" + @pyqtProperty(str, notify = globalContainerChanged) + def activeMachineFirmwareVersion(self) -> str: + if not self._printer_output_devices: + return "" + return self._printer_output_devices[0].firmwareVersion + + @pyqtProperty(str, notify = globalContainerChanged) + def activeMachineAddress(self) -> str: + if not self._printer_output_devices: + return "" + return self._printer_output_devices[0].address + @pyqtProperty(bool, notify = printerConnectedStatusChanged) - def printerConnected(self): + def printerConnected(self) -> bool: return bool(self._printer_output_devices) - @pyqtProperty(str, notify = printerConnectedStatusChanged) + @pyqtProperty(bool, notify = printerConnectedStatusChanged) + def activeMachineHasRemoteConnection(self) -> bool: + if self._global_container_stack: + has_remote_connection = False + + for connection_type in self._global_container_stack.configuredConnectionTypes: + has_remote_connection |= connection_type in [ConnectionType.NetworkConnection.value, + ConnectionType.CloudConnection.value] + return has_remote_connection + return False + + @pyqtProperty("QVariantList", notify=globalContainerChanged) + def activeMachineConfiguredConnectionTypes(self): + if self._global_container_stack: + return self._global_container_stack.configuredConnectionTypes + return [] + + @pyqtProperty(bool, notify = printerConnectedStatusChanged) + def activeMachineIsGroup(self) -> bool: + return bool(self._printer_output_devices) and len(self._printer_output_devices[0].printers) > 1 + + @pyqtProperty(bool, notify = printerConnectedStatusChanged) + def activeMachineHasNetworkConnection(self) -> bool: + # A network connection is only available if any output device is actually a network connected device. + return any(d.connectionType == ConnectionType.NetworkConnection for d in self._printer_output_devices) + + @pyqtProperty(bool, notify = printerConnectedStatusChanged) + def activeMachineHasCloudConnection(self) -> bool: + # A cloud connection is only available if any output device actually is a cloud connected device. + return any(d.connectionType == ConnectionType.CloudConnection for d in self._printer_output_devices) + + @pyqtProperty(bool, notify = printerConnectedStatusChanged) + def activeMachineIsUsingCloudConnection(self) -> bool: + return self.activeMachineHasCloudConnection and not self.activeMachineHasNetworkConnection + def activeMachineNetworkKey(self) -> str: if self._global_container_stack: return self._global_container_stack.getMetaDataEntry("um_network_key", "") @@ -522,7 +562,7 @@ class MachineManager(QObject): @pyqtProperty(str, notify = printerConnectedStatusChanged) def activeMachineNetworkGroupName(self) -> str: if self._global_container_stack: - return self._global_container_stack.getMetaDataEntry("connect_group_name", "") + return self._global_container_stack.getMetaDataEntry("group_name", "") return "" @pyqtProperty(QObject, notify = globalContainerChanged) @@ -590,7 +630,7 @@ class MachineManager(QObject): def globalVariantName(self) -> str: if self._global_container_stack: variant = self._global_container_stack.variant - if variant and not isinstance(variant, type(self._empty_variant_container)): + if variant and not isinstance(variant, type(empty_variant_container)): return variant.getName() return "" @@ -610,6 +650,14 @@ class MachineManager(QObject): is_supported = self._current_quality_group.is_available return is_supported + @pyqtProperty(bool, notify = activeQualityGroupChanged) + def isActiveQualityExperimental(self) -> bool: + is_experimental = False + if self._global_container_stack: + if self._current_quality_group: + is_experimental = self._current_quality_group.is_experimental + return is_experimental + ## Returns whether there is anything unsupported in the current set-up. # # The current set-up signifies the global stack and all extruder stacks, @@ -638,9 +686,9 @@ class MachineManager(QObject): if self._active_container_stack is None or self._global_container_stack is None: return new_value = self._active_container_stack.getProperty(key, "value") - extruder_stacks = [stack for stack in ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())] + extruder_stacks = [stack for stack in ExtruderManager.getInstance().getActiveExtruderStacks()] - # check in which stack the value has to be replaced + # Check in which stack the value has to be replaced for extruder_stack in extruder_stacks: if extruder_stack != self._active_container_stack and extruder_stack.getProperty(key, "value") != new_value: extruder_stack.userChanges.setProperty(key, "value", new_value) # TODO: nested property access, should be improved @@ -656,7 +704,7 @@ class MachineManager(QObject): for key in self._active_container_stack.userChanges.getAllKeys(): new_value = self._active_container_stack.getProperty(key, "value") - # check if the value has to be replaced + # Check if the value has to be replaced extruder_stack.userChanges.setProperty(key, "value", new_value) @pyqtProperty(str, notify = activeVariantChanged) @@ -725,7 +773,7 @@ class MachineManager(QObject): # If the machine that is being removed is the currently active machine, set another machine as the active machine. activate_new_machine = (self._global_container_stack and self._global_container_stack.getId() == machine_id) - # activate a new machine before removing a machine because this is safer + # Activate a new machine before removing a machine because this is safer if activate_new_machine: machine_stacks = CuraContainerRegistry.getInstance().findContainerStacksMetadata(type = "machine") other_machine_stacks = [s for s in machine_stacks if s["id"] != machine_id] @@ -733,7 +781,7 @@ class MachineManager(QObject): self.setActiveMachine(other_machine_stacks[0]["id"]) metadata = CuraContainerRegistry.getInstance().findContainerStacksMetadata(id = machine_id)[0] - network_key = metadata["um_network_key"] if "um_network_key" in metadata else None + network_key = metadata.get("um_network_key", None) ExtruderManager.getInstance().removeMachineExtruders(machine_id) containers = CuraContainerRegistry.getInstance().findInstanceContainersMetadata(type = "user", machine = machine_id) for container in containers: @@ -778,7 +826,7 @@ class MachineManager(QObject): if not stack.isEnabled: continue material_container = stack.material - if material_container == self._empty_material_container: + if material_container == empty_material_container: continue if material_container.getMetaDataEntry("buildplate_compatible"): buildplate_compatible = buildplate_compatible and material_container.getMetaDataEntry("buildplate_compatible")[self.activeVariantBuildplateName] @@ -800,7 +848,7 @@ class MachineManager(QObject): extruder_stacks = self._global_container_stack.extruders.values() for stack in extruder_stacks: material_container = stack.material - if material_container == self._empty_material_container: + if material_container == empty_material_container: continue buildplate_compatible = material_container.getMetaDataEntry("buildplate_compatible")[self.activeVariantBuildplateName] if material_container.getMetaDataEntry("buildplate_compatible") else True buildplate_usable = material_container.getMetaDataEntry("buildplate_recommended")[self.activeVariantBuildplateName] if material_container.getMetaDataEntry("buildplate_recommended") else True @@ -858,7 +906,7 @@ class MachineManager(QObject): caution_message = Message(catalog.i18nc( "@info:generic", "Settings have been changed to match the current availability of extruders: [%s]" % ", ".join(add_user_changes)), - lifetime=0, + lifetime = 0, title = catalog.i18nc("@info:title", "Settings updated")) caution_message.show() @@ -870,7 +918,7 @@ class MachineManager(QObject): extruder_manager = self._application.getExtruderManager() definition_changes_container = self._global_container_stack.definitionChanges - if not self._global_container_stack or definition_changes_container == self._empty_definition_changes_container: + if not self._global_container_stack or definition_changes_container == empty_definition_changes_container: return previous_extruder_count = self._global_container_stack.getProperty("machine_extruder_count", "value") @@ -890,7 +938,11 @@ class MachineManager(QObject): extruder_nr = node.callDecoration("getActiveExtruderPosition") if extruder_nr is not None and int(extruder_nr) > extruder_count - 1: - node.callDecoration("setActiveExtruder", extruder_manager.getExtruderStack(extruder_count - 1).getId()) + extruder = extruder_manager.getExtruderStack(extruder_count - 1) + if extruder is not None: + node.callDecoration("setActiveExtruder", extruder.getId()) + else: + Logger.log("w", "Could not find extruder to set active.") # Make sure one of the extruder stacks is active extruder_manager.setActiveExtruderIndex(0) @@ -899,21 +951,18 @@ class MachineManager(QObject): # After CURA-4482 this should not be the case anymore, but we still want to support older project files. global_user_container = self._global_container_stack.userChanges - # Make sure extruder_stacks exists - extruder_stacks = [] #type: List[ExtruderStack] - - if previous_extruder_count == 1: - extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() - global_user_container = self._global_container_stack.userChanges - for setting_instance in global_user_container.findInstances(): setting_key = setting_instance.definition.key settable_per_extruder = self._global_container_stack.getProperty(setting_key, "settable_per_extruder") if settable_per_extruder: limit_to_extruder = int(self._global_container_stack.getProperty(setting_key, "limit_to_extruder")) - extruder_stack = extruder_stacks[max(0, limit_to_extruder)] - extruder_stack.userChanges.setProperty(setting_key, "value", global_user_container.getProperty(setting_key, "value")) + extruder_position = max(0, limit_to_extruder) + extruder_stack = self.getExtruder(extruder_position) + if extruder_stack: + extruder_stack.userChanges.setProperty(setting_key, "value", global_user_container.getProperty(setting_key, "value")) + else: + Logger.log("e", "Unable to find extruder on position %s", extruder_position) global_user_container.removeInstance(setting_key) # Signal that the global stack has changed @@ -922,10 +971,9 @@ class MachineManager(QObject): @pyqtSlot(int, result = QObject) def getExtruder(self, position: int) -> Optional[ExtruderStack]: - extruder = None if self._global_container_stack: - extruder = self._global_container_stack.extruders.get(str(position)) - return extruder + return self._global_container_stack.extruders.get(str(position)) + return None def updateDefaultExtruder(self) -> None: if self._global_container_stack is None: @@ -991,12 +1039,12 @@ class MachineManager(QObject): if not enabled and position == ExtruderManager.getInstance().activeExtruderIndex: ExtruderManager.getInstance().setActiveExtruderIndex(int(self._default_extruder_position)) - # ensure that the quality profile is compatible with current combination, or choose a compatible one if available + # Ensure that the quality profile is compatible with current combination, or choose a compatible one if available self._updateQualityWithMaterial() self.extruderChanged.emit() - # update material compatibility color + # Update material compatibility color self.activeQualityGroupChanged.emit() - # update items in SettingExtruder + # Update items in SettingExtruder ExtruderManager.getInstance().extrudersChanged.emit(self._global_container_stack.getId()) # Make sure the front end reflects changes self.forceUpdateAllSettings() @@ -1065,12 +1113,11 @@ class MachineManager(QObject): for stack in active_stacks: variant_container = stack.variant position = stack.getMetaDataEntry("position") - if variant_container and variant_container != self._empty_variant_container: + if variant_container and variant_container != empty_variant_container: result[position] = variant_container.getName() return result - # # Sets all quality and quality_changes containers to empty_quality and empty_quality_changes containers # for all stacks in the currently active machine. # @@ -1079,11 +1126,11 @@ class MachineManager(QObject): return self._current_quality_group = None self._current_quality_changes_group = None - self._global_container_stack.quality = self._empty_quality_container - self._global_container_stack.qualityChanges = self._empty_quality_changes_container + self._global_container_stack.quality = empty_quality_container + self._global_container_stack.qualityChanges = empty_quality_changes_container for extruder in self._global_container_stack.extruders.values(): - extruder.quality = self._empty_quality_container - extruder.qualityChanges = self._empty_quality_changes_container + extruder.quality = empty_quality_container + extruder.qualityChanges = empty_quality_changes_container self.activeQualityGroupChanged.emit() self.activeQualityChangesGroupChanged.emit() @@ -1108,13 +1155,13 @@ class MachineManager(QObject): # Set quality and quality_changes for the GlobalStack self._global_container_stack.quality = quality_group.node_for_global.getContainer() if empty_quality_changes: - self._global_container_stack.qualityChanges = self._empty_quality_changes_container + self._global_container_stack.qualityChanges = empty_quality_changes_container # Set quality and quality_changes for each ExtruderStack for position, node in quality_group.nodes_for_extruders.items(): self._global_container_stack.extruders[str(position)].quality = node.getContainer() if empty_quality_changes: - self._global_container_stack.extruders[str(position)].qualityChanges = self._empty_quality_changes_container + self._global_container_stack.extruders[str(position)].qualityChanges = empty_quality_changes_container self.activeQualityGroupChanged.emit() self.activeQualityChangesGroupChanged.emit() @@ -1129,7 +1176,7 @@ class MachineManager(QObject): def _setQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup") -> None: if self._global_container_stack is None: - return #Can't change that. + return # Can't change that. quality_type = quality_changes_group.quality_type # A custom quality can be created based on "not supported". # In that case, do not set quality containers to empty. @@ -1140,8 +1187,8 @@ class MachineManager(QObject): if quality_group is None: self._fixQualityChangesGroupToNotSupported(quality_changes_group) - quality_changes_container = self._empty_quality_changes_container - quality_container = self._empty_quality_container + quality_changes_container = empty_quality_changes_container + quality_container = empty_quality_container # type: Optional[InstanceContainer] if quality_changes_group.node_for_global and quality_changes_group.node_for_global.getContainer(): quality_changes_container = cast(InstanceContainer, quality_changes_group.node_for_global.getContainer()) if quality_group is not None and quality_group.node_for_global and quality_group.node_for_global.getContainer(): @@ -1156,8 +1203,8 @@ class MachineManager(QObject): if quality_group is not None: quality_node = quality_group.nodes_for_extruders.get(position) - quality_changes_container = self._empty_quality_changes_container - quality_container = self._empty_quality_container + quality_changes_container = empty_quality_changes_container + quality_container = empty_quality_container if quality_changes_node and quality_changes_node.getContainer(): quality_changes_container = cast(InstanceContainer, quality_changes_node.getContainer()) if quality_node and quality_node.getContainer(): @@ -1191,7 +1238,7 @@ class MachineManager(QObject): self._global_container_stack.extruders[position].material = container_node.getContainer() root_material_id = container_node.getMetaDataEntry("base_file", None) else: - self._global_container_stack.extruders[position].material = self._empty_material_container + self._global_container_stack.extruders[position].material = empty_material_container root_material_id = None # The _current_root_material_id is used in the MaterialMenu to see which material is selected if root_material_id != self._current_root_material_id[position]: @@ -1199,7 +1246,7 @@ class MachineManager(QObject): self.rootMaterialChanged.emit() def activeMaterialsCompatible(self) -> bool: - # check material - variant compatibility + # Check material - variant compatibility if self._global_container_stack is not None: if Util.parseBool(self._global_container_stack.getMetaDataEntry("has_materials", False)): for position, extruder in self._global_container_stack.extruders.items(): @@ -1266,14 +1313,10 @@ class MachineManager(QObject): current_material_base_name = extruder.material.getMetaDataEntry("base_file") current_nozzle_name = None - if extruder.variant.getId() != self._empty_variant_container.getId(): + if extruder.variant.getId() != empty_variant_container.getId(): current_nozzle_name = extruder.variant.getMetaDataEntry("name") - from UM.Settings.Interfaces import PropertyEvaluationContext - from cura.Settings.CuraContainerStack import _ContainerIndexes - context = PropertyEvaluationContext(extruder) - context.context["evaluate_from_container_index"] = _ContainerIndexes.DefinitionChanges - material_diameter = extruder.getProperty("material_diameter", "value", context) + material_diameter = extruder.getCompatibleMaterialDiameter() candidate_materials = self._material_manager.getAvailableMaterials( self._global_container_stack.definition, current_nozzle_name, @@ -1304,17 +1347,18 @@ class MachineManager(QObject): # Get the definition id corresponding to this machine name machine_definition_id = CuraContainerRegistry.getInstance().findDefinitionContainers(name = machine_name)[0].getId() # Try to find a machine with the same network key - new_machine = self.getMachine(machine_definition_id, metadata_filter = {"um_network_key": self.activeMachineNetworkKey}) + new_machine = self.getMachine(machine_definition_id, metadata_filter = {"um_network_key": self.activeMachineNetworkKey()}) # If there is no machine, then create a new one and set it to the non-hidden instance if not new_machine: new_machine = CuraStackBuilder.createMachine(machine_definition_id + "_sync", machine_definition_id) if not new_machine: return - new_machine.setMetaDataEntry("um_network_key", self.activeMachineNetworkKey) - new_machine.setMetaDataEntry("connect_group_name", self.activeMachineNetworkGroupName) + new_machine.setMetaDataEntry("um_network_key", self.activeMachineNetworkKey()) + new_machine.setMetaDataEntry("group_name", self.activeMachineNetworkGroupName) new_machine.setMetaDataEntry("hidden", False) + new_machine.setMetaDataEntry("connection_type", self._global_container_stack.getMetaDataEntry("connection_type")) else: - Logger.log("i", "Found a %s with the key %s. Let's use it!", machine_name, self.activeMachineNetworkKey) + Logger.log("i", "Found a %s with the key %s. Let's use it!", machine_name, self.activeMachineNetworkKey()) new_machine.setMetaDataEntry("hidden", False) # Set the current printer instance to hidden (the metadata entry must exist) @@ -1329,36 +1373,83 @@ class MachineManager(QObject): self.blurSettings.emit() with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): self.switchPrinterType(configuration.printerType) + + disabled_used_extruder_position_set = set() + extruders_to_disable = set() + + # If an extruder that's currently used to print a model gets disabled due to the syncing, we need to show + # a message explaining why. + need_to_show_message = False + + for extruder_configuration in configuration.extruderConfigurations: + extruder_has_hotend = extruder_configuration.hotendID != "" + extruder_has_material = extruder_configuration.material.guid != "" + + # If the machine doesn't have a hotend or material, disable this extruder + if not extruder_has_hotend or not extruder_has_material: + extruders_to_disable.add(extruder_configuration.position) + + # If there's no material and/or nozzle on the printer, enable the first extruder and disable the rest. + if len(extruders_to_disable) == len(self._global_container_stack.extruders): + extruders_to_disable.remove(min(extruders_to_disable)) + for extruder_configuration in configuration.extruderConfigurations: position = str(extruder_configuration.position) - variant_container_node = self._variant_manager.getVariantNode(self._global_container_stack.definition.getId(), extruder_configuration.hotendID) - material_container_node = self._material_manager.getMaterialNodeByType(self._global_container_stack, - position, - extruder_configuration.hotendID, - configuration.buildplateConfiguration, - extruder_configuration.material.guid) - if variant_container_node: - self._setVariantNode(position, variant_container_node) - else: - self._global_container_stack.extruders[position].variant = self._empty_variant_container + # If the machine doesn't have a hotend or material, disable this extruder + if int(position) in extruders_to_disable: + self._global_container_stack.extruders[position].setEnabled(False) + + need_to_show_message = True + disabled_used_extruder_position_set.add(int(position)) - if material_container_node: - self._setMaterial(position, material_container_node) else: - self._global_container_stack.extruders[position].material = self._empty_material_container - self.updateMaterialWithVariant(position) + variant_container_node = self._variant_manager.getVariantNode(self._global_container_stack.definition.getId(), + extruder_configuration.hotendID) + material_container_node = self._material_manager.getMaterialNodeByType(self._global_container_stack, + position, + extruder_configuration.hotendID, + configuration.buildplateConfiguration, + extruder_configuration.material.guid) + if variant_container_node: + self._setVariantNode(position, variant_container_node) + else: + self._global_container_stack.extruders[position].variant = empty_variant_container + + if material_container_node: + self._setMaterial(position, material_container_node) + else: + self._global_container_stack.extruders[position].material = empty_material_container + self._global_container_stack.extruders[position].setEnabled(True) + self.updateMaterialWithVariant(position) + + self.updateNumberExtrudersEnabled() if configuration.buildplateConfiguration is not None: global_variant_container_node = self._variant_manager.getBuildplateVariantNode(self._global_container_stack.definition.getId(), configuration.buildplateConfiguration) if global_variant_container_node: self._setGlobalVariant(global_variant_container_node) else: - self._global_container_stack.variant = self._empty_variant_container + self._global_container_stack.variant = empty_variant_container else: - self._global_container_stack.variant = self._empty_variant_container + self._global_container_stack.variant = empty_variant_container self._updateQualityWithMaterial() + if need_to_show_message: + msg_str = "{extruders} is disabled because there is no material loaded. Please load a material or use custom configurations." + + # Show human-readable extruder names such as "Extruder Left", "Extruder Front" instead of "Extruder 1, 2, 3". + extruder_names = [] + for extruder_position in sorted(disabled_used_extruder_position_set): + extruder_stack = self._global_container_stack.extruders[str(extruder_position)] + extruder_name = extruder_stack.definition.getName() + extruder_names.append(extruder_name) + extruders_str = ", ".join(extruder_names) + msg_str = msg_str.format(extruders = extruders_str) + message = Message(catalog.i18nc("@info:status", msg_str), + title = catalog.i18nc("@info:title", "Extruder(s) Disabled")) + message.show() + # See if we need to show the Discard or Keep changes screen if self.hasUserSettings and self._application.getPreferences().getValue("cura/active_mode") == 1: self._application.discardOrKeepProfileChanges() @@ -1374,13 +1465,13 @@ class MachineManager(QObject): # After updating from 3.2 to 3.3 some group names may be temporary. If there is a mismatch in the name of the group # then all the container stacks are updated, both the current and the hidden ones. def checkCorrectGroupName(self, device_id: str, group_name: str) -> None: - if self._global_container_stack and device_id == self.activeMachineNetworkKey: - # Check if the connect_group_name is correct. If not, update all the containers connected to the same printer + if self._global_container_stack and device_id == self.activeMachineNetworkKey(): + # Check if the group_name is correct. If not, update all the containers connected to the same printer if self.activeMachineNetworkGroupName != group_name: - metadata_filter = {"um_network_key": self.activeMachineNetworkKey} + metadata_filter = {"um_network_key": self.activeMachineNetworkKey()} containers = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine", **metadata_filter) for container in containers: - container.setMetaDataEntry("connect_group_name", group_name) + container.setMetaDataEntry("group_name", group_name) ## This method checks if there is an instance connected to the given network_key def existNetworkInstances(self, network_key: str) -> bool: @@ -1408,12 +1499,12 @@ class MachineManager(QObject): position = str(position) extruder_stack = self._global_container_stack.extruders[position] nozzle_name = extruder_stack.variant.getName() - material_diameter = extruder_stack.approximateMaterialDiameter + material_diameter = extruder_stack.getApproximateMaterialDiameter() material_node = self._material_manager.getMaterialNode(machine_definition_id, nozzle_name, buildplate_name, material_diameter, root_material_id) self.setMaterial(position, material_node) - ## global_stack: if you want to provide your own global_stack instead of the current active one + ## Global_stack: if you want to provide your own global_stack instead of the current active one # if you update an active machine, special measures have to be taken. @pyqtSlot(str, "QVariant") def setMaterial(self, position: str, container_node, global_stack: Optional["GlobalStack"] = None) -> None: @@ -1474,7 +1565,7 @@ class MachineManager(QObject): # This is not changing the quality for the active machine !!!!!!!! global_stack.quality = quality_group.node_for_global.getContainer() for extruder_nr, extruder_stack in global_stack.extruders.items(): - quality_container = self._empty_quality_container + quality_container = empty_quality_container if extruder_nr in quality_group.nodes_for_extruders: container = quality_group.nodes_for_extruders[extruder_nr].getContainer() quality_container = container if container is not None else quality_container @@ -1516,18 +1607,45 @@ class MachineManager(QObject): def activeQualityChangesGroup(self) -> Optional["QualityChangesGroup"]: return self._current_quality_changes_group + @pyqtProperty(bool, notify = activeQualityChangesGroupChanged) + def hasCustomQuality(self) -> bool: + return self._current_quality_changes_group is not None + @pyqtProperty(str, notify = activeQualityGroupChanged) def activeQualityOrQualityChangesName(self) -> str: - name = self._empty_quality_container.getName() + name = empty_quality_container.getName() if self._current_quality_changes_group: name = self._current_quality_changes_group.name elif self._current_quality_group: name = self._current_quality_group.name return name + @pyqtProperty(bool, notify = activeQualityGroupChanged) + def hasNotSupportedQuality(self) -> bool: + return self._current_quality_group is None and self._current_quality_changes_group is None + def _updateUponMaterialMetadataChange(self) -> None: if self._global_container_stack is None: return with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): self.updateMaterialWithVariant(None) self._updateQualityWithMaterial() + + ## This function will translate any printer type name to an abbreviated printer type name + @pyqtSlot(str, result = str) + def getAbbreviatedMachineName(self, machine_type_name: str) -> str: + abbr_machine = "" + for word in re.findall(r"[\w']+", machine_type_name): + if word.lower() == "ultimaker": + abbr_machine += "UM" + elif word.isdigit(): + abbr_machine += word + else: + stripped_word = "".join(char for char in unicodedata.normalize("NFD", word.upper()) if unicodedata.category(char) != "Mn") + # - use only the first character if the word is too long (> 3 characters) + # - use the whole word if it's not too long (<= 3 characters) + if len(stripped_word) > 3: + stripped_word = stripped_word[0] + abbr_machine += stripped_word + + return abbr_machine diff --git a/cura/Settings/MachineNameValidator.py b/cura/Settings/MachineNameValidator.py index 19b29feac4..acdda4b0a0 100644 --- a/cura/Settings/MachineNameValidator.py +++ b/cura/Settings/MachineNameValidator.py @@ -35,10 +35,9 @@ class MachineNameValidator(QObject): ## Check if a specified machine name is allowed. # # \param name The machine name to check. - # \param position The current position of the cursor in the text box. # \return ``QValidator.Invalid`` if it's disallowed, or # ``QValidator.Acceptable`` if it's allowed. - def validate(self, name, position): + def validate(self, name): #Check for file name length of the current settings container (which is the longest file we're saving with the name). try: filename_max_length = os.statvfs(Resources.getDataStoragePath()).f_namemax @@ -54,7 +53,7 @@ class MachineNameValidator(QObject): ## Updates the validation state of a machine name text field. @pyqtSlot(str) def updateValidation(self, new_name): - is_valid = self.validate(new_name, 0) + is_valid = self.validate(new_name) if is_valid == QValidator.Acceptable: self.validation_regex = "^.*$" #Matches anything. else: diff --git a/cura/Settings/SettingInheritanceManager.py b/cura/Settings/SettingInheritanceManager.py index 9cd24558b7..12b541c3d8 100644 --- a/cura/Settings/SettingInheritanceManager.py +++ b/cura/Settings/SettingInheritanceManager.py @@ -1,6 +1,6 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import List +from typing import List, Optional, TYPE_CHECKING from PyQt5.QtCore import QObject, QTimer, pyqtProperty, pyqtSignal from UM.FlameProfiler import pyqtSlot @@ -20,13 +20,18 @@ from UM.Settings.SettingInstance import InstanceState from cura.Settings.ExtruderManager import ExtruderManager +if TYPE_CHECKING: + from cura.Settings.ExtruderStack import ExtruderStack + from UM.Settings.SettingDefinition import SettingDefinition + + class SettingInheritanceManager(QObject): - def __init__(self, parent = None): + def __init__(self, parent = None) -> None: super().__init__(parent) Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) - self._global_container_stack = None - self._settings_with_inheritance_warning = [] - self._active_container_stack = None + self._global_container_stack = None # type: Optional[ContainerStack] + self._settings_with_inheritance_warning = [] # type: List[str] + self._active_container_stack = None # type: Optional[ExtruderStack] self._onGlobalContainerChanged() ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderChanged) @@ -41,7 +46,9 @@ class SettingInheritanceManager(QObject): ## Get the keys of all children settings with an override. @pyqtSlot(str, result = "QStringList") - def getChildrenKeysWithOverride(self, key): + def getChildrenKeysWithOverride(self, key: str) -> List[str]: + if self._global_container_stack is None: + return [] definitions = self._global_container_stack.definition.findDefinitions(key=key) if not definitions: Logger.log("w", "Could not find definition for key [%s]", key) @@ -53,9 +60,11 @@ class SettingInheritanceManager(QObject): return result @pyqtSlot(str, str, result = "QStringList") - def getOverridesForExtruder(self, key, extruder_index): - result = [] + def getOverridesForExtruder(self, key: str, extruder_index: str) -> List[str]: + if self._global_container_stack is None: + return [] + result = [] # type: List[str] extruder_stack = ExtruderManager.getInstance().getExtruderStack(extruder_index) if not extruder_stack: Logger.log("w", "Unable to find extruder for current machine with index %s", extruder_index) @@ -73,16 +82,16 @@ class SettingInheritanceManager(QObject): return result @pyqtSlot(str) - def manualRemoveOverride(self, key): + def manualRemoveOverride(self, key: str) -> None: if key in self._settings_with_inheritance_warning: self._settings_with_inheritance_warning.remove(key) self.settingsWithIntheritanceChanged.emit() @pyqtSlot() - def forceUpdate(self): + def forceUpdate(self) -> None: self._update() - def _onActiveExtruderChanged(self): + def _onActiveExtruderChanged(self) -> None: new_active_stack = ExtruderManager.getInstance().getActiveExtruderStack() if not new_active_stack: self._active_container_stack = None @@ -94,13 +103,14 @@ class SettingInheritanceManager(QObject): self._active_container_stack.containersChanged.disconnect(self._onContainersChanged) self._active_container_stack = new_active_stack - self._active_container_stack.propertyChanged.connect(self._onPropertyChanged) - self._active_container_stack.containersChanged.connect(self._onContainersChanged) + if self._active_container_stack is not None: + self._active_container_stack.propertyChanged.connect(self._onPropertyChanged) + self._active_container_stack.containersChanged.connect(self._onContainersChanged) self._update() # Ensure that the settings_with_inheritance_warning list is populated. - def _onPropertyChanged(self, key, property_name): + def _onPropertyChanged(self, key: str, property_name: str) -> None: if (property_name == "value" or property_name == "enabled") and self._global_container_stack: - definitions = self._global_container_stack.definition.findDefinitions(key = key) + definitions = self._global_container_stack.definition.findDefinitions(key = key) # type: List["SettingDefinition"] if not definitions: return @@ -139,7 +149,7 @@ class SettingInheritanceManager(QObject): if settings_with_inheritance_warning_changed: self.settingsWithIntheritanceChanged.emit() - def _recursiveCheck(self, definition): + def _recursiveCheck(self, definition: "SettingDefinition") -> bool: for child in definition.children: if child.key in self._settings_with_inheritance_warning: return True @@ -149,7 +159,7 @@ class SettingInheritanceManager(QObject): return False @pyqtProperty("QVariantList", notify = settingsWithIntheritanceChanged) - def settingsWithInheritanceWarning(self): + def settingsWithInheritanceWarning(self) -> List[str]: return self._settings_with_inheritance_warning ## Check if a setting has an inheritance function that is overwritten @@ -157,9 +167,14 @@ class SettingInheritanceManager(QObject): has_setting_function = False if not stack: stack = self._active_container_stack - if not stack: #No active container stack yet! + if not stack: # No active container stack yet! return False - containers = [] # type: List[ContainerInterface] + + if self._active_container_stack is None: + return False + all_keys = self._active_container_stack.getAllKeys() + + containers = [] # type: List[ContainerInterface] ## Check if the setting has a user state. If not, it is never overwritten. has_user_state = stack.getProperty(key, "state") == InstanceState.User @@ -190,8 +205,8 @@ class SettingInheritanceManager(QObject): has_setting_function = isinstance(value, SettingFunction) if has_setting_function: for setting_key in value.getUsedSettingKeys(): - if setting_key in self._active_container_stack.getAllKeys(): - break # We found an actual setting. So has_setting_function can remain true + if setting_key in all_keys: + break # We found an actual setting. So has_setting_function can remain true else: # All of the setting_keys turned out to not be setting keys at all! # This can happen due enum keys also being marked as settings. @@ -205,7 +220,7 @@ class SettingInheritanceManager(QObject): break # There is a setting function somewhere, stop looking deeper. return has_setting_function and has_non_function_value - def _update(self): + def _update(self) -> None: self._settings_with_inheritance_warning = [] # Reset previous data. # Make sure that the GlobalStack is not None. sometimes the globalContainerChanged signal gets here late. @@ -226,7 +241,7 @@ class SettingInheritanceManager(QObject): # Notify others that things have changed. self.settingsWithIntheritanceChanged.emit() - def _onGlobalContainerChanged(self): + def _onGlobalContainerChanged(self) -> None: if self._global_container_stack: self._global_container_stack.propertyChanged.disconnect(self._onPropertyChanged) self._global_container_stack.containersChanged.disconnect(self._onContainersChanged) diff --git a/cura/Settings/SettingVisibilityPreset.py b/cura/Settings/SettingVisibilityPreset.py new file mode 100644 index 0000000000..e8a4211d69 --- /dev/null +++ b/cura/Settings/SettingVisibilityPreset.py @@ -0,0 +1,90 @@ +import os +import urllib.parse +from configparser import ConfigParser +from typing import List + +from PyQt5.QtCore import pyqtProperty, QObject, pyqtSignal + +from UM.Logger import Logger +from UM.MimeTypeDatabase import MimeTypeDatabase + + +class SettingVisibilityPreset(QObject): + onSettingsChanged = pyqtSignal() + onNameChanged = pyqtSignal() + onWeightChanged = pyqtSignal() + onIdChanged = pyqtSignal() + + def __init__(self, preset_id: str = "", name: str = "", weight: int = 0, parent = None) -> None: + super().__init__(parent) + self._settings = [] # type: List[str] + self._id = preset_id + self._weight = weight + self._name = name + + @pyqtProperty("QStringList", notify = onSettingsChanged) + def settings(self) -> List[str]: + return self._settings + + @pyqtProperty(str, notify = onIdChanged) + def presetId(self) -> str: + return self._id + + @pyqtProperty(int, notify = onWeightChanged) + def weight(self) -> int: + return self._weight + + @pyqtProperty(str, notify = onNameChanged) + def name(self) -> str: + return self._name + + def setName(self, name: str) -> None: + if name != self._name: + self._name = name + self.onNameChanged.emit() + + def setId(self, id: str) -> None: + if id != self._id: + self._id = id + self.onIdChanged.emit() + + def setWeight(self, weight: int) -> None: + if weight != self._weight: + self._weight = weight + self.onWeightChanged.emit() + + def setSettings(self, settings: List[str]) -> None: + if set(settings) != set(self._settings): + self._settings = list(set(settings)) # filter out non unique + self.onSettingsChanged.emit() + + # Load a preset from file. We expect a file that can be parsed by means of the config parser. + # The sections indicate the categories and the parameters placed in it (which don't need values) are the settings + # that should be considered visible. + def loadFromFile(self, file_path: str) -> None: + mime_type = MimeTypeDatabase.getMimeTypeForFile(file_path) + + item_id = urllib.parse.unquote_plus(mime_type.stripExtension(os.path.basename(file_path))) + if not os.path.isfile(file_path): + Logger.log("e", "[%s] is not a file", file_path) + return None + + parser = ConfigParser(interpolation = None, allow_no_value = True) # Accept options without any value, + + parser.read([file_path]) + if not parser.has_option("general", "name") or not parser.has_option("general", "weight"): + return None + + settings = [] # type: List[str] + for section in parser.sections(): + if section == "general": + continue + + settings.append(section) + for option in parser[section].keys(): + settings.append(option) + self.setSettings(settings) + self.setId(item_id) + self.setName(parser["general"]["name"]) + self.setWeight(int(parser["general"]["weight"])) + diff --git a/cura/Settings/SidebarCustomMenuItemsModel.py b/cura/Settings/SidebarCustomMenuItemsModel.py index ec926363f5..7177d26923 100644 --- a/cura/Settings/SidebarCustomMenuItemsModel.py +++ b/cura/Settings/SidebarCustomMenuItemsModel.py @@ -18,7 +18,7 @@ class SidebarCustomMenuItemsModel(ListModel): self.addRoleName(self.name_role, "name") self.addRoleName(self.actions_role, "actions") self.addRoleName(self.menu_item_role, "menu_item") - self.addRoleName(self.menu_item_icon_name_role, "iconName") + self.addRoleName(self.menu_item_icon_name_role, "icon_name") self._updateExtensionList() def _updateExtensionList(self)-> None: diff --git a/cura/Settings/SimpleModeSettingsManager.py b/cura/Settings/SimpleModeSettingsManager.py index fce43243bd..b1896a9205 100644 --- a/cura/Settings/SimpleModeSettingsManager.py +++ b/cura/Settings/SimpleModeSettingsManager.py @@ -1,7 +1,8 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Set -from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty +from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty, pyqtSlot from UM.Application import Application @@ -16,15 +17,11 @@ class SimpleModeSettingsManager(QObject): self._is_profile_user_created = False # True when profile was custom created by user self._machine_manager.activeStackValueChanged.connect(self._updateIsProfileCustomized) - self._machine_manager.activeQualityGroupChanged.connect(self._updateIsProfileUserCreated) - self._machine_manager.activeQualityChangesGroupChanged.connect(self._updateIsProfileUserCreated) # update on create as the activeQualityChanged signal is emitted before this manager is created when Cura starts self._updateIsProfileCustomized() - self._updateIsProfileUserCreated() isProfileCustomizedChanged = pyqtSignal() - isProfileUserCreatedChanged = pyqtSignal() @pyqtProperty(bool, notify = isProfileCustomizedChanged) def isProfileCustomized(self): @@ -57,33 +54,6 @@ class SimpleModeSettingsManager(QObject): self._is_profile_customized = has_customized_user_settings self.isProfileCustomizedChanged.emit() - @pyqtProperty(bool, notify = isProfileUserCreatedChanged) - def isProfileUserCreated(self): - return self._is_profile_user_created - - def _updateIsProfileUserCreated(self): - quality_changes_keys = set() - - if not self._machine_manager.activeMachine: - return False - - global_stack = self._machine_manager.activeMachine - - # check quality changes settings in the global stack - quality_changes_keys.update(global_stack.qualityChanges.getAllKeys()) - - # check quality changes settings in the extruder stacks - if global_stack.extruders: - for extruder_stack in global_stack.extruders.values(): - quality_changes_keys.update(extruder_stack.qualityChanges.getAllKeys()) - - # check if the qualityChanges container is not empty (meaning it is a user created profile) - has_quality_changes = len(quality_changes_keys) > 0 - - if has_quality_changes != self._is_profile_user_created: - self._is_profile_user_created = has_quality_changes - self.isProfileUserCreatedChanged.emit() - # These are the settings included in the Simple ("Recommended") Mode, so only when the other settings have been # changed, we consider it as a user customized profile in the Simple ("Recommended") Mode. __ignored_custom_setting_keys = ["support_enable", diff --git a/cura/Settings/UserChangesModel.py b/cura/Settings/UserChangesModel.py index 93274d61c9..9a26e5607e 100644 --- a/cura/Settings/UserChangesModel.py +++ b/cura/Settings/UserChangesModel.py @@ -1,15 +1,17 @@ -from UM.Qt.ListModel import ListModel +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import os +from collections import OrderedDict from PyQt5.QtCore import pyqtSlot, Qt + from UM.Application import Application -from cura.Settings.ExtruderManager import ExtruderManager from UM.Settings.ContainerRegistry import ContainerRegistry from UM.i18n import i18nCatalog from UM.Settings.SettingFunction import SettingFunction -from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext -from collections import OrderedDict -import os +from UM.Qt.ListModel import ListModel class UserChangesModel(ListModel): @@ -38,12 +40,18 @@ class UserChangesModel(ListModel): self._update() def _update(self): + application = Application.getInstance() + machine_manager = application.getMachineManager() + cura_formula_functions = application.getCuraFormulaFunctions() + item_dict = OrderedDict() item_list = [] - global_stack = Application.getInstance().getGlobalContainerStack() + global_stack = machine_manager.activeMachine if not global_stack: return - stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() + + stacks = [global_stack] + stacks.extend(global_stack.extruders.values()) # Check if the definition container has a translation file and ensure it's loaded. definition = global_stack.getBottom() @@ -69,13 +77,7 @@ class UserChangesModel(ListModel): # Override "getExtruderValue" with "getDefaultExtruderValue" so we can get the default values user_changes = containers.pop(0) - default_value_resolve_context = PropertyEvaluationContext(stack) - default_value_resolve_context.context["evaluate_from_container_index"] = 1 # skip the user settings container - default_value_resolve_context.context["override_operators"] = { - "extruderValue": ExtruderManager.getDefaultExtruderValue, - "extruderValues": ExtruderManager.getDefaultExtruderValues, - "resolveOrValue": ExtruderManager.getDefaultResolveOrValue - } + default_value_resolve_context = cura_formula_functions.createContextForDefaultValueEvaluation(stack) for setting_key in user_changes.getAllKeys(): original_value = None diff --git a/cura/Stages/CuraStage.py b/cura/Stages/CuraStage.py index b2f6d61799..844b0d0768 100644 --- a/cura/Stages/CuraStage.py +++ b/cura/Stages/CuraStage.py @@ -1,23 +1,29 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. + from PyQt5.QtCore import pyqtProperty, QUrl from UM.Stage import Stage +# Since Cura has a few pre-defined "space claims" for the locations of certain components, we've provided some structure +# to indicate this. +# * The StageMenuComponent is the horizontal area below the stage bar. This should be used to show stage specific +# buttons and elements. This component will be drawn over the bar & main component. +# * The MainComponent is the component that will be drawn starting from the bottom of the stageBar and fills the rest +# of the screen. class CuraStage(Stage): - - def __init__(self, parent = None): + def __init__(self, parent = None) -> None: super().__init__(parent) @pyqtProperty(str, constant = True) - def stageId(self): + def stageId(self) -> str: return self.getPluginId() @pyqtProperty(QUrl, constant = True) - def mainComponent(self): + def mainComponent(self) -> QUrl: return self.getDisplayComponent("main") @pyqtProperty(QUrl, constant = True) - def sidebarComponent(self): - return self.getDisplayComponent("sidebar") + def stageMenuComponent(self) -> QUrl: + return self.getDisplayComponent("menu") \ No newline at end of file diff --git a/cura/UltimakerCloudAuthentication.py b/cura/UltimakerCloudAuthentication.py new file mode 100644 index 0000000000..c8346e5c4e --- /dev/null +++ b/cura/UltimakerCloudAuthentication.py @@ -0,0 +1,30 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +# --------- +# Constants used for the Cloud API +# --------- +DEFAULT_CLOUD_API_ROOT = "https://api.ultimaker.com" # type: str +DEFAULT_CLOUD_API_VERSION = "1" # type: str +DEFAULT_CLOUD_ACCOUNT_API_ROOT = "https://account.ultimaker.com" # type: str + +try: + from cura.CuraVersion import CuraCloudAPIRoot # type: ignore + if CuraCloudAPIRoot == "": + CuraCloudAPIRoot = DEFAULT_CLOUD_API_ROOT +except ImportError: + CuraCloudAPIRoot = DEFAULT_CLOUD_API_ROOT + +try: + from cura.CuraVersion import CuraCloudAPIVersion # type: ignore + if CuraCloudAPIVersion == "": + CuraCloudAPIVersion = DEFAULT_CLOUD_API_VERSION +except ImportError: + CuraCloudAPIVersion = DEFAULT_CLOUD_API_VERSION + +try: + from cura.CuraVersion import CuraCloudAccountAPIRoot # type: ignore + if CuraCloudAccountAPIRoot == "": + CuraCloudAccountAPIRoot = DEFAULT_CLOUD_ACCOUNT_API_ROOT +except ImportError: + CuraCloudAccountAPIRoot = DEFAULT_CLOUD_ACCOUNT_API_ROOT diff --git a/cura/Utils/Threading.py b/cura/Utils/Threading.py index 3cd6200513..550a5421ff 100644 --- a/cura/Utils/Threading.py +++ b/cura/Utils/Threading.py @@ -1,3 +1,4 @@ +import functools import threading from cura.CuraApplication import CuraApplication @@ -6,7 +7,7 @@ from cura.CuraApplication import CuraApplication # # HACK: # -# In project loading, when override the existing machine is selected, the stacks and containers that are correctly +# In project loading, when override the existing machine is selected, the stacks and containers that are currently # active in the system will be overridden at runtime. Because the project loading is done in a different thread than # the Qt thread, something else can kick in the middle of the process. One of them is the rendering. It will access # the current stacks and container, which have not completely been updated yet, so Cura will crash in this case. @@ -22,7 +23,13 @@ class InterCallObject: def call_on_qt_thread(func): + @functools.wraps(func) def _call_on_qt_thread_wrapper(*args, **kwargs): + # If the current thread is the main thread, which is the Qt thread, directly call the function. + current_thread = threading.current_thread() + if isinstance(current_thread, threading._MainThread): + return func(*args, **kwargs) + def _handle_call(ico, *args, **kwargs): ico.result = func(*args, **kwargs) ico.finish_event.set() diff --git a/cura_app.py b/cura_app.py index 164e32e738..3224a5b99b 100755 --- a/cura_app.py +++ b/cura_app.py @@ -9,6 +9,7 @@ import os import sys from UM.Platform import Platform +from cura.ApplicationMetadata import CuraAppName parser = argparse.ArgumentParser(prog = "cura", add_help = False) @@ -17,22 +18,16 @@ parser.add_argument("--debug", default = False, help = "Turn on the debug mode by setting this option." ) -parser.add_argument("--trigger-early-crash", - dest = "trigger_early_crash", - action = "store_true", - default = False, - help = "FOR TESTING ONLY. Trigger an early crash to show the crash dialog." - ) known_args = vars(parser.parse_known_args()[0]) if not known_args["debug"]: def get_cura_dir_path(): if Platform.isWindows(): - return os.path.expanduser("~/AppData/Roaming/cura") + return os.path.expanduser("~/AppData/Roaming/" + CuraAppName) elif Platform.isLinux(): - return os.path.expanduser("~/.local/share/cura") + return os.path.expanduser("~/.local/share/" + CuraAppName) elif Platform.isOSX(): - return os.path.expanduser("~/Library/Logs/cura") + return os.path.expanduser("~/Library/Logs/" + CuraAppName) if hasattr(sys, "frozen"): dirpath = get_cura_dir_path() 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 diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index 9ba82364e8..49c6995d18 100755 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -225,7 +225,7 @@ class ThreeMFReader(MeshReader): except Exception: Logger.logException("e", "An exception occurred in 3mf reader.") - return [] + return None return result diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 16ab22473b..bf190f7e39 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -85,14 +85,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader): def __init__(self) -> None: super().__init__() - MimeTypeDatabase.addMimeType( - MimeType( - name="application/x-curaproject+xml", - comment="Cura Project File", - suffixes=["curaproject.3mf"] - ) - ) - self._supported_extensions = [".3mf"] self._dialog = WorkspaceDialog() self._3mf_mesh_reader = None @@ -306,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 @@ -507,7 +500,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): is_printer_group = False if machine_conflict: - group_name = existing_global_stack.getMetaDataEntry("connect_group_name") + group_name = existing_global_stack.getMetaDataEntry("group_name") if group_name is not None: is_printer_group = True machine_name = group_name @@ -726,8 +719,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader): nodes = [] base_file_name = os.path.basename(file_name) - if base_file_name.endswith(".curaproject.3mf"): - base_file_name = base_file_name[:base_file_name.rfind(".curaproject.3mf")] self.setWorkspaceName(base_file_name) return nodes @@ -803,7 +794,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # Clear all existing containers quality_changes_info.global_info.container.clear() for container_info in quality_changes_info.extruder_info_dict.values(): - container_info.container.clear() + if container_info.container: + container_info.container.clear() # Loop over everything and override the existing containers global_info = quality_changes_info.global_info @@ -936,7 +928,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): build_plate_id = global_stack.variant.getId() # get material diameter of this extruder - machine_material_diameter = extruder_stack.materialDiameter + machine_material_diameter = extruder_stack.getCompatibleMaterialDiameter() material_node = material_manager.getMaterialNode(global_stack.definition.getId(), extruder_stack.variant.getName(), build_plate_id, @@ -944,7 +936,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): root_material_id) if material_node is not None and material_node.getContainer() is not None: - extruder_stack.material = material_node.getContainer() + extruder_stack.material = material_node.getContainer() # type: InstanceContainer def _applyChangesToMachine(self, global_stack, extruder_stack_dict): # Clear all first @@ -1022,7 +1014,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): ## Get the list of ID's of all containers in a container stack by partially parsing it's serialized data. def _getContainerIdListFromSerialized(self, serialized): - parser = ConfigParser(interpolation=None, empty_lines_in_values=False) + parser = ConfigParser(interpolation = None, empty_lines_in_values = False) parser.read_string(serialized) container_ids = [] @@ -1043,7 +1035,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): return container_ids def _getMachineNameFromSerializedStack(self, serialized): - parser = ConfigParser(interpolation=None, empty_lines_in_values=False) + parser = ConfigParser(interpolation = None, empty_lines_in_values = False) parser.read_string(serialized) return parser["general"].get("name", "") diff --git a/plugins/3MFReader/__init__.py b/plugins/3MFReader/__init__.py index 3a4fde4ab8..ce94bbe69c 100644 --- a/plugins/3MFReader/__init__.py +++ b/plugins/3MFReader/__init__.py @@ -18,11 +18,7 @@ catalog = i18nCatalog("cura") def getMetaData() -> Dict: - # Workaround for osx not supporting double file extensions correctly. - if Platform.isOSX(): - workspace_extension = "3mf" - else: - workspace_extension = "curaproject.3mf" + workspace_extension = "3mf" metaData = {} if "3MFReader.ThreeMFReader" in sys.modules: diff --git a/plugins/3MFReader/plugin.json b/plugins/3MFReader/plugin.json index 5d15123017..5af21a7033 100644 --- a/plugins/3MFReader/plugin.json +++ b/plugins/3MFReader/plugin.json @@ -1,8 +1,8 @@ { "name": "3MF Reader", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides support for reading 3MF files.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/3MFWriter/__init__.py b/plugins/3MFWriter/__init__.py index e779628f7e..eff1648489 100644 --- a/plugins/3MFWriter/__init__.py +++ b/plugins/3MFWriter/__init__.py @@ -12,14 +12,10 @@ from . import ThreeMFWorkspaceWriter from UM.i18n import i18nCatalog from UM.Platform import Platform -i18n_catalog = i18nCatalog("uranium") +i18n_catalog = i18nCatalog("cura") def getMetaData(): - # Workarround for osx not supporting double file extensions correctly. - if Platform.isOSX(): - workspace_extension = "3mf" - else: - workspace_extension = "curaproject.3mf" + workspace_extension = "3mf" metaData = {} @@ -36,7 +32,7 @@ def getMetaData(): "output": [{ "extension": workspace_extension, "description": i18n_catalog.i18nc("@item:inlistbox", "Cura Project 3MF file"), - "mime_type": "application/x-curaproject+xml", + "mime_type": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml", "mode": ThreeMFWorkspaceWriter.ThreeMFWorkspaceWriter.OutputMode.BinaryMode }] } diff --git a/plugins/3MFWriter/plugin.json b/plugins/3MFWriter/plugin.json index 22d18b2cf1..3820ebd2e7 100644 --- a/plugins/3MFWriter/plugin.json +++ b/plugins/3MFWriter/plugin.json @@ -1,8 +1,8 @@ { "name": "3MF Writer", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides support for writing 3MF files.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/ChangeLogPlugin/ChangeLog.py b/plugins/ChangeLogPlugin/ChangeLog.py index 723c83a021..eeec5edf9b 100644 --- a/plugins/ChangeLogPlugin/ChangeLog.py +++ b/plugins/ChangeLogPlugin/ChangeLog.py @@ -1,4 +1,4 @@ -# Copyright (c) 2015 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from UM.i18n import i18nCatalog @@ -29,6 +29,7 @@ class ChangeLog(Extension, QObject,): self._change_logs = None Application.getInstance().engineCreatedSignal.connect(self._onEngineCreated) Application.getInstance().getPreferences().addPreference("general/latest_version_changelog_shown", "2.0.0") #First version of CURA with uranium + self.setMenuName(catalog.i18nc("@item:inmenu", "Changelog")) self.addMenuItem(catalog.i18nc("@item:inmenu", "Show Changelog"), self.showChangelog) def getChangeLogs(self): diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index aefeb92ce5..651abb0cac 100755 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -1,3 +1,178 @@ +[3.6.0] +*Gyroid infill +New infill pattern with enhanced strength properties. Gyroid infill is one of the strongest infill types for a given weight, has isotropic properties, and prints relatively fast with reduced material use and a fully connected part interior. Note: Slicing time can increase up to 40 seconds or more, depending on the model. Contributed by smartavionics. + +*Support brim +New setting that integrates the first layer of support material with the brim’s geometry. This significantly improves adhesion when printing with support material. Contributed by BagelOrb. + +*Cooling fan number +It is now possible to specify the cooling fan to use if your printer has multiple fans. This is implemented under Machine settings in the Extruder tab. Contributed by smartavionics. + +*Settings refactor +The CuraEngine has been refactored to create a more testable, future-proof way of storing and representing settings. This makes slicing faster, and future development easier. + +*Print core CC 0.6 +The new print core CC 0.6 is selectable when the Ultimaker S5 profile is active. This print core is optimized for use with abrasive materials and composites. + +*File name and layer display +Added M117 commands to GCODE to give real-time information about the print job file name and layer number shown on the printer’s display when printing via USB. Contributed by adecastilho. + +*Firmware checker/Ultimaker S5 +The update checker code has been improved and tested for more reliable firmware update notifications in Ultimaker Cura. The Ultimaker S5 is now included. + +*Fullscreen mode shortcuts +Fullscreen mode can be toggled using the View menu or with the keyboard shortcuts: Command + Control + F (macOS), or F11 (Windows and Linux). Contributed by KangDroid. + +*Configuration error message +In previous versions, Ultimaker Cura would display an error dialog explaining when something happened to user configuration files, including the option to reset to factory defaults. This would not warn about losing the current printer and print profile settings, so this information has been added. + +*Rename Toolbox to Marketplace +The entry points to the Toolbox are now renamed to Marketplace. + +*Materials in the Marketplace +A new tab has been added to the Marketplace that includes downloadable material profiles, to quickly and easily prepare models for a range of third-party materials. + +*New third-party definitions +New profiles added for Anycube 4MAx and Tizyx K25. Contributed by jscurtu and ValentinPitre respectively. + +*Improved definitions for Ender-3 +The Ender-3 build plate size has been adjusted to the correct size of 235 x 235 mm, corrected the start-up sequence, and the printhead position has been adjusted when prints are purged or completed. Contributed by stelgenhof. + +*Add mesh names to slicing message +Added comment generation to indicate which mesh the GCODE after this comment is constructing. Contributed by paukstelis. + +*Bug fixes +- The active material is highlighted in Ultimaker Cura’s material manager list. This behavior is now consistent with the profile and machine manager. +- The option to use 1.75 mm diameter filament with third-party 3D printers is now fixed and does not revert back to 2.85 mm. This fix also applies the appropriate a Z-axis speed change for 1.75 mm filament printers. Contributed by kaleidoscopeit. +- A fix was created to handle OSX version 10.10, but due to the QT upgrade, users with older versions won’t be able to run Ultimaker Cura on their system without a system update. This applies to OSX version 10.09 and 10.08. +- Fixed a memory leak when leaving the “Monitor” page open. +- Added performance improvements to the PolygonConnector to efficiently connect polygons that are close to each other. This also reduces the chances of the print head collide with previously printed things. Contributed by BagelOrb. +- Fixed a bug where the GCODE reader didn’t show retractions. +- Changes the USBPrinting update thread to prevent flooding the printer with M105 temperature update requests. Contributed by fieldOfView. +- Fix the behavior of the "manage visible settings" button, when pressing the "cog" icon of a particular category. Contributed by fieldOfView. +- Add a new post processing script that pauses the print at a certain height that works with RepRap printers. Contributed by Kriechi. +- Fix updates to the print monitor temperatures while preheating. Contributed by fieldOfView. +- Fixed a bug where material cost is not shown unless weight is changed. +- Fixed bugs crashing the CuraEngine when TreeSupport is enabled. +- Fixed a bug where Ultimaker Cura would upload the wrong firmware after switching printers in the UI. +- Fixed a bug where the layer view was missing if the first layer was empty. +- Fixed a bug where erroneous combing movements were taking place. +- Fixed a bug where the initial layer temperature is set correctly for the first object but then never again. +- Fixed a bug where clicking the fx icon didn’t respond. + +[3.5.1] +*Bug fixes +- Fixed M104 temperature commands giving inaccurate results. +- Fixed crashes caused by loading files from USB stick on Windows platforms. +- Fixed several issues with configuration files that missed the type in the metadata. +- Fixed issues caused by skin/infill optimization. +- Fixed several issues related to missing definition files for third-party printers. +- Fixed an issue where combing path generation cuts corners. +- Fixed a range of crashes caused by lock files. +- Fixed issues with remembering save directories on MacOS. +- Fixed an issue where CuraEngine uses incorrect material settings. +- Fixed an issue where some support layers don't have support infill. + +[3.5.0] +*Monitor page +The monitor page of Ultimaker Cura has been remodeled for better consistency with the Cura Connect ‘Print jobs’ interface. This means less switching between interfaces, and more control from within Ultimaker Cura. + +*Open recent projects +Project files can now be found in the ‘Open Recent’ menu. + +*New tool hotkeys +New hotkeys have been assigned for quick toggling between the translate (T), scale (S), rotate (R) and mirror (M) tools. + +*Project files use 3MF only +A 3MF extension is now used for project files. The ‘.curaproject’ extension is no longer used. + +*Camera maximum zoom +The maximum zoom has been adjusted to scale with the size of the selected printer. This fixes third-party printers with huge build volumes to be correctly visible. + +*Corrected width of layer number box +The layer number indicator in the layer view now displays numbers above 999 correctly. + +*Materials preferences +This screen has been redesigned to improve user experience. Materials can now be set as a favorites, so they can be easily accessed in the material selection panel at the top-right of the screen. + +*Installed packages checkmark +Packages that are already installed in the Toolbox are now have a checkmark for easy reference. + +*Mac OSX save dialog +The save dialog has been restored to its native behavior and bugs have been fixed. + +*Removed .gz extension +Saving compressed g-code files from the save dialog has been removed because of incompatibility with MacOS. If sending jobs over Wi-Fi, g-code is still compressed. + +*Updates to Chinese translations +Improved and updated Chinese translations. Contributed by MarmaladeForMeat. + +*Save project +Saving the project no longer triggers the project to reslice. + +*File menu +The Save option in the file menu now saves project files. The export option now saves other types of files, such as STL. + +*Improved processing of overhang walls +Overhang walls are detected and printed with different speeds. It will not start a perimeter on an overhanging wall. The quality of overhanging walls may be improved by printing those at a different speed. Contributed by smartavionics. + +*Prime tower reliability +The prime tower has been improved for better reliability. This is especially useful when printing with two materials that do not adhere well. + +*Support infill line direction +The support infill lines can now be rotated to increase the supporting capabilities and reduce artifacts on the model. This setting rotates existing patterns, like triangle support infill. Contributed by fieldOfView. + +*Minimum polygon circumference +Polygons in sliced layers that have a circumference smaller than the setting value will be filtered out. Lower values lead to higher resolution meshes at the cost of increased slicing time. This setting is ideal for very tiny prints with a lot of detail, or for SLA printers. Contributed by cubiq. + +*Initial layer support line distance +This setting enables the user to reduce or increase the density of the support initial layer in order to increase or reduce adhesion to the build plate and the overall strength. + +*Extra infill wall line count +Adds extra walls around infill. Contributed by BagelOrb. + +*Multiply infill +Creates multiple infill lines on the same pattern for sturdier infill. Contributed by BagelOrb. + +*Connected infill polygons +Connecting infill lines now also works with concentric and cross infill patterns. The benefit would be stronger infill and more consistent material flow/saving retractions. Contributed by BagelOrb. + +*Fan speed override +New setting to modify the fan speed of supported areas. This setting can be found in Support settings > Fan Speed Override when support is enabled. Contributed by smartavionics. + +*Minimum wall flow +New setting to define a minimum flow for thin printed walls. Contributed by smartavionics. + +*Custom support plugin +A tool downloadable from the toolbox, similar to the support blocker, that adds cubes of support to the model manually by clicking parts of it. Contributed by Lokster. + +*Quickly toggle autoslicing +Adds a pause/play button to the progress bar to quickly toggle autoslicing. Contributed by fieldOfview. + +*Cura-DuetRRFPlugin +Adds output devices for a Duet RepRapFirmware printer: "Print", "Simulate", and "Upload". Contributed by Kriechi. + +*Dremel 3D20 +This plugin adds the Dremel printer to Ultimaker Cura. Contributed by Kriechi. + +*Bug fixes +- Removed extra M109 commands. Older versions would generate superfluous M109 commands. This has been fixed for better temperature stability when printing. +- Fixed minor mesh handling bugs. A few combinations of modifier meshes now lead to expected behavior. +- Removed unnecessary travels. Connected infill lines are now always printed completely connected, without unnecessary travel moves. +- Removed concentric 3D infill. This infill type has been removed due to lack of reliability. +- Extra skin wall count. Fixed an issue that caused extra print moves with this setting enabled. +- Concentric skin. Small gaps in concentric skin are now filled correctly. +- Order of printed models. The order of a large batch of printed models is now more consistent, instead of random. + +*Third party printers +- TiZYX +- Winbo +- Tevo Tornado +- Creality CR-10S +- Wanhao Duplicator +- Deltacomb (update) +- Dacoma (update) + [3.4.1] *Bug fixes - Fixed an issue that would occasionally cause an unnecessary extra skin wall to be printed, which increased print time. @@ -768,7 +943,7 @@ This release adds support for printers with elliptic buildplates. This feature h *AppImage for Linux The Linux distribution is now in AppImage format, which makes Cura easier to install. -*bugfixes +*Bugfixes The user is now notified when a new version of Cura is available. When searching in the setting visibility preferences, the category for each setting is always displayed. 3MF files are now saved and loaded correctly. diff --git a/plugins/ChangeLogPlugin/__init__.py b/plugins/ChangeLogPlugin/__init__.py index 97d9e411e5..a5452b60c8 100644 --- a/plugins/ChangeLogPlugin/__init__.py +++ b/plugins/ChangeLogPlugin/__init__.py @@ -3,8 +3,6 @@ from . import ChangeLog -from UM.i18n import i18nCatalog -catalog = i18nCatalog("cura") def getMetaData(): return {} diff --git a/plugins/ChangeLogPlugin/plugin.json b/plugins/ChangeLogPlugin/plugin.json index e9414b9b71..92041d1543 100644 --- a/plugins/ChangeLogPlugin/plugin.json +++ b/plugins/ChangeLogPlugin/plugin.json @@ -1,8 +1,8 @@ { "name": "Changelog", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Shows changes since latest checked version.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/CuraDrive/__init__.py b/plugins/CuraDrive/__init__.py new file mode 100644 index 0000000000..eeb6b78689 --- /dev/null +++ b/plugins/CuraDrive/__init__.py @@ -0,0 +1,12 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from .src.DrivePluginExtension import DrivePluginExtension + + +def getMetaData(): + return {} + + +def register(app): + return {"extension": DrivePluginExtension()} diff --git a/plugins/CuraDrive/plugin.json b/plugins/CuraDrive/plugin.json new file mode 100644 index 0000000000..d1cab39ca5 --- /dev/null +++ b/plugins/CuraDrive/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Cura Backups", + "author": "Ultimaker B.V.", + "description": "Backup and restore your configuration.", + "version": "1.2.0", + "api": 6, + "i18n-catalog": "cura" +} diff --git a/plugins/CuraDrive/src/DriveApiService.py b/plugins/CuraDrive/src/DriveApiService.py new file mode 100644 index 0000000000..6a828e32d6 --- /dev/null +++ b/plugins/CuraDrive/src/DriveApiService.py @@ -0,0 +1,171 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import base64 +import hashlib +from datetime import datetime +from tempfile import NamedTemporaryFile +from typing import Any, Optional, List, Dict + +import requests + +from UM.Logger import Logger +from UM.Message import Message +from UM.Signal import Signal, signalemitter +from cura.CuraApplication import CuraApplication + +from .UploadBackupJob import UploadBackupJob +from .Settings import Settings + +from UM.i18n import i18nCatalog +catalog = i18nCatalog("cura") + + +## The DriveApiService is responsible for interacting with the CuraDrive API and Cura's backup handling. +@signalemitter +class DriveApiService: + BACKUP_URL = "{}/backups".format(Settings.DRIVE_API_URL) + + # Emit signal when restoring backup started or finished. + restoringStateChanged = Signal() + + # Emit signal when creating backup started or finished. + creatingStateChanged = Signal() + + def __init__(self) -> None: + self._cura_api = CuraApplication.getInstance().getCuraAPI() + + def getBackups(self) -> List[Dict[str, Any]]: + access_token = self._cura_api.account.accessToken + if not access_token: + Logger.log("w", "Could not get access token.") + return [] + try: + backup_list_request = requests.get(self.BACKUP_URL, headers = { + "Authorization": "Bearer {}".format(access_token) + }) + except requests.exceptions.ConnectionError: + Logger.log("w", "Unable to connect with the server.") + return [] + + # HTTP status 300s mean redirection. 400s and 500s are errors. + # Technically 300s are not errors, but the use case here relies on "requests" to handle redirects automatically. + if backup_list_request.status_code >= 300: + Logger.log("w", "Could not get backups list from remote: %s", backup_list_request.text) + Message(catalog.i18nc("@info:backup_status", "There was an error listing your backups."), title = catalog.i18nc("@info:title", "Backup")).show() + return [] + return backup_list_request.json()["data"] + + def createBackup(self) -> None: + self.creatingStateChanged.emit(is_creating = True) + + # Create the backup. + backup_zip_file, backup_meta_data = self._cura_api.backups.createBackup() + if not backup_zip_file or not backup_meta_data: + self.creatingStateChanged.emit(is_creating = False, error_message ="Could not create backup.") + return + + # Create an upload entry for the backup. + timestamp = datetime.now().isoformat() + backup_meta_data["description"] = "{}.backup.{}.cura.zip".format(timestamp, backup_meta_data["cura_release"]) + backup_upload_url = self._requestBackupUpload(backup_meta_data, len(backup_zip_file)) + if not backup_upload_url: + self.creatingStateChanged.emit(is_creating = False, error_message ="Could not upload backup.") + return + + # Upload the backup to storage. + upload_backup_job = UploadBackupJob(backup_upload_url, backup_zip_file) + upload_backup_job.finished.connect(self._onUploadFinished) + upload_backup_job.start() + + def _onUploadFinished(self, job: "UploadBackupJob") -> None: + if job.backup_upload_error_message != "": + # If the job contains an error message we pass it along so the UI can display it. + self.creatingStateChanged.emit(is_creating = False, error_message = job.backup_upload_error_message) + else: + self.creatingStateChanged.emit(is_creating = False) + + def restoreBackup(self, backup: Dict[str, Any]) -> None: + self.restoringStateChanged.emit(is_restoring = True) + download_url = backup.get("download_url") + if not download_url: + # If there is no download URL, we can't restore the backup. + return self._emitRestoreError() + + download_package = requests.get(download_url, stream = True) + if download_package.status_code >= 300: + # Something went wrong when attempting to download the backup. + Logger.log("w", "Could not download backup from url %s: %s", download_url, download_package.text) + return self._emitRestoreError() + + # We store the file in a temporary path fist to ensure integrity. + temporary_backup_file = NamedTemporaryFile(delete = False) + with open(temporary_backup_file.name, "wb") as write_backup: + for chunk in download_package: + write_backup.write(chunk) + + if not self._verifyMd5Hash(temporary_backup_file.name, backup.get("md5_hash", "")): + # Don't restore the backup if the MD5 hashes do not match. + # This can happen if the download was interrupted. + Logger.log("w", "Remote and local MD5 hashes do not match, not restoring backup.") + return self._emitRestoreError() + + # Tell Cura to place the backup back in the user data folder. + with open(temporary_backup_file.name, "rb") as read_backup: + self._cura_api.backups.restoreBackup(read_backup.read(), backup.get("metadata", {})) + self.restoringStateChanged.emit(is_restoring = False) + + def _emitRestoreError(self) -> None: + self.restoringStateChanged.emit(is_restoring = False, + error_message = catalog.i18nc("@info:backup_status", + "There was an error trying to restore your backup.")) + + # Verify the MD5 hash of a file. + # \param file_path Full path to the file. + # \param known_hash The known MD5 hash of the file. + # \return: Success or not. + @staticmethod + def _verifyMd5Hash(file_path: str, known_hash: str) -> bool: + with open(file_path, "rb") as read_backup: + local_md5_hash = base64.b64encode(hashlib.md5(read_backup.read()).digest(), altchars = b"_-").decode("utf-8") + return known_hash == local_md5_hash + + def deleteBackup(self, backup_id: str) -> bool: + access_token = self._cura_api.account.accessToken + if not access_token: + Logger.log("w", "Could not get access token.") + return False + + delete_backup = requests.delete("{}/{}".format(self.BACKUP_URL, backup_id), headers = { + "Authorization": "Bearer {}".format(access_token) + }) + if delete_backup.status_code >= 300: + Logger.log("w", "Could not delete backup: %s", delete_backup.text) + return False + return True + + # Request a backup upload slot from the API. + # \param backup_metadata: A dict containing some meta data about the backup. + # \param backup_size The size of the backup file in bytes. + # \return: The upload URL for the actual backup file if successful, otherwise None. + def _requestBackupUpload(self, backup_metadata: Dict[str, Any], backup_size: int) -> Optional[str]: + access_token = self._cura_api.account.accessToken + if not access_token: + Logger.log("w", "Could not get access token.") + return None + + backup_upload_request = requests.put(self.BACKUP_URL, json = { + "data": { + "backup_size": backup_size, + "metadata": backup_metadata + } + }, headers = { + "Authorization": "Bearer {}".format(access_token) + }) + + # Any status code of 300 or above indicates an error. + if backup_upload_request.status_code >= 300: + Logger.log("w", "Could not request backup upload: %s", backup_upload_request.text) + return None + + return backup_upload_request.json()["data"]["upload_url"] diff --git a/plugins/CuraDrive/src/DrivePluginExtension.py b/plugins/CuraDrive/src/DrivePluginExtension.py new file mode 100644 index 0000000000..bcc326a133 --- /dev/null +++ b/plugins/CuraDrive/src/DrivePluginExtension.py @@ -0,0 +1,162 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import os +from datetime import datetime +from typing import Any, cast, Dict, List, Optional + +from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal + +from UM.Extension import Extension +from UM.Logger import Logger +from UM.Message import Message +from cura.CuraApplication import CuraApplication + +from .Settings import Settings +from .DriveApiService import DriveApiService + +from UM.i18n import i18nCatalog +catalog = i18nCatalog("cura") + + +# The DivePluginExtension provides functionality to backup and restore your Cura configuration to Ultimaker's cloud. +class DrivePluginExtension(QObject, Extension): + + # Signal emitted when the list of backups changed. + backupsChanged = pyqtSignal() + + # Signal emitted when restoring has started. Needed to prevent parallel restoring. + restoringStateChanged = pyqtSignal() + + # Signal emitted when creating has started. Needed to prevent parallel creation of backups. + creatingStateChanged = pyqtSignal() + + # Signal emitted when preferences changed (like auto-backup). + preferencesChanged = pyqtSignal() + + DATE_FORMAT = "%d/%m/%Y %H:%M:%S" + + def __init__(self) -> None: + QObject.__init__(self, None) + Extension.__init__(self) + + # Local data caching for the UI. + self._drive_window = None # type: Optional[QObject] + self._backups = [] # type: List[Dict[str, Any]] + self._is_restoring_backup = False + self._is_creating_backup = False + + # Initialize services. + preferences = CuraApplication.getInstance().getPreferences() + self._drive_api_service = DriveApiService() + + # Attach signals. + CuraApplication.getInstance().getCuraAPI().account.loginStateChanged.connect(self._onLoginStateChanged) + self._drive_api_service.restoringStateChanged.connect(self._onRestoringStateChanged) + self._drive_api_service.creatingStateChanged.connect(self._onCreatingStateChanged) + + # Register preferences. + preferences.addPreference(Settings.AUTO_BACKUP_ENABLED_PREFERENCE_KEY, False) + preferences.addPreference(Settings.AUTO_BACKUP_LAST_DATE_PREFERENCE_KEY, + datetime.now().strftime(self.DATE_FORMAT)) + + # Register the menu item + self.addMenuItem(catalog.i18nc("@item:inmenu", "Manage backups"), self.showDriveWindow) + + # Make auto-backup on boot if required. + CuraApplication.getInstance().engineCreatedSignal.connect(self._autoBackup) + + def showDriveWindow(self) -> None: + if not self._drive_window: + plugin_dir_path = cast(str, CuraApplication.getInstance().getPluginRegistry().getPluginPath(self.getPluginId())) # We know this plug-in exists because that's us, so this always returns str. + path = os.path.join(plugin_dir_path, "src", "qml", "main.qml") + self._drive_window = CuraApplication.getInstance().createQmlComponent(path, {"CuraDrive": self}) + self.refreshBackups() + if self._drive_window: + self._drive_window.show() + + def _autoBackup(self) -> None: + preferences = CuraApplication.getInstance().getPreferences() + if preferences.getValue(Settings.AUTO_BACKUP_ENABLED_PREFERENCE_KEY) and self._isLastBackupTooLongAgo(): + self.createBackup() + + def _isLastBackupTooLongAgo(self) -> bool: + current_date = datetime.now() + last_backup_date = self._getLastBackupDate() + date_diff = current_date - last_backup_date + return date_diff.days > 1 + + def _getLastBackupDate(self) -> "datetime": + preferences = CuraApplication.getInstance().getPreferences() + last_backup_date = preferences.getValue(Settings.AUTO_BACKUP_LAST_DATE_PREFERENCE_KEY) + return datetime.strptime(last_backup_date, self.DATE_FORMAT) + + def _storeBackupDate(self) -> None: + backup_date = datetime.now().strftime(self.DATE_FORMAT) + preferences = CuraApplication.getInstance().getPreferences() + preferences.setValue(Settings.AUTO_BACKUP_LAST_DATE_PREFERENCE_KEY, backup_date) + + def _onLoginStateChanged(self, logged_in: bool = False) -> None: + if logged_in: + self.refreshBackups() + + def _onRestoringStateChanged(self, is_restoring: bool = False, error_message: str = None) -> None: + self._is_restoring_backup = is_restoring + self.restoringStateChanged.emit() + if error_message: + Message(error_message, title = catalog.i18nc("@info:title", "Backup")).show() + + def _onCreatingStateChanged(self, is_creating: bool = False, error_message: str = None) -> None: + self._is_creating_backup = is_creating + self.creatingStateChanged.emit() + if error_message: + Message(error_message, title = catalog.i18nc("@info:title", "Backup")).show() + else: + self._storeBackupDate() + if not is_creating and not error_message: + # We've finished creating a new backup, to the list has to be updated. + self.refreshBackups() + + @pyqtSlot(bool, name = "toggleAutoBackup") + def toggleAutoBackup(self, enabled: bool) -> None: + preferences = CuraApplication.getInstance().getPreferences() + preferences.setValue(Settings.AUTO_BACKUP_ENABLED_PREFERENCE_KEY, enabled) + + @pyqtProperty(bool, notify = preferencesChanged) + def autoBackupEnabled(self) -> bool: + preferences = CuraApplication.getInstance().getPreferences() + return bool(preferences.getValue(Settings.AUTO_BACKUP_ENABLED_PREFERENCE_KEY)) + + @pyqtProperty("QVariantList", notify = backupsChanged) + def backups(self) -> List[Dict[str, Any]]: + return self._backups + + @pyqtSlot(name = "refreshBackups") + def refreshBackups(self) -> None: + self._backups = self._drive_api_service.getBackups() + self.backupsChanged.emit() + + @pyqtProperty(bool, notify = restoringStateChanged) + def isRestoringBackup(self) -> bool: + return self._is_restoring_backup + + @pyqtProperty(bool, notify = creatingStateChanged) + def isCreatingBackup(self) -> bool: + return self._is_creating_backup + + @pyqtSlot(str, name = "restoreBackup") + def restoreBackup(self, backup_id: str) -> None: + for backup in self._backups: + if backup.get("backup_id") == backup_id: + self._drive_api_service.restoreBackup(backup) + return + Logger.log("w", "Unable to find backup with the ID %s", backup_id) + + @pyqtSlot(name = "createBackup") + def createBackup(self) -> None: + self._drive_api_service.createBackup() + + @pyqtSlot(str, name = "deleteBackup") + def deleteBackup(self, backup_id: str) -> None: + self._drive_api_service.deleteBackup(backup_id) + self.refreshBackups() diff --git a/plugins/CuraDrive/src/Settings.py b/plugins/CuraDrive/src/Settings.py new file mode 100644 index 0000000000..abe64e0acd --- /dev/null +++ b/plugins/CuraDrive/src/Settings.py @@ -0,0 +1,13 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from cura import UltimakerCloudAuthentication + + +class Settings: + # Keeps the plugin settings. + DRIVE_API_VERSION = 1 + DRIVE_API_URL = "{}/cura-drive/v{}".format(UltimakerCloudAuthentication.CuraCloudAPIRoot, str(DRIVE_API_VERSION)) + + AUTO_BACKUP_ENABLED_PREFERENCE_KEY = "cura_drive/auto_backup_enabled" + AUTO_BACKUP_LAST_DATE_PREFERENCE_KEY = "cura_drive/auto_backup_date" diff --git a/plugins/CuraDrive/src/UploadBackupJob.py b/plugins/CuraDrive/src/UploadBackupJob.py new file mode 100644 index 0000000000..2e76ed9b4b --- /dev/null +++ b/plugins/CuraDrive/src/UploadBackupJob.py @@ -0,0 +1,41 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import requests + +from UM.Job import Job +from UM.Logger import Logger +from UM.Message import Message + +from UM.i18n import i18nCatalog +catalog = i18nCatalog("cura") + + +class UploadBackupJob(Job): + MESSAGE_TITLE = catalog.i18nc("@info:title", "Backups") + + # This job is responsible for uploading the backup file to cloud storage. + # As it can take longer than some other tasks, we schedule this using a Cura Job. + def __init__(self, signed_upload_url: str, backup_zip: bytes) -> None: + super().__init__() + self._signed_upload_url = signed_upload_url + self._backup_zip = backup_zip + self._upload_success = False + self.backup_upload_error_message = "" + + def run(self) -> None: + upload_message = Message(catalog.i18nc("@info:backup_status", "Uploading your backup..."), title = self.MESSAGE_TITLE, progress = -1) + upload_message.show() + + backup_upload = requests.put(self._signed_upload_url, data = self._backup_zip) + upload_message.hide() + + if backup_upload.status_code >= 300: + self.backup_upload_error_message = backup_upload.text + Logger.log("w", "Could not upload backup file: %s", backup_upload.text) + Message(catalog.i18nc("@info:backup_status", "There was an error while uploading your backup."), title = self.MESSAGE_TITLE).show() + else: + self._upload_success = True + Message(catalog.i18nc("@info:backup_status", "Your backup has finished uploading."), title = self.MESSAGE_TITLE).show() + + self.finished.emit(self) diff --git a/plugins/CuraDrive/src/__init__.py b/plugins/CuraDrive/src/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/plugins/CuraDrive/src/qml/components/BackupList.qml b/plugins/CuraDrive/src/qml/components/BackupList.qml new file mode 100644 index 0000000000..a4a460a885 --- /dev/null +++ b/plugins/CuraDrive/src/qml/components/BackupList.qml @@ -0,0 +1,39 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.2 +import QtQuick.Layouts 1.3 + +import UM 1.1 as UM + +ScrollView +{ + property alias model: backupList.model + width: parent.width + clip: true + ListView + { + id: backupList + width: parent.width + delegate: Item + { + // Add a margin, otherwise the scrollbar is on top of the right most component + width: parent.width - UM.Theme.getSize("default_margin").width + height: childrenRect.height + + BackupListItem + { + id: backupListItem + width: parent.width + } + + Rectangle + { + id: divider + color: UM.Theme.getColor("lining") + height: UM.Theme.getSize("default_lining").height + } + } + } +} diff --git a/plugins/CuraDrive/src/qml/components/BackupListFooter.qml b/plugins/CuraDrive/src/qml/components/BackupListFooter.qml new file mode 100644 index 0000000000..8decdc5c27 --- /dev/null +++ b/plugins/CuraDrive/src/qml/components/BackupListFooter.qml @@ -0,0 +1,46 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 + +import UM 1.3 as UM +import Cura 1.0 as Cura + +import "../components" + +RowLayout +{ + id: backupListFooter + width: parent.width + property bool showInfoButton: false + + Cura.PrimaryButton + { + id: infoButton + text: catalog.i18nc("@button", "Want more?") + iconSource: UM.Theme.getIcon("info") + onClicked: Qt.openUrlExternally("https://goo.gl/forms/QACEP8pP3RV60QYG2") + visible: backupListFooter.showInfoButton + } + + Cura.PrimaryButton + { + id: createBackupButton + text: catalog.i18nc("@button", "Backup Now") + iconSource: UM.Theme.getIcon("plus") + enabled: !CuraDrive.isCreatingBackup && !CuraDrive.isRestoringBackup + onClicked: CuraDrive.createBackup() + busy: CuraDrive.isCreatingBackup + } + + Cura.CheckBoxWithTooltip + { + id: autoBackupEnabled + checked: CuraDrive.autoBackupEnabled + onClicked: CuraDrive.toggleAutoBackup(autoBackupEnabled.checked) + text: catalog.i18nc("@checkbox:description", "Auto Backup") + tooltip: catalog.i18nc("@checkbox:description", "Automatically create a backup each day that Cura is started.") + } +} diff --git a/plugins/CuraDrive/src/qml/components/BackupListItem.qml b/plugins/CuraDrive/src/qml/components/BackupListItem.qml new file mode 100644 index 0000000000..5cdb500b4e --- /dev/null +++ b/plugins/CuraDrive/src/qml/components/BackupListItem.qml @@ -0,0 +1,113 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 +import QtQuick.Dialogs 1.1 + +import UM 1.1 as UM +import Cura 1.0 as Cura + +Item +{ + id: backupListItem + width: parent.width + height: showDetails ? dataRow.height + backupDetails.height : dataRow.height + property bool showDetails: false + + // Backup details toggle animation. + Behavior on height + { + PropertyAnimation + { + duration: 70 + } + } + + RowLayout + { + id: dataRow + spacing: UM.Theme.getSize("wide_margin").width + width: parent.width + height: 50 * screenScaleFactor + + UM.SimpleButton + { + width: UM.Theme.getSize("section_icon").width + height: UM.Theme.getSize("section_icon").height + color: UM.Theme.getColor("small_button_text") + hoverColor: UM.Theme.getColor("small_button_text_hover") + iconSource: UM.Theme.getIcon("info") + onClicked: backupListItem.showDetails = !backupListItem.showDetails + } + + Label + { + text: new Date(modelData.generated_time).toLocaleString(UM.Preferences.getValue("general/language")) + color: UM.Theme.getColor("text") + elide: Text.ElideRight + Layout.minimumWidth: 100 * screenScaleFactor + Layout.maximumWidth: 500 * screenScaleFactor + Layout.fillWidth: true + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } + + Label + { + text: modelData.metadata.description + color: UM.Theme.getColor("text") + elide: Text.ElideRight + Layout.minimumWidth: 100 * screenScaleFactor + Layout.maximumWidth: 500 * screenScaleFactor + Layout.fillWidth: true + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } + + Cura.SecondaryButton + { + text: catalog.i18nc("@button", "Restore") + enabled: !CuraDrive.isCreatingBackup && !CuraDrive.isRestoringBackup + onClicked: confirmRestoreDialog.visible = true + } + + UM.SimpleButton + { + width: UM.Theme.getSize("message_close").width + height: UM.Theme.getSize("message_close").height + color: UM.Theme.getColor("small_button_text") + hoverColor: UM.Theme.getColor("small_button_text_hover") + iconSource: UM.Theme.getIcon("cross1") + onClicked: confirmDeleteDialog.visible = true + } + } + + BackupListItemDetails + { + id: backupDetails + backupDetailsData: modelData + width: parent.width + visible: parent.showDetails + anchors.top: dataRow.bottom + } + + MessageDialog + { + id: confirmDeleteDialog + title: catalog.i18nc("@dialog:title", "Delete Backup") + text: catalog.i18nc("@dialog:info", "Are you sure you want to delete this backup? This cannot be undone.") + standardButtons: StandardButton.Yes | StandardButton.No + onYes: CuraDrive.deleteBackup(modelData.backup_id) + } + + MessageDialog + { + id: confirmRestoreDialog + title: catalog.i18nc("@dialog:title", "Restore Backup") + text: catalog.i18nc("@dialog:info", "You will need to restart Cura before your backup is restored. Do you want to close Cura now?") + standardButtons: StandardButton.Yes | StandardButton.No + onYes: CuraDrive.restoreBackup(modelData.backup_id) + } +} diff --git a/plugins/CuraDrive/src/qml/components/BackupListItemDetails.qml b/plugins/CuraDrive/src/qml/components/BackupListItemDetails.qml new file mode 100644 index 0000000000..4da15c6f16 --- /dev/null +++ b/plugins/CuraDrive/src/qml/components/BackupListItemDetails.qml @@ -0,0 +1,63 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 + +import UM 1.1 as UM + +ColumnLayout +{ + id: backupDetails + width: parent.width + spacing: UM.Theme.getSize("default_margin").width + property var backupDetailsData + + // Cura version + BackupListItemDetailsRow + { + iconSource: UM.Theme.getIcon("application") + label: catalog.i18nc("@backuplist:label", "Cura Version") + value: backupDetailsData.metadata.cura_release + } + + // Machine count. + BackupListItemDetailsRow + { + iconSource: UM.Theme.getIcon("printer_single") + label: catalog.i18nc("@backuplist:label", "Machines") + value: backupDetailsData.metadata.machine_count + } + + // Material count + BackupListItemDetailsRow + { + iconSource: UM.Theme.getIcon("category_material") + label: catalog.i18nc("@backuplist:label", "Materials") + value: backupDetailsData.metadata.material_count + } + + // Profile count. + BackupListItemDetailsRow + { + iconSource: UM.Theme.getIcon("settings") + label: catalog.i18nc("@backuplist:label", "Profiles") + value: backupDetailsData.metadata.profile_count + } + + // Plugin count. + BackupListItemDetailsRow + { + iconSource: UM.Theme.getIcon("plugin") + label: catalog.i18nc("@backuplist:label", "Plugins") + value: backupDetailsData.metadata.plugin_count + } + + // Spacer. + Item + { + width: parent.width + height: UM.Theme.getSize("default_margin").height + } +} diff --git a/plugins/CuraDrive/src/qml/components/BackupListItemDetailsRow.qml b/plugins/CuraDrive/src/qml/components/BackupListItemDetailsRow.qml new file mode 100644 index 0000000000..9e4612fcf8 --- /dev/null +++ b/plugins/CuraDrive/src/qml/components/BackupListItemDetailsRow.qml @@ -0,0 +1,52 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 + +import UM 1.3 as UM + +RowLayout +{ + id: detailsRow + width: parent.width + height: 40 * screenScaleFactor + + property alias iconSource: icon.source + property alias label: detailName.text + property alias value: detailValue.text + + UM.RecolorImage + { + id: icon + width: 18 * screenScaleFactor + height: width + source: "" + color: UM.Theme.getColor("text") + } + + Label + { + id: detailName + color: UM.Theme.getColor("text") + elide: Text.ElideRight + Layout.minimumWidth: 50 * screenScaleFactor + Layout.maximumWidth: 100 * screenScaleFactor + Layout.fillWidth: true + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } + + Label + { + id: detailValue + color: UM.Theme.getColor("text") + elide: Text.ElideRight + Layout.minimumWidth: 50 * screenScaleFactor + Layout.maximumWidth: 100 * screenScaleFactor + Layout.fillWidth: true + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } +} diff --git a/plugins/CuraDrive/src/qml/images/icon.png b/plugins/CuraDrive/src/qml/images/icon.png new file mode 100644 index 0000000000..3f75491786 Binary files /dev/null and b/plugins/CuraDrive/src/qml/images/icon.png differ diff --git a/plugins/CuraDrive/src/qml/main.qml b/plugins/CuraDrive/src/qml/main.qml new file mode 100644 index 0000000000..48bf3b6ea4 --- /dev/null +++ b/plugins/CuraDrive/src/qml/main.qml @@ -0,0 +1,44 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Window 2.2 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +import "components" +import "pages" + +Window +{ + id: curaDriveDialog + minimumWidth: Math.round(UM.Theme.getSize("modal_window_minimum").width) + minimumHeight: Math.round(UM.Theme.getSize("modal_window_minimum").height) + maximumWidth: Math.round(minimumWidth * 1.2) + maximumHeight: Math.round(minimumHeight * 1.2) + width: minimumWidth + height: minimumHeight + color: UM.Theme.getColor("main_background") + title: catalog.i18nc("@title:window", "Cura Backups") + + // Globally available. + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + WelcomePage + { + id: welcomePage + visible: !Cura.API.account.isLoggedIn + } + + BackupsPage + { + id: backupsPage + visible: Cura.API.account.isLoggedIn + } +} diff --git a/plugins/CuraDrive/src/qml/pages/BackupsPage.qml b/plugins/CuraDrive/src/qml/pages/BackupsPage.qml new file mode 100644 index 0000000000..c337294744 --- /dev/null +++ b/plugins/CuraDrive/src/qml/pages/BackupsPage.qml @@ -0,0 +1,75 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +import "../components" + +Item +{ + id: backupsPage + anchors.fill: parent + anchors.margins: UM.Theme.getSize("wide_margin").width + + ColumnLayout + { + spacing: UM.Theme.getSize("wide_margin").height + width: parent.width + anchors.fill: parent + + Label + { + id: backupTitle + text: catalog.i18nc("@title", "My Backups") + font: UM.Theme.getFont("large") + color: UM.Theme.getColor("text") + Layout.fillWidth: true + renderType: Text.NativeRendering + } + + Label + { + text: catalog.i18nc("@empty_state", + "You don't have any backups currently. Use the 'Backup Now' button to create one.") + width: parent.width + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + wrapMode: Label.WordWrap + visible: backupList.model.length == 0 + Layout.fillWidth: true + Layout.fillHeight: true + renderType: Text.NativeRendering + } + + BackupList + { + id: backupList + model: CuraDrive.backups + Layout.fillWidth: true + Layout.fillHeight: true + } + + Label + { + text: catalog.i18nc("@backup_limit_info", + "During the preview phase, you'll be limited to 5 visible backups. Remove a backup to see older ones.") + width: parent.width + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + wrapMode: Label.WordWrap + visible: backupList.model.length > 4 + renderType: Text.NativeRendering + } + + BackupListFooter + { + id: backupListFooter + showInfoButton: backupList.model.length > 4 + } + } +} diff --git a/plugins/CuraDrive/src/qml/pages/WelcomePage.qml b/plugins/CuraDrive/src/qml/pages/WelcomePage.qml new file mode 100644 index 0000000000..0b207bc170 --- /dev/null +++ b/plugins/CuraDrive/src/qml/pages/WelcomePage.qml @@ -0,0 +1,56 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Window 2.2 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +import "../components" + + +Column +{ + id: welcomePage + spacing: UM.Theme.getSize("wide_margin").height + width: parent.width + height: childrenRect.height + anchors.centerIn: parent + + Image + { + id: profileImage + fillMode: Image.PreserveAspectFit + source: "../images/icon.png" + anchors.horizontalCenter: parent.horizontalCenter + width: Math.round(parent.width / 4) + } + + Label + { + id: welcomeTextLabel + text: catalog.i18nc("@description", "Backup and synchronize your Cura settings.") + width: Math.round(parent.width / 2) + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + anchors.horizontalCenter: parent.horizontalCenter + wrapMode: Label.WordWrap + renderType: Text.NativeRendering + } + + Cura.PrimaryButton + { + id: loginButton + width: UM.Theme.getSize("account_button").width + height: UM.Theme.getSize("account_button").height + anchors.horizontalCenter: parent.horizontalCenter + text: catalog.i18nc("@button", "Sign in") + onClicked: Cura.API.account.login() + fixedWidthMode: true + } +} + diff --git a/plugins/CuraEngineBackend/Cura.proto b/plugins/CuraEngineBackend/Cura.proto index 69612210ec..2eabe62366 100644 --- a/plugins/CuraEngineBackend/Cura.proto +++ b/plugins/CuraEngineBackend/Cura.proto @@ -29,6 +29,7 @@ message Object bytes normals = 3; //An array of 3 floats. bytes indices = 4; //An array of ints. repeated Setting settings = 5; // Setting override per object, overruling the global settings. + string name = 6; //Mesh name } message Progress @@ -57,6 +58,7 @@ message Polygon { MoveCombingType = 8; MoveRetractionType = 9; SupportInterfaceType = 10; + PrimeTowerType = 11; } Type type = 1; // Type of move bytes points = 2; // The points of the polygon, or two points if only a line segment (Currently only line segments are used) @@ -107,8 +109,9 @@ message PrintTimeMaterialEstimates { // The print time for each feature and mate float time_travel = 9; float time_retract = 10; float time_support_interface = 11; + float time_prime_tower = 12; - repeated MaterialEstimates materialEstimates = 12; // materialEstimates data + repeated MaterialEstimates materialEstimates = 13; // materialEstimates data } message MaterialEstimates { diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 9a5c95b04d..ceba5f3006 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -10,6 +10,7 @@ from time import time from typing import Any, cast, Dict, List, Optional, Set, TYPE_CHECKING from UM.Backend.Backend import Backend, BackendState +from UM.Scene.Camera import Camera from UM.Scene.SceneNode import SceneNode from UM.Signal import Signal from UM.Logger import Logger @@ -86,8 +87,8 @@ class CuraEngineBackend(QObject, Backend): self._layer_view_active = False #type: bool self._onActiveViewChanged() - self._stored_layer_data = [] #type: List[Arcus.PythonMessage] - self._stored_optimized_layer_data = {} #type: Dict[int, List[Arcus.PythonMessage]] # key is build plate number, then arrays are stored until they go to the ProcessSlicesLayersJob + self._stored_layer_data = [] # type: List[Arcus.PythonMessage] + self._stored_optimized_layer_data = {} # type: Dict[int, List[Arcus.PythonMessage]] # key is build plate number, then arrays are stored until they go to the ProcessSlicesLayersJob self._scene = self._application.getController().getScene() #type: Scene self._scene.sceneChanged.connect(self._onSceneChanged) @@ -151,7 +152,7 @@ class CuraEngineBackend(QObject, Backend): if self._multi_build_plate_model: self._multi_build_plate_model.activeBuildPlateChanged.connect(self._onActiveViewChanged) - self._application.globalContainerStackChanged.connect(self._onGlobalStackChanged) + self._application.getMachineManager().globalContainerChanged.connect(self._onGlobalStackChanged) self._onGlobalStackChanged() # extruder enable / disable. Actually wanted to use machine manager here, but the initialization order causes it to crash @@ -179,8 +180,7 @@ class CuraEngineBackend(QObject, Backend): # This is useful for debugging and used to actually start the engine. # \return list of commands and args / parameters. def getEngineCommand(self) -> List[str]: - json_path = Resources.getPath(Resources.DefinitionContainers, "fdmprinter.def.json") - command = [self._application.getPreferences().getValue("backend/location"), "connect", "127.0.0.1:{0}".format(self._port), "-j", json_path, ""] + command = [self._application.getPreferences().getValue("backend/location"), "connect", "127.0.0.1:{0}".format(self._port), ""] parser = argparse.ArgumentParser(prog = "cura", add_help = False) parser.add_argument("--debug", action = "store_true", default = False, help = "Turn on the debug mode by setting this option.") @@ -204,7 +204,7 @@ class CuraEngineBackend(QObject, Backend): @pyqtSlot() def stopSlicing(self) -> None: - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) if self._slicing: # We were already slicing. Stop the old job. self._terminate() self._createSocket() @@ -230,6 +230,7 @@ class CuraEngineBackend(QObject, Backend): if not self._build_plates_to_be_sliced: self.processingProgress.emit(1.0) Logger.log("w", "Slice unnecessary, nothing has changed that needs reslicing.") + self.setState(BackendState.Done) return if self._process_layers_job: @@ -246,7 +247,7 @@ class CuraEngineBackend(QObject, Backend): num_objects = self._numObjectsPerBuildPlate() self._stored_layer_data = [] - self._stored_optimized_layer_data[build_plate_to_be_sliced] = [] + if build_plate_to_be_sliced not in num_objects or num_objects[build_plate_to_be_sliced] == 0: self._scene.gcode_dict[build_plate_to_be_sliced] = [] #type: ignore #Because we created this attribute above. @@ -254,7 +255,7 @@ class CuraEngineBackend(QObject, Backend): if self._build_plates_to_be_sliced: self.slice() return - + self._stored_optimized_layer_data[build_plate_to_be_sliced] = [] if self._application.getPrintInformation() and build_plate_to_be_sliced == active_build_plate: self._application.getPrintInformation().setToZeroPrintInformation(build_plate_to_be_sliced) @@ -323,7 +324,7 @@ class CuraEngineBackend(QObject, Backend): self._start_slice_job = None if job.isCancelled() or job.getError() or job.getResult() == StartJobResult.Error: - self.backendStateChange.emit(BackendState.Error) + self.setState(BackendState.Error) self.backendError.emit(job) return @@ -332,10 +333,10 @@ class CuraEngineBackend(QObject, Backend): self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice with the current material as it is incompatible with the selected machine or configuration."), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() - self.backendStateChange.emit(BackendState.Error) + self.setState(BackendState.Error) self.backendError.emit(job) else: - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) return if job.getResult() == StartJobResult.SettingError: @@ -343,7 +344,7 @@ class CuraEngineBackend(QObject, Backend): if not self._global_container_stack: Logger.log("w", "Global container stack not assigned to CuraEngineBackend!") return - extruders = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())) + extruders = ExtruderManager.getInstance().getActiveExtruderStacks() error_keys = [] #type: List[str] for extruder in extruders: error_keys.extend(extruder.getErrorKeys()) @@ -363,10 +364,10 @@ class CuraEngineBackend(QObject, Backend): self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice with the current settings. The following settings have errors: {0}").format(", ".join(error_labels)), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() - self.backendStateChange.emit(BackendState.Error) + self.setState(BackendState.Error) self.backendError.emit(job) else: - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) return elif job.getResult() == StartJobResult.ObjectSettingError: @@ -387,7 +388,7 @@ class CuraEngineBackend(QObject, Backend): self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}").format(error_labels = ", ".join(errors.values())), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() - self.backendStateChange.emit(BackendState.Error) + self.setState(BackendState.Error) self.backendError.emit(job) return @@ -396,28 +397,28 @@ class CuraEngineBackend(QObject, Backend): self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because the prime tower or prime position(s) are invalid."), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() - self.backendStateChange.emit(BackendState.Error) + self.setState(BackendState.Error) self.backendError.emit(job) else: - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) 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()), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() - self.backendStateChange.emit(BackendState.Error) + self.setState(BackendState.Error) self.backendError.emit(job) return if job.getResult() == StartJobResult.NothingToSlice: if self._application.platformActivity: - self._error_message = Message(catalog.i18nc("@info:status", "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit."), + self._error_message = Message(catalog.i18nc("@info:status", "Nothing to slice because none of the models fit the build volume or are assigned to a disabled extruder. Please scale or rotate models to fit, or enable an extruder."), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() - self.backendStateChange.emit(BackendState.Error) + self.setState(BackendState.Error) self.backendError.emit(job) else: - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) self._invokeSlice() return @@ -425,7 +426,7 @@ class CuraEngineBackend(QObject, Backend): self._socket.sendMessage(job.getSliceMessage()) # Notify the user that it's now up to the backend to do it's job - self.backendStateChange.emit(BackendState.Processing) + self.setState(BackendState.Processing) if self._slice_start_time: Logger.log("d", "Sending slice message took %s seconds", time() - self._slice_start_time ) @@ -443,7 +444,7 @@ class CuraEngineBackend(QObject, Backend): for node in DepthFirstIterator(self._scene.getRoot()): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. if node.callDecoration("isBlockSlicing"): enable_timer = False - self.backendStateChange.emit(BackendState.Disabled) + self.setState(BackendState.Disabled) self._is_disabled = True gcode_list = node.callDecoration("getGCodeList") if gcode_list is not None: @@ -452,7 +453,7 @@ class CuraEngineBackend(QObject, Backend): if self._use_timer == enable_timer: return self._use_timer if enable_timer: - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) self.enableTimer() return True else: @@ -476,7 +477,7 @@ class CuraEngineBackend(QObject, Backend): # # \param source The scene node that was changed. def _onSceneChanged(self, source: SceneNode) -> None: - if not isinstance(source, SceneNode): + if not source.callDecoration("isSliceable"): return # This case checks if the source node is a node that contains GCode. In this case the @@ -519,7 +520,7 @@ class CuraEngineBackend(QObject, Backend): self._build_plates_to_be_sliced.append(build_plate_number) self.printDurationMessage.emit(source_build_plate_number, {}, []) self.processingProgress.emit(0.0) - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) # if not self._use_timer: # With manually having to slice, we want to clear the old invalid layer data. self._clearLayerData(build_plate_changed) @@ -568,7 +569,7 @@ class CuraEngineBackend(QObject, Backend): self.stopSlicing() self.markSliceAll() self.processingProgress.emit(0.0) - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) if not self._use_timer: # With manually having to slice, we want to clear the old invalid layer data. self._clearLayerData() @@ -614,7 +615,7 @@ class CuraEngineBackend(QObject, Backend): # \param message The protobuf message containing the slicing progress. def _onProgressMessage(self, message: Arcus.PythonMessage) -> None: self.processingProgress.emit(message.amount) - self.backendStateChange.emit(BackendState.Processing) + self.setState(BackendState.Processing) def _invokeSlice(self) -> None: if self._use_timer: @@ -633,7 +634,7 @@ class CuraEngineBackend(QObject, Backend): # # \param message The protobuf message signalling that slicing is finished. def _onSlicingFinishedMessage(self, message: Arcus.PythonMessage) -> None: - self.backendStateChange.emit(BackendState.Done) + self.setState(BackendState.Done) self.processingProgress.emit(1.0) gcode_list = self._scene.gcode_dict[self._start_slice_job_build_plate] #type: ignore #Because we generate this attribute dynamically. @@ -821,7 +822,7 @@ class CuraEngineBackend(QObject, Backend): extruder.propertyChanged.disconnect(self._onSettingChanged) extruder.containersChanged.disconnect(self._onChanged) - self._global_container_stack = self._application.getGlobalContainerStack() + self._global_container_stack = self._application.getMachineManager().activeMachine if self._global_container_stack: self._global_container_stack.propertyChanged.connect(self._onSettingChanged) # Note: Only starts slicing when the value changed. @@ -833,7 +834,10 @@ class CuraEngineBackend(QObject, Backend): self._onChanged() def _onProcessLayersFinished(self, job: ProcessSlicedLayersJob) -> None: - del self._stored_optimized_layer_data[job.getBuildPlate()] + if job.getBuildPlate() in self._stored_optimized_layer_data: + del self._stored_optimized_layer_data[job.getBuildPlate()] + else: + Logger.log("w", "The optimized layer data was already deleted for buildplate %s", job.getBuildPlate()) self._process_layers_job = None Logger.log("d", "See if there is more to slice(2)...") self._invokeSlice() diff --git a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py index 3bd6d79198..3cc23130ea 100644 --- a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py +++ b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py @@ -2,6 +2,7 @@ #Cura is released under the terms of the LGPLv3 or higher. import gc +import sys from UM.Job import Job from UM.Application import Application @@ -95,23 +96,35 @@ class ProcessSlicedLayersJob(Job): layer_count = len(self._layers) # Find the minimum layer number + # When disabling the remove empty first layers setting, the minimum layer number will be a positive + # value. In that case the first empty layers will be discarded and start processing layers from the + # first layer with data. # When using a raft, the raft layers are sent as layers < 0. Instead of allowing layers < 0, we - # instead simply offset all other layers so the lowest layer is always 0. It could happens that - # the first raft layer has value -8 but there are just 4 raft (negative) layers. - min_layer_number = 0 + # simply offset all other layers so the lowest layer is always 0. It could happens that the first + # raft layer has value -8 but there are just 4 raft (negative) layers. + min_layer_number = sys.maxsize negative_layers = 0 for layer in self._layers: - if layer.id < min_layer_number: - min_layer_number = layer.id - if layer.id < 0: - negative_layers += 1 + if layer.repeatedMessageCount("path_segment") > 0: + if layer.id < min_layer_number: + min_layer_number = layer.id + if layer.id < 0: + negative_layers += 1 current_layer = 0 for layer in self._layers: - # Negative layers are offset by the minimum layer number, but the positive layers are just - # offset by the number of negative layers so there is no layer gap between raft and model - abs_layer_number = layer.id + abs(min_layer_number) if layer.id < 0 else layer.id + negative_layers + # If the layer is below the minimum, it means that there is no data, so that we don't create a layer + # data. However, if there are empty layers in between, we compute them. + if layer.id < min_layer_number: + continue + + # Layers are offset by the minimum layer number. In case the raft (negative layers) is being used, + # then the absolute layer number is adjusted by removing the empty layers that can be in between raft + # and the model + abs_layer_number = layer.id - min_layer_number + if layer.id >= 0 and negative_layers != 0: + abs_layer_number += (min_layer_number + negative_layers) layer_data.addLayer(abs_layer_number) this_layer = layer_data.getLayer(abs_layer_number) @@ -124,6 +137,7 @@ class ProcessSlicedLayersJob(Job): extruder = polygon.extruder line_types = numpy.fromstring(polygon.line_type, dtype="u1") # Convert bytearray to numpy array + line_types = line_types.reshape((-1,1)) points = numpy.fromstring(polygon.points, dtype="f4") # Convert bytearray to numpy array @@ -178,11 +192,11 @@ class ProcessSlicedLayersJob(Job): # Find out colors per extruder global_container_stack = Application.getInstance().getGlobalContainerStack() manager = ExtruderManager.getInstance() - extruders = list(manager.getMachineExtruders(global_container_stack.getId())) + extruders = manager.getActiveExtruderStacks() if extruders: material_color_map = numpy.zeros((len(extruders), 4), dtype=numpy.float32) for extruder in extruders: - position = int(extruder.getMetaDataEntry("position", default="0")) # Get the position + position = int(extruder.getMetaDataEntry("position", default = "0")) try: default_color = ExtrudersModel.defaultColors[position] except IndexError: diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 0ebcafdbb2..d3882a1209 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -41,11 +41,15 @@ class StartJobResult(IntEnum): ## Formatter class that handles token expansion in start/end gcode class GcodeStartEndFormatter(Formatter): - def get_value(self, key: str, args: str, kwargs: dict, default_extruder_nr: str = "-1") -> str: #type: ignore # [CodeStyle: get_value is an overridden function from the Formatter class] + def __init__(self, default_extruder_nr: int = -1) -> None: + super().__init__() + self._default_extruder_nr = default_extruder_nr + + def get_value(self, key: str, args: str, kwargs: dict) -> str: #type: ignore # [CodeStyle: get_value is an overridden function from the Formatter class] # The kwargs dictionary contains a dictionary for each stack (with a string of the extruder_nr as their key), # and a default_extruder_nr to use when no extruder_nr is specified - extruder_nr = int(default_extruder_nr) + extruder_nr = self._default_extruder_nr key_fragments = [fragment.strip() for fragment in key.split(",")] if len(key_fragments) == 2: @@ -62,11 +66,19 @@ class GcodeStartEndFormatter(Formatter): return "{" + key + "}" key = key_fragments[0] - try: - return kwargs[str(extruder_nr)][key] - except KeyError: + + default_value_str = "{" + key + "}" + value = default_value_str + # "-1" is global stack, and if the setting value exists in the global stack, use it as the fallback value. + if key in kwargs["-1"]: + value = kwargs["-1"] + if str(extruder_nr) in kwargs and key in kwargs[str(extruder_nr)]: + value = kwargs[str(extruder_nr)][key] + + if value == default_value_str: Logger.log("w", "Unable to replace '%s' placeholder in start/end g-code", key) - return "{" + key + "}" + + return value ## Job class that builds up the message of scene data to send to CuraEngine. @@ -220,8 +232,10 @@ class StartSliceJob(Job): stack = global_stack skip_group = False for node in group: + # Only check if the printing extruder is enabled for printing meshes + is_non_printing_mesh = node.callDecoration("evaluateIsNonPrintingMesh") extruder_position = node.callDecoration("getActiveExtruderPosition") - if not extruders_enabled[extruder_position]: + if not is_non_printing_mesh and not extruders_enabled[extruder_position]: skip_group = True has_model_with_disabled_extruders = True associated_disabled_extruders.add(extruder_position) @@ -245,7 +259,10 @@ class StartSliceJob(Job): self._buildGlobalInheritsStackMessage(stack) # Build messages for extruder stacks - for extruder_stack in ExtruderManager.getInstance().getMachineExtruders(stack.getId()): + # Send the extruder settings in the order of extruder positions. Somehow, if you send e.g. extruder 3 first, + # then CuraEngine can slice with the wrong settings. This I think should be fixed in CuraEngine as well. + extruder_stack_list = sorted(list(global_stack.extruders.items()), key = lambda item: int(item[0])) + for _, extruder_stack in extruder_stack_list: self._buildExtruderMessage(extruder_stack) for group in filtered_object_groups: @@ -268,7 +285,7 @@ class StartSliceJob(Job): obj = group_message.addRepeatedMessage("objects") obj.id = id(object) - + obj.name = object.getName() indices = mesh_data.getIndices() if indices is not None: flat_verts = numpy.take(verts, indices.flatten(), axis=0) @@ -306,7 +323,7 @@ class StartSliceJob(Job): value = stack.getProperty(key, "value") result[key] = value Job.yieldThread() - + result["print_bed_temperature"] = result["material_bed_temperature"] # Renamed settings. result["print_temperature"] = result["material_print_temperature"] result["time"] = time.strftime("%H:%M:%S") #Some extra settings. @@ -331,13 +348,13 @@ class StartSliceJob(Job): "-1": self._buildReplacementTokens(global_stack) } - for extruder_stack in ExtruderManager.getInstance().getMachineExtruders(global_stack.getId()): + for extruder_stack in ExtruderManager.getInstance().getActiveExtruderStacks(): extruder_nr = extruder_stack.getProperty("extruder_nr", "value") self._all_extruders_settings[str(extruder_nr)] = self._buildReplacementTokens(extruder_stack) try: # any setting can be used as a token - fmt = GcodeStartEndFormatter() + fmt = GcodeStartEndFormatter(default_extruder_nr = default_extruder_nr) settings = self._all_extruders_settings.copy() settings["default_extruder_nr"] = default_extruder_nr return str(fmt.format(value, **settings)) @@ -438,8 +455,7 @@ class StartSliceJob(Job): Job.yieldThread() # Ensure that the engine is aware what the build extruder is. - if stack.getProperty("machine_extruder_count", "value") > 1: - changed_setting_keys.add("extruder_nr") + changed_setting_keys.add("extruder_nr") # Get values for all changed settings for key in changed_setting_keys: diff --git a/plugins/CuraEngineBackend/plugin.json b/plugins/CuraEngineBackend/plugin.json index e5df06f228..28f0e294e7 100644 --- a/plugins/CuraEngineBackend/plugin.json +++ b/plugins/CuraEngineBackend/plugin.json @@ -2,7 +2,7 @@ "name": "CuraEngine Backend", "author": "Ultimaker B.V.", "description": "Provides the link to the CuraEngine slicing backend.", - "api": 4, - "version": "1.0.0", + "api": "6.0", + "version": "1.0.1", "i18n-catalog": "cura" } diff --git a/plugins/CuraProfileReader/CuraProfileReader.py b/plugins/CuraProfileReader/CuraProfileReader.py index 5957b2cecf..11e58dac6d 100644 --- a/plugins/CuraProfileReader/CuraProfileReader.py +++ b/plugins/CuraProfileReader/CuraProfileReader.py @@ -50,7 +50,7 @@ class CuraProfileReader(ProfileReader): # \param profile_id \type{str} The name of the profile. # \return \type{List[Tuple[str,str]]} List of serialized profile strings and matching profile names. def _upgradeProfile(self, serialized, profile_id): - parser = configparser.ConfigParser(interpolation=None) + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) if "general" not in parser: diff --git a/plugins/CuraProfileReader/plugin.json b/plugins/CuraProfileReader/plugin.json index 004a1ade4d..169fb43360 100644 --- a/plugins/CuraProfileReader/plugin.json +++ b/plugins/CuraProfileReader/plugin.json @@ -1,8 +1,8 @@ { "name": "Cura Profile Reader", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides support for importing Cura profiles.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/CuraProfileWriter/plugin.json b/plugins/CuraProfileWriter/plugin.json index d9accce770..9627c754d7 100644 --- a/plugins/CuraProfileWriter/plugin.json +++ b/plugins/CuraProfileWriter/plugin.json @@ -1,8 +1,8 @@ { "name": "Cura Profile Writer", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides support for exporting Cura profiles.", - "api": 4, + "api": "6.0", "i18n-catalog":"cura" } diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py index f01e8cb276..9c4d498d7e 100644 --- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py +++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py @@ -1,18 +1,19 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from PyQt5.QtCore import QUrl from PyQt5.QtGui import QDesktopServices +from typing import Set + from UM.Extension import Extension from UM.Application import Application from UM.Logger import Logger from UM.i18n import i18nCatalog from UM.Settings.ContainerRegistry import ContainerRegistry -from cura.Settings.GlobalStack import GlobalStack - from .FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob +from .FirmwareUpdateCheckerMessage import FirmwareUpdateCheckerMessage i18n_catalog = i18nCatalog("cura") @@ -21,35 +22,35 @@ i18n_catalog = i18nCatalog("cura") # The plugin is currently only usable for applications maintained by Ultimaker. But it should be relatively easy # to change it to work for other applications. class FirmwareUpdateChecker(Extension): - JEDI_VERSION_URL = "http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources" - def __init__(self): + def __init__(self) -> None: super().__init__() - # Initialize the Preference called `latest_checked_firmware` that stores the last version - # checked for the UM3. In the future if we need to check other printers' firmware - Application.getInstance().getPreferences().addPreference("info/latest_checked_firmware", "") - # Listen to a Signal that indicates a change in the list of printers, just if the user has enabled the - # 'check for updates' option + # "check for updates" option Application.getInstance().getPreferences().addPreference("info/automatic_update_check", True) if Application.getInstance().getPreferences().getValue("info/automatic_update_check"): ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded) - self._download_url = None self._check_job = None + self._checked_printer_names = set() # type: Set[str] ## Callback for the message that is spawned when there is a new version. def _onActionTriggered(self, message, action): - if action == "download": - if self._download_url is not None: - QDesktopServices.openUrl(QUrl(self._download_url)) - - def _onSetDownloadUrl(self, download_url): - self._download_url = download_url + if action == FirmwareUpdateCheckerMessage.STR_ACTION_DOWNLOAD: + machine_id = message.getMachineId() + download_url = message.getDownloadUrl() + if download_url is not None: + if QDesktopServices.openUrl(QUrl(download_url)): + Logger.log("i", "Redirected browser to {0} to show newly available firmware.".format(download_url)) + else: + Logger.log("e", "Can't reach URL: {0}".format(download_url)) + else: + Logger.log("e", "Can't find URL for {0}".format(machine_id)) def _onContainerAdded(self, container): # Only take care when a new GlobalStack was added + from cura.Settings.GlobalStack import GlobalStack # otherwise circular imports if isinstance(container, GlobalStack): self.checkFirmwareVersion(container, True) @@ -63,13 +64,18 @@ class FirmwareUpdateChecker(Extension): # \param silent type(boolean) Suppresses messages other than "new version found" messages. # This is used when checking for a new firmware version at startup. def checkFirmwareVersion(self, container = None, silent = False): - # Do not run multiple check jobs in parallel - if self._check_job is not None: - Logger.log("i", "A firmware update check is already running, do nothing.") + container_name = container.definition.getName() + if container_name in self._checked_printer_names: + return + self._checked_printer_names.add(container_name) + + metadata = container.definition.getMetaData().get("firmware_update_info") + if metadata is None: + Logger.log("i", "No machine with name {0} in list of firmware to check.".format(container_name)) return - self._check_job = FirmwareUpdateCheckerJob(container = container, silent = silent, url = self.JEDI_VERSION_URL, - callback = self._onActionTriggered, - set_download_url_callback = self._onSetDownloadUrl) + self._check_job = FirmwareUpdateCheckerJob(silent = silent, + machine_name = container_name, metadata = metadata, + callback = self._onActionTriggered) self._check_job.start() self._check_job.finished.connect(self._onJobFinished) diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py index eadacf2c02..a1460cca3f 100644 --- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py +++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py @@ -1,13 +1,18 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from UM.Application import Application from UM.Message import Message from UM.Logger import Logger from UM.Job import Job +from UM.Version import Version import urllib.request -import codecs +from urllib.error import URLError +from typing import Dict, Optional + +from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup, getSettingsKeyForMachine +from .FirmwareUpdateCheckerMessage import FirmwareUpdateCheckerMessage from UM.i18n import i18nCatalog i18n_catalog = i18nCatalog("cura") @@ -15,75 +20,97 @@ i18n_catalog = i18nCatalog("cura") ## This job checks if there is an update available on the provided URL. class FirmwareUpdateCheckerJob(Job): - def __init__(self, container = None, silent = False, url = None, callback = None, set_download_url_callback = None): - super().__init__() - self._container = container - self.silent = silent - self._url = url - self._callback = callback - self._set_download_url_callback = set_download_url_callback + STRING_ZERO_VERSION = "0.0.0" + STRING_EPSILON_VERSION = "0.0.1" + ZERO_VERSION = Version(STRING_ZERO_VERSION) + EPSILON_VERSION = Version(STRING_EPSILON_VERSION) - def run(self): - if not self._url: - Logger.log("e", "Can not check for a new release. URL not set!") - return + def __init__(self, silent, machine_name, metadata, callback) -> None: + super().__init__() + self.silent = silent + self._callback = callback + + self._machine_name = machine_name + self._metadata = metadata + self._lookups = FirmwareUpdateCheckerLookup(self._machine_name, self._metadata) + self._headers = {} # type:Dict[str, str] # Don't set headers yet. + + def getUrlResponse(self, url: str) -> str: + result = self.STRING_ZERO_VERSION try: - application_name = Application.getInstance().getApplicationName() - headers = {"User-Agent": "%s - %s" % (application_name, Application.getInstance().getVersion())} - request = urllib.request.Request(self._url, headers = headers) - current_version_file = urllib.request.urlopen(request) - reader = codecs.getreader("utf-8") + request = urllib.request.Request(url, headers = self._headers) + response = urllib.request.urlopen(request) + result = response.read().decode("utf-8") + except URLError: + Logger.log("w", "Could not reach '{0}', if this URL is old, consider removal.".format(url)) + return result - # get machine name from the definition container - machine_name = self._container.definition.getName() - machine_name_parts = machine_name.lower().split(" ") + def parseVersionResponse(self, response: str) -> Version: + raw_str = response.split("\n", 1)[0].rstrip() + return Version(raw_str) + + def getCurrentVersion(self) -> Version: + max_version = self.ZERO_VERSION + if self._lookups is None: + return max_version + + machine_urls = self._lookups.getCheckUrls() + if machine_urls is not None: + for url in machine_urls: + version = self.parseVersionResponse(self.getUrlResponse(url)) + if version > max_version: + max_version = version + + if max_version < self.EPSILON_VERSION: + Logger.log("w", "MachineID {0} not handled!".format(self._lookups.getMachineName())) + + return max_version + + def run(self): + try: + # Initialize a Preference that stores the last version checked for this printer. + Application.getInstance().getPreferences().addPreference( + getSettingsKeyForMachine(self._lookups.getMachineId()), "") + + # Get headers + application_name = Application.getInstance().getApplicationName() + application_version = Application.getInstance().getVersion() + self._headers = {"User-Agent": "%s - %s" % (application_name, application_version)} # If it is not None, then we compare between the checked_version and the current_version - # Now we just do that if the active printer is Ultimaker 3 or Ultimaker 3 Extended or any - # other Ultimaker 3 that will come in the future - if len(machine_name_parts) >= 2 and machine_name_parts[:2] == ["ultimaker", "3"]: - Logger.log("i", "You have a UM3 in printer list. Let's check the firmware!") + machine_id = self._lookups.getMachineId() + if machine_id is not None: + Logger.log("i", "You have a(n) {0} in the printer list. Do firmware-check.".format(self._machine_name)) - # Nothing to parse, just get the string - # TODO: In the future may be done by parsing a JSON file with diferent version for each printer model - current_version = reader(current_version_file).readline().rstrip() + current_version = self.getCurrentVersion() - # If it is the first time the version is checked, the checked_version is '' - checked_version = Application.getInstance().getPreferences().getValue("info/latest_checked_firmware") + # This case indicates that was an error checking the version. + # It happens for instance when not connected to internet. + if current_version == self.ZERO_VERSION: + return - # If the checked_version is '', it's because is the first time we check firmware and in this case + # If it is the first time the version is checked, the checked_version is "" + setting_key_str = getSettingsKeyForMachine(machine_id) + checked_version = Version(Application.getInstance().getPreferences().getValue(setting_key_str)) + + # If the checked_version is "", it's because is the first time we check firmware and in this case # we will not show the notification, but we will store it for the next time - Application.getInstance().getPreferences().setValue("info/latest_checked_firmware", current_version) - Logger.log("i", "Reading firmware version of %s: checked = %s - latest = %s", machine_name, checked_version, current_version) + Application.getInstance().getPreferences().setValue(setting_key_str, current_version) + Logger.log("i", "Reading firmware version of %s: checked = %s - latest = %s", + self._machine_name, checked_version, current_version) # The first time we want to store the current version, the notification will not be shown, # because the new version of Cura will be release before the firmware and we don't want to # notify the user when no new firmware version is available. if (checked_version != "") and (checked_version != current_version): Logger.log("i", "SHOWING FIRMWARE UPDATE MESSAGE") - - message = Message(i18n_catalog.i18nc( - "@info Don't translate {machine_name}, since it gets replaced by a printer name!", - "New features are available for your {machine_name}! It is recommended to update the firmware on your printer.").format( - machine_name=machine_name), - title=i18n_catalog.i18nc( - "@info:title The %s gets replaced with the printer name.", - "New %s firmware available") % machine_name) - - message.addAction("download", - i18n_catalog.i18nc("@action:button", "How to update"), - "[no_icon]", - "[no_description]", - button_style=Message.ActionButtonStyle.LINK, - button_align=Message.ActionButtonStyle.BUTTON_ALIGN_LEFT) - - - # If we do this in a cool way, the download url should be available in the JSON file - if self._set_download_url_callback: - self._set_download_url_callback("https://ultimaker.com/en/resources/20500-upgrade-firmware") + message = FirmwareUpdateCheckerMessage(machine_id, self._machine_name, + self._lookups.getRedirectUserUrl()) message.actionTriggered.connect(self._callback) message.show() + else: + Logger.log("i", "No machine with name {0} in list of firmware to check.".format(self._machine_name)) except Exception as e: Logger.log("w", "Failed to check for new version: %s", e) diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py new file mode 100644 index 0000000000..c78e6f6025 --- /dev/null +++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py @@ -0,0 +1,35 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from typing import List, Optional + +from UM.i18n import i18nCatalog +i18n_catalog = i18nCatalog("cura") + + +def getSettingsKeyForMachine(machine_id: int) -> str: + return "info/latest_checked_firmware_for_{0}".format(machine_id) + + +class FirmwareUpdateCheckerLookup: + + def __init__(self, machine_name, machine_json) -> None: + # Parse all the needed lookup-tables from the ".json" file(s) in the resources folder. + self._machine_id = machine_json.get("id") + self._machine_name = machine_name.lower() # Lower in-case upper-case chars are added to the original json. + self._check_urls = [] # type:List[str] + for check_url in machine_json.get("check_urls", []): + self._check_urls.append(check_url) + self._redirect_user = machine_json.get("update_url") + + def getMachineId(self) -> Optional[int]: + return self._machine_id + + def getMachineName(self) -> Optional[int]: + return self._machine_name + + def getCheckUrls(self) -> Optional[List[str]]: + return self._check_urls + + def getRedirectUserUrl(self) -> Optional[str]: + return self._redirect_user diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py new file mode 100644 index 0000000000..58c00850cb --- /dev/null +++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py @@ -0,0 +1,37 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from UM.i18n import i18nCatalog +from UM.Message import Message + +i18n_catalog = i18nCatalog("cura") + + +# Make a separate class, since we need an extra field: The machine-id that this message is about. +class FirmwareUpdateCheckerMessage(Message): + STR_ACTION_DOWNLOAD = "download" + + def __init__(self, machine_id: int, machine_name: str, download_url: str) -> None: + super().__init__(i18n_catalog.i18nc( + "@info Don't translate {machine_name}, since it gets replaced by a printer name!", + "New features are available for your {machine_name}! It is recommended to update the firmware on your printer.").format( + machine_name = machine_name), + title = i18n_catalog.i18nc( + "@info:title The %s gets replaced with the printer name.", + "New %s firmware available") % machine_name) + + self._machine_id = machine_id + self._download_url = download_url + + self.addAction(self.STR_ACTION_DOWNLOAD, + i18n_catalog.i18nc("@action:button", "How to update"), + "[no_icon]", + "[no_description]", + button_style = Message.ActionButtonStyle.LINK, + button_align = Message.ActionButtonAlignment.ALIGN_LEFT) + + def getMachineId(self) -> int: + return self._machine_id + + def getDownloadUrl(self) -> str: + return self._download_url diff --git a/plugins/FirmwareUpdateChecker/__init__.py b/plugins/FirmwareUpdateChecker/__init__.py index 3fae15e826..892c9c0320 100644 --- a/plugins/FirmwareUpdateChecker/__init__.py +++ b/plugins/FirmwareUpdateChecker/__init__.py @@ -1,12 +1,8 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from UM.i18n import i18nCatalog - from . import FirmwareUpdateChecker -i18n_catalog = i18nCatalog("cura") - def getMetaData(): return {} diff --git a/plugins/FirmwareUpdateChecker/plugin.json b/plugins/FirmwareUpdateChecker/plugin.json index d6a9f9fbd7..6c55d77fd8 100644 --- a/plugins/FirmwareUpdateChecker/plugin.json +++ b/plugins/FirmwareUpdateChecker/plugin.json @@ -1,8 +1,8 @@ { "name": "Firmware Update Checker", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Checks for firmware updates.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/FirmwareUpdateChecker/tests/TestFirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/tests/TestFirmwareUpdateChecker.py new file mode 100644 index 0000000000..cf61e46d29 --- /dev/null +++ b/plugins/FirmwareUpdateChecker/tests/TestFirmwareUpdateChecker.py @@ -0,0 +1,62 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import pytest + +from unittest.mock import MagicMock + +from UM.Version import Version + +import FirmwareUpdateChecker + +json_data = \ + { + "ned": + { + "id": 1, + "name": "ned", + "check_urls": [""], + "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware", + "version_parser": "default" + }, + "olivia": + { + "id": 3, + "name": "olivia", + "check_urls": [""], + "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware", + "version_parser": "default" + }, + "emmerson": + { + "id": 5, + "name": "emmerson", + "check_urls": [""], + "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware", + "version_parser": "default" + } + } + +@pytest.mark.parametrize("name, id", [ + ("ned" , 1), + ("olivia" , 3), + ("emmerson", 5), +]) +def test_FirmwareUpdateCheckerLookup(id, name): + lookup = FirmwareUpdateChecker.FirmwareUpdateCheckerLookup.FirmwareUpdateCheckerLookup(name, json_data.get(name)) + + assert lookup.getMachineName() == name + assert lookup.getMachineId() == id + assert len(lookup.getCheckUrls()) >= 1 + assert lookup.getRedirectUserUrl() is not None + +@pytest.mark.parametrize("name, version", [ + ("ned" , Version("5.1.2.3")), + ("olivia" , Version("4.3.2.1")), + ("emmerson", Version("6.7.8.1")), +]) +def test_FirmwareUpdateCheckerJob_getCurrentVersion(name, version): + machine_data = json_data.get(name) + job = FirmwareUpdateChecker.FirmwareUpdateCheckerJob.FirmwareUpdateCheckerJob(False, name, machine_data, MagicMock) + job.getUrlResponse = MagicMock(return_value = str(version)) # Pretend like we got a good response from the server + assert job.getCurrentVersion() == version diff --git a/plugins/FirmwareUpdateChecker/tests/__init__.py b/plugins/FirmwareUpdateChecker/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py new file mode 100644 index 0000000000..e2b0041674 --- /dev/null +++ b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py @@ -0,0 +1,69 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from cura.CuraApplication import CuraApplication +from UM.Settings.DefinitionContainer import DefinitionContainer +from cura.MachineAction import MachineAction +from UM.i18n import i18nCatalog +from UM.Settings.ContainerRegistry import ContainerRegistry +from cura.PrinterOutput.FirmwareUpdater import FirmwareUpdateState + +from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject +from typing import Optional + +MYPY = False +if MYPY: + from cura.PrinterOutput.FirmwareUpdater import FirmwareUpdater + from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice + from UM.Settings.ContainerInterface import ContainerInterface + +catalog = i18nCatalog("cura") + +## Upgrade the firmware of a machine by USB with this action. +class FirmwareUpdaterMachineAction(MachineAction): + def __init__(self) -> None: + super().__init__("UpgradeFirmware", catalog.i18nc("@action", "Update Firmware")) + self._qml_url = "FirmwareUpdaterMachineAction.qml" + ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded) + + self._active_output_device = None # type: Optional[PrinterOutputDevice] + self._active_firmware_updater = None # type: Optional[FirmwareUpdater] + + CuraApplication.getInstance().engineCreatedSignal.connect(self._onEngineCreated) + + def _onEngineCreated(self) -> None: + CuraApplication.getInstance().getMachineManager().outputDevicesChanged.connect(self._onOutputDevicesChanged) + + def _onContainerAdded(self, container: "ContainerInterface") -> None: + # Add this action as a supported action to all machine definitions if they support USB connection + if isinstance(container, DefinitionContainer) and container.getMetaDataEntry("type") == "machine" and container.getMetaDataEntry("supports_usb_connection"): + CuraApplication.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey()) + + def _onOutputDevicesChanged(self) -> None: + if self._active_output_device and self._active_output_device.activePrinter: + self._active_output_device.activePrinter.getController().canUpdateFirmwareChanged.disconnect(self._onControllerCanUpdateFirmwareChanged) + + output_devices = CuraApplication.getInstance().getMachineManager().printerOutputDevices + self._active_output_device = output_devices[0] if output_devices else None + + if self._active_output_device and self._active_output_device.activePrinter: + self._active_output_device.activePrinter.getController().canUpdateFirmwareChanged.connect(self._onControllerCanUpdateFirmwareChanged) + + self.outputDeviceCanUpdateFirmwareChanged.emit() + + def _onControllerCanUpdateFirmwareChanged(self) -> None: + self.outputDeviceCanUpdateFirmwareChanged.emit() + + outputDeviceCanUpdateFirmwareChanged = pyqtSignal() + @pyqtProperty(QObject, notify = outputDeviceCanUpdateFirmwareChanged) + def firmwareUpdater(self) -> Optional["FirmwareUpdater"]: + if self._active_output_device and self._active_output_device.activePrinter and self._active_output_device.activePrinter.getController() is not None and self._active_output_device.activePrinter.getController().can_update_firmware: + self._active_firmware_updater = self._active_output_device.getFirmwareUpdater() + return self._active_firmware_updater + + elif self._active_firmware_updater and self._active_firmware_updater.firmwareUpdateState not in [FirmwareUpdateState.idle, FirmwareUpdateState.completed]: + # During a firmware update, the PrinterOutputDevice is disconnected but the FirmwareUpdater is still there + return self._active_firmware_updater + + self._active_firmware_updater = None + return None diff --git a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml new file mode 100644 index 0000000000..b5b6c15f50 --- /dev/null +++ b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml @@ -0,0 +1,191 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 +import QtQuick.Layouts 1.1 +import QtQuick.Window 2.1 +import QtQuick.Dialogs 1.2 // For filedialog + +import UM 1.2 as UM +import Cura 1.0 as Cura + + +Cura.MachineAction +{ + anchors.fill: parent; + property bool printerConnected: Cura.MachineManager.printerConnected + property var activeOutputDevice: printerConnected ? Cura.MachineManager.printerOutputDevices[0] : null + property bool canUpdateFirmware: activeOutputDevice ? activeOutputDevice.activePrinter.canUpdateFirmware : false + + Column + { + id: firmwareUpdaterMachineAction + anchors.fill: parent; + UM.I18nCatalog { id: catalog; name: "cura"} + spacing: UM.Theme.getSize("default_margin").height + + Label + { + width: parent.width + text: catalog.i18nc("@title", "Update Firmware") + wrapMode: Text.WordWrap + font.pointSize: 18 + } + Label + { + width: parent.width + wrapMode: Text.WordWrap + text: catalog.i18nc("@label", "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work.") + } + + Label + { + width: parent.width + wrapMode: Text.WordWrap + text: catalog.i18nc("@label", "The firmware shipping with new printers works, but new versions tend to have more features and improvements."); + } + + Row + { + anchors.horizontalCenter: parent.horizontalCenter + width: childrenRect.width + spacing: UM.Theme.getSize("default_margin").width + property string firmwareName: Cura.MachineManager.activeMachine.getDefaultFirmwareName() + Button + { + id: autoUpgradeButton + text: catalog.i18nc("@action:button", "Automatically upgrade Firmware"); + enabled: parent.firmwareName != "" && canUpdateFirmware + onClicked: + { + updateProgressDialog.visible = true; + activeOutputDevice.updateFirmware(parent.firmwareName); + } + } + Button + { + id: manualUpgradeButton + text: catalog.i18nc("@action:button", "Upload custom Firmware"); + enabled: canUpdateFirmware + onClicked: + { + customFirmwareDialog.open() + } + } + } + + Label + { + width: parent.width + wrapMode: Text.WordWrap + visible: !printerConnected && !updateProgressDialog.visible + text: catalog.i18nc("@label", "Firmware can not be updated because there is no connection with the printer."); + } + + Label + { + width: parent.width + wrapMode: Text.WordWrap + visible: printerConnected && !canUpdateFirmware + text: catalog.i18nc("@label", "Firmware can not be updated because the connection with the printer does not support upgrading firmware."); + } + } + + FileDialog + { + id: customFirmwareDialog + title: catalog.i18nc("@title:window", "Select custom firmware") + nameFilters: "Firmware image files (*.hex)" + selectExisting: true + onAccepted: + { + updateProgressDialog.visible = true; + activeOutputDevice.updateFirmware(fileUrl); + } + } + + UM.Dialog + { + id: updateProgressDialog + + width: minimumWidth + minimumWidth: 500 * screenScaleFactor + height: minimumHeight + minimumHeight: 100 * screenScaleFactor + + modality: Qt.ApplicationModal + + title: catalog.i18nc("@title:window","Firmware Update") + + Column + { + anchors.fill: parent + + Label + { + anchors + { + left: parent.left + right: parent.right + } + + text: { + if(manager.firmwareUpdater == null) + { + return ""; + } + switch (manager.firmwareUpdater.firmwareUpdateState) + { + case 0: + return ""; //Not doing anything (eg; idling) + case 1: + return catalog.i18nc("@label","Updating firmware."); + case 2: + return catalog.i18nc("@label","Firmware update completed."); + case 3: + return catalog.i18nc("@label","Firmware update failed due to an unknown error."); + case 4: + return catalog.i18nc("@label","Firmware update failed due to an communication error."); + case 5: + return catalog.i18nc("@label","Firmware update failed due to an input/output error."); + case 6: + return catalog.i18nc("@label","Firmware update failed due to missing firmware."); + } + } + + wrapMode: Text.Wrap + } + + ProgressBar + { + id: prog + value: (manager.firmwareUpdater != null) ? manager.firmwareUpdater.firmwareProgress : 0 + minimumValue: 0 + maximumValue: 100 + indeterminate: + { + if(manager.firmwareUpdater == null) + { + return false; + } + return manager.firmwareUpdater.firmwareProgress < 1 && manager.firmwareUpdater.firmwareProgress > 0; + } + anchors + { + left: parent.left; + right: parent.right; + } + } + } + + rightButtons: [ + Button + { + text: catalog.i18nc("@action:button","Close"); + enabled: (manager.firmwareUpdater != null) ? manager.firmwareUpdater.firmwareUpdateState != 1 : true; + onClicked: updateProgressDialog.visible = false; + } + ] + } +} \ No newline at end of file diff --git a/plugins/FirmwareUpdater/__init__.py b/plugins/FirmwareUpdater/__init__.py new file mode 100644 index 0000000000..5a008d7d15 --- /dev/null +++ b/plugins/FirmwareUpdater/__init__.py @@ -0,0 +1,12 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from . import FirmwareUpdaterMachineAction + +def getMetaData(): + return {} + +def register(app): + return { "machine_action": [ + FirmwareUpdaterMachineAction.FirmwareUpdaterMachineAction() + ]} diff --git a/plugins/FirmwareUpdater/plugin.json b/plugins/FirmwareUpdater/plugin.json new file mode 100644 index 0000000000..c1034e5e42 --- /dev/null +++ b/plugins/FirmwareUpdater/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Firmware Updater", + "author": "Ultimaker B.V.", + "version": "1.0.1", + "description": "Provides a machine actions for updating firmware.", + "api": "6.0", + "i18n-catalog": "cura" +} diff --git a/plugins/GCodeGzReader/GCodeGzReader.py b/plugins/GCodeGzReader/GCodeGzReader.py index 73a08075d2..d075e4e3b0 100644 --- a/plugins/GCodeGzReader/GCodeGzReader.py +++ b/plugins/GCodeGzReader/GCodeGzReader.py @@ -4,15 +4,22 @@ import gzip from UM.Mesh.MeshReader import MeshReader #The class we're extending/implementing. +from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType #To add the .gcode.gz files to the MIME type database. from UM.PluginRegistry import PluginRegistry - ## A file reader that reads gzipped g-code. # # If you're zipping g-code, you might as well use gzip! class GCodeGzReader(MeshReader): def __init__(self) -> None: super().__init__() + MimeTypeDatabase.addMimeType( + MimeType( + name = "application/x-cura-compressed-gcode-file", + comment = "Cura Compressed GCode File", + suffixes = ["gcode.gz"] + ) + ) self._supported_extensions = [".gcode.gz"] def _read(self, file_name): diff --git a/plugins/GCodeGzReader/plugin.json b/plugins/GCodeGzReader/plugin.json index e9f14724e0..d4f281682f 100644 --- a/plugins/GCodeGzReader/plugin.json +++ b/plugins/GCodeGzReader/plugin.json @@ -1,8 +1,8 @@ { "name": "Compressed G-code Reader", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Reads g-code from a compressed archive.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/GCodeGzWriter/GCodeGzWriter.py b/plugins/GCodeGzWriter/GCodeGzWriter.py index e191a9c427..cbbfb8f986 100644 --- a/plugins/GCodeGzWriter/GCodeGzWriter.py +++ b/plugins/GCodeGzWriter/GCodeGzWriter.py @@ -17,6 +17,10 @@ catalog = i18nCatalog("cura") # # If you're zipping g-code, you might as well use gzip! class GCodeGzWriter(MeshWriter): + + def __init__(self) -> None: + super().__init__(add_to_recent_files = False) + ## Writes the gzipped g-code to a stream. # # Note that even though the function accepts a collection of nodes, the diff --git a/plugins/GCodeGzWriter/__init__.py b/plugins/GCodeGzWriter/__init__.py index e257bcb011..95949eee74 100644 --- a/plugins/GCodeGzWriter/__init__.py +++ b/plugins/GCodeGzWriter/__init__.py @@ -16,7 +16,8 @@ def getMetaData(): "extension": file_extension, "description": catalog.i18nc("@item:inlistbox", "Compressed G-code File"), "mime_type": "application/gzip", - "mode": GCodeGzWriter.GCodeGzWriter.OutputMode.BinaryMode + "mode": GCodeGzWriter.GCodeGzWriter.OutputMode.BinaryMode, + "hide_in_file_dialog": True, }] } } diff --git a/plugins/GCodeGzWriter/plugin.json b/plugins/GCodeGzWriter/plugin.json index 9774e9a25c..b0e6f8d605 100644 --- a/plugins/GCodeGzWriter/plugin.json +++ b/plugins/GCodeGzWriter/plugin.json @@ -1,8 +1,8 @@ { "name": "Compressed G-code Writer", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Writes g-code to a compressed archive.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/GCodeProfileReader/plugin.json b/plugins/GCodeProfileReader/plugin.json index f8f7d4c291..af1c2d1827 100644 --- a/plugins/GCodeProfileReader/plugin.json +++ b/plugins/GCodeProfileReader/plugin.json @@ -1,8 +1,8 @@ { "name": "G-code Profile Reader", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides support for importing profiles from g-code files.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/GCodeReader/FlavorParser.py b/plugins/GCodeReader/FlavorParser.py index 10f841fc43..f8618712a1 100644 --- a/plugins/GCodeReader/FlavorParser.py +++ b/plugins/GCodeReader/FlavorParser.py @@ -44,6 +44,7 @@ class FlavorParser: self._extruder_offsets = {} # type: Dict[int, List[float]] # Offsets for multi extruders. key is index, value is [x-offset, y-offset] self._current_layer_thickness = 0.2 # default self._filament_diameter = 2.85 # default + self._previous_extrusion_value = 0.0 # keep track of the filament retractions CuraApplication.getInstance().getPreferences().addPreference("gcodereader/show_caution", True) @@ -106,6 +107,8 @@ class FlavorParser: self._layer_data_builder.setLayerHeight(self._layer_number, path[0][2]) self._layer_data_builder.setLayerThickness(self._layer_number, layer_thickness) this_layer = self._layer_data_builder.getLayer(self._layer_number) + if not this_layer: + return False except ValueError: return False count = len(path) @@ -182,6 +185,7 @@ class FlavorParser: new_extrusion_value = params.e if self._is_absolute_extrusion else e[self._extruder_number] + params.e if new_extrusion_value > e[self._extruder_number]: path.append([x, y, z, f, new_extrusion_value + self._extrusion_length_offset[self._extruder_number], self._layer_type]) # extrusion + self._previous_extrusion_value = new_extrusion_value else: path.append([x, y, z, f, new_extrusion_value + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveRetractionType]) # retraction e[self._extruder_number] = new_extrusion_value @@ -191,6 +195,8 @@ class FlavorParser: if z > self._previous_z and (z - self._previous_z < 1.5): self._current_layer_thickness = z - self._previous_z # allow a tiny overlap self._previous_z = z + elif self._previous_extrusion_value > e[self._extruder_number]: + path.append([x, y, z, f, e[self._extruder_number] + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveRetractionType]) else: path.append([x, y, z, f, e[self._extruder_number] + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveCombingType]) return self._position(x, y, z, f, e) @@ -227,6 +233,9 @@ class FlavorParser: # Sometimes a G92 E0 is introduced in the middle of the GCode so we need to keep those offsets for calculate the line_width self._extrusion_length_offset[self._extruder_number] += position.e[self._extruder_number] - params.e position.e[self._extruder_number] = params.e + self._previous_extrusion_value = params.e + else: + self._previous_extrusion_value = 0.0 return self._position( params.x if params.x is not None else position.x, params.y if params.y is not None else position.y, @@ -275,7 +284,7 @@ class FlavorParser: ## For showing correct x, y offsets for each extruder def _extruderOffsets(self) -> Dict[int, List[float]]: result = {} - for extruder in ExtruderManager.getInstance().getExtruderStacks(): + for extruder in ExtruderManager.getInstance().getActiveExtruderStacks(): result[int(extruder.getMetaData().get("position", "0"))] = [ extruder.getProperty("machine_nozzle_offset_x", "value"), extruder.getProperty("machine_nozzle_offset_y", "value")] @@ -286,7 +295,7 @@ class FlavorParser: self._cancelled = False # We obtain the filament diameter from the selected extruder to calculate line widths global_stack = CuraApplication.getInstance().getGlobalContainerStack() - + if not global_stack: return None @@ -329,6 +338,7 @@ class FlavorParser: min_layer_number = 0 negative_layers = 0 previous_layer = 0 + self._previous_extrusion_value = 0.0 for line in stream.split("\n"): if self._cancelled: @@ -356,6 +366,8 @@ class FlavorParser: self._layer_type = LayerPolygon.SupportType elif type == "FILL": self._layer_type = LayerPolygon.InfillType + elif type == "SUPPORT-INTERFACE": + self._layer_type = LayerPolygon.SupportInterfaceType else: Logger.log("w", "Encountered a unknown type (%s) while parsing g-code.", type) diff --git a/plugins/GCodeReader/GCodeReader.py b/plugins/GCodeReader/GCodeReader.py index 45ef1e1058..1bc22a3e62 100755 --- a/plugins/GCodeReader/GCodeReader.py +++ b/plugins/GCodeReader/GCodeReader.py @@ -1,4 +1,5 @@ # Copyright (c) 2017 Aleph Objects, Inc. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from UM.FileHandler.FileReader import FileReader @@ -11,13 +12,7 @@ catalog = i18nCatalog("cura") from . import MarlinFlavorParser, RepRapFlavorParser -MimeTypeDatabase.addMimeType( - MimeType( - name = "application/x-cura-gcode-file", - comment = "Cura GCode File", - suffixes = ["gcode", "gcode.gz"] - ) -) + # Class for loading and parsing G-code files @@ -29,7 +24,15 @@ class GCodeReader(MeshReader): def __init__(self) -> None: super().__init__() + MimeTypeDatabase.addMimeType( + MimeType( + name = "application/x-cura-gcode-file", + comment = "Cura GCode File", + suffixes = ["gcode"] + ) + ) self._supported_extensions = [".gcode", ".g"] + self._flavor_reader = None Application.getInstance().getPreferences().addPreference("gcodereader/show_caution", True) diff --git a/plugins/GCodeReader/RepRapFlavorParser.py b/plugins/GCodeReader/RepRapFlavorParser.py index ba1e13f23d..2a24d16add 100644 --- a/plugins/GCodeReader/RepRapFlavorParser.py +++ b/plugins/GCodeReader/RepRapFlavorParser.py @@ -1,9 +1,9 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from . import FlavorParser -# This parser is intented for interpret the RepRap Firmware flavor +## This parser is intended to interpret the RepRap Firmware g-code flavor. class RepRapFlavorParser(FlavorParser.FlavorParser): def __init__(self): diff --git a/plugins/GCodeReader/plugin.json b/plugins/GCodeReader/plugin.json index f72a8cc12c..bbc94fa917 100644 --- a/plugins/GCodeReader/plugin.json +++ b/plugins/GCodeReader/plugin.json @@ -1,8 +1,8 @@ { "name": "G-code Reader", - "author": "Victor Larchenko", - "version": "1.0.0", + "author": "Victor Larchenko, Ultimaker", + "version": "1.0.1", "description": "Allows loading and displaying G-code files.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/GCodeWriter/GCodeWriter.py b/plugins/GCodeWriter/GCodeWriter.py index 59e9a29691..3e5bf59e73 100644 --- a/plugins/GCodeWriter/GCodeWriter.py +++ b/plugins/GCodeWriter/GCodeWriter.py @@ -47,7 +47,7 @@ class GCodeWriter(MeshWriter): _setting_keyword = ";SETTING_" def __init__(self): - super().__init__() + super().__init__(add_to_recent_files = False) self._application = Application.getInstance() @@ -70,7 +70,7 @@ class GCodeWriter(MeshWriter): active_build_plate = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate scene = Application.getInstance().getController().getScene() if not hasattr(scene, "gcode_dict"): - self.setInformation(catalog.i18nc("@warning:status", "Please generate G-code before saving.")) + self.setInformation(catalog.i18nc("@warning:status", "Please prepare G-code before exporting.")) return False gcode_dict = getattr(scene, "gcode_dict") gcode_list = gcode_dict.get(active_build_plate, None) @@ -86,7 +86,7 @@ class GCodeWriter(MeshWriter): stream.write(settings) return True - self.setInformation(catalog.i18nc("@warning:status", "Please generate G-code before saving.")) + self.setInformation(catalog.i18nc("@warning:status", "Please prepare G-code before exporting.")) return False ## Create a new container with container 2 as base and container 1 written over it. diff --git a/plugins/GCodeWriter/plugin.json b/plugins/GCodeWriter/plugin.json index 5fcb1a3bd7..f3a95ddb78 100644 --- a/plugins/GCodeWriter/plugin.json +++ b/plugins/GCodeWriter/plugin.json @@ -1,8 +1,8 @@ { "name": "G-code Writer", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Writes g-code to a file.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/ImageReader/ConfigUI.qml b/plugins/ImageReader/ConfigUI.qml index d829f46459..b9ff2e4453 100644 --- a/plugins/ImageReader/ConfigUI.qml +++ b/plugins/ImageReader/ConfigUI.qml @@ -20,7 +20,7 @@ UM.Dialog GridLayout { - UM.I18nCatalog{id: catalog; name:"cura"} + UM.I18nCatalog{id: catalog; name: "cura"} anchors.fill: parent; Layout.fillWidth: true columnSpacing: 16 * screenScaleFactor @@ -35,7 +35,7 @@ UM.Dialog width: parent.width Label { - text: catalog.i18nc("@action:label","Height (mm)") + text: catalog.i18nc("@action:label", "Height (mm)") width: 150 * screenScaleFactor anchors.verticalCenter: parent.verticalCenter } @@ -58,7 +58,7 @@ UM.Dialog width: parent.width Label { - text: catalog.i18nc("@action:label","Base (mm)") + text: catalog.i18nc("@action:label", "Base (mm)") width: 150 * screenScaleFactor anchors.verticalCenter: parent.verticalCenter } @@ -81,7 +81,7 @@ UM.Dialog width: parent.width Label { - text: catalog.i18nc("@action:label","Width (mm)") + text: catalog.i18nc("@action:label", "Width (mm)") width: 150 * screenScaleFactor anchors.verticalCenter: parent.verticalCenter } @@ -105,7 +105,7 @@ UM.Dialog width: parent.width Label { - text: catalog.i18nc("@action:label","Depth (mm)") + text: catalog.i18nc("@action:label", "Depth (mm)") width: 150 * screenScaleFactor anchors.verticalCenter: parent.verticalCenter } @@ -151,7 +151,7 @@ UM.Dialog width: parent.width Label { - text: catalog.i18nc("@action:label","Smoothing") + text: catalog.i18nc("@action:label", "Smoothing") width: 150 * screenScaleFactor anchors.verticalCenter: parent.verticalCenter } diff --git a/plugins/ImageReader/plugin.json b/plugins/ImageReader/plugin.json index 2752c6e8f4..d966537d99 100644 --- a/plugins/ImageReader/plugin.json +++ b/plugins/ImageReader/plugin.json @@ -1,8 +1,8 @@ { "name": "Image Reader", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Enables ability to generate printable geometry from 2D image files.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/LegacyProfileReader/DictionaryOfDoom.json b/plugins/LegacyProfileReader/DictionaryOfDoom.json index 0be413dd2c..f65cc271d1 100644 --- a/plugins/LegacyProfileReader/DictionaryOfDoom.json +++ b/plugins/LegacyProfileReader/DictionaryOfDoom.json @@ -1,6 +1,6 @@ { "source_version": "15.04", - "target_version": 3, + "target_version": "4.5", "translation": { "machine_nozzle_size": "nozzle_size", diff --git a/plugins/LegacyProfileReader/LegacyProfileReader.py b/plugins/LegacyProfileReader/LegacyProfileReader.py index 93c15ca8e0..013bab6f11 100644 --- a/plugins/LegacyProfileReader/LegacyProfileReader.py +++ b/plugins/LegacyProfileReader/LegacyProfileReader.py @@ -1,4 +1,4 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser # For reading the legacy profile INI files. @@ -6,6 +6,7 @@ import io import json # For reading the Dictionary of Doom. import math # For mathematical operations included in the Dictionary of Doom. import os.path # For concatenating the path to the plugin and the relative path to the Dictionary of Doom. +from typing import Dict from UM.Application import Application # To get the machine manager to create the new profile in. from UM.Logger import Logger # Logging errors. @@ -33,10 +34,11 @@ class LegacyProfileReader(ProfileReader): # \param json The JSON file to load the default setting values from. This # should not be a URL but a pre-loaded JSON handle. # \return A dictionary of the default values of the legacy Cura version. - def prepareDefaults(self, json): + def prepareDefaults(self, json: Dict[str, Dict[str, str]]) -> Dict[str, str]: defaults = {} - for key in json["defaults"]: # We have to copy over all defaults from the JSON handle to a normal dict. - defaults[key] = json["defaults"][key] + if "defaults" in json: + for key in json["defaults"]: # We have to copy over all defaults from the JSON handle to a normal dict. + defaults[key] = json["defaults"][key] return defaults ## Prepares the local variables that can be used in evaluation of computing @@ -80,11 +82,10 @@ class LegacyProfileReader(ProfileReader): Logger.log("i", "Importing legacy profile from file " + file_name + ".") container_registry = ContainerRegistry.getInstance() profile_id = container_registry.uniqueName("Imported Legacy Profile") - profile = InstanceContainer(profile_id) # Create an empty profile. - parser = configparser.ConfigParser(interpolation = None) + input_parser = configparser.ConfigParser(interpolation = None) try: - parser.read([file_name]) # Parse the INI file. + input_parser.read([file_name]) # Parse the INI file. except Exception as e: Logger.log("e", "Unable to open legacy profile %s: %s", file_name, str(e)) return None @@ -92,7 +93,7 @@ class LegacyProfileReader(ProfileReader): # Legacy Cura saved the profile under the section "profile_N" where N is the ID of a machine, except when you export in which case it saves it in the section "profile". # Since importing multiple machine profiles is out of scope, just import the first section we find. section = "" - for found_section in parser.sections(): + for found_section in input_parser.sections(): if found_section.startswith("profile"): section = found_section break @@ -110,15 +111,13 @@ class LegacyProfileReader(ProfileReader): return None defaults = self.prepareDefaults(dict_of_doom) - legacy_settings = self.prepareLocals(parser, section, defaults) #Gets the settings from the legacy profile. + legacy_settings = self.prepareLocals(input_parser, section, defaults) #Gets the settings from the legacy profile. - #Check the target version in the Dictionary of Doom with this application version. - if "target_version" not in dict_of_doom: - Logger.log("e", "Dictionary of Doom has no target version. Is it the correct JSON file?") - return None - if InstanceContainer.Version != dict_of_doom["target_version"]: - Logger.log("e", "Dictionary of Doom of legacy profile reader (version %s) is not in sync with the current instance container version (version %s)!", dict_of_doom["target_version"], str(InstanceContainer.Version)) - return None + # Serialised format into version 4.5. Do NOT upgrade this, let the version upgrader handle it. + output_parser = configparser.ConfigParser(interpolation = None) + output_parser.add_section("general") + output_parser.add_section("metadata") + output_parser.add_section("values") if "translation" not in dict_of_doom: Logger.log("e", "Dictionary of Doom has no translation. Is it the correct JSON file?") @@ -127,7 +126,7 @@ class LegacyProfileReader(ProfileReader): quality_definition = current_printer_definition.getMetaDataEntry("quality_definition") if not quality_definition: quality_definition = current_printer_definition.getId() - profile.setDefinition(quality_definition) + output_parser["general"]["definition"] = quality_definition for new_setting in dict_of_doom["translation"]: # Evaluate all new settings that would get a value from the translations. old_setting_expression = dict_of_doom["translation"][new_setting] compiled = compile(old_setting_expression, new_setting, "eval") @@ -140,37 +139,34 @@ class LegacyProfileReader(ProfileReader): definitions = current_printer_definition.findDefinitions(key = new_setting) if definitions: if new_value != value_using_defaults and definitions[0].default_value != new_value: # Not equal to the default in the new Cura OR the default in the legacy Cura. - profile.setProperty(new_setting, "value", new_value) # Store the setting in the profile! + output_parser["values"][new_setting] = str(new_value) # Store the setting in the profile! - if len(profile.getAllKeys()) == 0: + if len(output_parser["values"]) == 0: Logger.log("i", "A legacy profile was imported but everything evaluates to the defaults, creating an empty profile.") - profile.setMetaDataEntry("type", "profile") - # don't know what quality_type it is based on, so use "normal" by default - profile.setMetaDataEntry("quality_type", "normal") - profile.setName(profile_id) - profile.setDirty(True) + output_parser["general"]["version"] = "4" + output_parser["general"]["name"] = profile_id + output_parser["metadata"]["type"] = "quality_changes" + output_parser["metadata"]["quality_type"] = "normal" # Don't know what quality_type it is based on, so use "normal" by default. + output_parser["metadata"]["position"] = "0" # We only support single extrusion. + output_parser["metadata"]["setting_version"] = "5" # What the dictionary of doom is made for. - #Serialise and deserialise in order to perform the version upgrade. - parser = configparser.ConfigParser(interpolation=None) - data = profile.serialize() - parser.read_string(data) - parser["general"]["version"] = "1" - if parser.has_section("values"): - parser["settings"] = parser["values"] - del parser["values"] + # Serialise in order to perform the version upgrade. stream = io.StringIO() - parser.write(stream) + output_parser.write(stream) data = stream.getvalue() - profile.deserialize(data) - # The definition can get reset to fdmprinter during the deserialization's upgrade. Here we set the definition - # again. - profile.setDefinition(quality_definition) + profile = InstanceContainer(profile_id) + profile.deserialize(data) # Also performs the version upgrade. + profile.setDirty(True) #We need to return one extruder stack and one global stack. global_container_id = container_registry.uniqueName("Global Imported Legacy Profile") + # We duplicate the extruder profile into the global stack. + # This may introduce some settings that are global in the extruder stack and some settings that are per-extruder in the global stack. + # We don't care about that. The engine will ignore them anyway. global_profile = profile.duplicate(new_id = global_container_id, new_name = profile_id) #Needs to have the same name as the extruder profile. + del global_profile.getMetaData()["position"] # Has no position because it's global. global_profile.setDirty(True) profile_definition = "fdmprinter" diff --git a/plugins/LegacyProfileReader/plugin.json b/plugins/LegacyProfileReader/plugin.json index 2dc71511a9..2f5264ad37 100644 --- a/plugins/LegacyProfileReader/plugin.json +++ b/plugins/LegacyProfileReader/plugin.json @@ -1,8 +1,8 @@ { "name": "Legacy Cura Profile Reader", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides support for importing profiles from legacy Cura versions.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/LegacyProfileReader/tests/TestLegacyProfileReader.py b/plugins/LegacyProfileReader/tests/TestLegacyProfileReader.py new file mode 100644 index 0000000000..480a61f301 --- /dev/null +++ b/plugins/LegacyProfileReader/tests/TestLegacyProfileReader.py @@ -0,0 +1,190 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import configparser # An input for some functions we're testing. +import os.path # To find the integration test .ini files. +import pytest # To register tests with. +import unittest.mock # To mock the application, plug-in and container registry out. + +import UM.Application # To mock the application out. +import UM.PluginRegistry # To mock the plug-in registry out. +import UM.Settings.ContainerRegistry # To mock the container registry out. +import UM.Settings.InstanceContainer # To intercept the serialised data from the read() function. + +import LegacyProfileReader as LegacyProfileReaderModule # To get the directory of the module. +from LegacyProfileReader import LegacyProfileReader # The module we're testing. + +@pytest.fixture +def legacy_profile_reader(): + return LegacyProfileReader() + +test_prepareDefaultsData = [ + { + "defaults": + { + "foo": "bar" + }, + "cheese": "delicious" + }, + { + "cat": "fluffy", + "dog": "floofy" + } +] + +@pytest.mark.parametrize("input", test_prepareDefaultsData) +def test_prepareDefaults(legacy_profile_reader, input): + output = legacy_profile_reader.prepareDefaults(input) + if "defaults" in input: + assert input["defaults"] == output + else: + assert output == {} + +test_prepareLocalsData = [ + ( # Ordinary case. + { # Parser data. + "profile": + { + "layer_height": "0.2", + "infill_density": "30" + } + }, + { # Defaults. + "layer_height": "0.1", + "infill_density": "20", + "line_width": "0.4" + } + ), + ( # Empty data. + { # Parser data. + "profile": + { + } + }, + { # Defaults. + } + ), + ( # All defaults. + { # Parser data. + "profile": + { + } + }, + { # Defaults. + "foo": "bar", + "boo": "far" + } + ), + ( # Multiple config sections. + { # Parser data. + "some_other_name": + { + "foo": "bar" + }, + "profile": + { + "foo": "baz" #Not the same as in some_other_name + } + }, + { # Defaults. + "foo": "bla" + } + ) +] + +@pytest.mark.parametrize("parser_data, defaults", test_prepareLocalsData) +def test_prepareLocals(legacy_profile_reader, parser_data, defaults): + parser = configparser.ConfigParser() + parser.read_dict(parser_data) + + output = legacy_profile_reader.prepareLocals(parser, "profile", defaults) + + assert set(defaults.keys()) <= set(output.keys()) # All defaults must be in there. + assert set(parser_data["profile"]) <= set(output.keys()) # All overwritten values must be in there. + for key in output: + if key in parser_data["profile"]: + assert output[key] == parser_data["profile"][key] # If overwritten, must be the overwritten value. + else: + assert output[key] == defaults[key] # Otherwise must be equal to the default. + +test_prepareLocalsNoSectionErrorData = [ + ( # Section does not exist. + { # Parser data. + "some_other_name": + { + "foo": "bar" + }, + }, + { # Defaults. + "foo": "baz" + } + ) +] + +## Test cases where a key error is expected. +@pytest.mark.parametrize("parser_data, defaults", test_prepareLocalsNoSectionErrorData) +def test_prepareLocalsNoSectionError(legacy_profile_reader, parser_data, defaults): + parser = configparser.ConfigParser() + parser.read_dict(parser_data) + + with pytest.raises(configparser.NoSectionError): + legacy_profile_reader.prepareLocals(parser, "profile", defaults) + +intercepted_data = "" + +@pytest.mark.parametrize("file_name", ["normal_case.ini"]) +def test_read(legacy_profile_reader, file_name): + # Mock out all dependencies. Quite a lot! + global_stack = unittest.mock.MagicMock() + global_stack.getProperty = unittest.mock.MagicMock(return_value = 1) # For machine_extruder_count setting. + def getMetaDataEntry(key, default_value = ""): + if key == "quality_definition": + return "mocked_quality_definition" + if key == "has_machine_quality": + return "True" + global_stack.definition.getMetaDataEntry = getMetaDataEntry + global_stack.definition.getId = unittest.mock.MagicMock(return_value = "mocked_global_definition") + application = unittest.mock.MagicMock() + application.getGlobalContainerStack = unittest.mock.MagicMock(return_value = global_stack) + application_getInstance = unittest.mock.MagicMock(return_value = application) + container_registry = unittest.mock.MagicMock() + container_registry_getInstance = unittest.mock.MagicMock(return_value = container_registry) + container_registry.uniqueName = unittest.mock.MagicMock(return_value = "Imported Legacy Profile") + container_registry.findDefinitionContainers = unittest.mock.MagicMock(return_value = [global_stack.definition]) + UM.Settings.InstanceContainer.setContainerRegistry(container_registry) + plugin_registry = unittest.mock.MagicMock() + plugin_registry_getInstance = unittest.mock.MagicMock(return_value = plugin_registry) + plugin_registry.getPluginPath = unittest.mock.MagicMock(return_value = os.path.dirname(LegacyProfileReaderModule.__file__)) + + # Mock out the resulting InstanceContainer so that we can intercept the data before it's passed through the version upgrader. + def deserialize(self, data): # Intercepts the serialised data that we'd perform the version upgrade from when deserializing. + global intercepted_data + intercepted_data = data + + parser = configparser.ConfigParser() + parser.read_string(data) + self._metadata["position"] = parser["metadata"]["position"] + def duplicate(self, new_id, new_name): + self._metadata["id"] = new_id + self._metadata["name"] = new_name + return self + + with unittest.mock.patch.object(UM.Application.Application, "getInstance", application_getInstance): + with unittest.mock.patch.object(UM.Settings.ContainerRegistry.ContainerRegistry, "getInstance", container_registry_getInstance): + with unittest.mock.patch.object(UM.PluginRegistry.PluginRegistry, "getInstance", plugin_registry_getInstance): + with unittest.mock.patch.object(UM.Settings.InstanceContainer.InstanceContainer, "deserialize", deserialize): + with unittest.mock.patch.object(UM.Settings.InstanceContainer.InstanceContainer, "duplicate", duplicate): + result = legacy_profile_reader.read(os.path.join(os.path.dirname(__file__), file_name)) + + assert len(result) == 1 + + # Let's see what's inside the actual output file that we generated. + parser = configparser.ConfigParser() + parser.read_string(intercepted_data) + assert parser["general"]["definition"] == "mocked_quality_definition" + assert parser["general"]["version"] == "4" # Yes, before we upgraded. + assert parser["general"]["name"] == "Imported Legacy Profile" # Because we overwrote uniqueName. + assert parser["metadata"]["type"] == "quality_changes" + assert parser["metadata"]["quality_type"] == "normal" + assert parser["metadata"]["position"] == "0" + assert parser["metadata"]["setting_version"] == "5" # Yes, before we upgraded. \ No newline at end of file diff --git a/plugins/LegacyProfileReader/tests/normal_case.ini b/plugins/LegacyProfileReader/tests/normal_case.ini new file mode 100644 index 0000000000..213444d2d3 --- /dev/null +++ b/plugins/LegacyProfileReader/tests/normal_case.ini @@ -0,0 +1,7 @@ +[profile] +foo = bar +boo = far +fill_overlap = 3 + +[alterations] +some = values diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index b12f8f8696..ef8fda224a 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2016 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 @@ -13,15 +13,18 @@ import Cura 1.0 as Cura Cura.MachineAction { id: base - property var extrudersModel: Cura.ExtrudersModel{} + property var extrudersModel: Cura.ExtrudersModel{} // Do not retrieve the Model from a backend. Otherwise the tabs + // in tabView will not removed/updated. Probably QML bug property int extruderTabsCount: 0 + property var activeMachineId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.id : "" + Connections { target: base.extrudersModel onModelChanged: { - var extruderCount = base.extrudersModel.rowCount(); + var extruderCount = base.extrudersModel.count; base.extruderTabsCount = extruderCount; } } @@ -403,7 +406,15 @@ Cura.MachineAction { if (settingsTabs.currentIndex > 0) { - manager.updateMaterialForDiameter(settingsTabs.currentIndex - 1); + manager.updateMaterialForDiameter(settingsTabs.currentIndex - 1) + } + } + function setValueFunction(value) + { + if (settingsTabs.currentIndex > 0) + { + const extruderIndex = index.toString() + Cura.MachineManager.activeMachine.extruders[extruderIndex].compatibleMaterialDiameter = value } } property bool isExtruderSetting: true @@ -433,6 +444,18 @@ Cura.MachineAction property bool allowNegative: true } + Loader + { + id: extruderCoolingFanNumberField + sourceComponent: numericTextFieldWithUnit + property string settingKey: "machine_extruder_cooling_fan_number" + property string label: catalog.i18nc("@label", "Cooling Fan Number") + property string unit: catalog.i18nc("@label", "") + property bool isExtruderSetting: true + property bool forceUpdateOnChange: true + property bool allowNegative: false + } + Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } Row @@ -511,7 +534,7 @@ Cura.MachineAction } return ""; } - return Cura.MachineManager.activeMachineId; + return base.activeMachineId } key: settingKey watchedProperties: [ "value", "description" ] @@ -550,6 +573,7 @@ Cura.MachineAction property bool _forceUpdateOnChange: (typeof(forceUpdateOnChange) === 'undefined') ? false : forceUpdateOnChange property string _label: (typeof(label) === 'undefined') ? "" : label property string _tooltip: (typeof(tooltip) === 'undefined') ? propertyProvider.properties.description : tooltip + property var _setValueFunction: (typeof(setValueFunction) === 'undefined') ? undefined : setValueFunction UM.SettingPropertyProvider { @@ -564,7 +588,7 @@ Cura.MachineAction } return ""; } - return Cura.MachineManager.activeMachineId; + return base.activeMachineId } key: settingKey watchedProperties: [ "value", "description" ] @@ -602,14 +626,32 @@ Cura.MachineAction { if (propertyProvider && text != propertyProvider.properties.value) { - propertyProvider.setPropertyValue("value", text); + // For some properties like the extruder-compatible material diameter, they need to + // trigger many updates, such as the available materials, the current material may + // need to be switched, etc. Although setting the diameter can be done directly via + // the provider, all the updates that need to be triggered then need to depend on + // the metadata update, a signal that can be fired way too often. The update functions + // can have if-checks to filter out the irrelevant updates, but still it incurs unnecessary + // overhead. + // The ExtruderStack class has a dedicated function for this call "setCompatibleMaterialDiameter()", + // and it triggers the diameter update signals only when it is needed. Here it is optionally + // choose to use setCompatibleMaterialDiameter() or other more specific functions that + // are available. + if (_setValueFunction !== undefined) + { + _setValueFunction(text) + } + else + { + propertyProvider.setPropertyValue("value", text) + } if(_forceUpdateOnChange) { - manager.forceUpdate(); + manager.forceUpdate() } if(_afterOnEditingFinished) { - _afterOnEditingFinished(); + _afterOnEditingFinished() } } } @@ -655,7 +697,7 @@ Cura.MachineAction } return ""; } - return Cura.MachineManager.activeMachineId; + return base.activeMachineId } key: settingKey watchedProperties: [ "value", "options", "description" ] @@ -754,7 +796,7 @@ Cura.MachineAction } return ""; } - return Cura.MachineManager.activeMachineId; + return base.activeMachineId } key: settingKey watchedProperties: [ "value", "description" ] @@ -879,7 +921,7 @@ Cura.MachineAction { id: machineExtruderCountProvider - containerStackId: Cura.MachineManager.activeMachineId + containerStackId: base.activeMachineId key: "machine_extruder_count" watchedProperties: [ "value", "description" ] storeIndex: manager.containerIndex @@ -889,7 +931,7 @@ Cura.MachineAction { id: machineHeadPolygonProvider - containerStackId: Cura.MachineManager.activeMachineId + containerStackId: base.activeMachineId key: "machine_head_with_fans_polygon" watchedProperties: [ "value" ] storeIndex: manager.containerIndex diff --git a/plugins/MachineSettingsAction/__init__.py b/plugins/MachineSettingsAction/__init__.py index b1c4a75fec..ff80a12551 100644 --- a/plugins/MachineSettingsAction/__init__.py +++ b/plugins/MachineSettingsAction/__init__.py @@ -3,8 +3,6 @@ from . import MachineSettingsAction -from UM.i18n import i18nCatalog -catalog = i18nCatalog("cura") def getMetaData(): return {} diff --git a/plugins/MachineSettingsAction/plugin.json b/plugins/MachineSettingsAction/plugin.json index 703a145deb..d734c1adf5 100644 --- a/plugins/MachineSettingsAction/plugin.json +++ b/plugins/MachineSettingsAction/plugin.json @@ -1,8 +1,8 @@ { "name": "Machine Settings action", "author": "fieldOfView", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides a way to change machine settings (such as build volume, nozzle size, etc.).", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/ModelChecker/ModelChecker.py b/plugins/ModelChecker/ModelChecker.py index d2c2eefac2..0619c95d67 100644 --- a/plugins/ModelChecker/ModelChecker.py +++ b/plugins/ModelChecker/ModelChecker.py @@ -3,12 +3,13 @@ import os -from PyQt5.QtCore import QObject, pyqtSlot, pyqtSignal, pyqtProperty +from PyQt5.QtCore import QObject, pyqtSlot, pyqtSignal, pyqtProperty, QTimer from UM.Application import Application from UM.Extension import Extension from UM.Logger import Logger from UM.Message import Message +from UM.Scene.Camera import Camera from UM.i18n import i18nCatalog from UM.PluginRegistry import PluginRegistry from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator @@ -29,13 +30,22 @@ class ModelChecker(QObject, Extension): lifetime = 0, title = catalog.i18nc("@info:title", "3D Model Assistant")) + self._change_timer = QTimer() + self._change_timer.setInterval(200) + self._change_timer.setSingleShot(True) + self._change_timer.timeout.connect(self.onChanged) + Application.getInstance().initializationFinished.connect(self._pluginsInitialized) Application.getInstance().getController().getScene().sceneChanged.connect(self._onChanged) Application.getInstance().globalContainerStackChanged.connect(self._onChanged) - ## Pass-through to allow UM.Signal to connect with a pyqtSignal. def _onChanged(self, *args, **kwargs): - self.onChanged.emit() + # Ignore camera updates. + if len(args) == 0: + self._change_timer.start() + return + if not isinstance(args[0], Camera): + self._change_timer.start() ## Called when plug-ins are initialized. # diff --git a/plugins/ModelChecker/ModelChecker.qml b/plugins/ModelChecker/ModelChecker.qml index 98db233bf8..ddeed063b1 100644 --- a/plugins/ModelChecker/ModelChecker.qml +++ b/plugins/ModelChecker/ModelChecker.qml @@ -4,19 +4,19 @@ import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 -import QtQuick.Dialogs 1.1 -import QtQuick.Window 2.2 import UM 1.2 as UM -import Cura 1.0 as Cura Button { id: modelCheckerButton - UM.I18nCatalog{id: catalog; name:"cura"} + UM.I18nCatalog + { + id: catalog + name: "cura" + } visible: manager.hasWarnings tooltip: catalog.i18nc("@info:tooltip", "Some things could be problematic in this print. Click to see tips for adjustment.") @@ -25,6 +25,8 @@ Button width: UM.Theme.getSize("save_button_specs_icons").width height: UM.Theme.getSize("save_button_specs_icons").height + anchors.verticalCenter: parent ? parent.verticalCenter : undefined + style: ButtonStyle { background: Item @@ -33,7 +35,6 @@ Button { width: UM.Theme.getSize("save_button_specs_icons").width; height: UM.Theme.getSize("save_button_specs_icons").height; - sourceSize.width: width; sourceSize.height: width; color: control.hovered ? UM.Theme.getColor("text_scene_hover") : UM.Theme.getColor("text_scene"); source: "model_checker.svg" diff --git a/plugins/ModelChecker/__init__.py b/plugins/ModelChecker/__init__.py index 5f4d443729..dffee21723 100644 --- a/plugins/ModelChecker/__init__.py +++ b/plugins/ModelChecker/__init__.py @@ -1,11 +1,8 @@ # Copyright (c) 2018 Ultimaker B.V. -# This example is released under the terms of the AGPLv3 or higher. +# Cura is released under the terms of the LGPLv3 or higher. from . import ModelChecker -from UM.i18n import i18nCatalog -i18n_catalog = i18nCatalog("cura") - def getMetaData(): return {} diff --git a/plugins/ModelChecker/plugin.json b/plugins/ModelChecker/plugin.json index a9190adcaa..59be5bbf0a 100644 --- a/plugins/ModelChecker/plugin.json +++ b/plugins/ModelChecker/plugin.json @@ -1,8 +1,8 @@ { "name": "Model Checker", "author": "Ultimaker B.V.", - "version": "0.1", - "api": 4, + "version": "1.0.1", + "api": "6.0", "description": "Checks models and print configuration for possible printing issues and give suggestions.", "i18n-catalog": "cura" } diff --git a/plugins/MonitorStage/MonitorMain.qml b/plugins/MonitorStage/MonitorMain.qml new file mode 100644 index 0000000000..88193737bb --- /dev/null +++ b/plugins/MonitorStage/MonitorMain.qml @@ -0,0 +1,184 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.0 +import UM 1.3 as UM +import Cura 1.0 as Cura + +// We show a nice overlay on the 3D viewer when the current output device has no monitor view +Rectangle +{ + id: viewportOverlay + + property bool isConnected: Cura.MachineManager.activeMachineHasNetworkConnection || Cura.MachineManager.activeMachineHasCloudConnection + property bool isNetworkConfigurable: ["Ultimaker 3", "Ultimaker 3 Extended", "Ultimaker S5"].indexOf(Cura.MachineManager.activeMachineDefinitionName) > -1 + property bool isNetworkConfigured: + { + // Readability: + var connectedTypes = [2, 3]; + var types = Cura.MachineManager.activeMachineConfiguredConnectionTypes + + // Check if configured connection types includes either 2 or 3 (LAN or cloud) + for (var i = 0; i < types.length; i++) + { + if (connectedTypes.indexOf(types[i]) >= 0) + { + return true + } + } + return false + } + + color: UM.Theme.getColor("viewport_overlay") + anchors.fill: parent + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + // This mouse area is to prevent mouse clicks to be passed onto the scene. + MouseArea + { + anchors.fill: parent + acceptedButtons: Qt.AllButtons + onWheel: wheel.accepted = true + } + + // Disable dropping files into Cura when the monitor page is active + DropArea + { + anchors.fill: parent + } + + // CASE 1: CAN MONITOR & CONNECTED + Loader + { + id: monitorViewComponent + + anchors.fill: parent + + height: parent.height + + property real maximumWidth: parent.width + property real maximumHeight: parent.height + + sourceComponent: Cura.MachineManager.printerOutputDevices.length > 0 ? Cura.MachineManager.printerOutputDevices[0].monitorItem : null + } + + // CASE 2 & 3: Empty states + Column + { + anchors + { + top: parent.top + topMargin: UM.Theme.getSize("monitor_empty_state_offset").height + horizontalCenter: parent.horizontalCenter + } + width: UM.Theme.getSize("monitor_empty_state_size").width + spacing: UM.Theme.getSize("default_margin").height + visible: monitorViewComponent.sourceComponent == null + + // CASE 2: CAN MONITOR & NOT CONNECTED + Label + { + anchors + { + horizontalCenter: parent.horizontalCenter + } + visible: isNetworkConfigured && !isConnected + text: catalog.i18nc("@info", "Please make sure your printer has a connection:\n- Check if the printer is turned on.\n- Check if the printer is connected to the network.") + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("monitor_text_primary") + wrapMode: Text.WordWrap + lineHeight: UM.Theme.getSize("monitor_text_line_large").height + lineHeightMode: Text.FixedHeight + width: contentWidth + } + + // CASE 3: CAN NOT MONITOR + Label + { + id: noNetworkLabel + anchors + { + horizontalCenter: parent.horizontalCenter + } + visible: !isNetworkConfigured + text: catalog.i18nc("@info", "Please select a network connected printer to monitor.") + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("monitor_text_primary") + wrapMode: Text.WordWrap + width: contentWidth + lineHeight: UM.Theme.getSize("monitor_text_line_large").height + lineHeightMode: Text.FixedHeight + } + Label + { + id: noNetworkUltimakerLabel + anchors + { + horizontalCenter: parent.horizontalCenter + } + visible: !isNetworkConfigured && isNetworkConfigurable + text: catalog.i18nc("@info", "Please connect your Ultimaker printer to your local network.") + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("monitor_text_primary") + wrapMode: Text.WordWrap + width: contentWidth + lineHeight: UM.Theme.getSize("monitor_text_line_large").height + lineHeightMode: Text.FixedHeight + } + Item + { + anchors + { + left: noNetworkUltimakerLabel.left + } + visible: !isNetworkConfigured && isNetworkConfigurable + height: UM.Theme.getSize("monitor_text_line").height + width: childrenRect.width + + UM.RecolorImage + { + id: externalLinkIcon + anchors.verticalCenter: parent.verticalCenter + color: UM.Theme.getColor("monitor_text_link") + source: UM.Theme.getIcon("external_link") + width: UM.Theme.getSize("monitor_external_link_icon").width + height: UM.Theme.getSize("monitor_external_link_icon").height + } + Label + { + id: manageQueueText + anchors + { + left: externalLinkIcon.right + leftMargin: UM.Theme.getSize("narrow_margin").width + verticalCenter: externalLinkIcon.verticalCenter + } + color: UM.Theme.getColor("monitor_text_link") + font: UM.Theme.getFont("medium") // 14pt, regular + linkColor: UM.Theme.getColor("monitor_text_link") + text: catalog.i18nc("@label link to technical assistance", "View user manuals online") + renderType: Text.NativeRendering + } + MouseArea + { + anchors.fill: parent + hoverEnabled: true + onClicked: Qt.openUrlExternally("https://ultimaker.com/en/resources/manuals/ultimaker-3d-printers") + onEntered: + { + manageQueueText.font.underline = true + } + onExited: + { + manageQueueText.font.underline = false + } + } + } + } +} \ No newline at end of file diff --git a/plugins/MonitorStage/MonitorMainView.qml b/plugins/MonitorStage/MonitorMainView.qml deleted file mode 100644 index c48f6d0aab..0000000000 --- a/plugins/MonitorStage/MonitorMainView.qml +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. - -import QtQuick 2.2 -import QtQuick.Controls 1.1 - -import UM 1.3 as UM -import Cura 1.0 as Cura - -Item -{ - // parent could be undefined as this component is not visible at all times - width: parent ? parent.width : 0 - height: parent ? parent.height : 0 - - // We show a nice overlay on the 3D viewer when the current output device has no monitor view - Rectangle - { - id: viewportOverlay - - color: UM.Theme.getColor("viewport_overlay") - width: parent.width - height: parent.height - - MouseArea - { - anchors.fill: parent - acceptedButtons: Qt.AllButtons - onWheel: wheel.accepted = true - } - } - - Loader - { - id: monitorViewComponent - - width: parent.width - height: parent.height - - property real maximumWidth: parent.width - property real maximumHeight: parent.height - - sourceComponent: Cura.MachineManager.printerOutputDevices.length > 0 ? Cura.MachineManager.printerOutputDevices[0].monitorItem: null - visible: sourceComponent != null - } -} diff --git a/plugins/MonitorStage/MonitorMenu.qml b/plugins/MonitorStage/MonitorMenu.qml new file mode 100644 index 0000000000..bc95c276e8 --- /dev/null +++ b/plugins/MonitorStage/MonitorMenu.qml @@ -0,0 +1,23 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +Item +{ + signal showTooltip(Item item, point location, string text) + signal hideTooltip() + + Cura.MachineSelector + { + id: machineSelection + headerCornerSide: Cura.RoundedRectangle.Direction.All + width: UM.Theme.getSize("machine_selector_widget").width + height: parent.height + anchors.centerIn: parent + } +} \ No newline at end of file diff --git a/plugins/MonitorStage/MonitorStage.py b/plugins/MonitorStage/MonitorStage.py index ace201e994..69b7f20f4e 100644 --- a/plugins/MonitorStage/MonitorStage.py +++ b/plugins/MonitorStage/MonitorStage.py @@ -65,15 +65,10 @@ class MonitorStage(CuraStage): # We can only connect now, as we need to be sure that everything is loaded (plugins get created quite early) Application.getInstance().getMachineManager().outputDevicesChanged.connect(self._onOutputDevicesChanged) self._onOutputDevicesChanged() - self._updateMainOverlay() - self._updateSidebar() - def _updateMainOverlay(self): - main_component_path = os.path.join(PluginRegistry.getInstance().getPluginPath("MonitorStage"), - "MonitorMainView.qml") - self.addDisplayComponent("main", main_component_path) - - def _updateSidebar(self): - sidebar_component_path = os.path.join(Resources.getPath(Application.getInstance().ResourceTypes.QmlFiles), - "MonitorSidebar.qml") - self.addDisplayComponent("sidebar", sidebar_component_path) + plugin_path = Application.getInstance().getPluginRegistry().getPluginPath(self.getPluginId()) + if plugin_path is not None: + menu_component_path = os.path.join(plugin_path, "MonitorMenu.qml") + main_component_path = os.path.join(plugin_path, "MonitorMain.qml") + self.addDisplayComponent("menu", menu_component_path) + self.addDisplayComponent("main", main_component_path) diff --git a/plugins/MonitorStage/__init__.py b/plugins/MonitorStage/__init__.py index 884d43a8af..0468e6319b 100644 --- a/plugins/MonitorStage/__init__.py +++ b/plugins/MonitorStage/__init__.py @@ -3,17 +3,20 @@ from . import MonitorStage + from UM.i18n import i18nCatalog i18n_catalog = i18nCatalog("cura") + def getMetaData(): return { "stage": { "name": i18n_catalog.i18nc("@item:inmenu", "Monitor"), - "weight": 1 + "weight": 2 } } + def register(app): return { "stage": MonitorStage.MonitorStage() diff --git a/plugins/MonitorStage/plugin.json b/plugins/MonitorStage/plugin.json index cb3f55a80d..95e4b86f36 100644 --- a/plugins/MonitorStage/plugin.json +++ b/plugins/MonitorStage/plugin.json @@ -1,8 +1,8 @@ { "name": "Monitor Stage", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides a monitor stage in Cura.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } \ No newline at end of file diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml index a2790dcf08..0e2bd88619 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml @@ -17,7 +17,6 @@ Item { width: childrenRect.width; height: childrenRect.height; - property var all_categories_except_support: [ "machine_settings", "resolution", "shell", "infill", "material", "speed", "travel", "cooling", "platform_adhesion", "dual", "meshfix", "blackmagic", "experimental"] @@ -45,7 +44,7 @@ Item { UM.SettingPropertyProvider { id: meshTypePropertyProvider - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine watchedProperties: [ "enabled" ] } @@ -186,6 +185,12 @@ Item { { selectedObjectId: UM.ActiveTool.properties.getValue("SelectedObjectId") } + + // For some reason the model object is updated after removing him from the memory and + // it happens only on Windows. For this reason, set the destroyed value manually. + Component.onDestruction: { + setDestroyed(true); + } } delegate: Row @@ -260,7 +265,6 @@ Item { anchors.verticalCenter: parent.verticalCenter width: parent.width height: width - sourceSize.width: width sourceSize.height: width color: control.hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button") source: UM.Theme.getIcon("minus") @@ -402,14 +406,9 @@ Item { function updateFilter() { var new_filter = {}; - if (printSequencePropertyProvider.properties.value == "one_at_a_time") - { - new_filter["settable_per_meshgroup"] = true; - } - else - { - new_filter["settable_per_mesh"] = true; - } + new_filter["settable_per_mesh"] = true; + // Don't filter on "settable_per_meshgroup" any more when `printSequencePropertyProvider.properties.value` + // is set to "one_at_a_time", because the current backend architecture isn't ready for that. if(filterInput.text != "") { @@ -518,7 +517,7 @@ Item { { id: machineExtruderCount - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "machine_extruder_count" watchedProperties: [ "value" ] storeIndex: 0 @@ -528,7 +527,7 @@ Item { { id: printSequencePropertyProvider - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "print_sequence" watchedProperties: [ "value" ] storeIndex: 0 diff --git a/plugins/PerObjectSettingsTool/plugin.json b/plugins/PerObjectSettingsTool/plugin.json index 3254662d33..f272abf06a 100644 --- a/plugins/PerObjectSettingsTool/plugin.json +++ b/plugins/PerObjectSettingsTool/plugin.json @@ -1,8 +1,8 @@ { "name": "Per Model Settings Tool", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides the Per Model Settings.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.py b/plugins/PostProcessingPlugin/PostProcessingPlugin.py index da971a8e61..78f9cc0516 100644 --- a/plugins/PostProcessingPlugin/PostProcessingPlugin.py +++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.py @@ -1,6 +1,8 @@ -# Copyright (c) 2015 Jaime van Kessel, Ultimaker B.V. +# Copyright (c) 2018 Jaime van Kessel, Ultimaker B.V. # The PostProcessingPlugin is released under the terms of the AGPLv3 or higher. + from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, pyqtSlot +from typing import Dict, Type, TYPE_CHECKING, List, Optional, cast from UM.PluginRegistry import PluginRegistry from UM.Resources import Resources @@ -8,55 +10,63 @@ from UM.Application import Application from UM.Extension import Extension from UM.Logger import Logger -import configparser #The script lists are stored in metadata as serialised config files. -import io #To allow configparser to write to a string. +import configparser # The script lists are stored in metadata as serialised config files. +import io # To allow configparser to write to a string. import os.path import pkgutil import sys import importlib.util from UM.i18n import i18nCatalog +from cura.CuraApplication import CuraApplication + i18n_catalog = i18nCatalog("cura") +if TYPE_CHECKING: + from .Script import Script + ## The post processing plugin is an Extension type plugin that enables pre-written scripts to post process generated # g-code files. class PostProcessingPlugin(QObject, Extension): - def __init__(self, parent = None): - super().__init__(parent) - self.addMenuItem(i18n_catalog.i18n("Modify G-Code"), self.showPopup) + def __init__(self, parent = None) -> None: + QObject.__init__(self, parent) + Extension.__init__(self) + self.setMenuName(i18n_catalog.i18nc("@item:inmenu", "Post Processing")) + self.addMenuItem(i18n_catalog.i18nc("@item:inmenu", "Modify G-Code"), self.showPopup) self._view = None # Loaded scripts are all scripts that can be used - self._loaded_scripts = {} - self._script_labels = {} + self._loaded_scripts = {} # type: Dict[str, Type[Script]] + self._script_labels = {} # type: Dict[str, str] # Script list contains instances of scripts in loaded_scripts. # There can be duplicates, which will be executed in sequence. - self._script_list = [] + self._script_list = [] # type: List[Script] self._selected_script_index = -1 Application.getInstance().getOutputDeviceManager().writeStarted.connect(self.execute) - Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerStackChanged) #When the current printer changes, update the list of scripts. - Application.getInstance().mainWindowChanged.connect(self._createView) #When the main window is created, create the view so that we can display the post-processing icon if necessary. + Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerStackChanged) # When the current printer changes, update the list of scripts. + CuraApplication.getInstance().mainWindowChanged.connect(self._createView) # When the main window is created, create the view so that we can display the post-processing icon if necessary. selectedIndexChanged = pyqtSignal() - @pyqtProperty("QVariant", notify = selectedIndexChanged) - def selectedScriptDefinitionId(self): + + @pyqtProperty(str, notify = selectedIndexChanged) + def selectedScriptDefinitionId(self) -> Optional[str]: try: return self._script_list[self._selected_script_index].getDefinitionId() - except: + except IndexError: return "" - @pyqtProperty("QVariant", notify=selectedIndexChanged) - def selectedScriptStackId(self): + @pyqtProperty(str, notify=selectedIndexChanged) + def selectedScriptStackId(self) -> Optional[str]: try: return self._script_list[self._selected_script_index].getStackId() - except: + except IndexError: return "" ## Execute all post-processing scripts on the gcode. - def execute(self, output_device): + def execute(self, output_device) -> None: scene = Application.getInstance().getController().getScene() # If the scene does not have a gcode, do nothing if not hasattr(scene, "gcode_dict"): @@ -66,7 +76,7 @@ class PostProcessingPlugin(QObject, Extension): return # get gcode list for the active build plate - active_build_plate_id = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate + active_build_plate_id = CuraApplication.getInstance().getMultiBuildPlateModel().activeBuildPlate gcode_list = gcode_dict[active_build_plate_id] if not gcode_list: return @@ -85,16 +95,17 @@ class PostProcessingPlugin(QObject, Extension): Logger.log("e", "Already post processed") @pyqtSlot(int) - def setSelectedScriptIndex(self, index): - self._selected_script_index = index - self.selectedIndexChanged.emit() + def setSelectedScriptIndex(self, index: int) -> None: + if self._selected_script_index != index: + self._selected_script_index = index + self.selectedIndexChanged.emit() @pyqtProperty(int, notify = selectedIndexChanged) - def selectedScriptIndex(self): + def selectedScriptIndex(self) -> int: return self._selected_script_index @pyqtSlot(int, int) - def moveScript(self, index, new_index): + def moveScript(self, index: int, new_index: int) -> None: if new_index < 0 or new_index > len(self._script_list) - 1: return # nothing needs to be done else: @@ -106,7 +117,7 @@ class PostProcessingPlugin(QObject, Extension): ## Remove a script from the active script list by index. @pyqtSlot(int) - def removeScriptByIndex(self, index): + def removeScriptByIndex(self, index: int) -> None: self._script_list.pop(index) if len(self._script_list) - 1 < self._selected_script_index: self._selected_script_index = len(self._script_list) - 1 @@ -117,14 +128,16 @@ class PostProcessingPlugin(QObject, Extension): ## Load all scripts from all paths where scripts can be found. # # This should probably only be done on init. - def loadAllScripts(self): - if self._loaded_scripts: #Already loaded. + def loadAllScripts(self) -> None: + if self._loaded_scripts: # Already loaded. return - #The PostProcessingPlugin path is for built-in scripts. - #The Resources path is where the user should store custom scripts. - #The Preferences path is legacy, where the user may previously have stored scripts. + # The PostProcessingPlugin path is for built-in scripts. + # The Resources path is where the user should store custom scripts. + # The Preferences path is legacy, where the user may previously have stored scripts. for root in [PluginRegistry.getInstance().getPluginPath("PostProcessingPlugin"), Resources.getStoragePath(Resources.Resources), Resources.getStoragePath(Resources.Preferences)]: + if root is None: + continue path = os.path.join(root, "scripts") if not os.path.isdir(path): try: @@ -138,7 +151,7 @@ class PostProcessingPlugin(QObject, Extension): ## Load all scripts from provided path. # This should probably only be done on init. # \param path Path to check for scripts. - def loadScripts(self, path): + def loadScripts(self, path: str) -> None: ## Load all scripts in the scripts folders scripts = pkgutil.iter_modules(path = [path]) for loader, script_name, ispkg in scripts: @@ -147,6 +160,8 @@ class PostProcessingPlugin(QObject, Extension): try: spec = importlib.util.spec_from_file_location(__name__ + "." + script_name, os.path.join(path, script_name + ".py")) loaded_script = importlib.util.module_from_spec(spec) + if spec.loader is None: + continue spec.loader.exec_module(loaded_script) sys.modules[script_name] = loaded_script #TODO: This could be a security risk. Overwrite any module with a user-provided name? @@ -171,23 +186,24 @@ class PostProcessingPlugin(QObject, Extension): loadedScriptListChanged = pyqtSignal() @pyqtProperty("QVariantList", notify = loadedScriptListChanged) - def loadedScriptList(self): + def loadedScriptList(self) -> List[str]: return sorted(list(self._loaded_scripts.keys())) @pyqtSlot(str, result = str) - def getScriptLabelByKey(self, key): - return self._script_labels[key] + def getScriptLabelByKey(self, key: str) -> Optional[str]: + return self._script_labels.get(key) scriptListChanged = pyqtSignal() - @pyqtProperty("QVariantList", notify = scriptListChanged) - def scriptList(self): + @pyqtProperty("QStringList", notify = scriptListChanged) + def scriptList(self) -> List[str]: script_list = [script.getSettingData()["key"] for script in self._script_list] return script_list @pyqtSlot(str) - def addScriptToList(self, key): + def addScriptToList(self, key: str) -> None: Logger.log("d", "Adding script %s to list.", key) new_script = self._loaded_scripts[key]() + new_script.initialize() self._script_list.append(new_script) self.setSelectedScriptIndex(len(self._script_list) - 1) self.scriptListChanged.emit() @@ -195,88 +211,103 @@ class PostProcessingPlugin(QObject, Extension): ## When the global container stack is changed, swap out the list of active # scripts. - def _onGlobalContainerStackChanged(self): + def _onGlobalContainerStackChanged(self) -> None: self.loadAllScripts() new_stack = Application.getInstance().getGlobalContainerStack() + if new_stack is None: + return self._script_list.clear() - if not new_stack.getMetaDataEntry("post_processing_scripts"): #Missing or empty. - self.scriptListChanged.emit() #Even emit this if it didn't change. We want it to write the empty list to the stack's metadata. + if not new_stack.getMetaDataEntry("post_processing_scripts"): # Missing or empty. + self.scriptListChanged.emit() # Even emit this if it didn't change. We want it to write the empty list to the stack's metadata. return self._script_list.clear() scripts_list_strs = new_stack.getMetaDataEntry("post_processing_scripts") - for script_str in scripts_list_strs.split("\n"): #Encoded config files should never contain three newlines in a row. At most 2, just before section headers. - if not script_str: #There were no scripts in this one (or a corrupt file caused more than 3 consecutive newlines here). + for script_str in scripts_list_strs.split("\n"): # Encoded config files should never contain three newlines in a row. At most 2, just before section headers. + if not script_str: # There were no scripts in this one (or a corrupt file caused more than 3 consecutive newlines here). continue - script_str = script_str.replace(r"\\\n", "\n").replace(r"\\\\", "\\\\") #Unescape escape sequences. + script_str = script_str.replace(r"\\\n", "\n").replace(r"\\\\", "\\\\") # Unescape escape sequences. script_parser = configparser.ConfigParser(interpolation = None) - script_parser.optionxform = str #Don't transform the setting keys as they are case-sensitive. + script_parser.optionxform = str # type: ignore # Don't transform the setting keys as they are case-sensitive. script_parser.read_string(script_str) - for script_name, settings in script_parser.items(): #There should only be one, really! Otherwise we can't guarantee the order or allow multiple uses of the same script. - if script_name == "DEFAULT": #ConfigParser always has a DEFAULT section, but we don't fill it. Ignore this one. + for script_name, settings in script_parser.items(): # There should only be one, really! Otherwise we can't guarantee the order or allow multiple uses of the same script. + if script_name == "DEFAULT": # ConfigParser always has a DEFAULT section, but we don't fill it. Ignore this one. continue - if script_name not in self._loaded_scripts: #Don't know this post-processing plug-in. + if script_name not in self._loaded_scripts: # Don't know this post-processing plug-in. Logger.log("e", "Unknown post-processing script {script_name} was encountered in this global stack.".format(script_name = script_name)) continue new_script = self._loaded_scripts[script_name]() - for setting_key, setting_value in settings.items(): #Put all setting values into the script. - new_script._instance.setProperty(setting_key, "value", setting_value) + new_script.initialize() + for setting_key, setting_value in settings.items(): # Put all setting values into the script. + if new_script._instance is not None: + new_script._instance.setProperty(setting_key, "value", setting_value) self._script_list.append(new_script) self.setSelectedScriptIndex(0) self.scriptListChanged.emit() @pyqtSlot() - def writeScriptsToStack(self): - script_list_strs = [] + def writeScriptsToStack(self) -> None: + script_list_strs = [] # type: List[str] for script in self._script_list: - parser = configparser.ConfigParser(interpolation = None) #We'll encode the script as a config with one section. The section header is the key and its values are the settings. - parser.optionxform = str #Don't transform the setting keys as they are case-sensitive. + parser = configparser.ConfigParser(interpolation = None) # We'll encode the script as a config with one section. The section header is the key and its values are the settings. + parser.optionxform = str # type: ignore # Don't transform the setting keys as they are case-sensitive. script_name = script.getSettingData()["key"] parser.add_section(script_name) for key in script.getSettingData()["settings"]: value = script.getSettingValueByKey(key) parser[script_name][key] = str(value) - serialized = io.StringIO() #ConfigParser can only write to streams. Fine. + serialized = io.StringIO() # ConfigParser can only write to streams. Fine. parser.write(serialized) serialized.seek(0) script_str = serialized.read() - script_str = script_str.replace("\\\\", r"\\\\").replace("\n", r"\\\n") #Escape newlines because configparser sees those as section delimiters. + script_str = script_str.replace("\\\\", r"\\\\").replace("\n", r"\\\n") # Escape newlines because configparser sees those as section delimiters. script_list_strs.append(script_str) - script_list_strs = "\n".join(script_list_strs) #ConfigParser should never output three newlines in a row when serialised, so it's a safe delimiter. + script_list_string = "\n".join(script_list_strs) # ConfigParser should never output three newlines in a row when serialised, so it's a safe delimiter. global_stack = Application.getInstance().getGlobalContainerStack() + if global_stack is None: + return + if "post_processing_scripts" not in global_stack.getMetaData(): global_stack.setMetaDataEntry("post_processing_scripts", "") - Application.getInstance().getGlobalContainerStack().setMetaDataEntry("post_processing_scripts", script_list_strs) + + global_stack.setMetaDataEntry("post_processing_scripts", script_list_string) ## Creates the view used by show popup. The view is saved because of the fairly aggressive garbage collection. - def _createView(self): + def _createView(self) -> None: Logger.log("d", "Creating post processing plugin view.") self.loadAllScripts() # Create the plugin dialog component - path = os.path.join(PluginRegistry.getInstance().getPluginPath("PostProcessingPlugin"), "PostProcessingPlugin.qml") - self._view = Application.getInstance().createQmlComponent(path, {"manager": self}) + path = os.path.join(cast(str, PluginRegistry.getInstance().getPluginPath("PostProcessingPlugin")), "PostProcessingPlugin.qml") + self._view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self}) + if self._view is None: + Logger.log("e", "Not creating PostProcessing button near save button because the QML component failed to be created.") + return Logger.log("d", "Post processing view created.") # Create the save button component - Application.getInstance().addAdditionalComponent("saveButton", self._view.findChild(QObject, "postProcessingSaveAreaButton")) + CuraApplication.getInstance().addAdditionalComponent("saveButton", self._view.findChild(QObject, "postProcessingSaveAreaButton")) ## Show the (GUI) popup of the post processing plugin. - def showPopup(self): + def showPopup(self) -> None: if self._view is None: self._createView() + if self._view is None: + Logger.log("e", "Not creating PostProcessing window since the QML component failed to be created.") + return self._view.show() ## Property changed: trigger re-slice # To do this we use the global container stack propertyChanged. # Re-slicing is necessary for setting changes in this plugin, because the changes # are applied only once per "fresh" gcode - def _propertyChanged(self): + def _propertyChanged(self) -> None: global_container_stack = Application.getInstance().getGlobalContainerStack() - global_container_stack.propertyChanged.emit("post_processing_plugin", "value") + if global_container_stack is not None: + global_container_stack.propertyChanged.emit("post_processing_plugin", "value") diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.qml b/plugins/PostProcessingPlugin/PostProcessingPlugin.qml index b8d7258ef2..cd8303d1d3 100644 --- a/plugins/PostProcessingPlugin/PostProcessingPlugin.qml +++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.qml @@ -25,13 +25,13 @@ UM.Dialog { if(!visible) //Whenever the window is closed (either via the "Close" button or the X on the window frame), we want to update it in the stack. { - manager.writeScriptsToStack(); + manager.writeScriptsToStack() } } Item { - UM.I18nCatalog{id: catalog; name:"cura"} + UM.I18nCatalog{id: catalog; name: "cura"} id: base property int columnWidth: Math.round((base.width / 2) - UM.Theme.getSize("default_margin").width) property int textMargin: Math.round(UM.Theme.getSize("default_margin").width / 2) @@ -61,17 +61,23 @@ UM.Dialog anchors.leftMargin: base.textMargin anchors.right: parent.right anchors.rightMargin: base.textMargin - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") + elide: Text.ElideRight } ListView { id: activeScriptsList - anchors.top: activeScriptsHeader.bottom - anchors.topMargin: base.textMargin - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - anchors.rightMargin: base.textMargin + + anchors + { + top: activeScriptsHeader.bottom + left: parent.left + right: parent.right + rightMargin: base.textMargin + topMargin: base.textMargin + leftMargin: UM.Theme.getSize("default_margin").width + } + height: childrenRect.height model: manager.scriptList delegate: Item @@ -83,8 +89,12 @@ UM.Dialog id: activeScriptButton text: manager.getScriptLabelByKey(modelData.toString()) exclusiveGroup: selectedScriptGroup + width: parent.width + height: UM.Theme.getSize("setting").height checkable: true - checked: { + + checked: + { if (manager.selectedScriptIndex == index) { base.activeScriptName = manager.getScriptLabelByKey(modelData.toString()) @@ -101,8 +111,7 @@ UM.Dialog manager.setSelectedScriptIndex(index) base.activeScriptName = manager.getScriptLabelByKey(modelData.toString()) } - width: parent.width - height: UM.Theme.getSize("setting").height + style: ButtonStyle { background: Rectangle @@ -115,10 +124,12 @@ UM.Dialog { wrapMode: Text.Wrap text: control.text + elide: Text.ElideRight color: activeScriptButton.checked ? palette.highlightedText : palette.text } } } + Button { id: removeButton @@ -139,7 +150,6 @@ UM.Dialog anchors.horizontalCenter: parent.horizontalCenter width: Math.round(control.width / 2.7) height: Math.round(control.height / 2.7) - sourceSize.width: width sourceSize.height: width color: palette.text source: UM.Theme.getIcon("cross1") @@ -174,7 +184,6 @@ UM.Dialog anchors.horizontalCenter: parent.horizontalCenter width: Math.round(control.width / 2.5) height: Math.round(control.height / 2.5) - sourceSize.width: width sourceSize.height: width color: control.enabled ? palette.text : disabledPalette.text source: UM.Theme.getIcon("arrow_bottom") @@ -209,7 +218,6 @@ UM.Dialog anchors.horizontalCenter: parent.horizontalCenter width: Math.round(control.width / 2.5) height: Math.round(control.height / 2.5) - sourceSize.width: width sourceSize.height: width color: control.enabled ? palette.text : disabledPalette.text source: UM.Theme.getIcon("arrow_top") @@ -250,15 +258,15 @@ UM.Dialog onTriggered: manager.addScriptToList(modelData.toString()) } - onObjectAdded: scriptsMenu.insertItem(index, object); - onObjectRemoved: scriptsMenu.removeItem(object); + onObjectAdded: scriptsMenu.insertItem(index, object) + onObjectRemoved: scriptsMenu.removeItem(object) } } } Rectangle { - color: UM.Theme.getColor("sidebar") + color: UM.Theme.getColor("main_background") anchors.left: activeScripts.right anchors.leftMargin: UM.Theme.getSize("default_margin").width anchors.right: parent.right @@ -269,25 +277,35 @@ UM.Dialog { id: scriptSpecsHeader text: manager.selectedScriptIndex == -1 ? catalog.i18nc("@label", "Settings") : base.activeScriptName - anchors.top: parent.top - anchors.topMargin: base.textMargin - anchors.left: parent.left - anchors.leftMargin: base.textMargin - anchors.right: parent.right - anchors.rightMargin: base.textMargin + anchors + { + top: parent.top + topMargin: base.textMargin + left: parent.left + leftMargin: base.textMargin + right: parent.right + rightMargin: base.textMargin + } + + elide: Text.ElideRight height: 20 * screenScaleFactor - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") color: UM.Theme.getColor("text") } ScrollView { id: scrollView - anchors.top: scriptSpecsHeader.bottom - anchors.topMargin: settingsPanel.textMargin - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom + anchors + { + top: scriptSpecsHeader.bottom + topMargin: settingsPanel.textMargin + left: parent.left + leftMargin: UM.Theme.getSize("default_margin").width + right: parent.right + bottom: parent.bottom + } + visible: manager.selectedScriptDefinitionId != "" style: UM.Theme.styles.scrollview; @@ -297,11 +315,12 @@ UM.Dialog spacing: UM.Theme.getSize("default_lining").height model: UM.SettingDefinitionsModel { - id: definitionsModel; + id: definitionsModel containerId: manager.selectedScriptDefinitionId showAll: true } - delegate:Loader + + delegate: Loader { id: settingLoader @@ -312,23 +331,24 @@ UM.Dialog { if(model.type != undefined) { - return UM.Theme.getSize("section").height; + return UM.Theme.getSize("section").height } else { - return 0; + return 0 } } else { - return 0; + return 0 } - } Behavior on height { NumberAnimation { duration: 100 } } opacity: provider.properties.enabled == "True" ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } enabled: opacity > 0 + property var definition: model property var settingDefinitionsModel: definitionsModel property var propertyProvider: provider @@ -339,11 +359,12 @@ UM.Dialog //causing nasty issues when selecting different options. So disable asynchronous loading of enum type completely. asynchronous: model.type != "enum" && model.type != "extruder" - onLoaded: { + onLoaded: + { settingLoader.item.showRevertButton = false settingLoader.item.showInheritButton = false settingLoader.item.showLinkedSettingIcon = false - settingLoader.item.doDepthIndentation = true + settingLoader.item.doDepthIndentation = false settingLoader.item.doQualityUserSettingEmphasis = false } @@ -384,7 +405,7 @@ UM.Dialog UM.SettingPropertyProvider { id: inheritStackProvider - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: model.key ? model.key : "None" watchedProperties: [ "limit_to_extruder" ] } @@ -395,24 +416,20 @@ UM.Dialog onShowTooltip: { - tooltip.text = text; - var position = settingLoader.mapToItem(settingsPanel, settingsPanel.x, 0); - tooltip.show(position); + tooltip.text = text + var position = settingLoader.mapToItem(settingsPanel, settingsPanel.x, 0) + tooltip.show(position) tooltip.target.x = position.x + 1 } - onHideTooltip: - { - tooltip.hide(); - } + onHideTooltip: tooltip.hide() } - } } } } - Cura.SidebarTooltip + Cura.PrintSetupTooltip { id: tooltip } @@ -459,6 +476,7 @@ UM.Dialog Cura.SettingUnknown { } } } + rightButtons: Button { text: catalog.i18nc("@action:button", "Close") @@ -466,44 +484,15 @@ UM.Dialog onClicked: dialog.accept() } - Button { + Cura.SecondaryButton + { objectName: "postProcessingSaveAreaButton" visible: activeScriptsList.count > 0 - height: UM.Theme.getSize("save_button_save_to_button").height + height: UM.Theme.getSize("action_button").height width: height tooltip: catalog.i18nc("@info:tooltip", "Change active post-processing scripts") onClicked: dialog.show() - - style: ButtonStyle { - background: Rectangle { - id: deviceSelectionIcon - border.width: UM.Theme.getSize("default_lining").width - border.color: !control.enabled ? UM.Theme.getColor("action_button_disabled_border") : - control.pressed ? UM.Theme.getColor("action_button_active_border") : - control.hovered ? UM.Theme.getColor("action_button_hovered_border") : UM.Theme.getColor("action_button_border") - color: !control.enabled ? UM.Theme.getColor("action_button_disabled") : - control.pressed ? UM.Theme.getColor("action_button_active") : - control.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") - Behavior on color { ColorAnimation { duration: 50; } } - anchors.left: parent.left - anchors.leftMargin: Math.round(UM.Theme.getSize("save_button_text_margin").width / 2); - width: parent.height - height: parent.height - - UM.RecolorImage { - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - width: Math.round(parent.width / 2) - height: Math.round(parent.height / 2) - sourceSize.width: width - sourceSize.height: height - color: !control.enabled ? UM.Theme.getColor("action_button_disabled_text") : - control.pressed ? UM.Theme.getColor("action_button_active_text") : - control.hovered ? UM.Theme.getColor("action_button_hovered_text") : UM.Theme.getColor("action_button_text"); - source: "postprocessing.svg" - } - } - label: Label{ } - } + iconSource: "postprocessing.svg" + fixedWidthMode: true } } \ No newline at end of file diff --git a/plugins/PostProcessingPlugin/Script.py b/plugins/PostProcessingPlugin/Script.py index 7e430a5c78..e502f107f9 100644 --- a/plugins/PostProcessingPlugin/Script.py +++ b/plugins/PostProcessingPlugin/Script.py @@ -1,6 +1,8 @@ # Copyright (c) 2015 Jaime van Kessel # Copyright (c) 2018 Ultimaker B.V. # The PostProcessingPlugin is released under the terms of the AGPLv3 or higher. +from typing import Optional, Any, Dict, TYPE_CHECKING, List + from UM.Signal import Signal, signalemitter from UM.i18n import i18nCatalog @@ -17,23 +19,27 @@ import json import collections i18n_catalog = i18nCatalog("cura") +if TYPE_CHECKING: + from UM.Settings.Interfaces import DefinitionContainerInterface + ## Base class for scripts. All scripts should inherit the script class. @signalemitter class Script: - def __init__(self): + def __init__(self) -> None: super().__init__() - self._settings = None - self._stack = None + self._stack = None # type: Optional[ContainerStack] + self._definition = None # type: Optional[DefinitionContainerInterface] + self._instance = None # type: Optional[InstanceContainer] + def initialize(self) -> None: setting_data = self.getSettingData() - self._stack = ContainerStack(stack_id = str(id(self))) + self._stack = ContainerStack(stack_id=str(id(self))) self._stack.setDirty(False) # This stack does not need to be saved. - ## Check if the definition of this script already exists. If not, add it to the registry. if "key" in setting_data: - definitions = ContainerRegistry.getInstance().findDefinitionContainers(id = setting_data["key"]) + definitions = ContainerRegistry.getInstance().findDefinitionContainers(id=setting_data["key"]) if definitions: # Definition was found self._definition = definitions[0] @@ -45,10 +51,13 @@ class Script: except ContainerFormatError: self._definition = None return + if self._definition is None: + return self._stack.addContainer(self._definition) self._instance = InstanceContainer(container_id="ScriptInstanceContainer") self._instance.setDefinition(self._definition.getId()) - self._instance.setMetaDataEntry("setting_version", self._definition.getMetaDataEntry("setting_version", default = 0)) + self._instance.setMetaDataEntry("setting_version", + self._definition.getMetaDataEntry("setting_version", default=0)) self._stack.addContainer(self._instance) self._stack.propertyChanged.connect(self._onPropertyChanged) @@ -57,16 +66,17 @@ class Script: settingsLoaded = Signal() valueChanged = Signal() # Signal emitted whenever a value of a setting is changed - def _onPropertyChanged(self, key, property_name): + def _onPropertyChanged(self, key: str, property_name: str) -> None: if property_name == "value": self.valueChanged.emit() # Property changed: trigger reslice # To do this we use the global container stack propertyChanged. - # Reslicing is necessary for setting changes in this plugin, because the changes + # Re-slicing is necessary for setting changes in this plugin, because the changes # are applied only once per "fresh" gcode global_container_stack = Application.getInstance().getGlobalContainerStack() - global_container_stack.propertyChanged.emit(key, property_name) + if global_container_stack is not None: + global_container_stack.propertyChanged.emit(key, property_name) ## Needs to return a dict that can be used to construct a settingcategory file. # See the example script for an example. @@ -74,30 +84,35 @@ class Script: # Scripts can either override getSettingData directly, or use getSettingDataString # to return a string that will be parsed as json. The latter has the benefit over # returning a dict in that the order of settings is maintained. - def getSettingData(self): - setting_data = self.getSettingDataString() - if type(setting_data) == str: - setting_data = json.loads(setting_data, object_pairs_hook = collections.OrderedDict) + def getSettingData(self) -> Dict[str, Any]: + setting_data_as_string = self.getSettingDataString() + setting_data = json.loads(setting_data_as_string, object_pairs_hook = collections.OrderedDict) return setting_data - def getSettingDataString(self): + def getSettingDataString(self) -> str: raise NotImplementedError() - def getDefinitionId(self): + def getDefinitionId(self) -> Optional[str]: if self._stack: - return self._stack.getBottom().getId() + bottom = self._stack.getBottom() + if bottom is not None: + return bottom.getId() + return None - def getStackId(self): + def getStackId(self) -> Optional[str]: if self._stack: return self._stack.getId() + return None ## Convenience function that retrieves value of a setting from the stack. - def getSettingValueByKey(self, key): - return self._stack.getProperty(key, "value") + def getSettingValueByKey(self, key: str) -> Any: + if self._stack is not None: + return self._stack.getProperty(key, "value") + return None ## Convenience function that finds the value in a line of g-code. # When requesting key = x from line "G1 X100" the value 100 is returned. - def getValue(self, line, key, default = None): + def getValue(self, line: str, key: str, default = None) -> Any: if not key in line or (';' in line and line.find(key) > line.find(';')): return default sub_part = line[line.find(key) + 1:] @@ -125,7 +140,7 @@ class Script: # \param line The original g-code line that must be modified. If not # provided, an entirely new g-code line will be produced. # \return A line of g-code with the desired parameters filled in. - def putValue(self, line = "", **kwargs): + def putValue(self, line: str = "", **kwargs) -> str: #Strip the comment. comment = "" if ";" in line: @@ -166,5 +181,5 @@ class Script: ## This is called when the script is executed. # It gets a list of g-code strings and needs to return a (modified) list. - def execute(self, data): + def execute(self, data: List[str]) -> List[str]: raise NotImplementedError() diff --git a/plugins/PostProcessingPlugin/__init__.py b/plugins/PostProcessingPlugin/__init__.py index 85f1126136..8064d1132a 100644 --- a/plugins/PostProcessingPlugin/__init__.py +++ b/plugins/PostProcessingPlugin/__init__.py @@ -2,10 +2,10 @@ # The PostProcessingPlugin is released under the terms of the AGPLv3 or higher. from . import PostProcessingPlugin -from UM.i18n import i18nCatalog -catalog = i18nCatalog("cura") + + def getMetaData(): return {} - + def register(app): return {"extension": PostProcessingPlugin.PostProcessingPlugin()} \ No newline at end of file diff --git a/plugins/PostProcessingPlugin/plugin.json b/plugins/PostProcessingPlugin/plugin.json index ebfef8145a..1e73133c53 100644 --- a/plugins/PostProcessingPlugin/plugin.json +++ b/plugins/PostProcessingPlugin/plugin.json @@ -1,8 +1,8 @@ { "name": "Post Processing", "author": "Ultimaker", - "version": "2.2", - "api": 4, + "version": "2.2.1", + "api": "6.0", "description": "Extension that allows for user created scripts for post processing", "catalog": "cura" } \ No newline at end of file diff --git a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py index 54d6fdb155..be9f93c0f6 100644 --- a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py +++ b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py @@ -112,7 +112,7 @@ class ChangeAtZ(Script): "e1_Change_speed": { "label": "Change Speed", - "description": "Select if total speed (print and travel) has to be cahnged", + "description": "Select if total speed (print and travel) has to be changed", "type": "bool", "default_value": false }, @@ -407,13 +407,13 @@ class ChangeAtZ(Script): if "M106" in line and state < 3: #looking for fan speed old["fanSpeed"] = self.getValue(line, "S", old["fanSpeed"]) if "M221" in line and state < 3: #looking for flow rate - tmp_extruder = self.getValue(line,"T",None) + tmp_extruder = self.getValue(line, "T", None) if tmp_extruder == None: #check if extruder is specified old["flowrate"] = self.getValue(line, "S", old["flowrate"]) elif tmp_extruder == 0: #first extruder old["flowrateOne"] = self.getValue(line, "S", old["flowrateOne"]) elif tmp_extruder == 1: #second extruder - old["flowrateOne"] = self.getValue(line, "S", old["flowrateOne"]) + old["flowrateTwo"] = self.getValue(line, "S", old["flowrateTwo"]) if ("M84" in line or "M25" in line): if state>0 and ChangeProp["speed"]: #"finish" commands for UM Original and UM2 modified_gcode += "M220 S100 ; speed reset to 100% at the end of print\n" diff --git a/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py b/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py new file mode 100644 index 0000000000..9fd9e08d7d --- /dev/null +++ b/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py @@ -0,0 +1,53 @@ +# Cura PostProcessingPlugin +# Author: Amanda de Castilho +# Date: August 28, 2018 + +# Description: This plugin inserts a line at the start of each layer, +# M117 - displays the filename and layer height to the LCD +# Alternatively, user can override the filename to display alt text + layer height + +from ..Script import Script +from UM.Application import Application + +class DisplayFilenameAndLayerOnLCD(Script): + def __init__(self): + super().__init__() + + def getSettingDataString(self): + return """{ + "name": "Display filename and layer on LCD", + "key": "DisplayFilenameAndLayerOnLCD", + "metadata": {}, + "version": 2, + "settings": + { + "name": + { + "label": "text to display:", + "description": "By default the current filename will be displayed on the LCD. Enter text here to override the filename and display something else.", + "type": "str", + "default_value": "" + } + } + }""" + + def execute(self, data): + if self.getSettingValueByKey("name") != "": + name = self.getSettingValueByKey("name") + else: + name = Application.getInstance().getPrintInformation().jobName + lcd_text = "M117 " + name + " layer: " + i = 0 + for layer in data: + display_text = lcd_text + str(i) + layer_index = data.index(layer) + lines = layer.split("\n") + for line in lines: + if line.startswith(";LAYER:"): + line_index = lines.index(line) + lines.insert(line_index + 1, display_text) + i += 1 + final_lines = "\n".join(lines) + data[layer_index] = final_lines + + return data diff --git a/plugins/PostProcessingPlugin/scripts/ExampleScript.md b/plugins/PostProcessingPlugin/scripts/ExampleScript.md new file mode 100644 index 0000000000..08652132aa --- /dev/null +++ b/plugins/PostProcessingPlugin/scripts/ExampleScript.md @@ -0,0 +1,3 @@ +A good example script is SearchAndReplace.py. +If you have any questions please ask them at: +https://github.com/Ultimaker/Cura/issues \ No newline at end of file diff --git a/plugins/PostProcessingPlugin/scripts/ExampleScript.py b/plugins/PostProcessingPlugin/scripts/ExampleScript.py deleted file mode 100644 index 416a5f5404..0000000000 --- a/plugins/PostProcessingPlugin/scripts/ExampleScript.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (c) 2015 Jaime van Kessel, Ultimaker B.V. -# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher. -from ..Script import Script - -class ExampleScript(Script): - def __init__(self): - super().__init__() - - def getSettingDataString(self): - return """{ - "name":"Example script", - "key": "ExampleScript", - "metadata": {}, - "version": 2, - "settings": - { - "test": - { - "label": "Test", - "description": "None", - "unit": "mm", - "type": "float", - "default_value": 0.5, - "minimum_value": "0", - "minimum_value_warning": "0.1", - "maximum_value_warning": "1" - }, - "derp": - { - "label": "zomg", - "description": "afgasgfgasfgasf", - "unit": "mm", - "type": "float", - "default_value": 0.5, - "minimum_value": "0", - "minimum_value_warning": "0.1", - "maximum_value_warning": "1" - } - } - }""" - - def execute(self, data): - return data \ No newline at end of file diff --git a/plugins/PostProcessingPlugin/scripts/FilamentChange.py b/plugins/PostProcessingPlugin/scripts/FilamentChange.py index 0fa52de4f1..febb93be4c 100644 --- a/plugins/PostProcessingPlugin/scripts/FilamentChange.py +++ b/plugins/PostProcessingPlugin/scripts/FilamentChange.py @@ -1,5 +1,6 @@ -# This PostProcessing Plugin script is released -# under the terms of the AGPLv3 or higher +# Copyright (c) 2019 Ultimaker B.V. +# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher. + from typing import Optional, Tuple from UM.Logger import Logger @@ -44,6 +45,22 @@ class FilamentChange(Script): "unit": "mm", "type": "float", "default_value": 300.0 + }, + "x_position": + { + "label": "X Position", + "description": "Extruder X position. The print head will move here for filament change.", + "unit": "mm", + "type": "float", + "default_value": 0 + }, + "y_position": + { + "label": "Y Position", + "description": "Extruder Y position. The print head will move here for filament change.", + "unit": "mm", + "type": "float", + "default_value": 0 } } }""" @@ -54,17 +71,25 @@ class FilamentChange(Script): layer_nums = self.getSettingValueByKey("layer_number") initial_retract = self.getSettingValueByKey("initial_retract") later_retract = self.getSettingValueByKey("later_retract") - + x_pos = self.getSettingValueByKey("x_position") + y_pos = self.getSettingValueByKey("y_position") + color_change = "M600" - + if initial_retract is not None and initial_retract > 0.: - color_change = color_change + (" E-%.2f" % initial_retract) - + color_change = color_change + (" E%.2f" % initial_retract) + if later_retract is not None and later_retract > 0.: - color_change = color_change + (" L-%.2f" % later_retract) - + color_change = color_change + (" L%.2f" % later_retract) + + if x_pos is not None: + color_change = color_change + (" X%.2f" % x_pos) + + if y_pos is not None: + color_change = color_change + (" Y%.2f" % y_pos) + color_change = color_change + " ; Generated by FilamentChange plugin" - + layer_targets = layer_nums.split(",") if len(layer_targets) > 0: for layer_num in layer_targets: diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py new file mode 100644 index 0000000000..79e5d8c62d --- /dev/null +++ b/plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py @@ -0,0 +1,51 @@ +from ..Script import Script + +class PauseAtHeightRepRapFirmwareDuet(Script): + + def getSettingDataString(self): + return """{ + "name": "Pause at height for RepRapFirmware DuetWifi / Duet Ethernet / Duet Maestro", + "key": "PauseAtHeightRepRapFirmwareDuet", + "metadata": {}, + "version": 2, + "settings": + { + "pause_height": + { + "label": "Pause height", + "description": "At what height should the pause occur", + "unit": "mm", + "type": "float", + "default_value": 5.0 + } + } + }""" + + def execute(self, data): + current_z = 0. + pause_z = self.getSettingValueByKey("pause_height") + + layers_started = False + for layer_number, layer in enumerate(data): + lines = layer.split("\n") + for line in lines: + if ";LAYER:0" in line: + layers_started = True + continue + + if not layers_started: + continue + + if self.getValue(line, 'G') == 1 or self.getValue(line, 'G') == 0: + current_z = self.getValue(line, 'Z') + if current_z != None: + if current_z >= pause_z: + prepend_gcode = ";TYPE:CUSTOM\n" + prepend_gcode += "; -- Pause at height (%.2f mm) --\n" % pause_z + prepend_gcode += self.putValue(M = 226) + "\n" + layer = prepend_gcode + layer + + data[layer_number] = layer # Override the data of this layer with the modified data + return data + break + return data diff --git a/plugins/PrepareStage/PrepareMain.qml b/plugins/PrepareStage/PrepareMain.qml new file mode 100644 index 0000000000..bfeb62f0e8 --- /dev/null +++ b/plugins/PrepareStage/PrepareMain.qml @@ -0,0 +1,24 @@ +//Copyright (c) 2019 Ultimaker B.V. +//Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.4 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.1 +import QtQuick.Controls.Styles 1.1 + +import UM 1.0 as UM +import Cura 1.0 as Cura + +Item +{ + id: prepareMain + + Cura.ActionPanelWidget + { + id: actionPanelWidget + anchors.right: parent.right + anchors.bottom: parent.bottom + anchors.rightMargin: UM.Theme.getSize("thick_margin").width + anchors.bottomMargin: UM.Theme.getSize("thick_margin").height + } +} \ No newline at end of file diff --git a/plugins/PrepareStage/PrepareMenu.qml b/plugins/PrepareStage/PrepareMenu.qml new file mode 100644 index 0000000000..b62d65254d --- /dev/null +++ b/plugins/PrepareStage/PrepareMenu.qml @@ -0,0 +1,134 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.3 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +import QtGraphicalEffects 1.0 // For the dropshadow + +Item +{ + id: prepareMenu + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + // Item to ensure that all of the buttons are nicely centered. + Item + { + anchors.horizontalCenter: parent.horizontalCenter + width: openFileButton.width + itemRow.width + UM.Theme.getSize("default_margin").width + height: parent.height + + RowLayout + { + id: itemRow + + anchors.left: openFileButton.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + + width: Math.round(0.9 * prepareMenu.width) + height: parent.height + spacing: 0 + + Cura.MachineSelector + { + id: machineSelection + headerCornerSide: Cura.RoundedRectangle.Direction.Left + Layout.minimumWidth: UM.Theme.getSize("machine_selector_widget").width + Layout.maximumWidth: UM.Theme.getSize("machine_selector_widget").width + Layout.fillWidth: true + Layout.fillHeight: true + } + + // Separator line + Rectangle + { + height: parent.height + width: UM.Theme.getSize("default_lining").width + color: UM.Theme.getColor("lining") + } + + Cura.ConfigurationMenu + { + Layout.fillHeight: true + Layout.fillWidth: true + Layout.preferredWidth: itemRow.width - machineSelection.width - printSetupSelectorItem.width - 2 * UM.Theme.getSize("default_lining").width + } + + // Separator line + Rectangle + { + height: parent.height + width: UM.Theme.getSize("default_lining").width + color: UM.Theme.getColor("lining") + } + + Item + { + id: printSetupSelectorItem + // This is a work around to prevent the printSetupSelector from having to be re-loaded every time + // a stage switch is done. + children: [printSetupSelector] + height: childrenRect.height + width: childrenRect.width + } + } + + Button + { + id: openFileButton + height: UM.Theme.getSize("stage_menu").height + width: UM.Theme.getSize("stage_menu").height + onClicked: Cura.Actions.open.trigger() + hoverEnabled: true + + contentItem: Item + { + anchors.fill: parent + UM.RecolorImage + { + id: buttonIcon + anchors.centerIn: parent + source: UM.Theme.getIcon("load") + width: UM.Theme.getSize("button_icon").width + height: UM.Theme.getSize("button_icon").height + color: UM.Theme.getColor("icon") + + sourceSize.height: height + } + } + + background: Rectangle + { + id: background + height: UM.Theme.getSize("stage_menu").height + width: UM.Theme.getSize("stage_menu").height + + radius: UM.Theme.getSize("default_radius").width + color: openFileButton.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") + } + + DropShadow + { + id: shadow + // Don't blur the shadow + radius: 0 + anchors.fill: background + source: background + verticalOffset: 2 + visible: true + color: UM.Theme.getColor("action_button_shadow") + // Should always be drawn behind the background. + z: background.z - 1 + } + } + } +} diff --git a/plugins/PrepareStage/PrepareStage.py b/plugins/PrepareStage/PrepareStage.py index c3c9f0a1f8..c2dee9693b 100644 --- a/plugins/PrepareStage/PrepareStage.py +++ b/plugins/PrepareStage/PrepareStage.py @@ -1,19 +1,19 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. + import os.path from UM.Application import Application -from UM.Resources import Resources +from UM.PluginRegistry import PluginRegistry from cura.Stages.CuraStage import CuraStage - ## Stage for preparing model (slicing). class PrepareStage(CuraStage): - def __init__(self, parent = None): super().__init__(parent) Application.getInstance().engineCreatedSignal.connect(self._engineCreated) def _engineCreated(self): - sidebar_component_path = os.path.join(Resources.getPath(Application.getInstance().ResourceTypes.QmlFiles), - "PrepareSidebar.qml") - self.addDisplayComponent("sidebar", sidebar_component_path) + menu_component_path = os.path.join(PluginRegistry.getInstance().getPluginPath("PrepareStage"), "PrepareMenu.qml") + main_component_path = os.path.join(PluginRegistry.getInstance().getPluginPath("PrepareStage"), "PrepareMain.qml") + self.addDisplayComponent("menu", menu_component_path) + self.addDisplayComponent("main", main_component_path) \ No newline at end of file diff --git a/plugins/PrepareStage/plugin.json b/plugins/PrepareStage/plugin.json index 4fd55e955e..dc5c68ce16 100644 --- a/plugins/PrepareStage/plugin.json +++ b/plugins/PrepareStage/plugin.json @@ -1,8 +1,8 @@ { "name": "Prepare Stage", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides a prepare stage in Cura.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } \ No newline at end of file diff --git a/plugins/PreviewStage/PreviewMain.qml b/plugins/PreviewStage/PreviewMain.qml new file mode 100644 index 0000000000..6b5ce2436b --- /dev/null +++ b/plugins/PreviewStage/PreviewMain.qml @@ -0,0 +1,31 @@ +// Copyright (c) 2019 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.4 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.1 +import QtQuick.Controls.Styles 1.1 + +import UM 1.0 as UM +import Cura 1.0 as Cura + +Item +{ + Loader + { + id: previewMain + anchors.fill: parent + + source: UM.Controller.activeView != null && UM.Controller.activeView.mainComponent != null ? UM.Controller.activeView.mainComponent : "" + } + + Cura.ActionPanelWidget + { + id: actionPanelWidget + anchors.right: parent.right + anchors.bottom: parent.bottom + anchors.rightMargin: UM.Theme.getSize("thick_margin").width + anchors.bottomMargin: UM.Theme.getSize("thick_margin").height + hasPreviewButton: false + } +} \ No newline at end of file diff --git a/plugins/PreviewStage/PreviewMenu.qml b/plugins/PreviewStage/PreviewMenu.qml new file mode 100644 index 0000000000..62f814aac9 --- /dev/null +++ b/plugins/PreviewStage/PreviewMenu.qml @@ -0,0 +1,79 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.3 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +Item +{ + id: previewMenu + + property real itemHeight: height - 2 * UM.Theme.getSize("default_lining").width + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + Row + { + id: stageMenuRow + anchors.centerIn: parent + height: parent.height + width: childrenRect.width + + // We want this row to have a preferred with equals to the 85% of the parent + property int preferredWidth: Math.round(0.85 * previewMenu.width) + + Cura.ViewsSelector + { + id: viewsSelector + height: parent.height + width: UM.Theme.getSize("views_selector").width + headerCornerSide: Cura.RoundedRectangle.Direction.Left + } + + // Separator line + Rectangle + { + height: parent.height + // If there is no viewPanel, we only need a single spacer, so hide this one. + visible: viewPanel.source != "" + width: visible ? UM.Theme.getSize("default_lining").width : 0 + + color: UM.Theme.getColor("lining") + } + + // This component will grow freely up to complete the preferredWidth of the row. + Loader + { + id: viewPanel + height: parent.height + width: source != "" ? (stageMenuRow.preferredWidth - viewsSelector.width - printSetupSelectorItem.width - 2 * UM.Theme.getSize("default_lining").width) : 0 + source: UM.Controller.activeView != null && UM.Controller.activeView.stageMenuComponent != null ? UM.Controller.activeView.stageMenuComponent : "" + } + + // Separator line + Rectangle + { + height: parent.height + width: UM.Theme.getSize("default_lining").width + color: UM.Theme.getColor("lining") + } + + Item + { + id: printSetupSelectorItem + // This is a work around to prevent the printSetupSelector from having to be re-loaded every time + // a stage switch is done. + children: [printSetupSelector] + height: childrenRect.height + width: childrenRect.width + } + } +} diff --git a/plugins/PreviewStage/PreviewStage.py b/plugins/PreviewStage/PreviewStage.py new file mode 100644 index 0000000000..1c487c8340 --- /dev/null +++ b/plugins/PreviewStage/PreviewStage.py @@ -0,0 +1,51 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import os.path + +from UM.Qt.QtApplication import QtApplication +from cura.Stages.CuraStage import CuraStage + +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from UM.View.View import View + + +## Displays a preview of what you're about to print. +# +# The Python component of this stage just loads PreviewMain.qml for display +# when the stage is selected, and makes sure that it reverts to the previous +# view when the previous stage is activated. +class PreviewStage(CuraStage): + def __init__(self, application: QtApplication, parent = None) -> None: + super().__init__(parent) + self._application = application + self._application.engineCreatedSignal.connect(self._engineCreated) + self._previously_active_view = None # type: Optional[View] + + ## When selecting the stage, remember which was the previous view so that + # we can revert to that view when we go out of the stage later. + def onStageSelected(self) -> None: + self._previously_active_view = self._application.getController().getActiveView() + + ## Called when going to a different stage (away from the Preview Stage). + # + # When going to a different stage, the view should be reverted to what it + # was before. Normally, that just reverts it to solid view. + def onStageDeselected(self) -> None: + if self._previously_active_view is not None: + self._application.getController().setActiveView(self._previously_active_view.getPluginId()) + self._previously_active_view = None + + ## Delayed load of the QML files. + # + # We need to make sure that the QML engine is running before we can load + # these. + def _engineCreated(self) -> None: + plugin_path = self._application.getPluginRegistry().getPluginPath(self.getPluginId()) + if plugin_path is not None: + menu_component_path = os.path.join(plugin_path, "PreviewMenu.qml") + main_component_path = os.path.join(plugin_path, "PreviewMain.qml") + self.addDisplayComponent("menu", menu_component_path) + self.addDisplayComponent("main", main_component_path) diff --git a/plugins/PreviewStage/__init__.py b/plugins/PreviewStage/__init__.py new file mode 100644 index 0000000000..424f573e4a --- /dev/null +++ b/plugins/PreviewStage/__init__.py @@ -0,0 +1,22 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from . import PreviewStage + +from UM.i18n import i18nCatalog +i18n_catalog = i18nCatalog("cura") + + +def getMetaData(): + return { + "stage": { + "name": i18n_catalog.i18nc("@item:inmenu", "Preview"), + "weight": 1 + } + } + + +def register(app): + return { + "stage": PreviewStage.PreviewStage(app) + } diff --git a/plugins/PreviewStage/plugin.json b/plugins/PreviewStage/plugin.json new file mode 100644 index 0000000000..e1e4288bae --- /dev/null +++ b/plugins/PreviewStage/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Preview Stage", + "author": "Ultimaker B.V.", + "version": "1.0.1", + "description": "Provides a preview stage in Cura.", + "api": "6.0", + "i18n-catalog": "cura" +} \ No newline at end of file diff --git a/plugins/RemovableDriveOutputDevice/__init__.py b/plugins/RemovableDriveOutputDevice/__init__.py index dc547b7bcc..1758801f8a 100644 --- a/plugins/RemovableDriveOutputDevice/__init__.py +++ b/plugins/RemovableDriveOutputDevice/__init__.py @@ -3,12 +3,10 @@ from UM.Platform import Platform from UM.Logger import Logger -from UM.i18n import i18nCatalog -catalog = i18nCatalog("cura") + def getMetaData(): - return { - } + return {} def register(app): if Platform.isWindows(): diff --git a/plugins/RemovableDriveOutputDevice/plugin.json b/plugins/RemovableDriveOutputDevice/plugin.json index df11644256..5523d6b1c1 100644 --- a/plugins/RemovableDriveOutputDevice/plugin.json +++ b/plugins/RemovableDriveOutputDevice/plugin.json @@ -2,7 +2,7 @@ "name": "Removable Drive Output Device Plugin", "author": "Ultimaker B.V.", "description": "Provides removable drive hotplugging and writing support.", - "version": "1.0.0", - "api": 4, + "version": "1.0.1", + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/SimulationView/LayerSlider.qml b/plugins/SimulationView/LayerSlider.qml index 6dcaa3f475..88f298d1f5 100644 --- a/plugins/SimulationView/LayerSlider.qml +++ b/plugins/SimulationView/LayerSlider.qml @@ -9,26 +9,24 @@ import QtQuick.Controls.Styles 1.1 import UM 1.0 as UM import Cura 1.0 as Cura -Item { +Item +{ id: sliderRoot - // handle properties - property real handleSize: 10 + // Handle properties + property real handleSize: UM.Theme.getSize("slider_handle").width property real handleRadius: handleSize / 2 property real minimumRangeHandleSize: handleSize / 2 - property color upperHandleColor: "black" - property color lowerHandleColor: "black" - property color rangeHandleColor: "black" - property color handleActiveColor: "white" - property real handleLabelWidth: width + property color upperHandleColor: UM.Theme.getColor("slider_handle") + property color lowerHandleColor: UM.Theme.getColor("slider_handle") + property color rangeHandleColor: UM.Theme.getColor("slider_groove_fill") + property color handleActiveColor: UM.Theme.getColor("slider_handle_active") property var activeHandle: upperHandle - // track properties - property real trackThickness: 4 // width of the slider track - property real trackRadius: trackThickness / 2 - property color trackColor: "white" - property real trackBorderWidth: 1 // width of the slider track border - property color trackBorderColor: "black" + // Track properties + property real trackThickness: UM.Theme.getSize("slider_groove").width // width of the slider track + property real trackRadius: UM.Theme.getSize("slider_groove_radius").width + property color trackColor: UM.Theme.getColor("slider_groove") // value properties property real maximumValue: 100 @@ -39,40 +37,49 @@ Item { property real lowerValue: minimumValue property bool layersVisible: true + property bool manuallyChanged: true // Indicates whether the value was changed manually or during simulation - function getUpperValueFromSliderHandle() { + function getUpperValueFromSliderHandle() + { return upperHandle.getValue() } - function setUpperValue(value) { + function setUpperValue(value) + { upperHandle.setValue(value) updateRangeHandle() } - function getLowerValueFromSliderHandle() { + function getLowerValueFromSliderHandle() + { return lowerHandle.getValue() } - function setLowerValue(value) { + function setLowerValue(value) + { lowerHandle.setValue(value) updateRangeHandle() } - function updateRangeHandle() { + function updateRangeHandle() + { rangeHandle.height = lowerHandle.y - (upperHandle.y + upperHandle.height) } // set the active handle to show only one label at a time - function setActiveHandle(handle) { + function setActiveHandle(handle) + { activeHandle = handle } - function normalizeValue(value) { + function normalizeValue(value) + { return Math.min(Math.max(value, sliderRoot.minimumValue), sliderRoot.maximumValue) } - // slider track - Rectangle { + // Slider track + Rectangle + { id: track width: sliderRoot.trackThickness @@ -80,13 +87,12 @@ Item { radius: sliderRoot.trackRadius anchors.centerIn: sliderRoot color: sliderRoot.trackColor - border.width: sliderRoot.trackBorderWidth - border.color: sliderRoot.trackBorderColor visible: sliderRoot.layersVisible } // Range handle - Item { + Item + { id: rangeHandle y: upperHandle.y + upperHandle.height @@ -95,8 +101,10 @@ Item { anchors.horizontalCenter: sliderRoot.horizontalCenter visible: sliderRoot.layersVisible - // set the new value when dragging - function onHandleDragged () { + // Set the new value when dragging + function onHandleDragged() + { + sliderRoot.manuallyChanged = true upperHandle.y = y - upperHandle.height lowerHandle.y = y + height @@ -109,7 +117,14 @@ Item { UM.SimulationView.setMinimumLayer(lowerValue) } - function setValue (value) { + function setValueManually(value) + { + sliderRoot.manuallyChanged = true + upperHandle.setValue(value) + } + + function setValue(value) + { var range = sliderRoot.upperValue - sliderRoot.lowerValue value = Math.min(value, sliderRoot.maximumValue) value = Math.max(value, sliderRoot.minimumValue + range) @@ -118,17 +133,21 @@ Item { UM.SimulationView.setMinimumLayer(value - range) } - Rectangle { - width: sliderRoot.trackThickness - 2 * sliderRoot.trackBorderWidth + Rectangle + { + width: sliderRoot.trackThickness height: parent.height + sliderRoot.handleSize anchors.centerIn: parent + radius: sliderRoot.trackRadius color: sliderRoot.rangeHandleColor } - MouseArea { + MouseArea + { anchors.fill: parent - drag { + drag + { target: parent axis: Drag.YAxis minimumY: upperHandle.height @@ -139,7 +158,8 @@ Item { onPressed: sliderRoot.setActiveHandle(rangeHandle) } - SimulationSliderLabel { + SimulationSliderLabel + { id: rangleHandleLabel height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height @@ -152,12 +172,13 @@ Item { maximumValue: sliderRoot.maximumValue value: sliderRoot.upperValue busy: UM.SimulationView.busy - setValue: rangeHandle.setValue // connect callback functions + setValue: rangeHandle.setValueManually // connect callback functions } } // Upper handle - Rectangle { + Rectangle + { id: upperHandle y: sliderRoot.height - (sliderRoot.minimumRangeHandleSize + 2 * sliderRoot.handleSize) @@ -168,10 +189,13 @@ Item { color: upperHandleLabel.activeFocus ? sliderRoot.handleActiveColor : sliderRoot.upperHandleColor visible: sliderRoot.layersVisible - function onHandleDragged () { + function onHandleDragged() + { + sliderRoot.manuallyChanged = true // don't allow the lower handle to be heigher than the upper handle - if (lowerHandle.y - (y + height) < sliderRoot.minimumRangeHandleSize) { + if (lowerHandle.y - (y + height) < sliderRoot.minimumRangeHandleSize) + { lowerHandle.y = y + height + sliderRoot.minimumRangeHandleSize } @@ -183,21 +207,34 @@ Item { } // get the upper value based on the slider position - function getValue () { + function getValue() + { var result = y / (sliderRoot.height - (2 * sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize)) result = sliderRoot.maximumValue + result * (sliderRoot.minimumValue - (sliderRoot.maximumValue - sliderRoot.minimumValue)) result = sliderRoot.roundValues ? Math.round(result) : result return result } + function setValueManually(value) + { + sliderRoot.manuallyChanged = true + upperHandle.setValue(value) + } + // set the slider position based on the upper value - function setValue (value) { + function setValue(value) + { // Normalize values between range, since using arrow keys will create out-of-the-range values value = sliderRoot.normalizeValue(value) UM.SimulationView.setCurrentLayer(value) var diff = (value - sliderRoot.maximumValue) / (sliderRoot.minimumValue - sliderRoot.maximumValue) + // In case there is only one layer, the diff value results in a NaN, so this is for catching this specific case + if (isNaN(diff)) + { + diff = 0 + } var newUpperYPosition = Math.round(diff * (sliderRoot.height - (2 * sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize))) y = newUpperYPosition @@ -209,10 +246,12 @@ Item { Keys.onDownPressed: upperHandleLabel.setValue(upperHandleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) // dragging - MouseArea { + MouseArea + { anchors.fill: parent - drag { + drag + { target: parent axis: Drag.YAxis minimumY: 0 @@ -220,17 +259,19 @@ Item { } onPositionChanged: parent.onHandleDragged() - onPressed: { + onPressed: + { sliderRoot.setActiveHandle(upperHandle) upperHandleLabel.forceActiveFocus() } } - SimulationSliderLabel { + SimulationSliderLabel + { id: upperHandleLabel height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height - x: parent.x - width - UM.Theme.getSize("default_margin").width + x: parent.x - parent.width - width anchors.verticalCenter: parent.verticalCenter target: Qt.point(sliderRoot.width, y + height / 2) visible: sliderRoot.activeHandle == parent @@ -239,12 +280,13 @@ Item { maximumValue: sliderRoot.maximumValue value: sliderRoot.upperValue busy: UM.SimulationView.busy - setValue: upperHandle.setValue // connect callback functions + setValue: upperHandle.setValueManually // connect callback functions } } // Lower handle - Rectangle { + Rectangle + { id: lowerHandle y: sliderRoot.height - sliderRoot.handleSize @@ -256,10 +298,13 @@ Item { visible: sliderRoot.layersVisible - function onHandleDragged () { + function onHandleDragged() + { + sliderRoot.manuallyChanged = true // don't allow the upper handle to be lower than the lower handle - if (y - (upperHandle.y + upperHandle.height) < sliderRoot.minimumRangeHandleSize) { + if (y - (upperHandle.y + upperHandle.height) < sliderRoot.minimumRangeHandleSize) + { upperHandle.y = y - (upperHandle.heigth + sliderRoot.minimumRangeHandleSize) } @@ -271,21 +316,35 @@ Item { } // get the lower value from the current slider position - function getValue () { + function getValue() + { var result = (y - (sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize)) / (sliderRoot.height - (2 * sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize)); result = sliderRoot.maximumValue - sliderRoot.minimumRange + result * (sliderRoot.minimumValue - (sliderRoot.maximumValue - sliderRoot.minimumRange)) result = sliderRoot.roundValues ? Math.round(result) : result return result } + function setValueManually(value) + { + sliderRoot.manuallyChanged = true + lowerHandle.setValue(value) + } + // set the slider position based on the lower value - function setValue (value) { + function setValue(value) + { + // Normalize values between range, since using arrow keys will create out-of-the-range values value = sliderRoot.normalizeValue(value) UM.SimulationView.setMinimumLayer(value) var diff = (value - sliderRoot.maximumValue) / (sliderRoot.minimumValue - sliderRoot.maximumValue) + // In case there is only one layer, the diff value results in a NaN, so this is for catching this specific case + if (isNaN(diff)) + { + diff = 0 + } var newLowerYPosition = Math.round((sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize) + diff * (sliderRoot.height - (2 * sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize))) y = newLowerYPosition @@ -297,10 +356,12 @@ Item { Keys.onDownPressed: lowerHandleLabel.setValue(lowerHandleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) // dragging - MouseArea { + MouseArea + { anchors.fill: parent - drag { + drag + { target: parent axis: Drag.YAxis minimumY: upperHandle.height + sliderRoot.minimumRangeHandleSize @@ -308,26 +369,28 @@ Item { } onPositionChanged: parent.onHandleDragged() - onPressed: { + onPressed: + { sliderRoot.setActiveHandle(lowerHandle) lowerHandleLabel.forceActiveFocus() } } - SimulationSliderLabel { + SimulationSliderLabel + { id: lowerHandleLabel height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height - x: parent.x - width - UM.Theme.getSize("default_margin").width + x: parent.x - parent.width - width anchors.verticalCenter: parent.verticalCenter - target: Qt.point(sliderRoot.width, y + height / 2) + target: Qt.point(sliderRoot.width + width, y + height / 2) visible: sliderRoot.activeHandle == parent // custom properties maximumValue: sliderRoot.maximumValue value: sliderRoot.lowerValue busy: UM.SimulationView.busy - setValue: lowerHandle.setValue // connect callback functions + setValue: lowerHandle.setValueManually // connect callback functions } } -} +} \ No newline at end of file diff --git a/plugins/SimulationView/PathSlider.qml b/plugins/SimulationView/PathSlider.qml index 999912e3ba..c7a43c6407 100644 --- a/plugins/SimulationView/PathSlider.qml +++ b/plugins/SimulationView/PathSlider.qml @@ -9,23 +9,22 @@ import QtQuick.Controls.Styles 1.1 import UM 1.0 as UM import Cura 1.0 as Cura -Item { +Item +{ id: sliderRoot // handle properties - property real handleSize: 10 + property real handleSize: UM.Theme.getSize("slider_handle").width property real handleRadius: handleSize / 2 - property color handleColor: "black" - property color handleActiveColor: "white" - property color rangeColor: "black" + property color handleColor: UM.Theme.getColor("slider_handle") + property color handleActiveColor: UM.Theme.getColor("slider_handle_active") + property color rangeColor: UM.Theme.getColor("slider_groove_fill") property real handleLabelWidth: width // track properties - property real trackThickness: 4 // width of the slider track - property real trackRadius: trackThickness / 2 - property color trackColor: "white" - property real trackBorderWidth: 1 // width of the slider track border - property color trackBorderColor: "black" + property real trackThickness: UM.Theme.getSize("slider_groove").width + property real trackRadius: UM.Theme.getSize("slider_groove_radius").width + property color trackColor: UM.Theme.getColor("slider_groove") // value properties property real maximumValue: 100 @@ -34,26 +33,32 @@ Item { property real handleValue: maximumValue property bool pathsVisible: true + property bool manuallyChanged: true // Indicates whether the value was changed manually or during simulation - function getHandleValueFromSliderHandle () { + function getHandleValueFromSliderHandle() + { return handle.getValue() } - function setHandleValue (value) { + function setHandleValue(value) + { handle.setValue(value) updateRangeHandle() } - function updateRangeHandle () { + function updateRangeHandle() + { rangeHandle.width = handle.x - sliderRoot.handleSize } - function normalizeValue(value) { + function normalizeValue(value) + { return Math.min(Math.max(value, sliderRoot.minimumValue), sliderRoot.maximumValue) } // slider track - Rectangle { + Rectangle + { id: track width: sliderRoot.width - sliderRoot.handleSize @@ -61,13 +66,12 @@ Item { radius: sliderRoot.trackRadius anchors.centerIn: sliderRoot color: sliderRoot.trackColor - border.width: sliderRoot.trackBorderWidth - border.color: sliderRoot.trackBorderColor visible: sliderRoot.pathsVisible } // Progress indicator - Item { + Item + { id: rangeHandle x: handle.width @@ -76,16 +80,19 @@ Item { anchors.verticalCenter: sliderRoot.verticalCenter visible: sliderRoot.pathsVisible - Rectangle { - height: sliderRoot.trackThickness - 2 * sliderRoot.trackBorderWidth + Rectangle + { + height: sliderRoot.trackThickness width: parent.width + sliderRoot.handleSize anchors.centerIn: parent + radius: sliderRoot.trackRadius color: sliderRoot.rangeColor } } // Handle - Rectangle { + Rectangle + { id: handle x: sliderRoot.handleSize @@ -96,7 +103,9 @@ Item { color: handleLabel.activeFocus ? sliderRoot.handleActiveColor : sliderRoot.handleColor visible: sliderRoot.pathsVisible - function onHandleDragged () { + function onHandleDragged() + { + sliderRoot.manuallyChanged = true // update the range handle sliderRoot.updateRangeHandle() @@ -106,15 +115,23 @@ Item { } // get the value based on the slider position - function getValue () { + function getValue() + { var result = x / (sliderRoot.width - sliderRoot.handleSize) result = result * sliderRoot.maximumValue result = sliderRoot.roundValues ? Math.round(result) : result return result } + function setValueManually(value) + { + sliderRoot.manuallyChanged = true + handle.setValue(value) + } + // set the slider position based on the value - function setValue (value) { + function setValue(value) + { // Normalize values between range, since using arrow keys will create out-of-the-range values value = sliderRoot.normalizeValue(value) @@ -132,23 +149,23 @@ Item { Keys.onLeftPressed: handleLabel.setValue(handleLabel.value - ((event.modifiers & Qt.ShiftModifier) ? 10 : 1)) // dragging - MouseArea { + MouseArea + { anchors.fill: parent - drag { + drag + { target: parent axis: Drag.XAxis minimumX: 0 maximumX: sliderRoot.width - sliderRoot.handleSize } - onPressed: { - handleLabel.forceActiveFocus() - } - + onPressed: handleLabel.forceActiveFocus() onPositionChanged: parent.onHandleDragged() } - SimulationSliderLabel { + SimulationSliderLabel + { id: handleLabel height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height @@ -162,7 +179,7 @@ Item { maximumValue: sliderRoot.maximumValue value: sliderRoot.handleValue busy: UM.SimulationView.busy - setValue: handle.setValue // connect callback functions + setValue: handle.setValueManually // connect callback functions } } } diff --git a/plugins/SimulationView/SimulationSliderLabel.qml b/plugins/SimulationView/SimulationSliderLabel.qml index 94167d001e..06c6a51b44 100644 --- a/plugins/SimulationView/SimulationSliderLabel.qml +++ b/plugins/SimulationView/SimulationSliderLabel.qml @@ -44,12 +44,11 @@ UM.PointingRectangle { id: valueLabel anchors { - left: parent.left - leftMargin: Math.round(UM.Theme.getSize("default_margin").width / 2) verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter } - width: maximumValue.toString().length * 12 * screenScaleFactor + width: ((maximumValue + 1).toString().length + 1) * 10 * screenScaleFactor text: sliderLabelRoot.value + startFrom // the current handle value, add 1 because layers is an array horizontalAlignment: TextInput.AlignRight diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py index 44643dbf1c..3b2db2efac 100644 --- a/plugins/SimulationView/SimulationView.py +++ b/plugins/SimulationView/SimulationView.py @@ -16,43 +16,55 @@ from UM.Mesh.MeshBuilder import MeshBuilder from UM.Message import Message from UM.Platform import Platform from UM.PluginRegistry import PluginRegistry +from UM.Qt.QtApplication import QtApplication from UM.Resources import Resources from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator + from UM.Scene.Selection import Selection from UM.Signal import Signal +from UM.View.CompositePass import CompositePass from UM.View.GL.OpenGL import OpenGL from UM.View.GL.OpenGLContext import OpenGLContext -from UM.View.View import View +from UM.View.GL.ShaderProgram import ShaderProgram + from UM.i18n import i18nCatalog +from cura.CuraView import CuraView from cura.Scene.ConvexHullNode import ConvexHullNode from cura.CuraApplication import CuraApplication from .NozzleNode import NozzleNode from .SimulationPass import SimulationPass from .SimulationViewProxy import SimulationViewProxy - -catalog = i18nCatalog("cura") - import numpy import os.path +from typing import Optional, TYPE_CHECKING, List, cast + +if TYPE_CHECKING: + from UM.Scene.SceneNode import SceneNode + from UM.Scene.Scene import Scene + from UM.Settings.ContainerStack import ContainerStack + +catalog = i18nCatalog("cura") + + ## View used to display g-code paths. -class SimulationView(View): - # Must match SimulationView.qml +class SimulationView(CuraView): + # Must match SimulationViewMenuComponent.qml LAYER_VIEW_TYPE_MATERIAL_TYPE = 0 LAYER_VIEW_TYPE_LINE_TYPE = 1 LAYER_VIEW_TYPE_FEEDRATE = 2 LAYER_VIEW_TYPE_THICKNESS = 3 - def __init__(self): - super().__init__() + def __init__(self, parent = None) -> None: + super().__init__(parent) self._max_layers = 0 self._current_layer_num = 0 self._minimum_layer_num = 0 self._current_layer_mesh = None self._current_layer_jumps = None - self._top_layers_job = None + self._top_layers_job = None # type: Optional["_CreateTopLayersJob"] self._activity = False self._old_max_layers = 0 @@ -64,21 +76,21 @@ class SimulationView(View): self._busy = False self._simulation_running = False - self._ghost_shader = None - self._layer_pass = None - self._composite_pass = None - self._old_layer_bindings = None - self._simulationview_composite_shader = None - self._old_composite_shader = None + self._ghost_shader = None # type: Optional["ShaderProgram"] + self._layer_pass = None # type: Optional[SimulationPass] + self._composite_pass = None # type: Optional[CompositePass] + self._old_layer_bindings = None # type: Optional[List[str]] + self._simulationview_composite_shader = None # type: Optional["ShaderProgram"] + self._old_composite_shader = None # type: Optional["ShaderProgram"] - self._global_container_stack = None + self._global_container_stack = None # type: Optional[ContainerStack] self._proxy = SimulationViewProxy() self._controller.getScene().getRoot().childrenChanged.connect(self._onSceneChanged) self._resetSettings() self._legend_items = None self._show_travel_moves = False - self._nozzle_node = None + self._nozzle_node = None # type: Optional[NozzleNode] Application.getInstance().getPreferences().addPreference("view/top_layer_count", 5) Application.getInstance().getPreferences().addPreference("view/only_show_top_layers", False) @@ -102,29 +114,39 @@ class SimulationView(View): self._wireprint_warning_message = Message(catalog.i18nc("@info:status", "Cura does not accurately display layers when Wire Printing is enabled"), title = catalog.i18nc("@info:title", "Simulation View")) - def _evaluateCompatibilityMode(self): + QtApplication.getInstance().engineCreatedSignal.connect(self._onEngineCreated) + + def _onEngineCreated(self) -> None: + plugin_path = PluginRegistry.getInstance().getPluginPath(self.getPluginId()) + if plugin_path: + self.addDisplayComponent("main", os.path.join(plugin_path, "SimulationViewMainComponent.qml")) + self.addDisplayComponent("menu", os.path.join(plugin_path, "SimulationViewMenuComponent.qml")) + else: + Logger.log("e", "Unable to find the path for %s", self.getPluginId()) + + def _evaluateCompatibilityMode(self) -> bool: return OpenGLContext.isLegacyOpenGL() or bool(Application.getInstance().getPreferences().getValue("view/force_layer_view_compatibility_mode")) - def _resetSettings(self): - self._layer_view_type = 0 # 0 is material color, 1 is color by linetype, 2 is speed, 3 is layer thickness + def _resetSettings(self) -> None: + self._layer_view_type = 0 # type: int # 0 is material color, 1 is color by linetype, 2 is speed, 3 is layer thickness self._extruder_count = 0 self._extruder_opacity = [1.0, 1.0, 1.0, 1.0] - self._show_travel_moves = 0 - self._show_helpers = 1 - self._show_skin = 1 - self._show_infill = 1 + self._show_travel_moves = False + self._show_helpers = True + self._show_skin = True + self._show_infill = True self.resetLayerData() - def getActivity(self): + def getActivity(self) -> bool: return self._activity - def setActivity(self, activity): + def setActivity(self, activity: bool) -> None: if self._activity == activity: return self._activity = activity self.activityChanged.emit() - def getSimulationPass(self): + def getSimulationPass(self) -> SimulationPass: if not self._layer_pass: # Currently the RenderPass constructor requires a size > 0 # This should be fixed in RenderPass's constructor. @@ -133,30 +155,30 @@ class SimulationView(View): self._layer_pass.setSimulationView(self) return self._layer_pass - def getCurrentLayer(self): + def getCurrentLayer(self) -> int: return self._current_layer_num - def getMinimumLayer(self): + def getMinimumLayer(self) -> int: return self._minimum_layer_num - def getMaxLayers(self): + def getMaxLayers(self) -> int: return self._max_layers - def getCurrentPath(self): + def getCurrentPath(self) -> int: return self._current_path_num - def getMinimumPath(self): + def getMinimumPath(self) -> int: return self._minimum_path_num - def getMaxPaths(self): + def getMaxPaths(self) -> int: return self._max_paths - def getNozzleNode(self): + def getNozzleNode(self) -> NozzleNode: if not self._nozzle_node: self._nozzle_node = NozzleNode() return self._nozzle_node - def _onSceneChanged(self, node): + def _onSceneChanged(self, node: "SceneNode") -> None: if node.getMeshData() is None: self.resetLayerData() @@ -164,21 +186,21 @@ class SimulationView(View): self.calculateMaxLayers() self.calculateMaxPathsOnLayer(self._current_layer_num) - def isBusy(self): + def isBusy(self) -> bool: return self._busy - def setBusy(self, busy): + def setBusy(self, busy: bool) -> None: if busy != self._busy: self._busy = busy self.busyChanged.emit() - def isSimulationRunning(self): + def isSimulationRunning(self) -> bool: return self._simulation_running - def setSimulationRunning(self, running): + def setSimulationRunning(self, running: bool) -> None: self._simulation_running = running - def resetLayerData(self): + def resetLayerData(self) -> None: self._current_layer_mesh = None self._current_layer_jumps = None self._max_feedrate = sys.float_info.min @@ -186,15 +208,17 @@ class SimulationView(View): self._max_thickness = sys.float_info.min self._min_thickness = sys.float_info.max - def beginRendering(self): + def beginRendering(self) -> None: scene = self.getController().getScene() renderer = self.getRenderer() if not self._ghost_shader: self._ghost_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "color.shader")) - self._ghost_shader.setUniformValue("u_color", Color(*Application.getInstance().getTheme().getColor("layerview_ghost").getRgb())) + theme = CuraApplication.getInstance().getTheme() + if theme is not None: + self._ghost_shader.setUniformValue("u_color", Color(*theme.getColor("layerview_ghost").getRgb())) - for node in DepthFirstIterator(scene.getRoot()): + for node in DepthFirstIterator(scene.getRoot()): # type: ignore # We do not want to render ConvexHullNode as it conflicts with the bottom layers. # However, it is somewhat relevant when the node is selected, so do render it then. if type(node) is ConvexHullNode and not Selection.isSelected(node.getWatchedNode()): @@ -204,7 +228,7 @@ class SimulationView(View): if (node.getMeshData()) and node.isVisible(): renderer.queueNode(node, transparent = True, shader = self._ghost_shader) - def setLayer(self, value): + def setLayer(self, value: int) -> None: if self._current_layer_num != value: self._current_layer_num = value if self._current_layer_num < 0: @@ -218,7 +242,7 @@ class SimulationView(View): self.currentLayerNumChanged.emit() - def setMinimumLayer(self, value): + def setMinimumLayer(self, value: int) -> None: if self._minimum_layer_num != value: self._minimum_layer_num = value if self._minimum_layer_num < 0: @@ -232,7 +256,7 @@ class SimulationView(View): self.currentLayerNumChanged.emit() - def setPath(self, value): + def setPath(self, value: int) -> None: if self._current_path_num != value: self._current_path_num = value if self._current_path_num < 0: @@ -246,7 +270,7 @@ class SimulationView(View): self.currentPathNumChanged.emit() - def setMinimumPath(self, value): + def setMinimumPath(self, value: int) -> None: if self._minimum_path_num != value: self._minimum_path_num = value if self._minimum_path_num < 0: @@ -263,24 +287,24 @@ class SimulationView(View): ## Set the layer view type # # \param layer_view_type integer as in SimulationView.qml and this class - def setSimulationViewType(self, layer_view_type): + def setSimulationViewType(self, layer_view_type: int) -> None: self._layer_view_type = layer_view_type self.currentLayerNumChanged.emit() ## Return the layer view type, integer as in SimulationView.qml and this class - def getSimulationViewType(self): + def getSimulationViewType(self) -> int: return self._layer_view_type ## Set the extruder opacity # # \param extruder_nr 0..3 # \param opacity 0.0 .. 1.0 - def setExtruderOpacity(self, extruder_nr, opacity): + def setExtruderOpacity(self, extruder_nr: int, opacity: float) -> None: if 0 <= extruder_nr <= 3: self._extruder_opacity[extruder_nr] = opacity self.currentLayerNumChanged.emit() - def getExtruderOpacities(self): + def getExtruderOpacities(self)-> List[float]: return self._extruder_opacity def setShowTravelMoves(self, show): @@ -290,52 +314,56 @@ class SimulationView(View): def getShowTravelMoves(self): return self._show_travel_moves - def setShowHelpers(self, show): + def setShowHelpers(self, show: bool) -> None: self._show_helpers = show self.currentLayerNumChanged.emit() - def getShowHelpers(self): + def getShowHelpers(self) -> bool: return self._show_helpers - def setShowSkin(self, show): + def setShowSkin(self, show: bool) -> None: self._show_skin = show self.currentLayerNumChanged.emit() - def getShowSkin(self): + def getShowSkin(self) -> bool: return self._show_skin - def setShowInfill(self, show): + def setShowInfill(self, show: bool) -> None: self._show_infill = show self.currentLayerNumChanged.emit() - def getShowInfill(self): + def getShowInfill(self) -> bool: return self._show_infill - def getCompatibilityMode(self): + def getCompatibilityMode(self) -> bool: return self._compatibility_mode - def getExtruderCount(self): + def getExtruderCount(self) -> int: return self._extruder_count - def getMinFeedrate(self): + def getMinFeedrate(self) -> float: + if abs(self._min_feedrate - sys.float_info.max) < 10: # Some lenience due to floating point rounding. + return 0.0 # If it's still max-float, there are no measurements. Use 0 then. return self._min_feedrate - def getMaxFeedrate(self): + def getMaxFeedrate(self) -> float: return self._max_feedrate - def getMinThickness(self): + def getMinThickness(self) -> float: + if abs(self._min_thickness - sys.float_info.max) < 10: # Some lenience due to floating point rounding. + return 0.0 # If it's still max-float, there are no measurements. Use 0 then. return self._min_thickness - def getMaxThickness(self): + def getMaxThickness(self) -> float: return self._max_thickness - def calculateMaxLayers(self): + def calculateMaxLayers(self) -> None: scene = self.getController().getScene() self._old_max_layers = self._max_layers ## Recalculate num max layers - new_max_layers = 0 - for node in DepthFirstIterator(scene.getRoot()): + new_max_layers = -1 + for node in DepthFirstIterator(scene.getRoot()): # type: ignore layer_data = node.callDecoration("getLayerData") if not layer_data: continue @@ -369,7 +397,7 @@ class SimulationView(View): if new_max_layers < layer_count: new_max_layers = layer_count - if new_max_layers > 0 and new_max_layers != self._old_max_layers: + if new_max_layers >= 0 and new_max_layers != self._old_max_layers: self._max_layers = new_max_layers # The qt slider has a bit of weird behavior that if the maxvalue needs to be changed first @@ -383,10 +411,10 @@ class SimulationView(View): self.maxLayersChanged.emit() self._startUpdateTopLayers() - def calculateMaxPathsOnLayer(self, layer_num): + def calculateMaxPathsOnLayer(self, layer_num: int) -> None: # Update the currentPath scene = self.getController().getScene() - for node in DepthFirstIterator(scene.getRoot()): + for node in DepthFirstIterator(scene.getRoot()): # type: ignore layer_data = node.callDecoration("getLayerData") if not layer_data: continue @@ -415,10 +443,10 @@ class SimulationView(View): def getProxy(self, engine, script_engine): return self._proxy - def endRendering(self): + def endRendering(self) -> None: pass - def event(self, event): + def event(self, event) -> bool: modifiers = QApplication.keyboardModifiers() ctrl_is_active = modifiers & Qt.ControlModifier shift_is_active = modifiers & Qt.ShiftModifier @@ -447,7 +475,7 @@ class SimulationView(View): if QOpenGLContext.currentContext() is None: Logger.log("d", "current context of OpenGL is empty on Mac OS X, will try to create shaders later") CuraApplication.getInstance().callLater(lambda e=event: self.event(e)) - return + return False # Make sure the SimulationPass is created layer_pass = self.getSimulationPass() @@ -462,15 +490,17 @@ class SimulationView(View): self._onGlobalStackChanged() if not self._simulationview_composite_shader: - self._simulationview_composite_shader = OpenGL.getInstance().createShaderProgram(os.path.join(PluginRegistry.getInstance().getPluginPath("SimulationView"), "simulationview_composite.shader")) - theme = Application.getInstance().getTheme() - self._simulationview_composite_shader.setUniformValue("u_background_color", Color(*theme.getColor("viewport_background").getRgb())) - self._simulationview_composite_shader.setUniformValue("u_outline_color", Color(*theme.getColor("model_selection_outline").getRgb())) + plugin_path = cast(str, PluginRegistry.getInstance().getPluginPath("SimulationView")) + self._simulationview_composite_shader = OpenGL.getInstance().createShaderProgram(os.path.join(plugin_path, "simulationview_composite.shader")) + theme = CuraApplication.getInstance().getTheme() + if theme is not None: + self._simulationview_composite_shader.setUniformValue("u_background_color", Color(*theme.getColor("viewport_background").getRgb())) + self._simulationview_composite_shader.setUniformValue("u_outline_color", Color(*theme.getColor("model_selection_outline").getRgb())) if not self._composite_pass: - self._composite_pass = self.getRenderer().getRenderPass("composite") + self._composite_pass = cast(CompositePass, self.getRenderer().getRenderPass("composite")) - self._old_layer_bindings = self._composite_pass.getLayerBindings()[:] # make a copy so we can restore to it later + self._old_layer_bindings = self._composite_pass.getLayerBindings()[:] # make a copy so we can restore to it later self._composite_pass.getLayerBindings().append("simulationview") self._old_composite_shader = self._composite_pass.getCompositeShader() self._composite_pass.setCompositeShader(self._simulationview_composite_shader) @@ -480,11 +510,14 @@ class SimulationView(View): Application.getInstance().globalContainerStackChanged.disconnect(self._onGlobalStackChanged) if self._global_container_stack: self._global_container_stack.propertyChanged.disconnect(self._onPropertyChanged) - - self._nozzle_node.setParent(None) + if self._nozzle_node: + self._nozzle_node.setParent(None) self.getRenderer().removeRenderPass(self._layer_pass) - self._composite_pass.setLayerBindings(self._old_layer_bindings) - self._composite_pass.setCompositeShader(self._old_composite_shader) + if self._composite_pass: + self._composite_pass.setLayerBindings(cast(List[str], self._old_layer_bindings)) + self._composite_pass.setCompositeShader(cast(ShaderProgram, self._old_composite_shader)) + + return False def getCurrentLayerMesh(self): return self._current_layer_mesh @@ -492,7 +525,7 @@ class SimulationView(View): def getCurrentLayerJumps(self): return self._current_layer_jumps - def _onGlobalStackChanged(self): + def _onGlobalStackChanged(self) -> None: if self._global_container_stack: self._global_container_stack.propertyChanged.disconnect(self._onPropertyChanged) self._global_container_stack = Application.getInstance().getGlobalContainerStack() @@ -504,17 +537,17 @@ class SimulationView(View): else: self._wireprint_warning_message.hide() - def _onPropertyChanged(self, key, property_name): + def _onPropertyChanged(self, key: str, property_name: str) -> None: if key == "wireframe_enabled" and property_name == "value": - if self._global_container_stack.getProperty("wireframe_enabled", "value"): + if self._global_container_stack and self._global_container_stack.getProperty("wireframe_enabled", "value"): self._wireprint_warning_message.show() else: self._wireprint_warning_message.hide() - def _onCurrentLayerNumChanged(self): + def _onCurrentLayerNumChanged(self) -> None: self.calculateMaxPathsOnLayer(self._current_layer_num) - def _startUpdateTopLayers(self): + def _startUpdateTopLayers(self) -> None: if not self._compatibility_mode: return @@ -525,10 +558,10 @@ class SimulationView(View): self.setBusy(True) self._top_layers_job = _CreateTopLayersJob(self._controller.getScene(), self._current_layer_num, self._solid_layers) - self._top_layers_job.finished.connect(self._updateCurrentLayerMesh) - self._top_layers_job.start() + self._top_layers_job.finished.connect(self._updateCurrentLayerMesh) # type: ignore # mypy doesn't understand the whole private class thing that's going on here. + self._top_layers_job.start() # type: ignore - def _updateCurrentLayerMesh(self, job): + def _updateCurrentLayerMesh(self, job: "_CreateTopLayersJob") -> None: self.setBusy(False) if not job.getResult(): @@ -539,9 +572,9 @@ class SimulationView(View): self._current_layer_jumps = job.getResult().get("jumps") self._controller.getScene().sceneChanged.emit(self._controller.getScene().getRoot()) - self._top_layers_job = None + self._top_layers_job = None # type: Optional["_CreateTopLayersJob"] - def _updateWithPreferences(self): + def _updateWithPreferences(self) -> None: self._solid_layers = int(Application.getInstance().getPreferences().getValue("view/top_layer_count")) self._only_show_top_layers = bool(Application.getInstance().getPreferences().getValue("view/only_show_top_layers")) self._compatibility_mode = self._evaluateCompatibilityMode() @@ -563,7 +596,7 @@ class SimulationView(View): self._startUpdateTopLayers() self.preferencesChanged.emit() - def _onPreferencesChanged(self, preference): + def _onPreferencesChanged(self, preference: str) -> None: if preference not in { "view/top_layer_count", "view/only_show_top_layers", @@ -581,7 +614,7 @@ class SimulationView(View): class _CreateTopLayersJob(Job): - def __init__(self, scene, layer_number, solid_layers): + def __init__(self, scene: "Scene", layer_number: int, solid_layers: int) -> None: super().__init__() self._scene = scene @@ -589,9 +622,9 @@ class _CreateTopLayersJob(Job): self._solid_layers = solid_layers self._cancel = False - def run(self): + def run(self) -> None: layer_data = None - for node in DepthFirstIterator(self._scene.getRoot()): + for node in DepthFirstIterator(self._scene.getRoot()): # type: ignore layer_data = node.callDecoration("getLayerData") if layer_data: break @@ -638,6 +671,6 @@ class _CreateTopLayersJob(Job): self.setResult({"layers": layer_mesh.build(), "jumps": jump_mesh}) - def cancel(self): + def cancel(self) -> None: self._cancel = True super().cancel() diff --git a/plugins/SimulationView/SimulationView.qml b/plugins/SimulationView/SimulationView.qml deleted file mode 100644 index a3a8ced4cf..0000000000 --- a/plugins/SimulationView/SimulationView.qml +++ /dev/null @@ -1,704 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.4 -import QtQuick.Controls 1.2 -import QtQuick.Layouts 1.1 -import QtQuick.Controls.Styles 1.1 - -import UM 1.0 as UM -import Cura 1.0 as Cura - -Item -{ - id: base - width: { - if (UM.SimulationView.compatibilityMode) { - return UM.Theme.getSize("layerview_menu_size_compatibility").width; - } else { - return UM.Theme.getSize("layerview_menu_size").width; - } - } - height: { - if (viewSettings.collapsed) { - if (UM.SimulationView.compatibilityMode) { - return UM.Theme.getSize("layerview_menu_size_compatibility_collapsed").height; - } - return UM.Theme.getSize("layerview_menu_size_collapsed").height; - } else if (UM.SimulationView.compatibilityMode) { - return UM.Theme.getSize("layerview_menu_size_compatibility").height; - } else if (UM.Preferences.getValue("layerview/layer_view_type") == 0) { - return UM.Theme.getSize("layerview_menu_size_material_color_mode").height + UM.SimulationView.extruderCount * (UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("layerview_row_spacing").height) - } else { - return UM.Theme.getSize("layerview_menu_size").height + UM.SimulationView.extruderCount * (UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("layerview_row_spacing").height) - } - } - Behavior on height { NumberAnimation { duration: 100 } } - - property var buttonTarget: { - if(parent != null) - { - var force_binding = parent.y; // ensure this gets reevaluated when the panel moves - return base.mapFromItem(parent.parent, parent.buttonTarget.x, parent.buttonTarget.y) - } - return Qt.point(0,0) - } - - Rectangle { - id: layerViewMenu - anchors.right: parent.right - anchors.top: parent.top - width: parent.width - height: parent.height - clip: true - z: layerSlider.z - 1 - color: UM.Theme.getColor("tool_panel_background") - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - - Button { - id: collapseButton - anchors.top: parent.top - anchors.topMargin: Math.round(UM.Theme.getSize("default_margin").height + (UM.Theme.getSize("layerview_row").height - UM.Theme.getSize("default_margin").height) / 2) - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - - onClicked: viewSettings.collapsed = !viewSettings.collapsed - - style: ButtonStyle - { - background: UM.RecolorImage - { - width: control.width - height: control.height - sourceSize.width: width - sourceSize.height: width - color: UM.Theme.getColor("setting_control_text") - source: viewSettings.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom") - } - label: Label{ } - } - } - - ColumnLayout { - id: viewSettings - - property bool collapsed: false - property var extruder_opacities: UM.Preferences.getValue("layerview/extruder_opacities").split("|") - property bool show_travel_moves: UM.Preferences.getValue("layerview/show_travel_moves") - property bool show_helpers: UM.Preferences.getValue("layerview/show_helpers") - property bool show_skin: UM.Preferences.getValue("layerview/show_skin") - property bool show_infill: UM.Preferences.getValue("layerview/show_infill") - // if we are in compatibility mode, we only show the "line type" - property bool show_legend: UM.SimulationView.compatibilityMode ? true : UM.Preferences.getValue("layerview/layer_view_type") == 1 - property bool show_gradient: UM.SimulationView.compatibilityMode ? false : UM.Preferences.getValue("layerview/layer_view_type") == 2 || UM.Preferences.getValue("layerview/layer_view_type") == 3 - property bool show_feedrate_gradient: show_gradient && UM.Preferences.getValue("layerview/layer_view_type") == 2 - property bool show_thickness_gradient: show_gradient && UM.Preferences.getValue("layerview/layer_view_type") == 3 - property bool only_show_top_layers: UM.Preferences.getValue("view/only_show_top_layers") - property int top_layer_count: UM.Preferences.getValue("view/top_layer_count") - - anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - spacing: UM.Theme.getSize("layerview_row_spacing").height - - Label - { - id: layerViewTypesLabel - anchors.left: parent.left - text: catalog.i18nc("@label","Color scheme") - font: UM.Theme.getFont("default"); - visible: !UM.SimulationView.compatibilityMode - Layout.fillWidth: true - color: UM.Theme.getColor("setting_control_text") - } - - ListModel // matches SimulationView.py - { - id: layerViewTypes - } - - Component.onCompleted: - { - layerViewTypes.append({ - text: catalog.i18nc("@label:listbox", "Material Color"), - type_id: 0 - }) - layerViewTypes.append({ - text: catalog.i18nc("@label:listbox", "Line Type"), - type_id: 1 - }) - layerViewTypes.append({ - text: catalog.i18nc("@label:listbox", "Feedrate"), - type_id: 2 - }) - layerViewTypes.append({ - text: catalog.i18nc("@label:listbox", "Layer thickness"), - type_id: 3 // these ids match the switching in the shader - }) - } - - ComboBox - { - id: layerTypeCombobox - anchors.left: parent.left - Layout.fillWidth: true - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - model: layerViewTypes - visible: !UM.SimulationView.compatibilityMode - style: UM.Theme.styles.combobox - anchors.right: parent.right - - onActivated: - { - UM.Preferences.setValue("layerview/layer_view_type", index); - } - - Component.onCompleted: - { - currentIndex = UM.SimulationView.compatibilityMode ? 1 : UM.Preferences.getValue("layerview/layer_view_type"); - updateLegends(currentIndex); - } - - function updateLegends(type_id) - { - // update visibility of legends - viewSettings.show_legend = UM.SimulationView.compatibilityMode || (type_id == 1); - viewSettings.show_gradient = !UM.SimulationView.compatibilityMode && (type_id == 2 || type_id == 3); - viewSettings.show_feedrate_gradient = viewSettings.show_gradient && (type_id == 2); - viewSettings.show_thickness_gradient = viewSettings.show_gradient && (type_id == 3); - } - } - - Label - { - id: compatibilityModeLabel - anchors.left: parent.left - text: catalog.i18nc("@label","Compatibility Mode") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - visible: UM.SimulationView.compatibilityMode - Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - } - - Item - { - height: Math.round(UM.Theme.getSize("default_margin").width / 2) - width: width - } - - Connections { - target: UM.Preferences - onPreferenceChanged: - { - layerTypeCombobox.currentIndex = UM.SimulationView.compatibilityMode ? 1 : UM.Preferences.getValue("layerview/layer_view_type"); - layerTypeCombobox.updateLegends(layerTypeCombobox.currentIndex); - playButton.pauseSimulation(); - viewSettings.extruder_opacities = UM.Preferences.getValue("layerview/extruder_opacities").split("|"); - viewSettings.show_travel_moves = UM.Preferences.getValue("layerview/show_travel_moves"); - viewSettings.show_helpers = UM.Preferences.getValue("layerview/show_helpers"); - viewSettings.show_skin = UM.Preferences.getValue("layerview/show_skin"); - viewSettings.show_infill = UM.Preferences.getValue("layerview/show_infill"); - viewSettings.only_show_top_layers = UM.Preferences.getValue("view/only_show_top_layers"); - viewSettings.top_layer_count = UM.Preferences.getValue("view/top_layer_count"); - } - } - - Repeater { - model: Cura.ExtrudersModel{} - CheckBox { - id: extrudersModelCheckBox - checked: viewSettings.extruder_opacities[index] > 0.5 || viewSettings.extruder_opacities[index] == undefined || viewSettings.extruder_opacities[index] == "" - onClicked: { - viewSettings.extruder_opacities[index] = checked ? 1.0 : 0.0 - UM.Preferences.setValue("layerview/extruder_opacities", viewSettings.extruder_opacities.join("|")); - } - visible: !UM.SimulationView.compatibilityMode - enabled: index + 1 <= 4 - Rectangle { - anchors.verticalCenter: parent.verticalCenter - anchors.right: extrudersModelCheckBox.right - width: UM.Theme.getSize("layerview_legend_size").width - height: UM.Theme.getSize("layerview_legend_size").height - color: model.color - radius: Math.round(width / 2) - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - visible: !viewSettings.show_legend & !viewSettings.show_gradient - } - Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - style: UM.Theme.styles.checkbox - Label - { - text: model.name - elide: Text.ElideRight - color: UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default") - anchors.verticalCenter: parent.verticalCenter - anchors.left: extrudersModelCheckBox.left; - anchors.right: extrudersModelCheckBox.right; - anchors.leftMargin: UM.Theme.getSize("checkbox").width + Math.round(UM.Theme.getSize("default_margin").width/2) - anchors.rightMargin: UM.Theme.getSize("default_margin").width * 2 - } - } - } - - Repeater { - model: ListModel { - id: typesLegendModel - Component.onCompleted: - { - typesLegendModel.append({ - label: catalog.i18nc("@label", "Show Travels"), - initialValue: viewSettings.show_travel_moves, - preference: "layerview/show_travel_moves", - colorId: "layerview_move_combing" - }); - typesLegendModel.append({ - label: catalog.i18nc("@label", "Show Helpers"), - initialValue: viewSettings.show_helpers, - preference: "layerview/show_helpers", - colorId: "layerview_support" - }); - typesLegendModel.append({ - label: catalog.i18nc("@label", "Show Shell"), - initialValue: viewSettings.show_skin, - preference: "layerview/show_skin", - colorId: "layerview_inset_0" - }); - typesLegendModel.append({ - label: catalog.i18nc("@label", "Show Infill"), - initialValue: viewSettings.show_infill, - preference: "layerview/show_infill", - colorId: "layerview_infill" - }); - } - } - - CheckBox { - id: legendModelCheckBox - checked: model.initialValue - onClicked: { - UM.Preferences.setValue(model.preference, checked); - } - Rectangle { - anchors.verticalCenter: parent.verticalCenter - anchors.right: legendModelCheckBox.right - width: UM.Theme.getSize("layerview_legend_size").width - height: UM.Theme.getSize("layerview_legend_size").height - color: UM.Theme.getColor(model.colorId) - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - visible: viewSettings.show_legend - } - Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - style: UM.Theme.styles.checkbox - Label - { - text: label - font: UM.Theme.getFont("default") - elide: Text.ElideRight - color: UM.Theme.getColor("setting_control_text") - anchors.verticalCenter: parent.verticalCenter - anchors.left: legendModelCheckBox.left; - anchors.right: legendModelCheckBox.right; - anchors.leftMargin: UM.Theme.getSize("checkbox").width + Math.round(UM.Theme.getSize("default_margin").width/2) - anchors.rightMargin: UM.Theme.getSize("default_margin").width * 2 - } - } - } - - CheckBox { - checked: viewSettings.only_show_top_layers - onClicked: { - UM.Preferences.setValue("view/only_show_top_layers", checked ? 1.0 : 0.0); - } - text: catalog.i18nc("@label", "Only Show Top Layers") - visible: UM.SimulationView.compatibilityMode - style: UM.Theme.styles.checkbox - } - CheckBox { - checked: viewSettings.top_layer_count == 5 - onClicked: { - UM.Preferences.setValue("view/top_layer_count", checked ? 5 : 1); - } - text: catalog.i18nc("@label", "Show 5 Detailed Layers On Top") - visible: UM.SimulationView.compatibilityMode - style: UM.Theme.styles.checkbox - } - - Repeater { - model: ListModel { - id: typesLegendModelNoCheck - Component.onCompleted: - { - typesLegendModelNoCheck.append({ - label: catalog.i18nc("@label", "Top / Bottom"), - colorId: "layerview_skin", - }); - typesLegendModelNoCheck.append({ - label: catalog.i18nc("@label", "Inner Wall"), - colorId: "layerview_inset_x", - }); - } - } - - Label { - text: label - visible: viewSettings.show_legend - id: typesLegendModelLabel - Rectangle { - anchors.verticalCenter: parent.verticalCenter - anchors.right: typesLegendModelLabel.right - width: UM.Theme.getSize("layerview_legend_size").width - height: UM.Theme.getSize("layerview_legend_size").height - color: UM.Theme.getColor(model.colorId) - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - visible: viewSettings.show_legend - } - Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - color: UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default") - } - } - - // Text for the minimum, maximum and units for the feedrates and layer thickness - Item { - id: gradientLegend - visible: viewSettings.show_gradient - width: parent.width - height: UM.Theme.getSize("layerview_row").height - anchors { - topMargin: UM.Theme.getSize("slider_layerview_margin").height - horizontalCenter: parent.horizontalCenter - } - - Label { - text: minText() - anchors.left: parent.left - color: UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default") - - function minText() { - if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) { - // Feedrate selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 2) { - return parseFloat(UM.SimulationView.getMinFeedrate()).toFixed(2) - } - // Layer thickness selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 3) { - return parseFloat(UM.SimulationView.getMinThickness()).toFixed(2) - } - } - return catalog.i18nc("@label","min") - } - } - - Label { - text: unitsText() - anchors.horizontalCenter: parent.horizontalCenter - color: UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default") - - function unitsText() { - if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) { - // Feedrate selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 2) { - return "mm/s" - } - // Layer thickness selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 3) { - return "mm" - } - } - return "" - } - } - - Label { - text: maxText() - anchors.right: parent.right - color: UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default") - - function maxText() { - if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) { - // Feedrate selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 2) { - return parseFloat(UM.SimulationView.getMaxFeedrate()).toFixed(2) - } - // Layer thickness selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 3) { - return parseFloat(UM.SimulationView.getMaxThickness()).toFixed(2) - } - } - return catalog.i18nc("@label","max") - } - } - } - - // Gradient colors for feedrate - Rectangle { // In QML 5.9 can be changed by LinearGradient - // Invert values because then the bar is rotated 90 degrees - id: feedrateGradient - visible: viewSettings.show_feedrate_gradient - anchors.left: parent.right - height: parent.width - width: Math.round(UM.Theme.getSize("layerview_row").height * 1.5) - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - transform: Rotation {origin.x: 0; origin.y: 0; angle: 90} - gradient: Gradient { - GradientStop { - position: 0.000 - color: Qt.rgba(1, 0.5, 0, 1) - } - GradientStop { - position: 0.625 - color: Qt.rgba(0.375, 0.5, 0, 1) - } - GradientStop { - position: 0.75 - color: Qt.rgba(0.25, 1, 0, 1) - } - GradientStop { - position: 1.0 - color: Qt.rgba(0, 0, 1, 1) - } - } - } - - // Gradient colors for layer thickness (similar to parula colormap) - Rectangle { // In QML 5.9 can be changed by LinearGradient - // Invert values because then the bar is rotated 90 degrees - id: thicknessGradient - visible: viewSettings.show_thickness_gradient - anchors.left: parent.right - height: parent.width - width: Math.round(UM.Theme.getSize("layerview_row").height * 1.5) - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - transform: Rotation {origin.x: 0; origin.y: 0; angle: 90} - gradient: Gradient { - GradientStop { - position: 0.000 - color: Qt.rgba(1, 1, 0, 1) - } - GradientStop { - position: 0.25 - color: Qt.rgba(1, 0.75, 0.25, 1) - } - GradientStop { - position: 0.5 - color: Qt.rgba(0, 0.75, 0.5, 1) - } - GradientStop { - position: 0.75 - color: Qt.rgba(0, 0.375, 0.75, 1) - } - GradientStop { - position: 1.0 - color: Qt.rgba(0, 0, 0.5, 1) - } - } - } - } - } - - Item { - id: slidersBox - - width: parent.width - visible: UM.SimulationView.layerActivity && CuraApplication.platformActivity - - anchors { - top: parent.bottom - topMargin: UM.Theme.getSize("slider_layerview_margin").height - left: parent.left - } - - PathSlider { - id: pathSlider - - height: UM.Theme.getSize("slider_handle").width - anchors.left: playButton.right - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - visible: !UM.SimulationView.compatibilityMode - - // custom properties - handleValue: UM.SimulationView.currentPath - maximumValue: UM.SimulationView.numPaths - handleSize: UM.Theme.getSize("slider_handle").width - trackThickness: UM.Theme.getSize("slider_groove").width - trackColor: UM.Theme.getColor("slider_groove") - trackBorderColor: UM.Theme.getColor("slider_groove_border") - handleColor: UM.Theme.getColor("slider_handle") - handleActiveColor: UM.Theme.getColor("slider_handle_active") - rangeColor: UM.Theme.getColor("slider_groove_fill") - - // update values when layer data changes - Connections { - target: UM.SimulationView - onMaxPathsChanged: pathSlider.setHandleValue(UM.SimulationView.currentPath) - onCurrentPathChanged: pathSlider.setHandleValue(UM.SimulationView.currentPath) - } - - // make sure the slider handlers show the correct value after switching views - Component.onCompleted: { - pathSlider.setHandleValue(UM.SimulationView.currentPath) - } - } - - LayerSlider { - id: layerSlider - - width: UM.Theme.getSize("slider_handle").width - height: UM.Theme.getSize("layerview_menu_size").height - - anchors { - top: !UM.SimulationView.compatibilityMode ? pathSlider.bottom : parent.top - topMargin: !UM.SimulationView.compatibilityMode ? UM.Theme.getSize("default_margin").height : 0 - right: parent.right - rightMargin: UM.Theme.getSize("slider_layerview_margin").width - } - - // custom properties - upperValue: UM.SimulationView.currentLayer - lowerValue: UM.SimulationView.minimumLayer - maximumValue: UM.SimulationView.numLayers - handleSize: UM.Theme.getSize("slider_handle").width - trackThickness: UM.Theme.getSize("slider_groove").width - trackColor: UM.Theme.getColor("slider_groove") - trackBorderColor: UM.Theme.getColor("slider_groove_border") - upperHandleColor: UM.Theme.getColor("slider_handle") - lowerHandleColor: UM.Theme.getColor("slider_handle") - rangeHandleColor: UM.Theme.getColor("slider_groove_fill") - handleActiveColor: UM.Theme.getColor("slider_handle_active") - handleLabelWidth: UM.Theme.getSize("slider_layerview_background").width - - // update values when layer data changes - Connections { - target: UM.SimulationView - onMaxLayersChanged: layerSlider.setUpperValue(UM.SimulationView.currentLayer) - onMinimumLayerChanged: layerSlider.setLowerValue(UM.SimulationView.minimumLayer) - onCurrentLayerChanged: layerSlider.setUpperValue(UM.SimulationView.currentLayer) - } - - // make sure the slider handlers show the correct value after switching views - Component.onCompleted: { - layerSlider.setLowerValue(UM.SimulationView.minimumLayer) - layerSlider.setUpperValue(UM.SimulationView.currentLayer) - } - } - - // Play simulation button - Button { - id: playButton - iconSource: "./resources/simulation_resume.svg" - style: UM.Theme.styles.small_tool_button - visible: !UM.SimulationView.compatibilityMode - anchors { - verticalCenter: pathSlider.verticalCenter - } - - property var status: 0 // indicates if it's stopped (0) or playing (1) - - onClicked: { - switch(status) { - case 0: { - resumeSimulation() - break - } - case 1: { - pauseSimulation() - break - } - } - } - - function pauseSimulation() { - UM.SimulationView.setSimulationRunning(false) - iconSource = "./resources/simulation_resume.svg" - simulationTimer.stop() - status = 0 - } - - function resumeSimulation() { - UM.SimulationView.setSimulationRunning(true) - iconSource = "./resources/simulation_pause.svg" - simulationTimer.start() - } - } - - Timer - { - id: simulationTimer - interval: 100 - running: false - repeat: true - onTriggered: { - var currentPath = UM.SimulationView.currentPath - var numPaths = UM.SimulationView.numPaths - var currentLayer = UM.SimulationView.currentLayer - var numLayers = UM.SimulationView.numLayers - // When the user plays the simulation, if the path slider is at the end of this layer, we start - // the simulation at the beginning of the current layer. - if (playButton.status == 0) - { - if (currentPath >= numPaths) - { - UM.SimulationView.setCurrentPath(0) - } - else - { - UM.SimulationView.setCurrentPath(currentPath+1) - } - } - // If the simulation is already playing and we reach the end of a layer, then it automatically - // starts at the beginning of the next layer. - else - { - if (currentPath >= numPaths) - { - // At the end of the model, the simulation stops - if (currentLayer >= numLayers) - { - playButton.pauseSimulation() - } - else - { - UM.SimulationView.setCurrentLayer(currentLayer+1) - UM.SimulationView.setCurrentPath(0) - } - } - else - { - UM.SimulationView.setCurrentPath(currentPath+1) - } - } - playButton.status = 1 - } - } - } - - FontMetrics { - id: fontMetrics - font: UM.Theme.getFont("default") - } -} diff --git a/plugins/SimulationView/SimulationViewMainComponent.qml b/plugins/SimulationView/SimulationViewMainComponent.qml new file mode 100644 index 0000000000..58901652d3 --- /dev/null +++ b/plugins/SimulationView/SimulationViewMainComponent.qml @@ -0,0 +1,216 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.4 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.1 +import QtQuick.Controls.Styles 1.1 + +import UM 1.4 as UM +import Cura 1.0 as Cura + +Item +{ + property bool is_simulation_playing: false + visible: UM.SimulationView.layerActivity && CuraApplication.platformActivity + + PathSlider + { + id: pathSlider + height: UM.Theme.getSize("slider_handle").width + width: UM.Theme.getSize("slider_layerview_size").height + + anchors.bottom: parent.bottom + anchors.bottomMargin: UM.Theme.getSize("default_margin").height + + anchors.horizontalCenter: parent.horizontalCenter + + visible: !UM.SimulationView.compatibilityMode + + // Custom properties + handleValue: UM.SimulationView.currentPath + maximumValue: UM.SimulationView.numPaths + + // Update values when layer data changes. + Connections + { + target: UM.SimulationView + onMaxPathsChanged: pathSlider.setHandleValue(UM.SimulationView.currentPath) + onCurrentPathChanged: + { + // Only pause the simulation when the layer was changed manually, not when the simulation is running + if (pathSlider.manuallyChanged) + { + playButton.pauseSimulation() + } + pathSlider.setHandleValue(UM.SimulationView.currentPath) + } + } + + // Ensure that the slider handlers show the correct value after switching views. + Component.onCompleted: + { + pathSlider.setHandleValue(UM.SimulationView.currentPath) + } + + } + + UM.SimpleButton + { + id: playButton + iconSource: !is_simulation_playing ? "./resources/simulation_resume.svg": "./resources/simulation_pause.svg" + width: UM.Theme.getSize("small_button").width + height: UM.Theme.getSize("small_button").height + hoverColor: UM.Theme.getColor("slider_handle_active") + color: UM.Theme.getColor("slider_handle") + iconMargin: UM.Theme.getSize("thick_lining").width + visible: !UM.SimulationView.compatibilityMode + + Connections + { + target: UM.Preferences + onPreferenceChanged: + { + if (preference !== "view/only_show_top_layers" && preference !== "view/top_layer_count" && ! preference.match("layerview/")) + { + return; + } + + playButton.pauseSimulation() + } + } + + anchors + { + right: pathSlider.left + verticalCenter: pathSlider.verticalCenter + } + + onClicked: + { + if(is_simulation_playing) + { + pauseSimulation() + } + else + { + resumeSimulation() + } + } + + function pauseSimulation() + { + UM.SimulationView.setSimulationRunning(false) + simulationTimer.stop() + is_simulation_playing = false + layerSlider.manuallyChanged = true + pathSlider.manuallyChanged = true + } + + function resumeSimulation() + { + UM.SimulationView.setSimulationRunning(true) + simulationTimer.start() + layerSlider.manuallyChanged = false + pathSlider.manuallyChanged = false + } + } + + Timer + { + id: simulationTimer + interval: 100 + running: false + repeat: true + onTriggered: + { + var currentPath = UM.SimulationView.currentPath + var numPaths = UM.SimulationView.numPaths + var currentLayer = UM.SimulationView.currentLayer + var numLayers = UM.SimulationView.numLayers + + // When the user plays the simulation, if the path slider is at the end of this layer, we start + // the simulation at the beginning of the current layer. + if (!is_simulation_playing) + { + if (currentPath >= numPaths) + { + UM.SimulationView.setCurrentPath(0) + } + else + { + UM.SimulationView.setCurrentPath(currentPath + 1) + } + } + // If the simulation is already playing and we reach the end of a layer, then it automatically + // starts at the beginning of the next layer. + else + { + if (currentPath >= numPaths) + { + // At the end of the model, the simulation stops + if (currentLayer >= numLayers) + { + playButton.pauseSimulation() + } + else + { + UM.SimulationView.setCurrentLayer(currentLayer + 1) + UM.SimulationView.setCurrentPath(0) + } + } + else + { + UM.SimulationView.setCurrentPath(currentPath + 1) + } + } + // The status must be set here instead of in the resumeSimulation function otherwise it won't work + // correctly, because part of the logic is in this trigger function. + is_simulation_playing = true + } + } + + LayerSlider + { + id: layerSlider + + width: UM.Theme.getSize("slider_handle").width + height: UM.Theme.getSize("slider_layerview_size").height + + anchors + { + right: parent.right + verticalCenter: parent.verticalCenter + rightMargin: UM.Theme.getSize("default_margin").width + } + + // Custom properties + upperValue: UM.SimulationView.currentLayer + lowerValue: UM.SimulationView.minimumLayer + maximumValue: UM.SimulationView.numLayers + + // Update values when layer data changes + Connections + { + target: UM.SimulationView + onMaxLayersChanged: layerSlider.setUpperValue(UM.SimulationView.currentLayer) + onMinimumLayerChanged: layerSlider.setLowerValue(UM.SimulationView.minimumLayer) + onCurrentLayerChanged: + { + // Only pause the simulation when the layer was changed manually, not when the simulation is running + if (layerSlider.manuallyChanged) + { + playButton.pauseSimulation() + } + layerSlider.setUpperValue(UM.SimulationView.currentLayer) + } + } + + // Make sure the slider handlers show the correct value after switching views + Component.onCompleted: + { + layerSlider.setLowerValue(UM.SimulationView.minimumLayer) + layerSlider.setUpperValue(UM.SimulationView.currentLayer) + } + } +} \ No newline at end of file diff --git a/plugins/SimulationView/SimulationViewMenuComponent.qml b/plugins/SimulationView/SimulationViewMenuComponent.qml new file mode 100644 index 0000000000..957d8170cf --- /dev/null +++ b/plugins/SimulationView/SimulationViewMenuComponent.qml @@ -0,0 +1,556 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.4 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.1 +import QtQuick.Controls.Styles 1.1 +import QtGraphicalEffects 1.0 + +import UM 1.0 as UM +import Cura 1.0 as Cura + + +Cura.ExpandableComponent +{ + id: base + + contentHeaderTitle: catalog.i18nc("@label", "Color scheme") + + Connections + { + target: UM.Preferences + onPreferenceChanged: + { + if (preference !== "view/only_show_top_layers" && preference !== "view/top_layer_count" && ! preference.match("layerview/")) + { + return; + } + + layerTypeCombobox.currentIndex = UM.SimulationView.compatibilityMode ? 1 : UM.Preferences.getValue("layerview/layer_view_type") + layerTypeCombobox.updateLegends(layerTypeCombobox.currentIndex) + viewSettings.extruder_opacities = UM.Preferences.getValue("layerview/extruder_opacities").split("|") + viewSettings.show_travel_moves = UM.Preferences.getValue("layerview/show_travel_moves") + viewSettings.show_helpers = UM.Preferences.getValue("layerview/show_helpers") + viewSettings.show_skin = UM.Preferences.getValue("layerview/show_skin") + viewSettings.show_infill = UM.Preferences.getValue("layerview/show_infill") + viewSettings.only_show_top_layers = UM.Preferences.getValue("view/only_show_top_layers") + viewSettings.top_layer_count = UM.Preferences.getValue("view/top_layer_count") + } + } + + headerItem: Item + { + Label + { + id: colorSchemeLabel + text: catalog.i18nc("@label", "Color scheme") + verticalAlignment: Text.AlignVCenter + height: parent.height + elide: Text.ElideRight + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering + } + + Label + { + text: layerTypeCombobox.currentText + verticalAlignment: Text.AlignVCenter + anchors + { + left: colorSchemeLabel.right + leftMargin: UM.Theme.getSize("default_margin").width + right: parent.right + } + height: parent.height + elide: Text.ElideRight + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + } + } + + contentItem: Column + { + id: viewSettings + + property var extruder_opacities: UM.Preferences.getValue("layerview/extruder_opacities").split("|") + property bool show_travel_moves: UM.Preferences.getValue("layerview/show_travel_moves") + property bool show_helpers: UM.Preferences.getValue("layerview/show_helpers") + property bool show_skin: UM.Preferences.getValue("layerview/show_skin") + property bool show_infill: UM.Preferences.getValue("layerview/show_infill") + + // If we are in compatibility mode, we only show the "line type" + property bool show_legend: UM.SimulationView.compatibilityMode ? true : UM.Preferences.getValue("layerview/layer_view_type") == 1 + property bool show_gradient: UM.SimulationView.compatibilityMode ? false : UM.Preferences.getValue("layerview/layer_view_type") == 2 || UM.Preferences.getValue("layerview/layer_view_type") == 3 + property bool show_feedrate_gradient: show_gradient && UM.Preferences.getValue("layerview/layer_view_type") == 2 + property bool show_thickness_gradient: show_gradient && UM.Preferences.getValue("layerview/layer_view_type") == 3 + property bool only_show_top_layers: UM.Preferences.getValue("view/only_show_top_layers") + property int top_layer_count: UM.Preferences.getValue("view/top_layer_count") + + width: UM.Theme.getSize("layerview_menu_size").width - 2 * UM.Theme.getSize("default_margin").width + height: implicitHeight + + spacing: UM.Theme.getSize("layerview_row_spacing").height + + ListModel // matches SimulationView.py + { + id: layerViewTypes + } + + Component.onCompleted: + { + layerViewTypes.append({ + text: catalog.i18nc("@label:listbox", "Material Color"), + type_id: 0 + }) + layerViewTypes.append({ + text: catalog.i18nc("@label:listbox", "Line Type"), + type_id: 1 + }) + layerViewTypes.append({ + text: catalog.i18nc("@label:listbox", "Feedrate"), + type_id: 2 + }) + layerViewTypes.append({ + text: catalog.i18nc("@label:listbox", "Layer thickness"), + type_id: 3 // these ids match the switching in the shader + }) + } + + ComboBox + { + id: layerTypeCombobox + width: parent.width + model: layerViewTypes + visible: !UM.SimulationView.compatibilityMode + style: UM.Theme.styles.combobox + + onActivated: + { + UM.Preferences.setValue("layerview/layer_view_type", index); + } + + Component.onCompleted: + { + currentIndex = UM.SimulationView.compatibilityMode ? 1 : UM.Preferences.getValue("layerview/layer_view_type"); + updateLegends(currentIndex); + } + + function updateLegends(type_id) + { + // Update the visibility of the legends. + viewSettings.show_legend = UM.SimulationView.compatibilityMode || (type_id == 1); + viewSettings.show_gradient = !UM.SimulationView.compatibilityMode && (type_id == 2 || type_id == 3); + viewSettings.show_feedrate_gradient = viewSettings.show_gradient && (type_id == 2); + viewSettings.show_thickness_gradient = viewSettings.show_gradient && (type_id == 3); + } + } + + Label + { + id: compatibilityModeLabel + text: catalog.i18nc("@label", "Compatibility Mode") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + visible: UM.SimulationView.compatibilityMode + height: UM.Theme.getSize("layerview_row").height + width: parent.width + renderType: Text.NativeRendering + } + + Item // Spacer + { + height: UM.Theme.getSize("narrow_margin").width + width: width + } + + Repeater + { + model: CuraApplication.getExtrudersModel() + + CheckBox + { + id: extrudersModelCheckBox + checked: viewSettings.extruder_opacities[index] > 0.5 || viewSettings.extruder_opacities[index] == undefined || viewSettings.extruder_opacities[index] == "" + height: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height + width: parent.width + visible: !UM.SimulationView.compatibilityMode + enabled: index < 4 + + onClicked: + { + viewSettings.extruder_opacities[index] = checked ? 1.0 : 0.0 + UM.Preferences.setValue("layerview/extruder_opacities", viewSettings.extruder_opacities.join("|")); + } + + style: UM.Theme.styles.checkbox + + + UM.RecolorImage + { + id: swatch + anchors.verticalCenter: parent.verticalCenter + anchors.right: extrudersModelCheckBox.right + width: UM.Theme.getSize("layerview_legend_size").width + height: UM.Theme.getSize("layerview_legend_size").height + source: UM.Theme.getIcon("extruder_button") + color: model.color + } + + Label + { + text: model.name + elide: Text.ElideRight + color: UM.Theme.getColor("setting_control_text") + font: UM.Theme.getFont("default") + anchors + { + verticalCenter: parent.verticalCenter + left: extrudersModelCheckBox.left + right: extrudersModelCheckBox.right + leftMargin: UM.Theme.getSize("checkbox").width + Math.round(UM.Theme.getSize("default_margin").width / 2) + rightMargin: UM.Theme.getSize("default_margin").width * 2 + } + renderType: Text.NativeRendering + } + } + } + + Repeater + { + model: ListModel + { + id: typesLegendModel + Component.onCompleted: + { + typesLegendModel.append({ + label: catalog.i18nc("@label", "Travels"), + initialValue: viewSettings.show_travel_moves, + preference: "layerview/show_travel_moves", + colorId: "layerview_move_combing" + }); + typesLegendModel.append({ + label: catalog.i18nc("@label", "Helpers"), + initialValue: viewSettings.show_helpers, + preference: "layerview/show_helpers", + colorId: "layerview_support" + }); + typesLegendModel.append({ + label: catalog.i18nc("@label", "Shell"), + initialValue: viewSettings.show_skin, + preference: "layerview/show_skin", + colorId: "layerview_inset_0" + }); + typesLegendModel.append({ + label: catalog.i18nc("@label", "Infill"), + initialValue: viewSettings.show_infill, + preference: "layerview/show_infill", + colorId: "layerview_infill" + }); + } + } + + CheckBox + { + id: legendModelCheckBox + checked: model.initialValue + onClicked: UM.Preferences.setValue(model.preference, checked) + height: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height + width: parent.width + + style: UM.Theme.styles.checkbox + + Rectangle + { + anchors.verticalCenter: parent.verticalCenter + anchors.right: legendModelCheckBox.right + width: UM.Theme.getSize("layerview_legend_size").width + height: UM.Theme.getSize("layerview_legend_size").height + color: UM.Theme.getColor(model.colorId) + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + visible: viewSettings.show_legend + } + + Label + { + text: label + font: UM.Theme.getFont("default") + elide: Text.ElideRight + renderType: Text.NativeRendering + color: UM.Theme.getColor("setting_control_text") + anchors.verticalCenter: parent.verticalCenter + anchors.left: legendModelCheckBox.left + anchors.right: legendModelCheckBox.right + anchors.leftMargin: UM.Theme.getSize("checkbox").width + Math.round(UM.Theme.getSize("default_margin").width / 2) + anchors.rightMargin: UM.Theme.getSize("default_margin").width * 2 + } + } + } + + CheckBox + { + checked: viewSettings.only_show_top_layers + onClicked: UM.Preferences.setValue("view/only_show_top_layers", checked ? 1.0 : 0.0) + text: catalog.i18nc("@label", "Only Show Top Layers") + visible: UM.SimulationView.compatibilityMode + style: UM.Theme.styles.checkbox + width: parent.width + } + + CheckBox + { + checked: viewSettings.top_layer_count == 5 + onClicked: UM.Preferences.setValue("view/top_layer_count", checked ? 5 : 1) + text: catalog.i18nc("@label", "Show 5 Detailed Layers On Top") + width: parent.width + visible: UM.SimulationView.compatibilityMode + style: UM.Theme.styles.checkbox + } + + Repeater + { + model: ListModel + { + id: typesLegendModelNoCheck + Component.onCompleted: + { + typesLegendModelNoCheck.append({ + label: catalog.i18nc("@label", "Top / Bottom"), + colorId: "layerview_skin", + }); + typesLegendModelNoCheck.append({ + label: catalog.i18nc("@label", "Inner Wall"), + colorId: "layerview_inset_x", + }); + } + } + + Label + { + text: label + visible: viewSettings.show_legend + id: typesLegendModelLabel + + height: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height + width: parent.width + color: UM.Theme.getColor("setting_control_text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + Rectangle + { + anchors.verticalCenter: parent.verticalCenter + anchors.right: typesLegendModelLabel.right + + width: UM.Theme.getSize("layerview_legend_size").width + height: UM.Theme.getSize("layerview_legend_size").height + + color: UM.Theme.getColor(model.colorId) + + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + } + } + } + + // Text for the minimum, maximum and units for the feedrates and layer thickness + Item + { + id: gradientLegend + visible: viewSettings.show_gradient + width: parent.width + height: UM.Theme.getSize("layerview_row").height + + Label //Minimum value. + { + text: + { + if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) + { + // Feedrate selected + if (UM.Preferences.getValue("layerview/layer_view_type") == 2) + { + return parseFloat(UM.SimulationView.getMinFeedrate()).toFixed(2) + } + // Layer thickness selected + if (UM.Preferences.getValue("layerview/layer_view_type") == 3) + { + return parseFloat(UM.SimulationView.getMinThickness()).toFixed(2) + } + } + return catalog.i18nc("@label","min") + } + anchors.left: parent.left + color: UM.Theme.getColor("setting_control_text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } + + Label //Unit in the middle. + { + text: + { + if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) + { + // Feedrate selected + if (UM.Preferences.getValue("layerview/layer_view_type") == 2) + { + return "mm/s" + } + // Layer thickness selected + if (UM.Preferences.getValue("layerview/layer_view_type") == 3) + { + return "mm" + } + } + return "" + } + + anchors.horizontalCenter: parent.horizontalCenter + color: UM.Theme.getColor("setting_control_text") + font: UM.Theme.getFont("default") + } + + Label //Maximum value. + { + text: { + if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) + { + // Feedrate selected + if (UM.Preferences.getValue("layerview/layer_view_type") == 2) + { + return parseFloat(UM.SimulationView.getMaxFeedrate()).toFixed(2) + } + // Layer thickness selected + if (UM.Preferences.getValue("layerview/layer_view_type") == 3) + { + return parseFloat(UM.SimulationView.getMaxThickness()).toFixed(2) + } + } + return catalog.i18nc("@label","max") + } + + anchors.right: parent.right + color: UM.Theme.getColor("setting_control_text") + font: UM.Theme.getFont("default") + } + } + + // Gradient colors for feedrate + Rectangle + { + id: feedrateGradient + visible: viewSettings.show_feedrate_gradient + anchors.left: parent.left + anchors.right: parent.right + height: Math.round(UM.Theme.getSize("layerview_row").height * 1.5) + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + + LinearGradient + { + anchors + { + left: parent.left + leftMargin: UM.Theme.getSize("default_lining").width + right: parent.right + rightMargin: UM.Theme.getSize("default_lining").width + top: parent.top + topMargin: UM.Theme.getSize("default_lining").width + bottom: parent.bottom + bottomMargin: UM.Theme.getSize("default_lining").width + } + start: Qt.point(0, 0) + end: Qt.point(parent.width, 0) + gradient: Gradient + { + GradientStop + { + position: 0.000 + color: Qt.rgba(0, 0, 1, 1) + } + GradientStop + { + position: 0.25 + color: Qt.rgba(0.25, 1, 0, 1) + } + GradientStop + { + position: 0.375 + color: Qt.rgba(0.375, 0.5, 0, 1) + } + GradientStop + { + position: 1.0 + color: Qt.rgba(1, 0.5, 0, 1) + } + } + } + } + + // Gradient colors for layer thickness (similar to parula colormap) + Rectangle + { + id: thicknessGradient + visible: viewSettings.show_thickness_gradient + anchors.left: parent.left + anchors.right: parent.right + height: Math.round(UM.Theme.getSize("layerview_row").height * 1.5) + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + + LinearGradient + { + anchors + { + left: parent.left + leftMargin: UM.Theme.getSize("default_lining").width + right: parent.right + rightMargin: UM.Theme.getSize("default_lining").width + top: parent.top + topMargin: UM.Theme.getSize("default_lining").width + bottom: parent.bottom + bottomMargin: UM.Theme.getSize("default_lining").width + } + start: Qt.point(0, 0) + end: Qt.point(parent.width, 0) + gradient: Gradient + { + GradientStop + { + position: 0.000 + color: Qt.rgba(0, 0, 0.5, 1) + } + GradientStop + { + position: 0.25 + color: Qt.rgba(0, 0.375, 0.75, 1) + } + GradientStop + { + position: 0.5 + color: Qt.rgba(0, 0.75, 0.5, 1) + } + GradientStop + { + position: 0.75 + color: Qt.rgba(1, 0.75, 0.25, 1) + } + GradientStop + { + position: 1.0 + color: Qt.rgba(1, 1, 0, 1) + } + } + } + } + } + + FontMetrics + { + id: fontMetrics + font: UM.Theme.getFont("default") + } +} diff --git a/plugins/SimulationView/__init__.py b/plugins/SimulationView/__init__.py index 360fdc1de9..420ee60660 100644 --- a/plugins/SimulationView/__init__.py +++ b/plugins/SimulationView/__init__.py @@ -8,19 +8,21 @@ from . import SimulationViewProxy, SimulationView catalog = i18nCatalog("cura") + def getMetaData(): return { "view": { "name": catalog.i18nc("@item:inlistbox", "Layer view"), - "view_panel": "SimulationView.qml", - "weight": 2 + "weight": 0 } } + def createSimulationViewProxy(engine, script_engine): return SimulationViewProxy.SimulationViewProxy() + def register(app): simulation_view = SimulationView.SimulationView() qmlRegisterSingletonType(SimulationViewProxy.SimulationViewProxy, "UM", 1, 0, "SimulationView", simulation_view.getProxy) - return { "view": SimulationView.SimulationView()} + return { "view": simulation_view} diff --git a/plugins/SimulationView/layers.shader b/plugins/SimulationView/layers.shader index 30f23a3189..69c7c61ee5 100644 --- a/plugins/SimulationView/layers.shader +++ b/plugins/SimulationView/layers.shader @@ -49,12 +49,13 @@ fragment = // discard movements discard; } - // support: 4, 5, 7, 10 + // support: 4, 5, 7, 10, 11 (prime tower) if ((u_show_helpers == 0) && ( ((v_line_type >= 3.5) && (v_line_type <= 4.5)) || + ((v_line_type >= 4.5) && (v_line_type <= 5.5)) || ((v_line_type >= 6.5) && (v_line_type <= 7.5)) || ((v_line_type >= 9.5) && (v_line_type <= 10.5)) || - ((v_line_type >= 4.5) && (v_line_type <= 5.5)) + ((v_line_type >= 10.5) && (v_line_type <= 11.5)) )) { discard; } diff --git a/plugins/SimulationView/layers3d.shader b/plugins/SimulationView/layers3d.shader index 03e279e9eb..a277606509 100644 --- a/plugins/SimulationView/layers3d.shader +++ b/plugins/SimulationView/layers3d.shader @@ -154,7 +154,7 @@ geometry41core = if ((u_show_travel_moves == 0) && ((v_line_type[0] == 8) || (v_line_type[0] == 9))) { return; } - if ((u_show_helpers == 0) && ((v_line_type[0] == 4) || (v_line_type[0] == 5) || (v_line_type[0] == 7) || (v_line_type[0] == 10))) { + if ((u_show_helpers == 0) && ((v_line_type[0] == 4) || (v_line_type[0] == 5) || (v_line_type[0] == 7) || (v_line_type[0] == 10) || v_line_type[0] == 11)) { return; } if ((u_show_skin == 0) && ((v_line_type[0] == 1) || (v_line_type[0] == 2) || (v_line_type[0] == 3))) { @@ -256,6 +256,7 @@ fragment41core = out vec4 frag_color; uniform mediump vec4 u_ambientColor; + uniform mediump vec4 u_minimumAlbedo; uniform highp vec3 u_lightPosition; void main() @@ -263,7 +264,7 @@ fragment41core = mediump vec4 finalColor = vec4(0.0); float alpha = f_color.a; - finalColor.rgb += f_color.rgb * 0.3; + finalColor.rgb += f_color.rgb * 0.2 + u_minimumAlbedo.rgb; highp vec3 normal = normalize(f_normal); highp vec3 light_dir = normalize(u_lightPosition - f_vertex); @@ -285,6 +286,7 @@ u_extruder_opacity = [1.0, 1.0, 1.0, 1.0] u_specularColor = [0.4, 0.4, 0.4, 1.0] u_ambientColor = [0.3, 0.3, 0.3, 0.0] u_diffuseColor = [1.0, 0.79, 0.14, 1.0] +u_minimumAlbedo = [0.1, 0.1, 0.1, 1.0] u_shininess = 20.0 u_show_travel_moves = 0 diff --git a/plugins/SimulationView/layers_shadow.shader b/plugins/SimulationView/layers_shadow.shader index 7ceccff21e..6149cc1703 100644 --- a/plugins/SimulationView/layers_shadow.shader +++ b/plugins/SimulationView/layers_shadow.shader @@ -45,19 +45,23 @@ fragment = void main() { - if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) { // actually, 8 and 9 + if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) + { // actually, 8 and 9 // discard movements discard; } - // support: 4, 5, 7, 10 + // support: 4, 5, 7, 10, 11 if ((u_show_helpers == 0) && ( ((v_line_type >= 3.5) && (v_line_type <= 4.5)) || ((v_line_type >= 6.5) && (v_line_type <= 7.5)) || ((v_line_type >= 9.5) && (v_line_type <= 10.5)) || - ((v_line_type >= 4.5) && (v_line_type <= 5.5)) - )) { + ((v_line_type >= 4.5) && (v_line_type <= 5.5)) || + ((v_line_type >= 10.5) && (v_line_type <= 11.5)) + )) + { discard; } + // skin: 1, 2, 3 if ((u_show_skin == 0) && ( (v_line_type >= 0.5) && (v_line_type <= 3.5) @@ -65,7 +69,8 @@ fragment = discard; } // infill: - if ((u_show_infill == 0) && (v_line_type >= 5.5) && (v_line_type <= 6.5)) { + if ((u_show_infill == 0) && (v_line_type >= 5.5) && (v_line_type <= 6.5)) + { // discard movements discard; } @@ -117,12 +122,13 @@ fragment41core = // discard movements discard; } - // helpers: 4, 5, 7, 10 + // helpers: 4, 5, 7, 10, 11 if ((u_show_helpers == 0) && ( ((v_line_type >= 3.5) && (v_line_type <= 4.5)) || ((v_line_type >= 6.5) && (v_line_type <= 7.5)) || ((v_line_type >= 9.5) && (v_line_type <= 10.5)) || - ((v_line_type >= 4.5) && (v_line_type <= 5.5)) + ((v_line_type >= 4.5) && (v_line_type <= 5.5)) || + ((v_line_type >= 10.5) && (v_line_type <= 11.5)) )) { discard; } diff --git a/plugins/SimulationView/plugin.json b/plugins/SimulationView/plugin.json index 0e7bec0626..3ccf91b9e6 100644 --- a/plugins/SimulationView/plugin.json +++ b/plugins/SimulationView/plugin.json @@ -1,8 +1,8 @@ { "name": "Simulation View", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides the Simulation view.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/SliceInfoPlugin/MoreInfoWindow.qml b/plugins/SliceInfoPlugin/MoreInfoWindow.qml index 985ebe94a2..e00ad6730d 100644 --- a/plugins/SliceInfoPlugin/MoreInfoWindow.qml +++ b/plugins/SliceInfoPlugin/MoreInfoWindow.qml @@ -98,7 +98,7 @@ UM.Dialog RadioButton { id: dontSendButton - text: catalog.i18nc("@text:window", "I don't want to send these data") + text: catalog.i18nc("@text:window", "I don't want to send this data") exclusiveGroup: group onClicked: { @@ -108,7 +108,7 @@ UM.Dialog RadioButton { id: allowSendButton - text: catalog.i18nc("@text:window", "Allow sending these data to Ultimaker and help us improve Cura") + text: catalog.i18nc("@text:window", "Allow sending this data to Ultimaker and help us improve Cura") exclusiveGroup: group onClicked: { diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py index 2e9e557c4a..5149b6a6a6 100755 --- a/plugins/SliceInfoPlugin/SliceInfo.py +++ b/plugins/SliceInfoPlugin/SliceInfo.py @@ -5,6 +5,7 @@ import json import os import platform import time +from typing import cast, Optional, Set from PyQt5.QtCore import pyqtSlot, QObject @@ -16,7 +17,7 @@ from UM.i18n import i18nCatalog from UM.Logger import Logger from UM.PluginRegistry import PluginRegistry from UM.Qt.Duration import DurationFormat -from typing import cast, Optional + from .SliceInfoJob import SliceInfoJob @@ -32,30 +33,35 @@ class SliceInfo(QObject, Extension): def __init__(self, parent = None): QObject.__init__(self, parent) Extension.__init__(self) - Application.getInstance().getOutputDeviceManager().writeStarted.connect(self._onWriteStarted) - Application.getInstance().getPreferences().addPreference("info/send_slice_info", True) - Application.getInstance().getPreferences().addPreference("info/asked_send_slice_info", False) + + self._application = Application.getInstance() + + self._application.getOutputDeviceManager().writeStarted.connect(self._onWriteStarted) + self._application.getPreferences().addPreference("info/send_slice_info", True) + self._application.getPreferences().addPreference("info/asked_send_slice_info", False) self._more_info_dialog = None self._example_data_content = None - if not Application.getInstance().getPreferences().getValue("info/asked_send_slice_info"): + self._application.initializationFinished.connect(self._onAppInitialized) + + def _onAppInitialized(self): + # DO NOT read any preferences values in the constructor because at the time plugins are created, no version + # upgrade has been performed yet because version upgrades are plugins too! + if not self._application.getPreferences().getValue("info/asked_send_slice_info"): self.send_slice_info_message = Message(catalog.i18nc("@info", "Cura collects anonymized usage statistics."), lifetime = 0, dismissable = False, title = catalog.i18nc("@info:title", "Collecting Data")) self.send_slice_info_message.addAction("MoreInfo", name = catalog.i18nc("@action:button", "More info"), icon = None, - description = catalog.i18nc("@action:tooltip", "See more information on what data Cura sends."), button_style = Message.ActionButtonStyle.LINK) + description = catalog.i18nc("@action:tooltip", "See more information on what data Cura sends."), button_style = Message.ActionButtonStyle.LINK) self.send_slice_info_message.addAction("Dismiss", name = catalog.i18nc("@action:button", "Allow"), icon = None, - description = catalog.i18nc("@action:tooltip", "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing.")) + description = catalog.i18nc("@action:tooltip", "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing.")) self.send_slice_info_message.actionTriggered.connect(self.messageActionTriggered) self.send_slice_info_message.show() - Application.getInstance().initializationFinished.connect(self._onAppInitialized) - - def _onAppInitialized(self): if self._more_info_dialog is None: self._more_info_dialog = self._createDialog("MoreInfoWindow.qml") @@ -95,13 +101,29 @@ class SliceInfo(QObject, Extension): def setSendSliceInfo(self, enabled: bool): Application.getInstance().getPreferences().setValue("info/send_slice_info", enabled) + def _getUserModifiedSettingKeys(self) -> list: + from cura.CuraApplication import CuraApplication + application = cast(CuraApplication, Application.getInstance()) + machine_manager = application.getMachineManager() + global_stack = machine_manager.activeMachine + + user_modified_setting_keys = set() # type: Set[str] + + for stack in [global_stack] + list(global_stack.extruders.values()): + # Get all settings in user_changes and quality_changes + all_keys = stack.userChanges.getAllKeys() | stack.qualityChanges.getAllKeys() + user_modified_setting_keys |= all_keys + + return list(sorted(user_modified_setting_keys)) + def _onWriteStarted(self, output_device): try: if not Application.getInstance().getPreferences().getValue("info/send_slice_info"): Logger.log("d", "'info/send_slice_info' is turned off.") return # Do nothing, user does not want to send data - application = Application.getInstance() + from cura.CuraApplication import CuraApplication + application = cast(CuraApplication, Application.getInstance()) machine_manager = application.getMachineManager() print_information = application.getPrintInformation() @@ -164,6 +186,8 @@ class SliceInfo(QObject, Extension): data["quality_profile"] = global_stack.quality.getMetaData().get("quality_type") + data["user_modified_setting_keys"] = self._getUserModifiedSettingKeys() + data["models"] = [] # Listing all files placed on the build plate for node in DepthFirstIterator(application.getController().getScene().getRoot()): diff --git a/plugins/SliceInfoPlugin/__init__.py b/plugins/SliceInfoPlugin/__init__.py index 7f1dfa5336..440ca8ec40 100644 --- a/plugins/SliceInfoPlugin/__init__.py +++ b/plugins/SliceInfoPlugin/__init__.py @@ -1,12 +1,11 @@ # Copyright (c) 2015 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. + from . import SliceInfo -from UM.i18n import i18nCatalog -catalog = i18nCatalog("cura") + def getMetaData(): - return { - } + return {} def register(app): return { "extension": SliceInfo.SliceInfo()} \ No newline at end of file diff --git a/plugins/SliceInfoPlugin/example_data.json b/plugins/SliceInfoPlugin/example_data.json index ec953e0842..5fc4175e60 100644 --- a/plugins/SliceInfoPlugin/example_data.json +++ b/plugins/SliceInfoPlugin/example_data.json @@ -56,6 +56,7 @@ } ], "quality_profile": "fast", + "user_modified_setting_keys": ["layer_height", "wall_line_width", "infill_sparse_density"], "models": [ { "hash": "b72789b9beb5366dff20b1cf501020c3d4d4df7dc2295ecd0fddd0a6436df070", diff --git a/plugins/SliceInfoPlugin/plugin.json b/plugins/SliceInfoPlugin/plugin.json index d1c643266b..8ff0e194fb 100644 --- a/plugins/SliceInfoPlugin/plugin.json +++ b/plugins/SliceInfoPlugin/plugin.json @@ -1,8 +1,8 @@ { "name": "Slice info", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Submits anonymous slice info. Can be disabled through preferences.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/SolidView/SolidView.py b/plugins/SolidView/SolidView.py index b9ad5c8829..ec00329f86 100644 --- a/plugins/SolidView/SolidView.py +++ b/plugins/SolidView/SolidView.py @@ -12,7 +12,6 @@ from UM.Math.Color import Color from UM.View.GL.OpenGL import OpenGL from cura.Settings.ExtruderManager import ExtruderManager -from cura.Settings.ExtrudersModel import ExtrudersModel import math @@ -29,13 +28,16 @@ class SolidView(View): self._non_printing_shader = None self._support_mesh_shader = None - self._extruders_model = ExtrudersModel() + self._extruders_model = None self._theme = None def beginRendering(self): scene = self.getController().getScene() renderer = self.getRenderer() + if not self._extruders_model: + self._extruders_model = Application.getInstance().getExtrudersModel() + if not self._theme: self._theme = Application.getInstance().getTheme() @@ -67,8 +69,7 @@ class SolidView(View): if support_angle_stack is not None and Application.getInstance().getPreferences().getValue("view/show_overhang"): angle = support_angle_stack.getProperty("support_angle", "value") # Make sure the overhang angle is valid before passing it to the shader - # Note: if the overhang angle is set to its default value, it does not need to get validated (validationState = None) - if angle is not None and global_container_stack.getProperty("support_angle", "validationState") in [None, ValidatorState.Valid]: + if angle is not None and angle >= 0 and angle <= 90: self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(90 - angle))) else: self._enabled_shader.setUniformValue("u_overhangAngle", math.cos(math.radians(0))) #Overhang angle of 0 causes no area at all to be marked as overhang. diff --git a/plugins/SolidView/__init__.py b/plugins/SolidView/__init__.py index db2e48f489..34148fcf05 100644 --- a/plugins/SolidView/__init__.py +++ b/plugins/SolidView/__init__.py @@ -10,7 +10,8 @@ def getMetaData(): return { "view": { "name": i18n_catalog.i18nc("@item:inmenu", "Solid view"), - "weight": 0 + "weight": 0, + "visible": False } } diff --git a/plugins/SolidView/plugin.json b/plugins/SolidView/plugin.json index 6d6bda96f0..b3f62221c5 100644 --- a/plugins/SolidView/plugin.json +++ b/plugins/SolidView/plugin.json @@ -1,8 +1,8 @@ { "name": "Solid View", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides a normal solid mesh view.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } \ No newline at end of file diff --git a/plugins/SupportEraser/plugin.json b/plugins/SupportEraser/plugin.json index 5ccb639913..fa6d6d230e 100644 --- a/plugins/SupportEraser/plugin.json +++ b/plugins/SupportEraser/plugin.json @@ -1,8 +1,8 @@ { "name": "Support Eraser", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Creates an eraser mesh to block the printing of support in certain places", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/Toolbox/plugin.json b/plugins/Toolbox/plugin.json index 12d4042b6b..61dc0429f5 100644 --- a/plugins/Toolbox/plugin.json +++ b/plugins/Toolbox/plugin.json @@ -1,7 +1,7 @@ { "name": "Toolbox", "author": "Ultimaker B.V.", - "version": "1.0.0", - "api": 4, + "version": "1.0.1", + "api": "6.0", "description": "Find, manage and install new Cura packages." } diff --git a/plugins/Toolbox/resources/images/loading.gif b/plugins/Toolbox/resources/images/loading.gif deleted file mode 100644 index 43cc1ed6d7..0000000000 Binary files a/plugins/Toolbox/resources/images/loading.gif and /dev/null differ diff --git a/plugins/Toolbox/resources/images/loading.svg b/plugins/Toolbox/resources/images/loading.svg deleted file mode 100644 index 1ceb4a8d7f..0000000000 --- a/plugins/Toolbox/resources/images/loading.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/plugins/Toolbox/resources/qml/RatingWidget.qml b/plugins/Toolbox/resources/qml/RatingWidget.qml new file mode 100644 index 0000000000..441cf238f7 --- /dev/null +++ b/plugins/Toolbox/resources/qml/RatingWidget.qml @@ -0,0 +1,106 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import UM 1.0 as UM +import Cura 1.1 as Cura +Item +{ + id: ratingWidget + + property real rating: 0 + property int indexHovered: -1 + property string packageId: "" + + property int userRating: 0 + property bool canRate: false + + signal rated(int rating) + + width: contentRow.width + height: contentRow.height + MouseArea + { + id: mouseArea + anchors.fill: parent + hoverEnabled: ratingWidget.canRate + acceptedButtons: Qt.NoButton + onExited: + { + if(ratingWidget.canRate) + { + ratingWidget.indexHovered = -1 + } + } + + Row + { + id: contentRow + height: childrenRect.height + Repeater + { + model: 5 // We need to get 5 stars + Button + { + id: control + hoverEnabled: true + onHoveredChanged: + { + if(hovered && ratingWidget.canRate) + { + indexHovered = index + } + } + + ToolTip.visible: control.hovered && !ratingWidget.canRate + ToolTip.text: !Cura.API.account.isLoggedIn ? catalog.i18nc("@label", "You need to login first before you can rate"): catalog.i18nc("@label", "You need to install the package before you can rate") + + property bool isStarFilled: + { + // If the entire widget is hovered, override the actual rating. + if(ratingWidget.indexHovered >= 0) + { + return indexHovered >= index + } + + if(ratingWidget.userRating > 0) + { + return userRating >= index +1 + } + + return rating >= index + 1 + } + + contentItem: Item {} + height: UM.Theme.getSize("rating_star").height + width: UM.Theme.getSize("rating_star").width + background: UM.RecolorImage + { + source: UM.Theme.getIcon(control.isStarFilled ? "star_filled" : "star_empty") + sourceSize.width: width + sourceSize.height: height + + // Unfilled stars should always have the default color. Only filled stars should change on hover + color: + { + if(!ratingWidget.canRate) + { + return UM.Theme.getColor("rating_star") + } + if((ratingWidget.indexHovered >= 0 || ratingWidget.userRating > 0) && isStarFilled) + { + return UM.Theme.getColor("primary") + } + return UM.Theme.getColor("rating_star") + } + } + onClicked: + { + if(ratingWidget.canRate) + { + rated(index + 1) // Notify anyone who cares about this. + } + } + } + } + } + } +} \ No newline at end of file diff --git a/plugins/Toolbox/resources/qml/SmallRatingWidget.qml b/plugins/Toolbox/resources/qml/SmallRatingWidget.qml new file mode 100644 index 0000000000..965b81dc0f --- /dev/null +++ b/plugins/Toolbox/resources/qml/SmallRatingWidget.qml @@ -0,0 +1,36 @@ +import QtQuick 2.3 +import QtQuick.Controls 1.4 +import UM 1.1 as UM +import Cura 1.1 as Cura + +Row +{ + id: rating + height: UM.Theme.getSize("rating_star").height + visible: model.average_rating > 0 //Has a rating at all. + spacing: UM.Theme.getSize("thick_lining").width + width: starIcon.width + spacing + numRatingsLabel.width + UM.RecolorImage + { + id: starIcon + source: UM.Theme.getIcon("star_filled") + color: model.user_rating == 0 ? UM.Theme.getColor("rating_star") : UM.Theme.getColor("primary") + height: UM.Theme.getSize("rating_star").height + width: UM.Theme.getSize("rating_star").width + sourceSize.height: height + sourceSize.width: width + } + + Label + { + id: numRatingsLabel + text: model.average_rating != undefined ? model.average_rating.toFixed(1) + " (" + model.num_ratings + " " + catalog.i18nc("@label", "ratings") + ")": "" + verticalAlignment: Text.AlignVCenter + height: starIcon.height + width: contentWidth + anchors.verticalCenter: starIcon.verticalCenter + color: starIcon.color + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } +} \ No newline at end of file diff --git a/plugins/Toolbox/resources/qml/Toolbox.qml b/plugins/Toolbox/resources/qml/Toolbox.qml index 2a56898503..d15d98eed7 100644 --- a/plugins/Toolbox/resources/qml/Toolbox.qml +++ b/plugins/Toolbox/resources/qml/Toolbox.qml @@ -10,21 +10,21 @@ Window { id: base property var selection: null - title: catalog.i18nc("@title", "Toolbox") + title: catalog.i18nc("@title", "Marketplace") modality: Qt.ApplicationModal flags: Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowCloseButtonHint - width: 720 * screenScaleFactor - height: 640 * screenScaleFactor + width: Math.floor(720 * screenScaleFactor) + height: Math.floor(640 * screenScaleFactor) minimumWidth: width maximumWidth: minimumWidth minimumHeight: height maximumHeight: minimumHeight - color: UM.Theme.getColor("sidebar") + color: UM.Theme.getColor("main_background") UM.I18nCatalog { id: catalog - name:"cura" + name: "cura" } Item { @@ -33,11 +33,12 @@ Window { id: header } + Item { id: mainView width: parent.width - z: -1 + z: parent.z - 1 anchors { top: header.bottom @@ -75,6 +76,7 @@ Window visible: toolbox.viewCategory == "installed" } } + ToolboxFooter { id: footer @@ -93,6 +95,7 @@ Window licenseDialog.show(); } } + ToolboxLicenseDialog { id: licenseDialog diff --git a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml b/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml index 04b055ed66..b653f1a73b 100644 --- a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.3 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM @@ -15,7 +15,7 @@ Item { id: sidebar } - Rectangle + Item { id: header anchors @@ -55,10 +55,11 @@ Item bottomMargin: UM.Theme.getSize("default_margin").height } text: details.name || "" - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") wrapMode: Text.WordWrap width: parent.width height: UM.Theme.getSize("toolbox_property_label").height + renderType: Text.NativeRendering } Label { @@ -70,6 +71,7 @@ Item left: title.left topMargin: UM.Theme.getSize("default_margin").height } + renderType: Text.NativeRendering } Column { @@ -82,11 +84,20 @@ Item } spacing: Math.floor(UM.Theme.getSize("narrow_margin").height) width: childrenRect.width + Label { - text: catalog.i18nc("@label", "Contact") + ":" - font: UM.Theme.getFont("very_small") + text: catalog.i18nc("@label", "Website") + ":" + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering + } + Label + { + text: catalog.i18nc("@label", "Email") + ":" + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering } } Column @@ -100,23 +111,39 @@ Item topMargin: UM.Theme.getSize("default_margin").height } spacing: Math.floor(UM.Theme.getSize("narrow_margin").height) + + Label + { + text: + { + if (details.website) + { + return "" + details.website + "" + } + return "" + } + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + linkColor: UM.Theme.getColor("text_link") + onLinkActivated: Qt.openUrlExternally(link) + renderType: Text.NativeRendering + } + Label { text: { if (details.email) { - return ""+details.name+"" - } - else - { - return ""+details.name+"" + return "" + details.email + "" } + return "" } - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") linkColor: UM.Theme.getColor("text_link") onLinkActivated: Qt.openUrlExternally(link) + renderType: Text.NativeRendering } } Rectangle diff --git a/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml b/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml index 5c60e368a9..dba9f19ccd 100644 --- a/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml +++ b/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM @@ -23,6 +23,7 @@ Item { id: button text: catalog.i18nc("@action:button", "Back") + enabled: !toolbox.isDownloading UM.RecolorImage { id: backArrow @@ -39,7 +40,7 @@ Item width: width height: height } - color: button.hovered ? UM.Theme.getColor("primary") : UM.Theme.getColor("text") + color: button.enabled ? (button.hovered ? UM.Theme.getColor("primary") : UM.Theme.getColor("text")) : UM.Theme.getColor("text_inactive") source: UM.Theme.getIcon("arrow_left") } width: UM.Theme.getSize("toolbox_back_button").width @@ -59,10 +60,16 @@ Item { id: labelStyle text: control.text - color: control.hovered ? UM.Theme.getColor("primary") : UM.Theme.getColor("text") - font: UM.Theme.getFont("default_bold") - horizontalAlignment: Text.AlignRight + color: control.enabled ? (control.hovered ? UM.Theme.getColor("primary") : UM.Theme.getColor("text")) : UM.Theme.getColor("text_inactive") + font: UM.Theme.getFont("medium_bold") + horizontalAlignment: Text.AlignLeft + anchors + { + left: parent.left + leftMargin: UM.Theme.getSize("default_margin").width + } width: control.width + renderType: Text.NativeRendering } } } diff --git a/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml b/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml index 1efcde2110..db4e8c628f 100644 --- a/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml +++ b/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml @@ -1,135 +1,242 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM Item { + id: base + property var packageData + property var technicalDataSheetUrl: + { + var link = undefined + if ("Technical Data Sheet" in packageData.links) + { + // HACK: This is the way the old API (used in 3.6-beta) used to do it. For safety it's still here, + // but it can be removed over time. + link = packageData.links["Technical Data Sheet"] + } + else if ("technicalDataSheet" in packageData.links) + { + link = packageData.links["technicalDataSheet"] + } + return link + } + property var safetyDataSheetUrl: + { + var sds_name = "safetyDataSheet" + return (sds_name in packageData.links) ? packageData.links[sds_name] : undefined + } + property var printingGuidelinesUrl: + { + var pg_name = "printingGuidelines" + return (pg_name in packageData.links) ? packageData.links[pg_name] : undefined + } + + property var materialWebsiteUrl: + { + var pg_name = "website" + return (pg_name in packageData.links) ? packageData.links[pg_name] : undefined + } anchors.topMargin: UM.Theme.getSize("default_margin").height height: visible ? childrenRect.height : 0 - visible: packageData.type == "material" && packageData.has_configs + + visible: packageData.type == "material" && + (packageData.has_configs || technicalDataSheetUrl !== undefined || + safetyDataSheetUrl !== undefined || printingGuidelinesUrl !== undefined || + materialWebsiteUrl !== undefined) + + Item + { + id: combatibilityItem + visible: packageData.has_configs + width: parent.width + // This is a bit of a hack, but the whole QML is pretty messy right now. This needs a big overhaul. + height: visible ? heading.height + table.height: 0 + + Label + { + id: heading + anchors.topMargin: UM.Theme.getSize("default_margin").height + width: parent.width + text: catalog.i18nc("@label", "Compatibility") + wrapMode: Text.WordWrap + color: UM.Theme.getColor("text_medium") + font: UM.Theme.getFont("medium") + renderType: Text.NativeRendering + } + + TableView + { + id: table + anchors.top: heading.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + width: parent.width + frameVisible: false + + // Workaround for scroll issues (QTBUG-49652) + flickableItem.interactive: false + Component.onCompleted: + { + for (var i = 0; i < flickableItem.children.length; ++i) + { + flickableItem.children[i].enabled = false + } + } + selectionMode: 0 + model: packageData.supported_configs + headerDelegate: Rectangle + { + color: UM.Theme.getColor("main_background") + height: UM.Theme.getSize("toolbox_chart_row").height + Label + { + anchors.verticalCenter: parent.verticalCenter + elide: Text.ElideRight + text: styleData.value || "" + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default_bold") + renderType: Text.NativeRendering + } + Rectangle + { + anchors.bottom: parent.bottom + height: UM.Theme.getSize("default_lining").height + width: parent.width + color: "black" + } + } + rowDelegate: Item + { + height: UM.Theme.getSize("toolbox_chart_row").height + Label + { + anchors.verticalCenter: parent.verticalCenter + elide: Text.ElideRight + text: styleData.value || "" + color: UM.Theme.getColor("text_medium") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } + } + itemDelegate: Item + { + height: UM.Theme.getSize("toolbox_chart_row").height + Label + { + anchors.verticalCenter: parent.verticalCenter + elide: Text.ElideRight + text: styleData.value || "" + color: UM.Theme.getColor("text_medium") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } + } + + Component + { + id: columnTextDelegate + Label + { + anchors.fill: parent + verticalAlignment: Text.AlignVCenter + text: styleData.value || "" + elide: Text.ElideRight + color: UM.Theme.getColor("text_medium") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } + } + + TableViewColumn + { + role: "machine" + title: "Machine" + width: Math.floor(table.width * 0.25) + delegate: columnTextDelegate + } + TableViewColumn + { + role: "print_core" + title: "Print Core" + width: Math.floor(table.width * 0.2) + } + TableViewColumn + { + role: "build_plate" + title: "Build Plate" + width: Math.floor(table.width * 0.225) + } + TableViewColumn + { + role: "support_material" + title: "Support" + width: Math.floor(table.width * 0.225) + } + TableViewColumn + { + role: "quality" + title: "Quality" + width: Math.floor(table.width * 0.1) + } + } + } + Label { - id: heading - anchors.topMargin: UM.Theme.getSize("default_margin").height - width: parent.width - text: catalog.i18nc("@label", "Compatibility") - wrapMode: Text.WordWrap - color: UM.Theme.getColor("text_medium") - font: UM.Theme.getFont("medium") - } - TableView - { - id: table - anchors.top: heading.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - width: parent.width - frameVisible: false + id: data_sheet_links + anchors.top: combatibilityItem.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height / 2 + visible: base.technicalDataSheetUrl !== undefined || + base.safetyDataSheetUrl !== undefined || base.printingGuidelinesUrl !== undefined || + base.materialWebsiteUrl !== undefined + height: visible ? contentHeight : 0 + text: + { + var result = "" + if (base.technicalDataSheetUrl !== undefined) + { + var tds_name = catalog.i18nc("@action:label", "Technical Data Sheet") + result += "%2".arg(base.technicalDataSheetUrl).arg(tds_name) + } + if (base.safetyDataSheetUrl !== undefined) + { + if (result.length > 0) + { + result += "
" + } + var sds_name = catalog.i18nc("@action:label", "Safety Data Sheet") + result += "%2".arg(base.safetyDataSheetUrl).arg(sds_name) + } + if (base.printingGuidelinesUrl !== undefined) + { + if (result.length > 0) + { + result += "
" + } + var pg_name = catalog.i18nc("@action:label", "Printing Guidelines") + result += "%2".arg(base.printingGuidelinesUrl).arg(pg_name) + } + if (base.materialWebsiteUrl !== undefined) + { + if (result.length > 0) + { + result += "
" + } + var pg_name = catalog.i18nc("@action:label", "Website") + result += "%2".arg(base.materialWebsiteUrl).arg(pg_name) + } - // Workaround for scroll issues (QTBUG-49652) - flickableItem.interactive: false - Component.onCompleted: - { - for (var i = 0; i < flickableItem.children.length; ++i) - { - flickableItem.children[i].enabled = false - } - } - selectionMode: 0 - model: packageData.supported_configs - headerDelegate: Rectangle - { - color: UM.Theme.getColor("sidebar") - height: UM.Theme.getSize("toolbox_chart_row").height - Label - { - anchors.verticalCenter: parent.verticalCenter - elide: Text.ElideRight - text: styleData.value || "" - color: UM.Theme.getColor("text") - font: UM.Theme.getFont("default_bold") - } - Rectangle - { - anchors.bottom: parent.bottom - height: UM.Theme.getSize("default_lining").height - width: parent.width - color: "black" - } - } - rowDelegate: Item - { - height: UM.Theme.getSize("toolbox_chart_row").height - Label - { - anchors.verticalCenter: parent.verticalCenter - elide: Text.ElideRight - text: styleData.value || "" - color: UM.Theme.getColor("text_medium") - font: UM.Theme.getFont("default") - } - } - itemDelegate: Item - { - height: UM.Theme.getSize("toolbox_chart_row").height - Label - { - anchors.verticalCenter: parent.verticalCenter - elide: Text.ElideRight - text: styleData.value || "" - color: UM.Theme.getColor("text_medium") - font: UM.Theme.getFont("default") - } - } - - Component - { - id: columnTextDelegate - Label - { - anchors.fill: parent - verticalAlignment: Text.AlignVCenter - text: styleData.value || "" - elide: Text.ElideRight - color: UM.Theme.getColor("text_medium") - font: UM.Theme.getFont("default") - } - } - - TableViewColumn - { - role: "machine" - title: "Machine" - width: Math.floor(table.width * 0.25) - delegate: columnTextDelegate - } - TableViewColumn - { - role: "print_core" - title: "Print Core" - width: Math.floor(table.width * 0.2) - } - TableViewColumn - { - role: "build_plate" - title: "Build Plate" - width: Math.floor(table.width * 0.225) - } - TableViewColumn - { - role: "support_material" - title: "Support" - width: Math.floor(table.width * 0.225) - } - TableViewColumn - { - role: "quality" - title: "Quality" - width: Math.floor(table.width * 0.1) + return result } + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + linkColor: UM.Theme.getColor("text_link") + onLinkActivated: Qt.openUrlExternally(link) + renderType: Text.NativeRendering } } diff --git a/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml b/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml index 4aa8b883b7..e238132680 100644 --- a/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml +++ b/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 +import QtQuick 2.10 import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 import QtQuick.Layouts 1.1 @@ -17,7 +17,7 @@ UM.Dialog // This dialog asks the user whether he/she wants to open a project file as a project or import models. id: base - title: catalog.i18nc("@title:window", "Confirm uninstall ") + toolbox.pluginToUninstall + title: catalog.i18nc("@title:window", "Confirm uninstall") + toolbox.pluginToUninstall width: 450 * screenScaleFactor height: 50 * screenScaleFactor + dialogText.height + buttonBar.height @@ -66,6 +66,7 @@ UM.Dialog anchors.right: parent.right font: UM.Theme.getFont("default") wrapMode: Text.WordWrap + renderType: Text.NativeRendering } // Buttons diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailList.qml b/plugins/Toolbox/resources/qml/ToolboxDetailList.qml index 2b4cd838bf..4e44ea7d0b 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailList.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailList.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 +import QtQuick 2.7 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM @@ -26,10 +26,19 @@ Item } height: childrenRect.height + 2 * UM.Theme.getSize("wide_margin").height spacing: UM.Theme.getSize("default_margin").height + Repeater { model: toolbox.packagesModel - delegate: ToolboxDetailTile {} + delegate: Loader + { + // FIXME: When using asynchronous loading, on Mac and Windows, the tile may fail to load complete, + // leaving an empty space below the title part. We turn it off for now to make it work on Mac and + // Windows. + // Can be related to this QT bug: https://bugreports.qt.io/browse/QTBUG-50992 + asynchronous: false + source: "ToolboxDetailTile.qml" + } } } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml index cf4bfcd545..fef2732af9 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml @@ -1,17 +1,18 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.3 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM +import Cura 1.1 as Cura + Item { id: page - property var details: base.selection + property var details: base.selection || {} anchors.fill: parent - width: parent.width ToolboxBackColumn { id: sidebar @@ -25,15 +26,12 @@ Item right: parent.right rightMargin: UM.Theme.getSize("wide_margin").width } - height: UM.Theme.getSize("toolbox_detail_header").height - Image + height: childrenRect.height + 3 * UM.Theme.getSize("default_margin").width + Rectangle { id: thumbnail width: UM.Theme.getSize("toolbox_thumbnail_medium").width height: UM.Theme.getSize("toolbox_thumbnail_medium").height - fillMode: Image.PreserveAspectFit - source: details.icon_url || "../images/logobot.svg" - mipmap: true anchors { top: parent.top @@ -41,6 +39,14 @@ Item leftMargin: UM.Theme.getSize("wide_margin").width topMargin: UM.Theme.getSize("wide_margin").height } + color: UM.Theme.getColor("main_background") + Image + { + anchors.fill: parent + fillMode: Image.PreserveAspectFit + source: details === null ? "" : (details.icon_url || "../images/logobot.svg") + mipmap: true + } } Label @@ -51,16 +57,21 @@ Item top: thumbnail.top left: thumbnail.right leftMargin: UM.Theme.getSize("default_margin").width - right: parent.right - rightMargin: UM.Theme.getSize("wide_margin").width - bottomMargin: UM.Theme.getSize("default_margin").height } - text: details.name || "" - font: UM.Theme.getFont("large") + text: details === null ? "" : (details.name || "") + font: UM.Theme.getFont("large_bold") color: UM.Theme.getColor("text") - wrapMode: Text.WordWrap - width: parent.width - height: UM.Theme.getSize("toolbox_property_label").height + width: contentWidth + height: contentHeight + renderType: Text.NativeRendering + } + + SmallRatingWidget + { + anchors.left: title.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.verticalCenter: title.verticalCenter + property var model: details } Column @@ -77,27 +88,38 @@ Item height: childrenRect.height Label { - text: catalog.i18nc("@label", "Version") + ":" - font: UM.Theme.getFont("very_small") + text: catalog.i18nc("@label", "Your rating") + ":" + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering + } + Label + { + text: catalog.i18nc("@label", "Version") + ":" + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering } Label { text: catalog.i18nc("@label", "Last updated") + ":" - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering } Label { text: catalog.i18nc("@label", "Author") + ":" - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering } Label { text: catalog.i18nc("@label", "Downloads") + ":" - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering } } Column @@ -112,54 +134,97 @@ Item } spacing: Math.floor(UM.Theme.getSize("narrow_margin").height) height: childrenRect.height + RatingWidget + { + id: rating + visible: details.type == "plugin" + packageId: details.id != undefined ? details.id: "" + userRating: details.user_rating != undefined ? details.user_rating: 0 + canRate: toolbox.isInstalled(details.id) && Cura.API.account.isLoggedIn + + onRated: + { + toolbox.ratePackage(details.id, rating) + // HACK: This is a far from optimal solution, but without major refactoring, this is the best we can + // do. Since a rework of this is scheduled, it shouldn't live that long... + var index = toolbox.pluginsAvailableModel.find("id", details.id) + if(index != -1) + { + if(details.user_rating == 0) // User never rated before. + { + toolbox.pluginsAvailableModel.setProperty(index, "num_ratings", details.num_ratings + 1) + } + + toolbox.pluginsAvailableModel.setProperty(index, "user_rating", rating) + + + // Hack; This is because the current selection is an outdated copy, so we need to re-copy it. + base.selection = toolbox.pluginsAvailableModel.getItem(index) + return + } + index = toolbox.pluginsShowcaseModel.find("id", details.id) + if(index != -1) + { + if(details.user_rating == 0) // User never rated before. + { + toolbox.pluginsShowcaseModel.setProperty(index, "user_rating", rating) + } + toolbox.pluginsShowcaseModel.setProperty(index, "num_ratings", details.num_ratings + 1) + + // Hack; This is because the current selection is an outdated copy, so we need to re-copy it. + base.selection = toolbox.pluginsShowcaseModel.getItem(index) + } + } + } Label { - text: details.version || catalog.i18nc("@label", "Unknown") - font: UM.Theme.getFont("very_small") + text: details === null ? "" : (details.version || catalog.i18nc("@label", "Unknown")) + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") + renderType: Text.NativeRendering } Label { text: { + if (details === null) + { + return "" + } var date = new Date(details.last_updated) return date.toLocaleString(UM.Preferences.getValue("general/language")) } - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") + renderType: Text.NativeRendering } Label { text: { - if (details.author_email) + if (details === null) { - return "" + details.author_name + "" + return "" } else { return "" + details.author_name + "" } } - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") linkColor: UM.Theme.getColor("text_link") onLinkActivated: Qt.openUrlExternally(link) + renderType: Text.NativeRendering } Label { - text: details.download_count || catalog.i18nc("@label", "Unknown") - font: UM.Theme.getFont("very_small") + text: details === null ? "" : (details.download_count || catalog.i18nc("@label", "Unknown")) + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") + renderType: Text.NativeRendering } } - Rectangle - { - color: UM.Theme.getColor("lining") - width: parent.width - height: UM.Theme.getSize("default_lining").height - anchors.bottom: parent.bottom - } } ToolboxDetailList { diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml b/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml index 355fa5dece..c7bb1f60ac 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM @@ -31,17 +31,19 @@ Item wrapMode: Text.WordWrap color: UM.Theme.getColor("text") font: UM.Theme.getFont("medium_bold") + renderType: Text.NativeRendering } Label { anchors.top: packageName.bottom width: parent.width text: model.description - maximumLineCount: 3 + maximumLineCount: 25 elide: Text.ElideRight wrapMode: Text.WordWrap color: UM.Theme.getColor("text") font: UM.Theme.getFont("default") + renderType: Text.NativeRendering } } @@ -52,7 +54,7 @@ Item anchors.top: tile.top width: childrenRect.width height: childrenRect.height - + packageData: model } ToolboxCompatibilityChart diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml b/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml index cd1e4cdbda..60fe095537 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml @@ -1,40 +1,91 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM +import Cura 1.1 as Cura Column { property bool installed: toolbox.isInstalled(model.id) property bool canUpdate: toolbox.canUpdate(model.id) + property bool loginRequired: model.login_required && !Cura.API.account.isLoggedIn + property var packageData + width: UM.Theme.getSize("toolbox_action_button").width spacing: UM.Theme.getSize("narrow_margin").height - ToolboxProgressButton + Item { - id: installButton - active: toolbox.isDownloading && toolbox.activePackage == model - complete: installed - readyAction: function() + width: installButton.width + height: installButton.height + ToolboxProgressButton { - toolbox.activePackage = model - toolbox.startDownload(model.download_url) + id: installButton + active: toolbox.isDownloading && toolbox.activePackage == model + onReadyAction: + { + toolbox.activePackage = model + toolbox.startDownload(model.download_url) + } + onActiveAction: toolbox.cancelDownload() + + // Don't allow installing while another download is running + enabled: installed || (!(toolbox.isDownloading && toolbox.activePackage != model) && !loginRequired) + opacity: enabled ? 1.0 : 0.5 + visible: !updateButton.visible && !installed// Don't show when the update button is visible } - activeAction: function() + + Cura.SecondaryButton { - toolbox.cancelDownload() + visible: installed + onClicked: toolbox.viewCategory = "installed" + text: catalog.i18nc("@action:button", "Installed") + fixedWidthMode: true + width: installButton.width + height: installButton.height } - completeAction: function() + } + + Label + { + wrapMode: Text.WordWrap + text: catalog.i18nc("@label:The string between and is the highlighted link", "Log in is required to install or update") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + linkColor: UM.Theme.getColor("text_link") + visible: loginRequired + width: installButton.width + renderType: Text.NativeRendering + + MouseArea { - toolbox.viewCategory = "installed" + anchors.fill: parent + onClicked: Cura.API.account.login() + } + } + + Label + { + property var whereToBuyUrl: + { + var pg_name = "whereToBuy" + return (pg_name in packageData.links) ? packageData.links[pg_name] : undefined + } + + renderType: Text.NativeRendering + text: catalog.i18nc("@label:The string between and is the highlighted link", "Buy material spools") + linkColor: UM.Theme.getColor("text_link") + visible: whereToBuyUrl != undefined + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + MouseArea + { + anchors.fill: parent + onClicked: Qt.openUrlExternally(parent.whereToBuyUrl) } - // Don't allow installing while another download is running - enabled: installed || !(toolbox.isDownloading && toolbox.activePackage != model) - opacity: enabled ? 1.0 : 0.5 - visible: !updateButton.visible // Don't show when the update button is visible } ToolboxProgressButton @@ -44,24 +95,28 @@ Column readyLabel: catalog.i18nc("@action:button", "Update") activeLabel: catalog.i18nc("@action:button", "Updating") completeLabel: catalog.i18nc("@action:button", "Updated") - readyAction: function() + + onReadyAction: { toolbox.activePackage = model toolbox.update(model.id) } - activeAction: function() - { - toolbox.cancelDownload() - } + onActiveAction: toolbox.cancelDownload() // Don't allow installing while another download is running - enabled: !(toolbox.isDownloading && toolbox.activePackage != model) + enabled: !(toolbox.isDownloading && toolbox.activePackage != model) && !loginRequired opacity: enabled ? 1.0 : 0.5 visible: canUpdate } + Connections { target: toolbox onInstallChanged: installed = toolbox.isInstalled(model.id) onMetadataChanged: canUpdate = toolbox.canUpdate(model.id) + onFilterChanged: + { + installed = toolbox.isInstalled(model.id) + canUpdate = toolbox.canUpdate(model.id) + } } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml index c586828969..a9fcb39b28 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import QtQuick.Layouts 1.3 @@ -22,9 +22,10 @@ Column text: gridArea.heading width: parent.width color: UM.Theme.getColor("text_medium") - font: UM.Theme.getFont("medium") + font: UM.Theme.getFont("large") + renderType: Text.NativeRendering } - GridLayout + Grid { id: grid width: parent.width - 2 * parent.padding @@ -34,10 +35,12 @@ Column Repeater { model: gridArea.model - delegate: ToolboxDownloadsGridTile + delegate: Loader { - Layout.preferredWidth: (grid.width - (grid.columns - 1) * grid.columnSpacing) / grid.columns - Layout.preferredHeight: UM.Theme.getSize("toolbox_thumbnail_small").height + asynchronous: true + width: Math.round((grid.width - (grid.columns - 1) * grid.columnSpacing) / grid.columns) + height: UM.Theme.getSize("toolbox_thumbnail_small").height + source: "ToolboxDownloadsGridTile.qml" } } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml index ebd4c006f8..a11c6ee963 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml @@ -1,103 +1,27 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.3 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import QtQuick.Layouts 1.3 import UM 1.1 as UM +import Cura 1.1 as Cura Item { - property int packageCount: (toolbox.viewCategory == "material" && model.type === undefined) ? toolbox.getTotalNumberOfPackagesByAuthor(model.id) : 1 + id: toolboxDownloadsGridTile + property int packageCount: (toolbox.viewCategory == "material" && model.type === undefined) ? toolbox.getTotalNumberOfMaterialPackagesByAuthor(model.id) : 1 property int installedPackages: (toolbox.viewCategory == "material" && model.type === undefined) ? toolbox.getNumberOfInstalledPackagesByAuthor(model.id) : (toolbox.isInstalled(model.id) ? 1 : 0) height: childrenRect.height Layout.alignment: Qt.AlignTop | Qt.AlignLeft - Rectangle - { - id: highlight - anchors.fill: parent - opacity: 0.0 - color: UM.Theme.getColor("primary") - } - Row - { - width: parent.width - height: childrenRect.height - spacing: Math.floor(UM.Theme.getSize("narrow_margin").width) - Rectangle - { - id: thumbnail - width: UM.Theme.getSize("toolbox_thumbnail_small").width - height: UM.Theme.getSize("toolbox_thumbnail_small").height - color: "white" - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - Image - { - anchors.centerIn: parent - width: UM.Theme.getSize("toolbox_thumbnail_small").width - UM.Theme.getSize("wide_margin").width - height: UM.Theme.getSize("toolbox_thumbnail_small").height - UM.Theme.getSize("wide_margin").width - fillMode: Image.PreserveAspectFit - source: model.icon_url || "../images/logobot.svg" - mipmap: true - } - UM.RecolorImage - { - width: (parent.width * 0.4) | 0 - height: (parent.height * 0.4) | 0 - anchors - { - bottom: parent.bottom - right: parent.right - } - sourceSize.width: width - sourceSize.height: height - visible: installedPackages != 0 - color: (installedPackages == packageCount) ? UM.Theme.getColor("primary") : UM.Theme.getColor("border") - source: "../images/installed_check.svg" - } - } - Column - { - width: parent.width - thumbnail.width - parent.spacing - spacing: Math.floor(UM.Theme.getSize("narrow_margin").width) - Label - { - id: name - text: model.name - width: parent.width - wrapMode: Text.WordWrap - color: UM.Theme.getColor("text") - font: UM.Theme.getFont("default_bold") - } - Label - { - id: info - text: model.description - maximumLineCount: 2 - elide: Text.ElideRight - width: parent.width - wrapMode: Text.WordWrap - color: UM.Theme.getColor("text_medium") - font: UM.Theme.getFont("very_small") - } - } - } + MouseArea { anchors.fill: parent hoverEnabled: true - onEntered: - { - thumbnail.border.color = UM.Theme.getColor("primary") - highlight.opacity = 0.1 - } - onExited: - { - thumbnail.border.color = UM.Theme.getColor("lining") - highlight.opacity = 0.0 - } + onEntered: thumbnail.border.color = UM.Theme.getColor("primary") + onExited: thumbnail.border.color = UM.Theme.getColor("lining") onClicked: { base.selection = model @@ -127,4 +51,83 @@ Item } } } + + Rectangle + { + id: thumbnail + width: UM.Theme.getSize("toolbox_thumbnail_small").width + height: UM.Theme.getSize("toolbox_thumbnail_small").height + color: UM.Theme.getColor("main_background") + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + + Image + { + anchors.centerIn: parent + width: UM.Theme.getSize("toolbox_thumbnail_small").width - UM.Theme.getSize("wide_margin").width + height: UM.Theme.getSize("toolbox_thumbnail_small").height - UM.Theme.getSize("wide_margin").width + fillMode: Image.PreserveAspectFit + source: model.icon_url || "../images/logobot.svg" + mipmap: true + } + UM.RecolorImage + { + width: (parent.width * 0.4) | 0 + height: (parent.height * 0.4) | 0 + anchors + { + bottom: parent.bottom + right: parent.right + } + sourceSize.height: height + visible: installedPackages != 0 + color: (installedPackages == packageCount) ? UM.Theme.getColor("primary") : UM.Theme.getColor("border") + source: "../images/installed_check.svg" + } + } + Item + { + anchors + { + left: thumbnail.right + leftMargin: Math.floor(UM.Theme.getSize("narrow_margin").width) + right: parent.right + top: parent.top + bottom: parent.bottom + } + + Label + { + id: name + text: model.name + width: parent.width + elide: Text.ElideRight + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default_bold") + } + Label + { + id: info + text: model.description + elide: Text.ElideRight + width: parent.width + wrapMode: Text.WordWrap + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default") + anchors.top: name.bottom + anchors.bottom: rating.top + verticalAlignment: Text.AlignVCenter + maximumLineCount: 2 + } + SmallRatingWidget + { + id: rating + anchors + { + bottom: parent.bottom + left: parent.left + right: parent.right + } + } + } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml index 1089fcc51e..3e0dda4f4a 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml @@ -12,7 +12,9 @@ ScrollView width: parent.width height: parent.height style: UM.Theme.styles.scrollview + flickableItem.flickableDirection: Flickable.VerticalFlick + Column { width: base.width @@ -30,7 +32,7 @@ ScrollView id: allPlugins width: parent.width heading: toolbox.viewCategory == "material" ? catalog.i18nc("@label", "Community Contributions") : catalog.i18nc("@label", "Community Plugins") - model: toolbox.viewCategory == "material" ? toolbox.authorsModel : toolbox.packagesModel + model: toolbox.viewCategory == "material" ? toolbox.materialsAvailableModel : toolbox.pluginsAvailableModel } ToolboxDownloadsGrid diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml index 46f5debfdd..795622cf82 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM @@ -23,30 +23,34 @@ Rectangle text: catalog.i18nc("@label", "Featured") width: parent.width color: UM.Theme.getColor("text_medium") - font: UM.Theme.getFont("medium") + font: UM.Theme.getFont("large") + renderType: Text.NativeRendering } Grid { height: childrenRect.height spacing: UM.Theme.getSize("wide_margin").width columns: 3 - anchors - { - horizontalCenter: parent.horizontalCenter - } + anchors.horizontalCenter: parent.horizontalCenter + Repeater { - model: { - if ( toolbox.viewCategory == "plugin" ) + model: + { + if (toolbox.viewCategory == "plugin") { return toolbox.pluginsShowcaseModel } - if ( toolbox.viewCategory == "material" ) + if (toolbox.viewCategory == "material") { return toolbox.materialsShowcaseModel } } - delegate: ToolboxDownloadsShowcaseTile {} + delegate: Loader + { + asynchronous: true + source: "ToolboxDownloadsShowcaseTile.qml" + } } } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml index 15d1ae302c..3699746b86 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. -// Toolbox is released under the terms of the LGPLv3 or higher. +// Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import QtGraphicalEffects 1.0 @@ -9,96 +9,84 @@ import UM 1.1 as UM Rectangle { - property int packageCount: toolbox.viewCategory == "material" ? toolbox.getTotalNumberOfPackagesByAuthor(model.id) : 1 + property int packageCount: toolbox.viewCategory == "material" ? toolbox.getTotalNumberOfMaterialPackagesByAuthor(model.id) : 1 property int installedPackages: toolbox.viewCategory == "material" ? toolbox.getNumberOfInstalledPackagesByAuthor(model.id) : (toolbox.isInstalled(model.id) ? 1 : 0) id: tileBase width: UM.Theme.getSize("toolbox_thumbnail_large").width + (2 * UM.Theme.getSize("default_lining").width) - height: thumbnail.height + packageNameBackground.height + (2 * UM.Theme.getSize("default_lining").width) + height: thumbnail.height + packageName.height + rating.height + UM.Theme.getSize("default_margin").width border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("lining") - color: "transparent" - Rectangle + color: UM.Theme.getColor("main_background") + Image { id: thumbnail - color: "white" - width: UM.Theme.getSize("toolbox_thumbnail_large").width - height: UM.Theme.getSize("toolbox_thumbnail_large").height + height: UM.Theme.getSize("toolbox_thumbnail_large").height - 4 * UM.Theme.getSize("default_margin").height + width: UM.Theme.getSize("toolbox_thumbnail_large").height - 4 * UM.Theme.getSize("default_margin").height + fillMode: Image.PreserveAspectFit + source: model.icon_url || "../images/logobot.svg" + mipmap: true anchors { top: parent.top + topMargin: UM.Theme.getSize("default_margin").height horizontalCenter: parent.horizontalCenter - topMargin: UM.Theme.getSize("default_lining").width } - Image + } + Label + { + id: packageName + text: model.name + anchors { - anchors.centerIn: parent - width: UM.Theme.getSize("toolbox_thumbnail_large").width - 2 * UM.Theme.getSize("default_margin").width - height: UM.Theme.getSize("toolbox_thumbnail_large").height - 2 * UM.Theme.getSize("default_margin").height - fillMode: Image.PreserveAspectFit - source: model.icon_url || "../images/logobot.svg" - mipmap: true + horizontalCenter: parent.horizontalCenter + top: thumbnail.bottom } - UM.RecolorImage + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + renderType: Text.NativeRendering + height: UM.Theme.getSize("toolbox_heading_label").height + width: parent.width - UM.Theme.getSize("default_margin").width + wrapMode: Text.WordWrap + elide: Text.ElideRight + font: UM.Theme.getFont("medium_bold") + color: UM.Theme.getColor("text") + } + UM.RecolorImage + { + width: (parent.width * 0.20) | 0 + height: width + anchors { - width: (parent.width * 0.3) | 0 - height: (parent.height * 0.3) | 0 - anchors - { - bottom: parent.bottom - right: parent.right - bottomMargin: UM.Theme.getSize("default_lining").width - } - sourceSize.width: width - sourceSize.height: height - visible: installedPackages != 0 - color: (installedPackages == packageCount) ? UM.Theme.getColor("primary") : UM.Theme.getColor("border") - source: "../images/installed_check.svg" + bottom: bottomBorder.top + right: parent.right } + visible: installedPackages != 0 + color: (installedPackages == packageCount) ? UM.Theme.getColor("primary") : UM.Theme.getColor("border") + source: "../images/installed_check.svg" + } + + SmallRatingWidget + { + id: rating + anchors.bottom: parent.bottom + anchors.bottomMargin: UM.Theme.getSize("narrow_margin").height + anchors.horizontalCenter: parent.horizontalCenter } Rectangle { - id: packageNameBackground + id: bottomBorder color: UM.Theme.getColor("primary") - anchors - { - top: thumbnail.bottom - horizontalCenter: parent.horizontalCenter - } - height: UM.Theme.getSize("toolbox_heading_label").height + anchors.bottom: parent.bottom width: parent.width - Label - { - id: packageName - text: model.name - anchors - { - horizontalCenter: parent.horizontalCenter - } - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - height: UM.Theme.getSize("toolbox_heading_label").height - width: parent.width - wrapMode: Text.WordWrap - color: UM.Theme.getColor("button_text") - font: UM.Theme.getFont("medium_bold") - } + height: UM.Theme.getSize("toolbox_header_highlight").height } + MouseArea { anchors.fill: parent hoverEnabled: true - onEntered: - { - packageName.color = UM.Theme.getColor("button_text_hover") - packageNameBackground.color = UM.Theme.getColor("primary_hover") - tileBase.border.color = UM.Theme.getColor("primary_hover") - } - onExited: - { - packageName.color = UM.Theme.getColor("button_text") - packageNameBackground.color = UM.Theme.getColor("primary") - tileBase.border.color = UM.Theme.getColor("lining") - } + onEntered: tileBase.border.color = UM.Theme.getColor("primary") + onExited: tileBase.border.color = UM.Theme.getColor("lining") onClicked: { base.selection = model diff --git a/plugins/Toolbox/resources/qml/ToolboxErrorPage.qml b/plugins/Toolbox/resources/qml/ToolboxErrorPage.qml index 600ae2b39f..e57e63dbb9 100644 --- a/plugins/Toolbox/resources/qml/ToolboxErrorPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxErrorPage.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 @@ -18,5 +18,6 @@ Rectangle { centerIn: parent } + renderType: Text.NativeRendering } } diff --git a/plugins/Toolbox/resources/qml/ToolboxFooter.qml b/plugins/Toolbox/resources/qml/ToolboxFooter.qml index 5c2a6577ad..6f46e939ff 100644 --- a/plugins/Toolbox/resources/qml/ToolboxFooter.qml +++ b/plugins/Toolbox/resources/qml/ToolboxFooter.qml @@ -1,22 +1,24 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 +import QtQuick 2.10 +import QtQuick.Controls 2.3 + import UM 1.1 as UM +import Cura 1.0 as Cura Item { id: footer width: parent.width anchors.bottom: parent.bottom - height: visible ? Math.floor(UM.Theme.getSize("toolbox_footer").height) : 0 + height: visible ? UM.Theme.getSize("toolbox_footer").height : 0 + Label { text: catalog.i18nc("@info", "You will need to restart Cura before changes in packages have effect.") color: UM.Theme.getColor("text") - height: Math.floor(UM.Theme.getSize("toolbox_footer_button").height) + height: UM.Theme.getSize("toolbox_footer_button").height verticalAlignment: Text.AlignVCenter anchors { @@ -26,12 +28,12 @@ Item right: restartButton.right rightMargin: UM.Theme.getSize("default_margin").width } - + renderType: Text.NativeRendering } - Button + + Cura.PrimaryButton { id: restartButton - text: catalog.i18nc("@info:button", "Quit Cura") anchors { top: parent.top @@ -39,26 +41,11 @@ Item right: parent.right rightMargin: UM.Theme.getSize("wide_margin").width } - iconName: "dialog-restart" + height: UM.Theme.getSize("toolbox_footer_button").height + text: catalog.i18nc("@info:button", "Quit Cura") onClicked: toolbox.restart() - style: ButtonStyle - { - background: Rectangle - { - implicitWidth: UM.Theme.getSize("toolbox_footer_button").width - implicitHeight: Math.floor(UM.Theme.getSize("toolbox_footer_button").height) - color: control.hovered ? UM.Theme.getColor("primary_hover") : UM.Theme.getColor("primary") - } - label: Label - { - color: UM.Theme.getColor("button_text") - font: UM.Theme.getFont("default_bold") - text: control.text - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - } - } } + ToolboxShadow { visible: footer.visible diff --git a/plugins/Toolbox/resources/qml/ToolboxHeader.qml b/plugins/Toolbox/resources/qml/ToolboxHeader.qml index 9c9f967d54..087402d564 100644 --- a/plugins/Toolbox/resources/qml/ToolboxHeader.qml +++ b/plugins/Toolbox/resources/qml/ToolboxHeader.qml @@ -21,11 +21,13 @@ Item left: parent.left leftMargin: UM.Theme.getSize("default_margin").width } + ToolboxTabButton { + id: pluginsTabButton text: catalog.i18nc("@title:tab", "Plugins") active: toolbox.viewCategory == "plugin" && enabled - enabled: toolbox.viewPage != "loading" && toolbox.viewPage != "errored" + enabled: !toolbox.isDownloading && toolbox.viewPage != "loading" && toolbox.viewPage != "errored" onClicked: { toolbox.filterModelByProp("packages", "type", "plugin") @@ -36,9 +38,10 @@ Item ToolboxTabButton { + id: materialsTabButton text: catalog.i18nc("@title:tab", "Materials") active: toolbox.viewCategory == "material" && enabled - enabled: toolbox.viewPage != "loading" && toolbox.viewPage != "errored" + enabled: !toolbox.isDownloading && toolbox.viewPage != "loading" && toolbox.viewPage != "errored" onClicked: { toolbox.filterModelByProp("authors", "package_types", "material") @@ -49,8 +52,10 @@ Item } ToolboxTabButton { + id: installedTabButton text: catalog.i18nc("@title:tab", "Installed") active: toolbox.viewCategory == "installed" + enabled: !toolbox.isDownloading anchors { right: parent.right diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml b/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml index 939cf0b505..a85a69cbac 100644 --- a/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml @@ -1,11 +1,12 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Dialogs 1.1 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 + import UM 1.1 as UM ScrollView @@ -16,47 +17,44 @@ ScrollView height: parent.height style: UM.Theme.styles.scrollview flickableItem.flickableDirection: Flickable.VerticalFlick + Column { spacing: UM.Theme.getSize("default_margin").height + visible: toolbox.pluginsInstalledModel.items.length > 0 + height: childrenRect.height + 4 * UM.Theme.getSize("default_margin").height + anchors { right: parent.right left: parent.left - leftMargin: UM.Theme.getSize("wide_margin").width - topMargin: UM.Theme.getSize("wide_margin").height - bottomMargin: UM.Theme.getSize("wide_margin").height + margins: UM.Theme.getSize("default_margin").width top: parent.top } - height: childrenRect.height + 4 * UM.Theme.getSize("default_margin").height + Label { - visible: toolbox.pluginsInstalledModel.items.length > 0 - width: parent.width + width: page.width text: catalog.i18nc("@title:tab", "Plugins") color: UM.Theme.getColor("text_medium") - font: UM.Theme.getFont("medium") + font: UM.Theme.getFont("large") + renderType: Text.NativeRendering } Rectangle { - visible: toolbox.pluginsInstalledModel.items.length > 0 color: "transparent" width: parent.width - height: childrenRect.height + 1 * UM.Theme.getSize("default_lining").width + height: childrenRect.height + UM.Theme.getSize("default_margin").width border.color: UM.Theme.getColor("lining") border.width: UM.Theme.getSize("default_lining").width Column { - height: childrenRect.height anchors { top: parent.top right: parent.right left: parent.left - leftMargin: UM.Theme.getSize("default_margin").width - rightMargin: UM.Theme.getSize("default_margin").width - topMargin: UM.Theme.getSize("default_lining").width - bottomMargin: UM.Theme.getSize("default_lining").width + margins: UM.Theme.getSize("default_margin").width } Repeater { @@ -68,32 +66,27 @@ ScrollView } Label { - visible: toolbox.materialsInstalledModel.items.length > 0 - width: page.width text: catalog.i18nc("@title:tab", "Materials") color: UM.Theme.getColor("text_medium") font: UM.Theme.getFont("medium") + renderType: Text.NativeRendering } + Rectangle { - visible: toolbox.materialsInstalledModel.items.length > 0 color: "transparent" width: parent.width - height: childrenRect.height + 1 * UM.Theme.getSize("default_lining").width + height: childrenRect.height + UM.Theme.getSize("default_margin").width border.color: UM.Theme.getColor("lining") border.width: UM.Theme.getSize("default_lining").width Column { - height: Math.max( UM.Theme.getSize("wide_margin").height, childrenRect.height) anchors { top: parent.top right: parent.right left: parent.left - leftMargin: UM.Theme.getSize("default_margin").width - rightMargin: UM.Theme.getSize("default_margin").width - topMargin: UM.Theme.getSize("default_lining").width - bottomMargin: UM.Theme.getSize("default_lining").width + margins: UM.Theme.getSize("default_margin").width } Repeater { diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml b/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml index b16564fdd2..f50c3f3ac6 100644 --- a/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM @@ -30,6 +30,7 @@ Item CheckBox { id: disableButton + anchors.verticalCenter: pluginInfo.verticalCenter checked: isEnabled visible: model.type == "plugin" width: visible ? UM.Theme.getSize("checkbox").width : 0 @@ -49,17 +50,20 @@ Item width: parent.width height: Math.floor(UM.Theme.getSize("toolbox_property_label").height) wrapMode: Text.WordWrap - font: UM.Theme.getFont("default_bold") + font: UM.Theme.getFont("large_bold") color: pluginInfo.color + renderType: Text.NativeRendering } Label { text: model.description + font: UM.Theme.getFont("default") maximumLineCount: 3 elide: Text.ElideRight width: parent.width wrapMode: Text.WordWrap color: pluginInfo.color + renderType: Text.NativeRendering } } Column @@ -80,6 +84,7 @@ Item return model.author_name } } + font: UM.Theme.getFont("medium") width: parent.width height: Math.floor(UM.Theme.getSize("toolbox_property_label").height) wrapMode: Text.WordWrap @@ -88,16 +93,19 @@ Item onLinkActivated: Qt.openUrlExternally("mailto:" + model.author_email + "?Subject=Cura: " + model.name + " Plugin") color: model.enabled ? UM.Theme.getColor("text") : UM.Theme.getColor("lining") linkColor: UM.Theme.getColor("text_link") + renderType: Text.NativeRendering } Label { text: model.version + font: UM.Theme.getFont("default") width: parent.width height: UM.Theme.getSize("toolbox_property_label").height color: UM.Theme.getColor("text") verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignLeft + renderType: Text.NativeRendering } } ToolboxInstalledTileActions diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml b/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml index 8fd88b1cfd..61af84fbe5 100644 --- a/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml +++ b/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml @@ -1,15 +1,18 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM +import Cura 1.1 as Cura + Column { property bool canUpdate: false property bool canDowngrade: false + property bool loginRequired: model.login_required && !Cura.API.account.isLoggedIn width: UM.Theme.getSize("toolbox_action_button").width spacing: UM.Theme.getSize("narrow_margin").height @@ -21,6 +24,7 @@ Column font: UM.Theme.getFont("default") wrapMode: Text.WordWrap width: parent.width + renderType: Text.NativeRendering } ToolboxProgressButton @@ -30,59 +34,49 @@ Column readyLabel: catalog.i18nc("@action:button", "Update") activeLabel: catalog.i18nc("@action:button", "Updating") completeLabel: catalog.i18nc("@action:button", "Updated") - readyAction: function() + onReadyAction: { toolbox.activePackage = model toolbox.update(model.id) } - activeAction: function() - { - toolbox.cancelDownload() - } + onActiveAction: toolbox.cancelDownload() + // Don't allow installing while another download is running - enabled: !(toolbox.isDownloading && toolbox.activePackage != model) + enabled: !(toolbox.isDownloading && toolbox.activePackage != model) && !loginRequired opacity: enabled ? 1.0 : 0.5 visible: canUpdate } - Button + Label + { + wrapMode: Text.WordWrap + text: catalog.i18nc("@label:The string between and is the highlighted link", "Log in is required to update") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + linkColor: UM.Theme.getColor("text_link") + visible: loginRequired + width: updateButton.width + renderType: Text.NativeRendering + + MouseArea + { + anchors.fill: parent + onClicked: Cura.API.account.login() + } + } + + Cura.SecondaryButton { id: removeButton text: canDowngrade ? catalog.i18nc("@action:button", "Downgrade") : catalog.i18nc("@action:button", "Uninstall") visible: !model.is_bundled && model.is_installed enabled: !toolbox.isDownloading - style: ButtonStyle - { - background: Rectangle - { - implicitWidth: UM.Theme.getSize("toolbox_action_button").width - implicitHeight: UM.Theme.getSize("toolbox_action_button").height - color: "transparent" - border - { - width: UM.Theme.getSize("default_lining").width - color: - { - if (control.hovered) - { - return UM.Theme.getColor("primary_hover") - } - else - { - return UM.Theme.getColor("lining") - } - } - } - } - label: Label - { - text: control.text - color: UM.Theme.getColor("text") - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - font: UM.Theme.getFont("default") - } - } + + width: UM.Theme.getSize("toolbox_action_button").width + height: UM.Theme.getSize("toolbox_action_button").height + + fixedWidthMode: true + onClicked: toolbox.checkPackageUsageAndUninstall(model.id) Connections { diff --git a/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml b/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml index b8baf7bc83..40b22c268d 100644 --- a/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml +++ b/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 +import QtQuick 2.10 import QtQuick.Dialogs 1.1 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 @@ -32,6 +32,7 @@ UM.Dialog anchors.right: parent.right text: licenseDialog.pluginName + catalog.i18nc("@label", "This plugin contains a license.\nYou need to accept this license to install this plugin.\nDo you agree with the terms below?") wrapMode: Text.Wrap + renderType: Text.NativeRendering } TextArea { diff --git a/plugins/Toolbox/resources/qml/ToolboxLoadingPage.qml b/plugins/Toolbox/resources/qml/ToolboxLoadingPage.qml index 1ba271dcab..025239bd43 100644 --- a/plugins/Toolbox/resources/qml/ToolboxLoadingPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxLoadingPage.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 @@ -18,5 +18,6 @@ Rectangle { centerIn: parent } + renderType: Text.NativeRendering } } diff --git a/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml b/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml index 2744e40ec9..4d4ae92e73 100644 --- a/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml +++ b/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml @@ -5,6 +5,7 @@ import QtQuick 2.2 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM +import Cura 1.0 as Cura Item @@ -18,16 +19,19 @@ Item property var activeLabel: catalog.i18nc("@action:button", "Cancel") property var completeLabel: catalog.i18nc("@action:button", "Installed") - property var readyAction: null // Action when button is ready and clicked (likely install) - property var activeAction: null // Action when button is active and clicked (likely cancel) - property var completeAction: null // Action when button is complete and clicked (likely go to installed) + signal readyAction() // Action when button is ready and clicked (likely install) + signal activeAction() // Action when button is active and clicked (likely cancel) + signal completeAction() // Action when button is complete and clicked (likely go to installed) width: UM.Theme.getSize("toolbox_action_button").width height: UM.Theme.getSize("toolbox_action_button").height - Button + Cura.PrimaryButton { id: button + width: UM.Theme.getSize("toolbox_action_button").width + height: UM.Theme.getSize("toolbox_action_button").height + fixedWidthMode: true text: { if (complete) @@ -47,114 +51,17 @@ Item { if (complete) { - return completeAction() + completeAction() } else if (active) { - return activeAction() + activeAction() } else { - return readyAction() + readyAction() } } - style: ButtonStyle - { - background: Rectangle - { - implicitWidth: UM.Theme.getSize("toolbox_action_button").width - implicitHeight: UM.Theme.getSize("toolbox_action_button").height - color: - { - if (base.complete) - { - return "transparent" - } - else - { - if (control.hovered) - { - return UM.Theme.getColor("primary_hover") - } - else - { - return UM.Theme.getColor("primary") - } - } - } - border - { - width: - { - if (base.complete) - { - UM.Theme.getSize("default_lining").width - } - else - { - return 0 - } - } - color: - { - if (control.hovered) - { - return UM.Theme.getColor("primary_hover") - } - else - { - return UM.Theme.getColor("lining") - } - } - } - } - label: Label - { - text: control.text - color: - { - if (base.complete) - { - return UM.Theme.getColor("text") - } - else - { - if (control.hovered) - { - return UM.Theme.getColor("button_text_hover") - } - else - { - return UM.Theme.getColor("button_text") - } - } - } - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - font: - { - if (base.complete) - { - return UM.Theme.getFont("default") - } - else - { - return UM.Theme.getFont("default_bold") - } - } - } - } - } - - AnimatedImage - { - id: loader - visible: active - source: visible ? "../images/loading.gif" : "" - width: UM.Theme.getSize("toolbox_loader").width - height: UM.Theme.getSize("toolbox_loader").height - anchors.right: button.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: button.verticalCenter + busy: active } } diff --git a/plugins/Toolbox/resources/qml/ToolboxTabButton.qml b/plugins/Toolbox/resources/qml/ToolboxTabButton.qml index 22fb6d73ca..5e1aeaa636 100644 --- a/plugins/Toolbox/resources/qml/ToolboxTabButton.qml +++ b/plugins/Toolbox/resources/qml/ToolboxTabButton.qml @@ -1,51 +1,51 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 +import QtQuick 2.10 +import QtQuick.Controls 2.3 import UM 1.1 as UM Button { + id: control property bool active: false - style: ButtonStyle + hoverEnabled: true + + background: Item { - background: Rectangle + implicitWidth: UM.Theme.getSize("toolbox_header_tab").width + implicitHeight: UM.Theme.getSize("toolbox_header_tab").height + Rectangle { - color: "transparent" - implicitWidth: UM.Theme.getSize("toolbox_header_tab").width - implicitHeight: UM.Theme.getSize("toolbox_header_tab").height - Rectangle - { - visible: control.active - color: UM.Theme.getColor("sidebar_header_highlight_hover") - anchors.bottom: parent.bottom - width: parent.width - height: UM.Theme.getSize("sidebar_header_highlight").height - } - } - label: Label - { - text: control.text - color: - { - if(control.hovered) - { - return UM.Theme.getColor("topbar_button_text_hovered"); - } - if(control.active) - { - return UM.Theme.getColor("topbar_button_text_active"); - } - else - { - return UM.Theme.getColor("topbar_button_text_inactive"); - } - } - font: control.enabled ? (control.active ? UM.Theme.getFont("medium_bold") : UM.Theme.getFont("medium")) : UM.Theme.getFont("default_italic") - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter + visible: control.active + color: UM.Theme.getColor("primary") + anchors.bottom: parent.bottom + width: parent.width + height: UM.Theme.getSize("toolbox_header_highlight").height } } -} + contentItem: Label + { + id: label + text: control.text + color: + { + if(control.hovered) + { + return UM.Theme.getColor("toolbox_header_button_text_hovered"); + } + if(control.active) + { + return UM.Theme.getColor("toolbox_header_button_text_active"); + } + else + { + return UM.Theme.getColor("toolbox_header_button_text_inactive"); + } + } + font: control.enabled ? (control.active ? UM.Theme.getFont("medium_bold") : UM.Theme.getFont("medium")) : UM.Theme.getFont("default_italic") + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + renderType: Text.NativeRendering + } +} \ No newline at end of file diff --git a/plugins/Toolbox/src/AuthorsModel.py b/plugins/Toolbox/src/AuthorsModel.py index 45424d7e42..877f8256ee 100644 --- a/plugins/Toolbox/src/AuthorsModel.py +++ b/plugins/Toolbox/src/AuthorsModel.py @@ -2,18 +2,19 @@ # Cura is released under the terms of the LGPLv3 or higher. import re -from typing import Dict +from typing import Dict, List, Optional, Union from PyQt5.QtCore import Qt, pyqtProperty, pyqtSignal from UM.Qt.ListModel import ListModel + ## Model that holds cura packages. By setting the filter property the instances held by this model can be changed. class AuthorsModel(ListModel): - def __init__(self, parent = None): + def __init__(self, parent = None) -> None: super().__init__(parent) - self._metadata = None + self._metadata = None # type: Optional[List[Dict[str, Union[str, List[str], int]]]] self.addRoleName(Qt.UserRole + 1, "id") self.addRoleName(Qt.UserRole + 2, "name") @@ -25,36 +26,40 @@ class AuthorsModel(ListModel): self.addRoleName(Qt.UserRole + 8, "description") # List of filters for queries. The result is the union of the each list of results. - self._filter = {} # type: Dict[str,str] + self._filter = {} # type: Dict[str, str] - def setMetadata(self, data): - self._metadata = data - self._update() + def setMetadata(self, data: List[Dict[str, Union[str, List[str], int]]]): + if self._metadata != data: + self._metadata = data + self._update() - def _update(self): - items = [] + def _update(self) -> None: + items = [] # type: List[Dict[str, Union[str, List[str], int, None]]] + if not self._metadata: + self.setItems(items) + return for author in self._metadata: items.append({ - "id": author["author_id"], - "name": author["display_name"], - "email": author["email"] if "email" in author else None, - "website": author["website"], - "package_count": author["package_count"] if "package_count" in author else 0, - "package_types": author["package_types"] if "package_types" in author else [], - "icon_url": author["icon_url"] if "icon_url" in author else None, - "description": "Material and quality profiles from {author_name}".format(author_name = author["display_name"]) + "id": author.get("author_id"), + "name": author.get("display_name"), + "email": author.get("email"), + "website": author.get("website"), + "package_count": author.get("package_count", 0), + "package_types": author.get("package_types", []), + "icon_url": author.get("icon_url"), + "description": "Material and quality profiles from {author_name}".format(author_name = author.get("display_name", "")) }) # Filter on all the key-word arguments. for key, value in self._filter.items(): if key is "package_types": - key_filter = lambda item, value = value: value in item["package_types"] + key_filter = lambda item, value = value: value in item["package_types"] # type: ignore elif "*" in value: - key_filter = lambda item, key = key, value = value: self._matchRegExp(item, key, value) + key_filter = lambda item, key = key, value = value: self._matchRegExp(item, key, value) # type: ignore else: - key_filter = lambda item, key = key, value = value: self._matchString(item, key, value) - items = filter(key_filter, items) + key_filter = lambda item, key = key, value = value: self._matchString(item, key, value) # type: ignore + items = filter(key_filter, items) # type: ignore # Execute all filters. filtered_items = list(items) diff --git a/plugins/Toolbox/src/PackagesModel.py b/plugins/Toolbox/src/PackagesModel.py index 8b9199b127..d94fdf6bb7 100644 --- a/plugins/Toolbox/src/PackagesModel.py +++ b/plugins/Toolbox/src/PackagesModel.py @@ -5,10 +5,14 @@ import re from typing import Dict from PyQt5.QtCore import Qt, pyqtProperty + +from UM.Logger import Logger from UM.Qt.ListModel import ListModel + from .ConfigsModel import ConfigsModel -## Model that holds cura packages. By setting the filter property the instances held by this model can be changed. + +## Model that holds Cura packages. By setting the filter property the instances held by this model can be changed. class PackagesModel(ListModel): def __init__(self, parent = None): super().__init__(parent) @@ -29,26 +33,39 @@ class PackagesModel(ListModel): self.addRoleName(Qt.UserRole + 12, "last_updated") self.addRoleName(Qt.UserRole + 13, "is_bundled") self.addRoleName(Qt.UserRole + 14, "is_active") - self.addRoleName(Qt.UserRole + 15, "is_installed") # Scheduled pkgs are included in the model but should not be marked as actually installed + self.addRoleName(Qt.UserRole + 15, "is_installed") # Scheduled pkgs are included in the model but should not be marked as actually installed self.addRoleName(Qt.UserRole + 16, "has_configs") self.addRoleName(Qt.UserRole + 17, "supported_configs") self.addRoleName(Qt.UserRole + 18, "download_count") self.addRoleName(Qt.UserRole + 19, "tags") + self.addRoleName(Qt.UserRole + 20, "links") + self.addRoleName(Qt.UserRole + 21, "website") + self.addRoleName(Qt.UserRole + 22, "login_required") + self.addRoleName(Qt.UserRole + 23, "average_rating") + self.addRoleName(Qt.UserRole + 24, "num_ratings") + self.addRoleName(Qt.UserRole + 25, "user_rating") # List of filters for queries. The result is the union of the each list of results. self._filter = {} # type: Dict[str, str] def setMetadata(self, data): - self._metadata = data - self._update() + if self._metadata != data: + self._metadata = data + self._update() def _update(self): items = [] - for package in self._metadata: + if self._metadata is None: + Logger.logException("w", "Failed to load packages for Marketplace") + self.setItems(items) + return + for package in self._metadata: has_configs = False configs_model = None + + links_dict = {} if "data" in package: if "supported_configs" in package["data"]: if len(package["data"]["supported_configs"]) > 0: @@ -56,41 +73,51 @@ class PackagesModel(ListModel): configs_model = ConfigsModel() configs_model.setConfigs(package["data"]["supported_configs"]) + # Links is a list of dictionaries with "title" and "url". Convert this list into a dict so it's easier + # to process. + link_list = package["data"]["links"] if "links" in package["data"] else [] + links_dict = {d["title"]: d["url"] for d in link_list} + if "author_id" not in package["author"] or "display_name" not in package["author"]: package["author"]["author_id"] = "" package["author"]["display_name"] = "" - # raise Exception("Detected a package with malformed author data.") items.append({ - "id": package["package_id"], - "type": package["package_type"], - "name": package["display_name"], - "version": package["package_version"], - "author_id": package["author"]["author_id"], - "author_name": package["author"]["display_name"], - "author_email": package["author"]["email"] if "email" in package["author"] else None, - "description": package["description"] if "description" in package else None, - "icon_url": package["icon_url"] if "icon_url" in package else None, - "image_urls": package["image_urls"] if "image_urls" in package else None, - "download_url": package["download_url"] if "download_url" in package else None, - "last_updated": package["last_updated"] if "last_updated" in package else None, - "is_bundled": package["is_bundled"] if "is_bundled" in package else False, - "is_active": package["is_active"] if "is_active" in package else False, - "is_installed": package["is_installed"] if "is_installed" in package else False, - "has_configs": has_configs, - "supported_configs": configs_model, - "download_count": package["download_count"] if "download_count" in package else 0, - "tags": package["tags"] if "tags" in package else [] + "id": package["package_id"], + "type": package["package_type"], + "name": package["display_name"], + "version": package["package_version"], + "author_id": package["author"]["author_id"], + "author_name": package["author"]["display_name"], + "author_email": package["author"]["email"] if "email" in package["author"] else None, + "description": package["description"] if "description" in package else None, + "icon_url": package["icon_url"] if "icon_url" in package else None, + "image_urls": package["image_urls"] if "image_urls" in package else None, + "download_url": package["download_url"] if "download_url" in package else None, + "last_updated": package["last_updated"] if "last_updated" in package else None, + "is_bundled": package["is_bundled"] if "is_bundled" in package else False, + "is_active": package["is_active"] if "is_active" in package else False, + "is_installed": package["is_installed"] if "is_installed" in package else False, + "has_configs": has_configs, + "supported_configs": configs_model, + "download_count": package["download_count"] if "download_count" in package else 0, + "tags": package["tags"] if "tags" in package else [], + "links": links_dict, + "website": package["website"] if "website" in package else None, + "login_required": "login-required" in package.get("tags", []), + "average_rating": float(package.get("rating", {}).get("average", 0)), + "num_ratings": package.get("rating", {}).get("count", 0), + "user_rating": package.get("rating", {}).get("user_rating", 0) }) # Filter on all the key-word arguments. for key, value in self._filter.items(): if key is "tags": - key_filter = lambda item, value = value: value in item["tags"] + key_filter = lambda item, v = value: v in item["tags"] elif "*" in value: - key_filter = lambda candidate, key = key, value = value: self._matchRegExp(candidate, key, value) + key_filter = lambda candidate, k = key, v = value: self._matchRegExp(candidate, k, v) else: - key_filter = lambda candidate, key = key, value = value: self._matchString(candidate, key, value) + key_filter = lambda candidate, k = key, v = value: self._matchString(candidate, k, v) items = filter(key_filter, items) # Execute all filters. diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index c4205b8ed5..7d8d359831 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -1,12 +1,11 @@ # Copyright (c) 2018 Ultimaker B.V. # Toolbox is released under the terms of the LGPLv3 or higher. -from typing import Dict, Optional, Union, Any, cast import json import os import tempfile import platform -from typing import cast, List +from typing import cast, Any, Dict, List, Set, TYPE_CHECKING, Tuple, Optional, Union from PyQt5.QtCore import QUrl, QObject, pyqtProperty, pyqtSignal, pyqtSlot from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply @@ -14,110 +13,99 @@ from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkRepl from UM.Logger import Logger from UM.PluginRegistry import PluginRegistry from UM.Extension import Extension -from UM.Qt.ListModel import ListModel from UM.i18n import i18nCatalog from UM.Version import Version -import cura +from cura import ApplicationMetadata +from cura import UltimakerCloudAuthentication from cura.CuraApplication import CuraApplication + from .AuthorsModel import AuthorsModel from .PackagesModel import PackagesModel +if TYPE_CHECKING: + from cura.Settings.GlobalStack import GlobalStack + i18n_catalog = i18nCatalog("cura") ## The Toolbox class is responsible of communicating with the server through the API class Toolbox(QObject, Extension): - DEFAULT_CLOUD_API_ROOT = "https://api.ultimaker.com" #type: str - DEFAULT_CLOUD_API_VERSION = 1 #type: int - def __init__(self, application: CuraApplication) -> None: super().__init__() - self._application = application #type: CuraApplication + self._application = application # type: CuraApplication - self._sdk_version = None # type: Optional[int] - self._cloud_api_version = None # type: Optional[int] - self._cloud_api_root = None # type: Optional[str] - self._api_url = None # type: Optional[str] + self._sdk_version = ApplicationMetadata.CuraSDKVersion # type: Union[str, int] + self._cloud_api_version = UltimakerCloudAuthentication.CuraCloudAPIVersion # type: str + self._cloud_api_root = UltimakerCloudAuthentication.CuraCloudAPIRoot # type: str + self._api_url = None # type: Optional[str] # Network: - self._download_request = None #type: Optional[QNetworkRequest] - self._download_reply = None #type: Optional[QNetworkReply] - self._download_progress = 0 #type: float - self._is_downloading = False #type: bool - self._network_manager = None #type: Optional[QNetworkAccessManager] - self._request_header = [ - b"User-Agent", - str.encode( - "%s/%s (%s %s)" % ( - self._application.getApplicationName(), - self._application.getVersion(), - platform.system(), - platform.machine(), - ) - ) - ] - self._request_urls = {} # type: Dict[str, QUrl] - self._to_update = [] # type: List[str] # Package_ids that are waiting to be updated - self._old_plugin_ids = [] # type: List[str] + self._download_request = None # type: Optional[QNetworkRequest] + self._download_reply = None # type: Optional[QNetworkReply] + self._download_progress = 0 # type: float + self._is_downloading = False # type: bool + self._network_manager = None # type: Optional[QNetworkAccessManager] + self._request_headers = [] # type: List[Tuple[bytes, bytes]] + self._updateRequestHeader() - # Data: - self._metadata = { + + self._request_urls = {} # type: Dict[str, QUrl] + self._to_update = [] # type: List[str] # Package_ids that are waiting to be updated + self._old_plugin_ids = set() # type: Set[str] + self._old_plugin_metadata = dict() # type: Dict[str, Dict[str, Any]] + + # The responses as given by the server parsed to a list. + self._server_response_data = { "authors": [], - "packages": [], - "plugins_showcase": [], - "plugins_available": [], - "plugins_installed": [], - "materials_showcase": [], - "materials_available": [], - "materials_installed": [], - "materials_generic": [] - } # type: Dict[str, List[Any]] + "packages": [] + } # type: Dict[str, List[Any]] # Models: self._models = { "authors": AuthorsModel(self), "packages": PackagesModel(self), - "plugins_showcase": PackagesModel(self), - "plugins_available": PackagesModel(self), - "plugins_installed": PackagesModel(self), - "materials_showcase": AuthorsModel(self), - "materials_available": PackagesModel(self), - "materials_installed": PackagesModel(self), - "materials_generic": PackagesModel(self) - } # type: Dict[str, ListModel] + } # type: Dict[str, Union[AuthorsModel, PackagesModel]] + + self._plugins_showcase_model = PackagesModel(self) + self._plugins_available_model = PackagesModel(self) + self._plugins_installed_model = PackagesModel(self) + + self._materials_showcase_model = AuthorsModel(self) + self._materials_available_model = AuthorsModel(self) + self._materials_installed_model = PackagesModel(self) + self._materials_generic_model = PackagesModel(self) # These properties are for keeping track of the UI state: # ---------------------------------------------------------------------- # View category defines which filter to use, and therefore effectively # which category is currently being displayed. For example, possible # values include "plugin" or "material", but also "installed". - self._view_category = "plugin" #type: str + self._view_category = "plugin" # type: str # View page defines which type of page layout to use. For example, # possible values include "overview", "detail" or "author". - self._view_page = "loading" #type: str + self._view_page = "loading" # type: str # Active package refers to which package is currently being downloaded, # installed, or otherwise modified. - self._active_package = None # type: Optional[Dict[str, Any]] + self._active_package = None # type: Optional[Dict[str, Any]] - self._dialog = None #type: Optional[QObject] - self._confirm_reset_dialog = None #type: Optional[QObject] + self._dialog = None # type: Optional[QObject] + self._confirm_reset_dialog = None # type: Optional[QObject] self._resetUninstallVariables() - self._restart_required = False #type: bool + self._restart_required = False # type: bool # variables for the license agreement dialog - self._license_dialog_plugin_name = "" #type: str - self._license_dialog_license_content = "" #type: str - self._license_dialog_plugin_file_location = "" #type: str - self._restart_dialog_message = "" #type: str + self._license_dialog_plugin_name = "" # type: str + self._license_dialog_license_content = "" # type: str + self._license_dialog_plugin_file_location = "" # type: str + self._restart_dialog_message = "" # type: str self._application.initializationFinished.connect(self._onAppInitialized) - - + self._application.getCuraAPI().account.loginStateChanged.connect(self._updateRequestHeader) # Signals: # -------------------------------------------------------------------------- @@ -137,11 +125,37 @@ class Toolbox(QObject, Extension): showLicenseDialog = pyqtSignal() uninstallVariablesChanged = pyqtSignal() - def _resetUninstallVariables(self): - self._package_id_to_uninstall = None + def _updateRequestHeader(self): + self._request_headers = [ + (b"User-Agent", + str.encode( + "%s/%s (%s %s)" % ( + self._application.getApplicationName(), + self._application.getVersion(), + platform.system(), + platform.machine(), + ) + )) + ] + access_token = self._application.getCuraAPI().account.accessToken + if access_token: + self._request_headers.append((b"Authorization", "Bearer {}".format(access_token).encode())) + + def _resetUninstallVariables(self) -> None: + self._package_id_to_uninstall = None # type: Optional[str] self._package_name_to_uninstall = "" - self._package_used_materials = [] - self._package_used_qualities = [] + self._package_used_materials = [] # type: List[Tuple[GlobalStack, str, str]] + self._package_used_qualities = [] # type: List[Tuple[GlobalStack, str, str]] + + @pyqtSlot(str, int) + def ratePackage(self, package_id: str, rating: int) -> None: + url = QUrl("{base_url}/packages/{package_id}/ratings".format(base_url=self._api_url, package_id = package_id)) + + self._rate_request = QNetworkRequest(url) + for header_name, header_value in self._request_headers: + cast(QNetworkRequest, self._rate_request).setRawHeader(header_name, header_value) + data = "{\"data\": {\"cura_version\": \"%s\", \"rating\": %i}}" % (Version(self._application.getVersion()), rating) + self._rate_reply = cast(QNetworkAccessManager, self._network_manager).put(self._rate_request, data.encode()) @pyqtSlot(result = str) def getLicenseDialogPluginName(self) -> str: @@ -166,54 +180,16 @@ class Toolbox(QObject, Extension): def _onAppInitialized(self) -> None: self._plugin_registry = self._application.getPluginRegistry() self._package_manager = self._application.getPackageManager() - self._sdk_version = self._getSDKVersion() - self._cloud_api_version = self._getCloudAPIVersion() - self._cloud_api_root = self._getCloudAPIRoot() self._api_url = "{cloud_api_root}/cura-packages/v{cloud_api_version}/cura/v{sdk_version}".format( - cloud_api_root=self._cloud_api_root, - cloud_api_version=self._cloud_api_version, - sdk_version=self._sdk_version + cloud_api_root = self._cloud_api_root, + cloud_api_version = self._cloud_api_version, + sdk_version = self._sdk_version ) self._request_urls = { - "authors": QUrl("{base_url}/authors".format(base_url=self._api_url)), - "packages": QUrl("{base_url}/packages".format(base_url=self._api_url)), - "plugins_showcase": QUrl("{base_url}/showcase".format(base_url=self._api_url)), - "plugins_available": QUrl("{base_url}/packages?package_type=plugin".format(base_url=self._api_url)), - "materials_showcase": QUrl("{base_url}/showcase".format(base_url=self._api_url)), - "materials_available": QUrl("{base_url}/packages?package_type=material".format(base_url=self._api_url)), - "materials_generic": QUrl("{base_url}/packages?package_type=material&tags=generic".format(base_url=self._api_url)) + "authors": QUrl("{base_url}/authors".format(base_url = self._api_url)), + "packages": QUrl("{base_url}/packages".format(base_url = self._api_url)) } - # Get the API root for the packages API depending on Cura version settings. - def _getCloudAPIRoot(self) -> str: - if not hasattr(cura, "CuraVersion"): - return self.DEFAULT_CLOUD_API_ROOT - if not hasattr(cura.CuraVersion, "CuraCloudAPIRoot"): # type: ignore - return self.DEFAULT_CLOUD_API_ROOT - if not cura.CuraVersion.CuraCloudAPIRoot: # type: ignore - return self.DEFAULT_CLOUD_API_ROOT - return cura.CuraVersion.CuraCloudAPIRoot # type: ignore - - # Get the cloud API version from CuraVersion - def _getCloudAPIVersion(self) -> int: - if not hasattr(cura, "CuraVersion"): - return self.DEFAULT_CLOUD_API_VERSION - if not hasattr(cura.CuraVersion, "CuraCloudAPIVersion"): # type: ignore - return self.DEFAULT_CLOUD_API_VERSION - if not cura.CuraVersion.CuraCloudAPIVersion: # type: ignore - return self.DEFAULT_CLOUD_API_VERSION - return cura.CuraVersion.CuraCloudAPIVersion # type: ignore - - # Get the packages version depending on Cura version settings. - def _getSDKVersion(self) -> int: - if not hasattr(cura, "CuraVersion"): - return self._plugin_registry.APIVersion - if not hasattr(cura.CuraVersion, "CuraSDKVersion"): # type: ignore - return self._plugin_registry.APIVersion - if not cura.CuraVersion.CuraSDKVersion: # type: ignore - return self._plugin_registry.APIVersion - return cura.CuraVersion.CuraSDKVersion # type: ignore - @pyqtSlot() def browsePackages(self) -> None: # Create the network manager: @@ -229,10 +205,6 @@ class Toolbox(QObject, Extension): # Make remote requests: self._makeRequestByType("packages") self._makeRequestByType("authors") - self._makeRequestByType("plugins_showcase") - self._makeRequestByType("materials_showcase") - self._makeRequestByType("materials_available") - self._makeRequestByType("materials_generic") # Gather installed packages: self._updateInstalledModels() @@ -241,7 +213,7 @@ class Toolbox(QObject, Extension): self._dialog = self._createDialog("Toolbox.qml") if not self._dialog: - Logger.log("e", "Unexpected error trying to create the 'Toolbox' dialog.") + Logger.log("e", "Unexpected error trying to create the 'Marketplace' dialog.") return self._dialog.show() @@ -250,7 +222,7 @@ class Toolbox(QObject, Extension): self.enabledChanged.emit() def _createDialog(self, qml_name: str) -> Optional[QObject]: - Logger.log("d", "Toolbox: Creating dialog [%s].", qml_name) + Logger.log("d", "Marketplace: Creating dialog [%s].", qml_name) plugin_path = PluginRegistry.getInstance().getPluginPath(self.getPluginId()) if not plugin_path: return None @@ -258,24 +230,33 @@ class Toolbox(QObject, Extension): dialog = self._application.createQmlComponent(path, {"toolbox": self}) if not dialog: - raise Exception("Failed to create toolbox dialog") + raise Exception("Failed to create Marketplace dialog") return dialog - def _convertPluginMetadata(self, plugin: Dict[str, Any]) -> Dict[str, Any]: - formatted = { - "package_id": plugin["id"], - "package_type": "plugin", - "display_name": plugin["plugin"]["name"], - "package_version": plugin["plugin"]["version"], - "sdk_version": plugin["plugin"]["api"], - "author": { - "author_id": plugin["plugin"]["author"], - "display_name": plugin["plugin"]["author"] - }, - "is_installed": True, - "description": plugin["plugin"]["description"] - } - return formatted + def _convertPluginMetadata(self, plugin_data: Dict[str, Any]) -> Optional[Dict[str, Any]]: + try: + highest_sdk_version_supported = Version(0) + for supported_version in plugin_data["plugin"]["supported_sdk_versions"]: + if supported_version > highest_sdk_version_supported: + highest_sdk_version_supported = supported_version + + formatted = { + "package_id": plugin_data["id"], + "package_type": "plugin", + "display_name": plugin_data["plugin"]["name"], + "package_version": plugin_data["plugin"]["version"], + "sdk_version": highest_sdk_version_supported, + "author": { + "author_id": plugin_data["plugin"]["author"], + "display_name": plugin_data["plugin"]["author"] + }, + "is_installed": True, + "description": plugin_data["plugin"]["description"] + } + return formatted + except KeyError: + Logger.log("w", "Unable to convert plugin meta data %s", str(plugin_data)) + return None @pyqtSlot() def _updateInstalledModels(self) -> None: @@ -285,29 +266,36 @@ class Toolbox(QObject, Extension): installed_package_ids = self._package_manager.getAllInstalledPackageIDs() scheduled_to_remove_package_ids = self._package_manager.getToRemovePackageIDs() - self._old_plugin_ids = [] - self._old_plugin_metadata = [] # type: List[Dict[str, Any]] + self._old_plugin_ids = set() + self._old_plugin_metadata = dict() for plugin_id in old_plugin_ids: # Neither the installed packages nor the packages that are scheduled to remove are old plugins if plugin_id not in installed_package_ids and plugin_id not in scheduled_to_remove_package_ids: - Logger.log('i', 'Found a plugin that was installed with the old plugin browser: %s', plugin_id) + Logger.log("i", "Found a plugin that was installed with the old plugin browser: %s", plugin_id) old_metadata = self._plugin_registry.getMetaData(plugin_id) new_metadata = self._convertPluginMetadata(old_metadata) - - self._old_plugin_ids.append(plugin_id) - self._old_plugin_metadata.append(new_metadata) + if new_metadata is None: + # Something went wrong converting it. + continue + self._old_plugin_ids.add(plugin_id) + self._old_plugin_metadata[new_metadata["package_id"]] = new_metadata all_packages = self._package_manager.getAllInstalledPackagesInfo() if "plugin" in all_packages: - self._metadata["plugins_installed"] = all_packages["plugin"] + self._old_plugin_metadata - self._models["plugins_installed"].setMetadata(self._metadata["plugins_installed"]) + # For old plugins, we only want to include the old custom plugin that were installed via the old toolbox. + # The bundled plugins will be included in JSON files in the "bundled_packages" folder, so the bundled + # plugins should be excluded from the old plugins list/dict. + all_plugin_package_ids = set(package["package_id"] for package in all_packages["plugin"]) + self._old_plugin_ids = set(plugin_id for plugin_id in self._old_plugin_ids + if plugin_id not in all_plugin_package_ids) + self._old_plugin_metadata = {k: v for k, v in self._old_plugin_metadata.items() if k in self._old_plugin_ids} + + self._plugins_installed_model.setMetadata(all_packages["plugin"] + list(self._old_plugin_metadata.values())) self.metadataChanged.emit() if "material" in all_packages: - self._metadata["materials_installed"] = all_packages["material"] - # TODO: ADD MATERIALS HERE ONCE MATERIALS PORTION OF TOOLBOX IS LIVE - self._models["materials_installed"].setMetadata(self._metadata["materials_installed"]) + self._materials_installed_model.setMetadata(all_packages["material"]) self.metadataChanged.emit() @pyqtSlot(str) @@ -344,26 +332,26 @@ class Toolbox(QObject, Extension): self.uninstall(package_id) @pyqtProperty(str, notify = uninstallVariablesChanged) - def pluginToUninstall(self): + def pluginToUninstall(self) -> str: return self._package_name_to_uninstall @pyqtProperty(str, notify = uninstallVariablesChanged) - def uninstallUsedMaterials(self): + def uninstallUsedMaterials(self) -> str: return "\n".join(["%s (%s)" % (str(global_stack.getName()), material) for global_stack, extruder_nr, material in self._package_used_materials]) @pyqtProperty(str, notify = uninstallVariablesChanged) - def uninstallUsedQualities(self): + def uninstallUsedQualities(self) -> str: return "\n".join(["%s (%s)" % (str(global_stack.getName()), quality) for global_stack, extruder_nr, quality in self._package_used_qualities]) @pyqtSlot() - def closeConfirmResetDialog(self): + def closeConfirmResetDialog(self) -> None: if self._confirm_reset_dialog is not None: self._confirm_reset_dialog.close() ## Uses "uninstall variables" to reset qualities and materials, then uninstall # It's used as an action on Confirm reset on Uninstall @pyqtSlot() - def resetMaterialsQualitiesAndUninstall(self): + def resetMaterialsQualitiesAndUninstall(self) -> None: application = CuraApplication.getInstance() material_manager = application.getMaterialManager() quality_manager = application.getQualityManager() @@ -376,9 +364,9 @@ class Toolbox(QObject, Extension): default_quality_group = quality_manager.getDefaultQualityType(global_stack) machine_manager.setQualityGroup(default_quality_group, global_stack = global_stack) - self._markPackageMaterialsAsToBeUninstalled(self._package_id_to_uninstall) - - self.uninstall(self._package_id_to_uninstall) + if self._package_id_to_uninstall is not None: + self._markPackageMaterialsAsToBeUninstalled(self._package_id_to_uninstall) + self.uninstall(self._package_id_to_uninstall) self._resetUninstallVariables() self.closeConfirmResetDialog() @@ -461,7 +449,7 @@ class Toolbox(QObject, Extension): def getRemotePackage(self, package_id: str) -> Optional[Dict]: # TODO: make the lookup in a dict, not a loop. canUpdate is called for every item. remote_package = None - for package in self._metadata["packages"]: + for package in self._server_response_data["packages"]: if package["package_id"] == package_id: remote_package = package break @@ -471,12 +459,11 @@ class Toolbox(QObject, Extension): # -------------------------------------------------------------------------- @pyqtSlot(str, result = bool) def canUpdate(self, package_id: str) -> bool: - if self.isOldPlugin(package_id): - return True - local_package = self._package_manager.getInstalledPackageInfo(package_id) if local_package is None: - return False + local_package = self.getOldPluginPackageMetadata(package_id) + if local_package is None: + return False remote_package = self.getRemotePackage(package_id) if remote_package is None: @@ -484,7 +471,19 @@ class Toolbox(QObject, Extension): local_version = Version(local_package["package_version"]) remote_version = Version(remote_package["package_version"]) - return remote_version > local_version + can_upgrade = False + if remote_version > local_version: + can_upgrade = True + # A package with the same version can be built to have different SDK versions. So, for a package with the same + # version, we also need to check if the current one has a lower SDK version. If so, this package should also + # be upgradable. + elif remote_version == local_version: + # First read sdk_version_semver. If that doesn't exist, read just sdk_version (old version system). + remote_sdk_version = Version(remote_package.get("sdk_version_semver", remote_package.get("sdk_version", 0))) + local_sdk_version = Version(local_package.get("sdk_version_semver", local_package.get("sdk_version", 0))) + can_upgrade = local_sdk_version < remote_sdk_version + + return can_upgrade @pyqtSlot(str, result = bool) def canDowngrade(self, package_id: str) -> bool: @@ -504,22 +503,28 @@ class Toolbox(QObject, Extension): @pyqtSlot(str, result = bool) def isInstalled(self, package_id: str) -> bool: - return self._package_manager.isPackageInstalled(package_id) + result = self._package_manager.isPackageInstalled(package_id) + # Also check the old plugins list if it's not found in the package manager. + if not result: + result = self.isOldPlugin(package_id) + return result @pyqtSlot(str, result = int) def getNumberOfInstalledPackagesByAuthor(self, author_id: str) -> int: count = 0 - for package in self._metadata["materials_installed"]: - if package["author"]["author_id"] == author_id: + for package in self._materials_installed_model.items: + if package["author_id"] == author_id: count += 1 return count + # This slot is only used to get the number of material packages by author, not any other type of packages. @pyqtSlot(str, result = int) - def getTotalNumberOfPackagesByAuthor(self, author_id: str) -> int: + def getTotalNumberOfMaterialPackagesByAuthor(self, author_id: str) -> int: count = 0 - for package in self._metadata["materials_available"]: - if package["author"]["author_id"] == author_id: - count += 1 + for package in self._server_response_data["packages"]: + if package["package_type"] == "material": + if package["author"]["author_id"] == author_id: + count += 1 return count @pyqtSlot(str, result = bool) @@ -529,33 +534,32 @@ class Toolbox(QObject, Extension): return False # Check for plugins that were installed with the old plugin browser - @pyqtSlot(str, result = bool) def isOldPlugin(self, plugin_id: str) -> bool: - if plugin_id in self._old_plugin_ids: - return True - return False + return plugin_id in self._old_plugin_ids - def loadingComplete(self) -> bool: + def getOldPluginPackageMetadata(self, plugin_id: str) -> Optional[Dict[str, Any]]: + return self._old_plugin_metadata.get(plugin_id) + + def isLoadingComplete(self) -> bool: populated = 0 - for list in self._metadata.items(): - if len(list) > 0: + for metadata_list in self._server_response_data.items(): + if metadata_list: populated += 1 - if populated == len(self._metadata.items()): - return True - return False + return populated == len(self._server_response_data.items()) # Make API Calls # -------------------------------------------------------------------------- - def _makeRequestByType(self, type: str) -> None: - Logger.log("i", "Toolbox: Requesting %s metadata from server.", type) - request = QNetworkRequest(self._request_urls[type]) - request.setRawHeader(*self._request_header) + def _makeRequestByType(self, request_type: str) -> None: + Logger.log("i", "Requesting %s metadata from server.", request_type) + request = QNetworkRequest(self._request_urls[request_type]) + for header_name, header_value in self._request_headers: + request.setRawHeader(header_name, header_value) if self._network_manager: self._network_manager.get(request) @pyqtSlot(str) def startDownload(self, url: str) -> None: - Logger.log("i", "Toolbox: Attempting to download & install package from %s.", url) + Logger.log("i", "Attempting to download & install package from %s.", url) url = QUrl(url) self._download_request = QNetworkRequest(url) if hasattr(QNetworkRequest, "FollowRedirectsAttribute"): @@ -564,7 +568,8 @@ class Toolbox(QObject, Extension): if hasattr(QNetworkRequest, "RedirectPolicyAttribute"): # Patch for Qt 5.9+ cast(QNetworkRequest, self._download_request).setAttribute(QNetworkRequest.RedirectPolicyAttribute, True) - cast(QNetworkRequest, self._download_request).setRawHeader(*self._request_header) + for header_name, header_value in self._request_headers: + cast(QNetworkRequest, self._download_request).setRawHeader(header_name, header_value) self._download_reply = cast(QNetworkAccessManager, self._network_manager).get(self._download_request) self.setDownloadProgress(0) self.setIsDownloading(True) @@ -572,15 +577,15 @@ class Toolbox(QObject, Extension): @pyqtSlot() def cancelDownload(self) -> None: - Logger.log("i", "Toolbox: User cancelled the download of a plugin.") + Logger.log("i", "User cancelled the download of a package.") self.resetDownload() def resetDownload(self) -> None: if self._download_reply: try: self._download_reply.downloadProgress.disconnect(self._onDownloadProgress) - except TypeError: #Raised when the method is not connected to the signal yet. - pass #Don't need to disconnect. + except TypeError: # Raised when the method is not connected to the signal yet. + pass # Don't need to disconnect. self._download_reply.abort() self._download_reply = None self._download_request = None @@ -607,7 +612,7 @@ class Toolbox(QObject, Extension): return if reply.operation() == QNetworkAccessManager.GetOperation: - for type, url in self._request_urls.items(): + for response_type, url in self._request_urls.items(): if reply.url() == url: if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) == 200: try: @@ -620,48 +625,34 @@ class Toolbox(QObject, Extension): return # Create model and apply metadata: - if not self._models[type]: - Logger.log("e", "Could not find the %s model.", type) + if not self._models[response_type]: + Logger.log("e", "Could not find the %s model.", response_type) break + + self._server_response_data[response_type] = json_data["data"] + self._models[response_type].setMetadata(self._server_response_data[response_type]) - # HACK: Eventually get rid of the code from here... - if type is "plugins_showcase" or type is "materials_showcase": - self._metadata["plugins_showcase"] = json_data["data"]["plugin"]["packages"] - self._models["plugins_showcase"].setMetadata(self._metadata["plugins_showcase"]) - self._metadata["materials_showcase"] = json_data["data"]["material"]["authors"] - self._models["materials_showcase"].setMetadata(self._metadata["materials_showcase"]) - else: - # ...until here. - # This hack arises for multiple reasons but the main - # one is because there are not separate API calls - # for different kinds of showcases. - self._metadata[type] = json_data["data"] - self._models[type].setMetadata(self._metadata[type]) - - # Do some auto filtering - # TODO: Make multiple API calls in the future to handle this - if type is "packages": - self._models[type].setFilter({"type": "plugin"}) - if type is "authors": - self._models[type].setFilter({"package_types": "material"}) - if type is "materials_generic": - self._models[type].setFilter({"tags": "generic"}) + if response_type is "packages": + self._models[response_type].setFilter({"type": "plugin"}) + self.reBuildMaterialsModels() + self.reBuildPluginsModels() + elif response_type is "authors": + self._models[response_type].setFilter({"package_types": "material"}) + self._models[response_type].setFilter({"tags": "generic"}) self.metadataChanged.emit() - if self.loadingComplete() is True: + if self.isLoadingComplete(): self.setViewPage("overview") - return except json.decoder.JSONDecodeError: - Logger.log("w", "Toolbox: Received invalid JSON for %s.", type) + Logger.log("w", "Received invalid JSON for %s.", response_type) break else: + Logger.log("w", "Unable to connect with the server, we got a response code %s while trying to connect to %s", reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url()) self.setViewPage("errored") self.resetDownload() - return - - else: + elif reply.operation() == QNetworkAccessManager.PutOperation: # Ignore any operation that is not a get operation pass @@ -671,7 +662,13 @@ class Toolbox(QObject, Extension): self.setDownloadProgress(new_progress) if bytes_sent == bytes_total: self.setIsDownloading(False) - cast(QNetworkReply, self._download_reply).downloadProgress.disconnect(self._onDownloadProgress) + self._download_reply = cast(QNetworkReply, self._download_reply) + self._download_reply.downloadProgress.disconnect(self._onDownloadProgress) + + # Check if the download was sucessfull + if self._download_reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: + Logger.log("w", "Failed to download package. The following error was returned: %s", json.loads(bytes(self._download_reply.readAll()).decode("utf-8"))) + return # Must not delete the temporary file on Windows self._temp_plugin_file = tempfile.NamedTemporaryFile(mode = "w+b", suffix = ".curapackage", delete = False) file_path = self._temp_plugin_file.name @@ -680,11 +677,11 @@ class Toolbox(QObject, Extension): self._temp_plugin_file.close() self._onDownloadComplete(file_path) - def _onDownloadComplete(self, file_path: str): - Logger.log("i", "Toolbox: Download complete.") + def _onDownloadComplete(self, file_path: str) -> None: + Logger.log("i", "Download complete.") package_info = self._package_manager.getPackageInfo(file_path) if not package_info: - Logger.log("w", "Toolbox: Package file [%s] was not a valid CuraPackage.", file_path) + Logger.log("w", "Package file [%s] was not a valid CuraPackage.", file_path) return license_content = self._package_manager.getPackageLicense(file_path) @@ -693,7 +690,6 @@ class Toolbox(QObject, Extension): return self.install(file_path) - return # Getter & Setters for Properties: # -------------------------------------------------------------------------- @@ -716,69 +712,77 @@ class Toolbox(QObject, Extension): return self._is_downloading def setActivePackage(self, package: Dict[str, Any]) -> None: - self._active_package = package - self.activePackageChanged.emit() + if self._active_package != package: + self._active_package = package + self.activePackageChanged.emit() + ## The active package is the package that is currently being downloaded @pyqtProperty(QObject, fset = setActivePackage, notify = activePackageChanged) def activePackage(self) -> Optional[Dict[str, Any]]: return self._active_package def setViewCategory(self, category: str = "plugin") -> None: - self._view_category = category - self.viewChanged.emit() + if self._view_category != category: + self._view_category = category + self.viewChanged.emit() @pyqtProperty(str, fset = setViewCategory, notify = viewChanged) def viewCategory(self) -> str: return self._view_category def setViewPage(self, page: str = "overview") -> None: - self._view_page = page - self.viewChanged.emit() + if self._view_page != page: + self._view_page = page + self.viewChanged.emit() @pyqtProperty(str, fset = setViewPage, notify = viewChanged) def viewPage(self) -> str: return self._view_page - - - # Expose Models: + # Exposed Models: # -------------------------------------------------------------------------- - @pyqtProperty(QObject, notify = metadataChanged) + @pyqtProperty(QObject, constant=True) def authorsModel(self) -> AuthorsModel: return cast(AuthorsModel, self._models["authors"]) - @pyqtProperty(QObject, notify = metadataChanged) + @pyqtProperty(QObject, constant=True) def packagesModel(self) -> PackagesModel: return cast(PackagesModel, self._models["packages"]) - @pyqtProperty(QObject, notify = metadataChanged) + @pyqtProperty(QObject, constant=True) def pluginsShowcaseModel(self) -> PackagesModel: - return cast(PackagesModel, self._models["plugins_showcase"]) + return self._plugins_showcase_model - @pyqtProperty(QObject, notify = metadataChanged) + @pyqtProperty(QObject, constant=True) + def pluginsAvailableModel(self) -> PackagesModel: + return self._plugins_available_model + + @pyqtProperty(QObject, constant=True) def pluginsInstalledModel(self) -> PackagesModel: - return cast(PackagesModel, self._models["plugins_installed"]) + return self._plugins_installed_model - @pyqtProperty(QObject, notify = metadataChanged) + @pyqtProperty(QObject, constant=True) def materialsShowcaseModel(self) -> AuthorsModel: - return cast(AuthorsModel, self._models["materials_showcase"]) + return self._materials_showcase_model - @pyqtProperty(QObject, notify = metadataChanged) + @pyqtProperty(QObject, constant=True) + def materialsAvailableModel(self) -> AuthorsModel: + return self._materials_available_model + + @pyqtProperty(QObject, constant=True) def materialsInstalledModel(self) -> PackagesModel: - return cast(PackagesModel, self._models["materials_installed"]) + return self._materials_installed_model - @pyqtProperty(QObject, notify=metadataChanged) + @pyqtProperty(QObject, constant=True) def materialsGenericModel(self) -> PackagesModel: - return cast(PackagesModel, self._models["materials_generic"]) - - + return self._materials_generic_model # Filter Models: # -------------------------------------------------------------------------- @pyqtSlot(str, str, str) def filterModelByProp(self, model_type: str, filter_type: str, parameter: str) -> None: if not self._models[model_type]: - Logger.log("w", "Toolbox: Couldn't filter %s model because it doesn't exist.", model_type) + Logger.log("w", "Couldn't filter %s model because it doesn't exist.", model_type) return self._models[model_type].setFilter({filter_type: parameter}) self.filterChanged.emit() @@ -786,7 +790,7 @@ class Toolbox(QObject, Extension): @pyqtSlot(str, "QVariantMap") def setFilters(self, model_type: str, filter_dict: dict) -> None: if not self._models[model_type]: - Logger.log("w", "Toolbox: Couldn't filter %s model because it doesn't exist.", model_type) + Logger.log("w", "Couldn't filter %s model because it doesn't exist.", model_type) return self._models[model_type].setFilter(filter_dict) self.filterChanged.emit() @@ -794,7 +798,52 @@ class Toolbox(QObject, Extension): @pyqtSlot(str) def removeFilters(self, model_type: str) -> None: if not self._models[model_type]: - Logger.log("w", "Toolbox: Couldn't remove filters on %s model because it doesn't exist.", model_type) + Logger.log("w", "Couldn't remove filters on %s model because it doesn't exist.", model_type) return self._models[model_type].setFilter({}) self.filterChanged.emit() + + # HACK(S): + # -------------------------------------------------------------------------- + def reBuildMaterialsModels(self) -> None: + materials_showcase_metadata = [] + materials_available_metadata = [] + materials_generic_metadata = [] + + processed_authors = [] # type: List[str] + + for item in self._server_response_data["packages"]: + if item["package_type"] == "material": + + author = item["author"] + if author["author_id"] in processed_authors: + continue + + # Generic materials to be in the same section + if "generic" in item["tags"]: + materials_generic_metadata.append(item) + else: + if "showcase" in item["tags"]: + materials_showcase_metadata.append(author) + else: + materials_available_metadata.append(author) + + processed_authors.append(author["author_id"]) + + self._materials_showcase_model.setMetadata(materials_showcase_metadata) + self._materials_available_model.setMetadata(materials_available_metadata) + self._materials_generic_model.setMetadata(materials_generic_metadata) + + def reBuildPluginsModels(self) -> None: + plugins_showcase_metadata = [] + plugins_available_metadata = [] + + for item in self._server_response_data["packages"]: + if item["package_type"] == "plugin": + if "showcase" in item["tags"]: + plugins_showcase_metadata.append(item) + else: + plugins_available_metadata.append(item) + + self._plugins_showcase_model.setMetadata(plugins_showcase_metadata) + self._plugins_available_model.setMetadata(plugins_available_metadata) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index 9344bf54da..c0db104c82 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -1,5 +1,6 @@ #Copyright (c) 2018 Ultimaker B.V. #Cura is released under the terms of the LGPLv3 or higher. + from typing import cast from Charon.VirtualFile import VirtualFile #To open UFP files. @@ -9,10 +10,12 @@ from io import StringIO #For converting g-code to bytes. from UM.Application import Application from UM.Logger import Logger from UM.Mesh.MeshWriter import MeshWriter #The writer we need to implement. +from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType from UM.PluginRegistry import PluginRegistry #To get the g-code writer. from PyQt5.QtCore import QBuffer from cura.Snapshot import Snapshot +from cura.Utils.Threading import call_on_qt_thread from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") @@ -20,15 +23,28 @@ catalog = i18nCatalog("cura") class UFPWriter(MeshWriter): def __init__(self): - super().__init__() + super().__init__(add_to_recent_files = False) + + MimeTypeDatabase.addMimeType( + MimeType( + name = "application/x-ufp", + comment = "Cura UFP File", + suffixes = ["ufp"] + ) + ) + self._snapshot = None - Application.getInstance().getOutputDeviceManager().writeStarted.connect(self._createSnapshot) def _createSnapshot(self, *args): # must be called from the main thread because of OpenGL Logger.log("d", "Creating thumbnail image...") self._snapshot = Snapshot.snapshot(width = 300, height = 300) + # This needs to be called on the main thread (Qt thread) because the serialization of material containers can + # trigger loading other containers. Because those loaded containers are QtObjects, they must be created on the + # Qt thread. The File read/write operations right now are executed on separated threads because they are scheduled + # by the Job class. + @call_on_qt_thread def write(self, stream, nodes, mode = MeshWriter.OutputMode.BinaryMode): archive = VirtualFile() archive.openStream(stream, "application/x-ufp", OpenMode.WriteOnly) @@ -45,6 +61,8 @@ class UFPWriter(MeshWriter): gcode.write(gcode_textio.getvalue().encode("UTF-8")) archive.addRelation(virtual_path = "/3D/model.gcode", relation_type = "http://schemas.ultimaker.org/package/2018/relationships/gcode") + self._createSnapshot() + #Store the thumbnail. if self._snapshot: archive.addContentType(extension = "png", mime_type = "image/png") @@ -60,5 +78,54 @@ class UFPWriter(MeshWriter): else: Logger.log("d", "Thumbnail not created, cannot save it") + # Store the material. + application = Application.getInstance() + machine_manager = application.getMachineManager() + material_manager = application.getMaterialManager() + global_stack = machine_manager.activeMachine + + material_extension = "xml.fdm_material" + material_mime_type = "application/x-ultimaker-material-profile" + + try: + archive.addContentType(extension = material_extension, mime_type = material_mime_type) + except: + Logger.log("w", "The material extension: %s was already added", material_extension) + + added_materials = [] + for extruder_stack in global_stack.extruders.values(): + material = extruder_stack.material + try: + material_file_name = material.getMetaData()["base_file"] + ".xml.fdm_material" + except KeyError: + Logger.log("w", "Unable to get base_file for the material %s", material.getId()) + continue + material_file_name = "/Materials/" + material_file_name + + # The same material should not be added again. + if material_file_name in added_materials: + continue + + material_root_id = material.getMetaDataEntry("base_file") + material_group = material_manager.getMaterialGroup(material_root_id) + if material_group is None: + Logger.log("e", "Cannot find material container with root id [%s]", material_root_id) + return False + + material_container = material_group.root_material_node.getContainer() + try: + serialized_material = material_container.serialize() + except NotImplementedError: + Logger.log("e", "Unable serialize material container with root id: %s", material_root_id) + return False + + material_file = archive.getStream(material_file_name) + material_file.write(serialized_material.encode("UTF-8")) + archive.addRelation(virtual_path = material_file_name, + relation_type = "http://schemas.ultimaker.org/package/2018/relationships/material", + origin = "/3D/model.gcode") + + added_materials.append(material_file_name) + archive.close() return True diff --git a/plugins/UFPWriter/__init__.py b/plugins/UFPWriter/__init__.py index a2ec99044f..9db6b042f8 100644 --- a/plugins/UFPWriter/__init__.py +++ b/plugins/UFPWriter/__init__.py @@ -11,16 +11,6 @@ except ImportError: from UM.i18n import i18nCatalog #To translate the file format description. from UM.Mesh.MeshWriter import MeshWriter #For the binary mode flag. -from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType - - -MimeTypeDatabase.addMimeType( - MimeType( - name = "application/x-cura-stl-file", - comment = "Cura UFP File", - suffixes = ["ufp"] - ) -) i18n_catalog = i18nCatalog("cura") diff --git a/plugins/UFPWriter/plugin.json b/plugins/UFPWriter/plugin.json index 7d10b89ad4..288d6acf77 100644 --- a/plugins/UFPWriter/plugin.json +++ b/plugins/UFPWriter/plugin.json @@ -1,8 +1,8 @@ { "name": "UFP Writer", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides support for writing Ultimaker Format Packages.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/ClusterControlItem.qml deleted file mode 100644 index 5cf550955c..0000000000 --- a/plugins/UM3NetworkPrinting/ClusterControlItem.qml +++ /dev/null @@ -1,241 +0,0 @@ -import QtQuick 2.2 -import QtQuick.Controls 1.4 - -import UM 1.3 as UM -import Cura 1.0 as Cura - -Component -{ - Rectangle - { - id: base - property var manager: Cura.MachineManager.printerOutputDevices[0] - property var lineColor: "#DCDCDC" // TODO: Should be linked to theme. - property var cornerRadius: 4 * screenScaleFactor // TODO: Should be linked to theme. - - visible: manager != null - anchors.fill: parent - color: UM.Theme.getColor("viewport_background") - - UM.I18nCatalog - { - id: catalog - name: "cura" - } - - Label - { - id: activePrintersLabel - font: UM.Theme.getFont("large") - anchors.horizontalCenter: parent.horizontalCenter - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.top: parent.top - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right:parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - text: Cura.MachineManager.printerOutputDevices[0].name - elide: Text.ElideRight - } - - Rectangle - { - id: printJobArea - border.width: UM.Theme.getSize("default_lining").width - border.color: lineColor - anchors.top: activePrintersLabel.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - anchors.rightMargin:UM.Theme.getSize("default_margin").width - radius: cornerRadius - height: childrenRect.height - - Item - { - id: printJobTitleBar - width: parent.width - height: printJobTitleLabel.height + 2 * UM.Theme.getSize("default_margin").height - - Label - { - id: printJobTitleLabel - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("default_margin").height - text: catalog.i18nc("@title", "Print jobs") - font: UM.Theme.getFont("default") - opacity: 0.75 - } - Rectangle - { - anchors.bottom: parent.bottom - height: UM.Theme.getSize("default_lining").width - color: lineColor - width: parent.width - } - } - - Column - { - id: printJobColumn - anchors.top: printJobTitleBar.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - - Item - { - width: parent.width - height: childrenRect.height - opacity: 0.65 - Label - { - text: catalog.i18nc("@label", "Printing") - font: UM.Theme.getFont("very_small") - - } - Label - { - text: manager.activePrintJobs.length - font: UM.Theme.getFont("small") - anchors.right: parent.right - } - } - Item - { - width: parent.width - height: childrenRect.height - opacity: 0.65 - Label - { - text: catalog.i18nc("@label", "Queued") - font: UM.Theme.getFont("very_small") - } - Label - { - text: manager.queuedPrintJobs.length - font: UM.Theme.getFont("small") - anchors.right: parent.right - } - } - } - OpenPanelButton - { - anchors.top: printJobColumn.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.margins: UM.Theme.getSize("default_margin").height - id: configButton - onClicked: base.manager.openPrintJobControlPanel() - text: catalog.i18nc("@action:button", "View print jobs") - } - - Item - { - // spacer - anchors.top: configButton.bottom - width: UM.Theme.getSize("default_margin").width - height: UM.Theme.getSize("default_margin").height - } - } - - - Rectangle - { - id: printersArea - border.width: UM.Theme.getSize("default_lining").width - border.color: lineColor - anchors.top: printJobArea.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - anchors.rightMargin:UM.Theme.getSize("default_margin").width - radius: cornerRadius - height: childrenRect.height - - Item - { - id: printersTitleBar - width: parent.width - height: printJobTitleLabel.height + 2 * UM.Theme.getSize("default_margin").height - - Label - { - id: printersTitleLabel - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("default_margin").height - text: catalog.i18nc("@label:title", "Printers") - font: UM.Theme.getFont("default") - opacity: 0.75 - } - Rectangle - { - anchors.bottom: parent.bottom - height: UM.Theme.getSize("default_lining").width - color: lineColor - width: parent.width - } - } - Column - { - id: printersColumn - anchors.top: printersTitleBar.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - - Repeater - { - model: manager.connectedPrintersTypeCount - Item - { - width: parent.width - height: childrenRect.height - opacity: 0.65 - Label - { - text: modelData.machine_type - font: UM.Theme.getFont("very_small") - } - - Label - { - text: modelData.count - font: UM.Theme.getFont("small") - anchors.right: parent.right - } - } - } - } - OpenPanelButton - { - anchors.top: printersColumn.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.margins: UM.Theme.getSize("default_margin").height - id: printerConfigButton - onClicked: base.manager.openPrinterControlPanel() - - text: catalog.i18nc("@action:button", "View printers") - } - - Item - { - // spacer - anchors.top: printerConfigButton.bottom - width: UM.Theme.getSize("default_margin").width - height: UM.Theme.getSize("default_margin").height - } - } - } -} diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml deleted file mode 100644 index 0e86d55de8..0000000000 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ /dev/null @@ -1,118 +0,0 @@ -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -import UM 1.3 as UM -import Cura 1.0 as Cura - -Component -{ - Rectangle - { - id: monitorFrame - width: maximumWidth - height: maximumHeight - color: UM.Theme.getColor("viewport_background") - property var emphasisColor: UM.Theme.getColor("setting_control_border_highlight") - property var lineColor: "#DCDCDC" // TODO: Should be linked to theme. - property var cornerRadius: 4 * screenScaleFactor // TODO: Should be linked to theme. - - UM.I18nCatalog - { - id: catalog - name: "cura" - } - - Label - { - id: activePrintersLabel - font: UM.Theme.getFont("large") - - anchors { - top: parent.top - topMargin: UM.Theme.getSize("default_margin").height * 2 // a bit more spacing to give it some breathing room - horizontalCenter: parent.horizontalCenter - } - - text: OutputDevice.printers.length == 0 ? catalog.i18nc("@label: arg 1 is group name", "%1 is not set up to host a group of connected Ultimaker 3 printers").arg(Cura.MachineManager.printerOutputDevices[0].name) : "" - - visible: OutputDevice.printers.length == 0 - } - - Item - { - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.top: parent.top - anchors.horizontalCenter: parent.horizontalCenter - - width: Math.min(800 * screenScaleFactor, maximumWidth) - height: children.height - visible: OutputDevice.printers.length != 0 - - Label - { - id: addRemovePrintersLabel - anchors.right: parent.right - text: catalog.i18nc("@label link to connect manager", "Add/Remove printers") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - linkColor: UM.Theme.getColor("text_link") - } - - MouseArea - { - anchors.fill: addRemovePrintersLabel - hoverEnabled: true - onClicked: Cura.MachineManager.printerOutputDevices[0].openPrinterControlPanel() - onEntered: addRemovePrintersLabel.font.underline = true - onExited: addRemovePrintersLabel.font.underline = false - } - } - - ScrollView - { - id: printerScrollView - anchors.margins: UM.Theme.getSize("default_margin").width - anchors.top: activePrintersLabel.bottom - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_lining").width // To ensure border can be drawn. - anchors.rightMargin: UM.Theme.getSize("default_lining").width - anchors.right: parent.right - - ListView - { - anchors.fill: parent - spacing: -UM.Theme.getSize("default_lining").height - - model: OutputDevice.printers - - delegate: PrinterInfoBlock - { - printer: modelData - width: Math.min(800 * screenScaleFactor, maximumWidth) - height: 125 * screenScaleFactor - - // Add a 1 pix margin, as the border is sometimes cut off otherwise. - anchors.horizontalCenter: parent.horizontalCenter - } - } - } - - PrinterVideoStream - { - visible: OutputDevice.activePrinter != null - anchors.fill:parent - } - - onVisibleChanged: - { - if (!monitorFrame.visible) - { - // After switching the Tab ensure that active printer is Null, the video stream image - // might be active - OutputDevice.setActivePrinter(null) - } - } - } -} diff --git a/plugins/UM3NetworkPrinting/MonitorItem.qml b/plugins/UM3NetworkPrinting/MonitorItem.qml deleted file mode 100644 index bbbc3feee6..0000000000 --- a/plugins/UM3NetworkPrinting/MonitorItem.qml +++ /dev/null @@ -1,54 +0,0 @@ -import QtQuick 2.2 - - -import UM 1.3 as UM -import Cura 1.0 as Cura - -Component -{ - Item - { - width: maximumWidth - height: maximumHeight - Image - { - id: cameraImage - width: Math.min(sourceSize.width === 0 ? 800 * screenScaleFactor : sourceSize.width, maximumWidth) - height: Math.floor((sourceSize.height === 0 ? 600 * screenScaleFactor : sourceSize.height) * width / sourceSize.width) - anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter - z: 1 - Component.onCompleted: - { - if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) - { - OutputDevice.activePrinter.camera.start() - } - } - onVisibleChanged: - { - if(visible) - { - if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) - { - OutputDevice.activePrinter.camera.start() - } - } else - { - if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) - { - OutputDevice.activePrinter.camera.stop() - } - } - } - source: - { - if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null && OutputDevice.activePrinter.camera.latestImage) - { - return OutputDevice.activePrinter.camera.latestImage; - } - return ""; - } - } - } -} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/OpenPanelButton.qml b/plugins/UM3NetworkPrinting/OpenPanelButton.qml deleted file mode 100644 index 4bc1728f76..0000000000 --- a/plugins/UM3NetworkPrinting/OpenPanelButton.qml +++ /dev/null @@ -1,71 +0,0 @@ -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 - -import UM 1.1 as UM - -Button { - objectName: "openPanelSaveAreaButton" - id: openPanelSaveAreaButton - - UM.I18nCatalog { id: catalog; name: "cura"; } - - height: UM.Theme.getSize("save_button_save_to_button").height - tooltip: catalog.i18nc("@info:tooltip", "Opens the print jobs page with your default web browser.") - text: catalog.i18nc("@action:button", "View print jobs") - - // FIXME: This button style is copied and duplicated from SaveButton.qml - style: ButtonStyle { - background: Rectangle - { - border.width: UM.Theme.getSize("default_lining").width - border.color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_border"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_pressed_border"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_hovered_border"); - else - return UM.Theme.getColor("print_button_ready_border"); - } - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_pressed"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_hovered"); - else - return UM.Theme.getColor("print_button_ready"); - } - - Behavior on color { ColorAnimation { duration: 50; } } - - implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("sidebar_margin").width * 2) - - Label { - id: actualLabel - anchors.centerIn: parent - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_text"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_text"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_text"); - else - return UM.Theme.getColor("print_button_ready_text"); - } - font: UM.Theme.getFont("action_button") - text: control.text; - } - } - label: Item { } - } - - -} diff --git a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml deleted file mode 100644 index 267516091b..0000000000 --- a/plugins/UM3NetworkPrinting/PrintCoreConfiguration.qml +++ /dev/null @@ -1,33 +0,0 @@ -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -import UM 1.2 as UM - - -Item -{ - id: extruderInfo - property var printCoreConfiguration - - width: Math.round(parent.width / 2) - height: childrenRect.height - Label - { - id: materialLabel - text: printCoreConfiguration.activeMaterial != null ? printCoreConfiguration.activeMaterial.name : "" - elide: Text.ElideRight - width: parent.width - font: UM.Theme.getFont("very_small") - } - Label - { - id: printCoreLabel - text: printCoreConfiguration.hotendID - anchors.top: materialLabel.bottom - elide: Text.ElideRight - width: parent.width - font: UM.Theme.getFont("very_small") - opacity: 0.5 - } -} diff --git a/plugins/UM3NetworkPrinting/PrintWindow.qml b/plugins/UM3NetworkPrinting/PrintWindow.qml deleted file mode 100644 index 9793b218fc..0000000000 --- a/plugins/UM3NetworkPrinting/PrintWindow.qml +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Window 2.2 -import QtQuick.Controls 1.2 - -import UM 1.1 as UM - -UM.Dialog -{ - id: base; - - minimumWidth: 500 * screenScaleFactor - minimumHeight: 140 * screenScaleFactor - maximumWidth: minimumWidth - maximumHeight: minimumHeight - width: minimumWidth - height: minimumHeight - - visible: true - modality: Qt.ApplicationModal - onVisibleChanged: - { - if(visible) - { - resetPrintersModel() - } - else - { - OutputDevice.cancelPrintSelection() - } - } - title: catalog.i18nc("@title:window", "Print over network") - - property var printersModel: ListModel{} - function resetPrintersModel() { - printersModel.clear() - printersModel.append({ name: "Automatic", key: ""}) - - for (var index in OutputDevice.printers) - { - printersModel.append({name: OutputDevice.printers[index].name, key: OutputDevice.printers[index].key}) - } - } - - Column - { - id: printerSelection - anchors.fill: parent - anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.rightMargin: UM.Theme.getSize("default_margin").width - height: 50 * screenScaleFactor - Label - { - id: manualPrinterSelectionLabel - anchors - { - left: parent.left - topMargin: UM.Theme.getSize("default_margin").height - right: parent.right - } - text: catalog.i18nc("@label", "Printer selection") - wrapMode: Text.Wrap - height: 20 * screenScaleFactor - } - - ComboBox - { - id: printerSelectionCombobox - model: base.printersModel - textRole: "name" - - width: parent.width - height: 40 * screenScaleFactor - Behavior on height { NumberAnimation { duration: 100 } } - } - - SystemPalette - { - id: palette - } - - UM.I18nCatalog { id: catalog; name: "cura"; } - } - - leftButtons: [ - Button - { - text: catalog.i18nc("@action:button","Cancel") - enabled: true - onClicked: { - base.visible = false; - printerSelectionCombobox.currentIndex = 0 - OutputDevice.cancelPrintSelection() - } - } - ] - - rightButtons: [ - Button - { - text: catalog.i18nc("@action:button","Print") - enabled: true - onClicked: { - base.visible = false; - OutputDevice.selectPrinter(printerSelectionCombobox.model.get(printerSelectionCombobox.currentIndex).key) - // reset to defaults - printerSelectionCombobox.currentIndex = 0 - } - } - ] -} diff --git a/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml deleted file mode 100644 index 0217767a40..0000000000 --- a/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml +++ /dev/null @@ -1,431 +0,0 @@ -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -import UM 1.3 as UM - -Rectangle -{ - function strPadLeft(string, pad, length) - { - return (new Array(length + 1).join(pad) + string).slice(-length); - } - - function getPrettyTime(time) - { - return OutputDevice.formatDuration(time) - } - - function formatPrintJobPercent(printJob) - { - if (printJob == null) - { - return ""; - } - if (printJob.timeTotal === 0) - { - return ""; - } - return Math.min(100, Math.round(printJob.timeElapsed / printJob.timeTotal * 100)) + "%"; - } - - function printerStatusText(printer) - { - switch (printer.state) - { - case "pre_print": - return catalog.i18nc("@label:status", "Preparing to print") - case "printing": - return catalog.i18nc("@label:status", "Printing"); - case "idle": - return catalog.i18nc("@label:status", "Available"); - case "unreachable": - return catalog.i18nc("@label:status", "Lost connection with the printer"); - case "maintenance": - return catalog.i18nc("@label:status", "Unavailable"); - default: - return catalog.i18nc("@label:status", "Unknown"); - } - } - - id: printerDelegate - - property var printer: null - property var printJob: printer != null ? printer.activePrintJob: null - - border.width: UM.Theme.getSize("default_lining").width - border.color: mouse.containsMouse ? emphasisColor : lineColor - z: mouse.containsMouse ? 1 : 0 // Push this item up a bit on mouse over to ensure that the highlighted bottom border is visible. - - MouseArea - { - id: mouse - anchors.fill:parent - onClicked: OutputDevice.setActivePrinter(printer) - hoverEnabled: true; - - // Only clickable if no printer is selected - enabled: OutputDevice.activePrinter == null && printer.state !== "unreachable" - } - - Row - { - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.margins: UM.Theme.getSize("default_margin").width - - Rectangle - { - width: Math.round(parent.width / 3) - height: parent.height - - Label // Print job name - { - id: jobNameLabel - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - - text: printJob != null ? printJob.name : "" - font: UM.Theme.getFont("default_bold") - elide: Text.ElideRight - - } - - Label - { - id: jobOwnerLabel - anchors.top: jobNameLabel.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - text: printJob != null ? printJob.owner : "" - opacity: 0.50 - elide: Text.ElideRight - } - - Label - { - id: totalTimeLabel - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - text: printJob != null ? getPrettyTime(printJob.timeTotal) : "" - opacity: 0.65 - font: UM.Theme.getFont("default") - elide: Text.ElideRight - } - } - - Rectangle - { - width: Math.round(parent.width / 3 * 2) - height: parent.height - - Label // Friendly machine name - { - id: printerNameLabel - anchors.top: parent.top - anchors.left: parent.left - width: Math.round(parent.width / 2 - UM.Theme.getSize("default_margin").width - showCameraIcon.width) - text: printer.name - font: UM.Theme.getFont("default_bold") - elide: Text.ElideRight - } - - Label // Machine variant - { - id: printerTypeLabel - anchors.top: printerNameLabel.bottom - width: Math.round(parent.width / 2 - UM.Theme.getSize("default_margin").width) - text: printer.type - anchors.left: parent.left - elide: Text.ElideRight - font: UM.Theme.getFont("very_small") - opacity: 0.50 - } - - Rectangle // Camera icon - { - id: showCameraIcon - width: 40 * screenScaleFactor - height: width - radius: width - anchors.right: printProgressArea.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - color: emphasisColor - opacity: printer != null && printer.state === "unreachable" ? 0.3 : 1 - - Image - { - width: parent.width - height: width - anchors.right: parent.right - anchors.rightMargin: parent.rightMargin - source: "camera-icon.svg" - } - } - - Row // PrintCore config - { - id: extruderInfo - anchors.bottom: parent.bottom - - width: Math.round(parent.width / 2 - UM.Theme.getSize("default_margin").width) - height: childrenRect.height - - spacing: UM.Theme.getSize("default_margin").width - - PrintCoreConfiguration - { - id: leftExtruderInfo - width: Math.round((parent.width - extruderSeperator.width) / 2) - printCoreConfiguration: printer.extruders[0] - } - - Rectangle - { - id: extruderSeperator - width: UM.Theme.getSize("default_lining").width - height: parent.height - color: lineColor - } - - PrintCoreConfiguration - { - id: rightExtruderInfo - width: Math.round((parent.width - extruderSeperator.width) / 2) - printCoreConfiguration: printer.extruders[1] - } - } - - Rectangle // Print progress - { - id: printProgressArea - anchors.right: parent.right - anchors.top: parent.top - height: showExtended ? parent.height: printProgressTitleBar.height - width: Math.round(parent.width / 2 - UM.Theme.getSize("default_margin").width) - border.width: UM.Theme.getSize("default_lining").width - border.color: lineColor - radius: cornerRadius - property var showExtended: { - if(printJob != null) - { - var extendStates = ["sent_to_printer", "wait_for_configuration", "printing", "pre_print", "post_print", "wait_cleanup", "queued"]; - return extendStates.indexOf(printJob.state) !== -1; - } - return printer.state == "disabled" - } - - Item // Status and Percent - { - id: printProgressTitleBar - - property var showPercent: { - return printJob != null && (["printing", "post_print", "pre_print", "sent_to_printer"].indexOf(printJob.state) !== -1); - } - - width: parent.width - //TODO: hardcoded value - height: 40 * screenScaleFactor - anchors.left: parent.left - - Label - { - id: statusText - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: progressText.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: parent.verticalCenter - text: { - if (printer.state == "disabled") - { - return catalog.i18nc("@label:status", "Disabled"); - } - - if (printer.state === "unreachable") - { - return printerStatusText(printer); - } - - if (printJob != null) - { - switch (printJob.state) - { - case "printing": - case "post_print": - return catalog.i18nc("@label:status", "Printing") - case "wait_for_configuration": - return catalog.i18nc("@label:status", "Reserved") - case "wait_cleanup": - case "wait_user_action": - return catalog.i18nc("@label:status", "Finished") - case "pre_print": - case "sent_to_printer": - return catalog.i18nc("@label", "Preparing to print") - case "queued": - return catalog.i18nc("@label:status", "Action required"); - case "pausing": - case "paused": - return catalog.i18nc("@label:status", "Paused"); - case "resuming": - return catalog.i18nc("@label:status", "Resuming"); - case "aborted": - return catalog.i18nc("@label:status", "Print aborted"); - default: - // If print job has unknown status show printer.status - return printerStatusText(printer); - } - } - return printerStatusText(printer); - } - - elide: Text.ElideRight - font: UM.Theme.getFont("small") - } - - Label - { - id: progressText - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.top: statusText.top - - text: formatPrintJobPercent(printJob) - visible: printProgressTitleBar.showPercent - //TODO: Hardcoded value - opacity: 0.65 - font: UM.Theme.getFont("very_small") - } - - Image - { - width: statusText.height - height: width - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.top: statusText.top - - visible: !printProgressTitleBar.showPercent - - source: { - if (printer.state == "disabled") - { - return "blocked-icon.svg"; - } - - if (printer.state === "unreachable") - { - return ""; - } - - if (printJob != null) - { - if(printJob.state === "queued") - { - return "action-required-icon.svg"; - } - else if (printJob.state === "wait_cleanup") - { - return "checkmark-icon.svg"; - } - } - return ""; // We're not going to show it, so it will not be resolved as a url. - } - } - - Rectangle - { - //TODO: This will become a progress bar in the future - width: parent.width - height: UM.Theme.getSize("default_lining").height - anchors.bottom: parent.bottom - anchors.left: parent.left - visible: printProgressArea.showExtended - color: lineColor - } - } - - Column - { - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - - anchors.top: printProgressTitleBar.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - - width: parent.width - 2 * UM.Theme.getSize("default_margin").width - - visible: printProgressArea.showExtended - - Label // Status detail - { - text: - { - if (printer.state == "disabled") - { - return catalog.i18nc("@label", "Not accepting print jobs"); - } - - if (printer.state === "unreachable") - { - return ""; - } - - if(printJob != null) - { - switch (printJob.state) - { - case "printing": - case "post_print": - return catalog.i18nc("@label", "Finishes at: ") + OutputDevice.getTimeCompleted(printJob.timeTotal - printJob.timeElapsed) - case "wait_cleanup": - return catalog.i18nc("@label", "Clear build plate") - case "sent_to_printer": - case "pre_print": - return catalog.i18nc("@label", "Preparing to print") - case "wait_for_configuration": - return catalog.i18nc("@label", "Not accepting print jobs") - case "queued": - return catalog.i18nc("@label", "Waiting for configuration change"); - default: - return ""; - } - } - return ""; - } - anchors.left: parent.left - anchors.right: parent.right - elide: Text.ElideRight - wrapMode: Text.Wrap - - font: UM.Theme.getFont("default") - } - - Label // Status 2nd row - { - text: { - if(printJob != null) - { - if(printJob.state == "printing" || printJob.state == "post_print") - { - return OutputDevice.getDateCompleted(printJob.timeTotal - printJob.timeElapsed) - } - } - return ""; - } - - elide: Text.ElideRight - font: UM.Theme.getFont("default") - } - } - } - } - } -} diff --git a/plugins/UM3NetworkPrinting/PrinterTile.qml b/plugins/UM3NetworkPrinting/PrinterTile.qml deleted file mode 100644 index 3d03e93688..0000000000 --- a/plugins/UM3NetworkPrinting/PrinterTile.qml +++ /dev/null @@ -1,54 +0,0 @@ -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -import UM 1.3 as UM -import Cura 1.0 as Cura - -Rectangle -{ - id: base - width: 250 * screenScaleFactor - height: 250 * screenScaleFactor - signal clicked() - MouseArea - { - anchors.fill:parent - onClicked: base.clicked() - } - Rectangle - { - // TODO: Actually add UM icon / picture - width: 100 * screenScaleFactor - height: 100 * screenScaleFactor - border.width: UM.Theme.getSize("default_lining").width - anchors.horizontalCenter: parent.horizontalCenter - anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("default_margin").height - } - Label - { - id: nameLabel - anchors.bottom: ipLabel.top - anchors.bottomMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.right: parent.right - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.rightMargin: UM.Theme.getSize("default_margin").width - text: modelData.friendly_name.toString() - font: UM.Theme.getFont("large") - elide: Text.ElideMiddle; - height: UM.Theme.getSize("section").height; - } - Label - { - id: ipLabel - text: modelData.ip_address.toString() - anchors.bottom: parent.bottom - anchors.bottomMargin: UM.Theme.getSize("default_margin").height - font: UM.Theme.getFont("default") - height:10 * screenScaleFactor - anchors.horizontalCenter: parent.horizontalCenter - } -} - diff --git a/plugins/UM3NetworkPrinting/PrinterVideoStream.qml b/plugins/UM3NetworkPrinting/PrinterVideoStream.qml deleted file mode 100644 index 68758e095e..0000000000 --- a/plugins/UM3NetworkPrinting/PrinterVideoStream.qml +++ /dev/null @@ -1,99 +0,0 @@ -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -import UM 1.3 as UM - - -Item -{ - Rectangle - { - anchors.fill:parent - color: UM.Theme.getColor("viewport_overlay") - opacity: 0.5 - } - - MouseArea - { - anchors.fill: parent - onClicked: OutputDevice.setActivePrinter(null) - z: 0 - } - - Button - { - id: backButton - anchors.bottom: cameraImage.top - anchors.bottomMargin: UM.Theme.getSize("default_margin").width - anchors.right: cameraImage.right - - // TODO: Hardcoded sizes - width: 20 * screenScaleFactor - height: 20 * screenScaleFactor - - onClicked: OutputDevice.setActivePrinter(null) - - style: ButtonStyle - { - label: Item - { - UM.RecolorImage - { - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - width: control.width - height: control.height - sourceSize.width: width - sourceSize.height: width - source: UM.Theme.getIcon("cross1") - } - } - background: Item {} - } - } - - Image - { - id: cameraImage - width: Math.min(sourceSize.width === 0 ? 800 * screenScaleFactor : sourceSize.width, maximumWidth) - height: Math.round((sourceSize.height === 0 ? 600 * screenScaleFactor : sourceSize.height) * width / sourceSize.width) - anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter - z: 1 - onVisibleChanged: - { - if(visible) - { - if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) - { - OutputDevice.activePrinter.camera.start() - } - } else - { - if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) - { - OutputDevice.activePrinter.camera.stop() - } - } - } - source: - { - if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null && OutputDevice.activePrinter.camera.latestImage) - { - return OutputDevice.activePrinter.camera.latestImage; - } - return ""; - } - } - - MouseArea - { - anchors.fill: cameraImage - onClicked: - { - OutputDevice.setActivePrinter(null) - } - z: 1 - } -} diff --git a/plugins/UM3NetworkPrinting/SendMaterialJob.py b/plugins/UM3NetworkPrinting/SendMaterialJob.py deleted file mode 100644 index 8491e79c29..0000000000 --- a/plugins/UM3NetworkPrinting/SendMaterialJob.py +++ /dev/null @@ -1,99 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. - -import json #To understand the list of materials from the printer reply. -import os #To walk over material files. -import os.path #To filter on material files. -from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest #To listen to the reply from the printer. -from typing import Any, Dict, Set, TYPE_CHECKING -import urllib.parse #For getting material IDs from their file names. - -from UM.Job import Job #The interface we're implementing. -from UM.Logger import Logger -from UM.MimeTypeDatabase import MimeTypeDatabase #To strip the extensions of the material profile files. -from UM.Resources import Resources -from UM.Settings.ContainerRegistry import ContainerRegistry #To find the GUIDs of materials. - -from cura.CuraApplication import CuraApplication #For the resource types. - -if TYPE_CHECKING: - from .ClusterUM3OutputDevice import ClusterUM3OutputDevice - -## Asynchronous job to send material profiles to the printer. -# -# This way it won't freeze up the interface while sending those materials. -class SendMaterialJob(Job): - def __init__(self, device: "ClusterUM3OutputDevice") -> None: - super().__init__() - self.device = device #type: ClusterUM3OutputDevice - - def run(self) -> None: - self.device.get("materials/", on_finished = self.sendMissingMaterials) - - def sendMissingMaterials(self, reply: QNetworkReply) -> None: - if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: #Got an error from the HTTP request. - Logger.log("e", "Couldn't request current material storage on printer. Not syncing materials.") - return - - remote_materials_list = reply.readAll().data().decode("utf-8") - try: - remote_materials_list = json.loads(remote_materials_list) - except json.JSONDecodeError: - Logger.log("e", "Request material storage on printer: I didn't understand the printer's answer.") - return - try: - remote_materials_by_guid = {material["guid"]: material for material in remote_materials_list} #Index by GUID. - except KeyError: - Logger.log("e", "Request material storage on printer: Printer's answer was missing GUIDs.") - return - - container_registry = ContainerRegistry.getInstance() - local_materials_list = filter(lambda material: ("GUID" in material and "version" in material and "id" in material), container_registry.findContainersMetadata(type = "material")) - local_materials_by_guid = {material["GUID"]: material for material in local_materials_list if material["id"] == material["base_file"]} - for material in local_materials_list: #For each GUID get the material with the highest version number. - try: - if int(material["version"]) > local_materials_by_guid[material["GUID"]]["version"]: - local_materials_by_guid[material["GUID"]] = material - except ValueError: - Logger.log("e", "Material {material_id} has invalid version number {number}.".format(material_id = material["id"], number = material["version"])) - continue - - materials_to_send = set() #type: Set[Dict[str, Any]] - for guid, material in local_materials_by_guid.items(): - if guid not in remote_materials_by_guid: - materials_to_send.add(material["id"]) - continue - try: - if int(material["version"]) > remote_materials_by_guid[guid]["version"]: - materials_to_send.add(material["id"]) - continue - except KeyError: - Logger.log("e", "Current material storage on printer was an invalid reply (missing version).") - return - - for file_path in Resources.getAllResourcesOfType(CuraApplication.ResourceTypes.MaterialInstanceContainer): - try: - mime_type = MimeTypeDatabase.getMimeTypeForFile(file_path) - except MimeTypeDatabase.MimeTypeNotFoundError: - continue #Not the sort of file we'd like to send then. - _, file_name = os.path.split(file_path) - material_id = urllib.parse.unquote_plus(mime_type.stripExtension(file_name)) - if material_id not in materials_to_send: - continue - - parts = [] - with open(file_path, "rb") as f: - parts.append(self.device._createFormPart("name=\"file\"; filename=\"{file_name}\"".format(file_name = file_name), f.read())) - signature_file_path = file_path + ".sig" - if os.path.exists(signature_file_path): - _, signature_file_name = os.path.split(signature_file_path) - with open(signature_file_path, "rb") as f: - parts.append(self.device._createFormPart("name=\"signature_file\"; filename=\"{file_name}\"".format(file_name = signature_file_name), f.read())) - - Logger.log("d", "Syncing material {material_id} with cluster.".format(material_id = material_id)) - self.device.postFormWithParts(target = "materials/", parts = parts, on_finished = self.sendingFinished) - - def sendingFinished(self, reply: QNetworkReply): - if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: - Logger.log("e", "Received error code from printer when syncing material: {code}".format(code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute))) - Logger.log("e", reply.readAll().data().decode("utf-8")) \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/UM3InfoComponents.qml b/plugins/UM3NetworkPrinting/UM3InfoComponents.qml deleted file mode 100644 index a19d1be60d..0000000000 --- a/plugins/UM3NetworkPrinting/UM3InfoComponents.qml +++ /dev/null @@ -1,125 +0,0 @@ -import UM 1.2 as UM -import Cura 1.0 as Cura - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Layouts 1.1 -import QtQuick.Window 2.1 - -Item -{ - id: base - - property string activeQualityDefinitionId: Cura.MachineManager.activeQualityDefinitionId - property bool isUM3: activeQualityDefinitionId == "ultimaker3" || activeQualityDefinitionId.match("ultimaker_") != null - property bool printerConnected: Cura.MachineManager.printerConnected - property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands - property bool authenticationRequested: printerConnected && (Cura.MachineManager.printerOutputDevices[0].authenticationState == 2 || Cura.MachineManager.printerOutputDevices[0].authenticationState == 5) // AuthState.AuthenticationRequested or AuthenticationReceived. - - Row - { - objectName: "networkPrinterConnectButton" - visible: isUM3 - spacing: UM.Theme.getSize("default_margin").width - - Button - { - height: UM.Theme.getSize("save_button_save_to_button").height - tooltip: catalog.i18nc("@info:tooltip", "Send access request to the printer") - text: catalog.i18nc("@action:button", "Request Access") - style: UM.Theme.styles.sidebar_action_button - onClicked: Cura.MachineManager.printerOutputDevices[0].requestAuthentication() - visible: printerConnected && !printerAcceptsCommands && !authenticationRequested - } - - Button - { - height: UM.Theme.getSize("save_button_save_to_button").height - tooltip: catalog.i18nc("@info:tooltip", "Connect to a printer") - text: catalog.i18nc("@action:button", "Connect") - style: UM.Theme.styles.sidebar_action_button - onClicked: connectActionDialog.show() - visible: !printerConnected - } - } - - UM.Dialog - { - id: connectActionDialog - Loader - { - anchors.fill: parent - source: "DiscoverUM3Action.qml" - } - rightButtons: Button - { - text: catalog.i18nc("@action:button", "Close") - iconName: "dialog-close" - onClicked: connectActionDialog.reject() - } - } - - - Column - { - objectName: "networkPrinterConnectionInfo" - visible: isUM3 - spacing: UM.Theme.getSize("default_margin").width - anchors.fill: parent - - Button - { - tooltip: catalog.i18nc("@info:tooltip", "Send access request to the printer") - text: catalog.i18nc("@action:button", "Request Access") - onClicked: Cura.MachineManager.printerOutputDevices[0].requestAuthentication() - visible: printerConnected && !printerAcceptsCommands && !authenticationRequested - } - - Row - { - visible: printerConnected - spacing: UM.Theme.getSize("default_margin").width - - anchors.left: parent.left - anchors.right: parent.right - height: childrenRect.height - - Column - { - Repeater - { - model: Cura.ExtrudersModel { simpleNames: true } - Label { text: model.name } - } - } - Column - { - Repeater - { - id: nozzleColumn - model: printerConnected ? Cura.MachineManager.printerOutputDevices[0].hotendIds : null - Label { text: nozzleColumn.model[index] } - } - } - Column - { - Repeater - { - id: materialColumn - model: printerConnected ? Cura.MachineManager.printerOutputDevices[0].materialNames : null - Label { text: materialColumn.model[index] } - } - } - } - - Button - { - tooltip: catalog.i18nc("@info:tooltip", "Load the configuration of the printer into Cura") - text: catalog.i18nc("@action:button", "Activate Configuration") - visible: false // printerConnected && !isClusterPrinter() - onClicked: manager.loadConfigurationFromPrinter() - } - } - - UM.I18nCatalog{id: catalog; name:"cura"} -} diff --git a/plugins/UM3NetworkPrinting/__init__.py b/plugins/UM3NetworkPrinting/__init__.py index b68086cb75..3da7795589 100644 --- a/plugins/UM3NetworkPrinting/__init__.py +++ b/plugins/UM3NetworkPrinting/__init__.py @@ -1,14 +1,15 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from .src import DiscoverUM3Action +from .src import UM3OutputDevicePlugin -from . import DiscoverUM3Action -from UM.i18n import i18nCatalog -catalog = i18nCatalog("cura") - -from . import UM3OutputDevicePlugin def getMetaData(): return {} + def register(app): - return { "output_device": UM3OutputDevicePlugin.UM3OutputDevicePlugin(), "machine_action": DiscoverUM3Action.DiscoverUM3Action()} \ No newline at end of file + return { + "output_device": UM3OutputDevicePlugin.UM3OutputDevicePlugin(), + "machine_action": DiscoverUM3Action.DiscoverUM3Action() + } diff --git a/plugins/UM3NetworkPrinting/camera-icon.svg b/plugins/UM3NetworkPrinting/camera-icon.svg deleted file mode 100644 index 29adfa5875..0000000000 --- a/plugins/UM3NetworkPrinting/camera-icon.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/plugin.json b/plugins/UM3NetworkPrinting/plugin.json index e7b59fadd6..088b4dae6a 100644 --- a/plugins/UM3NetworkPrinting/plugin.json +++ b/plugins/UM3NetworkPrinting/plugin.json @@ -2,7 +2,7 @@ "name": "UM3 Network Connection", "author": "Ultimaker B.V.", "description": "Manages network connections to Ultimaker 3 printers.", - "version": "1.0.0", - "api": 4, + "version": "1.0.1", + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/UM3NetworkPrinting/resources/png/Ultimaker 3 Extended.png b/plugins/UM3NetworkPrinting/resources/png/Ultimaker 3 Extended.png new file mode 100644 index 0000000000..1ce19c2933 Binary files /dev/null and b/plugins/UM3NetworkPrinting/resources/png/Ultimaker 3 Extended.png differ diff --git a/plugins/UM3NetworkPrinting/resources/png/Ultimaker 3.png b/plugins/UM3NetworkPrinting/resources/png/Ultimaker 3.png new file mode 100644 index 0000000000..4639cb3fde Binary files /dev/null and b/plugins/UM3NetworkPrinting/resources/png/Ultimaker 3.png differ diff --git a/plugins/UM3NetworkPrinting/resources/png/Ultimaker S5.png b/plugins/UM3NetworkPrinting/resources/png/Ultimaker S5.png new file mode 100644 index 0000000000..29ba428e38 Binary files /dev/null and b/plugins/UM3NetworkPrinting/resources/png/Ultimaker S5.png differ diff --git a/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml b/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml new file mode 100644 index 0000000000..c0369cac0b --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml @@ -0,0 +1,56 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.3 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.3 +import UM 1.3 as UM +import Cura 1.0 as Cura + +Rectangle +{ + id: base + + property var enabled: true + + property var iconSource: null + color: enabled ? UM.Theme.getColor("monitor_icon_primary") : UM.Theme.getColor("monitor_icon_disabled") + height: width + radius: Math.round(0.5 * width) + width: 24 * screenScaleFactor + + UM.RecolorImage + { + id: icon + anchors + { + horizontalCenter: parent.horizontalCenter + verticalCenter: parent.verticalCenter + } + color: UM.Theme.getColor("monitor_icon_accent") + height: width + source: iconSource + width: Math.round(parent.width / 2) + } + + MouseArea + { + id: clickArea + anchors.fill: parent + hoverEnabled: base.enabled + onClicked: + { + if (base.enabled) + { + if (OutputDevice.activeCameraUrl != "") + { + OutputDevice.setActiveCameraUrl("") + } + else + { + OutputDevice.setActiveCameraUrl(modelData.cameraUrl) + } + } + } + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml b/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml similarity index 93% rename from plugins/UM3NetworkPrinting/DiscoverUM3Action.qml rename to plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml index 127b3c35bd..3883a7e285 100644 --- a/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml @@ -1,3 +1,6 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + import UM 1.2 as UM import Cura 1.0 as Cura @@ -25,7 +28,7 @@ Cura.MachineAction // Check if there is another instance with the same key if (!manager.existsKey(printerKey)) { - manager.setKey(printerKey) + manager.associateActiveMachineWithPrinterDevice(base.selectedDevice) manager.setGroupName(printerName) // TODO To change when the groups have a name completed() } @@ -61,6 +64,7 @@ Cura.MachineAction width: parent.width text: catalog.i18nc("@title:window", "Connect to Networked Printer") wrapMode: Text.WordWrap + renderType: Text.NativeRendering font.pointSize: 18 } @@ -69,6 +73,7 @@ Cura.MachineAction id: pageDescription width: parent.width wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: catalog.i18nc("@label", "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n\nSelect your printer from the list below:") } @@ -179,6 +184,7 @@ Cura.MachineAction text: listview.model[index].name color: parent.ListView.isCurrentItem ? palette.highlightedText : palette.text elide: Text.ElideRight + renderType: Text.NativeRendering } MouseArea @@ -201,6 +207,7 @@ Cura.MachineAction anchors.left: parent.left anchors.right: parent.right wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: catalog.i18nc("@label", "If your printer is not listed, read the network printing troubleshooting guide").arg("https://ultimaker.com/en/troubleshooting"); onLinkActivated: Qt.openUrlExternally(link) } @@ -216,8 +223,9 @@ Cura.MachineAction width: parent.width wrapMode: Text.WordWrap text: base.selectedDevice ? base.selectedDevice.name : "" - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") elide: Text.ElideRight + renderType: Text.NativeRendering } Grid { @@ -228,12 +236,14 @@ Cura.MachineAction { width: Math.round(parent.width * 0.5) wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: catalog.i18nc("@label", "Type") } Label { width: Math.round(parent.width * 0.5) wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: { if(base.selectedDevice) @@ -265,24 +275,28 @@ Cura.MachineAction { width: Math.round(parent.width * 0.5) wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: catalog.i18nc("@label", "Firmware version") } Label { width: Math.round(parent.width * 0.5) wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: base.selectedDevice ? base.selectedDevice.firmwareVersion : "" } Label { width: Math.round(parent.width * 0.5) wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: catalog.i18nc("@label", "Address") } Label { width: Math.round(parent.width * 0.5) wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: base.selectedDevice ? base.selectedDevice.ipAddress : "" } } @@ -291,6 +305,7 @@ Cura.MachineAction { width: parent.width wrapMode: Text.WordWrap + renderType: Text.NativeRendering text:{ // The property cluster size does not exist for older UM3 devices. if(!base.selectedDevice || base.selectedDevice.clusterSize == null || base.selectedDevice.clusterSize == 1) @@ -312,6 +327,7 @@ Cura.MachineAction { width: parent.width wrapMode: Text.WordWrap + renderType: Text.NativeRendering visible: base.selectedDevice != null && !base.completeProperties text: catalog.i18nc("@label", "The printer at this address has not yet responded." ) } @@ -355,16 +371,16 @@ Cura.MachineAction Label { - text: catalog.i18nc("@alabel","Enter the IP address or hostname of your printer on the network.") + text: catalog.i18nc("@alabel", "Enter the IP address or hostname of your printer on the network.") width: parent.width wrapMode: Text.WordWrap + renderType: Text.NativeRendering } TextField { id: addressField width: parent.width - maximumLength: 40 validator: RegExpValidator { regExp: /[a-zA-Z0-9\.\-\_]*/ diff --git a/plugins/UM3NetworkPrinting/resources/qml/ExpandableCard.qml b/plugins/UM3NetworkPrinting/resources/qml/ExpandableCard.qml new file mode 100644 index 0000000000..fae8280488 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/ExpandableCard.qml @@ -0,0 +1,90 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import UM 1.3 as UM +import Cura 1.0 as Cura + +/** + * The expandable component has 3 major sub components: + * - The headerItem Always visible and should hold some info about what happens if the component is expanded + * - The popupItem The content that needs to be shown if the component is expanded. + */ +Item +{ + id: base + + property bool expanded: false + property bool enabled: true + property var borderWidth: 1 + property color borderColor: UM.Theme.getColor("monitor_card_border") + property color headerBackgroundColor: UM.Theme.getColor("monitor_icon_accent") + property color headerHoverColor: UM.Theme.getColor("monitor_card_hover") + property color drawerBackgroundColor: UM.Theme.getColor("monitor_icon_accent") + property alias headerItem: header.children + property alias drawerItem: drawer.children + + width: parent.width + height: childrenRect.height + + Rectangle + { + id: header + border + { + color: borderColor + width: borderWidth + } + color: base.enabled && headerMouseArea.containsMouse ? headerHoverColor : headerBackgroundColor + height: childrenRect.height + width: parent.width + radius: 2 * screenScaleFactor // TODO: Theme! + Behavior on color + { + ColorAnimation + { + duration: 100 + } + } + } + + MouseArea + { + id: headerMouseArea + anchors.fill: header + onClicked: + { + if (!base.enabled) return + base.expanded = !base.expanded + } + hoverEnabled: base.enabled + } + + Rectangle + { + id: drawer + anchors + { + top: header.bottom + topMargin: -1 + } + border + { + color: borderColor + width: borderWidth + } + clip: true + color: headerBackgroundColor + height: base.expanded ? childrenRect.height : 0 + width: parent.width + radius: 2 * screenScaleFactor // TODO: Theme! + Behavior on height + { + NumberAnimation + { + duration: 100 + } + } + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/GenericPopUp.qml b/plugins/UM3NetworkPrinting/resources/qml/GenericPopUp.qml new file mode 100644 index 0000000000..74d9377f3e --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/GenericPopUp.qml @@ -0,0 +1,227 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Dialogs 1.1 +import QtGraphicalEffects 1.0 +import UM 1.3 as UM + +/** + * This is a generic pop-up element which can be supplied with a target and a content item. The + * content item will appear to the left, right, above, or below the target depending on the value of + * the direction property + */ +Popup +{ + id: base + + /** + * The target item is what the pop-up is "tied" to, usually a button + */ + property var target + + /** + * Which direction should the pop-up "point"? + * Possible values include: + * - "up" + * - "down" + * - "left" + * - "right" + */ + property string direction: "down" + + /** + * We save the default direction so that if a pop-up was flipped but later has space (i.e. it + * moved), we can unflip it back to the default direction. + */ + property string originalDirection: "" + + /** + * Should the popup close when you click outside it? For example, this is + * disabled by the InfoBlurb component since it's opened and closed using mouse + * hovers, not clicks. + */ + property bool closeOnClick: true + + /** + * Use white for context menus, dark grey for info blurbs! + */ + property var color: "#ffffff" // TODO: Theme! + + Component.onCompleted: + { + recalculatePosition() + + // Set the direction here so it's only set once and never mutated + originalDirection = (' ' + direction).slice(1) + } + + background: Item + { + anchors.fill: parent + + DropShadow + { + anchors.fill: pointedRectangle + color: UM.Theme.getColor("monitor_shadow") + radius: UM.Theme.getSize("monitor_shadow_radius").width + source: pointedRectangle + transparentBorder: true + verticalOffset: 2 * screenScaleFactor + } + + Item + { + id: pointedRectangle + anchors + { + horizontalCenter: parent.horizontalCenter + verticalCenter: parent.verticalCenter + } + height: parent.height - 10 * screenScaleFactor // Because of the shadow + width: parent.width - 10 * screenScaleFactor // Because of the shadow + + Rectangle + { + id: point + anchors + { + horizontalCenter: + { + switch(direction) + { + case "left": + return bloop.left + case "right": + return bloop.right + default: + return bloop.horizontalCenter + } + } + verticalCenter: + { + switch(direction) + { + case "up": + return bloop.top + case "down": + return bloop.bottom + default: + return bloop.verticalCenter + } + } + } + color: base.color + height: 12 * screenScaleFactor + transform: Rotation + { + angle: 45 + origin.x: point.width / 2 + origin.y: point.height / 2 + } + width: height + } + + Rectangle + { + id: bloop + anchors + { + fill: parent + leftMargin: direction == "left" ? 8 * screenScaleFactor : 0 + rightMargin: direction == "right" ? 8 * screenScaleFactor : 0 + topMargin: direction == "up" ? 8 * screenScaleFactor : 0 + bottomMargin: direction == "down" ? 8 * screenScaleFactor : 0 + } + color: base.color + width: parent.width + } + } + } + + visible: false + onClosed: visible = false + onOpened: + { + // Flip orientation if necessary + recalculateOrientation() + + // Fix position if necessary + recalculatePosition() + + // Show the pop up + visible = true + } + closePolicy: closeOnClick ? Popup.CloseOnPressOutside : Popup.NoAutoClose + + clip: true + + padding: UM.Theme.getSize("monitor_shadow_radius").width + topPadding: direction == "up" ? padding + 8 * screenScaleFactor : padding + bottomPadding: direction == "down" ? padding + 8 * screenScaleFactor : padding + leftPadding: direction == "left" ? padding + 8 * screenScaleFactor : padding + rightPadding: direction == "right" ? padding + 8 * screenScaleFactor : padding + + function recalculatePosition() { + + // Stupid pop-up logic causes the pop-up to resize, so let's compute what it SHOULD be + const realWidth = contentItem.implicitWidth + leftPadding + rightPadding + const realHeight = contentItem.implicitHeight + topPadding + bottomPadding + + var centered = { + x: target.x + target.width / 2 - realWidth / 2, + y: target.y + target.height / 2 - realHeight / 2 + } + + switch(direction) + { + case "left": + x = target.x + target.width + y = centered.y + break + case "right": + x = target.x - realWidth + y = centered.y + break + case "up": + x = centered.x + y = target.y + target.height + break + case "down": + x = centered.x + y = target.y - realHeight + break + } + } + + function recalculateOrientation() { + var availableSpace + var targetPosition = target.mapToItem(monitorFrame, 0, 0) + + // Stupid pop-up logic causes the pop-up to resize, so let's compute what it SHOULD be + const realWidth = contentItem.implicitWidth + leftPadding + rightPadding + const realHeight = contentItem.implicitHeight + topPadding + bottomPadding + + switch(originalDirection) + { + case "up": + availableSpace = monitorFrame.height - (targetPosition.y + target.height) + direction = availableSpace < realHeight ? "down" : originalDirection + break + case "down": + availableSpace = targetPosition.y + direction = availableSpace < realHeight ? "up" : originalDirection + break + case "right": + availableSpace = targetPosition.x + direction = availableSpace < realWidth ? "left" : originalDirection + break + case "left": + availableSpace = monitorFrame.width - (targetPosition.x + target.width) + direction = availableSpace < realWidth ? "right" : originalDirection + break + } + } +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml new file mode 100644 index 0000000000..d1a0c207c5 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml @@ -0,0 +1,74 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import UM 1.3 as UM + +/** + * This component comprises a buildplate icon and the buildplate name. It is + * used by the MonitorPrinterConfiguration component along with two instances + * of MonitorExtruderConfiguration. + * + * NOTE: For most labels, a fixed height with vertical alignment is used to make + * layouts more deterministic (like the fixed-size textboxes used in original + * mock-ups). This is also a stand-in for CSS's 'line-height' property. Denoted + * with '// FIXED-LINE-HEIGHT:'. + */ +Item +{ + // The buildplate name + property var buildplate: null + + // Height is one 18px label/icon + height: 18 * screenScaleFactor // TODO: Theme! + width: childrenRect.width + + Row + { + height: parent.height + spacing: UM.Theme.getSize("print_setup_slider_handle").width // TODO: Theme! (Should be same as extruder spacing) + + // This wrapper ensures that the buildplate icon is located centered + // below an extruder icon. + Item + { + height: parent.height + width: 32 * screenScaleFactor // Ensure the icon is centered under the extruder icon (same width) + + Rectangle + { + anchors.centerIn: parent + height: parent.height + width: height + color: buildplateIcon.visible > 0 ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading") + radius: Math.floor(height / 2) + } + + UM.RecolorImage + { + id: buildplateIcon + anchors.centerIn: parent + color: UM.Theme.getColor("monitor_icon_primary") + height: parent.height + source: "../svg/icons/buildplate.svg" + width: height + visible: buildplate + } + } + + Label + { + id: buildplateLabel + color: UM.Theme.getColor("monitor_text_primary") + elide: Text.ElideRight + font: UM.Theme.getFont("default") // 12pt, regular + text: buildplate ? buildplate : "" + visible: text !== "" + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorCarousel.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorCarousel.qml new file mode 100644 index 0000000000..0d7a177dd3 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorCarousel.qml @@ -0,0 +1,258 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.3 +import QtQuick.Controls 2.0 +import QtGraphicalEffects 1.0 +import UM 1.3 as UM + +Item +{ + id: base + + property var currentIndex: 0 + property var tileWidth: 834 * screenScaleFactor // TODO: Theme! + property var tileHeight: 216 * screenScaleFactor // TODO: Theme! + property var tileSpacing: 60 * screenScaleFactor // TODO: Theme! + + // Array/model of printers to populate the carousel with + property var printers: [] + + // Maximum distance the carousel can be shifted + property var maxOffset: (printers.length - 1) * (tileWidth + tileSpacing) + + height: centerSection.height + width: maximumWidth + + // Enable keyboard navigation + Keys.onLeftPressed: navigateTo(currentIndex - 1) + Keys.onRightPressed: navigateTo(currentIndex + 1) + + Item + { + id: leftHint + anchors + { + right: leftButton.left + rightMargin: 12 * screenScaleFactor // TODO: Theme! + left: parent.left + } + height: parent.height + z: 10 + LinearGradient + { + anchors.fill: parent + start: Qt.point(0, 0) + end: Qt.point(leftHint.width, 0) + gradient: Gradient + { + GradientStop + { + position: 0.0 + color: UM.Theme.getColor("monitor_stage_background") + } + GradientStop + { + position: 1.0 + color: UM.Theme.getColor("monitor_stage_background_fade") + } + } + } + MouseArea + { + anchors.fill: parent + onClicked: navigateTo(currentIndex - 1) + } + } + + Button + { + id: leftButton + anchors + { + verticalCenter: parent.verticalCenter + right: centerSection.left + rightMargin: 12 * screenScaleFactor // TODO: Theme! + } + width: 36 * screenScaleFactor // TODO: Theme! + height: 72 * screenScaleFactor // TODO: Theme! + visible: currentIndex > 0 + hoverEnabled: true + z: 10 + onClicked: navigateTo(currentIndex - 1) + background: Rectangle + { + color: leftButton.hovered ? UM.Theme.getColor("monitor_card_hover") : UM.Theme.getColor("monitor_card_background") + border.width: 1 * screenScaleFactor // TODO: Theme! + border.color: UM.Theme.getColor("monitor_card_border") + radius: 2 * screenScaleFactor // TODO: Theme! + } + contentItem: Item + { + anchors.fill: parent + UM.RecolorImage + { + anchors.centerIn: parent + width: 18 // TODO: Theme! + height: width // TODO: Theme! + sourceSize.width: width // TODO: Theme! + sourceSize.height: width // TODO: Theme! + color: UM.Theme.getColor("monitor_text_primary") + source: UM.Theme.getIcon("arrow_left") + } + } + } + + Item + { + id: centerSection + anchors + { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + width: tileWidth + height: tiles.height + z: 1 + + Row + { + id: tiles + height: childrenRect.height + width: 5 * tileWidth + 4 * tileSpacing // TODO: Theme! + x: 0 + z: 0 + Behavior on x + { + NumberAnimation + { + duration: 200 + easing.type: Easing.InOutCubic + } + } + spacing: 60 * screenScaleFactor // TODO: Theme! + + Repeater + { + model: printers + MonitorPrinterCard + { + printer: modelData + enabled: model.index == currentIndex + } + } + } + } + + Button + { + id: rightButton + anchors + { + verticalCenter: parent.verticalCenter + left: centerSection.right + leftMargin: 12 * screenScaleFactor // TODO: Theme! + } + width: 36 * screenScaleFactor // TODO: Theme! + height: 72 * screenScaleFactor // TODO: Theme! + z: 10 + visible: currentIndex < printers.length - 1 + onClicked: navigateTo(currentIndex + 1) + hoverEnabled: true + background: Rectangle + { + color: rightButton.hovered ? UM.Theme.getColor("monitor_card_hover") : UM.Theme.getColor("monitor_card_background") + border.width: 1 * screenScaleFactor // TODO: Theme! + border.color: UM.Theme.getColor("monitor_card_border") + radius: 2 * screenScaleFactor // TODO: Theme! + } + contentItem: Item + { + anchors.fill: parent + UM.RecolorImage + { + anchors.centerIn: parent + width: 18 // TODO: Theme! + height: width // TODO: Theme! + sourceSize.width: width // TODO: Theme! + sourceSize.height: width // TODO: Theme! + color: UM.Theme.getColor("monitor_text_primary") + source: UM.Theme.getIcon("arrow_right") + } + } + } + + Item + { + id: rightHint + anchors + { + left: rightButton.right + leftMargin: 12 * screenScaleFactor // TODO: Theme! + right: parent.right + } + height: centerSection.height + z: 10 + + LinearGradient + { + anchors.fill: parent + start: Qt.point(0, 0) + end: Qt.point(rightHint.width, 0) + gradient: Gradient + { + GradientStop + { + position: 0.0 + color: UM.Theme.getColor("monitor_stage_background_fade") + } + GradientStop + { + position: 1.0 + color: UM.Theme.getColor("monitor_stage_background") + } + } + } + MouseArea + { + anchors.fill: parent + onClicked: navigateTo(currentIndex + 1) + } + } + + Row + { + id: navigationDots + anchors + { + horizontalCenter: centerSection.horizontalCenter + top: centerSection.bottom + topMargin: 36 * screenScaleFactor // TODO: Theme! + } + spacing: 8 * screenScaleFactor // TODO: Theme! + visible: printers.length > 1 + Repeater + { + model: printers + Button + { + background: Rectangle + { + color: model.index == currentIndex ? UM.Theme.getColor("monitor_carousel_dot_current") : UM.Theme.getColor("monitor_carousel_dot") + radius: Math.floor(width / 2) + width: 12 * screenScaleFactor // TODO: Theme! + height: width // TODO: Theme! + } + onClicked: navigateTo(model.index) + } + } + } + + function navigateTo( i ) { + if (i >= 0 && i < printers.length) + { + tiles.x = -1 * i * (tileWidth + tileSpacing) + currentIndex = i + } + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml new file mode 100644 index 0000000000..1718994d83 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml @@ -0,0 +1,142 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.3 +import QtQuick.Controls 1.4 +import QtQuick.Layouts 1.3 +import QtQuick.Dialogs 1.2 +import UM 1.3 as UM + +UM.Dialog +{ + id: overrideConfirmationDialog + + property var printer: null + + minimumWidth: screenScaleFactor * 640; + minimumHeight: screenScaleFactor * 320; + width: minimumWidth + height: minimumHeight + title: catalog.i18nc("@title:window", "Configuration Changes") + rightButtons: + [ + Button + { + id: overrideButton + anchors.margins: UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@action:button", "Override") + onClicked: + { + OutputDevice.forceSendJob(printer.activePrintJob.key) + overrideConfirmationDialog.close() + } + }, + Button + { + id: cancelButton + anchors.margins: UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@action:button", "Cancel") + onClicked: + { + overrideConfirmationDialog.reject() + } + } + ] + + Label + { + anchors + { + fill: parent + margins: 36 * screenScaleFactor // TODO: Theme! + bottomMargin: 56 * screenScaleFactor // TODO: Theme! + } + wrapMode: Text.WordWrap + text: + { + if (!printer || !printer.activePrintJob) + { + return "" + } + var topLine + if (materialsAreKnown(printer.activePrintJob)) + { + topLine = catalog.i18ncp("@label", "The assigned printer, %1, requires the following configuration change:", "The assigned printer, %1, requires the following configuration changes:", printer.activePrintJob.configurationChanges.length).arg(printer.name) + } + else + { + topLine = catalog.i18nc("@label", "The printer %1 is assigned, but the job contains an unknown material configuration.").arg(printer.name) + } + var result = "

" + topLine +"

\n\n" + for (var i = 0; i < printer.activePrintJob.configurationChanges.length; i++) + { + var change = printer.activePrintJob.configurationChanges[i] + var text + switch (change.typeOfChange) + { + case "material_change": + text = catalog.i18nc("@label", "Change material %1 from %2 to %3.").arg(change.index + 1).arg(change.originName).arg(change.targetName) + break + case "material_insert": + text = catalog.i18nc("@label", "Load %3 as material %1 (This cannot be overridden).").arg(change.index + 1).arg(change.targetName) + break + case "print_core_change": + text = catalog.i18nc("@label", "Change print core %1 from %2 to %3.").arg(change.index + 1).arg(change.originName).arg(change.targetName) + break + case "buildplate_change": + text = catalog.i18nc("@label", "Change build plate to %1 (This cannot be overridden).").arg(formatBuildPlateType(change.target_name)) + break + default: + text = "unknown" + } + result += "

" + text + "

\n\n" + } + var bottomLine = catalog.i18nc("@label", "Override will use the specified settings with the existing printer configuration. This may result in a failed print.") + result += "

" + bottomLine + "

\n\n" + return result + } + } + // Utils + function formatPrintJobName(name) + { + var extensions = [ ".gcode.gz", ".gz", ".gcode", ".ufp" ] + for (var i = 0; i < extensions.length; i++) + { + var extension = extensions[i] + if (name.slice(-extension.length) === extension) + { + name = name.substring(0, name.length - extension.length) + } + } + return name; + } + function materialsAreKnown(job) + { + var conf0 = job.configuration[0] + if (conf0 && !conf0.material.material) + { + return false + } + var conf1 = job.configuration[1] + if (conf1 && !conf1.material.material) + { + return false + } + return true + } + function formatBuildPlateType(buildPlateType) + { + var translationText = "" + switch (buildPlateType) { + case "glass": + translationText = catalog.i18nc("@label", "Glass") + break + case "aluminum": + translationText = catalog.i18nc("@label", "Aluminum") + break + default: + translationText = null + } + return translationText + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenu.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenu.qml new file mode 100644 index 0000000000..771bd4b8cf --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenu.qml @@ -0,0 +1,182 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.3 +import QtQuick.Controls 2.0 +import QtQuick.Dialogs 1.1 +import UM 1.3 as UM + +/** + * A MonitorInfoBlurb is an extension of the GenericPopUp used to show static information (vs. interactive context + * menus). It accepts some text (text), an item to link to to (target), and a specification of which side of the target + * to appear on (direction). It also sets the GenericPopUp's color to black, to differentiate itself from a menu. + */ +Item +{ + property alias target: popUp.target + + property var printJob: null + + GenericPopUp + { + id: popUp + + // Which way should the pop-up point? Default is up, but will flip when required + direction: "up" + + // Use dark grey for info blurbs and white for context menus + color: UM.Theme.getColor("monitor_context_menu") + + contentItem: Item + { + id: contentWrapper + implicitWidth: childrenRect.width + implicitHeight: menuItems.height + UM.Theme.getSize("default_margin").height + + Column + { + id: menuItems + width: 144 * screenScaleFactor + + anchors + { + top: parent.top + topMargin: Math.floor(UM.Theme.getSize("default_margin").height / 2) + } + + spacing: Math.floor(UM.Theme.getSize("default_margin").height / 2) + + PrintJobContextMenuItem { + onClicked: { + sendToTopConfirmationDialog.visible = true; + popUp.close(); + } + text: catalog.i18nc("@label", "Move to top"); + visible: { + if (printJob && (printJob.state == "queued" || printJob.state == "error") && !isAssigned(printJob)) { + if (OutputDevice && OutputDevice.queuedPrintJobs[0]) { + return OutputDevice.queuedPrintJobs[0].key != printJob.key; + } + } + return false; + } + } + + PrintJobContextMenuItem { + onClicked: { + deleteConfirmationDialog.visible = true; + popUp.close(); + } + text: catalog.i18nc("@label", "Delete"); + visible: { + if (!printJob) { + return false; + } + var states = ["queued", "error", "sent_to_printer"]; + return states.indexOf(printJob.state) !== -1; + } + } + + PrintJobContextMenuItem { + enabled: visible && !(printJob.state == "pausing" || printJob.state == "resuming"); + onClicked: { + if (printJob.state == "paused") { + printJob.setState("print"); + popUp.close(); + return; + } + if (printJob.state == "printing") { + printJob.setState("pause"); + popUp.close(); + return; + } + } + text: { + if (!printJob) { + return ""; + } + switch(printJob.state) { + case "paused": + return catalog.i18nc("@label", "Resume"); + case "pausing": + return catalog.i18nc("@label", "Pausing..."); + case "resuming": + return catalog.i18nc("@label", "Resuming..."); + default: + catalog.i18nc("@label", "Pause"); + } + } + visible: { + if (!printJob) { + return false; + } + var states = ["printing", "pausing", "paused", "resuming"]; + return states.indexOf(printJob.state) !== -1; + } + } + + PrintJobContextMenuItem { + enabled: visible && printJob.state !== "aborting"; + onClicked: { + abortConfirmationDialog.visible = true; + popUp.close(); + } + text: printJob && printJob.state == "aborting" ? catalog.i18nc("@label", "Aborting...") : catalog.i18nc("@label", "Abort"); + visible: { + if (!printJob) { + return false; + } + var states = ["pre_print", "printing", "pausing", "paused", "resuming"]; + return states.indexOf(printJob.state) !== -1; + } + } + } + } + } + + MessageDialog { + id: sendToTopConfirmationDialog + Component.onCompleted: visible = false + icon: StandardIcon.Warning + onYes: OutputDevice.sendJobToTop(printJob.key) + standardButtons: StandardButton.Yes | StandardButton.No + text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name) : "" + title: catalog.i18nc("@window:title", "Move print job to top") + } + + MessageDialog { + id: deleteConfirmationDialog + Component.onCompleted: visible = false + icon: StandardIcon.Warning + onYes: OutputDevice.deleteJobFromQueue(printJob.key) + standardButtons: StandardButton.Yes | StandardButton.No + text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name) : "" + title: catalog.i18nc("@window:title", "Delete print job") + } + + MessageDialog { + id: abortConfirmationDialog + Component.onCompleted: visible = false + icon: StandardIcon.Warning + onYes: printJob.setState("abort") + standardButtons: StandardButton.Yes | StandardButton.No + text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(printJob.name) : "" + title: catalog.i18nc("@window:title", "Abort print") + } + + function switchPopupState() { + popUp.visible ? popUp.close() : popUp.open() + } + function open() { + popUp.open() + } + function close() { + popUp.close() + } + function isAssigned(job) { + if (!job) { + return false; + } + return job.assignedPrinter ? true : false; + } +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenuButton.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenuButton.qml new file mode 100644 index 0000000000..ba85802809 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenuButton.qml @@ -0,0 +1,31 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.3 +import QtQuick.Controls 2.0 +import UM 1.3 as UM +import Cura 1.0 as Cura + +Button +{ + id: base + background: Rectangle + { + color: enabled ? UM.Theme.getColor("viewport_background") : "transparent" + height: base.height + opacity: base.down || base.hovered ? 1 : 0 + radius: Math.round(0.5 * width) + width: base.width + } + contentItem: Label { + color: enabled ? UM.Theme.getColor("monitor_text_primary") : UM.Theme.getColor("monitor_text_disabled") + font.pixelSize: 32 * screenScaleFactor + horizontalAlignment: Text.AlignHCenter + text: base.text + verticalAlignment: Text.AlignVCenter + } + height: width + hoverEnabled: enabled + text: "\u22EE" //Unicode Three stacked points. + width: 36 * screenScaleFactor // TODO: Theme! +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml new file mode 100644 index 0000000000..4079f23b0a --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml @@ -0,0 +1,100 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import UM 1.3 as UM + +/** + * This component comprises a colored extruder icon, the material name, and the + * print core name. It is used by the MonitorPrinterConfiguration component with + * a sibling instance as well as a MonitorBuildplateConfiguration instance. + * + * NOTE: For most labels, a fixed height with vertical alignment is used to make + * layouts more deterministic (like the fixed-size textboxes used in original + * mock-ups). This is also a stand-in for CSS's 'line-height' property. Denoted + * with '// FIXED-LINE-HEIGHT:'. + */ +Item +{ + // The material color + property alias color: extruderIcon.color + + // The extruder position; NOTE: Decent human beings count from 0 + property alias position: extruderIcon.position + + // The material name + property alias material: materialLabel.text + + // The print core name (referred to as hotendID in Python) + property alias printCore: printCoreLabel.text + + // Height is 2 x 18px labels, plus 4px spacing between them + height: 40 * screenScaleFactor // TODO: Theme! + width: childrenRect.width + + MonitorIconExtruder + { + id: extruderIcon + color: UM.Theme.getColor("monitor_skeleton_loading") + position: 0 + } + + Rectangle + { + id: materialLabelWrapper + anchors + { + left: extruderIcon.right + leftMargin: 12 * screenScaleFactor // TODO: Theme! + } + color: materialLabel.visible > 0 ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading") + height: 18 * screenScaleFactor // TODO: Theme! + width: Math.max(materialLabel.contentWidth, 60 * screenScaleFactor) // TODO: Theme! + radius: 2 * screenScaleFactor // TODO: Theme! + + Label + { + id: materialLabel + + color: UM.Theme.getColor("monitor_text_primary") + elide: Text.ElideRight + font: UM.Theme.getFont("default") // 12pt, regular + text: "" + visible: text !== "" + + // FIXED-LINE-HEIGHT: + height: parent.height + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle + { + id: printCoreLabelWrapper + anchors + { + left: materialLabelWrapper.left + bottom: parent.bottom + } + color: printCoreLabel.visible > 0 ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading") + height: 18 * screenScaleFactor // TODO: Theme! + width: Math.max(printCoreLabel.contentWidth, 36 * screenScaleFactor) // TODO: Theme! + radius: 2 * screenScaleFactor // TODO: Theme! + + Label + { + id: printCoreLabel + + color: UM.Theme.getColor("monitor_text_primary") + elide: Text.ElideRight + font: UM.Theme.getFont("default_bold") // 12pt, bold + text: "" + visible: text !== "" + + // FIXED-LINE-HEIGHT: + height: parent.height + verticalAlignment: Text.AlignVCenter + } + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml new file mode 100644 index 0000000000..c3e78317c5 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml @@ -0,0 +1,52 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import UM 1.3 as UM + +/** + * This component is a sort of "super icon" which includes a colored SVG image + * as well as the extruder position number. It is used in the the + * MonitorExtruderConfiguration component. + */ +Item +{ + // The material color + property alias color: icon.color + + // The extruder position; NOTE: Decent human beings count from 0 + property int position: 0 + + // The extruder icon size; NOTE: This shouldn't need to be changed + property int size: 32 * screenScaleFactor // TODO: Theme! + + // THe extruder icon source; NOTE: This shouldn't need to be changed + property string iconSource: "../svg/icons/extruder.svg" + + height: size + width: size + + UM.RecolorImage + { + id: icon + anchors.fill: parent + source: iconSource + width: size + } + + Label + { + id: positionLabel + font: UM.Theme.getFont("small") + color: UM.Theme.getColor("monitor_text_primary") + height: Math.round(size / 2) + horizontalAlignment: Text.AlignHCenter + text: position + 1 + verticalAlignment: Text.AlignVCenter + width: Math.round(size / 2) + x: Math.round(size * 0.25) + y: Math.round(size * 0.15625) + visible: position >= 0 + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorInfoBlurb.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorInfoBlurb.qml new file mode 100644 index 0000000000..21000b8bff --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorInfoBlurb.qml @@ -0,0 +1,53 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.3 +import QtQuick.Controls 2.0 +import UM 1.3 as UM + +/** + * A MonitorInfoBlurb is an extension of the GenericPopUp used to show static information (vs. interactive context + * menus). It accepts some text (text), an item to link to to (target), and a specification of which side of the target + * to appear on (direction). It also sets the GenericPopUp's color to black, to differentiate itself from a menu. + */ +Item +{ + property alias text: innerLabel.text + property alias target: popUp.target + property alias direction: popUp.direction + + GenericPopUp + { + id: popUp + + // Which way should the pop-up point? Default is up, but will flip when required + direction: "up" + + // Use dark grey for info blurbs and white for context menus + color: UM.Theme.getColor("monitor_tooltip") + + contentItem: Item + { + id: contentWrapper + implicitWidth: childrenRect.width + implicitHeight: innerLabel.contentHeight + 2 * innerLabel.padding + Label + { + id: innerLabel + padding: 12 * screenScaleFactor // TODO: Theme! + text: "" + wrapMode: Text.WordWrap + width: 240 * screenScaleFactor // TODO: Theme! + color: UM.Theme.getColor("monitor_tooltip_text") + font: UM.Theme.getFont("default") + } + } + } + + function open() { + popUp.open() + } + function close() { + popUp.close() + } +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml new file mode 100644 index 0000000000..41b3a93a7b --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml @@ -0,0 +1,45 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import UM 1.3 as UM +import Cura 1.0 as Cura + +Component { + Item { + height: maximumHeight; + width: maximumWidth; + + Cura.NetworkMJPGImage { + id: cameraImage; + anchors { + horizontalCenter: parent.horizontalCenter; + verticalCenter: parent.verticalCenter; + } + Component.onCompleted: { + if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.cameraUrl != null) { + cameraImage.start(); + } + } + height: Math.floor((imageHeight === 0 ? 600 * screenScaleFactor : imageHeight) * width / imageWidth); + onVisibleChanged: { + if (visible) { + if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.cameraUrl != null) { + cameraImage.start(); + } + } else { + if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.cameraUrl != null) { + cameraImage.stop(); + } + } + } + source: { + if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.cameraUrl != null) { + return OutputDevice.activePrinter.cameraUrl; + } + } + width: Math.min(imageWidth === 0 ? 800 * screenScaleFactor : imageWidth, maximumWidth); + z: 1; + } + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml new file mode 100644 index 0000000000..a23b8ab0d3 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml @@ -0,0 +1,257 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import UM 1.3 as UM +import Cura 1.0 as Cura + +/** + * A Print Job Card is essentially just a filled-in Expandable Card item. All + * data within it is derived from being passed a printJob property. + * + * NOTE: For most labels, a fixed height with vertical alignment is used to make + * layouts more deterministic (like the fixed-size textboxes used in original + * mock-ups). This is also a stand-in for CSS's 'line-height' property. Denoted + * with '// FIXED-LINE-HEIGHT:'. + */ +Item +{ + id: base + + // The print job which all other data is derived from + property var printJob: null + + // If the printer is a cloud printer or not. Other items base their enabled state off of this boolean. In the future + // they might not need to though. + property bool cloudConnection: Cura.MachineManager.activeMachineIsUsingCloudConnection + + width: parent.width + height: childrenRect.height + + ExpandableCard + { + enabled: printJob != null + borderColor: printJob && printJob.configurationChanges.length !== 0 ? UM.Theme.getColor("warning") : UM.Theme.getColor("monitor_card_border") + headerItem: Row + { + height: 48 * screenScaleFactor // TODO: Theme! + anchors.left: parent.left + anchors.leftMargin: 24 * screenScaleFactor // TODO: Theme! + spacing: 18 * screenScaleFactor // TODO: Theme! + + MonitorPrintJobPreview + { + printJob: base.printJob + size: 32 * screenScaleFactor // TODO: Theme! + anchors.verticalCenter: parent.verticalCenter + } + + Item + { + anchors.verticalCenter: parent.verticalCenter + height: 18 * screenScaleFactor // TODO: Theme! + width: 216 * screenScaleFactor // TODO: Theme! (Should match column size) + Rectangle + { + color: UM.Theme.getColor("monitor_skeleton_loading") + width: Math.round(parent.width / 2) + height: parent.height + visible: !printJob + radius: 2 * screenScaleFactor // TODO: Theme! + } + Label + { + text: printJob && printJob.name ? printJob.name : "" + color: UM.Theme.getColor("monitor_text_primary") + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + visible: printJob + + // FIXED-LINE-HEIGHT: + height: parent.height + verticalAlignment: Text.AlignVCenter + } + } + + Item + { + anchors.verticalCenter: parent.verticalCenter + height: 18 * screenScaleFactor // TODO: Theme! + width: 216 * screenScaleFactor // TODO: Theme! (Should match column size) + Rectangle + { + color: UM.Theme.getColor("monitor_skeleton_loading") + width: Math.round(parent.width / 3) + height: parent.height + visible: !printJob + radius: 2 * screenScaleFactor // TODO: Theme! + } + Label + { + text: printJob ? OutputDevice.formatDuration(printJob.timeTotal) : "" + color: UM.Theme.getColor("monitor_text_primary") + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + visible: printJob + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + } + + Item + { + anchors.verticalCenter: parent.verticalCenter + height: 18 * screenScaleFactor // TODO: This should be childrenRect.height but QML throws warnings + width: childrenRect.width + + Rectangle + { + color: UM.Theme.getColor("monitor_skeleton_loading") + width: 72 * screenScaleFactor // TODO: Theme! + height: parent.height + visible: !printJob + radius: 2 * screenScaleFactor // TODO: Theme! + } + + Label + { + id: printerAssignmentLabel + anchors.verticalCenter: parent.verticalCenter + color: UM.Theme.getColor("monitor_text_primary") + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + text: { + if (printJob !== null) { + if (printJob.assignedPrinter == null) + { + if (printJob.state == "error") + { + return catalog.i18nc("@label", "Unavailable printer") + } + return catalog.i18nc("@label", "First available") + } + return printJob.assignedPrinter.name + } + return "" + } + visible: printJob + width: 120 * screenScaleFactor // TODO: Theme! + + // FIXED-LINE-HEIGHT: + height: parent.height + verticalAlignment: Text.AlignVCenter + } + + Row + { + id: printerFamilyPills + anchors + { + left: printerAssignmentLabel.right; + leftMargin: 12 // TODO: Theme! + verticalCenter: parent.verticalCenter + } + height: childrenRect.height + spacing: 6 // TODO: Theme! + visible: printJob + + Repeater + { + id: compatiblePills + delegate: MonitorPrinterPill + { + text: modelData + } + model: printJob ? printJob.compatibleMachineFamilies : [] + } + } + } + } + drawerItem: Row + { + anchors + { + left: parent.left + leftMargin: 74 * screenScaleFactor // TODO: Theme! + } + height: 108 * screenScaleFactor // TODO: Theme! + spacing: 18 * screenScaleFactor // TODO: Theme! + + MonitorPrinterConfiguration + { + id: printerConfiguration + anchors.verticalCenter: parent.verticalCenter + buildplate: catalog.i18nc("@label", "Glass") + configurations: + [ + base.printJob.configuration.extruderConfigurations[0], + base.printJob.configuration.extruderConfigurations[1] + ] + height: 72 * screenScaleFactor // TODO: Theme! + } + Label { + text: printJob && printJob.owner ? printJob.owner : "" + color: UM.Theme.getColor("monitor_text_primary") + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + anchors.top: printerConfiguration.top + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + } + } + + MonitorContextMenuButton + { + id: contextMenuButton + anchors + { + right: parent.right + rightMargin: 8 * screenScaleFactor // TODO: Theme! + top: parent.top + topMargin: 8 * screenScaleFactor // TODO: Theme! + } + width: 32 * screenScaleFactor // TODO: Theme! + height: 32 * screenScaleFactor // TODO: Theme! + enabled: !cloudConnection + onClicked: enabled ? contextMenu.switchPopupState() : {} + visible: + { + if (!printJob) { + return false + } + var states = ["queued", "error", "sent_to_printer", "pre_print", "printing", "pausing", "paused", "resuming"] + return states.indexOf(printJob.state) !== -1 + } + } + + MonitorContextMenu + { + id: contextMenu + printJob: base.printJob ? base.printJob : null + target: contextMenuButton + } + + // For cloud printing, add this mouse area over the disabled contextButton to indicate that it's not available + MouseArea + { + id: contextMenuDisabledButtonArea + anchors.fill: contextMenuButton + hoverEnabled: contextMenuButton.visible && !contextMenuButton.enabled + onEntered: contextMenuDisabledInfo.open() + onExited: contextMenuDisabledInfo.close() + enabled: !contextMenuButton.enabled + } + + MonitorInfoBlurb + { + id: contextMenuDisabledInfo + text: catalog.i18nc("@info", "These options are not available because you are monitoring a cloud printer.") + target: contextMenuButton + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobPreview.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobPreview.qml new file mode 100644 index 0000000000..a392571757 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobPreview.qml @@ -0,0 +1,101 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import UM 1.3 as UM + +// TODO: Documentation! +Item +{ + id: printJobPreview + + property var printJob: null + property var size: 256 + + width: size + height: size + + Rectangle + { + anchors.fill: parent + color: printJob ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading") + radius: 8 // TODO: Theme! + Image + { + id: previewImage + anchors.fill: parent + opacity: + { + if (printJob && (printJob.state == "error" || printJob.configurationChanges.length > 0 || !printJob.isActive)) + { + return 0.5 + } + return 1.0 + } + source: printJob ? printJob.previewImageUrl : "" + } + } + + + UM.RecolorImage + { + id: ultiBotImage + + anchors.centerIn: printJobPreview + color: UM.Theme.getColor("monitor_placeholder_image") + height: printJobPreview.height + source: "../svg/ultibot.svg" + sourceSize + { + height: height + width: width + } + /* Since print jobs ALWAYS have an image url, we have to check if that image URL errors or + not in order to determine if we show the placeholder (ultibot) image instead. */ + visible: printJob && previewImage.status == Image.Error + width: printJobPreview.width + } + + UM.RecolorImage + { + id: overlayIcon + anchors.centerIn: printJobPreview + color: UM.Theme.getColor("monitor_image_overlay") + height: 0.5 * printJobPreview.height + source: + { + if (!printJob) + { + return "" + } + if (printJob.configurationChanges.length > 0) + { + return "../svg/warning-icon.svg" + } + switch(printJob.state) + { + case "error": + return "../svg/aborted-icon.svg" + case "wait_cleanup": + return printJob.timeTotal > printJob.timeElapsed ? "../svg/aborted-icon.svg" : "" + case "pausing": + return "../svg/paused-icon.svg" + case "paused": + return "../svg/paused-icon.svg" + case "resuming": + return "../svg/paused-icon.svg" + default: + return "" + } + return "" + } + sourceSize + { + height: height + width: width + } + visible: source != "" + width: 0.5 * printJobPreview.width + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml new file mode 100644 index 0000000000..2ba70268b2 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml @@ -0,0 +1,119 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.3 +import QtQuick.Controls.Styles 1.3 +import QtQuick.Controls 1.4 +import UM 1.3 as UM + +/** + * NOTE: For most labels, a fixed height with vertical alignment is used to make + * layouts more deterministic (like the fixed-size textboxes used in original + * mock-ups). This is also a stand-in for CSS's 'line-height' property. Denoted + * with '// FIXED-LINE-HEIGHT:'. + */ +Item +{ + id: base + + // The print job which all other information is dervied from + property var printJob: null + + width: childrenRect.width + height: 18 * screenScaleFactor // TODO: Theme! + + ProgressBar + { + id: progressBar + anchors + { + verticalCenter: parent.verticalCenter + } + value: printJob ? printJob.progress : 0 + style: ProgressBarStyle + { + background: Rectangle + { + color: UM.Theme.getColor("monitor_progress_bar_empty") + implicitHeight: visible ? 12 * screenScaleFactor : 0 // TODO: Theme! + implicitWidth: 180 * screenScaleFactor // TODO: Theme! + radius: 2 * screenScaleFactor // TODO: Theme! + } + progress: Rectangle + { + id: progressItem; + color: printJob && printJob.isActive ? UM.Theme.getColor("monitor_progress_bar_fill") : UM.Theme.getColor("monitor_progress_bar_deactive") + radius: 2 * screenScaleFactor // TODO: Theme! + } + } + } + Label + { + id: percentLabel + anchors + { + left: progressBar.right + leftMargin: 18 * screenScaleFactor // TODO: Theme! + } + text: printJob ? Math.round(printJob.progress * 100) + "%" : "0%" + color: printJob && printJob.isActive ? UM.Theme.getColor("monitor_text_primary") : UM.Theme.getColor("monitor_text_disabled") + width: contentWidth + font: UM.Theme.getFont("medium") // 14pt, regular + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + Label + { + id: statusLabel + anchors + { + left: percentLabel.right + leftMargin: 18 * screenScaleFactor // TODO: Theme! + } + color: UM.Theme.getColor("monitor_text_primary") + font: UM.Theme.getFont("medium") // 14pt, regular + text: + { + if (!printJob) + { + return "" + } + switch (printJob.state) + { + case "wait_cleanup": + if (printJob.timeTotal > printJob.timeElapsed) + { + return catalog.i18nc("@label:status", "Aborted") + } + return catalog.i18nc("@label:status", "Finished") + case "finished": + return catalog.i18nc("@label:status", "Finished") + case "sent_to_printer": + return catalog.i18nc("@label:status", "Preparing...") + case "pre_print": + return catalog.i18nc("@label:status", "Preparing...") + case "aborting": // NOTE: Doesn't exist but maybe should someday + return catalog.i18nc("@label:status", "Aborting...") + case "aborted": // NOTE: Unused, see above + return catalog.i18nc("@label:status", "Aborted") + case "pausing": + return catalog.i18nc("@label:status", "Pausing...") + case "paused": + return catalog.i18nc("@label:status", "Paused") + case "resuming": + return catalog.i18nc("@label:status", "Resuming...") + case "queued": + return catalog.i18nc("@label:status", "Action required") + default: + return catalog.i18nc("@label:status", "Finishes %1 at %2".arg(OutputDevice.getDateCompleted( printJob.timeRemaining )).arg(OutputDevice.getTimeCompleted( printJob.timeRemaining ))) + } + } + width: contentWidth + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml new file mode 100644 index 0000000000..8c63e1ef1a --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml @@ -0,0 +1,453 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.3 +import QtQuick.Controls 2.0 +import QtQuick.Dialogs 1.1 +import UM 1.3 as UM +import Cura 1.0 as Cura + +/** + * A Printer Card is has two main components: the printer portion and the print job portion, the latter being paired in + * the UI when a print job is paired a printer in-cluster. + * + * NOTE: For most labels, a fixed height with vertical alignment is used to make layouts more deterministic (like the + * fixed-size textboxes used in original mock-ups). This is also a stand-in for CSS's 'line-height' property. Denoted + * with '// FIXED-LINE-HEIGHT:'. + */ +Item +{ + id: base + + // The printer which all printer data is derived from + property var printer: null + + property var borderSize: 1 * screenScaleFactor // TODO: Theme, and remove from here + + // If the printer card's controls are enabled. This is used by the carousel to prevent opening the context menu or + // camera while the printer card is not "in focus" + property var enabled: true + + // If the printer is a cloud printer or not. Other items base their enabled state off of this boolean. In the future + // they might not need to though. + property bool cloudConnection: Cura.MachineManager.activeMachineIsUsingCloudConnection + + width: 834 * screenScaleFactor // TODO: Theme! + height: childrenRect.height + + Rectangle + { + id: background + anchors.fill: parent + color: UM.Theme.getColor("monitor_card_background") + border + { + color: UM.Theme.getColor("monitor_card_border") + width: borderSize // TODO: Remove once themed + } + radius: 2 * screenScaleFactor // TODO: Theme! + } + + // Printer portion + Item + { + id: printerInfo + + width: parent.width + height: 144 * screenScaleFactor // TODO: Theme! + + Row + { + anchors + { + left: parent.left + leftMargin: 36 * screenScaleFactor // TODO: Theme! + verticalCenter: parent.verticalCenter + } + spacing: 18 * screenScaleFactor // TODO: Theme! + + Rectangle + { + id: printerImage + width: 108 * screenScaleFactor // TODO: Theme! + height: 108 * screenScaleFactor // TODO: Theme! + color: printer ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading") + radius: 8 // TODO: Theme! + Image + { + anchors.fill: parent + fillMode: Image.PreserveAspectFit + source: printer ? "../png/" + printer.type + ".png" : "" + mipmap: true + } + } + + + Item + { + anchors + { + verticalCenter: parent.verticalCenter + } + width: 180 * screenScaleFactor // TODO: Theme! + height: printerNameLabel.height + printerFamilyPill.height + 6 * screenScaleFactor // TODO: Theme! + + Rectangle + { + id: printerNameLabel + color: printer ? "transparent" : UM.Theme.getColor("monitor_skeleton_loading") + height: 18 * screenScaleFactor // TODO: Theme! + width: parent.width + radius: 2 * screenScaleFactor // TODO: Theme! + + Label + { + text: printer && printer.name ? printer.name : "" + color: UM.Theme.getColor("monitor_text_primary") + elide: Text.ElideRight + font: UM.Theme.getFont("large") // 16pt, bold + width: parent.width + visible: printer + + // FIXED-LINE-HEIGHT: + height: parent.height + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle + { + color: UM.Theme.getColor("monitor_skeleton_loading") + height: 18 * screenScaleFactor // TODO: Theme! + radius: 2 * screenScaleFactor // TODO: Theme! + visible: !printer + width: 48 * screenScaleFactor // TODO: Theme! + } + MonitorPrinterPill + { + id: printerFamilyPill + anchors + { + top: printerNameLabel.bottom + topMargin: 6 * screenScaleFactor // TODO: Theme! + left: printerNameLabel.left + } + text: printer ? printer.type : "" + } + } + + MonitorPrinterConfiguration + { + id: printerConfiguration + anchors.verticalCenter: parent.verticalCenter + buildplate: printer ? "Glass" : null // 'Glass' as a default + configurations: + { + var configs = [] + if (printer) + { + configs.push(printer.printerConfiguration.extruderConfigurations[0]) + configs.push(printer.printerConfiguration.extruderConfigurations[1]) + } + else + { + configs.push(null, null) + } + return configs + } + height: 72 * screenScaleFactor // TODO: Theme!te theRect's x property + } + } + + MonitorContextMenuButton + { + id: contextMenuButton + anchors + { + right: parent.right + rightMargin: 12 * screenScaleFactor // TODO: Theme! + top: parent.top + topMargin: 12 * screenScaleFactor // TODO: Theme! + } + width: 36 * screenScaleFactor // TODO: Theme! + height: 36 * screenScaleFactor // TODO: Theme! + enabled: !cloudConnection + + onClicked: enabled ? contextMenu.switchPopupState() : {} + visible: + { + if (!printer || !printer.activePrintJob) { + return false + } + var states = ["queued", "error", "sent_to_printer", "pre_print", "printing", "pausing", "paused", "resuming"] + return states.indexOf(printer.activePrintJob.state) !== -1 + } + } + + MonitorContextMenu + { + id: contextMenu + printJob: printer ? printer.activePrintJob : null + target: contextMenuButton + } + + // For cloud printing, add this mouse area over the disabled contextButton to indicate that it's not available + MouseArea + { + id: contextMenuDisabledButtonArea + anchors.fill: contextMenuButton + hoverEnabled: contextMenuButton.visible && !contextMenuButton.enabled + onEntered: contextMenuDisabledInfo.open() + onExited: contextMenuDisabledInfo.close() + enabled: !contextMenuButton.enabled + } + + MonitorInfoBlurb + { + id: contextMenuDisabledInfo + text: catalog.i18nc("@info", "These options are not available because you are monitoring a cloud printer.") + target: contextMenuButton + } + + CameraButton + { + id: cameraButton + anchors + { + right: parent.right + rightMargin: 20 * screenScaleFactor // TODO: Theme! + bottom: parent.bottom + bottomMargin: 20 * screenScaleFactor // TODO: Theme! + } + iconSource: "../svg/icons/camera.svg" + enabled: !cloudConnection + visible: printer + } + + // For cloud printing, add this mouse area over the disabled cameraButton to indicate that it's not available + MouseArea + { + id: cameraDisabledButtonArea + anchors.fill: cameraButton + hoverEnabled: cameraButton.visible && !cameraButton.enabled + onEntered: cameraDisabledInfo.open() + onExited: cameraDisabledInfo.close() + enabled: !cameraButton.enabled + } + + MonitorInfoBlurb + { + id: cameraDisabledInfo + text: catalog.i18nc("@info", "The webcam is not available because you are monitoring a cloud printer.") + target: cameraButton + } + } + + + // Divider + Rectangle + { + anchors + { + top: printJobInfo.top + left: printJobInfo.left + right: printJobInfo.right + } + height: borderSize // Remove once themed + color: background.border.color + } + + // Print job portion + Rectangle + { + id: printJobInfo + anchors + { + top: printerInfo.bottom + topMargin: -borderSize * screenScaleFactor // TODO: Theme! + } + border + { + color: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length > 0 ? UM.Theme.getColor("warning") : "transparent" // TODO: Theme! + width: borderSize // TODO: Remove once themed + } + color: "transparent" // TODO: Theme! + height: 84 * screenScaleFactor + borderSize // TODO: Remove once themed + width: parent.width + + Row + { + anchors + { + fill: parent + topMargin: 12 * screenScaleFactor + borderSize // TODO: Theme! + bottomMargin: 12 * screenScaleFactor // TODO: Theme! + leftMargin: 36 * screenScaleFactor // TODO: Theme! + } + height: childrenRect.height + spacing: 18 * screenScaleFactor // TODO: Theme! + + Label + { + id: printerStatus + anchors + { + verticalCenter: parent.verticalCenter + } + color: printer ? UM.Theme.getColor("monitor_text_primary") : UM.Theme.getColor("monitor_text_disabled") + font: UM.Theme.getFont("large_bold") // 16pt, bold + text: { + if (!printer) { + return catalog.i18nc("@label:status", "Loading...") + } + if (printer && printer.state == "disabled") + { + return catalog.i18nc("@label:status", "Unavailable") + } + if (printer && printer.state == "unreachable") + { + return catalog.i18nc("@label:status", "Unreachable") + } + if (printer && !printer.activePrintJob && printer.state == "idle") + { + return catalog.i18nc("@label:status", "Idle") + } + return "" + } + visible: text !== "" + } + + Item + { + anchors + { + verticalCenter: parent.verticalCenter + } + width: printerImage.width + height: 60 * screenScaleFactor // TODO: Theme! + MonitorPrintJobPreview + { + anchors.centerIn: parent + printJob: printer ? printer.activePrintJob : null + size: parent.height + } + visible: printer && printer.activePrintJob && !printerStatus.visible + } + + Item + { + anchors + { + verticalCenter: parent.verticalCenter + } + width: 180 * screenScaleFactor // TODO: Theme! + height: printerNameLabel.height + printerFamilyPill.height + 6 * screenScaleFactor // TODO: Theme! + visible: printer && printer.activePrintJob && !printerStatus.visible + + Label + { + id: printerJobNameLabel + color: printer && printer.activePrintJob && printer.activePrintJob.isActive ? UM.Theme.getColor("monitor_text_primary") : UM.Theme.getColor("monitor_text_disabled") + elide: Text.ElideRight + font: UM.Theme.getFont("large") // 16pt, bold + text: printer && printer.activePrintJob ? printer.activePrintJob.name : catalog.i18nc("@label", "Untitled") + width: parent.width + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + + Label + { + id: printerJobOwnerLabel + anchors + { + top: printerJobNameLabel.bottom + topMargin: 6 * screenScaleFactor // TODO: Theme! + left: printerJobNameLabel.left + } + color: printer && printer.activePrintJob && printer.activePrintJob.isActive ? UM.Theme.getColor("monitor_text_primary") : UM.Theme.getColor("monitor_text_disabled") + elide: Text.ElideRight + font: UM.Theme.getFont("default") // 12pt, regular + text: printer && printer.activePrintJob ? printer.activePrintJob.owner : catalog.i18nc("@label", "Anonymous") + width: parent.width + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + } + + MonitorPrintJobProgressBar + { + anchors + { + verticalCenter: parent.verticalCenter + } + printJob: printer && printer.activePrintJob + visible: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length === 0 && !printerStatus.visible + } + + Label + { + anchors + { + verticalCenter: parent.verticalCenter + } + font: UM.Theme.getFont("default") + text: catalog.i18nc("@label:status", "Requires configuration changes") + visible: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length > 0 && !printerStatus.visible + color: UM.Theme.getColor("monitor_text_primary") + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + } + + Button + { + id: detailsButton + anchors + { + verticalCenter: parent.verticalCenter + right: parent.right + rightMargin: 18 * screenScaleFactor // TODO: Theme! + } + background: Rectangle + { + color: UM.Theme.getColor("monitor_secondary_button_shadow") + radius: 2 * screenScaleFactor // Todo: Theme! + Rectangle + { + anchors.fill: parent + anchors.bottomMargin: 2 * screenScaleFactor // TODO: Theme! + color: detailsButton.hovered ? UM.Theme.getColor("monitor_secondary_button_hover") : UM.Theme.getColor("monitor_secondary_button") + radius: 2 * screenScaleFactor // Todo: Theme! + } + } + contentItem: Label + { + anchors.fill: parent + anchors.bottomMargin: 2 * screenScaleFactor // TODO: Theme! + color: UM.Theme.getColor("monitor_secondary_button_text") + font: UM.Theme.getFont("medium") // 14pt, regular + text: catalog.i18nc("@action:button","Details"); + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + height: 18 * screenScaleFactor // TODO: Theme! + } + implicitHeight: 32 * screenScaleFactor // TODO: Theme! + implicitWidth: 96 * screenScaleFactor // TODO: Theme! + visible: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length > 0 && !printerStatus.visible + onClicked: base.enabled ? overrideConfirmationDialog.open() : {} + } + } + + MonitorConfigOverrideDialog + { + id: overrideConfirmationDialog + printer: base.printer + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterConfiguration.qml new file mode 100644 index 0000000000..dbe085e18e --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterConfiguration.qml @@ -0,0 +1,58 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import UM 1.3 as UM + +/** + * The MonitorPrinterConfiguration accepts 2 configuration objects as input and + * applies them to a MonitorBuildplateConfiguration instance and two instances + * of MonitorExtruderConfiguration. It's used in both the MonitorPrintJobCard + * component as well as the MonitorPrinterCard component. + */ +Item +{ + id: base + + // Extracted buildplate configuration + property alias buildplate: buildplateConfig.buildplate + + // Array of extracted extruder configurations + property var configurations: [null,null] + + // Default size, but should be stretched to fill parent + height: 72 * parent.height + width: 450 * screenScaleFactor // TODO: Theme! + + Row + { + id: extruderConfigurationRow + spacing: 18 * screenScaleFactor // TODO: Theme! + + Repeater + { + id: extruderConfigurationRepeater + model: configurations + + MonitorExtruderConfiguration + { + color: modelData && modelData.activeMaterial ? modelData.activeMaterial.color : UM.Theme.getColor("monitor_skeleton_loading") + material: modelData && modelData.activeMaterial ? modelData.activeMaterial.name : "" + position: modelData && typeof(modelData.position) === "number" ? modelData.position : -1 // Use negative one to create empty extruder number + printCore: modelData ? modelData.hotendID : "" + + // Keep things responsive! + width: Math.floor((base.width - (configurations.length - 1) * extruderConfigurationRow.spacing) / configurations.length) + } + + } + } + + MonitorBuildplateConfiguration + { + id: buildplateConfig + anchors.bottom: parent.bottom + buildplate: null + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterPill.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterPill.qml new file mode 100644 index 0000000000..2aeecd5a92 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterPill.qml @@ -0,0 +1,47 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import UM 1.2 as UM + +/** + * A MonitorPrinterPill is a blue-colored tag indicating which printers a print + * job is compatible with. It is used by the MonitorPrintJobCard component. + */ +Item +{ + // The printer name + property var text: "" + property var tagText: { + switch(text) { + case "Ultimaker 3": + return "UM 3" + case "Ultimaker 3 Extended": + return "UM 3 EXT" + case "Ultimaker S5": + return "UM S5" + default: + return text + } + } + + implicitHeight: 18 * screenScaleFactor // TODO: Theme! + implicitWidth: Math.max(printerNameLabel.contentWidth + 12 * screenScaleFactor, 36 * screenScaleFactor) // TODO: Theme! + + Rectangle { + id: background + anchors.fill: parent + color: printerNameLabel.visible ? UM.Theme.getColor("monitor_printer_family_tag") : UM.Theme.getColor("monitor_skeleton_loading") + radius: 2 * screenScaleFactor // TODO: Theme! + } + + Label { + id: printerNameLabel + anchors.centerIn: parent + color: UM.Theme.getColor("monitor_text_primary") + text: tagText + font.pointSize: 10 // TODO: Theme! + visible: text !== "" + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml new file mode 100644 index 0000000000..6eaff20f71 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml @@ -0,0 +1,266 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import UM 1.3 as UM +import Cura 1.0 as Cura + +/** + * This component contains the print job queue, extracted from the primary + * MonitorStage.qml file not for reusability but simply to keep it lean and more + * readable. + */ +Item +{ + // If the printer is a cloud printer or not. Other items base their enabled state off of this boolean. In the future + // they might not need to though. + property bool cloudConnection: Cura.MachineManager.activeMachineIsUsingCloudConnection + + Label + { + id: queuedLabel + anchors + { + left: queuedPrintJobs.left + top: parent.top + } + color: UM.Theme.getColor("monitor_text_primary") + font: UM.Theme.getFont("large") + text: catalog.i18nc("@label", "Queued") + } + + Item + { + id: manageQueueLabel + anchors + { + right: queuedPrintJobs.right + verticalCenter: queuedLabel.verticalCenter + } + height: 18 * screenScaleFactor // TODO: Theme! + width: childrenRect.width + visible: !cloudConnection + + UM.RecolorImage + { + id: externalLinkIcon + anchors.verticalCenter: manageQueueLabel.verticalCenter + color: UM.Theme.getColor("monitor_text_link") + source: UM.Theme.getIcon("external_link") + width: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!) + height: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!) + } + Label + { + id: manageQueueText + anchors + { + left: externalLinkIcon.right + leftMargin: 6 * screenScaleFactor // TODO: Theme! + verticalCenter: externalLinkIcon.verticalCenter + } + color: UM.Theme.getColor("monitor_text_link") + font: UM.Theme.getFont("medium") // 14pt, regular + linkColor: UM.Theme.getColor("monitor_text_link") + text: catalog.i18nc("@label link to connect manager", "Go to Cura Connect") + renderType: Text.NativeRendering + } + } + + MouseArea + { + anchors.fill: manageQueueLabel + enabled: !cloudConnection + hoverEnabled: !cloudConnection + onClicked: Cura.MachineManager.printerOutputDevices[0].openPrintJobControlPanel() + onEntered: + { + manageQueueText.font.underline = true + } + onExited: + { + manageQueueText.font.underline = false + } + } + + Row + { + id: printJobQueueHeadings + anchors + { + left: queuedPrintJobs.left + leftMargin: 6 * screenScaleFactor // TODO: Theme! + top: queuedLabel.bottom + topMargin: 24 * screenScaleFactor // TODO: Theme! + } + spacing: 18 * screenScaleFactor // TODO: Theme! + + Label + { + text: catalog.i18nc("@label", "Print jobs") + color: UM.Theme.getColor("monitor_text_primary") + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + anchors.verticalCenter: parent.verticalCenter + width: 284 * screenScaleFactor // TODO: Theme! (Should match column size) + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + + Label + { + text: catalog.i18nc("@label", "Total print time") + color: UM.Theme.getColor("monitor_text_primary") + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + anchors.verticalCenter: parent.verticalCenter + width: 216 * screenScaleFactor // TODO: Theme! (Should match column size) + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + + Label + { + text: catalog.i18nc("@label", "Waiting for") + color: UM.Theme.getColor("monitor_text_primary") + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + anchors.verticalCenter: parent.verticalCenter + width: 216 * screenScaleFactor // TODO: Theme! (Should match column size) + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + } + + ScrollView + { + id: queuedPrintJobs + anchors + { + bottom: parent.bottom + horizontalCenter: parent.horizontalCenter + top: printJobQueueHeadings.bottom + topMargin: 12 * screenScaleFactor // TODO: Theme! + } + style: UM.Theme.styles.scrollview + width: parent.width + + ListView + { + id: printJobList + anchors.fill: parent + delegate: MonitorPrintJobCard + { + anchors + { + left: parent.left + right: parent.right + } + printJob: modelData + } + model: + { + // When printing over the cloud we don't recieve print jobs until there is one, so + // unless there's at least one print job we'll be stuck with skeleton loading + // indefinitely. + if (Cura.MachineManager.activeMachineIsUsingCloudConnection || OutputDevice.receivedPrintJobs) + { + return OutputDevice.queuedPrintJobs + } + return [null, null] + } + spacing: 6 // TODO: Theme! + } + } + + Rectangle + { + anchors + { + horizontalCenter: parent.horizontalCenter + top: printJobQueueHeadings.bottom + topMargin: 12 * screenScaleFactor // TODO: Theme! + } + height: 48 * screenScaleFactor // TODO: Theme! + width: parent.width + color: UM.Theme.getColor("monitor_card_background") + border.color: UM.Theme.getColor("monitor_card_border") + radius: 2 * screenScaleFactor // TODO: Theme! + + visible: printJobList.model.length == 0 + + Row + { + anchors + { + left: parent.left + leftMargin: 18 * screenScaleFactor // TODO: Theme! + verticalCenter: parent.verticalCenter + } + spacing: 18 * screenScaleFactor // TODO: Theme! + height: 18 * screenScaleFactor // TODO: Theme! + + Label + { + text: "All jobs are printed." + color: UM.Theme.getColor("monitor_text_primary") + font: UM.Theme.getFont("medium") // 14pt, regular + } + + Item + { + id: viewPrintHistoryLabel + + height: 18 * screenScaleFactor // TODO: Theme! + width: childrenRect.width + + UM.RecolorImage + { + id: printHistoryIcon + anchors.verticalCenter: parent.verticalCenter + color: UM.Theme.getColor("monitor_text_link") + source: UM.Theme.getIcon("external_link") + width: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!) + height: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!) + } + Label + { + id: viewPrintHistoryText + anchors + { + left: printHistoryIcon.right + leftMargin: 6 * screenScaleFactor // TODO: Theme! + verticalCenter: printHistoryIcon.verticalCenter + } + color: UM.Theme.getColor("monitor_text_link") + font: UM.Theme.getFont("medium") // 14pt, regular + linkColor: UM.Theme.getColor("monitor_text_link") + text: catalog.i18nc("@label link to connect manager", "View print history") + renderType: Text.NativeRendering + } + MouseArea + { + anchors.fill: parent + hoverEnabled: true + onClicked: Cura.MachineManager.printerOutputDevices[0].openPrintJobControlPanel() + onEntered: + { + viewPrintHistoryText.font.underline = true + } + onExited: + { + viewPrintHistoryText.font.underline = false + } + } + } + } + } +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorStage.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorStage.qml new file mode 100644 index 0000000000..59cbda7172 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorStage.qml @@ -0,0 +1,77 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import UM 1.3 as UM +import Cura 1.0 as Cura +import QtGraphicalEffects 1.0 + +// This is the root component for the monitor stage. +Component +{ + Rectangle + { + id: monitorFrame + + height: maximumHeight + onVisibleChanged: + { + if (monitorFrame != null && !monitorFrame.visible) + { + OutputDevice.setActiveCameraUrl("") + } + } + width: maximumWidth + color: UM.Theme.getColor("monitor_stage_background") + + // Enable keyboard navigation. NOTE: This is done here so that we can also potentially + // forward to the queue items in the future. (Deleting selected print job, etc.) + Keys.forwardTo: carousel + Component.onCompleted: forceActiveFocus() + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + Item + { + id: printers + anchors + { + top: parent.top + topMargin: 48 * screenScaleFactor // TODO: Theme! + } + width: parent.width + height: 264 * screenScaleFactor // TODO: Theme! + MonitorCarousel + { + id: carousel + printers: OutputDevice.receivedPrintJobs ? OutputDevice.printers : [null] + } + } + + MonitorQueue + { + id: queue + width: Math.min(834 * screenScaleFactor, maximumWidth) + anchors + { + bottom: parent.bottom + horizontalCenter: parent.horizontalCenter + top: printers.bottom + topMargin: 48 * screenScaleFactor // TODO: Theme! + } + } + + PrinterVideoStream + { + anchors.fill: parent + cameraUrl: OutputDevice.activeCameraUrl + visible: OutputDevice.activeCameraUrl != "" + } + } +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml new file mode 100644 index 0000000000..67c82db320 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml @@ -0,0 +1,23 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import QtQuick.Controls.Styles 1.4 +import UM 1.3 as UM + +Button { + background: Rectangle { + opacity: parent.down || parent.hovered ? 1 : 0; + color: UM.Theme.getColor("monitor_context_menu_hover") + } + contentItem: Label { + color: enabled ? UM.Theme.getColor("monitor_text_primary") : UM.Theme.getColor("monitor_text_disabled"); + text: parent.text + horizontalAlignment: Text.AlignLeft; + verticalAlignment: Text.AlignVCenter; + } + height: visible ? 39 * screenScaleFactor : 0; // TODO: Theme! + hoverEnabled: true; + width: parent.width; +} \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml new file mode 100644 index 0000000000..c2590e99a8 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml @@ -0,0 +1,103 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Window 2.2 +import QtQuick.Controls 1.2 +import UM 1.1 as UM + +UM.Dialog { + id: base; + height: minimumHeight; + leftButtons: [ + Button { + enabled: true; + onClicked: { + base.visible = false; + printerSelectionCombobox.currentIndex = 0; + OutputDevice.cancelPrintSelection(); + } + text: catalog.i18nc("@action:button","Cancel"); + } + ] + maximumHeight: minimumHeight; + maximumWidth: minimumWidth; + minimumHeight: 140 * screenScaleFactor; + minimumWidth: 500 * screenScaleFactor; + modality: Qt.ApplicationModal; + onVisibleChanged: { + if (visible) { + resetPrintersModel(); + } else { + OutputDevice.cancelPrintSelection(); + } + } + rightButtons: [ + Button { + enabled: true; + onClicked: { + base.visible = false; + OutputDevice.selectPrinter(printerSelectionCombobox.model.get(printerSelectionCombobox.currentIndex).key); + // reset to defaults + printerSelectionCombobox.currentIndex = 0; + } + text: catalog.i18nc("@action:button","Print"); + } + ] + title: catalog.i18nc("@title:window", "Print over network"); + visible: true; + width: minimumWidth; + + Column { + id: printerSelection; + anchors { + fill: parent; + leftMargin: UM.Theme.getSize("default_margin").width; + rightMargin: UM.Theme.getSize("default_margin").width; + top: parent.top; + topMargin: UM.Theme.getSize("default_margin").height; + } + height: 50 * screenScaleFactor; + + SystemPalette { + id: palette; + } + + UM.I18nCatalog { + id: catalog; + name: "cura"; + } + + Label { + id: manualPrinterSelectionLabel; + anchors { + left: parent.left; + right: parent.right; + topMargin: UM.Theme.getSize("default_margin").height; + } + height: 20 * screenScaleFactor; + text: catalog.i18nc("@label", "Printer selection"); + wrapMode: Text.Wrap; + } + + ComboBox { + id: printerSelectionCombobox; + Behavior on height { NumberAnimation { duration: 100 } } + height: 40 * screenScaleFactor; + model: ListModel { + id: printersModel; + } + textRole: "name"; + width: parent.width; + } + } + + // Utils + function resetPrintersModel() { + printersModel.clear(); + printersModel.append({ name: "Automatic", key: ""}); + for (var index in OutputDevice.printers) { + printersModel.append({name: OutputDevice.printers[index].name, key: OutputDevice.printers[index].key}); + } + } +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml new file mode 100644 index 0000000000..77b481f6d8 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml @@ -0,0 +1,65 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import UM 1.3 as UM +import Cura 1.0 as Cura + +Item { + property var cameraUrl: ""; + + Rectangle { + anchors.fill:parent; + color: UM.Theme.getColor("viewport_overlay"); + opacity: 0.5; + } + + MouseArea { + anchors.fill: parent; + onClicked: OutputDevice.setActiveCameraUrl(""); + z: 0; + } + + CameraButton { + id: closeCameraButton; + anchors { + right: cameraImage.right + rightMargin: UM.Theme.getSize("default_margin").width + top: cameraImage.top + topMargin: UM.Theme.getSize("default_margin").height + } + iconSource: UM.Theme.getIcon("cross1"); + z: 999; + } + + Cura.NetworkMJPGImage { + id: cameraImage + anchors.horizontalCenter: parent.horizontalCenter; + anchors.verticalCenter: parent.verticalCenter; + height: Math.round((imageHeight === 0 ? 600 * screenScaleFactor : imageHeight) * width / imageWidth); + onVisibleChanged: { + if (visible) { + if (cameraUrl != "") { + start(); + } + } else { + if (cameraUrl != "") { + stop(); + } + } + } + source: cameraUrl + width: Math.min(imageWidth === 0 ? 800 * screenScaleFactor : imageWidth, maximumWidth); + z: 1 + } + + MouseArea { + anchors.fill: cameraImage; + onClicked: { + OutputDevice.setActiveCameraUrl(""); + } + z: 1; + } +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml b/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml new file mode 100644 index 0000000000..c99ed1688e --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml @@ -0,0 +1,93 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 +import QtQuick.Layouts 1.1 +import QtQuick.Window 2.1 +import UM 1.2 as UM +import Cura 1.0 as Cura + +Item { + id: base; + property string activeQualityDefinitionId: Cura.MachineManager.activeQualityDefinitionId; + property bool isUM3: activeQualityDefinitionId == "ultimaker3" || activeQualityDefinitionId.match("ultimaker_") != null; + property bool printerConnected: Cura.MachineManager.printerConnected; + property bool printerAcceptsCommands: + { + if (printerConnected && Cura.MachineManager.printerOutputDevices[0]) + { + return Cura.MachineManager.printerOutputDevices[0].acceptsCommands + } + return false + } + property bool authenticationRequested: + { + if (printerConnected && Cura.MachineManager.printerOutputDevices[0]) + { + var device = Cura.MachineManager.printerOutputDevices[0] + // AuthState.AuthenticationRequested or AuthState.AuthenticationReceived + return device.authenticationState == 2 || device.authenticationState == 5 + } + return false + } + property var materialNames: + { + if (printerConnected && Cura.MachineManager.printerOutputDevices[0]) + { + return Cura.MachineManager.printerOutputDevices[0].materialNames + } + return null + } + property var hotendIds: + { + if (printerConnected && Cura.MachineManager.printerOutputDevices[0]) + { + return Cura.MachineManager.printerOutputDevices[0].hotendIds + } + return null + } + + UM.I18nCatalog { + id: catalog; + name: "cura"; + } + + Row { + objectName: "networkPrinterConnectButton"; + spacing: UM.Theme.getSize("default_margin").width; + visible: isUM3; + + Button { + height: UM.Theme.getSize("save_button_save_to_button").height; + onClicked: Cura.MachineManager.printerOutputDevices[0].requestAuthentication(); + style: UM.Theme.styles.print_setup_action_button; + text: catalog.i18nc("@action:button", "Request Access"); + tooltip: catalog.i18nc("@info:tooltip", "Send access request to the printer"); + visible: printerConnected && !printerAcceptsCommands && !authenticationRequested; + } + + Button { + height: UM.Theme.getSize("save_button_save_to_button").height; + onClicked: connectActionDialog.show(); + style: UM.Theme.styles.print_setup_action_button; + text: catalog.i18nc("@action:button", "Connect"); + tooltip: catalog.i18nc("@info:tooltip", "Connect to a printer"); + visible: !printerConnected; + } + } + + UM.Dialog { + id: connectActionDialog; + rightButtons: Button { + iconName: "dialog-close"; + onClicked: connectActionDialog.reject(); + text: catalog.i18nc("@action:button", "Close"); + } + + Loader { + anchors.fill: parent; + source: "DiscoverUM3Action.qml"; + } + } +} diff --git a/plugins/UM3NetworkPrinting/resources/svg/UM3-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/UM3-icon.svg new file mode 100644 index 0000000000..6b5d4e4895 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/UM3-icon.svg @@ -0,0 +1 @@ +UM3-icon \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/svg/UM3x-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/UM3x-icon.svg new file mode 100644 index 0000000000..3708173dc5 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/UM3x-icon.svg @@ -0,0 +1 @@ +UM3x-icon \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/svg/UMs5-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/UMs5-icon.svg new file mode 100644 index 0000000000..78437465b3 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/UMs5-icon.svg @@ -0,0 +1 @@ +UMs5-icon \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/svg/aborted-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/aborted-icon.svg new file mode 100644 index 0000000000..7ef82c8911 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/aborted-icon.svg @@ -0,0 +1 @@ +aborted-icon \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/action-required-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/action-required-icon.svg similarity index 100% rename from plugins/UM3NetworkPrinting/action-required-icon.svg rename to plugins/UM3NetworkPrinting/resources/svg/action-required-icon.svg diff --git a/plugins/UM3NetworkPrinting/resources/svg/approved-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/approved-icon.svg new file mode 100644 index 0000000000..671957d709 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/approved-icon.svg @@ -0,0 +1 @@ +approved-icon \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/blocked-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/blocked-icon.svg similarity index 100% rename from plugins/UM3NetworkPrinting/blocked-icon.svg rename to plugins/UM3NetworkPrinting/resources/svg/blocked-icon.svg diff --git a/plugins/UM3NetworkPrinting/resources/svg/camera-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/camera-icon.svg new file mode 100644 index 0000000000..66bed04508 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/camera-icon.svg @@ -0,0 +1,8 @@ + + + Created with Sketch. + + + + + \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/checkmark-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/checkmark-icon.svg similarity index 100% rename from plugins/UM3NetworkPrinting/checkmark-icon.svg rename to plugins/UM3NetworkPrinting/resources/svg/checkmark-icon.svg diff --git a/plugins/UM3NetworkPrinting/resources/svg/cloud-flow-completed.svg b/plugins/UM3NetworkPrinting/resources/svg/cloud-flow-completed.svg new file mode 100644 index 0000000000..8eba62ecc8 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/cloud-flow-completed.svg @@ -0,0 +1,27 @@ + + + + Group 2 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/svg/cloud-flow-start.svg b/plugins/UM3NetworkPrinting/resources/svg/cloud-flow-start.svg new file mode 100644 index 0000000000..746dc269fd --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/cloud-flow-start.svg @@ -0,0 +1,13 @@ + + + + Cloud_connection-icon + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/svg/icons/buildplate.svg b/plugins/UM3NetworkPrinting/resources/svg/icons/buildplate.svg new file mode 100644 index 0000000000..bcb278a8ca --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/icons/buildplate.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/svg/icons/camera.svg b/plugins/UM3NetworkPrinting/resources/svg/icons/camera.svg new file mode 100644 index 0000000000..2eaebb812d --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/icons/camera.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/svg/icons/extruder.svg b/plugins/UM3NetworkPrinting/resources/svg/icons/extruder.svg new file mode 100644 index 0000000000..235cb432e9 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/icons/extruder.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/svg/paused-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/paused-icon.svg new file mode 100644 index 0000000000..a66217d662 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/paused-icon.svg @@ -0,0 +1 @@ +paused-icon \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/svg/ultibot.svg b/plugins/UM3NetworkPrinting/resources/svg/ultibot.svg new file mode 100644 index 0000000000..be6ca64723 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/ultibot.svg @@ -0,0 +1 @@ +logobot-placeholder \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/svg/warning-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/warning-icon.svg new file mode 100644 index 0000000000..064d0783e0 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/warning-icon.svg @@ -0,0 +1,4 @@ + + warning-icon + + \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py new file mode 100644 index 0000000000..adff94bbbc --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py @@ -0,0 +1,167 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import json +from json import JSONDecodeError +from time import time +from typing import Callable, List, Type, TypeVar, Union, Optional, Tuple, Dict, Any, cast + +from PyQt5.QtCore import QUrl +from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManager + +from UM.Logger import Logger +from cura import UltimakerCloudAuthentication +from cura.API import Account +from .ToolPathUploader import ToolPathUploader +from ..Models import BaseModel +from .Models.CloudClusterResponse import CloudClusterResponse +from .Models.CloudError import CloudError +from .Models.CloudClusterStatus import CloudClusterStatus +from .Models.CloudPrintJobUploadRequest import CloudPrintJobUploadRequest +from .Models.CloudPrintResponse import CloudPrintResponse +from .Models.CloudPrintJobResponse import CloudPrintJobResponse + + +## The generic type variable used to document the methods below. +CloudApiClientModel = TypeVar("CloudApiClientModel", bound = BaseModel) + + +## The cloud API client is responsible for handling the requests and responses from the cloud. +# Each method should only handle models instead of exposing Any HTTP details. +class CloudApiClient: + + # The cloud URL to use for this remote cluster. + ROOT_PATH = UltimakerCloudAuthentication.CuraCloudAPIRoot + CLUSTER_API_ROOT = "{}/connect/v1".format(ROOT_PATH) + CURA_API_ROOT = "{}/cura/v1".format(ROOT_PATH) + + ## Initializes a new cloud API client. + # \param account: The user's account object + # \param on_error: The callback to be called whenever we receive errors from the server. + def __init__(self, account: Account, on_error: Callable[[List[CloudError]], None]) -> None: + super().__init__() + self._manager = QNetworkAccessManager() + self._account = account + self._on_error = on_error + self._upload = None # type: Optional[ToolPathUploader] + # In order to avoid garbage collection we keep the callbacks in this list. + self._anti_gc_callbacks = [] # type: List[Callable[[], None]] + + ## Gets the account used for the API. + @property + def account(self) -> Account: + return self._account + + ## Retrieves all the clusters for the user that is currently logged in. + # \param on_finished: The function to be called after the result is parsed. + def getClusters(self, on_finished: Callable[[List[CloudClusterResponse]], Any]) -> None: + url = "{}/clusters".format(self.CLUSTER_API_ROOT) + reply = self._manager.get(self._createEmptyRequest(url)) + self._addCallback(reply, on_finished, CloudClusterResponse) + + ## Retrieves the status of the given cluster. + # \param cluster_id: The ID of the cluster. + # \param on_finished: The function to be called after the result is parsed. + def getClusterStatus(self, cluster_id: str, on_finished: Callable[[CloudClusterStatus], Any]) -> None: + url = "{}/clusters/{}/status".format(self.CLUSTER_API_ROOT, cluster_id) + reply = self._manager.get(self._createEmptyRequest(url)) + self._addCallback(reply, on_finished, CloudClusterStatus) + + ## Requests the cloud to register the upload of a print job mesh. + # \param request: The request object. + # \param on_finished: The function to be called after the result is parsed. + def requestUpload(self, request: CloudPrintJobUploadRequest, on_finished: Callable[[CloudPrintJobResponse], Any] + ) -> None: + url = "{}/jobs/upload".format(self.CURA_API_ROOT) + body = json.dumps({"data": request.toDict()}) + reply = self._manager.put(self._createEmptyRequest(url), body.encode()) + self._addCallback(reply, on_finished, CloudPrintJobResponse) + + ## Uploads a print job tool path to the cloud. + # \param print_job: The object received after requesting an upload with `self.requestUpload`. + # \param mesh: The tool path data to be uploaded. + # \param on_finished: The function to be called after the upload is successful. + # \param on_progress: A function to be called during upload progress. It receives a percentage (0-100). + # \param on_error: A function to be called if the upload fails. + def uploadToolPath(self, print_job: CloudPrintJobResponse, mesh: bytes, on_finished: Callable[[], Any], + on_progress: Callable[[int], Any], on_error: Callable[[], Any]): + self._upload = ToolPathUploader(self._manager, print_job, mesh, on_finished, on_progress, on_error) + self._upload.start() + + # Requests a cluster to print the given print job. + # \param cluster_id: The ID of the cluster. + # \param job_id: The ID of the print job. + # \param on_finished: The function to be called after the result is parsed. + def requestPrint(self, cluster_id: str, job_id: str, on_finished: Callable[[CloudPrintResponse], Any]) -> None: + url = "{}/clusters/{}/print/{}".format(self.CLUSTER_API_ROOT, cluster_id, job_id) + reply = self._manager.post(self._createEmptyRequest(url), b"") + self._addCallback(reply, on_finished, CloudPrintResponse) + + ## We override _createEmptyRequest in order to add the user credentials. + # \param url: The URL to request + # \param content_type: The type of the body contents. + def _createEmptyRequest(self, path: str, content_type: Optional[str] = "application/json") -> QNetworkRequest: + request = QNetworkRequest(QUrl(path)) + if content_type: + request.setHeader(QNetworkRequest.ContentTypeHeader, content_type) + access_token = self._account.accessToken + if access_token: + request.setRawHeader(b"Authorization", "Bearer {}".format(access_token).encode()) + return request + + ## Parses the given JSON network reply into a status code and a dictionary, handling unexpected errors as well. + # \param reply: The reply from the server. + # \return A tuple with a status code and a dictionary. + @staticmethod + def _parseReply(reply: QNetworkReply) -> Tuple[int, Dict[str, Any]]: + status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) + try: + response = bytes(reply.readAll()).decode() + return status_code, json.loads(response) + except (UnicodeDecodeError, JSONDecodeError, ValueError) as err: + error = CloudError(code=type(err).__name__, title=str(err), http_code=str(status_code), + id=str(time()), http_status="500") + Logger.logException("e", "Could not parse the stardust response: %s", error.toDict()) + return status_code, {"errors": [error.toDict()]} + + ## Parses the given models and calls the correct callback depending on the result. + # \param response: The response from the server, after being converted to a dict. + # \param on_finished: The callback in case the response is successful. + # \param model_class: The type of the model to convert the response to. It may either be a single record or a list. + def _parseModels(self, response: Dict[str, Any], + on_finished: Union[Callable[[CloudApiClientModel], Any], + Callable[[List[CloudApiClientModel]], Any]], + model_class: Type[CloudApiClientModel]) -> None: + if "data" in response: + data = response["data"] + if isinstance(data, list): + results = [model_class(**c) for c in data] # type: List[CloudApiClientModel] + on_finished_list = cast(Callable[[List[CloudApiClientModel]], Any], on_finished) + on_finished_list(results) + else: + result = model_class(**data) # type: CloudApiClientModel + on_finished_item = cast(Callable[[CloudApiClientModel], Any], on_finished) + on_finished_item(result) + elif "errors" in response: + self._on_error([CloudError(**error) for error in response["errors"]]) + else: + Logger.log("e", "Cannot find data or errors in the cloud response: %s", response) + + ## Creates a callback function so that it includes the parsing of the response into the correct model. + # The callback is added to the 'finished' signal of the reply. + # \param reply: The reply that should be listened to. + # \param on_finished: The callback in case the response is successful. Depending on the endpoint it will be either + # a list or a single item. + # \param model: The type of the model to convert the response to. + def _addCallback(self, + reply: QNetworkReply, + on_finished: Union[Callable[[CloudApiClientModel], Any], + Callable[[List[CloudApiClientModel]], Any]], + model: Type[CloudApiClientModel], + ) -> None: + def parse() -> None: + status_code, response = self._parseReply(reply) + self._anti_gc_callbacks.remove(parse) + return self._parseModels(response, on_finished, model) + + self._anti_gc_callbacks.append(parse) + reply.finished.connect(parse) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputController.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputController.py new file mode 100644 index 0000000000..bd56ef3185 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputController.py @@ -0,0 +1,22 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from cura.PrinterOutput.PrinterOutputController import PrinterOutputController + +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from .CloudOutputDevice import CloudOutputDevice + + +class CloudOutputController(PrinterOutputController): + def __init__(self, output_device: "CloudOutputDevice") -> None: + super().__init__(output_device) + + # The cloud connection only supports fetching the printer and queue status and adding a job to the queue. + # To let the UI know this we mark all features below as False. + self.can_pause = False + self.can_abort = False + self.can_pre_heat_bed = False + self.can_pre_heat_hotends = False + self.can_send_raw_gcode = False + self.can_control_manually = False + self.can_update_firmware = False diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py new file mode 100644 index 0000000000..7b5add276a --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py @@ -0,0 +1,435 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import os + +from time import time +from typing import Dict, List, Optional, Set, cast + +from PyQt5.QtCore import QObject, QUrl, pyqtProperty, pyqtSignal, pyqtSlot + +from UM import i18nCatalog +from UM.Backend.Backend import BackendState +from UM.FileHandler.FileHandler import FileHandler +from UM.Logger import Logger +from UM.Message import Message +from UM.Qt.Duration import Duration, DurationFormat +from UM.Scene.SceneNode import SceneNode +from cura.CuraApplication import CuraApplication +from cura.PrinterOutput.NetworkedPrinterOutputDevice import AuthState, NetworkedPrinterOutputDevice +from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel +from cura.PrinterOutputDevice import ConnectionType + +from .CloudOutputController import CloudOutputController +from ..MeshFormatHandler import MeshFormatHandler +from ..UM3PrintJobOutputModel import UM3PrintJobOutputModel +from .CloudProgressMessage import CloudProgressMessage +from .CloudApiClient import CloudApiClient +from .Models.CloudClusterResponse import CloudClusterResponse +from .Models.CloudClusterStatus import CloudClusterStatus +from .Models.CloudPrintJobUploadRequest import CloudPrintJobUploadRequest +from .Models.CloudPrintResponse import CloudPrintResponse +from .Models.CloudPrintJobResponse import CloudPrintJobResponse +from .Models.CloudClusterPrinterStatus import CloudClusterPrinterStatus +from .Models.CloudClusterPrintJobStatus import CloudClusterPrintJobStatus +from .Utils import findChanges, formatDateCompleted, formatTimeCompleted + + +I18N_CATALOG = i18nCatalog("cura") + + +## The cloud output device is a network output device that works remotely but has limited functionality. +# Currently it only supports viewing the printer and print job status and adding a new job to the queue. +# As such, those methods have been implemented here. +# Note that this device represents a single remote cluster, not a list of multiple clusters. +class CloudOutputDevice(NetworkedPrinterOutputDevice): + + # The interval with which the remote clusters are checked + CHECK_CLUSTER_INTERVAL = 10.0 # seconds + + # Signal triggered when the print jobs in the queue were changed. + printJobsChanged = pyqtSignal() + + # Signal triggered when the selected printer in the UI should be changed. + activePrinterChanged = pyqtSignal() + + # Notify can only use signals that are defined by the class that they are in, not inherited ones. + # Therefore we create a private signal used to trigger the printersChanged signal. + _clusterPrintersChanged = pyqtSignal() + + ## Creates a new cloud output device + # \param api_client: The client that will run the API calls + # \param cluster: The device response received from the cloud API. + # \param parent: The optional parent of this output device. + def __init__(self, api_client: CloudApiClient, cluster: CloudClusterResponse, parent: QObject = None) -> None: + + # The following properties are expected on each networked output device. + # Because the cloud connection does not off all of these, we manually construct this version here. + # An example of why this is needed is the selection of the compatible file type when exporting the tool path. + properties = { + b"address": b"", + b"name": cluster.host_name.encode() if cluster.host_name else b"", + b"firmware_version": cluster.host_version.encode() if cluster.host_version else b"", + b"printer_type": b"" + } + + super().__init__(device_id = cluster.cluster_id, address = "", + connection_type = ConnectionType.CloudConnection, properties = properties, parent = parent) + self._api = api_client + self._cluster = cluster + + self._setInterfaceElements() + + self._account = api_client.account + + # We use the Cura Connect monitor tab to get most functionality right away. + self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), + "../../resources/qml/MonitorStage.qml") + + # Trigger the printersChanged signal when the private signal is triggered. + self.printersChanged.connect(self._clusterPrintersChanged) + + # We keep track of which printer is visible in the monitor page. + self._active_printer = None # type: Optional[PrinterOutputModel] + + # Properties to populate later on with received cloud data. + self._print_jobs = [] # type: List[UM3PrintJobOutputModel] + self._number_of_extruders = 2 # All networked printers are dual-extrusion Ultimaker machines. + + # We only allow a single upload at a time. + self._progress = CloudProgressMessage() + + # Keep server string of the last generated time to avoid updating models more than once for the same response + self._received_printers = None # type: Optional[List[CloudClusterPrinterStatus]] + self._received_print_jobs = None # type: Optional[List[CloudClusterPrintJobStatus]] + + # A set of the user's job IDs that have finished + self._finished_jobs = set() # type: Set[str] + + # Reference to the uploaded print job / mesh + self._tool_path = None # type: Optional[bytes] + self._uploaded_print_job = None # type: Optional[CloudPrintJobResponse] + + ## Connects this device. + def connect(self) -> None: + if self.isConnected(): + return + super().connect() + Logger.log("i", "Connected to cluster %s", self.key) + CuraApplication.getInstance().getBackend().backendStateChange.connect(self._onBackendStateChange) + + ## Disconnects the device + def disconnect(self) -> None: + super().disconnect() + Logger.log("i", "Disconnected from cluster %s", self.key) + CuraApplication.getInstance().getBackend().backendStateChange.disconnect(self._onBackendStateChange) + + ## Resets the print job that was uploaded to force a new upload, runs whenever the user re-slices. + def _onBackendStateChange(self, _: BackendState) -> None: + self._tool_path = None + self._uploaded_print_job = None + + ## Gets the cluster response from which this device was created. + @property + def clusterData(self) -> CloudClusterResponse: + return self._cluster + + ## Updates the cluster data from the cloud. + @clusterData.setter + def clusterData(self, value: CloudClusterResponse) -> None: + self._cluster = value + + ## Checks whether the given network key is found in the cloud's host name + def matchesNetworkKey(self, network_key: str) -> bool: + # A network key looks like "ultimakersystem-aabbccdd0011._ultimaker._tcp.local." + # the host name should then be "ultimakersystem-aabbccdd0011" + return network_key.startswith(self.clusterData.host_name) + + ## Set all the interface elements and texts for this output device. + def _setInterfaceElements(self) -> None: + self.setPriority(2) # Make sure we end up below the local networking and above 'save to file' + self.setName(self._id) + self.setShortDescription(I18N_CATALOG.i18nc("@action:button", "Print via Cloud")) + self.setDescription(I18N_CATALOG.i18nc("@properties:tooltip", "Print via Cloud")) + self.setConnectionText(I18N_CATALOG.i18nc("@info:status", "Connected via Cloud")) + + ## Called when Cura requests an output device to receive a (G-code) file. + def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, + file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: + + # Show an error message if we're already sending a job. + if self._progress.visible: + message = Message( + text = I18N_CATALOG.i18nc("@info:status", "Sending new jobs (temporarily) blocked, still sending the previous print job."), + title = I18N_CATALOG.i18nc("@info:title", "Cloud error"), + lifetime = 10 + ) + message.show() + return + + if self._uploaded_print_job: + # The mesh didn't change, let's not upload it again + self._api.requestPrint(self.key, self._uploaded_print_job.job_id, self._onPrintUploadCompleted) + return + + # Indicate we have started sending a job. + self.writeStarted.emit(self) + + mesh_format = MeshFormatHandler(file_handler, self.firmwareVersion) + if not mesh_format.is_valid: + Logger.log("e", "Missing file or mesh writer!") + return self._onUploadError(I18N_CATALOG.i18nc("@info:status", "Could not export print job.")) + + mesh = mesh_format.getBytes(nodes) + + self._tool_path = mesh + request = CloudPrintJobUploadRequest( + job_name = file_name or mesh_format.file_extension, + file_size = len(mesh), + content_type = mesh_format.mime_type, + ) + self._api.requestUpload(request, self._onPrintJobCreated) + + ## Called when the network data should be updated. + def _update(self) -> None: + super()._update() + if self._last_request_time and time() - self._last_request_time < self.CHECK_CLUSTER_INTERVAL: + return # Avoid calling the cloud too often + + Logger.log("d", "Updating: %s - %s >= %s", time(), self._last_request_time, self.CHECK_CLUSTER_INTERVAL) + if self._account.isLoggedIn: + self.setAuthenticationState(AuthState.Authenticated) + self._last_request_time = time() + self._api.getClusterStatus(self.key, self._onStatusCallFinished) + else: + self.setAuthenticationState(AuthState.NotAuthenticated) + + ## Method called when HTTP request to status endpoint is finished. + # Contains both printers and print jobs statuses in a single response. + def _onStatusCallFinished(self, status: CloudClusterStatus) -> None: + # Update all data from the cluster. + self._last_response_time = time() + if self._received_printers != status.printers: + self._received_printers = status.printers + self._updatePrinters(status.printers) + + if status.print_jobs != self._received_print_jobs: + self._received_print_jobs = status.print_jobs + self._updatePrintJobs(status.print_jobs) + + ## Updates the local list of printers with the list received from the cloud. + # \param jobs: The printers received from the cloud. + def _updatePrinters(self, printers: List[CloudClusterPrinterStatus]) -> None: + previous = {p.key: p for p in self._printers} # type: Dict[str, PrinterOutputModel] + received = {p.uuid: p for p in printers} # type: Dict[str, CloudClusterPrinterStatus] + + removed_printers, added_printers, updated_printers = findChanges(previous, received) + + for removed_printer in removed_printers: + if self._active_printer == removed_printer: + self.setActivePrinter(None) + self._printers.remove(removed_printer) + + for added_printer in added_printers: + self._printers.append(added_printer.createOutputModel(CloudOutputController(self))) + + for model, printer in updated_printers: + printer.updateOutputModel(model) + + # Always have an active printer + if self._printers and not self._active_printer: + self.setActivePrinter(self._printers[0]) + + if added_printers or removed_printers: + self.printersChanged.emit() + + ## Updates the local list of print jobs with the list received from the cloud. + # \param jobs: The print jobs received from the cloud. + def _updatePrintJobs(self, jobs: List[CloudClusterPrintJobStatus]) -> None: + received = {j.uuid: j for j in jobs} # type: Dict[str, CloudClusterPrintJobStatus] + previous = {j.key: j for j in self._print_jobs} # type: Dict[str, UM3PrintJobOutputModel] + + removed_jobs, added_jobs, updated_jobs = findChanges(previous, received) + + for removed_job in removed_jobs: + if removed_job.assignedPrinter: + removed_job.assignedPrinter.updateActivePrintJob(None) + removed_job.stateChanged.disconnect(self._onPrintJobStateChanged) + self._print_jobs.remove(removed_job) + + for added_job in added_jobs: + self._addPrintJob(added_job) + + for model, job in updated_jobs: + job.updateOutputModel(model) + if job.printer_uuid: + self._updateAssignedPrinter(model, job.printer_uuid) + + # We only have to update when jobs are added or removed + # updated jobs push their changes via their output model + if added_jobs or removed_jobs: + self.printJobsChanged.emit() + + ## Registers a new print job received via the cloud API. + # \param job: The print job received. + def _addPrintJob(self, job: CloudClusterPrintJobStatus) -> None: + model = job.createOutputModel(CloudOutputController(self)) + model.stateChanged.connect(self._onPrintJobStateChanged) + if job.printer_uuid: + self._updateAssignedPrinter(model, job.printer_uuid) + self._print_jobs.append(model) + + ## Handles the event of a change in a print job state + def _onPrintJobStateChanged(self) -> None: + user_name = self._getUserName() + # TODO: confirm that notifications in Cura are still required + for job in self._print_jobs: + if job.state == "wait_cleanup" and job.key not in self._finished_jobs and job.owner == user_name: + self._finished_jobs.add(job.key) + Message( + title = I18N_CATALOG.i18nc("@info:status", "Print finished"), + text = (I18N_CATALOG.i18nc("@info:status", "Printer '{printer_name}' has finished printing '{job_name}'.").format( + printer_name = job.assignedPrinter.name, + job_name = job.name + ) if job.assignedPrinter else + I18N_CATALOG.i18nc("@info:status", "The print job '{job_name}' was finished.").format( + job_name = job.name + )), + ).show() + + ## Updates the printer assignment for the given print job model. + def _updateAssignedPrinter(self, model: UM3PrintJobOutputModel, printer_uuid: str) -> None: + printer = next((p for p in self._printers if printer_uuid == p.key), None) + if not printer: + Logger.log("w", "Missing printer %s for job %s in %s", model.assignedPrinter, model.key, + [p.key for p in self._printers]) + return + + printer.updateActivePrintJob(model) + model.updateAssignedPrinter(printer) + + ## Uploads the mesh when the print job was registered with the cloud API. + # \param job_response: The response received from the cloud API. + def _onPrintJobCreated(self, job_response: CloudPrintJobResponse) -> None: + self._progress.show() + self._uploaded_print_job = job_response + tool_path = cast(bytes, self._tool_path) + self._api.uploadToolPath(job_response, tool_path, self._onPrintJobUploaded, self._progress.update, self._onUploadError) + + ## Requests the print to be sent to the printer when we finished uploading the mesh. + def _onPrintJobUploaded(self) -> None: + self._progress.update(100) + print_job = cast(CloudPrintJobResponse, self._uploaded_print_job) + self._api.requestPrint(self.key, print_job.job_id, self._onPrintUploadCompleted) + + ## Displays the given message if uploading the mesh has failed + # \param message: The message to display. + def _onUploadError(self, message: str = None) -> None: + self._progress.hide() + self._uploaded_print_job = None + Message( + text = message or I18N_CATALOG.i18nc("@info:text", "Could not upload the data to the printer."), + title = I18N_CATALOG.i18nc("@info:title", "Cloud error"), + lifetime = 10 + ).show() + self.writeError.emit() + + ## Shows a message when the upload has succeeded + # \param response: The response from the cloud API. + def _onPrintUploadCompleted(self, response: CloudPrintResponse) -> None: + Logger.log("d", "The cluster will be printing this print job with the ID %s", response.cluster_job_id) + self._progress.hide() + Message( + text = I18N_CATALOG.i18nc("@info:status", "Print job was successfully sent to the printer."), + title = I18N_CATALOG.i18nc("@info:title", "Data Sent"), + lifetime = 5 + ).show() + self.writeFinished.emit() + + ## Gets the remote printers. + @pyqtProperty("QVariantList", notify=_clusterPrintersChanged) + def printers(self) -> List[PrinterOutputModel]: + return self._printers + + ## Get the active printer in the UI (monitor page). + @pyqtProperty(QObject, notify = activePrinterChanged) + def activePrinter(self) -> Optional[PrinterOutputModel]: + return self._active_printer + + ## Set the active printer in the UI (monitor page). + @pyqtSlot(QObject) + def setActivePrinter(self, printer: Optional[PrinterOutputModel] = None) -> None: + if printer != self._active_printer: + self._active_printer = printer + self.activePrinterChanged.emit() + + @pyqtProperty(int, notify = _clusterPrintersChanged) + def clusterSize(self) -> int: + return len(self._printers) + + ## Get remote print jobs. + @pyqtProperty("QVariantList", notify = printJobsChanged) + def printJobs(self) -> List[UM3PrintJobOutputModel]: + return self._print_jobs + + ## Get remote print jobs that are still in the print queue. + @pyqtProperty("QVariantList", notify = printJobsChanged) + def queuedPrintJobs(self) -> List[UM3PrintJobOutputModel]: + return [print_job for print_job in self._print_jobs + if print_job.state == "queued" or print_job.state == "error"] + + ## Get remote print jobs that are assigned to a printer. + @pyqtProperty("QVariantList", notify = printJobsChanged) + def activePrintJobs(self) -> List[UM3PrintJobOutputModel]: + return [print_job for print_job in self._print_jobs if + print_job.assignedPrinter is not None and print_job.state != "queued"] + + @pyqtSlot(int, result = str) + def formatDuration(self, seconds: int) -> str: + return Duration(seconds).getDisplayString(DurationFormat.Format.Short) + + @pyqtSlot(int, result = str) + def getTimeCompleted(self, time_remaining: int) -> str: + return formatTimeCompleted(time_remaining) + + @pyqtSlot(int, result = str) + def getDateCompleted(self, time_remaining: int) -> str: + return formatDateCompleted(time_remaining) + + ## TODO: The following methods are required by the monitor page QML, but are not actually available using cloud. + # TODO: We fake the methods here to not break the monitor page. + + @pyqtProperty(QUrl, notify = _clusterPrintersChanged) + def activeCameraUrl(self) -> "QUrl": + return QUrl() + + @pyqtSlot(QUrl) + def setActiveCameraUrl(self, camera_url: "QUrl") -> None: + pass + + @pyqtProperty(bool, notify = printJobsChanged) + def receivedPrintJobs(self) -> bool: + return bool(self._print_jobs) + + @pyqtSlot() + def openPrintJobControlPanel(self) -> None: + pass + + @pyqtSlot() + def openPrinterControlPanel(self) -> None: + pass + + @pyqtSlot(str) + def sendJobToTop(self, print_job_uuid: str) -> None: + pass + + @pyqtSlot(str) + def deleteJobFromQueue(self, print_job_uuid: str) -> None: + pass + + @pyqtSlot(str) + def forceSendJob(self, print_job_uuid: str) -> None: + pass + + @pyqtProperty("QVariantList", notify = _clusterPrintersChanged) + def connectedPrintersTypeCount(self) -> List[Dict[str, str]]: + return [] diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py new file mode 100644 index 0000000000..e081beb99c --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -0,0 +1,175 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Dict, List + +from PyQt5.QtCore import QTimer + +from UM import i18nCatalog +from UM.Logger import Logger +from UM.Message import Message +from UM.Signal import Signal, signalemitter +from cura.API import Account +from cura.CuraApplication import CuraApplication +from cura.Settings.GlobalStack import GlobalStack +from .CloudApiClient import CloudApiClient +from .CloudOutputDevice import CloudOutputDevice +from .Models.CloudClusterResponse import CloudClusterResponse +from .Models.CloudError import CloudError +from .Utils import findChanges + + +## The cloud output device manager is responsible for using the Ultimaker Cloud APIs to manage remote clusters. +# Keeping all cloud related logic in this class instead of the UM3OutputDevicePlugin results in more readable code. +# +# API spec is available on https://api.ultimaker.com/docs/connect/spec/. +# +class CloudOutputDeviceManager: + META_CLUSTER_ID = "um_cloud_cluster_id" + + # The interval with which the remote clusters are checked + CHECK_CLUSTER_INTERVAL = 30.0 # seconds + + # The translation catalog for this device. + I18N_CATALOG = i18nCatalog("cura") + + addedCloudCluster = Signal() + removedCloudCluster = Signal() + + def __init__(self) -> None: + # Persistent dict containing the remote clusters for the authenticated user. + self._remote_clusters = {} # type: Dict[str, CloudOutputDevice] + + self._application = CuraApplication.getInstance() + self._output_device_manager = self._application.getOutputDeviceManager() + + self._account = self._application.getCuraAPI().account # type: Account + self._api = CloudApiClient(self._account, self._onApiError) + + # Create a timer to update the remote cluster list + self._update_timer = QTimer() + self._update_timer.setInterval(int(self.CHECK_CLUSTER_INTERVAL * 1000)) + self._update_timer.setSingleShot(False) + + self._running = False + + # Called when the uses logs in or out + def _onLoginStateChanged(self, is_logged_in: bool) -> None: + Logger.log("d", "Log in state changed to %s", is_logged_in) + if is_logged_in: + if not self._update_timer.isActive(): + self._update_timer.start() + self._getRemoteClusters() + else: + if self._update_timer.isActive(): + self._update_timer.stop() + + # Notify that all clusters have disappeared + self._onGetRemoteClustersFinished([]) + + ## Gets all remote clusters from the API. + def _getRemoteClusters(self) -> None: + Logger.log("d", "Retrieving remote clusters") + self._api.getClusters(self._onGetRemoteClustersFinished) + + ## Callback for when the request for getting the clusters. is finished. + def _onGetRemoteClustersFinished(self, clusters: List[CloudClusterResponse]) -> None: + online_clusters = {c.cluster_id: c for c in clusters if c.is_online} # type: Dict[str, CloudClusterResponse] + + removed_devices, added_clusters, updates = findChanges(self._remote_clusters, online_clusters) + + Logger.log("d", "Parsed remote clusters to %s", [cluster.toDict() for cluster in online_clusters.values()]) + Logger.log("d", "Removed: %s, added: %s, updates: %s", len(removed_devices), len(added_clusters), len(updates)) + + # Remove output devices that are gone + for removed_cluster in removed_devices: + if removed_cluster.isConnected(): + removed_cluster.disconnect() + removed_cluster.close() + self._output_device_manager.removeOutputDevice(removed_cluster.key) + self.removedCloudCluster.emit() + del self._remote_clusters[removed_cluster.key] + + # Add an output device for each new remote cluster. + # We only add when is_online as we don't want the option in the drop down if the cluster is not online. + for added_cluster in added_clusters: + device = CloudOutputDevice(self._api, added_cluster) + self._remote_clusters[added_cluster.cluster_id] = device + self.addedCloudCluster.emit() + + for device, cluster in updates: + device.clusterData = cluster + + self._connectToActiveMachine() + + ## Callback for when the active machine was changed by the user or a new remote cluster was found. + def _connectToActiveMachine(self) -> None: + active_machine = CuraApplication.getInstance().getGlobalContainerStack() + if not active_machine: + return + + # Remove all output devices that we have registered. + # This is needed because when we switch machines we can only leave + # output devices that are meant for that machine. + for stored_cluster_id in self._remote_clusters: + self._output_device_manager.removeOutputDevice(stored_cluster_id) + + # Check if the stored cluster_id for the active machine is in our list of remote clusters. + stored_cluster_id = active_machine.getMetaDataEntry(self.META_CLUSTER_ID) + if stored_cluster_id in self._remote_clusters: + device = self._remote_clusters[stored_cluster_id] + self._connectToOutputDevice(device, active_machine) + Logger.log("d", "Device connected by metadata cluster ID %s", stored_cluster_id) + else: + self._connectByNetworkKey(active_machine) + + ## Tries to match the local network key to the cloud cluster host name. + def _connectByNetworkKey(self, active_machine: GlobalStack) -> None: + # Check if the active printer has a local network connection and match this key to the remote cluster. + local_network_key = active_machine.getMetaDataEntry("um_network_key") + if not local_network_key: + return + + device = next((c for c in self._remote_clusters.values() if c.matchesNetworkKey(local_network_key)), None) + if not device: + return + + Logger.log("i", "Found cluster %s with network key %s", device, local_network_key) + active_machine.setMetaDataEntry(self.META_CLUSTER_ID, device.key) + self._connectToOutputDevice(device, active_machine) + + ## Connects to an output device and makes sure it is registered in the output device manager. + def _connectToOutputDevice(self, device: CloudOutputDevice, active_machine: GlobalStack) -> None: + device.connect() + self._output_device_manager.addOutputDevice(device) + active_machine.addConfiguredConnectionType(device.connectionType.value) + + ## Handles an API error received from the cloud. + # \param errors: The errors received + def _onApiError(self, errors: List[CloudError] = None) -> None: + Logger.log("w", str(errors)) + message = Message( + text = self.I18N_CATALOG.i18nc("@info:description", "There was an error connecting to the cloud."), + title = self.I18N_CATALOG.i18nc("@info:title", "Error"), + lifetime = 10 + ) + message.show() + + ## Starts running the cloud output device manager, thus periodically requesting cloud data. + def start(self): + if self._running: + return + self._account.loginStateChanged.connect(self._onLoginStateChanged) + # When switching machines we check if we have to activate a remote cluster. + self._application.globalContainerStackChanged.connect(self._connectToActiveMachine) + self._update_timer.timeout.connect(self._getRemoteClusters) + self._onLoginStateChanged(is_logged_in = self._account.isLoggedIn) + + ## Stops running the cloud output device manager. + def stop(self): + if not self._running: + return + self._account.loginStateChanged.disconnect(self._onLoginStateChanged) + # When switching machines we check if we have to activate a remote cluster. + self._application.globalContainerStackChanged.disconnect(self._connectToActiveMachine) + self._update_timer.timeout.disconnect(self._getRemoteClusters) + self._onLoginStateChanged(is_logged_in = False) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py new file mode 100644 index 0000000000..d85f49c1a0 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py @@ -0,0 +1,32 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from UM import i18nCatalog +from UM.Message import Message + + +I18N_CATALOG = i18nCatalog("cura") + + +## Class responsible for showing a progress message while a mesh is being uploaded to the cloud. +class CloudProgressMessage(Message): + def __init__(self): + super().__init__( + text = I18N_CATALOG.i18nc("@info:status", "Sending data to remote cluster"), + title = I18N_CATALOG.i18nc("@info:status", "Sending data to remote cluster"), + progress = -1, + lifetime = 0, + dismissable = False, + use_inactivity_timer = False + ) + + ## Shows the progress message. + def show(self): + self.setProgress(0) + super().show() + + ## Updates the percentage of the uploaded. + # \param percentage: The percentage amount (0-100). + def update(self, percentage: int) -> None: + if not self._visible: + super().show() + self.setProgress(percentage) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/BaseCloudModel.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/BaseCloudModel.py new file mode 100644 index 0000000000..18a8cb5cba --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/BaseCloudModel.py @@ -0,0 +1,55 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from datetime import datetime, timezone +from typing import Dict, Union, TypeVar, Type, List, Any + +from ...Models import BaseModel + + +## Base class for the models used in the interface with the Ultimaker cloud APIs. +class BaseCloudModel(BaseModel): + ## Checks whether the two models are equal. + # \param other: The other model. + # \return True if they are equal, False if they are different. + def __eq__(self, other): + return type(self) == type(other) and self.toDict() == other.toDict() + + ## Checks whether the two models are different. + # \param other: The other model. + # \return True if they are different, False if they are the same. + def __ne__(self, other) -> bool: + return type(self) != type(other) or self.toDict() != other.toDict() + + ## Converts the model into a serializable dictionary + def toDict(self) -> Dict[str, Any]: + return self.__dict__ + + # Type variable used in the parse methods below, which should be a subclass of BaseModel. + T = TypeVar("T", bound=BaseModel) + + ## Parses a single model. + # \param model_class: The model class. + # \param values: The value of the model, which is usually a dictionary, but may also be already parsed. + # \return An instance of the model_class given. + @staticmethod + def parseModel(model_class: Type[T], values: Union[T, Dict[str, Any]]) -> T: + if isinstance(values, dict): + return model_class(**values) + return values + + ## Parses a list of models. + # \param model_class: The model class. + # \param values: The value of the list. Each value is usually a dictionary, but may also be already parsed. + # \return A list of instances of the model_class given. + @classmethod + def parseModels(cls, model_class: Type[T], values: List[Union[T, Dict[str, Any]]]) -> List[T]: + return [cls.parseModel(model_class, value) for value in values] + + ## Parses the given date string. + # \param date: The date to parse. + # \return The parsed date. + @staticmethod + def parseDate(date: Union[str, datetime]) -> datetime: + if isinstance(date, datetime): + return date + return datetime.strptime(date, "%Y-%m-%dT%H:%M:%S.%fZ").replace(tzinfo=timezone.utc) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterBuildPlate.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterBuildPlate.py new file mode 100644 index 0000000000..4386bbb435 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterBuildPlate.py @@ -0,0 +1,13 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from .BaseCloudModel import BaseCloudModel + + +## Class representing a cluster printer +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterBuildPlate(BaseCloudModel): + ## Create a new build plate + # \param type: The type of buildplate glass or aluminium + def __init__(self, type: str = "glass", **kwargs) -> None: + self.type = type + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintCoreConfiguration.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintCoreConfiguration.py new file mode 100644 index 0000000000..7454401d09 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintCoreConfiguration.py @@ -0,0 +1,52 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Union, Dict, Optional, Any + +from cura.PrinterOutput.ExtruderConfigurationModel import ExtruderConfigurationModel +from cura.PrinterOutput.ExtruderOutputModel import ExtruderOutputModel +from .CloudClusterPrinterConfigurationMaterial import CloudClusterPrinterConfigurationMaterial +from .BaseCloudModel import BaseCloudModel + + +## Class representing a cloud cluster printer configuration +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterPrintCoreConfiguration(BaseCloudModel): + ## Creates a new cloud cluster printer configuration object + # \param extruder_index: The position of the extruder on the machine as list index. Numbered from left to right. + # \param material: The material of a configuration object in a cluster printer. May be in a dict or an object. + # \param nozzle_diameter: The diameter of the print core at this position in millimeters, e.g. '0.4'. + # \param print_core_id: The type of print core inserted at this position, e.g. 'AA 0.4'. + def __init__(self, extruder_index: int, + material: Union[None, Dict[str, Any], CloudClusterPrinterConfigurationMaterial], + print_core_id: Optional[str] = None, **kwargs) -> None: + self.extruder_index = extruder_index + self.material = self.parseModel(CloudClusterPrinterConfigurationMaterial, material) if material else None + self.print_core_id = print_core_id + super().__init__(**kwargs) + + ## Updates the given output model. + # \param model - The output model to update. + def updateOutputModel(self, model: ExtruderOutputModel) -> None: + if self.print_core_id is not None: + model.updateHotendID(self.print_core_id) + + if self.material: + active_material = model.activeMaterial + if active_material is None or active_material.guid != self.material.guid: + material = self.material.createOutputModel() + model.updateActiveMaterial(material) + else: + model.updateActiveMaterial(None) + + ## Creates a configuration model + def createConfigurationModel(self) -> ExtruderConfigurationModel: + model = ExtruderConfigurationModel(position = self.extruder_index) + self.updateConfigurationModel(model) + return model + + ## Creates a configuration model + def updateConfigurationModel(self, model: ExtruderConfigurationModel) -> ExtruderConfigurationModel: + model.setHotendID(self.print_core_id) + if self.material: + model.setMaterial(self.material.createOutputModel()) + return model diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConfigurationChange.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConfigurationChange.py new file mode 100644 index 0000000000..9ff4154666 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConfigurationChange.py @@ -0,0 +1,27 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional + +from .BaseCloudModel import BaseCloudModel + + +## Model for the types of changes that are needed before a print job can start +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterPrintJobConfigurationChange(BaseCloudModel): + ## Creates a new print job constraint. + # \param type_of_change: The type of configuration change, one of: "material", "print_core_change" + # \param index: The hotend slot or extruder index to change + # \param target_id: Target material guid or hotend id + # \param origin_id: Original/current material guid or hotend id + # \param target_name: Target material name or hotend id + # \param origin_name: Original/current material name or hotend id + def __init__(self, type_of_change: str, target_id: str, origin_id: str, + index: Optional[int] = None, target_name: Optional[str] = None, origin_name: Optional[str] = None, + **kwargs) -> None: + self.type_of_change = type_of_change + self.index = index + self.target_id = target_id + self.origin_id = origin_id + self.target_name = target_name + self.origin_name = origin_name + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConstraint.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConstraint.py new file mode 100644 index 0000000000..8236ec06b9 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConstraint.py @@ -0,0 +1,16 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional + +from .BaseCloudModel import BaseCloudModel + + +## Class representing a cloud cluster print job constraint +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterPrintJobConstraints(BaseCloudModel): + ## Creates a new print job constraint. + # \param require_printer_name: Unique name of the printer that this job should be printed on. + # Should be one of the unique_name field values in the cluster, e.g. 'ultimakersystem-ccbdd30044ec' + def __init__(self, require_printer_name: Optional[str] = None, **kwargs) -> None: + self.require_printer_name = require_printer_name + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobImpediment.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobImpediment.py new file mode 100644 index 0000000000..12b67996c1 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobImpediment.py @@ -0,0 +1,15 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from .BaseCloudModel import BaseCloudModel + + +## Class representing the reasons that prevent this job from being printed on the associated printer +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterPrintJobImpediment(BaseCloudModel): + ## Creates a new print job constraint. + # \param translation_key: A string indicating a reason the print cannot be printed, such as 'does_not_fit_in_build_volume' + # \param severity: A number indicating the severity of the problem, with higher being more severe + def __init__(self, translation_key: str, severity: int, **kwargs) -> None: + self.translation_key = translation_key + self.severity = severity + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobStatus.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobStatus.py new file mode 100644 index 0000000000..45b7d838a5 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobStatus.py @@ -0,0 +1,134 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import List, Optional, Union, Dict, Any + +from cura.PrinterOutput.ConfigurationModel import ConfigurationModel +from ...UM3PrintJobOutputModel import UM3PrintJobOutputModel +from ...ConfigurationChangeModel import ConfigurationChangeModel +from ..CloudOutputController import CloudOutputController +from .BaseCloudModel import BaseCloudModel +from .CloudClusterBuildPlate import CloudClusterBuildPlate +from .CloudClusterPrintJobConfigurationChange import CloudClusterPrintJobConfigurationChange +from .CloudClusterPrintJobImpediment import CloudClusterPrintJobImpediment +from .CloudClusterPrintCoreConfiguration import CloudClusterPrintCoreConfiguration +from .CloudClusterPrintJobConstraint import CloudClusterPrintJobConstraints + + +## Model for the status of a single print job in a cluster. +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterPrintJobStatus(BaseCloudModel): + ## Creates a new cloud print job status model. + # \param assigned_to: The name of the printer this job is assigned to while being queued. + # \param configuration: The required print core configurations of this print job. + # \param constraints: Print job constraints object. + # \param created_at: The timestamp when the job was created in Cura Connect. + # \param force: Allow this job to be printed despite of mismatching configurations. + # \param last_seen: The number of seconds since this job was checked. + # \param machine_variant: The machine type that this job should be printed on.Coincides with the machine_type field + # of the printer object. + # \param name: The name of the print job. Usually the name of the .gcode file. + # \param network_error_count: The number of errors encountered when requesting data for this print job. + # \param owner: The name of the user who added the print job to Cura Connect. + # \param printer_uuid: UUID of the printer that the job is currently printing on or assigned to. + # \param started: Whether the job has started printing or not. + # \param status: The status of the print job. + # \param time_elapsed: The remaining printing time in seconds. + # \param time_total: The total printing time in seconds. + # \param uuid: UUID of this print job. Should be used for identification purposes. + # \param deleted_at: The time when this print job was deleted. + # \param printed_on_uuid: UUID of the printer used to print this job. + # \param configuration_changes_required: List of configuration changes the printer this job is associated with + # needs to make in order to be able to print this job + # \param build_plate: The build plate (type) this job needs to be printed on. + # \param compatible_machine_families: Family names of machines suitable for this print job + # \param impediments_to_printing: A list of reasons that prevent this job from being printed on the associated + # printer + def __init__(self, created_at: str, force: bool, machine_variant: str, name: str, started: bool, status: str, + time_total: int, uuid: str, + configuration: List[Union[Dict[str, Any], CloudClusterPrintCoreConfiguration]], + constraints: List[Union[Dict[str, Any], CloudClusterPrintJobConstraints]], + last_seen: Optional[float] = None, network_error_count: Optional[int] = None, + owner: Optional[str] = None, printer_uuid: Optional[str] = None, time_elapsed: Optional[int] = None, + assigned_to: Optional[str] = None, deleted_at: Optional[str] = None, + printed_on_uuid: Optional[str] = None, + configuration_changes_required: List[ + Union[Dict[str, Any], CloudClusterPrintJobConfigurationChange]] = None, + build_plate: Union[Dict[str, Any], CloudClusterBuildPlate] = None, + compatible_machine_families: List[str] = None, + impediments_to_printing: List[Union[Dict[str, Any], CloudClusterPrintJobImpediment]] = None, + **kwargs) -> None: + self.assigned_to = assigned_to + self.configuration = self.parseModels(CloudClusterPrintCoreConfiguration, configuration) + self.constraints = self.parseModels(CloudClusterPrintJobConstraints, constraints) + self.created_at = created_at + self.force = force + self.last_seen = last_seen + self.machine_variant = machine_variant + self.name = name + self.network_error_count = network_error_count + self.owner = owner + self.printer_uuid = printer_uuid + self.started = started + self.status = status + self.time_elapsed = time_elapsed + self.time_total = time_total + self.uuid = uuid + self.deleted_at = deleted_at + self.printed_on_uuid = printed_on_uuid + + self.configuration_changes_required = self.parseModels(CloudClusterPrintJobConfigurationChange, + configuration_changes_required) \ + if configuration_changes_required else [] + self.build_plate = self.parseModel(CloudClusterBuildPlate, build_plate) if build_plate else None + self.compatible_machine_families = compatible_machine_families if compatible_machine_families else [] + self.impediments_to_printing = self.parseModels(CloudClusterPrintJobImpediment, impediments_to_printing) \ + if impediments_to_printing else [] + + super().__init__(**kwargs) + + ## Creates an UM3 print job output model based on this cloud cluster print job. + # \param printer: The output model of the printer + def createOutputModel(self, controller: CloudOutputController) -> UM3PrintJobOutputModel: + model = UM3PrintJobOutputModel(controller, self.uuid, self.name) + self.updateOutputModel(model) + + return model + + ## Creates a new configuration model + def _createConfigurationModel(self) -> ConfigurationModel: + extruders = [extruder.createConfigurationModel() for extruder in self.configuration or ()] + configuration = ConfigurationModel() + configuration.setExtruderConfigurations(extruders) + return configuration + + ## Updates an UM3 print job output model based on this cloud cluster print job. + # \param model: The model to update. + def updateOutputModel(self, model: UM3PrintJobOutputModel) -> None: + model.updateConfiguration(self._createConfigurationModel()) + model.updateTimeTotal(self.time_total) + model.updateTimeElapsed(self.time_elapsed) + model.updateOwner(self.owner) + model.updateState(self.status) + model.setCompatibleMachineFamilies(self.compatible_machine_families) + model.updateTimeTotal(self.time_total) + model.updateTimeElapsed(self.time_elapsed) + model.updateOwner(self.owner) + + status_set_by_impediment = False + for impediment in self.impediments_to_printing: + # TODO: impediment.severity is defined as int, this will not work, is there a translation? + if impediment.severity == "UNFIXABLE": + status_set_by_impediment = True + model.updateState("error") + break + + if not status_set_by_impediment: + model.updateState(self.status) + + model.updateConfigurationChanges( + [ConfigurationChangeModel( + type_of_change = change.type_of_change, + index = change.index if change.index else 0, + target_name = change.target_name if change.target_name else "", + origin_name = change.origin_name if change.origin_name else "") + for change in self.configuration_changes_required]) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterConfigurationMaterial.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterConfigurationMaterial.py new file mode 100644 index 0000000000..652cbdabda --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterConfigurationMaterial.py @@ -0,0 +1,55 @@ +from typing import Optional + +from UM.Logger import Logger +from cura.CuraApplication import CuraApplication +from cura.PrinterOutput.MaterialOutputModel import MaterialOutputModel +from .BaseCloudModel import BaseCloudModel + + +## Class representing a cloud cluster printer configuration +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterPrinterConfigurationMaterial(BaseCloudModel): + ## Creates a new material configuration model. + # \param brand: The brand of material in this print core, e.g. 'Ultimaker'. + # \param color: The color of material in this print core, e.g. 'Blue'. + # \param guid: he GUID of the material in this print core, e.g. '506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9'. + # \param material: The type of material in this print core, e.g. 'PLA'. + def __init__(self, brand: Optional[str] = None, color: Optional[str] = None, guid: Optional[str] = None, + material: Optional[str] = None, **kwargs) -> None: + self.guid = guid + self.brand = brand + self.color = color + self.material = material + super().__init__(**kwargs) + + ## Creates a material output model based on this cloud printer material. + def createOutputModel(self) -> MaterialOutputModel: + material_manager = CuraApplication.getInstance().getMaterialManager() + material_group_list = material_manager.getMaterialGroupListByGUID(self.guid) or [] + + # Sort the material groups by "is_read_only = True" first, and then the name alphabetically. + read_only_material_group_list = list(filter(lambda x: x.is_read_only, material_group_list)) + non_read_only_material_group_list = list(filter(lambda x: not x.is_read_only, material_group_list)) + material_group = None + if read_only_material_group_list: + read_only_material_group_list = sorted(read_only_material_group_list, key = lambda x: x.name) + material_group = read_only_material_group_list[0] + elif non_read_only_material_group_list: + non_read_only_material_group_list = sorted(non_read_only_material_group_list, key = lambda x: x.name) + material_group = non_read_only_material_group_list[0] + + if material_group: + container = material_group.root_material_node.getContainer() + color = container.getMetaDataEntry("color_code") + brand = container.getMetaDataEntry("brand") + material_type = container.getMetaDataEntry("material") + name = container.getName() + else: + Logger.log("w", "Unable to find material with guid {guid}. Using data as provided by cluster" + .format(guid = self.guid)) + color = self.color + brand = self.brand + material_type = self.material + name = "Empty" if self.material == "empty" else "Unknown" + + return MaterialOutputModel(guid = self.guid, type = material_type, brand = brand, color = color, name = name) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterStatus.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterStatus.py new file mode 100644 index 0000000000..bd3e482bde --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterStatus.py @@ -0,0 +1,73 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import List, Union, Dict, Optional, Any + +from cura.PrinterOutput.PrinterOutputController import PrinterOutputController +from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel +from .CloudClusterBuildPlate import CloudClusterBuildPlate +from .CloudClusterPrintCoreConfiguration import CloudClusterPrintCoreConfiguration +from .BaseCloudModel import BaseCloudModel + + +## Class representing a cluster printer +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterPrinterStatus(BaseCloudModel): + ## Creates a new cluster printer status + # \param enabled: A printer can be disabled if it should not receive new jobs. By default every printer is enabled. + # \param firmware_version: Firmware version installed on the printer. Can differ for each printer in a cluster. + # \param friendly_name: Human readable name of the printer. Can be used for identification purposes. + # \param ip_address: The IP address of the printer in the local network. + # \param machine_variant: The type of printer. Can be 'Ultimaker 3' or 'Ultimaker 3ext'. + # \param status: The status of the printer. + # \param unique_name: The unique name of the printer in the network. + # \param uuid: The unique ID of the printer, also known as GUID. + # \param configuration: The active print core configurations of this printer. + # \param reserved_by: A printer can be claimed by a specific print job. + # \param maintenance_required: Indicates if maintenance is necessary + # \param firmware_update_status: Whether the printer's firmware is up-to-date, value is one of: "up_to_date", + # "pending_update", "update_available", "update_in_progress", "update_failed", "update_impossible" + # \param latest_available_firmware: The version of the latest firmware that is available + # \param build_plate: The build plate that is on the printer + def __init__(self, enabled: bool, firmware_version: str, friendly_name: str, ip_address: str, machine_variant: str, + status: str, unique_name: str, uuid: str, + configuration: List[Union[Dict[str, Any], CloudClusterPrintCoreConfiguration]], + reserved_by: Optional[str] = None, maintenance_required: Optional[bool] = None, + firmware_update_status: Optional[str] = None, latest_available_firmware: Optional[str] = None, + build_plate: Union[Dict[str, Any], CloudClusterBuildPlate] = None, **kwargs) -> None: + + self.configuration = self.parseModels(CloudClusterPrintCoreConfiguration, configuration) + self.enabled = enabled + self.firmware_version = firmware_version + self.friendly_name = friendly_name + self.ip_address = ip_address + self.machine_variant = machine_variant + self.status = status + self.unique_name = unique_name + self.uuid = uuid + self.reserved_by = reserved_by + self.maintenance_required = maintenance_required + self.firmware_update_status = firmware_update_status + self.latest_available_firmware = latest_available_firmware + self.build_plate = self.parseModel(CloudClusterBuildPlate, build_plate) if build_plate else None + super().__init__(**kwargs) + + ## Creates a new output model. + # \param controller - The controller of the model. + def createOutputModel(self, controller: PrinterOutputController) -> PrinterOutputModel: + model = PrinterOutputModel(controller, len(self.configuration), firmware_version = self.firmware_version) + self.updateOutputModel(model) + return model + + ## Updates the given output model. + # \param model - The output model to update. + def updateOutputModel(self, model: PrinterOutputModel) -> None: + model.updateKey(self.uuid) + model.updateName(self.friendly_name) + model.updateType(self.machine_variant) + model.updateState(self.status if self.enabled else "disabled") + model.updateBuildplate(self.build_plate.type if self.build_plate else "glass") + + for configuration, extruder_output, extruder_config in \ + zip(self.configuration, model.extruders, model.printerConfiguration.extruderConfigurations): + configuration.updateOutputModel(extruder_output) + configuration.updateConfigurationModel(extruder_config) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterResponse.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterResponse.py new file mode 100644 index 0000000000..9c0853e7c9 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterResponse.py @@ -0,0 +1,32 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional + +from .BaseCloudModel import BaseCloudModel + + +## Class representing a cloud connected cluster. +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterResponse(BaseCloudModel): + ## Creates a new cluster response object. + # \param cluster_id: The secret unique ID, e.g. 'kBEeZWEifXbrXviO8mRYLx45P8k5lHVGs43XKvRniPg='. + # \param host_guid: The unique identifier of the print cluster host, e.g. 'e90ae0ac-1257-4403-91ee-a44c9b7e8050'. + # \param host_name: The name of the printer as configured during the Wi-Fi setup. Used as identifier for end users. + # \param is_online: Whether this cluster is currently connected to the cloud. + # \param status: The status of the cluster authentication (active or inactive). + # \param host_version: The firmware version of the cluster host. This is where the Stardust client is running on. + def __init__(self, cluster_id: str, host_guid: str, host_name: str, is_online: bool, status: str, + host_version: Optional[str] = None, **kwargs) -> None: + self.cluster_id = cluster_id + self.host_guid = host_guid + self.host_name = host_name + self.status = status + self.is_online = is_online + self.host_version = host_version + super().__init__(**kwargs) + + # Validates the model, raising an exception if the model is invalid. + def validate(self) -> None: + super().validate() + if not self.cluster_id: + raise ValueError("cluster_id is required on CloudCluster") diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterStatus.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterStatus.py new file mode 100644 index 0000000000..b0250c2ebb --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterStatus.py @@ -0,0 +1,26 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from datetime import datetime +from typing import List, Dict, Union, Any + +from .CloudClusterPrinterStatus import CloudClusterPrinterStatus +from .CloudClusterPrintJobStatus import CloudClusterPrintJobStatus +from .BaseCloudModel import BaseCloudModel + + +# Model that represents the status of the cluster for the cloud +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterStatus(BaseCloudModel): + ## Creates a new cluster status model object. + # \param printers: The latest status of each printer in the cluster. + # \param print_jobs: The latest status of each print job in the cluster. + # \param generated_time: The datetime when the object was generated on the server-side. + def __init__(self, + printers: List[Union[CloudClusterPrinterStatus, Dict[str, Any]]], + print_jobs: List[Union[CloudClusterPrintJobStatus, Dict[str, Any]]], + generated_time: Union[str, datetime], + **kwargs) -> None: + self.generated_time = self.parseDate(generated_time) + self.printers = self.parseModels(CloudClusterPrinterStatus, printers) + self.print_jobs = self.parseModels(CloudClusterPrintJobStatus, print_jobs) + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudError.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudError.py new file mode 100644 index 0000000000..b53361022e --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudError.py @@ -0,0 +1,28 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Dict, Optional, Any + +from .BaseCloudModel import BaseCloudModel + + +## Class representing errors generated by the cloud servers, according to the JSON-API standard. +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudError(BaseCloudModel): + ## Creates a new error object. + # \param id: Unique identifier for this particular occurrence of the problem. + # \param title: A short, human-readable summary of the problem that SHOULD NOT change from occurrence to occurrence + # of the problem, except for purposes of localization. + # \param code: An application-specific error code, expressed as a string value. + # \param detail: A human-readable explanation specific to this occurrence of the problem. Like title, this field's + # value can be localized. + # \param http_status: The HTTP status code applicable to this problem, converted to string. + # \param meta: Non-standard meta-information about the error, depending on the error code. + def __init__(self, id: str, code: str, title: str, http_status: str, detail: Optional[str] = None, + meta: Optional[Dict[str, Any]] = None, **kwargs) -> None: + self.id = id + self.code = code + self.http_status = http_status + self.title = title + self.detail = detail + self.meta = meta + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobResponse.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobResponse.py new file mode 100644 index 0000000000..79196ee38c --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobResponse.py @@ -0,0 +1,33 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional + +from .BaseCloudModel import BaseCloudModel + + +# Model that represents the response received from the cloud after requesting to upload a print job +# Spec: https://api-staging.ultimaker.com/cura/v1/spec +class CloudPrintJobResponse(BaseCloudModel): + ## Creates a new print job response model. + # \param job_id: The job unique ID, e.g. 'kBEeZWEifXbrXviO8mRYLx45P8k5lHVGs43XKvRniPg='. + # \param status: The status of the print job. + # \param status_description: Contains more details about the status, e.g. the cause of failures. + # \param download_url: A signed URL to download the resulting status. Only available when the job is finished. + # \param job_name: The name of the print job. + # \param slicing_details: Model for slice information. + # \param upload_url: The one-time use URL where the toolpath must be uploaded to (only if status is uploading). + # \param content_type: The content type of the print job (e.g. text/plain or application/gzip) + # \param generated_time: The datetime when the object was generated on the server-side. + def __init__(self, job_id: str, status: str, download_url: Optional[str] = None, job_name: Optional[str] = None, + upload_url: Optional[str] = None, content_type: Optional[str] = None, + status_description: Optional[str] = None, slicing_details: Optional[dict] = None, **kwargs) -> None: + self.job_id = job_id + self.status = status + self.download_url = download_url + self.job_name = job_name + self.upload_url = upload_url + self.content_type = content_type + self.status_description = status_description + # TODO: Implement slicing details + self.slicing_details = slicing_details + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobUploadRequest.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobUploadRequest.py new file mode 100644 index 0000000000..e59c571558 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobUploadRequest.py @@ -0,0 +1,17 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from .BaseCloudModel import BaseCloudModel + + +# Model that represents the request to upload a print job to the cloud +# Spec: https://api-staging.ultimaker.com/cura/v1/spec +class CloudPrintJobUploadRequest(BaseCloudModel): + ## Creates a new print job upload request. + # \param job_name: The name of the print job. + # \param file_size: The size of the file in bytes. + # \param content_type: The content type of the print job (e.g. text/plain or application/gzip) + def __init__(self, job_name: str, file_size: int, content_type: str, **kwargs) -> None: + self.job_name = job_name + self.file_size = file_size + self.content_type = content_type + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintResponse.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintResponse.py new file mode 100644 index 0000000000..919d1b3c3a --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintResponse.py @@ -0,0 +1,23 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from datetime import datetime +from typing import Optional, Union + +from .BaseCloudModel import BaseCloudModel + + +# Model that represents the responses received from the cloud after requesting a job to be printed. +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudPrintResponse(BaseCloudModel): + ## Creates a new print response object. + # \param job_id: The unique ID of a print job inside of the cluster. This ID is generated by Cura Connect. + # \param status: The status of the print request (queued or failed). + # \param generated_time: The datetime when the object was generated on the server-side. + # \param cluster_job_id: The unique ID of a print job inside of the cluster. This ID is generated by Cura Connect. + def __init__(self, job_id: str, status: str, generated_time: Union[str, datetime], + cluster_job_id: Optional[str] = None, **kwargs) -> None: + self.job_id = job_id + self.status = status + self.cluster_job_id = cluster_job_id + self.generated_time = self.parseDate(generated_time) + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/__init__.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/__init__.py new file mode 100644 index 0000000000..f3f6970c54 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. diff --git a/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py b/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py new file mode 100644 index 0000000000..176b7e6ab7 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py @@ -0,0 +1,148 @@ +# Copyright (c) 2018 Ultimaker B.V. +# !/usr/bin/env python +# -*- coding: utf-8 -*- +from PyQt5.QtCore import QUrl +from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManager +from typing import Optional, Callable, Any, Tuple, cast + +from UM.Logger import Logger +from .Models.CloudPrintJobResponse import CloudPrintJobResponse + + +## Class responsible for uploading meshes to the cloud in separate requests. +class ToolPathUploader: + + # The maximum amount of times to retry if the server returns one of the RETRY_HTTP_CODES + MAX_RETRIES = 10 + + # The HTTP codes that should trigger a retry. + RETRY_HTTP_CODES = {500, 502, 503, 504} + + # The amount of bytes to send per request + BYTES_PER_REQUEST = 256 * 1024 + + ## Creates a mesh upload object. + # \param manager: The network access manager that will handle the HTTP requests. + # \param print_job: The print job response that was returned by the cloud after registering the upload. + # \param data: The mesh bytes to be uploaded. + # \param on_finished: The method to be called when done. + # \param on_progress: The method to be called when the progress changes (receives a percentage 0-100). + # \param on_error: The method to be called when an error occurs. + def __init__(self, manager: QNetworkAccessManager, print_job: CloudPrintJobResponse, data: bytes, + on_finished: Callable[[], Any], on_progress: Callable[[int], Any], on_error: Callable[[], Any] + ) -> None: + self._manager = manager + self._print_job = print_job + self._data = data + + self._on_finished = on_finished + self._on_progress = on_progress + self._on_error = on_error + + self._sent_bytes = 0 + self._retries = 0 + self._finished = False + self._reply = None # type: Optional[QNetworkReply] + + ## Returns the print job for which this object was created. + @property + def printJob(self): + return self._print_job + + ## Creates a network request to the print job upload URL, adding the needed content range header. + def _createRequest(self) -> QNetworkRequest: + request = QNetworkRequest(QUrl(self._print_job.upload_url)) + request.setHeader(QNetworkRequest.ContentTypeHeader, self._print_job.content_type) + + first_byte, last_byte = self._chunkRange() + content_range = "bytes {}-{}/{}".format(first_byte, last_byte - 1, len(self._data)) + request.setRawHeader(b"Content-Range", content_range.encode()) + Logger.log("i", "Uploading %s to %s", content_range, self._print_job.upload_url) + + return request + + ## Determines the bytes that should be uploaded next. + # \return: A tuple with the first and the last byte to upload. + def _chunkRange(self) -> Tuple[int, int]: + last_byte = min(len(self._data), self._sent_bytes + self.BYTES_PER_REQUEST) + return self._sent_bytes, last_byte + + ## Starts uploading the mesh. + def start(self) -> None: + if self._finished: + # reset state. + self._sent_bytes = 0 + self._retries = 0 + self._finished = False + self._uploadChunk() + + ## Stops uploading the mesh, marking it as finished. + def stop(self): + Logger.log("i", "Stopped uploading") + self._finished = True + + ## Uploads a chunk of the mesh to the cloud. + def _uploadChunk(self) -> None: + if self._finished: + raise ValueError("The upload is already finished") + + first_byte, last_byte = self._chunkRange() + request = self._createRequest() + + # now send the reply and subscribe to the results + self._reply = self._manager.put(request, self._data[first_byte:last_byte]) + self._reply.finished.connect(self._finishedCallback) + self._reply.uploadProgress.connect(self._progressCallback) + self._reply.error.connect(self._errorCallback) + + ## Handles an update to the upload progress + # \param bytes_sent: The amount of bytes sent in the current request. + # \param bytes_total: The amount of bytes to send in the current request. + def _progressCallback(self, bytes_sent: int, bytes_total: int) -> None: + Logger.log("i", "Progress callback %s / %s", bytes_sent, bytes_total) + if bytes_total: + total_sent = self._sent_bytes + bytes_sent + self._on_progress(int(total_sent / len(self._data) * 100)) + + ## Handles an error uploading. + def _errorCallback(self) -> None: + reply = cast(QNetworkReply, self._reply) + body = bytes(reply.readAll()).decode() + Logger.log("e", "Received error while uploading: %s", body) + self.stop() + self._on_error() + + ## Checks whether a chunk of data was uploaded successfully, starting the next chunk if needed. + def _finishedCallback(self) -> None: + reply = cast(QNetworkReply, self._reply) + Logger.log("i", "Finished callback %s %s", + reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url().toString()) + + status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) # type: int + + # check if we should retry the last chunk + if self._retries < self.MAX_RETRIES and status_code in self.RETRY_HTTP_CODES: + self._retries += 1 + Logger.log("i", "Retrying %s/%s request %s", self._retries, self.MAX_RETRIES, reply.url().toString()) + self._uploadChunk() + return + + # Http codes that are not to be retried are assumed to be errors. + if status_code > 308: + self._errorCallback() + return + + Logger.log("d", "status_code: %s, Headers: %s, body: %s", status_code, + [bytes(header).decode() for header in reply.rawHeaderList()], bytes(reply.readAll()).decode()) + self._chunkUploaded() + + ## Handles a chunk of data being uploaded, starting the next chunk if needed. + def _chunkUploaded(self) -> None: + # We got a successful response. Let's start the next chunk or report the upload is finished. + first_byte, last_byte = self._chunkRange() + self._sent_bytes += last_byte - first_byte + if self._sent_bytes >= len(self._data): + self.stop() + self._on_finished() + else: + self._uploadChunk() diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Utils.py b/plugins/UM3NetworkPrinting/src/Cloud/Utils.py new file mode 100644 index 0000000000..5136e0e7db --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Utils.py @@ -0,0 +1,54 @@ +from datetime import datetime, timedelta +from typing import TypeVar, Dict, Tuple, List + +from UM import i18nCatalog + +T = TypeVar("T") +U = TypeVar("U") + + +## Splits the given dictionaries into three lists (in a tuple): +# - `removed`: Items that were in the first argument but removed in the second one. +# - `added`: Items that were not in the first argument but were included in the second one. +# - `updated`: Items that were in both dictionaries. Both values are given in a tuple. +# \param previous: The previous items +# \param received: The received items +# \return: The tuple (removed, added, updated) as explained above. +def findChanges(previous: Dict[str, T], received: Dict[str, U]) -> Tuple[List[T], List[U], List[Tuple[T, U]]]: + previous_ids = set(previous) + received_ids = set(received) + + removed_ids = previous_ids.difference(received_ids) + new_ids = received_ids.difference(previous_ids) + updated_ids = received_ids.intersection(previous_ids) + + removed = [previous[removed_id] for removed_id in removed_ids] + added = [received[new_id] for new_id in new_ids] + updated = [(previous[updated_id], received[updated_id]) for updated_id in updated_ids] + + return removed, added, updated + + +def formatTimeCompleted(seconds_remaining: int) -> str: + completed = datetime.now() + timedelta(seconds=seconds_remaining) + return "{hour:02d}:{minute:02d}".format(hour = completed.hour, minute = completed.minute) + + +def formatDateCompleted(seconds_remaining: int) -> str: + now = datetime.now() + completed = now + timedelta(seconds=seconds_remaining) + days = (completed.date() - now.date()).days + i18n = i18nCatalog("cura") + + # If finishing date is more than 7 days out, using "Mon Dec 3 at HH:MM" format + if days >= 7: + return completed.strftime("%a %b ") + "{day}".format(day = completed.day) + # If finishing date is within the next week, use "Monday at HH:MM" format + elif days >= 2: + return completed.strftime("%a") + # If finishing tomorrow, use "tomorrow at HH:MM" format + elif days >= 1: + return i18n.i18nc("@info:status", "tomorrow") + # If finishing today, use "today at HH:MM" format + else: + return i18n.i18nc("@info:status", "today") diff --git a/plugins/UM3NetworkPrinting/src/Cloud/__init__.py b/plugins/UM3NetworkPrinting/src/Cloud/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py similarity index 54% rename from plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py rename to plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py index e85961f619..c1a6362455 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py @@ -1,82 +1,87 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import Any, cast, Optional, Set, Tuple, Union +from typing import Any, cast, Tuple, Union, Optional, Dict, List +from time import time + +import io # To create the correct buffers for sending data to the printer. +import json +import os from UM.FileHandler.FileHandler import FileHandler -from UM.FileHandler.FileWriter import FileWriter #To choose based on the output file mode (text vs. binary). -from UM.FileHandler.WriteFileJob import WriteFileJob #To call the file writer asynchronously. +from UM.FileHandler.WriteFileJob import WriteFileJob # To call the file writer asynchronously. from UM.Logger import Logger from UM.Settings.ContainerRegistry import ContainerRegistry from UM.i18n import i18nCatalog -from UM.Mesh.MeshWriter import MeshWriter # For typing -from UM.Message import Message from UM.Qt.Duration import Duration, DurationFormat -from UM.OutputDevice import OutputDeviceError #To show that something went wrong when writing. -from UM.Scene.SceneNode import SceneNode #For typing. -from UM.Version import Version #To check against firmware versions for support. + +from UM.Message import Message +from UM.Scene.SceneNode import SceneNode # For typing. from cura.CuraApplication import CuraApplication -from cura.PrinterOutput.NetworkedPrinterOutputDevice import NetworkedPrinterOutputDevice, AuthState +from cura.PrinterOutput.ConfigurationModel import ConfigurationModel +from cura.PrinterOutput.ExtruderConfigurationModel import ExtruderConfigurationModel +from cura.PrinterOutput.NetworkedPrinterOutputDevice import AuthState, NetworkedPrinterOutputDevice from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel -from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel from cura.PrinterOutput.MaterialOutputModel import MaterialOutputModel -from cura.PrinterOutput.NetworkCamera import NetworkCamera +from cura.PrinterOutputDevice import ConnectionType +from .Cloud.Utils import formatTimeCompleted, formatDateCompleted from .ClusterUM3PrinterOutputController import ClusterUM3PrinterOutputController +from .ConfigurationChangeModel import ConfigurationChangeModel +from .MeshFormatHandler import MeshFormatHandler from .SendMaterialJob import SendMaterialJob +from .UM3PrintJobOutputModel import UM3PrintJobOutputModel from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply -from PyQt5.QtGui import QDesktopServices +from PyQt5.QtGui import QDesktopServices, QImage from PyQt5.QtCore import pyqtSlot, QUrl, pyqtSignal, pyqtProperty, QObject -from time import time -from datetime import datetime -from typing import Optional, Dict, List, Set - -import io #To create the correct buffers for sending data to the printer. -import json -import os - i18n_catalog = i18nCatalog("cura") class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): printJobsChanged = pyqtSignal() activePrinterChanged = pyqtSignal() + activeCameraUrlChanged = pyqtSignal() + receivedPrintJobsChanged = pyqtSignal() - # This is a bit of a hack, as the notify can only use signals that are defined by the class that they are in. - # Inheritance doesn't seem to work. Tying them together does work, but i'm open for better suggestions. - clusterPrintersChanged = pyqtSignal() + # Notify can only use signals that are defined by the class that they are in, not inherited ones. + # Therefore we create a private signal used to trigger the printersChanged signal. + _clusterPrintersChanged = pyqtSignal() def __init__(self, device_id, address, properties, parent = None) -> None: - super().__init__(device_id = device_id, address = address, properties=properties, parent = parent) + super().__init__(device_id = device_id, address = address, properties=properties, connection_type = ConnectionType.NetworkConnection, parent = parent) self._api_prefix = "/cluster-api/v1/" + self._application = CuraApplication.getInstance() + self._number_of_extruders = 2 - self._dummy_lambdas = ("", {}, io.BytesIO()) #type: Tuple[str, Dict, Union[io.StringIO, io.BytesIO]] + self._dummy_lambdas = ( + "", {}, io.BytesIO() + ) # type: Tuple[Optional[str], Dict[str, Union[str, int, bool]], Union[io.StringIO, io.BytesIO]] - self._print_jobs = [] # type: List[PrintJobOutputModel] + self._print_jobs = [] # type: List[UM3PrintJobOutputModel] + self._received_print_jobs = False # type: bool - self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "ClusterMonitorItem.qml") - self._control_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "ClusterControlItem.qml") + self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../resources/qml/MonitorStage.qml") - # See comments about this hack with the clusterPrintersChanged signal - self.printersChanged.connect(self.clusterPrintersChanged) + # Trigger the printersChanged signal when the private signal is triggered + self.printersChanged.connect(self._clusterPrintersChanged) - self._accepts_commands = True #type: bool + self._accepts_commands = True # type: bool # Cluster does not have authentication, so default to authenticated self._authentication_state = AuthState.Authenticated - self._error_message = None #type: Optional[Message] - self._write_job_progress_message = None #type: Optional[Message] - self._progress_message = None #type: Optional[Message] + self._error_message = None # type: Optional[Message] + self._write_job_progress_message = None # type: Optional[Message] + self._progress_message = None # type: Optional[Message] self._active_printer = None # type: Optional[PrinterOutputModel] - self._printer_selection_dialog = None #type: QObject + self._printer_selection_dialog = None # type: QObject self.setPriority(3) # Make sure the output device gets selected above local file output self.setName(self._id) @@ -87,77 +92,47 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): self._printer_uuid_to_unique_name_mapping = {} # type: Dict[str, str] - self._finished_jobs = [] # type: List[PrintJobOutputModel] + self._finished_jobs = [] # type: List[UM3PrintJobOutputModel] - self._cluster_size = int(properties.get(b"cluster_size", 0)) + self._cluster_size = int(properties.get(b"cluster_size", 0)) # type: int - self._latest_reply_handler = None #type: Optional[QNetworkReply] + self._latest_reply_handler = None # type: Optional[QNetworkReply] + self._sending_job = None - def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: + self._active_camera_url = QUrl() # type: QUrl + + def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, + file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: self.writeStarted.emit(self) self.sendMaterialProfiles() - #Formats supported by this application (file types that we can actually write). - if file_handler: - file_formats = file_handler.getSupportedFileTypesWrite() - else: - file_formats = CuraApplication.getInstance().getMeshFileHandler().getSupportedFileTypesWrite() + mesh_format = MeshFormatHandler(file_handler, self.firmwareVersion) - global_stack = CuraApplication.getInstance().getGlobalContainerStack() - #Create a list from the supported file formats string. - if not global_stack: - Logger.log("e", "Missing global stack!") - return - - machine_file_formats = global_stack.getMetaDataEntry("file_formats").split(";") - machine_file_formats = [file_type.strip() for file_type in machine_file_formats] - #Exception for UM3 firmware version >=4.4: UFP is now supported and should be the preferred file format. - if "application/x-ufp" not in machine_file_formats and Version(self.firmwareVersion) >= Version("4.4"): - machine_file_formats = ["application/x-ufp"] + machine_file_formats - - # Take the intersection between file_formats and machine_file_formats. - format_by_mimetype = {format["mime_type"]: format for format in file_formats} - file_formats = [format_by_mimetype[mimetype] for mimetype in machine_file_formats] #Keep them ordered according to the preference in machine_file_formats. - - if len(file_formats) == 0: - Logger.log("e", "There are no file formats available to write with!") - raise OutputDeviceError.WriteRequestFailedError(i18n_catalog.i18nc("@info:status", "There are no file formats available to write with!")) - preferred_format = file_formats[0] - - #Just take the first file format available. - if file_handler is not None: - writer = file_handler.getWriterByMimeType(cast(str, preferred_format["mime_type"])) - else: - writer = CuraApplication.getInstance().getMeshFileHandler().getWriterByMimeType(cast(str, preferred_format["mime_type"])) - - if not writer: - Logger.log("e", "Unexpected error when trying to get the FileWriter") - return - - #This function pauses with the yield, waiting on instructions on which printer it needs to print with. - if not writer: + # This function pauses with the yield, waiting on instructions on which printer it needs to print with. + if not mesh_format.is_valid: Logger.log("e", "Missing file or mesh writer!") return - self._sending_job = self._sendPrintJob(writer, preferred_format, nodes) - self._sending_job.send(None) #Start the generator. + self._sending_job = self._sendPrintJob(mesh_format, nodes) + if self._sending_job is not None: + self._sending_job.send(None) # Start the generator. - if len(self._printers) > 1: #We need to ask the user. - self._spawnPrinterSelectionDialog() - is_job_sent = True - else: #Just immediately continue. - self._sending_job.send("") #No specifically selected printer. - is_job_sent = self._sending_job.send(None) + if len(self._printers) > 1: # We need to ask the user. + self._spawnPrinterSelectionDialog() + is_job_sent = True + else: # Just immediately continue. + self._sending_job.send("") # No specifically selected printer. + is_job_sent = self._sending_job.send(None) def _spawnPrinterSelectionDialog(self): if self._printer_selection_dialog is None: - path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "PrintWindow.qml") - self._printer_selection_dialog = CuraApplication.getInstance().createQmlComponent(path, {"OutputDevice": self}) + path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../resources/qml/PrintWindow.qml") + self._printer_selection_dialog = self._application.createQmlComponent(path, {"OutputDevice": self}) if self._printer_selection_dialog is not None: self._printer_selection_dialog.show() @pyqtProperty(int, constant=True) - def clusterSize(self): + def clusterSize(self) -> int: return self._cluster_size ## Allows the user to choose a printer to print with from the printer @@ -165,7 +140,8 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): # \param target_printer The name of the printer to target. @pyqtSlot(str) def selectPrinter(self, target_printer: str = "") -> None: - self._sending_job.send(target_printer) + if self._sending_job is not None: + self._sending_job.send(target_printer) @pyqtSlot() def cancelPrintSelection(self) -> None: @@ -177,11 +153,8 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): # greenlet in order to optionally wait for selectPrinter() to select a # printer. # The greenlet yields exactly three times: First time None, - # \param writer The file writer to use to create the data. - # \param preferred_format A dictionary containing some information about - # what format to write to. This is necessary to create the correct buffer - # types and file extension and such. - def _sendPrintJob(self, writer: FileWriter, preferred_format: Dict, nodes: List[SceneNode]): + # \param mesh_format Object responsible for choosing the right kind of format to write with. + def _sendPrintJob(self, mesh_format: MeshFormatHandler, nodes: List[SceneNode]): Logger.log("i", "Sending print job to printer.") if self._sending_gcode: self._error_message = Message( @@ -195,35 +168,37 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): self._sending_gcode = True - target_printer = yield #Potentially wait on the user to select a target printer. + # Potentially wait on the user to select a target printer. + target_printer = yield # type: Optional[str] # Using buffering greatly reduces the write time for many lines of gcode - stream = io.BytesIO() # type: Union[io.BytesIO, io.StringIO]# Binary mode. - if preferred_format["mode"] == FileWriter.OutputMode.TextMode: - stream = io.StringIO() + stream = mesh_format.createStream() - job = WriteFileJob(writer, stream, nodes, preferred_format["mode"]) + job = WriteFileJob(mesh_format.writer, stream, nodes, mesh_format.file_mode) - self._write_job_progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), lifetime = 0, dismissable = False, progress = -1, - title = i18n_catalog.i18nc("@info:title", "Sending Data"), use_inactivity_timer = False) + self._write_job_progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), + lifetime = 0, dismissable = False, progress = -1, + title = i18n_catalog.i18nc("@info:title", "Sending Data"), + use_inactivity_timer = False) self._write_job_progress_message.show() - self._dummy_lambdas = (target_printer, preferred_format, stream) - job.finished.connect(self._sendPrintJobWaitOnWriteJobFinished) - - job.start() - - yield True #Return that we had success! - yield #To prevent having to catch the StopIteration exception. + if mesh_format.preferred_format is not None: + self._dummy_lambdas = (target_printer, mesh_format.preferred_format, stream) + job.finished.connect(self._sendPrintJobWaitOnWriteJobFinished) + job.start() + yield True # Return that we had success! + yield # To prevent having to catch the StopIteration exception. def _sendPrintJobWaitOnWriteJobFinished(self, job: WriteFileJob) -> None: if self._write_job_progress_message: self._write_job_progress_message.hide() - self._progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), lifetime = 0, dismissable = False, progress = -1, + self._progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), lifetime = 0, + dismissable = False, progress = -1, title = i18n_catalog.i18nc("@info:title", "Sending Data")) - self._progress_message.addAction("Abort", i18n_catalog.i18nc("@action:button", "Cancel"), icon = None, description = "") + self._progress_message.addAction("Abort", i18n_catalog.i18nc("@action:button", "Cancel"), icon = "", + description = "") self._progress_message.actionTriggered.connect(self._progressMessageActionTriggered) self._progress_message.show() parts = [] @@ -238,16 +213,18 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): # Add user name to the print_job parts.append(self._createFormPart("name=owner", bytes(self._getUserName(), "utf-8"), "text/plain")) - file_name = CuraApplication.getInstance().getPrintInformation().jobName + "." + preferred_format["extension"] + file_name = self._application.getPrintInformation().jobName + "." + preferred_format["extension"] - output = stream.getvalue() #Either str or bytes depending on the output mode. + output = stream.getvalue() # Either str or bytes depending on the output mode. if isinstance(stream, io.StringIO): output = cast(str, output).encode("utf-8") output = cast(bytes, output) parts.append(self._createFormPart("name=\"file\"; filename=\"%s\"" % file_name, output)) - self._latest_reply_handler = self.postFormWithParts("print_jobs/", parts, on_finished = self._onPostPrintJobFinished, on_progress = self._onUploadPrintJobProgress) + self._latest_reply_handler = self.postFormWithParts("print_jobs/", parts, + on_finished = self._onPostPrintJobFinished, + on_progress = self._onUploadPrintJobProgress) @pyqtProperty(QObject, notify = activePrinterChanged) def activePrinter(self) -> Optional[PrinterOutputModel]: @@ -256,36 +233,49 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): @pyqtSlot(QObject) def setActivePrinter(self, printer: Optional[PrinterOutputModel]) -> None: if self._active_printer != printer: - if self._active_printer and self._active_printer.camera: - self._active_printer.camera.stop() self._active_printer = printer self.activePrinterChanged.emit() + @pyqtProperty(QUrl, notify = activeCameraUrlChanged) + def activeCameraUrl(self) -> "QUrl": + return self._active_camera_url + + @pyqtSlot(QUrl) + def setActiveCameraUrl(self, camera_url: "QUrl") -> None: + if self._active_camera_url != camera_url: + self._active_camera_url = camera_url + self.activeCameraUrlChanged.emit() + def _onPostPrintJobFinished(self, reply: QNetworkReply) -> None: if self._progress_message: self._progress_message.hide() self._compressing_gcode = False self._sending_gcode = False + ## The IP address of the printer. + @pyqtProperty(str, constant = True) + def address(self) -> str: + return self._address + def _onUploadPrintJobProgress(self, bytes_sent: int, bytes_total: int) -> None: if bytes_total > 0: new_progress = bytes_sent / bytes_total * 100 # Treat upload progress as response. Uploading can take more than 10 seconds, so if we don't, we can get # timeout responses if this happens. self._last_response_time = time() - if self._progress_message and new_progress > self._progress_message.getProgress(): + if self._progress_message is not None and new_progress != self._progress_message.getProgress(): self._progress_message.show() # Ensure that the message is visible. self._progress_message.setProgress(bytes_sent / bytes_total * 100) # If successfully sent: if bytes_sent == bytes_total: - # Show a confirmation to the user so they know the job was sucessful and provide the option to switch to the - # monitor tab. + # Show a confirmation to the user so they know the job was sucessful and provide the option to switch to + # the monitor tab. self._success_message = Message( i18n_catalog.i18nc("@info:status", "Print job was successfully sent to the printer."), lifetime=5, dismissable=True, title=i18n_catalog.i18nc("@info:title", "Data Sent")) - self._success_message.addAction("View", i18n_catalog.i18nc("@action:button", "View in Monitor"), icon=None, + self._success_message.addAction("View", i18n_catalog.i18nc("@action:button", "View in Monitor"), icon = "", description="") self._success_message.actionTriggered.connect(self._successMessageActionTriggered) self._success_message.show() @@ -301,7 +291,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): self._progress_message.hide() self._compressing_gcode = False self._sending_gcode = False - CuraApplication.getInstance().getController().setActiveStage("PrepareStage") + self._application.getController().setActiveStage("PrepareStage") # After compressing the sliced model Cura sends data to printer, to stop receiving updates from the request # the "reply" should be disconnected @@ -311,7 +301,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): def _successMessageActionTriggered(self, message_id: Optional[str] = None, action_id: Optional[str] = None) -> None: if action_id == "View": - CuraApplication.getInstance().getController().setActiveStage("MonitorStage") + self._application.getController().setActiveStage("MonitorStage") @pyqtSlot() def openPrintJobControlPanel(self) -> None: @@ -324,18 +314,22 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): QDesktopServices.openUrl(QUrl("http://" + self._address + "/printers")) @pyqtProperty("QVariantList", notify = printJobsChanged) - def printJobs(self)-> List[PrintJobOutputModel]: + def printJobs(self)-> List[UM3PrintJobOutputModel]: return self._print_jobs - @pyqtProperty("QVariantList", notify = printJobsChanged) - def queuedPrintJobs(self) -> List[PrintJobOutputModel]: - return [print_job for print_job in self._print_jobs if print_job.state == "queued"] + @pyqtProperty(bool, notify = receivedPrintJobsChanged) + def receivedPrintJobs(self) -> bool: + return self._received_print_jobs @pyqtProperty("QVariantList", notify = printJobsChanged) - def activePrintJobs(self) -> List[PrintJobOutputModel]: + def queuedPrintJobs(self) -> List[UM3PrintJobOutputModel]: + return [print_job for print_job in self._print_jobs if print_job.state == "queued" or print_job.state == "error"] + + @pyqtProperty("QVariantList", notify = printJobsChanged) + def activePrintJobs(self) -> List[UM3PrintJobOutputModel]: return [print_job for print_job in self._print_jobs if print_job.assignedPrinter is not None and print_job.state != "queued"] - @pyqtProperty("QVariantList", notify = clusterPrintersChanged) + @pyqtProperty("QVariantList", notify = _clusterPrintersChanged) def connectedPrintersTypeCount(self) -> List[Dict[str, str]]: printer_count = {} # type: Dict[str, int] for printer in self._printers: @@ -348,21 +342,39 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): result.append({"machine_type": machine_type, "count": str(printer_count[machine_type])}) return result + @pyqtProperty("QVariantList", notify=_clusterPrintersChanged) + def printers(self): + return self._printers + + @pyqtSlot(int, result = str) + def getTimeCompleted(self, time_remaining: int) -> str: + return formatTimeCompleted(time_remaining) + + @pyqtSlot(int, result = str) + def getDateCompleted(self, time_remaining: int) -> str: + return formatDateCompleted(time_remaining) + @pyqtSlot(int, result = str) def formatDuration(self, seconds: int) -> str: return Duration(seconds).getDisplayString(DurationFormat.Format.Short) - @pyqtSlot(int, result = str) - def getTimeCompleted(self, time_remaining: int) -> str: - current_time = time() - datetime_completed = datetime.fromtimestamp(current_time + time_remaining) - return "{hour:02d}:{minute:02d}".format(hour=datetime_completed.hour, minute=datetime_completed.minute) + @pyqtSlot(str) + def sendJobToTop(self, print_job_uuid: str) -> None: + # This function is part of the output device (and not of the printjob output model) as this type of operation + # is a modification of the cluster queue and not of the actual job. + data = "{\"to_position\": 0}" + self.put("print_jobs/{uuid}/move_to_position".format(uuid = print_job_uuid), data, on_finished=None) - @pyqtSlot(int, result = str) - def getDateCompleted(self, time_remaining: int) -> str: - current_time = time() - datetime_completed = datetime.fromtimestamp(current_time + time_remaining) - return (datetime_completed.strftime("%a %b ") + "{day}".format(day=datetime_completed.day)).upper() + @pyqtSlot(str) + def deleteJobFromQueue(self, print_job_uuid: str) -> None: + # This function is part of the output device (and not of the printjob output model) as this type of operation + # is a modification of the cluster queue and not of the actual job. + self.delete("print_jobs/{uuid}".format(uuid = print_job_uuid), on_finished=None) + + @pyqtSlot(str) + def forceSendJob(self, print_job_uuid: str) -> None: + data = "{\"force\": true}" + self.put("print_jobs/{uuid}".format(uuid=print_job_uuid), data, on_finished=None) def _printJobStateChanged(self) -> None: username = self._getUserName() @@ -392,12 +404,30 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): super().connect() self.sendMaterialProfiles() + def _onGetPreviewImageFinished(self, reply: QNetworkReply) -> None: + reply_url = reply.url().toString() + + uuid = reply_url[reply_url.find("print_jobs/")+len("print_jobs/"):reply_url.rfind("/preview_image")] + + print_job = findByKey(self._print_jobs, uuid) + if print_job: + image = QImage() + image.loadFromData(reply.readAll()) + print_job.updatePreviewImage(image) + def _update(self) -> None: super()._update() self.get("printers/", on_finished = self._onGetPrintersDataFinished) self.get("print_jobs/", on_finished = self._onGetPrintJobsFinished) + for print_job in self._print_jobs: + if print_job.getPreviewImage() is None: + self.get("print_jobs/{uuid}/preview_image".format(uuid=print_job.key), on_finished=self._onGetPreviewImageFinished) + def _onGetPrintJobsFinished(self, reply: QNetworkReply) -> None: + self._received_print_jobs = True + self.receivedPrintJobsChanged.emit() + if not checkValidGetReply(reply): return @@ -407,16 +437,19 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): print_jobs_seen = [] job_list_changed = False - for print_job_data in result: + for idx, print_job_data in enumerate(result): print_job = findByKey(self._print_jobs, print_job_data["uuid"]) - if print_job is None: print_job = self._createPrintJobModel(print_job_data) job_list_changed = True + elif not job_list_changed: + # Check if the order of the jobs has changed since the last check + if self._print_jobs.index(print_job) != idx: + job_list_changed = True self._updatePrintJob(print_job, print_job_data) - if print_job.state != "queued": # Print job should be assigned to a printer. + if print_job.state != "queued" and print_job.state != "error": # Print job should be assigned to a printer. if print_job.state in ["failed", "finished", "aborted", "none"]: # Print job was already completed, so don't attach it to a printer. printer = None @@ -437,6 +470,8 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): job_list_changed = job_list_changed or self._removeJob(removed_job) if job_list_changed: + # Override the old list with the new list (either because jobs were removed / added or order changed) + self._print_jobs = print_jobs_seen self.printJobsChanged.emit() # Do a single emit for all print job changes. def _onGetPrintersDataFinished(self, reply: QNetworkReply) -> None: @@ -471,23 +506,109 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): def _createPrinterModel(self, data: Dict[str, Any]) -> PrinterOutputModel: printer = PrinterOutputModel(output_controller = ClusterUM3PrinterOutputController(self), number_of_extruders = self._number_of_extruders) - printer.setCamera(NetworkCamera("http://" + data["ip_address"] + ":8080/?action=stream")) + printer.setCameraUrl(QUrl("http://" + data["ip_address"] + ":8080/?action=stream")) self._printers.append(printer) return printer - def _createPrintJobModel(self, data: Dict[str, Any]) -> PrintJobOutputModel: - print_job = PrintJobOutputModel(output_controller=ClusterUM3PrinterOutputController(self), + def _createPrintJobModel(self, data: Dict[str, Any]) -> UM3PrintJobOutputModel: + print_job = UM3PrintJobOutputModel(output_controller=ClusterUM3PrinterOutputController(self), key=data["uuid"], name= data["name"]) + + configuration = ConfigurationModel() + extruders = [ExtruderConfigurationModel(position = idx) for idx in range(0, self._number_of_extruders)] + for index in range(0, self._number_of_extruders): + try: + extruder_data = data["configuration"][index] + except IndexError: + continue + extruder = extruders[int(data["configuration"][index]["extruder_index"])] + extruder.setHotendID(extruder_data.get("print_core_id", "")) + extruder.setMaterial(self._createMaterialOutputModel(extruder_data.get("material", {}))) + + configuration.setExtruderConfigurations(extruders) + print_job.updateConfiguration(configuration) + print_job.setCompatibleMachineFamilies(data.get("compatible_machine_families", [])) print_job.stateChanged.connect(self._printJobStateChanged) - self._print_jobs.append(print_job) return print_job - def _updatePrintJob(self, print_job: PrintJobOutputModel, data: Dict[str, Any]) -> None: + def _updatePrintJob(self, print_job: UM3PrintJobOutputModel, data: Dict[str, Any]) -> None: print_job.updateTimeTotal(data["time_total"]) print_job.updateTimeElapsed(data["time_elapsed"]) - print_job.updateState(data["status"]) + impediments_to_printing = data.get("impediments_to_printing", []) print_job.updateOwner(data["owner"]) + status_set_by_impediment = False + for impediment in impediments_to_printing: + if impediment["severity"] == "UNFIXABLE": + status_set_by_impediment = True + print_job.updateState("error") + break + + if not status_set_by_impediment: + print_job.updateState(data["status"]) + + print_job.updateConfigurationChanges(self._createConfigurationChanges(data["configuration_changes_required"])) + + def _createConfigurationChanges(self, data: List[Dict[str, Any]]) -> List[ConfigurationChangeModel]: + result = [] + for change in data: + result.append(ConfigurationChangeModel(type_of_change=change["type_of_change"], + index=change["index"], + target_name=change["target_name"], + origin_name=change["origin_name"])) + return result + + def _createMaterialOutputModel(self, material_data: Dict[str, Any]) -> "MaterialOutputModel": + material_manager = self._application.getMaterialManager() + material_group_list = None + + # Avoid crashing if there is no "guid" field in the metadata + material_guid = material_data.get("guid") + if material_guid: + material_group_list = material_manager.getMaterialGroupListByGUID(material_guid) + + # This can happen if the connected machine has no material in one or more extruders (if GUID is empty), or the + # material is unknown to Cura, so we should return an "empty" or "unknown" material model. + if material_group_list is None: + material_name = i18n_catalog.i18nc("@label:material", "Empty") if len(material_data.get("guid", "")) == 0 \ + else i18n_catalog.i18nc("@label:material", "Unknown") + + return MaterialOutputModel(guid = material_data.get("guid", ""), + type = material_data.get("material", ""), + color = material_data.get("color", ""), + brand = material_data.get("brand", ""), + name = material_data.get("name", material_name) + ) + + # Sort the material groups by "is_read_only = True" first, and then the name alphabetically. + read_only_material_group_list = list(filter(lambda x: x.is_read_only, material_group_list)) + non_read_only_material_group_list = list(filter(lambda x: not x.is_read_only, material_group_list)) + material_group = None + if read_only_material_group_list: + read_only_material_group_list = sorted(read_only_material_group_list, key = lambda x: x.name) + material_group = read_only_material_group_list[0] + elif non_read_only_material_group_list: + non_read_only_material_group_list = sorted(non_read_only_material_group_list, key = lambda x: x.name) + material_group = non_read_only_material_group_list[0] + + if material_group: + container = material_group.root_material_node.getContainer() + color = container.getMetaDataEntry("color_code") + brand = container.getMetaDataEntry("brand") + material_type = container.getMetaDataEntry("material") + name = container.getName() + else: + Logger.log("w", + "Unable to find material with guid {guid}. Using data as provided by cluster".format( + guid=material_data["guid"])) + color = material_data["color"] + brand = material_data["brand"] + material_type = material_data["material"] + name = i18n_catalog.i18nc("@label:material", "Empty") if material_data["material"] == "empty" \ + else i18n_catalog.i18nc("@label:material", "Unknown") + return MaterialOutputModel(guid = material_data["guid"], type = material_type, + brand = brand, color = color, name = name) + def _updatePrinter(self, printer: PrinterOutputModel, data: Dict[str, Any]) -> None: # For some unknown reason the cluster wants UUID for everything, except for sending a job directly to a printer. # Then we suddenly need the unique name. So in order to not have to mess up all the other code, we save a mapping. @@ -506,7 +627,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): # Do not store the build plate information that comes from connect if the current printer has not build plate information if "build_plate" in data and machine_definition.getMetaDataEntry("has_variant_buildplates", False): - printer.updateBuildplateName(data["build_plate"]["type"]) + printer.updateBuildplate(data["build_plate"]["type"]) if not data["enabled"]: printer.updateState("disabled") else: @@ -523,27 +644,10 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): material_data = extruder_data["material"] if extruder.activeMaterial is None or extruder.activeMaterial.guid != material_data["guid"]: - containers = ContainerRegistry.getInstance().findInstanceContainers(type="material", - GUID=material_data["guid"]) - if containers: - color = containers[0].getMetaDataEntry("color_code") - brand = containers[0].getMetaDataEntry("brand") - material_type = containers[0].getMetaDataEntry("material") - name = containers[0].getName() - else: - Logger.log("w", - "Unable to find material with guid {guid}. Using data as provided by cluster".format( - guid=material_data["guid"])) - color = material_data["color"] - brand = material_data["brand"] - material_type = material_data["material"] - name = "Empty" if material_data["material"] == "empty" else "Unknown" - - material = MaterialOutputModel(guid=material_data["guid"], type=material_type, - brand=brand, color=color, name=name) + material = self._createMaterialOutputModel(material_data) extruder.updateActiveMaterial(material) - def _removeJob(self, job: PrintJobOutputModel) -> bool: + def _removeJob(self, job: UM3PrintJobOutputModel) -> bool: if job not in self._print_jobs: return False @@ -586,8 +690,8 @@ def checkValidGetReply(reply: QNetworkReply) -> bool: return True -def findByKey(list: List[Union[PrintJobOutputModel, PrinterOutputModel]], key: str) -> Optional[PrintJobOutputModel]: - for item in list: +def findByKey(lst: List[Union[UM3PrintJobOutputModel, PrinterOutputModel]], key: str) -> Optional[UM3PrintJobOutputModel]: + for item in lst: if item.key == key: return item return None diff --git a/plugins/UM3NetworkPrinting/ClusterUM3PrinterOutputController.py b/plugins/UM3NetworkPrinting/src/ClusterUM3PrinterOutputController.py similarity index 91% rename from plugins/UM3NetworkPrinting/ClusterUM3PrinterOutputController.py rename to plugins/UM3NetworkPrinting/src/ClusterUM3PrinterOutputController.py index 4a0319cafc..fc6798386a 100644 --- a/plugins/UM3NetworkPrinting/ClusterUM3PrinterOutputController.py +++ b/plugins/UM3NetworkPrinting/src/ClusterUM3PrinterOutputController.py @@ -6,8 +6,6 @@ from cura.PrinterOutput.PrinterOutputController import PrinterOutputController MYPY = False if MYPY: from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel - from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel - class ClusterUM3PrinterOutputController(PrinterOutputController): def __init__(self, output_device): @@ -20,4 +18,3 @@ class ClusterUM3PrinterOutputController(PrinterOutputController): def setJobState(self, job: "PrintJobOutputModel", state: str): data = "{\"action\": \"%s\"}" % state self._output_device.put("print_jobs/%s/action" % job.key, data, on_finished=None) - diff --git a/plugins/UM3NetworkPrinting/src/ConfigurationChangeModel.py b/plugins/UM3NetworkPrinting/src/ConfigurationChangeModel.py new file mode 100644 index 0000000000..ef8a212b76 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/ConfigurationChangeModel.py @@ -0,0 +1,29 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot + +class ConfigurationChangeModel(QObject): + def __init__(self, type_of_change: str, index: int, target_name: str, origin_name: str) -> None: + super().__init__() + self._type_of_change = type_of_change + # enum = ["material", "print_core_change"] + self._index = index + self._target_name = target_name + self._origin_name = origin_name + + @pyqtProperty(int, constant = True) + def index(self) -> int: + return self._index + + @pyqtProperty(str, constant = True) + def typeOfChange(self) -> str: + return self._type_of_change + + @pyqtProperty(str, constant = True) + def targetName(self) -> str: + return self._target_name + + @pyqtProperty(str, constant = True) + def originName(self) -> str: + return self._origin_name diff --git a/plugins/UM3NetworkPrinting/DiscoverUM3Action.py b/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py similarity index 73% rename from plugins/UM3NetworkPrinting/DiscoverUM3Action.py rename to plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py index c0a828ece9..ecc89b3948 100644 --- a/plugins/UM3NetworkPrinting/DiscoverUM3Action.py +++ b/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py @@ -3,7 +3,7 @@ import os.path import time -from typing import cast, Optional +from typing import Optional, TYPE_CHECKING from PyQt5.QtCore import pyqtSignal, pyqtProperty, pyqtSlot, QObject @@ -13,9 +13,13 @@ from UM.i18n import i18nCatalog from cura.CuraApplication import CuraApplication from cura.MachineAction import MachineAction +from cura.Settings.CuraContainerRegistry import CuraContainerRegistry from .UM3OutputDevicePlugin import UM3OutputDevicePlugin +if TYPE_CHECKING: + from cura.PrinterOutputDevice import PrinterOutputDevice + catalog = i18nCatalog("cura") @@ -24,7 +28,7 @@ class DiscoverUM3Action(MachineAction): def __init__(self) -> None: super().__init__("DiscoverUM3Action", catalog.i18nc("@action","Connect via Network")) - self._qml_url = "DiscoverUM3Action.qml" + self._qml_url = "resources/qml/DiscoverUM3Action.qml" self._network_plugin = None #type: Optional[UM3OutputDevicePlugin] @@ -102,13 +106,13 @@ class DiscoverUM3Action(MachineAction): global_container_stack = CuraApplication.getInstance().getGlobalContainerStack() if global_container_stack: meta_data = global_container_stack.getMetaData() - if "connect_group_name" in meta_data: - previous_connect_group_name = meta_data["connect_group_name"] - global_container_stack.setMetaDataEntry("connect_group_name", group_name) + if "group_name" in meta_data: + previous_connect_group_name = meta_data["group_name"] + global_container_stack.setMetaDataEntry("group_name", group_name) # Find all the places where there is the same group name and change it accordingly - CuraApplication.getInstance().getMachineManager().replaceContainersMetadata(key = "connect_group_name", value = previous_connect_group_name, new_value = group_name) + CuraApplication.getInstance().getMachineManager().replaceContainersMetadata(key = "group_name", value = previous_connect_group_name, new_value = group_name) else: - global_container_stack.setMetaDataEntry("connect_group_name", group_name) + global_container_stack.setMetaDataEntry("group_name", group_name) # Set the default value for "hidden", which is used when you have a group with multiple types of printers global_container_stack.setMetaDataEntry("hidden", False) @@ -116,22 +120,43 @@ class DiscoverUM3Action(MachineAction): # Ensure that the connection states are refreshed. self._network_plugin.reCheckConnections() - @pyqtSlot(str) - def setKey(self, key: str) -> None: - Logger.log("d", "Attempting to set the network key of the active machine to %s", key) + # Associates the currently active machine with the given printer device. The network connection information will be + # stored into the metadata of the currently active machine. + @pyqtSlot(QObject) + def associateActiveMachineWithPrinterDevice(self, printer_device: Optional["PrinterOutputDevice"]) -> None: + if not printer_device: + return + + Logger.log("d", "Attempting to set the network key of the active machine to %s", printer_device.key) + global_container_stack = CuraApplication.getInstance().getGlobalContainerStack() - if global_container_stack: - meta_data = global_container_stack.getMetaData() - if "um_network_key" in meta_data: - previous_network_key= meta_data["um_network_key"] - global_container_stack.setMetaDataEntry("um_network_key", key) + if not global_container_stack: + return + + meta_data = global_container_stack.getMetaData() + + if "um_network_key" in meta_data: # Global stack already had a connection, but it's changed. + old_network_key = meta_data["um_network_key"] + # Since we might have a bunch of hidden stacks, we also need to change it there. + metadata_filter = {"um_network_key": old_network_key} + containers = CuraContainerRegistry.getInstance().findContainerStacks(type="machine", **metadata_filter) + + for container in containers: + container.setMetaDataEntry("um_network_key", printer_device.key) + # Delete old authentication data. - Logger.log("d", "Removing old authentication id %s for device %s", global_container_stack.getMetaDataEntry("network_authentication_id", None), key) - global_container_stack.removeMetaDataEntry("network_authentication_id") - global_container_stack.removeMetaDataEntry("network_authentication_key") - CuraApplication.getInstance().getMachineManager().replaceContainersMetadata(key = "um_network_key", value = previous_network_key, new_value = key) - else: - global_container_stack.setMetaDataEntry("um_network_key", key) + Logger.log("d", "Removing old authentication id %s for device %s", + global_container_stack.getMetaDataEntry("network_authentication_id", None), printer_device.key) + + container.removeMetaDataEntry("network_authentication_id") + container.removeMetaDataEntry("network_authentication_key") + + # Ensure that these containers do know that they are configured for network connection + container.addConfiguredConnectionType(printer_device.connectionType.value) + + else: # Global stack didn't have a connection yet, configure it. + global_container_stack.setMetaDataEntry("um_network_key", printer_device.key) + global_container_stack.addConfiguredConnectionType(printer_device.connectionType.value) if self._network_plugin: # Ensure that the connection states are refreshed. @@ -174,7 +199,7 @@ class DiscoverUM3Action(MachineAction): plugin_path = PluginRegistry.getInstance().getPluginPath("UM3NetworkPrinting") if not plugin_path: return - path = os.path.join(plugin_path, "UM3InfoComponents.qml") + path = os.path.join(plugin_path, "resources/qml/UM3InfoComponents.qml") self.__additional_components_view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self}) if not self.__additional_components_view: Logger.log("w", "Could not create ui components for UM3.") @@ -182,4 +207,3 @@ class DiscoverUM3Action(MachineAction): # Create extra components CuraApplication.getInstance().addAdditionalComponent("monitorButtons", self.__additional_components_view.findChild(QObject, "networkPrinterConnectButton")) - CuraApplication.getInstance().addAdditionalComponent("machinesDetailPane", self.__additional_components_view.findChild(QObject, "networkPrinterConnectionInfo")) diff --git a/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py b/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py similarity index 97% rename from plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py rename to plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py index 8617b5b2ff..3ce0460d6b 100644 --- a/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py @@ -7,7 +7,7 @@ from cura.PrinterOutput.NetworkedPrinterOutputDevice import NetworkedPrinterOutp from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel from cura.PrinterOutput.MaterialOutputModel import MaterialOutputModel -from cura.PrinterOutput.NetworkCamera import NetworkCamera +from cura.PrinterOutputDevice import ConnectionType from cura.Settings.ContainerManager import ContainerManager from cura.Settings.ExtruderManager import ExtruderManager @@ -18,7 +18,7 @@ from UM.i18n import i18nCatalog from UM.Message import Message from PyQt5.QtNetwork import QNetworkRequest -from PyQt5.QtCore import QTimer +from PyQt5.QtCore import QTimer, QUrl from PyQt5.QtWidgets import QMessageBox from .LegacyUM3PrinterOutputController import LegacyUM3PrinterOutputController @@ -44,7 +44,7 @@ i18n_catalog = i18nCatalog("cura") # 5. As a final step, we verify the authentication, as this forces the QT manager to setup the authenticator. class LegacyUM3OutputDevice(NetworkedPrinterOutputDevice): def __init__(self, device_id, address: str, properties, parent = None) -> None: - super().__init__(device_id = device_id, address = address, properties = properties, parent = parent) + super().__init__(device_id = device_id, address = address, properties = properties, connection_type = ConnectionType.NetworkConnection, parent = parent) self._api_prefix = "/api/v1/" self._number_of_extruders = 2 @@ -76,7 +76,7 @@ class LegacyUM3OutputDevice(NetworkedPrinterOutputDevice): self.setIconName("print") - self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "MonitorItem.qml") + self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../resources/qml/MonitorItem.qml") self._output_controller = LegacyUM3PrinterOutputController(self) @@ -100,8 +100,7 @@ class LegacyUM3OutputDevice(NetworkedPrinterOutputDevice): title=i18n_catalog.i18nc("@info:title", "Authentication status")) - self._authentication_failed_message = Message(i18n_catalog.i18nc("@info:status", ""), - title=i18n_catalog.i18nc("@info:title", "Authentication Status")) + self._authentication_failed_message = Message("", title=i18n_catalog.i18nc("@info:title", "Authentication Status")) self._authentication_failed_message.addAction("Retry", i18n_catalog.i18nc("@action:button", "Retry"), None, i18n_catalog.i18nc("@info:tooltip", "Re-send the access request")) self._authentication_failed_message.actionTriggered.connect(self._messageCallback) @@ -500,8 +499,8 @@ class LegacyUM3OutputDevice(NetworkedPrinterOutputDevice): self._authentication_id = None self.post("auth/request", - json.dumps({"application": "Cura-" + CuraApplication.getInstance().getVersion(), - "user": self._getUserName()}).encode(), + json.dumps({"application": "Cura-" + CuraApplication.getInstance().getVersion(), + "user": self._getUserName()}), on_finished=self._onRequestAuthenticationFinished) self.setAuthenticationState(AuthState.AuthenticationRequested) @@ -569,7 +568,7 @@ class LegacyUM3OutputDevice(NetworkedPrinterOutputDevice): # Quickest way to get the firmware version is to grab it from the zeroconf. firmware_version = self._properties.get(b"firmware_version", b"").decode("utf-8") self._printers = [PrinterOutputModel(output_controller=self._output_controller, number_of_extruders=self._number_of_extruders, firmware_version=firmware_version)] - self._printers[0].setCamera(NetworkCamera("http://" + self._address + ":8080/?action=stream")) + self._printers[0].setCameraUrl(QUrl("http://" + self._address + ":8080/?action=stream")) for extruder in self._printers[0].extruders: extruder.activeMaterialChanged.connect(self.materialIdChanged) extruder.hotendIDChanged.connect(self.hotendIdChanged) diff --git a/plugins/UM3NetworkPrinting/LegacyUM3PrinterOutputController.py b/plugins/UM3NetworkPrinting/src/LegacyUM3PrinterOutputController.py similarity index 97% rename from plugins/UM3NetworkPrinting/LegacyUM3PrinterOutputController.py rename to plugins/UM3NetworkPrinting/src/LegacyUM3PrinterOutputController.py index 702b48ce15..63167b4ffb 100644 --- a/plugins/UM3NetworkPrinting/LegacyUM3PrinterOutputController.py +++ b/plugins/UM3NetworkPrinting/src/LegacyUM3PrinterOutputController.py @@ -1,4 +1,4 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from cura.PrinterOutput.PrinterOutputController import PrinterOutputController @@ -33,9 +33,9 @@ class LegacyUM3PrinterOutputController(PrinterOutputController): data = "{\"target\": \"%s\"}" % state self._output_device.put("print_job/state", data, on_finished=None) - def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: int): + def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: float): data = str(temperature) - self._output_device.put("printer/bed/temperature/target", data, on_finished=self._onPutBedTemperatureCompleted) + self._output_device.put("printer/bed/temperature/target", data, on_finished = self._onPutBedTemperatureCompleted) def _onPutBedTemperatureCompleted(self, reply): if Version(self._preheat_printer.firmwareVersion) < Version("3.5.92"): diff --git a/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py b/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py new file mode 100644 index 0000000000..c3cd82a86d --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py @@ -0,0 +1,115 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import io +from typing import Optional, Dict, Union, List, cast + +from UM.FileHandler.FileHandler import FileHandler +from UM.FileHandler.FileWriter import FileWriter +from UM.Logger import Logger +from UM.OutputDevice import OutputDeviceError # To show that something went wrong when writing. +from UM.Scene.SceneNode import SceneNode +from UM.Version import Version # To check against firmware versions for support. +from UM.i18n import i18nCatalog +from cura.CuraApplication import CuraApplication + + +I18N_CATALOG = i18nCatalog("cura") + + +## This class is responsible for choosing the formats used by the connected clusters. +class MeshFormatHandler: + + def __init__(self, file_handler: Optional[FileHandler], firmware_version: str) -> None: + self._file_handler = file_handler or CuraApplication.getInstance().getMeshFileHandler() + self._preferred_format = self._getPreferredFormat(firmware_version) + self._writer = self._getWriter(self.mime_type) if self._preferred_format else None + + @property + def is_valid(self) -> bool: + return bool(self._writer) + + ## Chooses the preferred file format. + # \return A dict with the file format details, with the following keys: + # {id: str, extension: str, description: str, mime_type: str, mode: int, hide_in_file_dialog: bool} + @property + def preferred_format(self) -> Optional[Dict[str, Union[str, int, bool]]]: + return self._preferred_format + + ## Gets the file writer for the given file handler and mime type. + # \return A file writer. + @property + def writer(self) -> Optional[FileWriter]: + return self._writer + + @property + def mime_type(self) -> str: + return cast(str, self._preferred_format["mime_type"]) + + ## Gets the file mode (FileWriter.OutputMode.TextMode or FileWriter.OutputMode.BinaryMode) + @property + def file_mode(self) -> int: + return cast(int, self._preferred_format["mode"]) + + ## Gets the file extension + @property + def file_extension(self) -> str: + return cast(str, self._preferred_format["extension"]) + + ## Creates the right kind of stream based on the preferred format. + def createStream(self) -> Union[io.BytesIO, io.StringIO]: + if self.file_mode == FileWriter.OutputMode.TextMode: + return io.StringIO() + else: + return io.BytesIO() + + ## Writes the mesh and returns its value. + def getBytes(self, nodes: List[SceneNode]) -> bytes: + if self.writer is None: + raise ValueError("There is no writer for the mesh format handler.") + stream = self.createStream() + self.writer.write(stream, nodes) + value = stream.getvalue() + if isinstance(value, str): + value = value.encode() + return value + + ## Chooses the preferred file format for the given file handler. + # \param firmware_version: The version of the firmware. + # \return A dict with the file format details. + def _getPreferredFormat(self, firmware_version: str) -> Dict[str, Union[str, int, bool]]: + # Formats supported by this application (file types that we can actually write). + application = CuraApplication.getInstance() + + file_formats = self._file_handler.getSupportedFileTypesWrite() + + global_stack = application.getGlobalContainerStack() + # Create a list from the supported file formats string. + if not global_stack: + Logger.log("e", "Missing global stack!") + return {} + + machine_file_formats = global_stack.getMetaDataEntry("file_formats").split(";") + machine_file_formats = [file_type.strip() for file_type in machine_file_formats] + # Exception for UM3 firmware version >=4.4: UFP is now supported and should be the preferred file format. + if "application/x-ufp" not in machine_file_formats and Version(firmware_version) >= Version("4.4"): + machine_file_formats = ["application/x-ufp"] + machine_file_formats + + # Take the intersection between file_formats and machine_file_formats. + format_by_mimetype = {f["mime_type"]: f for f in file_formats} + + # Keep them ordered according to the preference in machine_file_formats. + file_formats = [format_by_mimetype[mimetype] for mimetype in machine_file_formats] + + if len(file_formats) == 0: + Logger.log("e", "There are no file formats available to write with!") + raise OutputDeviceError.WriteRequestFailedError( + I18N_CATALOG.i18nc("@info:status", "There are no file formats available to write with!") + ) + return file_formats[0] + + ## Gets the file writer for the given file handler and mime type. + # \param mime_type: The mine type. + # \return A file writer. + def _getWriter(self, mime_type: str) -> Optional[FileWriter]: + # Just take the first file format available. + return self._file_handler.getWriterByMimeType(mime_type) diff --git a/plugins/UM3NetworkPrinting/src/Models.py b/plugins/UM3NetworkPrinting/src/Models.py new file mode 100644 index 0000000000..c5b9b16665 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Models.py @@ -0,0 +1,46 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + + +## Base model that maps kwargs to instance attributes. +class BaseModel: + def __init__(self, **kwargs) -> None: + self.__dict__.update(kwargs) + self.validate() + + # Validates the model, raising an exception if the model is invalid. + def validate(self) -> None: + pass + + +## Class representing a material that was fetched from the cluster API. +class ClusterMaterial(BaseModel): + def __init__(self, guid: str, version: int, **kwargs) -> None: + self.guid = guid # type: str + self.version = version # type: int + super().__init__(**kwargs) + + def validate(self) -> None: + if not self.guid: + raise ValueError("guid is required on ClusterMaterial") + if not self.version: + raise ValueError("version is required on ClusterMaterial") + + +## Class representing a local material that was fetched from the container registry. +class LocalMaterial(BaseModel): + def __init__(self, GUID: str, id: str, version: int, **kwargs) -> None: + self.GUID = GUID # type: str + self.id = id # type: str + self.version = version # type: int + super().__init__(**kwargs) + + # + def validate(self) -> None: + super().validate() + if not self.GUID: + raise ValueError("guid is required on LocalMaterial") + if not self.version: + raise ValueError("version is required on LocalMaterial") + if not self.id: + raise ValueError("id is required on LocalMaterial") diff --git a/plugins/UM3NetworkPrinting/src/SendMaterialJob.py b/plugins/UM3NetworkPrinting/src/SendMaterialJob.py new file mode 100644 index 0000000000..f0fde818c4 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/SendMaterialJob.py @@ -0,0 +1,197 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import json +import os +from typing import Dict, TYPE_CHECKING, Set, Optional +from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest + +from UM.Job import Job +from UM.Logger import Logger +from cura.CuraApplication import CuraApplication + +# Absolute imports don't work in plugins +from .Models import ClusterMaterial, LocalMaterial + +if TYPE_CHECKING: + from .ClusterUM3OutputDevice import ClusterUM3OutputDevice + + +## Asynchronous job to send material profiles to the printer. +# +# This way it won't freeze up the interface while sending those materials. +class SendMaterialJob(Job): + + def __init__(self, device: "ClusterUM3OutputDevice") -> None: + super().__init__() + self.device = device # type: ClusterUM3OutputDevice + + ## Send the request to the printer and register a callback + def run(self) -> None: + self.device.get("materials/", on_finished = self._onGetRemoteMaterials) + + ## Process the materials reply from the printer. + # + # \param reply The reply from the printer, a json file. + def _onGetRemoteMaterials(self, reply: QNetworkReply) -> None: + # Got an error from the HTTP request. If we did not receive a 200 something happened. + if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: + Logger.log("e", "Error fetching materials from printer: %s", reply.errorString()) + return + + # Collect materials from the printer's reply and send the missing ones if needed. + remote_materials_by_guid = self._parseReply(reply) + if remote_materials_by_guid: + self._sendMissingMaterials(remote_materials_by_guid) + + ## Determine which materials should be updated and send them to the printer. + # + # \param remote_materials_by_guid The remote materials by GUID. + def _sendMissingMaterials(self, remote_materials_by_guid: Dict[str, ClusterMaterial]) -> None: + # Collect local materials + local_materials_by_guid = self._getLocalMaterials() + if len(local_materials_by_guid) == 0: + Logger.log("d", "There are no local materials to synchronize with the printer.") + return + + # Find out what materials are new or updated and must be sent to the printer + material_ids_to_send = self._determineMaterialsToSend(local_materials_by_guid, remote_materials_by_guid) + if len(material_ids_to_send) == 0: + Logger.log("d", "There are no remote materials to update.") + return + + # Send materials to the printer + self._sendMaterials(material_ids_to_send) + + ## From the local and remote materials, determine which ones should be synchronized. + # + # Makes a Set of id's containing only the id's of the materials that are not on the printer yet or the ones that + # are newer in Cura. + # + # \param local_materials The local materials by GUID. + # \param remote_materials The remote materials by GUID. + @staticmethod + def _determineMaterialsToSend(local_materials: Dict[str, LocalMaterial], + remote_materials: Dict[str, ClusterMaterial]) -> Set[str]: + return { + material.id + for guid, material in local_materials.items() + if guid not in remote_materials or material.version > remote_materials[guid].version + } + + ## Send the materials to the printer. + # + # The given materials will be loaded from disk en sent to to printer. + # The given id's will be matched with filenames of the locally stored materials. + # + # \param materials_to_send A set with id's of materials that must be sent. + def _sendMaterials(self, materials_to_send: Set[str]) -> None: + container_registry = CuraApplication.getInstance().getContainerRegistry() + material_manager = CuraApplication.getInstance().getMaterialManager() + material_group_dict = material_manager.getAllMaterialGroups() + + for root_material_id in material_group_dict: + if root_material_id not in materials_to_send: + # If the material does not have to be sent we skip it. + continue + + file_path = container_registry.getContainerFilePathById(root_material_id) + if not file_path: + Logger.log("w", "Cannot get file path for material container [%s]", root_material_id) + continue + + file_name = os.path.basename(file_path) + self._sendMaterialFile(file_path, file_name, root_material_id) + + ## Send a single material file to the printer. + # + # Also add the material signature file if that is available. + # + # \param file_path The path of the material file. + # \param file_name The name of the material file. + # \param material_id The ID of the material in the file. + def _sendMaterialFile(self, file_path: str, file_name: str, material_id: str) -> None: + parts = [] + + # Add the material file. + with open(file_path, "rb") as f: + parts.append(self.device.createFormPart("name=\"file\"; filename=\"{file_name}\"" + .format(file_name = file_name), f.read())) + + # Add the material signature file if needed. + signature_file_path = "{}.sig".format(file_path) + if os.path.exists(signature_file_path): + signature_file_name = os.path.basename(signature_file_path) + with open(signature_file_path, "rb") as f: + parts.append(self.device.createFormPart("name=\"signature_file\"; filename=\"{file_name}\"" + .format(file_name = signature_file_name), f.read())) + + Logger.log("d", "Syncing material {material_id} with cluster.".format(material_id = material_id)) + self.device.postFormWithParts(target = "materials/", parts = parts, on_finished = self.sendingFinished) + + ## Check a reply from an upload to the printer and log an error when the call failed + @staticmethod + def sendingFinished(reply: QNetworkReply) -> None: + if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: + Logger.log("e", "Received error code from printer when syncing material: {code}, {text}".format( + code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), + text = reply.errorString() + )) + + ## Parse the reply from the printer + # + # Parses the reply to a "/materials" request to the printer + # + # \return a dictionary of ClusterMaterial objects by GUID + # \throw KeyError Raised when on of the materials does not include a valid guid + @classmethod + def _parseReply(cls, reply: QNetworkReply) -> Optional[Dict[str, ClusterMaterial]]: + try: + remote_materials = json.loads(reply.readAll().data().decode("utf-8")) + return {material["guid"]: ClusterMaterial(**material) for material in remote_materials} + except UnicodeDecodeError: + Logger.log("e", "Request material storage on printer: I didn't understand the printer's answer.") + except json.JSONDecodeError: + Logger.log("e", "Request material storage on printer: I didn't understand the printer's answer.") + except ValueError: + Logger.log("e", "Request material storage on printer: Printer's answer had an incorrect value.") + except TypeError: + Logger.log("e", "Request material storage on printer: Printer's answer was missing a required value.") + return None + + ## Retrieves a list of local materials + # + # Only the new newest version of the local materials is returned + # + # \return a dictionary of LocalMaterial objects by GUID + def _getLocalMaterials(self) -> Dict[str, LocalMaterial]: + result = {} # type: Dict[str, LocalMaterial] + material_manager = CuraApplication.getInstance().getMaterialManager() + + material_group_dict = material_manager.getAllMaterialGroups() + + # Find the latest version of all material containers in the registry. + for root_material_id, material_group in material_group_dict.items(): + material_metadata = material_group.root_material_node.getMetadata() + + try: + # material version must be an int + material_metadata["version"] = int(material_metadata["version"]) + + # Create a new local material + local_material = LocalMaterial(**material_metadata) + local_material.id = root_material_id + + if local_material.GUID not in result or \ + local_material.GUID not in result or \ + local_material.version > result[local_material.GUID].version: + result[local_material.GUID] = local_material + + except KeyError: + Logger.logException("w", "Local material {} has missing values.".format(material_metadata["id"])) + except ValueError: + Logger.logException("w", "Local material {} has invalid values.".format(material_metadata["id"])) + except TypeError: + Logger.logException("w", "Local material {} has invalid values.".format(material_metadata["id"])) + + return result diff --git a/plugins/UM3NetworkPrinting/UM3OutputDevicePlugin.py b/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py similarity index 59% rename from plugins/UM3NetworkPrinting/UM3OutputDevicePlugin.py rename to plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py index f4749a6747..723bcf2b7c 100644 --- a/plugins/UM3NetworkPrinting/UM3OutputDevicePlugin.py +++ b/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py @@ -1,24 +1,32 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. - -from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin -from UM.Logger import Logger -from UM.Application import Application -from UM.Signal import Signal, signalemitter -from UM.Version import Version - -from . import ClusterUM3OutputDevice, LegacyUM3OutputDevice - -from PyQt5.QtNetwork import QNetworkRequest, QNetworkAccessManager -from PyQt5.QtCore import QUrl - -from zeroconf import Zeroconf, ServiceBrowser, ServiceStateChange, ServiceInfo +import json from queue import Queue from threading import Event, Thread from time import time +import os -import json +from zeroconf import Zeroconf, ServiceBrowser, ServiceStateChange, ServiceInfo +from PyQt5.QtNetwork import QNetworkRequest, QNetworkAccessManager +from PyQt5.QtCore import pyqtSlot, QUrl, pyqtSignal, pyqtProperty, QObject +from PyQt5.QtGui import QDesktopServices +from cura.CuraApplication import CuraApplication +from cura.PrinterOutputDevice import ConnectionType +from cura.Settings.GlobalStack import GlobalStack # typing +from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin +from UM.Logger import Logger +from UM.Signal import Signal, signalemitter +from UM.Version import Version +from UM.Message import Message +from UM.i18n import i18nCatalog + +from . import ClusterUM3OutputDevice, LegacyUM3OutputDevice +from .Cloud.CloudOutputDeviceManager import CloudOutputDeviceManager + +from typing import Optional + +i18n_catalog = i18nCatalog("cura") ## This plugin handles the connection detection & creation of output device objects for the UM3 printer. # Zero-Conf is used to detect printers, which are saved in a dict. @@ -28,17 +36,24 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): addDeviceSignal = Signal() removeDeviceSignal = Signal() discoveredDevicesChanged = Signal() + cloudFlowIsPossible = Signal() def __init__(self): super().__init__() + self._zero_conf = None self._zero_conf_browser = None + self._application = CuraApplication.getInstance() + + # Create a cloud output device manager that abstracts all cloud connection logic away. + self._cloud_output_device_manager = CloudOutputDeviceManager() + # Because the model needs to be created in the same thread as the QMLEngine, we use a signal. self.addDeviceSignal.connect(self._onAddDevice) self.removeDeviceSignal.connect(self._onRemoveDevice) - Application.getInstance().globalContainerStackChanged.connect(self.reCheckConnections) + self._application.globalContainerStackChanged.connect(self.reCheckConnections) self._discovered_devices = {} @@ -46,6 +61,7 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): self._network_manager.finished.connect(self._onNetworkRequestFinished) self._min_cluster_version = Version("4.0.0") + self._min_cloud_version = Version("5.2.0") self._api_version = "1" self._api_prefix = "/api/v" + self._api_version + "/" @@ -53,7 +69,7 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): self._cluster_api_prefix = "/cluster-api/v" + self._cluster_api_version + "/" # Get list of manual instances from preferences - self._preferences = Application.getInstance().getPreferences() + self._preferences = CuraApplication.getInstance().getPreferences() self._preferences.addPreference("um3networkprinting/manual_instances", "") # A comma-separated list of ip adresses or hostnames @@ -71,6 +87,26 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): self._service_changed_request_thread = Thread(target=self._handleOnServiceChangedRequests, daemon=True) self._service_changed_request_thread.start() + self._account = self._application.getCuraAPI().account + + # Check if cloud flow is possible when user logs in + self._account.loginStateChanged.connect(self.checkCloudFlowIsPossible) + + # Check if cloud flow is possible when user switches machines + self._application.globalContainerStackChanged.connect(self._onMachineSwitched) + + # Listen for when cloud flow is possible + self.cloudFlowIsPossible.connect(self._onCloudFlowPossible) + + # Listen if cloud cluster was added + self._cloud_output_device_manager.addedCloudCluster.connect(self._onCloudPrintingConfigured) + + # Listen if cloud cluster was removed + self._cloud_output_device_manager.removedCloudCluster.connect(self.checkCloudFlowIsPossible) + + self._start_cloud_flow_message = None # type: Optional[Message] + self._cloud_flow_complete_message = None # type: Optional[Message] + def getDiscoveredDevices(self): return self._discovered_devices @@ -83,6 +119,7 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): ## Start looking for devices on network. def start(self): self.startDiscovery() + self._cloud_output_device_manager.start() def startDiscovery(self): self.stop() @@ -104,7 +141,7 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): self.resetLastManualDevice() def reCheckConnections(self): - active_machine = Application.getInstance().getGlobalContainerStack() + active_machine = CuraApplication.getInstance().getGlobalContainerStack() if not active_machine: return @@ -114,6 +151,8 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): if key == um_network_key: if not self._discovered_devices[key].isConnected(): Logger.log("d", "Attempting to connect with [%s]" % key) + # It should already be set, but if it actually connects we know for sure it's supported! + active_machine.addConfiguredConnectionType(self._discovered_devices[key].connectionType.value) self._discovered_devices[key].connect() self._discovered_devices[key].connectionStateChanged.connect(self._onDeviceConnectionStateChanged) else: @@ -129,9 +168,10 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): return if self._discovered_devices[key].isConnected(): # Sometimes the status changes after changing the global container and maybe the device doesn't belong to this machine - um_network_key = Application.getInstance().getGlobalContainerStack().getMetaDataEntry("um_network_key") + um_network_key = CuraApplication.getInstance().getGlobalContainerStack().getMetaDataEntry("um_network_key") if key == um_network_key: self.getOutputDeviceManager().addOutputDevice(self._discovered_devices[key]) + self.checkCloudFlowIsPossible() else: self.getOutputDeviceManager().removeOutputDevice(key) @@ -139,6 +179,7 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): if self._zero_conf is not None: Logger.log("d", "zeroconf close...") self._zero_conf.close() + self._cloud_output_device_manager.stop() def removeManualDevice(self, key, address = None): if key in self._discovered_devices: @@ -238,7 +279,7 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): properties = device.getProperties().copy() if b"incomplete" in properties: del properties[b"incomplete"] - properties[b'cluster_size'] = len(cluster_printers_list) + properties[b"cluster_size"] = len(cluster_printers_list) self._onRemoveDevice(instance_name) self._onAddDevice(instance_name, address, properties) @@ -260,6 +301,19 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): # or "Legacy" UM3 device. cluster_size = int(properties.get(b"cluster_size", -1)) + printer_type = properties.get(b"machine", b"").decode("utf-8") + printer_type_identifiers = { + "9066": "ultimaker3", + "9511": "ultimaker3_extended", + "9051": "ultimaker_s5" + } + + for key, value in printer_type_identifiers.items(): + if printer_type.startswith(key): + properties[b"printer_type"] = bytes(value, encoding="utf8") + break + else: + properties[b"printer_type"] = b"Unknown" if cluster_size >= 0: device = ClusterUM3OutputDevice.ClusterUM3OutputDevice(name, address, properties) else: @@ -268,8 +322,10 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): self._discovered_devices[device.getId()] = device self.discoveredDevicesChanged.emit() - global_container_stack = Application.getInstance().getGlobalContainerStack() + global_container_stack = CuraApplication.getInstance().getGlobalContainerStack() if global_container_stack and device.getId() == global_container_stack.getMetaDataEntry("um_network_key"): + # Ensure that the configured connection type is set. + global_container_stack.addConfiguredConnectionType(device.connectionType.value) device.connect() device.connectionStateChanged.connect(self._onDeviceConnectionStateChanged) @@ -286,7 +342,7 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): self._service_changed_request_event.wait(timeout = 5.0) # Stop if the application is shutting down - if Application.getInstance().isShuttingDown(): + if CuraApplication.getInstance().isShuttingDown(): return self._service_changed_request_event.clear() @@ -312,13 +368,12 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): ## Handler for zeroConf detection. # Return True or False indicating if the process succeeded. - # Note that this function can take over 3 seconds to complete. Be carefull calling it from the main thread. + # Note that this function can take over 3 seconds to complete. Be careful + # calling it from the main thread. def _onServiceChanged(self, zero_conf, service_type, name, state_change): if state_change == ServiceStateChange.Added: - Logger.log("d", "Bonjour service added: %s" % name) - # First try getting info from zero-conf cache - info = ServiceInfo(service_type, name, properties={}) + info = ServiceInfo(service_type, name, properties = {}) for record in zero_conf.cache.entries_with_name(name.lower()): info.update_record(zero_conf, time(), record) @@ -329,7 +384,6 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): # Request more data if info is not complete if not info.address: - Logger.log("d", "Trying to get address of %s", name) info = zero_conf.get_service_info(service_type, name) if info: @@ -349,4 +403,125 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): Logger.log("d", "Bonjour service removed: %s" % name) self.removeDeviceSignal.emit(str(name)) - return True \ No newline at end of file + return True + + ## Check if the prerequsites are in place to start the cloud flow + def checkCloudFlowIsPossible(self) -> None: + Logger.log("d", "Checking if cloud connection is possible...") + + # Pre-Check: Skip if active machine already has been cloud connected or you said don't ask again + active_machine = self._application.getMachineManager().activeMachine # type: Optional["GlobalStack"] + if active_machine: + + # Check 1A: Printer isn't already configured for cloud + if ConnectionType.CloudConnection.value in active_machine.configuredConnectionTypes: + Logger.log("d", "Active machine was already configured for cloud.") + return + + # Check 1B: Printer isn't already configured for cloud + if active_machine.getMetaDataEntry("cloud_flow_complete", False): + Logger.log("d", "Active machine was already configured for cloud.") + return + + # Check 2: User did not already say "Don't ask me again" + if active_machine.getMetaDataEntry("do_not_show_cloud_message", False): + Logger.log("d", "Active machine shouldn't ask about cloud anymore.") + return + + # Check 3: User is logged in with an Ultimaker account + if not self._account.isLoggedIn: + Logger.log("d", "Cloud Flow not possible: User not logged in!") + return + + # Check 4: Machine is configured for network connectivity + if not self._application.getMachineManager().activeMachineHasNetworkConnection: + Logger.log("d", "Cloud Flow not possible: Machine is not connected!") + return + + # Check 5: Machine has correct firmware version + firmware_version = self._application.getMachineManager().activeMachineFirmwareVersion # type: str + if not Version(firmware_version) > self._min_cloud_version: + Logger.log("d", "Cloud Flow not possible: Machine firmware (%s) is too low! (Requires version %s)", + firmware_version, + self._min_cloud_version) + return + + Logger.log("d", "Cloud flow is possible!") + self.cloudFlowIsPossible.emit() + + def _onCloudFlowPossible(self) -> None: + # Cloud flow is possible, so show the message + if not self._start_cloud_flow_message: + self._start_cloud_flow_message = Message( + text = i18n_catalog.i18nc("@info:status", "Send and monitor print jobs from anywhere using your Ultimaker account."), + lifetime = 0, + image_source = QUrl.fromLocalFile(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", + "resources", "svg", "cloud-flow-start.svg")), + image_caption = i18n_catalog.i18nc("@info:status", "Connect to Ultimaker Cloud"), + option_text = i18n_catalog.i18nc("@action", "Don't ask me again for this printer."), + option_state = False + ) + self._start_cloud_flow_message.addAction("", i18n_catalog.i18nc("@action", "Get started"), "", "") + self._start_cloud_flow_message.optionToggled.connect(self._onDontAskMeAgain) + self._start_cloud_flow_message.actionTriggered.connect(self._onCloudFlowStarted) + self._start_cloud_flow_message.show() + return + + def _onCloudPrintingConfigured(self) -> None: + if self._start_cloud_flow_message: + self._start_cloud_flow_message.hide() + self._start_cloud_flow_message = None + + # Show the successful pop-up + if not self._start_cloud_flow_message: + self._cloud_flow_complete_message = Message( + text = i18n_catalog.i18nc("@info:status", "You can now send and monitor print jobs from anywhere using your Ultimaker account."), + lifetime = 30, + image_source = QUrl.fromLocalFile(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", + "resources", "svg", "cloud-flow-completed.svg")), + image_caption = i18n_catalog.i18nc("@info:status", "Connected!") + ) + # Don't show the review connection link if we're not on the local network + if self._application.getMachineManager().activeMachineHasNetworkConnection: + self._cloud_flow_complete_message.addAction("", i18n_catalog.i18nc("@action", "Review your connection"), "", "", 1) # TODO: Icon + self._cloud_flow_complete_message.actionTriggered.connect(self._onReviewCloudConnection) + self._cloud_flow_complete_message.show() + + # Set the machine's cloud flow as complete so we don't ask the user again and again for cloud connected printers + active_machine = self._application.getMachineManager().activeMachine + if active_machine: + active_machine.setMetaDataEntry("do_not_show_cloud_message", True) + return + + def _onDontAskMeAgain(self, checked: bool) -> None: + active_machine = self._application.getMachineManager().activeMachine # type: Optional["GlobalStack"] + if active_machine: + active_machine.setMetaDataEntry("do_not_show_cloud_message", checked) + if checked: + Logger.log("d", "Will not ask the user again to cloud connect for current printer.") + return + + def _onCloudFlowStarted(self, messageId: str, actionId: str) -> None: + address = self._application.getMachineManager().activeMachineAddress # type: str + if address: + QDesktopServices.openUrl(QUrl("http://" + address + "/cloud_connect")) + if self._start_cloud_flow_message: + self._start_cloud_flow_message.hide() + self._start_cloud_flow_message = None + return + + def _onReviewCloudConnection(self, messageId: str, actionId: str) -> None: + address = self._application.getMachineManager().activeMachineAddress # type: str + if address: + QDesktopServices.openUrl(QUrl("http://" + address + "/settings")) + return + + def _onMachineSwitched(self) -> None: + if self._start_cloud_flow_message is not None: + self._start_cloud_flow_message.hide() + self._start_cloud_flow_message = None + if self._cloud_flow_complete_message is not None: + self._cloud_flow_complete_message.hide() + self._cloud_flow_complete_message = None + + self.checkCloudFlowIsPossible() diff --git a/plugins/UM3NetworkPrinting/src/UM3PrintJobOutputModel.py b/plugins/UM3NetworkPrinting/src/UM3PrintJobOutputModel.py new file mode 100644 index 0000000000..4f44ca4af8 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/UM3PrintJobOutputModel.py @@ -0,0 +1,28 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from typing import List + +from PyQt5.QtCore import pyqtProperty, pyqtSignal + +from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel +from cura.PrinterOutput.PrinterOutputController import PrinterOutputController +from .ConfigurationChangeModel import ConfigurationChangeModel + + +class UM3PrintJobOutputModel(PrintJobOutputModel): + configurationChangesChanged = pyqtSignal() + + def __init__(self, output_controller: "PrinterOutputController", key: str = "", name: str = "", parent=None) -> None: + super().__init__(output_controller, key, name, parent) + self._configuration_changes = [] # type: List[ConfigurationChangeModel] + + @pyqtProperty("QVariantList", notify=configurationChangesChanged) + def configurationChanges(self) -> List[ConfigurationChangeModel]: + return self._configuration_changes + + def updateConfigurationChanges(self, changes: List[ConfigurationChangeModel]) -> None: + if len(self._configuration_changes) == 0 and len(changes) == 0: + return + self._configuration_changes = changes + self.configurationChangesChanged.emit() diff --git a/plugins/UM3NetworkPrinting/src/__init__.py b/plugins/UM3NetworkPrinting/src/__init__.py new file mode 100644 index 0000000000..659263c0d6 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/__init__.py @@ -0,0 +1,9 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +# Workaround for a race condition on certain systems where there +# is a race condition between Arcus and PyQt. Importing Arcus +# first seems to prevent Sip from going into a state where it +# tries to create PyQt objects on a non-main thread. +import Arcus #@UnusedImport +import Savitar #@UnusedImport \ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/__init__.py b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/__init__.py new file mode 100644 index 0000000000..777afc92c2 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/__init__.py @@ -0,0 +1,12 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import json +import os + + +def readFixture(fixture_name: str) -> bytes: + with open("{}/{}.json".format(os.path.dirname(__file__), fixture_name), "rb") as f: + return f.read() + +def parseFixture(fixture_name: str) -> dict: + return json.loads(readFixture(fixture_name).decode()) diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusterStatusResponse.json b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusterStatusResponse.json new file mode 100644 index 0000000000..4f9f47fc75 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusterStatusResponse.json @@ -0,0 +1,95 @@ +{ + "data": { + "generated_time": "2018-12-10T08:23:55.110Z", + "printers": [ + { + "configuration": [ + { + "extruder_index": 0, + "material": { + "material": "empty" + }, + "print_core_id": "AA 0.4" + }, + { + "extruder_index": 1, + "material": { + "material": "empty" + }, + "print_core_id": "AA 0.4" + } + ], + "enabled": true, + "firmware_version": "5.1.2.20180807", + "friendly_name": "Master-Luke", + "ip_address": "10.183.1.140", + "machine_variant": "Ultimaker 3", + "status": "maintenance", + "unique_name": "ultimakersystem-ccbdd30044ec", + "uuid": "b3a47ea3-1eeb-4323-9626-6f9c3c888f9e" + }, + { + "configuration": [ + { + "extruder_index": 0, + "material": { + "brand": "Generic", + "color": "Generic", + "guid": "506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9", + "material": "PLA" + }, + "print_core_id": "AA 0.4" + }, + { + "extruder_index": 1, + "material": { + "brand": "Ultimaker", + "color": "Red", + "guid": "9cfe5bf1-bdc5-4beb-871a-52c70777842d", + "material": "PLA" + }, + "print_core_id": "AA 0.4" + } + ], + "enabled": true, + "firmware_version": "4.3.3.20180529", + "friendly_name": "UM-Marijn", + "ip_address": "10.183.1.166", + "machine_variant": "Ultimaker 3", + "status": "idle", + "unique_name": "ultimakersystem-ccbdd30058ab", + "uuid": "6e62c40a-4601-4b0e-9fec-c7c02c59c30a" + } + ], + "print_jobs": [ + { + "assigned_to": "6e62c40a-4601-4b0e-9fec-c7c02c59c30a", + "configuration": [ + { + "extruder_index": 0, + "material": { + "brand": "Ultimaker", + "color": "Black", + "guid": "3ee70a86-77d8-4b87-8005-e4a1bc57d2ce", + "material": "PLA" + }, + "print_core_id": "AA 0.4" + } + ], + "constraints": {}, + "created_at": "2018-12-10T08:28:04.108Z", + "force": false, + "last_seen": 500165.109491861, + "machine_variant": "Ultimaker 3", + "name": "UM3_dragon", + "network_error_count": 0, + "owner": "Daniel Testing", + "started": false, + "status": "queued", + "time_elapsed": 0, + "time_total": 14145, + "uuid": "d1c8bd52-5e9f-486a-8c25-a123cc8c7702" + } + ] + } +} diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusters.json b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusters.json new file mode 100644 index 0000000000..5200e3b971 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusters.json @@ -0,0 +1,17 @@ +{ + "data": [{ + "cluster_id": "RIZ6cZbWA_Ua7RZVJhrdVfVpf0z-MqaSHQE4v8aRTtYq", + "host_guid": "e90ae0ac-1257-4403-91ee-a44c9b7e8050", + "host_name": "ultimakersystem-ccbdd30044ec", + "host_version": "5.0.0.20170101", + "is_online": true, + "status": "active" + }, { + "cluster_id": "NWKV6vJP_LdYsXgXqAcaNCR0YcLJwar1ugh0ikEZsZs8", + "host_guid": "e0ace90a-91ee-1257-4403-e8050a44c9b7", + "host_name": "ultimakersystem-30044ecccbdd", + "host_version": "5.1.2.20180807", + "is_online": true, + "status": "active" + }] +} diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/postJobPrintResponse.json b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/postJobPrintResponse.json new file mode 100644 index 0000000000..caedcd8732 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/postJobPrintResponse.json @@ -0,0 +1,8 @@ +{ + "data": { + "cluster_job_id": "9a59d8e9-91d3-4ff6-b4cb-9db91c4094dd", + "job_id": "ABCDefGHIjKlMNOpQrSTUvYxWZ0-1234567890abcDE=", + "status": "queued", + "generated_time": "2018-12-10T08:23:55.110Z" + } +} diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/putJobUploadResponse.json b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/putJobUploadResponse.json new file mode 100644 index 0000000000..1304f3a9f6 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/putJobUploadResponse.json @@ -0,0 +1,9 @@ +{ + "data": { + "content_type": "text/plain", + "job_id": "ABCDefGHIjKlMNOpQrSTUvYxWZ0-1234567890abcDE=", + "job_name": "Ultimaker Robot v3.0", + "status": "uploading", + "upload_url": "https://api.ultimaker.com/print-job-upload" + } +} diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Models/__init__.py b/plugins/UM3NetworkPrinting/tests/Cloud/Models/__init__.py new file mode 100644 index 0000000000..f3f6970c54 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/Models/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/NetworkManagerMock.py b/plugins/UM3NetworkPrinting/tests/Cloud/NetworkManagerMock.py new file mode 100644 index 0000000000..e504509d67 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/NetworkManagerMock.py @@ -0,0 +1,105 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import json +from typing import Dict, Tuple, Union, Optional, Any +from unittest.mock import MagicMock + +from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest + +from UM.Logger import Logger +from UM.Signal import Signal + + +class FakeSignal: + def __init__(self): + self._callbacks = [] + + def connect(self, callback): + self._callbacks.append(callback) + + def disconnect(self, callback): + self._callbacks.remove(callback) + + def emit(self, *args, **kwargs): + for callback in self._callbacks: + callback(*args, **kwargs) + + +## This class can be used to mock the QNetworkManager class and test the code using it. +# After patching the QNetworkManager class, requests are prepared before they can be executed. +# Any requests not prepared beforehand will cause KeyErrors. +class NetworkManagerMock: + + # An enumeration of the supported operations and their code for the network access manager. + _OPERATIONS = { + "GET": QNetworkAccessManager.GetOperation, + "POST": QNetworkAccessManager.PostOperation, + "PUT": QNetworkAccessManager.PutOperation, + "DELETE": QNetworkAccessManager.DeleteOperation, + "HEAD": QNetworkAccessManager.HeadOperation, + } # type: Dict[str, int] + + ## Initializes the network manager mock. + def __init__(self) -> None: + # A dict with the prepared replies, using the format {(http_method, url): reply} + self.replies = {} # type: Dict[Tuple[str, str], MagicMock] + self.request_bodies = {} # type: Dict[Tuple[str, str], bytes] + + # Signals used in the network manager. + self.finished = Signal() + self.authenticationRequired = Signal() + + ## Mock implementation of the get, post, put, delete and head methods from the network manager. + # Since the methods are very simple and the same it didn't make sense to repeat the code. + # \param method: The method being called. + # \return The mocked function, if the method name is known. Defaults to the standard getattr function. + def __getattr__(self, method: str) -> Any: + ## This mock implementation will simply return the reply from the prepared ones. + # it raises a KeyError if requests are done without being prepared. + def doRequest(request: QNetworkRequest, body: Optional[bytes] = None, *_): + key = method.upper(), request.url().toString() + if body: + self.request_bodies[key] = body + return self.replies[key] + + operation = self._OPERATIONS.get(method.upper()) + if operation: + return doRequest + + # the attribute is not one of the implemented methods, default to the standard implementation. + return getattr(super(), method) + + ## Prepares a server reply for the given parameters. + # \param method: The HTTP method. + # \param url: The URL being requested. + # \param status_code: The HTTP status code for the response. + # \param response: The response body from the server (generally json-encoded). + def prepareReply(self, method: str, url: str, status_code: int, response: Union[bytes, dict]) -> None: + reply_mock = MagicMock() + reply_mock.url().toString.return_value = url + reply_mock.operation.return_value = self._OPERATIONS[method] + reply_mock.attribute.return_value = status_code + reply_mock.finished = FakeSignal() + reply_mock.isFinished.return_value = False + reply_mock.readAll.return_value = response if isinstance(response, bytes) else json.dumps(response).encode() + self.replies[method, url] = reply_mock + Logger.log("i", "Prepared mock {}-response to {} {}", status_code, method, url) + + ## Gets the request that was sent to the network manager for the given method and URL. + # \param method: The HTTP method. + # \param url: The URL. + def getRequestBody(self, method: str, url: str) -> Optional[bytes]: + return self.request_bodies.get((method.upper(), url)) + + ## Emits the signal that the reply is ready to all prepared replies. + def flushReplies(self) -> None: + for key, reply in self.replies.items(): + Logger.log("i", "Flushing reply to {} {}", *key) + reply.isFinished.return_value = True + reply.finished.emit() + self.finished.emit(reply) + self.reset() + + ## Deletes all prepared replies + def reset(self) -> None: + self.replies.clear() diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudApiClient.py b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudApiClient.py new file mode 100644 index 0000000000..b79d009c31 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudApiClient.py @@ -0,0 +1,117 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import List +from unittest import TestCase +from unittest.mock import patch, MagicMock + +from cura.UltimakerCloudAuthentication import CuraCloudAPIRoot +from ...src.Cloud import CloudApiClient +from ...src.Cloud.Models.CloudClusterResponse import CloudClusterResponse +from ...src.Cloud.Models.CloudClusterStatus import CloudClusterStatus +from ...src.Cloud.Models.CloudPrintJobResponse import CloudPrintJobResponse +from ...src.Cloud.Models.CloudPrintJobUploadRequest import CloudPrintJobUploadRequest +from ...src.Cloud.Models.CloudError import CloudError +from .Fixtures import readFixture, parseFixture +from .NetworkManagerMock import NetworkManagerMock + + +class TestCloudApiClient(TestCase): + maxDiff = None + + def _errorHandler(self, errors: List[CloudError]): + raise Exception("Received unexpected error: {}".format(errors)) + + def setUp(self): + super().setUp() + self.account = MagicMock() + self.account.isLoggedIn.return_value = True + + self.network = NetworkManagerMock() + with patch.object(CloudApiClient, 'QNetworkAccessManager', return_value = self.network): + self.api = CloudApiClient.CloudApiClient(self.account, self._errorHandler) + + def test_getClusters(self): + result = [] + + response = readFixture("getClusters") + data = parseFixture("getClusters")["data"] + + self.network.prepareReply("GET", CuraCloudAPIRoot + "/connect/v1/clusters", 200, response) + # The callback is a function that adds the result of the call to getClusters to the result list + self.api.getClusters(lambda clusters: result.extend(clusters)) + + self.network.flushReplies() + + self.assertEqual([CloudClusterResponse(**data[0]), CloudClusterResponse(**data[1])], result) + + def test_getClusterStatus(self): + result = [] + + response = readFixture("getClusterStatusResponse") + data = parseFixture("getClusterStatusResponse")["data"] + + url = CuraCloudAPIRoot + "/connect/v1/clusters/R0YcLJwar1ugh0ikEZsZs8NWKV6vJP_LdYsXgXqAcaNC/status" + self.network.prepareReply("GET", url, 200, response) + self.api.getClusterStatus("R0YcLJwar1ugh0ikEZsZs8NWKV6vJP_LdYsXgXqAcaNC", lambda s: result.append(s)) + + self.network.flushReplies() + + self.assertEqual([CloudClusterStatus(**data)], result) + + def test_requestUpload(self): + + results = [] + + response = readFixture("putJobUploadResponse") + + self.network.prepareReply("PUT", CuraCloudAPIRoot + "/cura/v1/jobs/upload", 200, response) + request = CloudPrintJobUploadRequest(job_name = "job name", file_size = 143234, content_type = "text/plain") + self.api.requestUpload(request, lambda r: results.append(r)) + self.network.flushReplies() + + self.assertEqual(["text/plain"], [r.content_type for r in results]) + self.assertEqual(["uploading"], [r.status for r in results]) + + def test_uploadToolPath(self): + + results = [] + progress = MagicMock() + + data = parseFixture("putJobUploadResponse")["data"] + upload_response = CloudPrintJobResponse(**data) + + # Network client doesn't look into the reply + self.network.prepareReply("PUT", upload_response.upload_url, 200, b'{}') + + mesh = ("1234" * 100000).encode() + self.api.uploadToolPath(upload_response, mesh, lambda: results.append("sent"), progress.advance, progress.error) + + for _ in range(10): + self.network.flushReplies() + self.network.prepareReply("PUT", upload_response.upload_url, 200, b'{}') + + self.assertEqual(["sent"], results) + + def test_requestPrint(self): + + results = [] + + response = readFixture("postJobPrintResponse") + + cluster_id = "NWKV6vJP_LdYsXgXqAcaNCR0YcLJwar1ugh0ikEZsZs8" + cluster_job_id = "9a59d8e9-91d3-4ff6-b4cb-9db91c4094dd" + job_id = "ABCDefGHIjKlMNOpQrSTUvYxWZ0-1234567890abcDE=" + + self.network.prepareReply("POST", + CuraCloudAPIRoot + "/connect/v1/clusters/{}/print/{}" + .format(cluster_id, job_id), + 200, response) + + self.api.requestPrint(cluster_id, job_id, lambda r: results.append(r)) + + self.network.flushReplies() + + self.assertEqual([job_id], [r.job_id for r in results]) + self.assertEqual([cluster_job_id], [r.cluster_job_id for r in results]) + self.assertEqual(["queued"], [r.status for r in results]) diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDevice.py b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDevice.py new file mode 100644 index 0000000000..c4d891302e --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDevice.py @@ -0,0 +1,155 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import json +from unittest import TestCase +from unittest.mock import patch, MagicMock + +from UM.Scene.SceneNode import SceneNode +from cura.UltimakerCloudAuthentication import CuraCloudAPIRoot +from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel +from ...src.Cloud import CloudApiClient +from ...src.Cloud.CloudOutputDevice import CloudOutputDevice +from ...src.Cloud.Models.CloudClusterResponse import CloudClusterResponse +from .Fixtures import readFixture, parseFixture +from .NetworkManagerMock import NetworkManagerMock + + +class TestCloudOutputDevice(TestCase): + maxDiff = None + + CLUSTER_ID = "RIZ6cZbWA_Ua7RZVJhrdVfVpf0z-MqaSHQE4v8aRTtYq" + JOB_ID = "ABCDefGHIjKlMNOpQrSTUvYxWZ0-1234567890abcDE=" + HOST_NAME = "ultimakersystem-ccbdd30044ec" + HOST_GUID = "e90ae0ac-1257-4403-91ee-a44c9b7e8050" + HOST_VERSION = "5.2.0" + + STATUS_URL = "{}/connect/v1/clusters/{}/status".format(CuraCloudAPIRoot, CLUSTER_ID) + PRINT_URL = "{}/connect/v1/clusters/{}/print/{}".format(CuraCloudAPIRoot, CLUSTER_ID, JOB_ID) + REQUEST_UPLOAD_URL = "{}/cura/v1/jobs/upload".format(CuraCloudAPIRoot) + + def setUp(self): + super().setUp() + self.app = MagicMock() + + self.patches = [patch("UM.Qt.QtApplication.QtApplication.getInstance", return_value=self.app), + patch("UM.Application.Application.getInstance", return_value=self.app)] + for patched_method in self.patches: + patched_method.start() + + self.cluster = CloudClusterResponse(self.CLUSTER_ID, self.HOST_GUID, self.HOST_NAME, is_online=True, + status="active", host_version=self.HOST_VERSION) + + self.network = NetworkManagerMock() + self.account = MagicMock(isLoggedIn=True, accessToken="TestAccessToken") + self.onError = MagicMock() + with patch.object(CloudApiClient, "QNetworkAccessManager", return_value = self.network): + self._api = CloudApiClient.CloudApiClient(self.account, self.onError) + + self.device = CloudOutputDevice(self._api, self.cluster) + self.cluster_status = parseFixture("getClusterStatusResponse") + self.network.prepareReply("GET", self.STATUS_URL, 200, readFixture("getClusterStatusResponse")) + + def tearDown(self): + try: + super().tearDown() + self.network.flushReplies() + finally: + for patched_method in self.patches: + patched_method.stop() + + # We test for these in order to make sure the correct file type is selected depending on the firmware version. + def test_properties(self): + self.assertEqual(self.device.firmwareVersion, self.HOST_VERSION) + self.assertEqual(self.device.name, self.HOST_NAME) + + def test_status(self): + self.device._update() + self.network.flushReplies() + + self.assertEqual([PrinterOutputModel, PrinterOutputModel], [type(printer) for printer in self.device.printers]) + + controller_fields = { + "_output_device": self.device, + "can_abort": False, + "can_control_manually": False, + "can_pause": False, + "can_pre_heat_bed": False, + "can_pre_heat_hotends": False, + "can_send_raw_gcode": False, + "can_update_firmware": False, + } + + self.assertEqual({printer["uuid"] for printer in self.cluster_status["data"]["printers"]}, + {printer.key for printer in self.device.printers}) + self.assertEqual([controller_fields, controller_fields], + [printer.getController().__dict__ for printer in self.device.printers]) + + self.assertEqual(["UM3PrintJobOutputModel"], [type(printer).__name__ for printer in self.device.printJobs]) + self.assertEqual({job["uuid"] for job in self.cluster_status["data"]["print_jobs"]}, + {job.key for job in self.device.printJobs}) + self.assertEqual({job["owner"] for job in self.cluster_status["data"]["print_jobs"]}, + {job.owner for job in self.device.printJobs}) + self.assertEqual({job["name"] for job in self.cluster_status["data"]["print_jobs"]}, + {job.name for job in self.device.printJobs}) + + def test_remove_print_job(self): + self.device._update() + self.network.flushReplies() + self.assertEqual(1, len(self.device.printJobs)) + + self.cluster_status["data"]["print_jobs"].clear() + self.network.prepareReply("GET", self.STATUS_URL, 200, self.cluster_status) + + self.device._last_request_time = None + self.device._update() + self.network.flushReplies() + self.assertEqual([], self.device.printJobs) + + def test_remove_printers(self): + self.device._update() + self.network.flushReplies() + self.assertEqual(2, len(self.device.printers)) + + self.cluster_status["data"]["printers"].clear() + self.network.prepareReply("GET", self.STATUS_URL, 200, self.cluster_status) + + self.device._last_request_time = None + self.device._update() + self.network.flushReplies() + self.assertEqual([], self.device.printers) + + def test_print_to_cloud(self): + active_machine_mock = self.app.getGlobalContainerStack.return_value + active_machine_mock.getMetaDataEntry.side_effect = {"file_formats": "application/x-ufp"}.get + + request_upload_response = parseFixture("putJobUploadResponse") + request_print_response = parseFixture("postJobPrintResponse") + self.network.prepareReply("PUT", self.REQUEST_UPLOAD_URL, 201, request_upload_response) + self.network.prepareReply("PUT", request_upload_response["data"]["upload_url"], 201, b"{}") + self.network.prepareReply("POST", self.PRINT_URL, 200, request_print_response) + + file_handler = MagicMock() + file_handler.getSupportedFileTypesWrite.return_value = [{ + "extension": "ufp", + "mime_type": "application/x-ufp", + "mode": 2 + }, { + "extension": "gcode.gz", + "mime_type": "application/gzip", + "mode": 2, + }] + file_handler.getWriterByMimeType.return_value.write.side_effect = \ + lambda stream, nodes: stream.write(str(nodes).encode()) + + scene_nodes = [SceneNode()] + expected_mesh = str(scene_nodes).encode() + self.device.requestWrite(scene_nodes, file_handler=file_handler, file_name="FileName") + + self.network.flushReplies() + self.assertEqual( + {"data": {"content_type": "application/x-ufp", "file_size": len(expected_mesh), "job_name": "FileName"}}, + json.loads(self.network.getRequestBody("PUT", self.REQUEST_UPLOAD_URL).decode()) + ) + self.assertEqual(expected_mesh, + self.network.getRequestBody("PUT", request_upload_response["data"]["upload_url"])) + self.assertIsNone(self.network.getRequestBody("POST", self.PRINT_URL)) diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDeviceManager.py new file mode 100644 index 0000000000..e24ca1694e --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDeviceManager.py @@ -0,0 +1,123 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from unittest import TestCase +from unittest.mock import patch, MagicMock + +from UM.OutputDevice.OutputDeviceManager import OutputDeviceManager +from cura.UltimakerCloudAuthentication import CuraCloudAPIRoot +from ...src.Cloud import CloudApiClient +from ...src.Cloud import CloudOutputDeviceManager +from .Fixtures import parseFixture, readFixture +from .NetworkManagerMock import NetworkManagerMock, FakeSignal + + +class TestCloudOutputDeviceManager(TestCase): + maxDiff = None + + URL = CuraCloudAPIRoot + "/connect/v1/clusters" + + def setUp(self): + super().setUp() + self.app = MagicMock() + self.device_manager = OutputDeviceManager() + self.app.getOutputDeviceManager.return_value = self.device_manager + + self.patches = [patch("UM.Qt.QtApplication.QtApplication.getInstance", return_value=self.app), + patch("UM.Application.Application.getInstance", return_value=self.app)] + for patched_method in self.patches: + patched_method.start() + + self.network = NetworkManagerMock() + self.timer = MagicMock(timeout = FakeSignal()) + with patch.object(CloudApiClient, "QNetworkAccessManager", return_value = self.network), \ + patch.object(CloudOutputDeviceManager, "QTimer", return_value = self.timer): + self.manager = CloudOutputDeviceManager.CloudOutputDeviceManager() + self.clusters_response = parseFixture("getClusters") + self.network.prepareReply("GET", self.URL, 200, readFixture("getClusters")) + + def tearDown(self): + try: + self._beforeTearDown() + + self.network.flushReplies() + self.manager.stop() + for patched_method in self.patches: + patched_method.stop() + finally: + super().tearDown() + + ## Before tear down method we check whether the state of the output device manager is what we expect based on the + # mocked API response. + def _beforeTearDown(self): + # let the network send replies + self.network.flushReplies() + # get the created devices + devices = self.device_manager.getOutputDevices() + # TODO: Check active device + + response_clusters = self.clusters_response.get("data", []) + manager_clusters = sorted([device.clusterData.toDict() for device in self.manager._remote_clusters.values()], + key=lambda cluster: cluster['cluster_id'], reverse=True) + self.assertEqual(response_clusters, manager_clusters) + + ## Runs the initial request to retrieve the clusters. + def _loadData(self): + self.manager.start() + self.network.flushReplies() + + def test_device_is_created(self): + # just create the cluster, it is checked at tearDown + self._loadData() + + def test_device_is_updated(self): + self._loadData() + + # update the cluster from member variable, which is checked at tearDown + self.clusters_response["data"][0]["host_name"] = "New host name" + self.network.prepareReply("GET", self.URL, 200, self.clusters_response) + + self.manager._update_timer.timeout.emit() + + def test_device_is_removed(self): + self._loadData() + + # delete the cluster from member variable, which is checked at tearDown + del self.clusters_response["data"][1] + self.network.prepareReply("GET", self.URL, 200, self.clusters_response) + + self.manager._update_timer.timeout.emit() + + def test_device_connects_by_cluster_id(self): + active_machine_mock = self.app.getGlobalContainerStack.return_value + cluster1, cluster2 = self.clusters_response["data"] + cluster_id = cluster1["cluster_id"] + active_machine_mock.getMetaDataEntry.side_effect = {"um_cloud_cluster_id": cluster_id}.get + + self._loadData() + + self.assertTrue(self.device_manager.getOutputDevice(cluster1["cluster_id"]).isConnected()) + self.assertIsNone(self.device_manager.getOutputDevice(cluster2["cluster_id"])) + self.assertEquals([], active_machine_mock.setMetaDataEntry.mock_calls) + + def test_device_connects_by_network_key(self): + active_machine_mock = self.app.getGlobalContainerStack.return_value + + cluster1, cluster2 = self.clusters_response["data"] + network_key = cluster2["host_name"] + ".ultimaker.local" + active_machine_mock.getMetaDataEntry.side_effect = {"um_network_key": network_key}.get + + self._loadData() + + self.assertIsNone(self.device_manager.getOutputDevice(cluster1["cluster_id"])) + self.assertTrue(self.device_manager.getOutputDevice(cluster2["cluster_id"]).isConnected()) + + active_machine_mock.setMetaDataEntry.assert_called_with("um_cloud_cluster_id", cluster2["cluster_id"]) + + @patch.object(CloudOutputDeviceManager, "Message") + def test_api_error(self, message_mock): + self.clusters_response = { + "errors": [{"id": "notFound", "title": "Not found!", "http_status": "404", "code": "notFound"}] + } + self.network.prepareReply("GET", self.URL, 200, self.clusters_response) + self._loadData() + message_mock.return_value.show.assert_called_once_with() diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/__init__.py b/plugins/UM3NetworkPrinting/tests/Cloud/__init__.py new file mode 100644 index 0000000000..f3f6970c54 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. diff --git a/plugins/UM3NetworkPrinting/tests/TestSendMaterialJob.py b/plugins/UM3NetworkPrinting/tests/TestSendMaterialJob.py new file mode 100644 index 0000000000..952d38dcf4 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/TestSendMaterialJob.py @@ -0,0 +1,244 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import io +import json +from unittest import TestCase, mock +from unittest.mock import patch, call, MagicMock + +from PyQt5.QtCore import QByteArray + +from UM.Application import Application + +from cura.Machines.MaterialGroup import MaterialGroup +from cura.Machines.MaterialNode import MaterialNode + +from ..src.SendMaterialJob import SendMaterialJob + +_FILES_MAP = {"generic_pla_white": "/materials/generic_pla_white.xml.fdm_material", + "generic_pla_black": "/materials/generic_pla_black.xml.fdm_material", + } + + +@patch("builtins.open", lambda _, __: io.StringIO("")) +class TestSendMaterialJob(TestCase): + # version 1 + _LOCAL_MATERIAL_WHITE = {"type": "material", "status": "unknown", "id": "generic_pla_white", + "base_file": "generic_pla_white", "setting_version": "5", "name": "White PLA", + "brand": "Generic", "material": "PLA", "color_name": "White", + "GUID": "badb0ee7-87c8-4f3f-9398-938587b67dce", "version": "1", "color_code": "#ffffff", + "description": "Test PLA White", "adhesion_info": "Use glue.", "approximate_diameter": "3", + "properties": {"density": "1.00", "diameter": "2.85", "weight": "750"}, + "definition": "fdmprinter", "compatible": True} + + # version 2 + _LOCAL_MATERIAL_WHITE_NEWER = {"type": "material", "status": "unknown", "id": "generic_pla_white", + "base_file": "generic_pla_white", "setting_version": "5", "name": "White PLA", + "brand": "Generic", "material": "PLA", "color_name": "White", + "GUID": "badb0ee7-87c8-4f3f-9398-938587b67dce", "version": "2", + "color_code": "#ffffff", + "description": "Test PLA White", "adhesion_info": "Use glue.", + "approximate_diameter": "3", + "properties": {"density": "1.00", "diameter": "2.85", "weight": "750"}, + "definition": "fdmprinter", "compatible": True} + + # invalid version: "one" + _LOCAL_MATERIAL_WHITE_INVALID_VERSION = {"type": "material", "status": "unknown", "id": "generic_pla_white", + "base_file": "generic_pla_white", "setting_version": "5", "name": "White PLA", + "brand": "Generic", "material": "PLA", "color_name": "White", + "GUID": "badb0ee7-87c8-4f3f-9398-938587b67dce", "version": "one", + "color_code": "#ffffff", + "description": "Test PLA White", "adhesion_info": "Use glue.", + "approximate_diameter": "3", + "properties": {"density": "1.00", "diameter": "2.85", "weight": "750"}, + "definition": "fdmprinter", "compatible": True} + + _LOCAL_MATERIAL_WHITE_ALL_RESULT = {"generic_pla_white": MaterialGroup("generic_pla_white", + MaterialNode(_LOCAL_MATERIAL_WHITE))} + + _LOCAL_MATERIAL_WHITE_NEWER_ALL_RESULT = {"generic_pla_white": MaterialGroup("generic_pla_white", + MaterialNode(_LOCAL_MATERIAL_WHITE_NEWER))} + + _LOCAL_MATERIAL_WHITE_INVALID_VERSION_ALL_RESULT = {"generic_pla_white": MaterialGroup("generic_pla_white", + MaterialNode(_LOCAL_MATERIAL_WHITE_INVALID_VERSION))} + + _LOCAL_MATERIAL_BLACK = {"type": "material", "status": "unknown", "id": "generic_pla_black", + "base_file": "generic_pla_black", "setting_version": "5", "name": "Yellow CPE", + "brand": "Ultimaker", "material": "CPE", "color_name": "Black", + "GUID": "5fbb362a-41f9-4818-bb43-15ea6df34aa4", "version": "1", "color_code": "#000000", + "description": "Test PLA Black", "adhesion_info": "Use glue.", "approximate_diameter": "3", + "properties": {"density": "1.01", "diameter": "2.85", "weight": "750"}, + "definition": "fdmprinter", "compatible": True} + + _LOCAL_MATERIAL_BLACK_ALL_RESULT = {"generic_pla_black": MaterialGroup("generic_pla_black", + MaterialNode(_LOCAL_MATERIAL_BLACK))} + + _REMOTE_MATERIAL_WHITE = { + "guid": "badb0ee7-87c8-4f3f-9398-938587b67dce", + "material": "PLA", + "brand": "Generic", + "version": 1, + "color": "White", + "density": 1.00 + } + + _REMOTE_MATERIAL_BLACK = { + "guid": "5fbb362a-41f9-4818-bb43-15ea6df34aa4", + "material": "PLA", + "brand": "Generic", + "version": 2, + "color": "Black", + "density": 1.00 + } + + def test_run(self): + device_mock = MagicMock() + job = SendMaterialJob(device_mock) + job.run() + + # We expect the materials endpoint to be called when the job runs. + device_mock.get.assert_called_with("materials/", on_finished = job._onGetRemoteMaterials) + + def test__onGetRemoteMaterials_withFailedRequest(self): + reply_mock = MagicMock() + device_mock = MagicMock() + reply_mock.attribute.return_value = 404 + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + # We expect the device not to be called for any follow up. + self.assertEqual(0, device_mock.createFormPart.call_count) + + def test__onGetRemoteMaterials_withWrongEncoding(self): + reply_mock = MagicMock() + device_mock = MagicMock() + reply_mock.attribute.return_value = 200 + reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_WHITE]).encode("cp500")) + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + # Given that the parsing fails we do no expect the device to be called for any follow up. + self.assertEqual(0, device_mock.createFormPart.call_count) + + def test__onGetRemoteMaterials_withBadJsonAnswer(self): + reply_mock = MagicMock() + device_mock = MagicMock() + reply_mock.attribute.return_value = 200 + reply_mock.readAll.return_value = QByteArray(b"Six sick hicks nick six slick bricks with picks and sticks.") + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + # Given that the parsing fails we do no expect the device to be called for any follow up. + self.assertEqual(0, device_mock.createFormPart.call_count) + + def test__onGetRemoteMaterials_withMissingGuidInRemoteMaterial(self): + reply_mock = MagicMock() + device_mock = MagicMock() + reply_mock.attribute.return_value = 200 + remote_material_without_guid = self._REMOTE_MATERIAL_WHITE.copy() + del remote_material_without_guid["guid"] + reply_mock.readAll.return_value = QByteArray(json.dumps([remote_material_without_guid]).encode("ascii")) + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + # Given that parsing fails we do not expect the device to be called for any follow up. + self.assertEqual(0, device_mock.createFormPart.call_count) + + @patch("cura.Machines.MaterialManager.MaterialManager") + @patch("cura.Settings.CuraContainerRegistry") + @patch("UM.Application") + def test__onGetRemoteMaterials_withInvalidVersionInLocalMaterial(self, application_mock, container_registry_mock, + material_manager_mock): + reply_mock = MagicMock() + device_mock = MagicMock() + application_mock.getContainerRegistry.return_value = container_registry_mock + application_mock.getMaterialManager.return_value = material_manager_mock + + reply_mock.attribute.return_value = 200 + reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_WHITE]).encode("ascii")) + + material_manager_mock.getAllMaterialGroups.return_value = self._LOCAL_MATERIAL_WHITE_INVALID_VERSION_ALL_RESULT.copy() + + with mock.patch.object(Application, "getInstance", new = lambda: application_mock): + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + self.assertEqual(0, device_mock.createFormPart.call_count) + + @patch("UM.Application.Application.getInstance") + def test__onGetRemoteMaterials_withNoUpdate(self, application_mock): + reply_mock = MagicMock() + device_mock = MagicMock() + container_registry_mock = application_mock.getContainerRegistry.return_value + material_manager_mock = application_mock.getMaterialManager.return_value + + device_mock.createFormPart.return_value = "_xXx_" + + material_manager_mock.getAllMaterialGroups.return_value = self._LOCAL_MATERIAL_WHITE_ALL_RESULT.copy() + + reply_mock.attribute.return_value = 200 + reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_WHITE]).encode("ascii")) + + with mock.patch.object(Application, "getInstance", new = lambda: application_mock): + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + self.assertEqual(0, device_mock.createFormPart.call_count) + self.assertEqual(0, device_mock.postFormWithParts.call_count) + + @patch("UM.Application.Application.getInstance") + def test__onGetRemoteMaterials_withUpdatedMaterial(self, get_instance_mock): + reply_mock = MagicMock() + device_mock = MagicMock() + application_mock = get_instance_mock.return_value + container_registry_mock = application_mock.getContainerRegistry.return_value + material_manager_mock = application_mock.getMaterialManager.return_value + + container_registry_mock.getContainerFilePathById = lambda x: _FILES_MAP.get(x) + + device_mock.createFormPart.return_value = "_xXx_" + + material_manager_mock.getAllMaterialGroups.return_value = self._LOCAL_MATERIAL_WHITE_NEWER_ALL_RESULT.copy() + + reply_mock.attribute.return_value = 200 + reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_WHITE]).encode("ascii")) + + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + self.assertEqual(1, device_mock.createFormPart.call_count) + self.assertEqual(1, device_mock.postFormWithParts.call_count) + self.assertEquals( + [call.createFormPart("name=\"file\"; filename=\"generic_pla_white.xml.fdm_material\"", ""), + call.postFormWithParts(target = "materials/", parts = ["_xXx_"], on_finished = job.sendingFinished)], + device_mock.method_calls) + + @patch("UM.Application.Application.getInstance") + def test__onGetRemoteMaterials_withNewMaterial(self, application_mock): + reply_mock = MagicMock() + device_mock = MagicMock() + container_registry_mock = application_mock.getContainerRegistry.return_value + material_manager_mock = application_mock.getMaterialManager.return_value + + container_registry_mock.getContainerFilePathById = lambda x: _FILES_MAP.get(x) + + device_mock.createFormPart.return_value = "_xXx_" + + all_results = self._LOCAL_MATERIAL_WHITE_ALL_RESULT.copy() + for key, value in self._LOCAL_MATERIAL_BLACK_ALL_RESULT.items(): + all_results[key] = value + material_manager_mock.getAllMaterialGroups.return_value = all_results + + reply_mock.attribute.return_value = 200 + reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_BLACK]).encode("ascii")) + + with mock.patch.object(Application, "getInstance", new = lambda: application_mock): + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + self.assertEqual(1, device_mock.createFormPart.call_count) + self.assertEqual(1, device_mock.postFormWithParts.call_count) + self.assertEquals( + [call.createFormPart("name=\"file\"; filename=\"generic_pla_white.xml.fdm_material\"", ""), + call.postFormWithParts(target = "materials/", parts = ["_xXx_"], on_finished = job.sendingFinished)], + device_mock.method_calls) diff --git a/plugins/UM3NetworkPrinting/tests/__init__.py b/plugins/UM3NetworkPrinting/tests/__init__.py new file mode 100644 index 0000000000..f3f6970c54 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. diff --git a/plugins/USBPrinting/AutoDetectBaudJob.py b/plugins/USBPrinting/AutoDetectBaudJob.py index f8af61c567..36e9637c47 100644 --- a/plugins/USBPrinting/AutoDetectBaudJob.py +++ b/plugins/USBPrinting/AutoDetectBaudJob.py @@ -4,6 +4,7 @@ from UM.Job import Job from UM.Logger import Logger +from .avr_isp import ispBase from .avr_isp.stk500v2 import Stk500v2 from time import time, sleep @@ -14,12 +15,12 @@ from serial import Serial, SerialException # It tries a pre-set list of baud rates. All these baud rates are validated by requesting the temperature a few times # and checking if the results make sense. If getResult() is not None, it was able to find a correct baud rate. class AutoDetectBaudJob(Job): - def __init__(self, serial_port): + def __init__(self, serial_port: int) -> None: super().__init__() self._serial_port = serial_port - self._all_baud_rates = [115200, 250000, 230400, 57600, 38400, 19200, 9600] + self._all_baud_rates = [115200, 250000, 500000, 230400, 57600, 38400, 19200, 9600] - def run(self): + def run(self) -> None: Logger.log("d", "Auto detect baud rate started.") wait_response_timeouts = [3, 15, 30] wait_bootloader_times = [1.5, 5, 15] @@ -32,7 +33,7 @@ class AutoDetectBaudJob(Job): try: programmer.connect(self._serial_port) serial = programmer.leaveISP() - except: + except ispBase.IspError: programmer.close() for retry in range(tries): @@ -58,7 +59,7 @@ class AutoDetectBaudJob(Job): # We already have a serial connection, just change the baud rate. try: serial.baudrate = baud_rate - except: + except ValueError: continue sleep(wait_bootloader) # Ensure that we are not talking to the boot loader. 1.5 seconds seems to be the magic number successful_responses = 0 @@ -71,14 +72,15 @@ class AutoDetectBaudJob(Job): while timeout_time > time(): line = serial.readline() - if b"ok " in line and b"T:" in line: + if b"ok" in line and b"T:" in line: successful_responses += 1 - if successful_responses >= 3: + if successful_responses >= 1: self.setResult(baud_rate) Logger.log("d", "Detected baud rate {baud_rate} on serial {serial} on retry {retry} with after {time_elapsed:0.2f} seconds.".format( serial = self._serial_port, baud_rate = baud_rate, retry = retry, time_elapsed = time() - start_timeout_time)) + serial.close() # close serial port so it can be opened by the USBPrinterOutputDevice return serial.write(b"M105\n") - sleep(15) # Give the printer some time to init and try again. + sleep(15) # Give the printer some time to init and try again. self.setResult(None) # Unable to detect the correct baudrate. diff --git a/plugins/USBPrinting/AvrFirmwareUpdater.py b/plugins/USBPrinting/AvrFirmwareUpdater.py new file mode 100644 index 0000000000..56e3f99c23 --- /dev/null +++ b/plugins/USBPrinting/AvrFirmwareUpdater.py @@ -0,0 +1,68 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from UM.Logger import Logger + +from cura.CuraApplication import CuraApplication +from cura.PrinterOutput.FirmwareUpdater import FirmwareUpdater, FirmwareUpdateState + +from .avr_isp import stk500v2, intelHex +from serial import SerialException + +from time import sleep + +MYPY = False +if MYPY: + from cura.PrinterOutputDevice import PrinterOutputDevice + + +class AvrFirmwareUpdater(FirmwareUpdater): + def __init__(self, output_device: "PrinterOutputDevice") -> None: + super().__init__(output_device) + + def _updateFirmware(self) -> None: + try: + hex_file = intelHex.readHex(self._firmware_file) + assert len(hex_file) > 0 + except (FileNotFoundError, AssertionError): + Logger.log("e", "Unable to read provided hex file. Could not update firmware.") + self._setFirmwareUpdateState(FirmwareUpdateState.firmware_not_found_error) + return + + programmer = stk500v2.Stk500v2() + programmer.progress_callback = self._onFirmwareProgress + + # Ensure that other connections are closed. + if self._output_device.isConnected(): + self._output_device.close() + + try: + programmer.connect(self._output_device._serial_port) + except: + programmer.close() + Logger.logException("e", "Failed to update firmware") + self._setFirmwareUpdateState(FirmwareUpdateState.communication_error) + return + + # Give programmer some time to connect. Might need more in some cases, but this worked in all tested cases. + sleep(1) + if not programmer.isConnected(): + Logger.log("e", "Unable to connect with serial. Could not update firmware") + self._setFirmwareUpdateState(FirmwareUpdateState.communication_error) + try: + programmer.programChip(hex_file) + except SerialException as e: + Logger.log("e", "A serial port exception occured during firmware update: %s" % e) + self._setFirmwareUpdateState(FirmwareUpdateState.io_error) + return + except Exception as e: + Logger.log("e", "An unknown exception occured during firmware update: %s" % e) + self._setFirmwareUpdateState(FirmwareUpdateState.unknown_error) + return + + programmer.close() + + # Try to re-connect with the machine again, which must be done on the Qt thread, so we use call later. + CuraApplication.getInstance().callLater(self._output_device.connect) + + self._cleanupAfterUpdate() diff --git a/plugins/USBPrinting/FirmwareUpdateWindow.qml b/plugins/USBPrinting/FirmwareUpdateWindow.qml deleted file mode 100644 index e0f9de314e..0000000000 --- a/plugins/USBPrinting/FirmwareUpdateWindow.qml +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Window 2.2 -import QtQuick.Controls 1.2 - -import UM 1.1 as UM - -UM.Dialog -{ - id: base; - - width: minimumWidth; - minimumWidth: 500 * screenScaleFactor; - height: minimumHeight; - minimumHeight: 100 * screenScaleFactor; - - visible: true; - modality: Qt.ApplicationModal; - - title: catalog.i18nc("@title:window","Firmware Update"); - - Column - { - anchors.fill: parent; - - Label - { - anchors - { - left: parent.left; - right: parent.right; - } - - text: { - switch (manager.firmwareUpdateState) - { - case 0: - return "" //Not doing anything (eg; idling) - case 1: - return catalog.i18nc("@label","Updating firmware.") - case 2: - return catalog.i18nc("@label","Firmware update completed.") - case 3: - return catalog.i18nc("@label","Firmware update failed due to an unknown error.") - case 4: - return catalog.i18nc("@label","Firmware update failed due to an communication error.") - case 5: - return catalog.i18nc("@label","Firmware update failed due to an input/output error.") - case 6: - return catalog.i18nc("@label","Firmware update failed due to missing firmware.") - } - } - - wrapMode: Text.Wrap; - } - - ProgressBar - { - id: prog - value: manager.firmwareProgress - minimumValue: 0 - maximumValue: 100 - indeterminate: manager.firmwareProgress < 1 && manager.firmwareProgress > 0 - anchors - { - left: parent.left; - right: parent.right; - } - } - - SystemPalette - { - id: palette; - } - - UM.I18nCatalog { id: catalog; name: "cura"; } - } - - rightButtons: [ - Button - { - text: catalog.i18nc("@action:button","Close"); - enabled: manager.firmwareUpdateCompleteStatus; - onClicked: base.visible = false; - } - ] -} diff --git a/plugins/USBPrinting/MonitorItem.qml b/plugins/USBPrinting/MonitorItem.qml new file mode 100644 index 0000000000..c86353f814 --- /dev/null +++ b/plugins/USBPrinting/MonitorItem.qml @@ -0,0 +1,48 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura +Component +{ + Item + { + Rectangle + { + color: UM.Theme.getColor("main_background") + + anchors.right: parent.right + width: parent.width * 0.3 + anchors.top: parent.top + anchors.bottom: parent.bottom + + Cura.PrintMonitor + { + anchors.fill: parent + } + + Rectangle + { + id: footerSeparator + width: parent.width + height: UM.Theme.getSize("wide_lining").height + color: UM.Theme.getColor("wide_lining") + anchors.bottom: monitorButton.top + anchors.bottomMargin: UM.Theme.getSize("thick_margin").height + } + + // MonitorButton is actually the bottom footer panel. + Cura.MonitorButton + { + id: monitorButton + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + } + } + } +} \ No newline at end of file diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py index 45b566fcab..752773723e 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -1,42 +1,35 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +import os from UM.Logger import Logger from UM.i18n import i18nCatalog from UM.Qt.Duration import DurationFormat -from UM.PluginRegistry import PluginRegistry from cura.CuraApplication import CuraApplication -from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionState +from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionState, ConnectionType from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel from cura.PrinterOutput.GenericOutputController import GenericOutputController from .AutoDetectBaudJob import AutoDetectBaudJob -from .avr_isp import stk500v2, intelHex - -from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty, QUrl +from .AvrFirmwareUpdater import AvrFirmwareUpdater from serial import Serial, SerialException, SerialTimeoutException from threading import Thread, Event -from time import time, sleep +from time import time from queue import Queue -from enum import IntEnum from typing import Union, Optional, List, cast import re import functools # Used for reduce -import os catalog = i18nCatalog("cura") class USBPrinterOutputDevice(PrinterOutputDevice): - firmwareProgressChanged = pyqtSignal() - firmwareUpdateStateChanged = pyqtSignal() - def __init__(self, serial_port: str, baud_rate: Optional[int] = None) -> None: - super().__init__(serial_port) + super().__init__(serial_port, connection_type = ConnectionType.UsbConnection) self.setName(catalog.i18nc("@item:inmenu", "USB printing")) self.setShortDescription(catalog.i18nc("@action:button Preceded by 'Ready to'.", "Print via USB")) self.setDescription(catalog.i18nc("@info:tooltip", "Print via USB")) @@ -56,14 +49,13 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._baud_rate = baud_rate - self._all_baud_rates = [115200, 250000, 230400, 57600, 38400, 19200, 9600] + self._all_baud_rates = [115200, 250000, 500000, 230400, 57600, 38400, 19200, 9600] # Instead of using a timer, we really need the update to be as a thread, as reading from serial can block. - self._update_thread = Thread(target=self._update, daemon = True) - - self._update_firmware_thread = Thread(target=self._updateFirmware, daemon = True) + self._update_thread = Thread(target = self._update, daemon = True) self._last_temperature_request = None # type: Optional[int] + self._firmware_idle_count = 0 self._is_printing = False # A print is being sent. @@ -74,11 +66,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._accepts_commands = True self._paused = False - - self._firmware_view = None - self._firmware_location = None - self._firmware_progress = 0 - self._firmware_update_state = FirmwareUpdateState.idle + self._printer_busy = False # When printer is preheating and waiting (M190/M109), or when waiting for action on the printer self.setConnectionText(catalog.i18nc("@info:status", "Connected via USB")) @@ -88,6 +76,11 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._command_received = Event() self._command_received.set() + self._firmware_name_requested = False + self._firmware_updater = AvrFirmwareUpdater(self) + + self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "MonitorItem.qml") + CuraApplication.getInstance().getOnExitCallbackManager().addCallback(self._checkActivePrintingUponAppExit) # This is a callback function that checks if there is any printing in progress via USB when the application tries @@ -109,7 +102,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): ## Reset USB device settings # - def resetDeviceSettings(self): + def resetDeviceSettings(self) -> None: self._firmware_name = None ## Request the current scene to be sent to a USB-connected printer. @@ -122,7 +115,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): def requestWrite(self, nodes, file_name = None, filter_by_machine = False, file_handler = None, **kwargs): if self._is_printing: return # Aleady printing - + self.writeStarted.emit(self) # cancel any ongoing preheat timer before starting a print self._printers[0].getController().stopPreheatTimers() @@ -135,93 +128,6 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._printGCode(gcode_list) - ## Show firmware interface. - # This will create the view if its not already created. - def showFirmwareInterface(self): - if self._firmware_view is None: - path = os.path.join(PluginRegistry.getInstance().getPluginPath("USBPrinting"), "FirmwareUpdateWindow.qml") - self._firmware_view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self}) - - self._firmware_view.show() - - @pyqtSlot(str) - def updateFirmware(self, file): - # the file path could be url-encoded. - if file.startswith("file://"): - self._firmware_location = QUrl(file).toLocalFile() - else: - self._firmware_location = file - self.showFirmwareInterface() - self.setFirmwareUpdateState(FirmwareUpdateState.updating) - self._update_firmware_thread.start() - - def _updateFirmware(self): - # Ensure that other connections are closed. - if self._connection_state != ConnectionState.closed: - self.close() - - try: - hex_file = intelHex.readHex(self._firmware_location) - assert len(hex_file) > 0 - except (FileNotFoundError, AssertionError): - Logger.log("e", "Unable to read provided hex file. Could not update firmware.") - self.setFirmwareUpdateState(FirmwareUpdateState.firmware_not_found_error) - return - - programmer = stk500v2.Stk500v2() - programmer.progress_callback = self._onFirmwareProgress - - try: - programmer.connect(self._serial_port) - except: - programmer.close() - Logger.logException("e", "Failed to update firmware") - self.setFirmwareUpdateState(FirmwareUpdateState.communication_error) - return - - # Give programmer some time to connect. Might need more in some cases, but this worked in all tested cases. - sleep(1) - if not programmer.isConnected(): - Logger.log("e", "Unable to connect with serial. Could not update firmware") - self.setFirmwareUpdateState(FirmwareUpdateState.communication_error) - try: - programmer.programChip(hex_file) - except SerialException: - self.setFirmwareUpdateState(FirmwareUpdateState.io_error) - return - except: - self.setFirmwareUpdateState(FirmwareUpdateState.unknown_error) - return - - programmer.close() - - # Clean up for next attempt. - self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True) - self._firmware_location = "" - self._onFirmwareProgress(100) - self.setFirmwareUpdateState(FirmwareUpdateState.completed) - - # Try to re-connect with the machine again, which must be done on the Qt thread, so we use call later. - CuraApplication.getInstance().callLater(self.connect) - - @pyqtProperty(float, notify = firmwareProgressChanged) - def firmwareProgress(self): - return self._firmware_progress - - @pyqtProperty(int, notify=firmwareUpdateStateChanged) - def firmwareUpdateState(self): - return self._firmware_update_state - - def setFirmwareUpdateState(self, state): - if self._firmware_update_state != state: - self._firmware_update_state = state - self.firmwareUpdateStateChanged.emit() - - # Callback function for firmware update progress. - def _onFirmwareProgress(self, progress, max_progress = 100): - self._firmware_progress = (progress / max_progress) * 100 # Convert to scale of 0-100 - self.firmwareProgressChanged.emit() - ## Start a print based on a g-code. # \param gcode_list List with gcode (strings). def _printGCode(self, gcode_list: List[str]): @@ -258,7 +164,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._baud_rate = baud_rate def connect(self): - self._firmware_name = None # after each connection ensure that the firmware name is removed + self._firmware_name = None # after each connection ensure that the firmware name is removed if self._baud_rate is None: if self._use_auto_detect: @@ -272,13 +178,19 @@ class USBPrinterOutputDevice(PrinterOutputDevice): except SerialException: Logger.log("w", "An exception occured while trying to create serial connection") return + CuraApplication.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerStackChanged) + self._onGlobalContainerStackChanged() + self.setConnectionState(ConnectionState.Connected) + self._update_thread.start() + + def _onGlobalContainerStackChanged(self): container_stack = CuraApplication.getInstance().getGlobalContainerStack() num_extruders = container_stack.getProperty("machine_extruder_count", "value") # Ensure that a printer is created. - self._printers = [PrinterOutputModel(output_controller=GenericOutputController(self), number_of_extruders=num_extruders)] + controller = GenericOutputController(self) + controller.setCanUpdateFirmware(True) + self._printers = [PrinterOutputModel(output_controller = controller, number_of_extruders = num_extruders)] self._printers[0].updateName(container_stack.getName()) - self.setConnectionState(ConnectionState.connected) - self._update_thread.start() def close(self): super().close() @@ -295,8 +207,9 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._command_queue.put(command) else: self._sendCommand(command) + def _sendCommand(self, command: Union[str, bytes]): - if self._serial is None or self._connection_state != ConnectionState.connected: + if self._serial is None or self._connection_state != ConnectionState.Connected: return new_command = cast(bytes, command) if type(command) is bytes else cast(str, command).encode() # type: bytes @@ -310,24 +223,27 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._command_received.set() def _update(self): - while self._connection_state == ConnectionState.connected and self._serial is not None: + while self._connection_state == ConnectionState.Connected and self._serial is not None: try: line = self._serial.readline() except: continue + if not self._firmware_name_requested: + self._firmware_name_requested = True + self.sendCommand("M115") + + if b"FIRMWARE_NAME:" in line: + self._setFirmwareName(line) + if self._last_temperature_request is None or time() > self._last_temperature_request + self._timeout: # Timeout, or no request has been sent at all. - self._command_received.set() # We haven't really received the ok, but we need to send a new command + if not self._printer_busy: # Don't flood the printer with temperature requests while it is busy + self.sendCommand("M105") + self._last_temperature_request = time() - self.sendCommand("M105") - self._last_temperature_request = time() - - if self._firmware_name is None: - self.sendCommand("M115") - - if (b"ok " in line and b"T:" in line) or b"ok T:" in line or line.startswith(b"T:") or b"ok B:" in line or line.startswith(b"B:"): # Temperature message. 'T:' for extruder and 'B:' for bed - extruder_temperature_matches = re.findall(b"T(\d*): ?([\d\.]+) ?\/?([\d\.]+)?", line) + if re.search(b"[B|T\d*]: ?\d+\.?\d*", line): # Temperature message. 'T:' for extruder and 'B:' for bed + extruder_temperature_matches = re.findall(b"T(\d*): ?(\d+\.?\d*) ?\/?(\d+\.?\d*)?", line) # Update all temperature values matched_extruder_nrs = [] for match in extruder_temperature_matches: @@ -349,7 +265,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): if match[2]: extruder.updateTargetHotendTemperature(float(match[2])) - bed_temperature_matches = re.findall(b"B: ?([\d\.]+) ?\/?([\d\.]+)?", line) + bed_temperature_matches = re.findall(b"B: ?(\d+\.?\d*) ?\/?(\d+\.?\d*) ?", line) if bed_temperature_matches: match = bed_temperature_matches[0] if match[0]: @@ -357,29 +273,39 @@ class USBPrinterOutputDevice(PrinterOutputDevice): if match[1]: self._printers[0].updateTargetBedTemperature(float(match[1])) - if b"FIRMWARE_NAME:" in line: - self._setFirmwareName(line) + if line == b"": + # An empty line means that the firmware is idle + # Multiple empty lines probably means that the firmware and Cura are waiting + # for eachother due to a missed "ok", so we keep track of empty lines + self._firmware_idle_count += 1 + else: + self._firmware_idle_count = 0 + + if line.startswith(b"ok") or self._firmware_idle_count > 1: + self._printer_busy = False - if b"ok" in line: self._command_received.set() if not self._command_queue.empty(): self._sendCommand(self._command_queue.get()) - if self._is_printing: + elif self._is_printing: if self._paused: pass # Nothing to do! else: self._sendNextGcodeLine() + if line.startswith(b"echo:busy:"): + self._printer_busy = True + if self._is_printing: if line.startswith(b'!!'): Logger.log('e', "Printer signals fatal error. Cancelling print. {}".format(line)) self.cancelPrint() - elif b"resend" in line.lower() or b"rs" in line: + elif line.lower().startswith(b"resend") or line.startswith(b"rs"): # A resend can be requested either by Resend, resend or rs. try: self._gcode_position = int(line.replace(b"N:", b" ").replace(b"N", b" ").replace(b":", b" ").split()[-1]) except: - if b"rs" in line: + if line.startswith(b"rs"): # In some cases of the RS command it needs to be handled differently. self._gcode_position = int(line.split()[1]) @@ -445,7 +371,9 @@ class USBPrinterOutputDevice(PrinterOutputDevice): elapsed_time = int(time() - self._print_start_time) print_job = self._printers[0].activePrintJob if print_job is None: - print_job = PrintJobOutputModel(output_controller = GenericOutputController(self), name= CuraApplication.getInstance().getPrintInformation().jobName) + controller = GenericOutputController(self) + controller.setCanUpdateFirmware(True) + print_job = PrintJobOutputModel(output_controller=controller, name=CuraApplication.getInstance().getPrintInformation().jobName) print_job.updateState("printing") self._printers[0].updateActivePrintJob(print_job) @@ -456,13 +384,3 @@ class USBPrinterOutputDevice(PrinterOutputDevice): print_job.updateTimeTotal(estimated_time) self._gcode_position += 1 - - -class FirmwareUpdateState(IntEnum): - idle = 0 - updating = 1 - completed = 2 - unknown_error = 3 - communication_error = 4 - io_error = 5 - firmware_not_found_error = 6 diff --git a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py index 2ee85187ee..d4c0d1828e 100644 --- a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py +++ b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py @@ -2,14 +2,12 @@ # Cura is released under the terms of the LGPLv3 or higher. import threading -import platform import time import serial.tools.list_ports from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal from UM.Logger import Logger -from UM.Resources import Resources from UM.Signal import Signal, signalemitter from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin from UM.i18n import i18nCatalog @@ -68,7 +66,7 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin): return changed_device = self._usb_output_devices[serial_port] - if changed_device.connectionState == ConnectionState.connected: + if changed_device.connectionState == ConnectionState.Connected: self.getOutputDeviceManager().addOutputDevice(changed_device) else: self.getOutputDeviceManager().removeOutputDevice(serial_port) @@ -87,65 +85,6 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin): self._addRemovePorts(port_list) time.sleep(5) - @pyqtSlot(result = str) - def getDefaultFirmwareName(self): - # Check if there is a valid global container stack - global_container_stack = self._application.getGlobalContainerStack() - if not global_container_stack: - Logger.log("e", "There is no global container stack. Can not update firmware.") - self._firmware_view.close() - return "" - - # The bottom of the containerstack is the machine definition - machine_id = global_container_stack.getBottom().id - - machine_has_heated_bed = global_container_stack.getProperty("machine_heated_bed", "value") - - if platform.system() == "Linux": - baudrate = 115200 - else: - baudrate = 250000 - - # NOTE: The keyword used here is the id of the machine. You can find the id of your machine in the *.json file, eg. - # https://github.com/Ultimaker/Cura/blob/master/resources/machines/ultimaker_original.json#L2 - # The *.hex files are stored at a seperate repository: - # https://github.com/Ultimaker/cura-binary-data/tree/master/cura/resources/firmware - machine_without_extras = {"bq_witbox" : "MarlinWitbox.hex", - "bq_hephestos_2" : "MarlinHephestos2.hex", - "ultimaker_original" : "MarlinUltimaker-{baudrate}.hex", - "ultimaker_original_plus" : "MarlinUltimaker-UMOP-{baudrate}.hex", - "ultimaker_original_dual" : "MarlinUltimaker-{baudrate}-dual.hex", - "ultimaker2" : "MarlinUltimaker2.hex", - "ultimaker2_go" : "MarlinUltimaker2go.hex", - "ultimaker2_plus" : "MarlinUltimaker2plus.hex", - "ultimaker2_extended" : "MarlinUltimaker2extended.hex", - "ultimaker2_extended_plus" : "MarlinUltimaker2extended-plus.hex", - } - machine_with_heated_bed = {"ultimaker_original" : "MarlinUltimaker-HBK-{baudrate}.hex", - "ultimaker_original_dual" : "MarlinUltimaker-HBK-{baudrate}-dual.hex", - } - ##TODO: Add check for multiple extruders - hex_file = None - if machine_id in machine_without_extras.keys(): # The machine needs to be defined here! - if machine_id in machine_with_heated_bed.keys() and machine_has_heated_bed: - Logger.log("d", "Choosing firmware with heated bed enabled for machine %s.", machine_id) - hex_file = machine_with_heated_bed[machine_id] # Return firmware with heated bed enabled - else: - Logger.log("d", "Choosing basic firmware for machine %s.", machine_id) - hex_file = machine_without_extras[machine_id] # Return "basic" firmware - else: - Logger.log("w", "There is no firmware for machine %s.", machine_id) - - if hex_file: - try: - return Resources.getPath(CuraApplication.ResourceTypes.Firmware, hex_file.format(baudrate=baudrate)) - except FileNotFoundError: - Logger.log("w", "Could not find any firmware for machine %s.", machine_id) - return "" - else: - Logger.log("w", "Could not find any firmware for machine %s.", machine_id) - return "" - ## Helper to identify serial ports (and scan for them) def _addRemovePorts(self, serial_ports): # First, find and add all new or changed keys diff --git a/plugins/USBPrinting/__init__.py b/plugins/USBPrinting/__init__.py index fd5488eead..075ad2943b 100644 --- a/plugins/USBPrinting/__init__.py +++ b/plugins/USBPrinting/__init__.py @@ -2,9 +2,6 @@ # Cura is released under the terms of the LGPLv3 or higher. from . import USBPrinterOutputDeviceManager -from PyQt5.QtQml import qmlRegisterSingletonType -from UM.i18n import i18nCatalog -i18n_catalog = i18nCatalog("cura") def getMetaData(): @@ -14,5 +11,4 @@ def getMetaData(): def register(app): # We are violating the QT API here (as we use a factory, which is technically not allowed). # but we don't really have another means for doing this (and it seems to you know -work-) - qmlRegisterSingletonType(USBPrinterOutputDeviceManager.USBPrinterOutputDeviceManager, "Cura", 1, 0, "USBPrinterManager", USBPrinterOutputDeviceManager.USBPrinterOutputDeviceManager.getInstance) return {"output_device": USBPrinterOutputDeviceManager.USBPrinterOutputDeviceManager(app)} diff --git a/plugins/USBPrinting/plugin.json b/plugins/USBPrinting/plugin.json index 27e07c45b2..45971d858b 100644 --- a/plugins/USBPrinting/plugin.json +++ b/plugins/USBPrinting/plugin.json @@ -1,8 +1,8 @@ { "name": "USB printing", "author": "Ultimaker B.V.", - "version": "1.0.0", - "api": 4, + "version": "1.0.2", + "api": "6.0", "description": "Accepts G-Code and sends them to a printer. Plugin can also update firmware.", "i18n-catalog": "cura" } diff --git a/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml b/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml index b92638aa12..2a01cfaa40 100644 --- a/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml +++ b/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml @@ -17,9 +17,9 @@ Cura.MachineAction property int rightRow: (checkupMachineAction.width * 0.60) | 0 property bool heatupHotendStarted: false property bool heatupBedStarted: false - property bool usbConnected: Cura.USBPrinterManager.connectedPrinterList.rowCount() > 0 + property bool printerConnected: Cura.MachineManager.printerConnected - UM.I18nCatalog { id: catalog; name:"cura"} + UM.I18nCatalog { id: catalog; name: "cura"} Label { id: pageTitle @@ -86,7 +86,7 @@ Cura.MachineAction anchors.left: connectionLabel.right anchors.top: parent.top wrapMode: Text.WordWrap - text: checkupMachineAction.usbConnected ? catalog.i18nc("@info:status","Connected"): catalog.i18nc("@info:status","Not connected") + text: checkupMachineAction.printerConnected ? catalog.i18nc("@info:status","Connected"): catalog.i18nc("@info:status","Not connected") } ////////////////////////////////////////////////////////// Label @@ -97,7 +97,7 @@ Cura.MachineAction anchors.top: connectionLabel.bottom wrapMode: Text.WordWrap text: catalog.i18nc("@label","Min endstop X: ") - visible: checkupMachineAction.usbConnected + visible: checkupMachineAction.printerConnected } Label { @@ -107,7 +107,7 @@ Cura.MachineAction anchors.top: connectionLabel.bottom wrapMode: Text.WordWrap text: manager.xMinEndstopTestCompleted ? catalog.i18nc("@info:status","Works") : catalog.i18nc("@info:status","Not checked") - visible: checkupMachineAction.usbConnected + visible: checkupMachineAction.printerConnected } ////////////////////////////////////////////////////////////// Label @@ -118,7 +118,7 @@ Cura.MachineAction anchors.top: endstopXLabel.bottom wrapMode: Text.WordWrap text: catalog.i18nc("@label","Min endstop Y: ") - visible: checkupMachineAction.usbConnected + visible: checkupMachineAction.printerConnected } Label { @@ -128,7 +128,7 @@ Cura.MachineAction anchors.top: endstopXLabel.bottom wrapMode: Text.WordWrap text: manager.yMinEndstopTestCompleted ? catalog.i18nc("@info:status","Works") : catalog.i18nc("@info:status","Not checked") - visible: checkupMachineAction.usbConnected + visible: checkupMachineAction.printerConnected } ///////////////////////////////////////////////////////////////////// Label @@ -139,7 +139,7 @@ Cura.MachineAction anchors.top: endstopYLabel.bottom wrapMode: Text.WordWrap text: catalog.i18nc("@label","Min endstop Z: ") - visible: checkupMachineAction.usbConnected + visible: checkupMachineAction.printerConnected } Label { @@ -149,7 +149,7 @@ Cura.MachineAction anchors.top: endstopYLabel.bottom wrapMode: Text.WordWrap text: manager.zMinEndstopTestCompleted ? catalog.i18nc("@info:status","Works") : catalog.i18nc("@info:status","Not checked") - visible: checkupMachineAction.usbConnected + visible: checkupMachineAction.printerConnected } //////////////////////////////////////////////////////////// Label @@ -161,7 +161,7 @@ Cura.MachineAction anchors.top: endstopZLabel.bottom wrapMode: Text.WordWrap text: catalog.i18nc("@label","Nozzle temperature check: ") - visible: checkupMachineAction.usbConnected + visible: checkupMachineAction.printerConnected } Label { @@ -171,7 +171,7 @@ Cura.MachineAction anchors.left: nozzleTempLabel.right wrapMode: Text.WordWrap text: catalog.i18nc("@info:status","Not checked") - visible: checkupMachineAction.usbConnected + visible: checkupMachineAction.printerConnected } Item { @@ -181,7 +181,7 @@ Cura.MachineAction anchors.top: nozzleTempLabel.top anchors.left: bedTempStatus.right anchors.leftMargin: Math.round(UM.Theme.getSize("default_margin").width/2) - visible: checkupMachineAction.usbConnected + visible: checkupMachineAction.printerConnected Button { text: checkupMachineAction.heatupHotendStarted ? catalog.i18nc("@action:button","Stop Heating") : catalog.i18nc("@action:button","Start Heating") @@ -209,7 +209,7 @@ Cura.MachineAction wrapMode: Text.WordWrap text: manager.hotendTemperature + "°C" font.bold: true - visible: checkupMachineAction.usbConnected + visible: checkupMachineAction.printerConnected } ///////////////////////////////////////////////////////////////////////////// Label @@ -221,7 +221,7 @@ Cura.MachineAction anchors.top: nozzleTempLabel.bottom wrapMode: Text.WordWrap text: catalog.i18nc("@label","Build plate temperature check:") - visible: checkupMachineAction.usbConnected && manager.hasHeatedBed + visible: checkupMachineAction.printerConnected && manager.hasHeatedBed } Label @@ -232,7 +232,7 @@ Cura.MachineAction anchors.left: bedTempLabel.right wrapMode: Text.WordWrap text: manager.bedTestCompleted ? catalog.i18nc("@info:status","Not checked"): catalog.i18nc("@info:status","Checked") - visible: checkupMachineAction.usbConnected && manager.hasHeatedBed + visible: checkupMachineAction.printerConnected && manager.hasHeatedBed } Item { @@ -242,7 +242,7 @@ Cura.MachineAction anchors.top: bedTempLabel.top anchors.left: bedTempStatus.right anchors.leftMargin: Math.round(UM.Theme.getSize("default_margin").width/2) - visible: checkupMachineAction.usbConnected && manager.hasHeatedBed + visible: checkupMachineAction.printerConnected && manager.hasHeatedBed Button { text: checkupMachineAction.heatupBedStarted ?catalog.i18nc("@action:button","Stop Heating") : catalog.i18nc("@action:button","Start Heating") @@ -270,7 +270,7 @@ Cura.MachineAction wrapMode: Text.WordWrap text: manager.bedTemperature + "°C" font.bold: true - visible: checkupMachineAction.usbConnected && manager.hasHeatedBed + visible: checkupMachineAction.printerConnected && manager.hasHeatedBed } Label { diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py deleted file mode 100644 index 1f0e640f04..0000000000 --- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py +++ /dev/null @@ -1,19 +0,0 @@ -from UM.Application import Application -from UM.Settings.DefinitionContainer import DefinitionContainer -from cura.MachineAction import MachineAction -from UM.i18n import i18nCatalog -from UM.Settings.ContainerRegistry import ContainerRegistry - -catalog = i18nCatalog("cura") - -## Upgrade the firmware of a machine by USB with this action. -class UpgradeFirmwareMachineAction(MachineAction): - def __init__(self): - super().__init__("UpgradeFirmware", catalog.i18nc("@action", "Upgrade Firmware")) - self._qml_url = "UpgradeFirmwareMachineAction.qml" - ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded) - - def _onContainerAdded(self, container): - # Add this action as a supported action to all machine definitions if they support USB connection - if isinstance(container, DefinitionContainer) and container.getMetaDataEntry("type") == "machine" and container.getMetaDataEntry("supports_usb_connection"): - Application.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey()) diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml deleted file mode 100644 index ed771d2a04..0000000000 --- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) 2016 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Layouts 1.1 -import QtQuick.Window 2.1 -import QtQuick.Dialogs 1.2 // For filedialog - -import UM 1.2 as UM -import Cura 1.0 as Cura - - -Cura.MachineAction -{ - anchors.fill: parent; - property bool printerConnected: Cura.MachineManager.printerConnected - property var activeOutputDevice: printerConnected ? Cura.MachineManager.printerOutputDevices[0] : null - - Item - { - id: upgradeFirmwareMachineAction - anchors.fill: parent; - UM.I18nCatalog { id: catalog; name:"cura"} - - Label - { - id: pageTitle - width: parent.width - text: catalog.i18nc("@title", "Upgrade Firmware") - wrapMode: Text.WordWrap - font.pointSize: 18 - } - Label - { - id: pageDescription - anchors.top: pageTitle.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - width: parent.width - wrapMode: Text.WordWrap - text: catalog.i18nc("@label", "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work.") - } - - Label - { - id: upgradeText1 - anchors.top: pageDescription.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - width: parent.width - wrapMode: Text.WordWrap - text: catalog.i18nc("@label", "The firmware shipping with new printers works, but new versions tend to have more features and improvements."); - } - - Row - { - anchors.top: upgradeText1.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.horizontalCenter: parent.horizontalCenter - width: childrenRect.width - spacing: UM.Theme.getSize("default_margin").width - property var firmwareName: Cura.USBPrinterManager.getDefaultFirmwareName() - Button - { - id: autoUpgradeButton - text: catalog.i18nc("@action:button", "Automatically upgrade Firmware"); - enabled: parent.firmwareName != "" && activeOutputDevice - onClicked: - { - activeOutputDevice.updateFirmware(parent.firmwareName) - } - } - Button - { - id: manualUpgradeButton - text: catalog.i18nc("@action:button", "Upload custom Firmware"); - enabled: activeOutputDevice != null - onClicked: - { - customFirmwareDialog.open() - } - } - } - - FileDialog - { - id: customFirmwareDialog - title: catalog.i18nc("@title:window", "Select custom firmware") - nameFilters: "Firmware image files (*.hex)" - selectExisting: true - onAccepted: activeOutputDevice.updateFirmware(fileUrl) - } - } -} \ No newline at end of file diff --git a/plugins/UltimakerMachineActions/__init__.py b/plugins/UltimakerMachineActions/__init__.py index 495f212736..e87949580a 100644 --- a/plugins/UltimakerMachineActions/__init__.py +++ b/plugins/UltimakerMachineActions/__init__.py @@ -1,22 +1,16 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from . import BedLevelMachineAction -from . import UpgradeFirmwareMachineAction from . import UMOUpgradeSelection from . import UM2UpgradeSelection -from UM.i18n import i18nCatalog -catalog = i18nCatalog("cura") - def getMetaData(): - return { - } + return {} def register(app): return { "machine_action": [ BedLevelMachineAction.BedLevelMachineAction(), - UpgradeFirmwareMachineAction.UpgradeFirmwareMachineAction(), UMOUpgradeSelection.UMOUpgradeSelection(), UM2UpgradeSelection.UM2UpgradeSelection() ]} diff --git a/plugins/UltimakerMachineActions/plugin.json b/plugins/UltimakerMachineActions/plugin.json index 57b3e6bc8f..3e3e0af9b0 100644 --- a/plugins/UltimakerMachineActions/plugin.json +++ b/plugins/UltimakerMachineActions/plugin.json @@ -1,8 +1,8 @@ { "name": "Ultimaker machine actions", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.).", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/UserAgreement/UserAgreement.qml b/plugins/UserAgreement/UserAgreement.qml index 4ee03f4ad5..2e5893fc41 100644 --- a/plugins/UserAgreement/UserAgreement.qml +++ b/plugins/UserAgreement/UserAgreement.qml @@ -36,7 +36,7 @@ UM.Dialog width: parent.width anchors.bottomMargin: UM.Theme.getSize("default_margin").height - UM.I18nCatalog { id: catalog; name:"cura" } + UM.I18nCatalog { id: catalog; name: "cura" } Button { diff --git a/plugins/UserAgreement/plugin.json b/plugins/UserAgreement/plugin.json index b10abc5640..b172d1f9a2 100644 --- a/plugins/UserAgreement/plugin.json +++ b/plugins/UserAgreement/plugin.json @@ -1,8 +1,8 @@ { "name": "UserAgreement", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Ask the user once if he/she agrees with our license.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py b/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py index 37b6989add..ff5c33517d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py @@ -1,14 +1,16 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -import UM.VersionUpgrade #To indicate that a file is of incorrect format. -import UM.VersionUpgradeManager #To schedule more files to be upgraded. -from UM.Resources import Resources #To get the config storage path. - import configparser #To read config files. import io #To write config files to strings as if they were files. import os.path #To get the path to write new user profiles to. +from typing import Dict, List, Optional, Set, Tuple import urllib #To serialise the user container file name properly. +import urllib.parse + +import UM.VersionUpgrade #To indicate that a file is of incorrect format. +import UM.VersionUpgradeManager #To schedule more files to be upgraded. +from UM.Resources import Resources #To get the config storage path. ## Creates a new machine instance instance by parsing a serialised machine # instance in version 1 of the file format. @@ -18,7 +20,7 @@ import urllib #To serialise the user container file name properly. # extension. # \return A machine instance instance, or None if the file format is # incorrect. -def importFrom(serialised, filename): +def importFrom(serialised: str, filename: str) -> Optional["MachineInstance"]: try: return MachineInstance(serialised, filename) except (configparser.Error, UM.VersionUpgrade.FormatException, UM.VersionUpgrade.InvalidVersionException): @@ -32,7 +34,7 @@ class MachineInstance: # \param serialised A string with the contents of a machine instance file, # without extension. # \param filename The supposed file name of this machine instance. - def __init__(self, serialised, filename): + def __init__(self, serialised: str, filename: str) -> None: self._filename = filename config = configparser.ConfigParser(interpolation = None) @@ -53,11 +55,11 @@ class MachineInstance: self._type_name = config.get("general", "type") self._variant_name = config.get("general", "variant", fallback = "empty_variant") self._name = config.get("general", "name", fallback = "") - self._key = config.get("general", "key", fallback = None) + self._key = config.get("general", "key", fallback = "") self._active_profile_name = config.get("general", "active_profile", fallback = "empty_quality") self._active_material_name = config.get("general", "material", fallback = "empty_material") - self._machine_setting_overrides = {} + self._machine_setting_overrides = {} # type: Dict[str, str] for key, value in config["machine_settings"].items(): self._machine_setting_overrides[key] = value @@ -67,7 +69,7 @@ class MachineInstance: # # \return A tuple containing the new filename and a serialised form of # this machine instance, serialised in version 2 of the file format. - def export(self): + def export(self) -> Tuple[List[str], List[str]]: config = configparser.ConfigParser(interpolation = None) # Build a config file in the form of version 2. config.add_section("general") @@ -108,7 +110,7 @@ class MachineInstance: version_upgrade_manager = UM.VersionUpgradeManager.VersionUpgradeManager.getInstance() user_version_to_paths_dict = version_upgrade_manager.getStoragePaths("user") - paths_set = set() + paths_set = set() # type: Set[str] for paths in user_version_to_paths_dict.values(): paths_set |= paths diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/Preferences.py b/plugins/VersionUpgrade/VersionUpgrade21to22/Preferences.py index 842499da86..953837b863 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/Preferences.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/Preferences.py @@ -1,8 +1,9 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To read config files. import io #To output config files to string. +from typing import List, Optional, Tuple import UM.VersionUpgrade #To indicate that a file is of the wrong format. @@ -14,7 +15,7 @@ import UM.VersionUpgrade #To indicate that a file is of the wrong format. # extension. # \return A representation of those preferences, or None if the file format is # incorrect. -def importFrom(serialised, filename): +def importFrom(serialised: str, filename: str) -> Optional["Preferences"]: try: return Preferences(serialised, filename) except (configparser.Error, UM.VersionUpgrade.FormatException, UM.VersionUpgrade.InvalidVersionException): @@ -28,7 +29,7 @@ class Preferences: # \param serialised A serialised version 2 preferences file. # \param filename The supposed filename of the preferences file, without # extension. - def __init__(self, serialised, filename): + def __init__(self, serialised: str, filename: str) -> None: self._filename = filename self._config = configparser.ConfigParser(interpolation = None) @@ -50,7 +51,7 @@ class Preferences: # # \return A tuple containing the new filename and a serialised version of # a preferences file in version 3. - def export(self): + def export(self) -> Tuple[List[str], List[str]]: #Reset the cura/categories_expanded property since it works differently now. if self._config.has_section("cura") and self._config.has_option("cura", "categories_expanded"): self._config.remove_option("cura", "categories_expanded") @@ -58,11 +59,11 @@ class Preferences: #Translate the setting names in the visible settings. if self._config.has_section("machines") and self._config.has_option("machines", "setting_visibility"): visible_settings = self._config.get("machines", "setting_visibility") - visible_settings = visible_settings.split(",") + visible_settings_list = visible_settings.split(",") import VersionUpgrade21to22 #Import here to prevent a circular dependency. - visible_settings = [VersionUpgrade21to22.VersionUpgrade21to22.VersionUpgrade21to22.translateSettingName(setting_name) - for setting_name in visible_settings] - visible_settings = ",".join(visible_settings) + visible_settings_list = [VersionUpgrade21to22.VersionUpgrade21to22.VersionUpgrade21to22.translateSettingName(setting_name) + for setting_name in visible_settings_list] + visible_settings = ",".join(visible_settings_list) self._config.set("machines", "setting_visibility", value = visible_settings) #Translate the active_instance key. diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py index 161edcb67c..af9635d384 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py @@ -1,10 +1,9 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To read config files. import io #To write config files to strings as if they were files. -from typing import Dict -from typing import List +from typing import Dict, List, Optional, Tuple import UM.VersionUpgrade from UM.Logger import Logger @@ -15,7 +14,7 @@ from UM.Logger import Logger # \param serialised The serialised form of a profile in version 1. # \param filename The supposed filename of the profile, without extension. # \return A profile instance, or None if the file format is incorrect. -def importFrom(serialised, filename): +def importFrom(serialised: str, filename: str) -> Optional["Profile"]: try: return Profile(serialised, filename) except (configparser.Error, UM.VersionUpgrade.FormatException, UM.VersionUpgrade.InvalidVersionException): @@ -77,11 +76,11 @@ class Profile: # # \return A tuple containing the new filename and a serialised form of # this profile, serialised in version 2 of the file format. - def export(self): + def export(self) -> Optional[Tuple[List[str], List[str]]]: import VersionUpgrade21to22 # Import here to prevent circular dependencies. if self._name == "Current settings": - return None, None #Can't upgrade these, because the new current profile needs to specify the definition ID and the old file only had the machine instance, not the definition. + return None #Can't upgrade these, because the new current profile needs to specify the definition ID and the old file only had the machine instance, not the definition. config = configparser.ConfigParser(interpolation = None) diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py b/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py index d8036491bf..536385b19d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py @@ -1,7 +1,8 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To get version numbers from config files. +from typing import Dict, Iterable, List, Optional, Set, Tuple from UM.VersionUpgrade import VersionUpgrade # Superclass of the plugin. @@ -30,7 +31,7 @@ _machines_with_machine_quality = { "materials": { "generic_abs", "generic_cpe", "generic_pla", "generic_pva", "generic_cpe_plus", "generic_nylon", "generic_pc", "generic_tpu" }, "variants": { "0.25 mm", "0.4 mm", "0.6 mm", "0.8 mm" } } -} +} # type: Dict[str, Dict[str, Set[str]]] ## How to translate material names from the old version to the new. _material_translations = { @@ -41,7 +42,7 @@ _material_translations = { "Nylon": "generic_nylon", "PC": "generic_pc", "TPU": "generic_tpu", -} +} # type: Dict[str, str] ## How to translate material names for in the profile names. _material_translations_profiles = { @@ -52,17 +53,17 @@ _material_translations_profiles = { "Nylon": "nylon", "PC": "pc", "TPU": "tpu", -} +} # type: Dict[str, str] ## How to translate printer names from the old version to the new. _printer_translations = { "ultimaker2plus": "ultimaker2_plus" -} +} # type: Dict[str, str] _printer_translations_profiles = { "ultimaker2plus": "um2p", #Does NOT get included in PLA profiles! "ultimaker2_extended_plus": "um2ep" #Has no profiles for CPE+, Nylon, PC and TPU! -} +} # type: Dict[str, str] ## How to translate profile names from the old version to the new. # @@ -116,13 +117,13 @@ _profile_translations = { "tpu_0.25_high": "um2p_tpu_0.25_high", "tpu_0.4_normal": "um2p_tpu_0.4_normal", "tpu_0.6_fast": "um2p_tpu_0.6_fast" -} +} # type: Dict[str, str] ## Settings that are no longer in the new version. _removed_settings = { "fill_perimeter_gaps", "support_area_smoothing" -} +} # type: Set[str] ## How to translate setting names from the old version to the new. _setting_name_translations = { @@ -142,7 +143,7 @@ _setting_name_translations = { "support_roof_line_distance": "support_interface_line_distance", "support_roof_line_width": "support_interface_line_width", "support_roof_pattern": "support_interface_pattern" -} +} # type: Dict[str, str] ## Custom profiles become quality_changes. This dictates which quality to base # the quality_changes profile on. @@ -190,7 +191,7 @@ _quality_fallbacks = { #No TPU. } } -} +} # type: Dict[str, Dict[str, Dict[str, str]]] ## How to translate variants of specific machines from the old version to the # new. @@ -207,7 +208,7 @@ _variant_translations = { "0.6 mm": "ultimaker2_extended_plus_0.6", "0.8 mm": "ultimaker2_extended_plus_0.8" } -} +} # type: Dict[str, Dict[str, str]] ## How to translate variant names for in the profile names. _variant_translations_profiles = { @@ -215,7 +216,7 @@ _variant_translations_profiles = { "0.4 mm": "0.4", "0.6 mm": "0.6", "0.8 mm": "0.8" -} +} # type: Dict[str, str] ## Cura 2.2's material profiles use a different naming scheme for variants. # @@ -233,7 +234,7 @@ _variant_translations_materials = { "0.6 mm": "ultimaker2_plus_0.6_mm", "0.8 mm": "ultimaker2_plus_0.8_mm" } -} +} # type: Dict[str, Dict[str, str]] ## Converts configuration from Cura 2.1's file formats to Cura 2.2's. # @@ -245,12 +246,12 @@ class VersionUpgrade21to22(VersionUpgrade): # number is stored in general/version, so get the data from that key. # # \param serialised The contents of a config file. - # \return \type{int} The version number of that config file. - def getCfgVersion(self, serialised): + # \return The version number of that config file. + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Gets the fallback quality to use for a specific machine-variant-material @@ -263,7 +264,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \param variant The variant ID of the user's configuration in 2.2. # \param material The material ID of the user's configuration in 2.2. @staticmethod - def getQualityFallback(machine, variant, material): + def getQualityFallback(machine: str, variant: str, material: str) -> str: if machine not in _quality_fallbacks: return "normal" if variant not in _quality_fallbacks[machine]: @@ -277,14 +278,14 @@ class VersionUpgrade21to22(VersionUpgrade): # This is required to test if profiles should be converted to a quality # profile or a quality-changes profile. @staticmethod - def builtInProfiles(): + def builtInProfiles() -> Iterable[str]: return _profile_translations.keys() ## Gets a set of the machines which now have per-material quality profiles. # # \return A set of machine identifiers. @staticmethod - def machinesWithMachineQuality(): + def machinesWithMachineQuality() -> Dict[str, Dict[str, Set[str]]]: return _machines_with_machine_quality ## Converts machine instances from format version 1 to version 2. @@ -295,10 +296,10 @@ class VersionUpgrade21to22(VersionUpgrade): # \return A tuple containing the new filename and the serialised machine # instance in version 2, or None if the input was not of the correct # format. - def upgradeMachineInstance(self, serialised, filename): + def upgradeMachineInstance(self, serialised: str, filename: str) -> Optional[Tuple[List[str], List[str]]]: machine_instance = MachineInstance.importFrom(serialised, filename) if not machine_instance: #Invalid file format. - return filename, None + return None return machine_instance.export() ## Converts preferences from format version 2 to version 3. @@ -309,10 +310,10 @@ class VersionUpgrade21to22(VersionUpgrade): # \return A tuple containing the new filename and the serialised # preferences in version 3, or None if the input was not of the correct # format. - def upgradePreferences(self, serialised, filename): + def upgradePreferences(self, serialised: str, filename: str) -> Optional[Tuple[List[str], List[str]]]: preferences = Preferences.importFrom(serialised, filename) if not preferences: #Invalid file format. - return filename, None + return None return preferences.export() ## Converts profiles from format version 1 to version 2. @@ -322,10 +323,10 @@ class VersionUpgrade21to22(VersionUpgrade): # extension. # \return A tuple containing the new filename and the serialised profile # in version 2, or None if the input was not of the correct format. - def upgradeProfile(self, serialised, filename): + def upgradeProfile(self, serialised: str, filename: str) -> Optional[Tuple[List[str], List[str]]]: profile = Profile.importFrom(serialised, filename) if not profile: # Invalid file format. - return filename, None + return None return profile.export() ## Translates a material name for the change from Cura 2.1 to 2.2. @@ -333,7 +334,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \param material A material name in Cura 2.1. # \return The name of the corresponding material in Cura 2.2. @staticmethod - def translateMaterial(material): + def translateMaterial(material: str) -> str: if material in _material_translations: return _material_translations[material] return material @@ -345,7 +346,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \return The name of the corresponding material in the quality profiles # in Cura 2.2. @staticmethod - def translateMaterialForProfiles(material): + def translateMaterialForProfiles(material: str) -> str: if material in _material_translations_profiles: return _material_translations_profiles[material] return material @@ -356,7 +357,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \param printer A printer name in Cura 2.1. # \return The name of the corresponding printer in Cura 2.2. @staticmethod - def translatePrinter(printer): + def translatePrinter(printer: str) -> str: if printer in _printer_translations: return _printer_translations[printer] return printer #Doesn't need to be translated. @@ -367,7 +368,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \param printer A printer name in 2.1. # \return The name of the corresponding printer in Cura 2.2. @staticmethod - def translatePrinterForProfile(printer): + def translatePrinterForProfile(printer: str) -> str: if printer in _printer_translations_profiles: return _printer_translations_profiles[printer] return printer @@ -378,7 +379,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \param profile A profile name in the old version. # \return The corresponding profile name in the new version. @staticmethod - def translateProfile(profile): + def translateProfile(profile: str) -> str: if profile in _profile_translations: return _profile_translations[profile] return profile #Doesn't need to be translated. @@ -392,7 +393,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \param settings A dictionary of settings (as key-value pairs) to update. # \return The same dictionary. @staticmethod - def translateSettings(settings): + def translateSettings(settings: Dict[str, str]) -> Dict[str, str]: new_settings = {} for key, value in settings.items(): if key in _removed_settings: @@ -414,7 +415,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \param setting The name of a setting in Cura 2.1. # \return The name of the corresponding setting in Cura 2.2. @staticmethod - def translateSettingName(setting): + def translateSettingName(setting: str) -> str: if setting in _setting_name_translations: return _setting_name_translations[setting] return setting #Doesn't need to be translated. @@ -426,7 +427,7 @@ class VersionUpgrade21to22(VersionUpgrade): # 2.2's naming. # \return The name of the corresponding variant in Cura 2.2. @staticmethod - def translateVariant(variant, machine): + def translateVariant(variant: str, machine: str) -> str: if machine in _variant_translations and variant in _variant_translations[machine]: return _variant_translations[machine][variant] return variant @@ -440,7 +441,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \return The name of the corresponding variant for in material profiles # in Cura 2.2. @staticmethod - def translateVariantForMaterials(variant, machine): + def translateVariantForMaterials(variant: str, machine: str) -> str: if machine in _variant_translations_materials and variant in _variant_translations_materials[machine]: return _variant_translations_materials[machine][variant] return variant @@ -452,7 +453,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \return The name of the corresponding variant for in quality profiles in # Cura 2.2. @staticmethod - def translateVariantForProfiles(variant): + def translateVariantForProfiles(variant: str) -> str: if variant in _variant_translations_profiles: return _variant_translations_profiles[variant] return variant \ No newline at end of file diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py b/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py index 435621ec54..67530b9d45 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py @@ -1,14 +1,16 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade21to22 -from UM.i18n import i18nCatalog -catalog = i18nCatalog("cura") +if TYPE_CHECKING: + from UM.Application import Application upgrade = VersionUpgrade21to22.VersionUpgrade21to22() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -36,5 +38,5 @@ def getMetaData(): } } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json b/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json index 79115f931e..cad94c2eb5 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 2.1 to 2.2", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 2.1 to Cura 2.2.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py index 730a62e591..ded892d137 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py @@ -1,18 +1,18 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To get version numbers from config files. +import io import os import os.path -import io +from typing import Dict, List, Optional, Tuple from UM.Resources import Resources from UM.VersionUpgrade import VersionUpgrade # Superclass of the plugin. import UM.VersionUpgrade class VersionUpgrade22to24(VersionUpgrade): - - def upgradeMachineInstance(self, serialised, filename): + def upgradeMachineInstance(self, serialised: str, filename: str) -> Optional[Tuple[List[str], List[str]]]: # All of this is needed to upgrade custom variant machines from old Cura to 2.4 where # `definition_changes` instance container has been introduced. Variant files which # look like the the handy work of the old machine settings plugin are converted directly @@ -22,11 +22,11 @@ class VersionUpgrade22to24(VersionUpgrade): config.read_string(serialised) # Read the input string as config file. if config.get("metadata", "type") == "definition_changes": # This is not a container stack, don't upgrade it here - return + return None config.set("general", "version", "3") - container_list = [] + container_list = [] # type: List[str] if config.has_section("containers"): for index, container_id in config.items("containers"): container_list.append(container_id) @@ -37,14 +37,14 @@ class VersionUpgrade22to24(VersionUpgrade): user_variants = self.__getUserVariants() name_path_dict = {} for variant in user_variants: - name_path_dict[variant.get("name")] = variant.get("path") + name_path_dict[variant["name"]] = variant["path"] user_variant_names = set(container_list).intersection(name_path_dict.keys()) if len(user_variant_names): # One of the user defined variants appears in the list of containers in the stack. for variant_name in user_variant_names: # really there should just be one variant to convert. - config_name = self.__convertVariant(name_path_dict.get(variant_name)) + config_name = self.__convertVariant(name_path_dict[variant_name]) # Change the name of variant and insert empty_variant into the stack. new_container_list = [] @@ -64,16 +64,16 @@ class VersionUpgrade22to24(VersionUpgrade): config.remove_option("general", "containers") - for index in range(len(container_list)): - config.set("containers", str(index), container_list[index]) + for idx in range(len(container_list)): + config.set("containers", str(idx), container_list[idx]) output = io.StringIO() config.write(output) return [filename], [output.getvalue()] - def __convertVariant(self, variant_path): + def __convertVariant(self, variant_path: str) -> str: # Copy the variant to the machine_instances/*_settings.inst.cfg - variant_config = configparser.ConfigParser(interpolation=None) + variant_config = configparser.ConfigParser(interpolation = None) with open(variant_path, "r", encoding = "utf-8") as fhandle: variant_config.read_file(fhandle) @@ -99,7 +99,7 @@ class VersionUpgrade22to24(VersionUpgrade): return config_name - def __getUserVariants(self): + def __getUserVariants(self) -> List[Dict[str, str]]: resource_path = Resources.getDataStoragePath() variants_dir = os.path.join(resource_path, "variants") @@ -113,7 +113,7 @@ class VersionUpgrade22to24(VersionUpgrade): result.append( { "path": entry.path, "name": config.get("general", "name") } ) return result - def upgradeExtruderTrain(self, serialised, filename): + def upgradeExtruderTrain(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: config = configparser.ConfigParser(interpolation = None) config.read_string(serialised) # Read the input string as config file. config.set("general", "version", "3") # Just bump the version number. That is all we need for now. @@ -122,7 +122,7 @@ class VersionUpgrade22to24(VersionUpgrade): config.write(output) return [filename], [output.getvalue()] - def upgradePreferences(self, serialised, filename): + def upgradePreferences(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: config = configparser.ConfigParser(interpolation = None) config.read_string(serialised) @@ -142,7 +142,7 @@ class VersionUpgrade22to24(VersionUpgrade): config.write(output) return [filename], [output.getvalue()] - def upgradeQuality(self, serialised, filename): + def upgradeQuality(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: config = configparser.ConfigParser(interpolation = None) config.read_string(serialised) # Read the input string as config file. config.set("metadata", "type", "quality_changes") # Update metadata/type to quality_changes @@ -152,9 +152,9 @@ class VersionUpgrade22to24(VersionUpgrade): config.write(output) return [filename], [output.getvalue()] - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py b/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py index fbdbf92a4b..fe79333544 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py @@ -1,14 +1,16 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade -from UM.i18n import i18nCatalog -catalog = i18nCatalog("cura") +if TYPE_CHECKING: + from UM.Application import Application upgrade = VersionUpgrade.VersionUpgrade22to24() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -29,5 +31,5 @@ def getMetaData(): } } -def register(app): +def register(app: "Application"): return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json b/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json index d213042ad2..7da1e7a56d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 2.2 to 2.4", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 2.2 to Cura 2.4.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py index 54b561c847..6dbcfebc46 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py @@ -1,32 +1,30 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To parse the files we need to upgrade and write the new files. import io #To serialise configparser output to a string. import os +from typing import Dict, List, Set, Tuple from urllib.parse import quote_plus from UM.Resources import Resources from UM.VersionUpgrade import VersionUpgrade -from cura.CuraApplication import CuraApplication - _removed_settings = { #Settings that were removed in 2.5. "start_layers_at_same_position", "sub_div_rad_mult" -} +} # type: Set[str] _split_settings = { #These settings should be copied to all settings it was split into. "support_interface_line_distance": {"support_roof_line_distance", "support_bottom_line_distance"} -} +} # type: Dict[str, Set[str]] ## A collection of functions that convert the configuration of the user in Cura # 2.5 to a configuration for Cura 2.6. # # All of these methods are essentially stateless. class VersionUpgrade25to26(VersionUpgrade): - - def __init__(self): + def __init__(self) -> None: super().__init__() self._current_fdm_printer_count = 2 @@ -41,18 +39,18 @@ class VersionUpgrade25to26(VersionUpgrade): # \raises ValueError The format of the version number in the file is # incorrect. # \raises KeyError The format of the file is incorrect. - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Upgrades the preferences file from version 2.5 to 2.6. # # \param serialised The serialised form of a preferences file. # \param filename The name of the file to upgrade. - def upgradePreferences(self, serialised, filename): + def upgradePreferences(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) @@ -88,7 +86,7 @@ class VersionUpgrade25to26(VersionUpgrade): # # \param serialised The serialised form of a quality profile. # \param filename The name of the file to upgrade. - def upgradeInstanceContainer(self, serialised, filename): + def upgradeInstanceContainer(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) @@ -118,8 +116,8 @@ class VersionUpgrade25to26(VersionUpgrade): # # \param serialised The serialised form of a quality profile. # \param filename The name of the file to upgrade. - def upgradeMachineStack(self, serialised, filename): - parser = configparser.ConfigParser(interpolation=None) + def upgradeMachineStack(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) # NOTE: This is for Custom FDM printers @@ -151,8 +149,8 @@ class VersionUpgrade25to26(VersionUpgrade): return [filename], [output.getvalue()] ## Acquires the next unique extruder stack index number for the Custom FDM Printer. - def _acquireNextUniqueCustomFdmPrinterExtruderStackIdIndex(self): - extruder_stack_dir = Resources.getPath(CuraApplication.ResourceTypes.ExtruderStack) + def _acquireNextUniqueCustomFdmPrinterExtruderStackIdIndex(self) -> int: + extruder_stack_dir = os.path.join(Resources.getDataStoragePath(), "extruders") file_name_list = os.listdir(extruder_stack_dir) file_name_list = [os.path.basename(file_name) for file_name in file_name_list] while True: @@ -171,9 +169,9 @@ class VersionUpgrade25to26(VersionUpgrade): return self._current_fdm_printer_count - def _checkCustomFdmPrinterHasExtruderStack(self, machine_id): + def _checkCustomFdmPrinterHasExtruderStack(self, machine_id: str) -> bool: # go through all extruders and make sure that this custom FDM printer has extruder stacks. - extruder_stack_dir = Resources.getPath(CuraApplication.ResourceTypes.ExtruderStack) + extruder_stack_dir = os.path.join(Resources.getDataStoragePath(), "extruders") has_extruders = False for item in os.listdir(extruder_stack_dir): file_path = os.path.join(extruder_stack_dir, item) @@ -199,7 +197,7 @@ class VersionUpgrade25to26(VersionUpgrade): return has_extruders - def _createCustomFdmPrinterExtruderStack(self, machine_id: str, position: int, quality_id: str, material_id: str): + def _createCustomFdmPrinterExtruderStack(self, machine_id: str, position: int, quality_id: str, material_id: str) -> None: stack_id = "custom_extruder_%s" % (position + 1) if self._current_fdm_printer_count > 1: stack_id += " #%s" % self._current_fdm_printer_count @@ -245,9 +243,9 @@ class VersionUpgrade25to26(VersionUpgrade): parser.write(extruder_output) extruder_filename = quote_plus(stack_id) + ".extruder.cfg" - extruder_stack_dir = Resources.getPath(CuraApplication.ResourceTypes.ExtruderStack) - definition_changes_dir = Resources.getPath(CuraApplication.ResourceTypes.DefinitionChangesContainer) - user_settings_dir = Resources.getPath(CuraApplication.ResourceTypes.UserInstanceContainer) + extruder_stack_dir = os.path.join(Resources.getDataStoragePath(), "extruders") + definition_changes_dir = os.path.join(Resources.getDataStoragePath(), "definition_changes") + user_settings_dir = os.path.join(Resources.getDataStoragePath(), "user") with open(os.path.join(definition_changes_dir, definition_changes_filename), "w", encoding = "utf-8") as f: f.write(definition_changes_output.getvalue()) @@ -258,7 +256,7 @@ class VersionUpgrade25to26(VersionUpgrade): ## Creates a definition changes container which doesn't contain anything for the Custom FDM Printers. # The container ID will be automatically generated according to the given stack name. - def _getCustomFdmPrinterDefinitionChanges(self, stack_id: str): + def _getCustomFdmPrinterDefinitionChanges(self, stack_id: str) -> configparser.ConfigParser: # In 2.5, there is no definition_changes container for the Custom FDM printer, so it should be safe to use the # default name unless some one names the printer as something like "Custom FDM Printer_settings". definition_changes_id = stack_id + "_settings" @@ -279,7 +277,7 @@ class VersionUpgrade25to26(VersionUpgrade): ## Creates a user settings container which doesn't contain anything for the Custom FDM Printers. # The container ID will be automatically generated according to the given stack name. - def _getCustomFdmPrinterUserSettings(self, stack_id: str): + def _getCustomFdmPrinterUserSettings(self, stack_id: str) -> configparser.ConfigParser: # For the extruder stacks created in the upgrade, also create user_settings containers so the user changes # will be saved. user_settings_id = stack_id + "_user" diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py b/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py index 1419325cc1..c74b3218b6 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py @@ -1,14 +1,16 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade25to26 -from UM.i18n import i18nCatalog -catalog = i18nCatalog("cura") +if TYPE_CHECKING: + from UM.Application import Application upgrade = VersionUpgrade25to26.VersionUpgrade25to26() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -44,5 +46,5 @@ def getMetaData(): } } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json b/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json index 759b6368fd..e1f0a47685 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 2.5 to 2.6", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 2.5 to Cura 2.6.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py b/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py index 2037a0211d..39e3dea4ed 100644 --- a/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py +++ b/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py @@ -1,11 +1,11 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To parse the files we need to upgrade and write the new files. import io #To serialise configparser output to a string. +from typing import Dict, List, Tuple from UM.VersionUpgrade import VersionUpgrade -from cura.CuraApplication import CuraApplication # a dict of renamed quality profiles: : _renamed_quality_profiles = { @@ -62,7 +62,7 @@ _renamed_quality_profiles = { "um3_bb0.8_TPU_Not_Supported_Quality": "um3_bb0.8_TPU_Fast_print", "um3_bb0.8_TPU_Not_Supported_Superdraft_Quality": "um3_bb0.8_TPU_Superdraft_Print", -} +} # type: Dict[str, str] ## A collection of functions that convert the configuration of the user in Cura # 2.6 to a configuration for Cura 2.7. @@ -80,19 +80,19 @@ class VersionUpgrade26to27(VersionUpgrade): # \raises ValueError The format of the version number in the file is # incorrect. # \raises KeyError The format of the file is incorrect. - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Upgrades a preferences file from version 2.6 to 2.7. # # \param serialised The serialised form of a preferences file. # \param filename The name of the file to upgrade. - def upgradePreferences(self, serialised, filename): - parser = configparser.ConfigParser(interpolation=None) + def upgradePreferences(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) # Update version numbers @@ -118,8 +118,8 @@ class VersionUpgrade26to27(VersionUpgrade): # # \param serialised The serialised form of a container file. # \param filename The name of the file to upgrade. - def upgradeOtherContainer(self, serialised, filename): - parser = configparser.ConfigParser(interpolation=None) + def upgradeOtherContainer(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) # Update version numbers @@ -140,7 +140,7 @@ class VersionUpgrade26to27(VersionUpgrade): # # \param serialised The serialised form of a container stack. # \param filename The name of the file to upgrade. - def upgradeStack(self, serialised, filename): + def upgradeStack(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) diff --git a/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py b/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py index 79ed5e8b68..1952c9ceff 100644 --- a/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py @@ -1,14 +1,16 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade26to27 -from UM.i18n import i18nCatalog -catalog = i18nCatalog("cura") +if TYPE_CHECKING: + from UM.Application import Application upgrade = VersionUpgrade26to27.VersionUpgrade26to27() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -62,5 +64,5 @@ def getMetaData(): } } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json b/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json index 3c3d7fff8c..6cdbd64cbb 100644 --- a/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 2.6 to 2.7", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 2.6 to Cura 2.7.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py b/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py index 5a141f1558..b594c3c6c4 100644 --- a/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py @@ -1,9 +1,10 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To parse preference files. import io #To serialise the preference files afterwards. import os +from typing import Dict, List, Tuple import urllib.parse import re @@ -11,7 +12,7 @@ from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this. _renamed_themes = { "cura": "cura-light" -} +} # type: Dict[str, str] _renamed_i18n = { "7s": "en_7S", "de": "de_DE", @@ -28,7 +29,7 @@ _renamed_i18n = { "ptbr": "pt_BR", "ru": "ru_RU", "tr": "tr_TR" -} +} # type: Dict[str, str] class VersionUpgrade27to30(VersionUpgrade): @@ -43,19 +44,19 @@ class VersionUpgrade27to30(VersionUpgrade): # \raises ValueError The format of the version number in the file is # incorrect. # \raises KeyError The format of the file is incorrect. - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Upgrades a preferences file from version 2.7 to 3.0. # # \param serialised The serialised form of a preferences file. # \param filename The name of the file to upgrade. - def upgradePreferences(self, serialised, filename): - parser = configparser.ConfigParser(interpolation=None) + def upgradePreferences(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) # Update version numbers @@ -100,8 +101,8 @@ class VersionUpgrade27to30(VersionUpgrade): # # \param serialised The serialised form of the container file. # \param filename The name of the file to upgrade. - def upgradeQualityChangesContainer(self, serialised, filename): - parser = configparser.ConfigParser(interpolation=None) + def upgradeQualityChangesContainer(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) # Update the skin pre-shrink settings: @@ -156,8 +157,8 @@ class VersionUpgrade27to30(VersionUpgrade): # # \param serialised The serialised form of the container file. # \param filename The name of the file to upgrade. - def upgradeOtherContainer(self, serialised, filename): - parser = configparser.ConfigParser(interpolation=None) + def upgradeOtherContainer(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) # Update the skin pre-shrink settings: @@ -185,7 +186,7 @@ class VersionUpgrade27to30(VersionUpgrade): # # \param serialised The serialised form of a container stack. # \param filename The name of the file to upgrade. - def upgradeStack(self, serialised, filename): + def upgradeStack(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation=None) parser.read_string(serialised) diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/__init__.py b/plugins/VersionUpgrade/VersionUpgrade27to30/__init__.py index 4da7257b1c..bddc71a1e0 100644 --- a/plugins/VersionUpgrade/VersionUpgrade27to30/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/__init__.py @@ -1,11 +1,16 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade27to30 +if TYPE_CHECKING: + from UM.Application import Application + upgrade = VersionUpgrade27to30.VersionUpgrade27to30() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -51,5 +56,5 @@ def getMetaData(): } } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json b/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json index 3df84ff7e6..885d741a8c 100644 --- a/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 2.7 to 3.0", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 2.7 to Cura 3.0.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py b/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py index a88ff5ac1c..f0b2e939b9 100644 --- a/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py +++ b/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py @@ -1,14 +1,15 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To parse preference files. import io #To serialise the preference files afterwards. +from typing import Dict, List, Set, Tuple from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this. # a list of all legacy "Not Supported" quality profiles -_OLD_NOT_SUPPORTED_PROFILES = [ +_OLD_NOT_SUPPORTED_PROFILES = { "um2p_pp_0.25_normal", "um2p_tpu_0.8_normal", "um3_bb0.4_ABS_Fast_Print", @@ -42,7 +43,7 @@ _OLD_NOT_SUPPORTED_PROFILES = [ "um3_bb0.8_PP_Superdraft_Print", "um3_bb0.8_TPU_Fast_print", "um3_bb0.8_TPU_Superdraft_Print", -] +} # type: Set[str] # Some containers have their specific empty containers, those need to be set correctly. @@ -51,13 +52,13 @@ _EMPTY_CONTAINER_DICT = { "2": "empty_quality", "3": "empty_material", "4": "empty_variant", -} +} # type: Dict[str, str] # Renamed definition files _RENAMED_DEFINITION_DICT = { "jellybox": "imade3d_jellybox", -} +} # type: Dict[str, str] class VersionUpgrade30to31(VersionUpgrade): @@ -72,19 +73,19 @@ class VersionUpgrade30to31(VersionUpgrade): # \raises ValueError The format of the version number in the file is # incorrect. # \raises KeyError The format of the file is incorrect. - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Upgrades a preferences file from version 3.0 to 3.1. # # \param serialised The serialised form of a preferences file. # \param filename The name of the file to upgrade. - def upgradePreferences(self, serialised, filename): - parser = configparser.ConfigParser(interpolation=None) + def upgradePreferences(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) # Update version numbers @@ -104,8 +105,8 @@ class VersionUpgrade30to31(VersionUpgrade): # # \param serialised The serialised form of the container file. # \param filename The name of the file to upgrade. - def upgradeInstanceContainer(self, serialised, filename): - parser = configparser.ConfigParser(interpolation=None) + def upgradeInstanceContainer(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) for each_section in ("general", "metadata"): @@ -129,8 +130,8 @@ class VersionUpgrade30to31(VersionUpgrade): # # \param serialised The serialised form of a container stack. # \param filename The name of the file to upgrade. - def upgradeStack(self, serialised, filename): - parser = configparser.ConfigParser(interpolation=None) + def upgradeStack(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) for each_section in ("general", "metadata"): diff --git a/plugins/VersionUpgrade/VersionUpgrade30to31/__init__.py b/plugins/VersionUpgrade/VersionUpgrade30to31/__init__.py index 7b2c213a31..c5cc851d6a 100644 --- a/plugins/VersionUpgrade/VersionUpgrade30to31/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade30to31/__init__.py @@ -1,11 +1,16 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade30to31 +if TYPE_CHECKING: + from UM.Application import Application + upgrade = VersionUpgrade30to31.VersionUpgrade30to31() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -55,5 +60,5 @@ def getMetaData(): } } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json b/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json index d80b820976..d5f22649c1 100644 --- a/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 3.0 to 3.1", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 3.0 to Cura 3.1.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade32to33/VersionUpgrade32to33.py b/plugins/VersionUpgrade/VersionUpgrade32to33/VersionUpgrade32to33.py index 18851b82c7..83cb15c864 100644 --- a/plugins/VersionUpgrade/VersionUpgrade32to33/VersionUpgrade32to33.py +++ b/plugins/VersionUpgrade/VersionUpgrade32to33/VersionUpgrade32to33.py @@ -3,6 +3,7 @@ import configparser #To parse preference files. import io #To serialise the preference files afterwards. +from typing import Dict, List, Tuple from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this. @@ -51,22 +52,22 @@ _EXTRUDER_TO_POSITION = { "ultimaker_original_dual_2nd": 1, "vertex_k8400_dual_1st": 0, "vertex_k8400_dual_2nd": 1 -} +} # type: Dict[str, int] _RENAMED_QUALITY_PROFILES = { "low": "fast", "um2_low": "um2_fast" -} +} # type: Dict[str, str] _RENAMED_QUALITY_TYPES = { "low": "fast" -} +} # type: Dict[str, str] ## Upgrades configurations from the state they were in at version 3.2 to the # state they should be in at version 3.3. class VersionUpgrade32to33(VersionUpgrade): - temporary_group_name_counter = 1 + ## Gets the version number from a CFG file in Uranium's 3.2 format. # # Since the format may change, this is implemented for the 3.2 format only @@ -78,18 +79,18 @@ class VersionUpgrade32to33(VersionUpgrade): # \raises ValueError The format of the version number in the file is # incorrect. # \raises KeyError The format of the file is incorrect. - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Upgrades a preferences file from version 3.2 to 3.3. # # \param serialised The serialised form of a preferences file. # \param filename The name of the file to upgrade. - def upgradePreferences(self, serialised, filename): + def upgradePreferences(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) @@ -117,7 +118,7 @@ class VersionUpgrade32to33(VersionUpgrade): # # \param serialised The serialised form of a container stack. # \param filename The name of the file to upgrade. - def upgradeStack(self, serialized, filename): + def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) @@ -141,7 +142,7 @@ class VersionUpgrade32to33(VersionUpgrade): ## Upgrades non-quality-changes instance containers to have the new version # number. - def upgradeInstanceContainer(self, serialized, filename): + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) @@ -153,7 +154,7 @@ class VersionUpgrade32to33(VersionUpgrade): return [filename], [result.getvalue()] ## Upgrades a quality changes container to the new format. - def upgradeQualityChanges(self, serialized, filename): + def upgradeQualityChanges(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) @@ -182,7 +183,7 @@ class VersionUpgrade32to33(VersionUpgrade): return [filename], [result.getvalue()] ## Upgrades a variant container to the new format. - def upgradeVariants(self, serialized, filename): + def upgradeVariants(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) diff --git a/plugins/VersionUpgrade/VersionUpgrade32to33/__init__.py b/plugins/VersionUpgrade/VersionUpgrade32to33/__init__.py index 5073be772d..b55ea5ebaf 100644 --- a/plugins/VersionUpgrade/VersionUpgrade32to33/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade32to33/__init__.py @@ -1,11 +1,16 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade32to33 +if TYPE_CHECKING: + from UM.Application import Application + upgrade = VersionUpgrade32to33.VersionUpgrade32to33() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -42,7 +47,7 @@ def getMetaData(): }, "user": { "get_version": upgrade.getCfgVersion, - "location": {"./user"} + "location": {"./user", "./materials/*"} }, "variant": { "get_version": upgrade.getCfgVersion, @@ -51,5 +56,5 @@ def getMetaData(): } } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } \ No newline at end of file diff --git a/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json b/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json index fbce09c807..eb489169e0 100644 --- a/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 3.2 to 3.3", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 3.2 to Cura 3.3.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade33to34/VersionUpgrade33to34.py b/plugins/VersionUpgrade/VersionUpgrade33to34/VersionUpgrade33to34.py index e2241fd195..704ede02d6 100644 --- a/plugins/VersionUpgrade/VersionUpgrade33to34/VersionUpgrade33to34.py +++ b/plugins/VersionUpgrade/VersionUpgrade33to34/VersionUpgrade33to34.py @@ -3,17 +3,17 @@ import configparser #To parse preference files. import io #To serialise the preference files afterwards. +from typing import Dict, List, Tuple from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this. _renamed_settings = { "infill_hollow": "infill_support_enabled" -} +} # type: Dict[str, str] ## Upgrades configurations from the state they were in at version 3.3 to the # state they should be in at version 3.4. class VersionUpgrade33to34(VersionUpgrade): - ## Gets the version number from a CFG file in Uranium's 3.3 format. # # Since the format may change, this is implemented for the 3.3 format only @@ -25,16 +25,16 @@ class VersionUpgrade33to34(VersionUpgrade): # \raises ValueError The format of the version number in the file is # incorrect. # \raises KeyError The format of the file is incorrect. - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Upgrades instance containers to have the new version # number. - def upgradeInstanceContainer(self, serialized, filename): + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) diff --git a/plugins/VersionUpgrade/VersionUpgrade33to34/__init__.py b/plugins/VersionUpgrade/VersionUpgrade33to34/__init__.py index 4faa1290b5..5fd757f843 100644 --- a/plugins/VersionUpgrade/VersionUpgrade33to34/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade33to34/__init__.py @@ -1,17 +1,22 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade33to34 +if TYPE_CHECKING: + from UM.Application import Application + upgrade = VersionUpgrade33to34.VersionUpgrade33to34() - -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function ("definition_changes", 3000004): ("definition_changes", 4000004, upgrade.upgradeInstanceContainer), ("quality_changes", 3000004): ("quality_changes", 4000004, upgrade.upgradeInstanceContainer), + ("quality", 3000004): ("quality", 4000004, upgrade.upgradeInstanceContainer), ("user", 3000004): ("user", 4000004, upgrade.upgradeInstanceContainer), }, "sources": { @@ -23,6 +28,10 @@ def getMetaData(): "get_version": upgrade.getCfgVersion, "location": {"./quality_changes"} }, + "quality": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality"} + }, "user": { "get_version": upgrade.getCfgVersion, "location": {"./user"} @@ -31,5 +40,5 @@ def getMetaData(): } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json b/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json index 164b79d504..9649010643 100644 --- a/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 3.3 to 3.4", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 3.3 to Cura 3.4.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade34to40/VersionUpgrade34to40.py b/plugins/VersionUpgrade/VersionUpgrade34to35/VersionUpgrade34to35.py similarity index 86% rename from plugins/VersionUpgrade/VersionUpgrade34to40/VersionUpgrade34to40.py rename to plugins/VersionUpgrade/VersionUpgrade34to35/VersionUpgrade34to35.py index a61aae06bb..8e45d7cf73 100644 --- a/plugins/VersionUpgrade/VersionUpgrade34to40/VersionUpgrade34to40.py +++ b/plugins/VersionUpgrade/VersionUpgrade34to35/VersionUpgrade34to35.py @@ -3,13 +3,14 @@ import configparser import io +from typing import Dict, List, Set, Tuple from UM.VersionUpgrade import VersionUpgrade -deleted_settings = {"prime_tower_wall_thickness", "dual_pre_wipe", "prime_tower_purge_volume"} +deleted_settings = {"prime_tower_wall_thickness", "dual_pre_wipe", "prime_tower_purge_volume"} # type: Set[str] -changed_settings = {'retraction_combing': 'noskin'} -updated_settings = {'retraction_combing': 'infill'} +changed_settings = {"retraction_combing": "noskin"} # type: Dict[str, str] +updated_settings = {"retraction_combing": "infill"} # type: Dict[str, str] _RENAMED_MATERIAL_PROFILES = { "dsm_arnitel2045_175_cartesio_0.25_mm": "dsm_arnitel2045_175_cartesio_0.25mm_thermoplastic_extruder", @@ -57,15 +58,14 @@ _RENAMED_MATERIAL_PROFILES = { "ultimaker_pva_cartesio_0.25_mm": "ultimaker_pva_cartesio_0.25mm_thermoplastic_extruder", "ultimaker_pva_cartesio_0.4_mm": "ultimaker_pva_cartesio_0.4mm_thermoplastic_extruder", "ultimaker_pva_cartesio_0.8_mm": "ultimaker_pva_cartesio_0.8mm_thermoplastic_extruder" -} +} # type: Dict[str, str] ## Upgrades configurations from the state they were in at version 3.4 to the -# state they should be in at version 4.0. -class VersionUpgrade34to40(VersionUpgrade): - - ## Gets the version number from a CFG file in Uranium's 3.3 format. +# state they should be in at version 3.5. +class VersionUpgrade34to35(VersionUpgrade): + ## Gets the version number from a CFG file in Uranium's 3.4 format. # - # Since the format may change, this is implemented for the 3.3 format only + # Since the format may change, this is implemented for the 3.4 format only # and needs to be included in the version upgrade system rather than # globally in Uranium. # @@ -74,18 +74,24 @@ class VersionUpgrade34to40(VersionUpgrade): # \raises ValueError The format of the version number in the file is # incorrect. # \raises KeyError The format of the file is incorrect. - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Upgrades Preferences to have the new version number. - def upgradePreferences(self, serialized, filename): + def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) + # Need to show the data collection agreement again because the data Cura collects has been changed. + if parser.has_option("info", "asked_send_slice_info"): + parser.set("info", "asked_send_slice_info", "False") + if parser.has_option("info", "send_slice_info"): + parser.set("info", "send_slice_info", "True") + # Update version number. parser["general"]["version"] = "6" if "metadata" not in parser: @@ -97,7 +103,7 @@ class VersionUpgrade34to40(VersionUpgrade): return [filename], [result.getvalue()] ## Upgrades stacks to have the new version number. - def upgradeStack(self, serialized, filename): + def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) @@ -115,7 +121,7 @@ class VersionUpgrade34to40(VersionUpgrade): ## Upgrades instance containers to have the new version # number. - def upgradeInstanceContainer(self, serialized, filename): + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) @@ -141,7 +147,7 @@ class VersionUpgrade34to40(VersionUpgrade): parser.write(result) return [filename], [result.getvalue()] - def _resetConcentric3DInfillPattern(self, parser): + def _resetConcentric3DInfillPattern(self, parser: configparser.ConfigParser) -> None: if "values" not in parser: return @@ -155,5 +161,4 @@ class VersionUpgrade34to40(VersionUpgrade): if key not in parser["values"]: continue if parser["values"][key] == "concentric_3d": - del parser["values"][key] - + del parser["values"][key] \ No newline at end of file diff --git a/plugins/VersionUpgrade/VersionUpgrade34to40/__init__.py b/plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py similarity index 77% rename from plugins/VersionUpgrade/VersionUpgrade34to40/__init__.py rename to plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py index ad7a33b61a..332bc827b9 100644 --- a/plugins/VersionUpgrade/VersionUpgrade34to40/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py @@ -1,12 +1,16 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from . import VersionUpgrade34to40 +from typing import Any, Dict, TYPE_CHECKING -upgrade = VersionUpgrade34to40.VersionUpgrade34to40() +from . import VersionUpgrade34to35 +if TYPE_CHECKING: + from UM.Application import Application -def getMetaData(): +upgrade = VersionUpgrade34to35.VersionUpgrade34to35() + +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -14,6 +18,7 @@ def getMetaData(): ("definition_changes", 4000004): ("definition_changes", 4000005, upgrade.upgradeInstanceContainer), ("quality_changes", 4000004): ("quality_changes", 4000005, upgrade.upgradeInstanceContainer), + ("quality", 4000004): ("quality", 4000005, upgrade.upgradeInstanceContainer), ("user", 4000004): ("user", 4000005, upgrade.upgradeInstanceContainer), ("machine_stack", 4000004): ("machine_stack", 4000005, upgrade.upgradeStack), @@ -40,6 +45,10 @@ def getMetaData(): "get_version": upgrade.getCfgVersion, "location": {"./quality_changes"} }, + "quality": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality"} + }, "user": { "get_version": upgrade.getCfgVersion, "location": {"./user"} @@ -48,5 +57,5 @@ def getMetaData(): } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade34to40/plugin.json b/plugins/VersionUpgrade/VersionUpgrade34to35/plugin.json similarity index 56% rename from plugins/VersionUpgrade/VersionUpgrade34to40/plugin.json rename to plugins/VersionUpgrade/VersionUpgrade34to35/plugin.json index 1059ca3e57..71b13ee5a9 100644 --- a/plugins/VersionUpgrade/VersionUpgrade34to40/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade34to35/plugin.json @@ -1,8 +1,8 @@ - { - "name": "Version Upgrade 3.4 to 4.0", +{ + "name": "Version Upgrade 3.4 to 3.5", "author": "Ultimaker B.V.", - "version": "1.0.0", - "description": "Upgrades configurations from Cura 3.4 to Cura 4.0.", - "api": 4, + "version": "1.0.1", + "description": "Upgrades configurations from Cura 3.4 to Cura 3.5.", + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade34to40/tests/TestVersionUpgrade34to40.py b/plugins/VersionUpgrade/VersionUpgrade34to35/tests/TestVersionUpgrade34to35.py similarity index 68% rename from plugins/VersionUpgrade/VersionUpgrade34to40/tests/TestVersionUpgrade34to40.py rename to plugins/VersionUpgrade/VersionUpgrade34to35/tests/TestVersionUpgrade34to35.py index 22df0d6487..b74e6f35ac 100644 --- a/plugins/VersionUpgrade/VersionUpgrade34to40/tests/TestVersionUpgrade34to40.py +++ b/plugins/VersionUpgrade/VersionUpgrade34to35/tests/TestVersionUpgrade34to35.py @@ -4,12 +4,12 @@ import configparser #To parse the resulting config files. import pytest #To register tests with. -import VersionUpgrade34to40 #The module we're testing. +import VersionUpgrade34to35 #The module we're testing. ## Creates an instance of the upgrader to test with. @pytest.fixture def upgrader(): - return VersionUpgrade34to40.VersionUpgrade34to40() + return VersionUpgrade34to35.VersionUpgrade34to35() test_upgrade_version_nr_data = [ ("Empty config file", @@ -17,6 +17,10 @@ test_upgrade_version_nr_data = [ version = 5 [metadata] setting_version = 4 + + [info] + asked_send_slice_info = True + send_slice_info = True """ ) ] @@ -32,4 +36,8 @@ def test_upgradeVersionNr(test_name, file_data, upgrader): #Check the new version. assert parser["general"]["version"] == "6" - assert parser["metadata"]["setting_version"] == "5" \ No newline at end of file + assert parser["metadata"]["setting_version"] == "5" + + # Check if the data collection values have been reset to their defaults + assert parser.get("info", "asked_send_slice_info") == "False" + assert parser.get("info", "send_slice_info") == "True" diff --git a/plugins/VersionUpgrade/VersionUpgrade35to40/VersionUpgrade35to40.py b/plugins/VersionUpgrade/VersionUpgrade35to40/VersionUpgrade35to40.py new file mode 100644 index 0000000000..900c0a7396 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade35to40/VersionUpgrade35to40.py @@ -0,0 +1,77 @@ +import configparser +from typing import Tuple, List, Set, Dict +import io + +from UM.VersionUpgrade import VersionUpgrade +from cura.PrinterOutputDevice import ConnectionType + +deleted_settings = {"bridge_wall_max_overhang"} # type: Set[str] +renamed_configurations = {"connect_group_name": "group_name"} # type: Dict[str, str] + + +class VersionUpgrade35to40(VersionUpgrade): + # Upgrades stacks to have the new version number. + def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation=None) + parser.read_string(serialized) + + # Update version number. + parser["general"]["version"] = "4" + parser["metadata"]["setting_version"] = "6" + + if parser["metadata"].get("um_network_key") is not None or parser["metadata"].get("octoprint_api_key") is not None: + # Set the connection type if um_network_key or the octoprint key is set. + parser["metadata"]["connection_type"] = str(ConnectionType.NetworkConnection.value) + + if "metadata" in parser: + for old_name, new_name in renamed_configurations.items(): + if old_name not in parser["metadata"]: + continue + parser["metadata"][new_name] = parser["metadata"][old_name] + del parser["metadata"][old_name] + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + def getCfgVersion(self, serialised: str) -> int: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialised) + format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) + return format_version * 1000000 + setting_version + + ## Upgrades Preferences to have the new version number. + def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation=None) + parser.read_string(serialized) + + if "metadata" not in parser: + parser["metadata"] = {} + parser["general"]["version"] = "6" + parser["metadata"]["setting_version"] = "6" + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + ## Upgrades instance containers to have the new version + # number. + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation=None) + parser.read_string(serialized) + + # Update version number. + parser["general"]["version"] = "4" + parser["metadata"]["setting_version"] = "6" + + #self._resetConcentric3DInfillPattern(parser) + if "values" in parser: + for deleted_setting in deleted_settings: + if deleted_setting not in parser["values"]: + continue + del parser["values"][deleted_setting] + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] diff --git a/plugins/VersionUpgrade/VersionUpgrade35to40/__init__.py b/plugins/VersionUpgrade/VersionUpgrade35to40/__init__.py new file mode 100644 index 0000000000..2ad1dddbf2 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade35to40/__init__.py @@ -0,0 +1,56 @@ +from typing import Dict, Any + +from . import VersionUpgrade35to40 + +upgrade = VersionUpgrade35to40.VersionUpgrade35to40() + + +def getMetaData() -> Dict[str, Any]: + return { + "version_upgrade": { + # From To Upgrade function + ("preferences", 6000005): ("preferences", 6000006, upgrade.upgradePreferences), + + ("definition_changes", 4000005): ("definition_changes", 4000006, upgrade.upgradeInstanceContainer), + ("quality_changes", 4000005): ("quality_changes", 4000006, upgrade.upgradeInstanceContainer), + ("quality", 4000005): ("quality", 4000006, upgrade.upgradeInstanceContainer), + ("user", 4000005): ("user", 4000006, upgrade.upgradeInstanceContainer), + + ("machine_stack", 4000005): ("machine_stack", 4000006, upgrade.upgradeStack), + ("extruder_train", 4000005): ("extruder_train", 4000006, upgrade.upgradeStack), + }, + "sources": { + "preferences": { + "get_version": upgrade.getCfgVersion, + "location": {"."} + }, + "machine_stack": { + "get_version": upgrade.getCfgVersion, + "location": {"./machine_instances"} + }, + "extruder_train": { + "get_version": upgrade.getCfgVersion, + "location": {"./extruders"} + }, + "definition_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./definition_changes"} + }, + "quality_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality_changes"} + }, + "quality": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality"} + }, + "user": { + "get_version": upgrade.getCfgVersion, + "location": {"./user"} + } + } + } + + +def register(app) -> Dict[str, Any]: + return {"version_upgrade": upgrade} \ No newline at end of file diff --git a/plugins/VersionUpgrade/VersionUpgrade35to40/plugin.json b/plugins/VersionUpgrade/VersionUpgrade35to40/plugin.json new file mode 100644 index 0000000000..578594fb6d --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade35to40/plugin.json @@ -0,0 +1,8 @@ + { + "name": "Version Upgrade 3.5 to 4.0", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Upgrades configurations from Cura 3.5 to Cura 4.0.", + "api": "6.0", + "i18n-catalog": "cura" +} diff --git a/plugins/VersionUpgrade/VersionUpgrade40to41/VersionUpgrade40to41.py b/plugins/VersionUpgrade/VersionUpgrade40to41/VersionUpgrade40to41.py new file mode 100644 index 0000000000..d80e0007aa --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade40to41/VersionUpgrade40to41.py @@ -0,0 +1,86 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import configparser +import io +from typing import Dict, List, Tuple + +from UM.VersionUpgrade import VersionUpgrade + +_renamed_quality_profiles = { + "gmax15plus_pla_dual_normal": "gmax15plus_global_dual_normal", + "gmax15plus_pla_dual_thick": "gmax15plus_global_dual_thick", + "gmax15plus_pla_dual_thin": "gmax15plus_global_dual_thin", + "gmax15plus_pla_dual_very_thick": "gmax15plus_global_dual_very_thick", + "gmax15plus_pla_normal": "gmax15plus_global_normal", + "gmax15plus_pla_thick": "gmax15plus_global_thick", + "gmax15plus_pla_thin": "gmax15plus_global_thin", + "gmax15plus_pla_very_thick": "gmax15plus_global_very_thick" +} # type: Dict[str, str] + +## Upgrades configurations from the state they were in at version 4.0 to the +# state they should be in at version 4.1. +class VersionUpgrade40to41(VersionUpgrade): + ## Gets the version number from a CFG file in Uranium's 4.0 format. + # + # Since the format may change, this is implemented for the 4.0 format only + # and needs to be included in the version upgrade system rather than + # globally in Uranium. + # + # \param serialised The serialised form of a CFG file. + # \return The version number stored in the CFG file. + # \raises ValueError The format of the version number in the file is + # incorrect. + # \raises KeyError The format of the file is incorrect. + def getCfgVersion(self, serialised: str) -> int: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialised) + format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) + return format_version * 1000000 + setting_version + + ## Upgrades instance containers to have the new version + # number. + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + # Update version number. + parser["general"]["version"] = "4" + parser["metadata"]["setting_version"] = "7" + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + ## Upgrades Preferences to have the new version number. + def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + # Update version number. + parser["general"]["version"] = "6" + if "metadata" not in parser: + parser["metadata"] = {} + parser["metadata"]["setting_version"] = "7" + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + ## Upgrades stacks to have the new version number. + def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + # Update version number. + parser["general"]["version"] = "4" + parser["metadata"]["setting_version"] = "7" + + #Update the name of the quality profile. + if parser["containers"]["4"] in _renamed_quality_profiles: + parser["containers"]["4"] = _renamed_quality_profiles[parser["containers"]["4"]] + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] diff --git a/plugins/VersionUpgrade/VersionUpgrade40to41/__init__.py b/plugins/VersionUpgrade/VersionUpgrade40to41/__init__.py new file mode 100644 index 0000000000..7f39bb9d39 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade40to41/__init__.py @@ -0,0 +1,59 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from typing import Any, Dict, TYPE_CHECKING + +from . import VersionUpgrade40to41 + +if TYPE_CHECKING: + from UM.Application import Application + +upgrade = VersionUpgrade40to41.VersionUpgrade40to41() + +def getMetaData() -> Dict[str, Any]: + return { + "version_upgrade": { + # From To Upgrade function + ("preferences", 6000006): ("preferences", 6000007, upgrade.upgradePreferences), + ("machine_stack", 4000006): ("machine_stack", 4000007, upgrade.upgradeStack), + ("extruder_train", 4000006): ("extruder_train", 4000007, upgrade.upgradeStack), + ("definition_changes", 4000006): ("definition_changes", 4000007, upgrade.upgradeInstanceContainer), + ("quality_changes", 4000006): ("quality_changes", 4000007, upgrade.upgradeInstanceContainer), + ("quality", 4000006): ("quality", 4000007, upgrade.upgradeInstanceContainer), + ("user", 4000006): ("user", 4000007, upgrade.upgradeInstanceContainer), + }, + "sources": { + "preferences": { + "get_version": upgrade.getCfgVersion, + "location": {"."} + }, + "machine_stack": { + "get_version": upgrade.getCfgVersion, + "location": {"./machine_instances"} + }, + "extruder_train": { + "get_version": upgrade.getCfgVersion, + "location": {"./extruders"} + }, + "definition_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./definition_changes"} + }, + "quality_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality_changes"} + }, + "quality": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality"} + }, + "user": { + "get_version": upgrade.getCfgVersion, + "location": {"./user"} + } + } + } + + +def register(app: "Application") -> Dict[str, Any]: + return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade40to41/plugin.json b/plugins/VersionUpgrade/VersionUpgrade40to41/plugin.json new file mode 100644 index 0000000000..b1c6d75669 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade40to41/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Version Upgrade 4.0 to 4.1", + "author": "Ultimaker B.V.", + "version": "1.0.1", + "description": "Upgrades configurations from Cura 4.0 to Cura 4.1.", + "api": "6.0", + "i18n-catalog": "cura" +} diff --git a/plugins/X3DReader/plugin.json b/plugins/X3DReader/plugin.json index f18c7f033d..1fc14104ed 100644 --- a/plugins/X3DReader/plugin.json +++ b/plugins/X3DReader/plugin.json @@ -1,8 +1,8 @@ { "name": "X3D Reader", "author": "Seva Alekseyev", - "version": "0.5.0", + "version": "1.0.1", "description": "Provides support for reading X3D files.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/XRayView/XRayView.py b/plugins/XRayView/XRayView.py index 0c4035c62d..86533fe51c 100644 --- a/plugins/XRayView/XRayView.py +++ b/plugins/XRayView/XRayView.py @@ -17,6 +17,7 @@ from UM.View.RenderBatch import RenderBatch from UM.View.GL.OpenGL import OpenGL from cura.CuraApplication import CuraApplication +from cura.Scene.ConvexHullNode import ConvexHullNode from . import XRayPass @@ -41,6 +42,10 @@ class XRayView(View): self._xray_shader.setUniformValue("u_color", Color(*Application.getInstance().getTheme().getColor("xray").getRgb())) for node in BreadthFirstIterator(scene.getRoot()): + # We do not want to render ConvexHullNode as it conflicts with the bottom of the X-Ray (z-fighting). + if type(node) is ConvexHullNode: + continue + if not node.render(renderer): if node.getMeshData() and node.isVisible(): renderer.queueNode(node, diff --git a/plugins/XRayView/plugin.json b/plugins/XRayView/plugin.json index 4e89690c13..71cc165b6c 100644 --- a/plugins/XRayView/plugin.json +++ b/plugins/XRayView/plugin.json @@ -1,8 +1,8 @@ { "name": "X-Ray View", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides the X-Ray view.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 7d9b2aacc3..b6dff65403 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import copy @@ -6,7 +6,7 @@ import io import json #To parse the product-to-id mapping file. import os.path #To find the product-to-id mapping. import sys -from typing import Any, Dict, List, Optional, Tuple, cast +from typing import Any, Dict, List, Optional, Tuple, cast, Set import xml.etree.ElementTree as ET from UM.Resources import Resources @@ -60,6 +60,7 @@ class XmlMaterialProfile(InstanceContainer): def setMetaDataEntry(self, key, value, apply_to_all = True): registry = ContainerRegistry.getInstance() if registry.isReadOnly(self.getId()): + Logger.log("w", "Can't change metadata {key} of material {material_id} because it's read-only.".format(key = key, material_id = self.getId())) return # Prevent recursion @@ -71,7 +72,9 @@ class XmlMaterialProfile(InstanceContainer): material_manager = CuraApplication.getInstance().getMaterialManager() root_material_id = self.getMetaDataEntry("base_file") #if basefile is self.getId, this is a basefile. material_group = material_manager.getMaterialGroup(root_material_id) - + if not material_group: #If the profile is not registered in the registry but loose/temporary, it will not have a base file tree. + super().setMetaDataEntry(key, value) + return # Update the root material container root_material_container = material_group.root_material_node.getContainer() if root_material_container is not None: @@ -117,7 +120,7 @@ class XmlMaterialProfile(InstanceContainer): ## Overridden from InstanceContainer # base file: common settings + supported machines # machine / variant combination: only changes for itself. - def serialize(self, ignored_metadata_keys: Optional[set] = None): + def serialize(self, ignored_metadata_keys: Optional[Set[str]] = None): registry = ContainerRegistry.getInstance() base_file = self.getMetaDataEntry("base_file", "") @@ -141,23 +144,13 @@ class XmlMaterialProfile(InstanceContainer): # setting_version is derived from the "version" tag in the schema, so don't serialize it into a file if ignored_metadata_keys is None: ignored_metadata_keys = set() - ignored_metadata_keys |= {"setting_version"} + ignored_metadata_keys |= {"setting_version", "definition", "status", "variant", "type", "base_file", "approximate_diameter", "id", "container_type", "name"} # remove the keys that we want to ignore in the metadata for key in ignored_metadata_keys: if key in metadata: del metadata[key] properties = metadata.pop("properties", {}) - # Metadata properties that should not be serialized. - metadata.pop("status", "") - metadata.pop("variant", "") - metadata.pop("type", "") - metadata.pop("base_file", "") - metadata.pop("approximate_diameter", "") - metadata.pop("id", "") - metadata.pop("container_type", "") - metadata.pop("name", "") - ## Begin Name Block builder.start("name") # type: ignore @@ -269,7 +262,7 @@ class XmlMaterialProfile(InstanceContainer): # Find all hotend sub-profiles corresponding to this material and machine and add them to this profile. buildplate_dict = {} # type: Dict[str, Any] for variant_name, variant_dict in machine_variant_map[definition_id].items(): - variant_type = variant_dict["variant_node"].metadata["hardware_type"] + variant_type = variant_dict["variant_node"].getMetaDataEntry("hardware_type", str(VariantType.NOZZLE)) variant_type = VariantType(variant_type) if variant_type == VariantType.NOZZLE: # The hotend identifier is not the containers name, but its "name". @@ -1165,6 +1158,8 @@ class XmlMaterialProfile(InstanceContainer): with open(product_to_id_file, encoding = "utf-8") as f: product_to_id_map = json.load(f) product_to_id_map = {key: [value] for key, value in product_to_id_map.items()} + #This also loads "Ultimaker S5" -> "ultimaker_s5" even though that is not strictly necessary with the default to change spaces into underscores. + #However it is not always loaded with that default; this mapping is also used in serialize() without that default. return product_to_id_map ## Parse the value of the "material compatible" property. diff --git a/plugins/XmlMaterialProfile/XmlMaterialUpgrader.py b/plugins/XmlMaterialProfile/XmlMaterialUpgrader.py index 167a9f2849..832a443637 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialUpgrader.py +++ b/plugins/XmlMaterialProfile/XmlMaterialUpgrader.py @@ -1,11 +1,10 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import xml.etree.ElementTree as ET from UM.VersionUpgrade import VersionUpgrade -from cura.CuraApplication import CuraApplication from .XmlMaterialProfile import XmlMaterialProfile diff --git a/plugins/XmlMaterialProfile/__init__.py b/plugins/XmlMaterialProfile/__init__.py index 70a359ee76..b3810c97dc 100644 --- a/plugins/XmlMaterialProfile/__init__.py +++ b/plugins/XmlMaterialProfile/__init__.py @@ -5,10 +5,7 @@ from . import XmlMaterialProfile from . import XmlMaterialUpgrader from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase -from UM.i18n import i18nCatalog - -catalog = i18nCatalog("cura") upgrader = XmlMaterialUpgrader.XmlMaterialUpgrader() @@ -19,7 +16,7 @@ def getMetaData(): "mimetype": "application/x-ultimaker-material-profile" }, "version_upgrade": { - ("materials", 1000000): ("materials", 1000004, upgrader.upgradeMaterial), + ("materials", 1000000): ("materials", 1000007, upgrader.upgradeMaterial), }, "sources": { "materials": { diff --git a/plugins/XmlMaterialProfile/plugin.json b/plugins/XmlMaterialProfile/plugin.json index 17056dcb3e..bb1db82fa4 100644 --- a/plugins/XmlMaterialProfile/plugin.json +++ b/plugins/XmlMaterialProfile/plugin.json @@ -1,8 +1,8 @@ { "name": "Material Profiles", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides capabilities to read and write XML-based material profiles.", - "api": 4, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/XmlMaterialProfile/product_to_id.json b/plugins/XmlMaterialProfile/product_to_id.json index 3e7ce9311f..6b78d3fe64 100644 --- a/plugins/XmlMaterialProfile/product_to_id.json +++ b/plugins/XmlMaterialProfile/product_to_id.json @@ -6,6 +6,7 @@ "Ultimaker 2+": "ultimaker2_plus", "Ultimaker 3": "ultimaker3", "Ultimaker 3 Extended": "ultimaker3_extended", + "Ultimaker S5": "ultimaker_s5", "Ultimaker Original": "ultimaker_original", "Ultimaker Original+": "ultimaker_original_plus", "Ultimaker Original Dual Extrusion": "ultimaker_original_dual", diff --git a/resources/bundled_packages.json b/resources/bundled_packages/cura.json similarity index 71% rename from resources/bundled_packages.json rename to resources/bundled_packages/cura.json index d216415921..21da1d9fdb 100644 --- a/resources/bundled_packages.json +++ b/resources/bundled_packages/cura.json @@ -5,11 +5,11 @@ "package_type": "plugin", "display_name": "3MF Reader", "description": "Provides support for reading 3MF files.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -22,11 +22,11 @@ "package_type": "plugin", "display_name": "3MF Writer", "description": "Provides support for writing 3MF files.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -39,11 +39,28 @@ "package_type": "plugin", "display_name": "Change Log", "description": "Shows changes since latest checked version.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "CuraDrive": { + "package_info": { + "package_id": "CuraDrive", + "package_type": "plugin", + "display_name": "Cura Backups", + "description": "Backup and restore your configuration.", + "package_version": "1.2.0", + "sdk_version": 6, + "website": "https://ultimaker.com", + "author": { + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -56,11 +73,11 @@ "package_type": "plugin", "display_name": "CuraEngine Backend", "description": "Provides the link to the CuraEngine slicing backend.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -73,11 +90,11 @@ "package_type": "plugin", "display_name": "Cura Profile Reader", "description": "Provides support for importing Cura profiles.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -90,11 +107,11 @@ "package_type": "plugin", "display_name": "Cura Profile Writer", "description": "Provides support for exporting Cura profiles.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -107,11 +124,28 @@ "package_type": "plugin", "display_name": "Firmware Update Checker", "description": "Checks for firmware updates.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "FirmwareUpdater": { + "package_info": { + "package_id": "FirmwareUpdater", + "package_type": "plugin", + "display_name": "Firmware Updater", + "description": "Provides a machine actions for updating firmware.", + "package_version": "1.0.1", + "sdk_version": "6.0", + "website": "https://ultimaker.com", + "author": { + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -124,11 +158,11 @@ "package_type": "plugin", "display_name": "Compressed G-code Reader", "description": "Reads g-code from a compressed archive.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -141,11 +175,11 @@ "package_type": "plugin", "display_name": "Compressed G-code Writer", "description": "Writes g-code to a compressed archive.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -158,11 +192,11 @@ "package_type": "plugin", "display_name": "G-Code Profile Reader", "description": "Provides support for importing profiles from g-code files.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -175,8 +209,8 @@ "package_type": "plugin", "display_name": "G-Code Reader", "description": "Allows loading and displaying G-code files.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "VictorLarchenko", @@ -192,11 +226,11 @@ "package_type": "plugin", "display_name": "G-Code Writer", "description": "Writes g-code to a file.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -209,11 +243,11 @@ "package_type": "plugin", "display_name": "Image Reader", "description": "Enables ability to generate printable geometry from 2D image files.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -226,11 +260,11 @@ "package_type": "plugin", "display_name": "Legacy Cura Profile Reader", "description": "Provides support for importing profiles from legacy Cura versions.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -243,8 +277,8 @@ "package_type": "plugin", "display_name": "Machine Settings Action", "description": "Provides a way to change machine settings (such as build volume, nozzle size, etc.).", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "fieldOfView", @@ -260,11 +294,11 @@ "package_type": "plugin", "display_name": "Model Checker", "description": "Checks models and print configuration for possible printing issues and give suggestions.", - "package_version": "0.1.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -277,11 +311,11 @@ "package_type": "plugin", "display_name": "Monitor Stage", "description": "Provides a monitor stage in Cura.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -294,11 +328,11 @@ "package_type": "plugin", "display_name": "Per-Object Settings Tool", "description": "Provides the per-model settings.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -311,11 +345,11 @@ "package_type": "plugin", "display_name": "Post Processing", "description": "Extension that allows for user created scripts for post processing.", - "package_version": "2.2.0", - "sdk_version": 4, + "package_version": "2.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -328,11 +362,28 @@ "package_type": "plugin", "display_name": "Prepare Stage", "description": "Provides a prepare stage in Cura.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "PreviewStage": { + "package_info": { + "package_id": "PreviewStage", + "package_type": "plugin", + "display_name": "Preview Stage", + "description": "Provides a preview stage in Cura.", + "package_version": "1.0.1", + "sdk_version": "6.0", + "website": "https://ultimaker.com", + "author": { + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -345,11 +396,11 @@ "package_type": "plugin", "display_name": "Removable Drive Output Device", "description": "Provides removable drive hotplugging and writing support.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -362,11 +413,11 @@ "package_type": "plugin", "display_name": "Simulation View", "description": "Provides the Simulation view.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -379,11 +430,11 @@ "package_type": "plugin", "display_name": "Slice Info", "description": "Submits anonymous slice info. Can be disabled through preferences.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -396,11 +447,11 @@ "package_type": "plugin", "display_name": "Solid View", "description": "Provides a normal solid mesh view.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -413,11 +464,11 @@ "package_type": "plugin", "display_name": "Support Eraser Tool", "description": "Creates an eraser mesh to block the printing of support in certain places.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -430,11 +481,11 @@ "package_type": "plugin", "display_name": "Toolbox", "description": "Find, manage and install new Cura packages.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -447,11 +498,11 @@ "package_type": "plugin", "display_name": "UFP Writer", "description": "Provides support for writing Ultimaker Format Packages.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -464,11 +515,11 @@ "package_type": "plugin", "display_name": "Ultimaker Machine Actions", "description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.).", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -481,11 +532,11 @@ "package_type": "plugin", "display_name": "UM3 Network Printing", "description": "Manages network connections to Ultimaker 3 printers.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -498,11 +549,11 @@ "package_type": "plugin", "display_name": "USB Printing", "description": "Accepts G-Code and sends them to a printer. Plugin can also update firmware.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.2", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -515,11 +566,11 @@ "package_type": "plugin", "display_name": "User Agreement", "description": "Ask the user once if he/she agrees with our license.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -532,11 +583,11 @@ "package_type": "plugin", "display_name": "Version Upgrade 2.1 to 2.2", "description": "Upgrades configurations from Cura 2.1 to Cura 2.2.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -549,11 +600,11 @@ "package_type": "plugin", "display_name": "Version Upgrade 2.2 to 2.4", "description": "Upgrades configurations from Cura 2.2 to Cura 2.4.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -566,11 +617,11 @@ "package_type": "plugin", "display_name": "Version Upgrade 2.5 to 2.6", "description": "Upgrades configurations from Cura 2.5 to Cura 2.6.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -583,11 +634,11 @@ "package_type": "plugin", "display_name": "Version Upgrade 2.6 to 2.7", "description": "Upgrades configurations from Cura 2.6 to Cura 2.7.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -600,11 +651,11 @@ "package_type": "plugin", "display_name": "Version Upgrade 2.7 to 3.0", "description": "Upgrades configurations from Cura 2.7 to Cura 3.0.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -617,11 +668,11 @@ "package_type": "plugin", "display_name": "Version Upgrade 3.0 to 3.1", "description": "Upgrades configurations from Cura 3.0 to Cura 3.1.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -634,11 +685,11 @@ "package_type": "plugin", "display_name": "Version Upgrade 3.2 to 3.3", "description": "Upgrades configurations from Cura 3.2 to Cura 3.3.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -651,28 +702,62 @@ "package_type": "plugin", "display_name": "Version Upgrade 3.3 to 3.4", "description": "Upgrades configurations from Cura 3.3 to Cura 3.4.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" } } }, - "VersionUpgrade34to40": { + "VersionUpgrade34to35": { "package_info": { - "package_id": "VersionUpgrade34to40", + "package_id": "VersionUpgrade34to35", "package_type": "plugin", - "display_name": "Version Upgrade 3.4 to 4.0", - "description": "Upgrades configurations from Cura 3.4 to Cura 4.0.", - "package_version": "1.0.0", - "sdk_version": 4, + "display_name": "Version Upgrade 3.4 to 3.5", + "description": "Upgrades configurations from Cura 3.4 to Cura 3.5.", + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "VersionUpgrade35to40": { + "package_info": { + "package_id": "VersionUpgrade35to40", + "package_type": "plugin", + "display_name": "Version Upgrade 3.5 to 4.0", + "description": "Upgrades configurations from Cura 3.5 to Cura 4.0.", + "package_version": "1.0.0", + "sdk_version": "6.0", + "website": "https://ultimaker.com", + "author": { + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "VersionUpgrade40to41": { + "package_info": { + "package_id": "VersionUpgrade40to41", + "package_type": "plugin", + "display_name": "Version Upgrade 4.0 to 4.1", + "description": "Upgrades configurations from Cura 4.0 to Cura 4.1.", + "package_version": "1.0.1", + "sdk_version": "6.0", + "website": "https://ultimaker.com", + "author": { + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -685,8 +770,8 @@ "package_type": "plugin", "display_name": "X3D Reader", "description": "Provides support for reading X3D files.", - "package_version": "0.5.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "SevaAlekseyev", @@ -702,11 +787,11 @@ "package_type": "plugin", "display_name": "XML Material Profiles", "description": "Provides capabilities to read and write XML-based material profiles.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -719,11 +804,11 @@ "package_type": "plugin", "display_name": "X-Ray View", "description": "Provides the X-Ray view.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "plugins@ultimaker.com", "website": "https://ultimaker.com" @@ -736,8 +821,8 @@ "package_type": "material", "display_name": "Generic ABS", "description": "The generic ABS profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 6, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -754,8 +839,44 @@ "package_type": "material", "display_name": "Generic BAM", "description": "The generic BAM profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 6, + "package_version": "1.2.1", + "sdk_version": "6.0", + "website": "https://github.com/Ultimaker/fdm_materials", + "author": { + "author_id": "Generic", + "display_name": "Generic", + "email": "materials@ultimaker.com", + "website": "https://github.com/Ultimaker/fdm_materials", + "description": "Professional 3D printing made accessible." + } + } + }, + "GenericCFFCPE": { + "package_info": { + "package_id": "GenericCFFCPE", + "package_type": "material", + "display_name": "Generic CFF CPE", + "description": "The generic CFF CPE profile which other profiles can be based upon.", + "package_version": "1.1.1", + "sdk_version": "6.0", + "website": "https://github.com/Ultimaker/fdm_materials", + "author": { + "author_id": "Generic", + "display_name": "Generic", + "email": "materials@ultimaker.com", + "website": "https://github.com/Ultimaker/fdm_materials", + "description": "Professional 3D printing made accessible." + } + } + }, + "GenericCFFPA": { + "package_info": { + "package_id": "GenericCFFPA", + "package_type": "material", + "display_name": "Generic CFF PA", + "description": "The generic CFF PA profile which other profiles can be based upon.", + "package_version": "1.1.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -772,8 +893,8 @@ "package_type": "material", "display_name": "Generic CPE", "description": "The generic CPE profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 6, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -790,8 +911,44 @@ "package_type": "material", "display_name": "Generic CPE+", "description": "The generic CPE+ profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 6, + "package_version": "1.2.1", + "sdk_version": "6.0", + "website": "https://github.com/Ultimaker/fdm_materials", + "author": { + "author_id": "Generic", + "display_name": "Generic", + "email": "materials@ultimaker.com", + "website": "https://github.com/Ultimaker/fdm_materials", + "description": "Professional 3D printing made accessible." + } + } + }, + "GenericGFFCPE": { + "package_info": { + "package_id": "GenericGFFCPE", + "package_type": "material", + "display_name": "Generic GFF CPE", + "description": "The generic GFF CPE profile which other profiles can be based upon.", + "package_version": "1.1.1", + "sdk_version": "6.0", + "website": "https://github.com/Ultimaker/fdm_materials", + "author": { + "author_id": "Generic", + "display_name": "Generic", + "email": "materials@ultimaker.com", + "website": "https://github.com/Ultimaker/fdm_materials", + "description": "Professional 3D printing made accessible." + } + } + }, + "GenericGFFPA": { + "package_info": { + "package_id": "GenericGFFPA", + "package_type": "material", + "display_name": "Generic GFF PA", + "description": "The generic GFF PA profile which other profiles can be based upon.", + "package_version": "1.1.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -808,8 +965,8 @@ "package_type": "material", "display_name": "Generic HIPS", "description": "The generic HIPS profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 6, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -826,8 +983,8 @@ "package_type": "material", "display_name": "Generic Nylon", "description": "The generic Nylon profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 6, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -844,8 +1001,8 @@ "package_type": "material", "display_name": "Generic PC", "description": "The generic PC profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 6, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -862,8 +1019,8 @@ "package_type": "material", "display_name": "Generic PETG", "description": "The generic PETG profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 6, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -880,8 +1037,8 @@ "package_type": "material", "display_name": "Generic PLA", "description": "The generic PLA profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 6, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -898,8 +1055,8 @@ "package_type": "material", "display_name": "Generic PP", "description": "The generic PP profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 6, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -916,8 +1073,8 @@ "package_type": "material", "display_name": "Generic PVA", "description": "The generic PVA profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 6, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -934,8 +1091,8 @@ "package_type": "material", "display_name": "Generic Tough PLA", "description": "The generic Tough PLA profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 6, + "package_version": "1.0.2", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -952,8 +1109,8 @@ "package_type": "material", "display_name": "Generic TPU", "description": "The generic TPU profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 6, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -970,8 +1127,8 @@ "package_type": "material", "display_name": "Dagoma Chromatik PLA", "description": "Filament testé et approuvé pour les imprimantes 3D Dagoma. Chromatik est l'idéal pour débuter et suivre les tutoriels premiers pas. Il vous offre qualité et résistance pour chacune de vos impressions.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://dagoma.fr/boutique/filaments.html", "author": { "author_id": "Dagoma", @@ -987,8 +1144,8 @@ "package_type": "material", "display_name": "FABtotum ABS", "description": "This material is easy to be extruded but it is not the simplest to use. It is one of the most used in 3D printing to get very well finished objects. It is not sustainable and its smoke can be dangerous if inhaled. The reason to prefer this filament to PLA is mainly because of its precision and mechanical specs. ABS (for plastic) stands for Acrylonitrile Butadiene Styrene and it is a thermoplastic which is widely used in everyday objects. It can be printed with any FFF 3D printer which can get to high temperatures as it must be extruded in a range between 220° and 245°, so it’s compatible with all versions of the FABtotum Personal fabricator.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=40", "author": { "author_id": "FABtotum", @@ -1004,8 +1161,8 @@ "package_type": "material", "display_name": "FABtotum Nylon", "description": "When 3D printing started this material was not listed among the extrudable filaments. It is flexible as well as resistant to tractions. It is well known for its uses in textile but also in industries which require a strong and flexible material. There are different kinds of Nylon: 3D printing mostly uses Nylon 6 and Nylon 6.6, which are the most common. It requires higher temperatures to be printed, so a 3D printer must be able to reach them (around 240°C): the FABtotum, of course, can.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=53", "author": { "author_id": "FABtotum", @@ -1021,8 +1178,8 @@ "package_type": "material", "display_name": "FABtotum PLA", "description": "It is the most common filament used for 3D printing. It is studied to be bio-degradable as it comes from corn starch’s sugar mainly. It is completely made of renewable sources and has no footprint on polluting. PLA stands for PolyLactic Acid and it is a thermoplastic that today is still considered the easiest material to be 3D printed. It can be extruded at lower temperatures: the standard range of FABtotum’s one is between 185° and 195°.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=39", "author": { "author_id": "FABtotum", @@ -1038,8 +1195,8 @@ "package_type": "material", "display_name": "FABtotum TPU Shore 98A", "description": "", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=66", "author": { "author_id": "FABtotum", @@ -1055,12 +1212,12 @@ "package_type": "material", "display_name": "Fiberlogy HD PLA", "description": "With our HD PLA you have many more options. You can use this material in two ways. Choose the one you like best. You can use it as a normal PLA and get prints characterized by a very good adhesion between the layers and high precision. You can also make your prints acquire similar properties to that of ABS – better impact resistance and high temperature resistance. All you need is an oven. Yes, an oven! By annealing our HD PLA in an oven, in accordance with the manual, you will avoid all the inconveniences of printing with ABS, such as unpleasant odour or hazardous fumes.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "http://fiberlogy.com/en/fiberlogy-filaments/filament-hd-pla/", "author": { "author_id": "Fiberlogy", - "diplay_name": "Fiberlogy S.A.", + "display_name": "Fiberlogy S.A.", "email": "grzegorz.h@fiberlogy.com", "website": "http://fiberlogy.com" } @@ -1072,8 +1229,8 @@ "package_type": "material", "display_name": "Filo3D PLA", "description": "Fast, safe and reliable printing. PLA is ideal for the fast and reliable printing of parts and prototypes with a great surface quality.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://dagoma.fr", "author": { "author_id": "Dagoma", @@ -1089,8 +1246,8 @@ "package_type": "material", "display_name": "IMADE3D JellyBOX PETG", "description": "", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "http://shop.imade3d.com/filament.html", "author": { "author_id": "IMADE3D", @@ -1106,8 +1263,8 @@ "package_type": "material", "display_name": "IMADE3D JellyBOX PLA", "description": "", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "http://shop.imade3d.com/filament.html", "author": { "author_id": "IMADE3D", @@ -1123,8 +1280,8 @@ "package_type": "material", "display_name": "Octofiber PLA", "description": "PLA material from Octofiber.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://nl.octofiber.com/3d-printing-filament/pla.html", "author": { "author_id": "Octofiber", @@ -1140,8 +1297,8 @@ "package_type": "material", "display_name": "PolyFlex™ PLA", "description": "PolyFlex™ is a highly flexible yet easy to print 3D printing material. Featuring good elasticity and a large strain-to- failure, PolyFlex™ opens up a completely new realm of applications.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "http://www.polymaker.com/shop/polyflex/", "author": { "author_id": "Polymaker", @@ -1157,8 +1314,8 @@ "package_type": "material", "display_name": "PolyMax™ PLA", "description": "PolyMax™ PLA is a 3D printing material with excellent mechanical properties and printing quality. PolyMax™ PLA has an impact resistance of up to nine times that of regular PLA, and better overall mechanical properties than ABS.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "http://www.polymaker.com/shop/polymax/", "author": { "author_id": "Polymaker", @@ -1174,8 +1331,8 @@ "package_type": "material", "display_name": "PolyPlus™ PLA True Colour", "description": "PolyPlus™ PLA is a premium PLA designed for all desktop FDM/FFF 3D printers. It is produced with our patented Jam-Free™ technology that ensures consistent extrusion and prevents jams.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "http://www.polymaker.com/shop/polyplus-true-colour/", "author": { "author_id": "Polymaker", @@ -1191,8 +1348,8 @@ "package_type": "material", "display_name": "PolyWood™ PLA", "description": "PolyWood™ is a wood mimic printing material that contains no actual wood ensuring a clean Jam-Free™ printing experience.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "http://www.polymaker.com/shop/polywood/", "author": { "author_id": "Polymaker", @@ -1208,11 +1365,30 @@ "package_type": "material", "display_name": "Ultimaker ABS", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/abs", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "materials@ultimaker.com", + "website": "https://ultimaker.com", + "description": "Professional 3D printing made accessible.", + "support_website": "https://ultimaker.com/en/resources/troubleshooting/materials" + } + } + }, + "UltimakerBAM": { + "package_info": { + "package_id": "UltimakerBAM", + "package_type": "material", + "display_name": "Ultimaker Breakaway", + "description": "Example package for material and quality profiles for Ultimaker materials.", + "package_version": "1.2.1", + "sdk_version": "6.0", + "website": "https://ultimaker.com/products/materials/breakaway", + "author": { + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "materials@ultimaker.com", "website": "https://ultimaker.com", @@ -1227,11 +1403,30 @@ "package_type": "material", "display_name": "Ultimaker CPE", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/abs", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "materials@ultimaker.com", + "website": "https://ultimaker.com", + "description": "Professional 3D printing made accessible.", + "support_website": "https://ultimaker.com/en/resources/troubleshooting/materials" + } + } + }, + "UltimakerCPEP": { + "package_info": { + "package_id": "UltimakerCPEP", + "package_type": "material", + "display_name": "Ultimaker CPE+", + "description": "Example package for material and quality profiles for Ultimaker materials.", + "package_version": "1.2.1", + "sdk_version": "6.0", + "website": "https://ultimaker.com/products/materials/cpe", + "author": { + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "materials@ultimaker.com", "website": "https://ultimaker.com", @@ -1246,11 +1441,11 @@ "package_type": "material", "display_name": "Ultimaker Nylon", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/abs", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "materials@ultimaker.com", "website": "https://ultimaker.com", @@ -1265,11 +1460,11 @@ "package_type": "material", "display_name": "Ultimaker PC", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.2.2", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/pc", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "materials@ultimaker.com", "website": "https://ultimaker.com", @@ -1284,11 +1479,30 @@ "package_type": "material", "display_name": "Ultimaker PLA", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/abs", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "materials@ultimaker.com", + "website": "https://ultimaker.com", + "description": "Professional 3D printing made accessible.", + "support_website": "https://ultimaker.com/en/resources/troubleshooting/materials" + } + } + }, + "UltimakerPP": { + "package_info": { + "package_id": "UltimakerPP", + "package_type": "material", + "display_name": "Ultimaker PP", + "description": "Example package for material and quality profiles for Ultimaker materials.", + "package_version": "1.2.1", + "sdk_version": "6.0", + "website": "https://ultimaker.com/products/materials/pp", + "author": { + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "materials@ultimaker.com", "website": "https://ultimaker.com", @@ -1303,11 +1517,49 @@ "package_type": "material", "display_name": "Ultimaker PVA", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/abs", "author": { - "author_id": "Ultimaker", + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "materials@ultimaker.com", + "website": "https://ultimaker.com", + "description": "Professional 3D printing made accessible.", + "support_website": "https://ultimaker.com/en/resources/troubleshooting/materials" + } + } + }, + "UltimakerTPU": { + "package_info": { + "package_id": "UltimakerTPU", + "package_type": "material", + "display_name": "Ultimaker TPU 95A", + "description": "Example package for material and quality profiles for Ultimaker materials.", + "package_version": "1.2.1", + "sdk_version": "6.0", + "website": "https://ultimaker.com/products/materials/tpu-95a", + "author": { + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "materials@ultimaker.com", + "website": "https://ultimaker.com", + "description": "Professional 3D printing made accessible.", + "support_website": "https://ultimaker.com/en/resources/troubleshooting/materials" + } + } + }, + "UltimakerTPLA": { + "package_info": { + "package_id": "UltimakerTPLA", + "package_type": "material", + "display_name": "Ultimaker Tough PLA", + "description": "Example package for material and quality profiles for Ultimaker materials.", + "package_version": "1.0.3", + "sdk_version": "6.0", + "website": "https://ultimaker.com/products/materials/tough-pla", + "author": { + "author_id": "UltimakerPackages", "display_name": "Ultimaker B.V.", "email": "materials@ultimaker.com", "website": "https://ultimaker.com", @@ -1322,8 +1574,8 @@ "package_type": "material", "display_name": "Vertex Delta ABS", "description": "ABS material and quality files for the Delta Vertex K8800.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", @@ -1339,8 +1591,8 @@ "package_type": "material", "display_name": "Vertex Delta PET", "description": "ABS material and quality files for the Delta Vertex K8800.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", @@ -1356,8 +1608,8 @@ "package_type": "material", "display_name": "Vertex Delta PLA", "description": "ABS material and quality files for the Delta Vertex K8800.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", @@ -1373,8 +1625,8 @@ "package_type": "material", "display_name": "Vertex Delta TPU", "description": "ABS material and quality files for the Delta Vertex K8800.", - "package_version": "1.0.0", - "sdk_version": 4, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", @@ -1384,4 +1636,4 @@ } } } -} +} \ No newline at end of file diff --git a/resources/definitions/3dator.def.json b/resources/definitions/3dator.def.json index 91f261906b..e91c46920b 100644 --- a/resources/definitions/3dator.def.json +++ b/resources/definitions/3dator.def.json @@ -7,7 +7,6 @@ "author": "3Dator GmbH", "manufacturer": "3Dator GmbH", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "supports_usb_connection": true, "platform": "3dator_platform.stl", "machine_extruder_trains": diff --git a/resources/definitions/alfawise_u20.def.json b/resources/definitions/alfawise_u20.def.json new file mode 100644 index 0000000000..8a6badeca6 --- /dev/null +++ b/resources/definitions/alfawise_u20.def.json @@ -0,0 +1,93 @@ +{ + "name": "Alfawise U20", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Samuel Pinches", + "manufacturer": "Alfawise", + "file_formats": "text/x-gcode", + "preferred_quality_type": "fast", + "machine_extruder_trains": + { + "0": "alfawise_u20_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "Alfawise U20" + }, + "machine_start_gcode": { + "default_value": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 ;home all axis\nG92 E0 ;zero the extruded length\nG1 Z1 F1000 ;move up slightly\nG1 Y60.0 Z0 E9.0 F1000.0;intro line\nG1 Y100.0 E21.5 F1000.0 ;continue line\nG92 E0 ;zero the extruded length again\n; -- end of START GCODE --" + }, + "machine_end_gcode": { + "default_value": "; -- END GCODE --\nM104 S0 ;turn off nozzle heater\nM140 S0 ;turn off bed heater\nG91 ;set to relative positioning\nG1 E-10 F300 ;retract the filament slightly\nG90 ;set to absolute positioning\nG28 X0 ;move to the X-axis origin (Home)\nG0 Y280 F600 ;bring the bed to the front for easy print removal\nM84 ;turn off stepper motors\n; -- end of END GCODE --" + }, + "machine_width": { + "default_value": 300 + }, + "machine_height": { + "default_value": 400 + }, + "machine_depth": { + "default_value": 300 + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_center_is_zero": { + "default_value": false + }, + "gantry_height": { + "default_value": 10 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "material_diameter": { + "default_value": 1.75 + }, + "material_print_temperature": { + "default_value": 210 + }, + "material_bed_temperature": { + "default_value": 50 + }, + "layer_height_0": { + "default_value": 0.2 + }, + "wall_thickness": { + "default_value": 1.2 + }, + "speed_print": { + "default_value": 40 + }, + "speed_infill": { + "default_value": 40 + }, + "speed_wall": { + "default_value": 35 + }, + "speed_topbottom": { + "default_value": 35 + }, + "speed_travel": { + "default_value": 120 + }, + "speed_layer_0": { + "default_value": 20 + }, + "support_enable": { + "default_value": true + }, + "retraction_enable": { + "default_value": true + }, + "retraction_amount": { + "default_value": 5 + }, + "retraction_speed": { + "default_value": 45 + } + } +} diff --git a/resources/definitions/alfawise_u30.def.json b/resources/definitions/alfawise_u30.def.json new file mode 100644 index 0000000000..65f6adcfe0 --- /dev/null +++ b/resources/definitions/alfawise_u30.def.json @@ -0,0 +1,93 @@ +{ + "name": "Alfawise U30", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Nicolas Nussbaum", + "manufacturer": "Alfawise", + "file_formats": "text/x-gcode", + "preferred_quality_type": "fast", + "machine_extruder_trains": + { + "0": "alfawise_u30_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "Alfawise U30" + }, + "machine_start_gcode": { + "default_value": "; -- START GCODE --\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z1 F1000 ;move up slightly\nG1 Y60.0 Z0 E9.0 F1000.0;intro line\nG1 Y100.0 E21.5 F1000.0 ;continue line\nG92 E0 ;zero the extruded length again\nG1 F80\n;Put printing message on LCD screen\nM117 Printing...\n; -- end of START GCODE --" + }, + "machine_end_gcode": { + "default_value": "; -- END GCODE --\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F80 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning\nM107 ;turn the fan off; -- end of END GCODE --" + }, + "machine_width": { + "default_value": 220 + }, + "machine_height": { + "default_value": 250 + }, + "machine_depth": { + "default_value": 220 + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_center_is_zero": { + "default_value": false + }, + "gantry_height": { + "default_value": 10 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "material_diameter": { + "default_value": 1.75 + }, + "material_print_temperature": { + "default_value": 210 + }, + "material_bed_temperature": { + "default_value": 50 + }, + "layer_height_0": { + "default_value": 0.2 + }, + "wall_thickness": { + "default_value": 1.2 + }, + "speed_print": { + "default_value": 40 + }, + "speed_infill": { + "default_value": 40 + }, + "speed_wall": { + "default_value": 35 + }, + "speed_topbottom": { + "default_value": 35 + }, + "speed_travel": { + "default_value": 120 + }, + "speed_layer_0": { + "default_value": 20 + }, + "support_enable": { + "default_value": true + }, + "retraction_enable": { + "default_value": true + }, + "retraction_amount": { + "default_value": 5 + }, + "retraction_speed": { + "default_value": 45 + } + } +} diff --git a/resources/definitions/anycubic_4max.def.json b/resources/definitions/anycubic_4max.def.json new file mode 100644 index 0000000000..c14ce1ac31 --- /dev/null +++ b/resources/definitions/anycubic_4max.def.json @@ -0,0 +1,88 @@ +{ + "version": 2, + "name": "Anycubic 4Max", + "inherits": "fdmprinter", + "metadata": + { + "visible": true, + "author": "Jason Scurtu", + "manufacturer": "Anycubic", + "category": "Other", + "file_formats": "text/x-gcode", + "icon": "icon_ultimaker2", + "platform": "anycubic_4max_platform.stl", + "has_materials": true, + "quality_definition": "anycubic_4max", + "has_machine_quality": true, + "preferred_quality_type": "normal", + "machine_extruder_trains": + { + "0": "anycubic_4max_extruder_0" + } + }, + + "overrides": + { + "machine_name": { "default_value": "Anycubic 4Max" }, + "machine_heated_bed": { "default_value": true }, + "machine_width": { "default_value": 220 }, + "machine_height": {"default_value": 300 }, + "machine_depth": { "default_value": 220 }, + "machine_center_is_zero": { "default_value": false }, + "machine_max_feedrate_x": { "default_value": 300 }, + "machine_max_feedrate_y": { "default_value": 300 }, + "machine_max_feedrate_z": { "default_value": 10 }, + "machine_acceleration": { "default_value": 1500 }, + "machine_max_acceleration_x": { "default_value": 1500 }, + "machine_max_acceleration_y": { "default_value": 1500 }, + "machine_max_acceleration_z": { "default_value": 100 }, + "machine_max_jerk_xy": { "default_value": 11.0 }, + "machine_max_jerk_z": { "default_value": 0.4 }, + "machine_max_jerk_e": { "default_value": 11.0 }, + + "jerk_enabled": { "value": "True" }, + "jerk_layer_0": { "value": "jerk_topbottom" }, + "jerk_prime_tower": { "value": "math.ceil(jerk_print * 15 / 25)" }, + "jerk_print": { "value": "11" }, + "jerk_support": { "value": "math.ceil(jerk_print * 15 / 25)" }, + "jerk_support_interface": { "value": "jerk_topbottom" }, + "jerk_topbottom": { "value": "math.ceil(jerk_print * 5 / 25)" }, + "jerk_wall": { "value": "math.ceil(jerk_print * 10 / 25)" }, + "jerk_wall_0": { "value": "math.ceil(jerk_wall * 5 / 10)" }, + + "gantry_height": { "default_value": 25.0 }, + "skin_overlap": { "value": "10" }, + + "acceleration_enabled": { "value": "True" }, + "acceleration_layer_0": { "value": "acceleration_topbottom" }, + "acceleration_prime_tower": { "value": "math.ceil(acceleration_print * 2000 / 4000)" }, + "acceleration_print": { "value": "900" }, + "acceleration_support": { "value": "math.ceil(acceleration_print * 2000 / 4000)" }, + "acceleration_support_interface": { "value": "acceleration_topbottom" }, + "acceleration_topbottom": { "value": "math.ceil(acceleration_print * 1000 / 3000)" }, + "acceleration_travel": { "value": "acceleration_print" }, + "acceleration_wall": { "value": "math.ceil(acceleration_print * 1000 / 3000)" }, + "acceleration_wall_0": { "value": "math.ceil(acceleration_wall * 1000 / 1000)" }, + + "speed_layer_0": { "value": "20" }, + "speed_print": { "value": "40" }, + "speed_support": { "value": "speed_wall_0" }, + "speed_support_interface": { "value": "speed_topbottom" }, + "speed_topbottom": { "value": "math.ceil(speed_print * 20 / 35)" }, + "speed_travel": { "value": "60" }, + "speed_wall": { "value": "math.ceil(speed_print * 30 / 35)" }, + "speed_wall_0": { "value": "math.ceil(speed_wall * 20 / 30)" }, + "speed_wall_x": { "value": "speed_wall" }, + + "infill_pattern": {"value": "'zigzag'" }, + "infill_before_walls": {"value": false }, + + "adhesion_type": { "default_value": "skirt" }, + "material_bed_temperature": { "maximum_value": "150" }, + "material_bed_temperature_layer_0": { "maximum_value": "150" }, + + "machine_gcode_flavor":{"default_value": "RepRap (Marlin/Sprinter)"}, + "machine_start_gcode":{"default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F{speed_travel} ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E3 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F{speed_travel}\nM117 Printing...\nG5"}, + "machine_end_gcode":{"default_value": "M104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors\nM107\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle\nto release some of the pressure\nG1 Z+0.5 E-5 ;X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\nG28 X0 ;Y0 ;move X/Y to min endstops\nso the head is out of the way\nG1 Y180 F2000\nM84 ;steppers off\nG90\nM300 P300 S4000"} + } +} diff --git a/resources/definitions/anycubic_i3_mega.def.json b/resources/definitions/anycubic_i3_mega.def.json index a6c1567dc4..8a96d98023 100644 --- a/resources/definitions/anycubic_i3_mega.def.json +++ b/resources/definitions/anycubic_i3_mega.def.json @@ -8,9 +8,8 @@ "author": "TheTobby", "manufacturer": "Anycubic", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "platform": "anycubic_i3_mega_platform.stl", - "has_materials": false, + "has_materials": true, "has_machine_quality": true, "preferred_quality_type": "normal", "machine_extruder_trains": diff --git a/resources/definitions/bibo2_dual.def.json b/resources/definitions/bibo2_dual.def.json new file mode 100644 index 0000000000..1ae16a49b1 --- /dev/null +++ b/resources/definitions/bibo2_dual.def.json @@ -0,0 +1,92 @@ +{ + "id": "BIBO2 dual", + "version": 2, + "name": "BIBO2 dual", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "na", + "manufacturer": "BIBO", + "category": "Other", + "file_formats": "text/x-gcode", + "has_materials": true, + "machine_extruder_trains": { + "0": "bibo2_dual_extruder_0", + "1": "bibo2_dual_extruder_1" + }, + "first_start_actions": [ + "MachineSettingsAction" + ] + }, + "overrides": { + "machine_name": { + "default_value": "BIBO2 dual" + }, + "machine_width": { + "default_value": 214 + }, + "machine_height": { + "default_value": 160 + }, + "machine_depth": { + "default_value": 186 + }, + "machine_center_is_zero": { + "default_value": true + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_nozzle_heat_up_speed": { + "default_value": 2 + }, + "machine_nozzle_cool_down_speed": { + "default_value": 2 + }, + "machine_head_with_fans_polygon": { + "default_value": [ + [ + -68.18, + 64.63 + ], + [ + -68.18, + -47.38 + ], + [ + 35.18, + 64.63 + ], + [ + 35.18, + -47.38 + ] + ] + }, + "gantry_height": { + "default_value": 12 + }, + "machine_use_extruder_offset_to_offset_coords": { + "default_value": true + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "machine_start_gcode": { + "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z2.0 F400 ;move the platform down 15mm\nT0\nG92 E0\nG28\nG1 Y0 F1200 E0\nG92 E0\nM117 BIBO Printing..." + }, + "machine_end_gcode": { + "default_value": ";End GCode\nM104 T0 S0 ;extruder heater off\nM104 T1 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91\nG1 Z1 F100 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-2 X-20 Y-20 F300 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" + }, + "machine_extruder_count": { + "default_value": 2 + }, + "prime_tower_position_x": { + "default_value": 50 + }, + "prime_tower_position_y": { + "default_value": 50 + } + } +} + diff --git a/resources/definitions/bq_hephestos.def.json b/resources/definitions/bq_hephestos.def.json index 8dc67a8cad..be024cd6fa 100644 --- a/resources/definitions/bq_hephestos.def.json +++ b/resources/definitions/bq_hephestos.def.json @@ -12,7 +12,8 @@ "machine_extruder_trains": { "0": "bq_hephestos_extruder_0" - } + }, + "firmware_file": "MarlinHephestos2.hex" }, "overrides": { diff --git a/resources/definitions/bq_hephestos_2.def.json b/resources/definitions/bq_hephestos_2.def.json index ca0e66ada2..90a86433fb 100644 --- a/resources/definitions/bq_hephestos_2.def.json +++ b/resources/definitions/bq_hephestos_2.def.json @@ -17,8 +17,8 @@ "overrides": { "machine_name": { "default_value": "BQ Hephestos 2" }, - "machine_start_gcode": { "default_value": "; -- START GCODE --\nM104 S{material_print_temperature} ; Heat up extruder while leveling\nM800 ; Custom GCODE to fire start print procedure\nM109 S{material_print_temperature} ; Makes sure the temperature is correct before printing\n; -- end of START GCODE --" }, - "machine_end_gcode": { "default_value": "; -- END GCODE --\nM801 ; Custom GCODE to fire end print procedure\n; -- end of END GCODE --" }, + "machine_start_gcode": { "default_value": "; -- START GCODE --\nM104 S{material_print_temperature}\nG28 ; Zero-ing position\nG29 ; Auto bed-leveling\nG0 X4 Y297 Z15 F4000 ; Fast move to BQ's start position\nG90 ; Set to Absolute Positioning\nG92 E0 ; Reset extruder 0\nG1 F1800 ; Set default feedrate\nM109 S{material_print_temperature} ; Makes sure the temperature is correct before printing\n; -- end of START GCODE --" }, + "machine_end_gcode": { "default_value": "; -- END GCODE --\nM801 ; Marlin G-CODE to fire end print procedure\n; -- end of END GCODE --" }, "machine_width": { "default_value": 210 }, "machine_depth": { "default_value": 297 }, "machine_height": { "default_value": 220 }, diff --git a/resources/definitions/bq_witbox.def.json b/resources/definitions/bq_witbox.def.json index 0ae1c5e339..b96da6179c 100644 --- a/resources/definitions/bq_witbox.def.json +++ b/resources/definitions/bq_witbox.def.json @@ -12,7 +12,8 @@ "machine_extruder_trains": { "0": "bq_witbox_extruder_0" - } + }, + "firmware_file": "MarlinWitbox.hex" }, "overrides": { diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index 57c16241a0..9c7a95cceb 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -11,7 +11,6 @@ "has_machine_quality": true, "has_materials": true, "has_machine_materials": true, - "has_variant_materials": true, "has_variants": true, "variants_name": "Tool", diff --git a/resources/definitions/cocoon_create_modelmaker.def.json b/resources/definitions/cocoon_create_modelmaker.def.json new file mode 100644 index 0000000000..22aa75d09e --- /dev/null +++ b/resources/definitions/cocoon_create_modelmaker.def.json @@ -0,0 +1,96 @@ +{ + "name": "Cocoon Create ModelMaker", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Samuel Pinches", + "manufacturer": "Cocoon Create", + "file_formats": "text/x-gcode", + "preferred_quality_type": "fine", + "machine_extruder_trains": + { + "0": "cocoon_create_modelmaker_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "Cocoon Create ModelMaker" + }, + "machine_start_gcode": { + "default_value": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 ;home all axis\nG92 E0 ;zero the extruded length\nG1 Z1 F1000 ;move up slightly\nG1 X60.0 Z0 E9.0 F1000.0;intro line\nG1 X100.0 E21.5 F1000.0 ;continue line\nG92 E0 ;zero the extruded length again\n; -- end of START GCODE --" + }, + "machine_end_gcode": { + "default_value": "; -- END GCODE --\nM104 S0 ;turn off nozzle heater\nG91 ;set to relative positioning\nG1 E-10 F300 ;retract the filament slightly\nG90 ;set to absolute positioning\nG28 X0 Y0 ;move to the XY-axis origin (Home)\nM84 ;turn off stepper motors\n; -- end of END GCODE --" + }, + "machine_width": { + "default_value": 120 + }, + "machine_height": { + "default_value": 100 + }, + "machine_depth": { + "default_value": 135 + }, + "machine_heated_bed": { + "default_value": false + }, + "machine_center_is_zero": { + "default_value": false + }, + "gantry_height": { + "default_value": 10 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "material_diameter": { + "default_value": 1.75 + }, + "material_print_temperature": { + "default_value": 220 + }, + "layer_height": { + "default_value": 0.10 + }, + "layer_height_0": { + "default_value": 0.2 + }, + "wall_thickness": { + "default_value": 1.2 + }, + "top_bottom_thickness": { + "default_value": 0.6 + }, + "speed_print": { + "default_value": 40 + }, + "speed_infill": { + "default_value": 40 + }, + "speed_wall": { + "default_value": 35 + }, + "speed_topbottom": { + "default_value": 35 + }, + "speed_travel": { + "default_value": 70 + }, + "speed_layer_0": { + "default_value": 20 + }, + "support_enable": { + "default_value": true + }, + "retraction_enable": { + "default_value": true + }, + "retraction_amount": { + "default_value": 7 + }, + "retraction_speed": { + "default_value": 40 + } + } +} diff --git a/resources/definitions/creality_cr-x.def.json b/resources/definitions/creality_cr-x.def.json new file mode 100644 index 0000000000..94ac20cbb5 --- /dev/null +++ b/resources/definitions/creality_cr-x.def.json @@ -0,0 +1,51 @@ +{ + "id": "CR-X", + "version": 2, + "name": "Creality CR-X", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "SRC", + "manufacturer": "Creality3D", + "category": "Other", + "file_formats": "text/x-gcode", + "platform": "cr-x.stl", + "has_variants": false, + "has_machine_quality": false, + "preferred_quality_type": "draft", + "machine_extruder_trains": { + "0": "cr-x_extruder_0", + "1": "cr-x_extruder_1" + } + }, + + "overrides": { + "machine_name": { "default_value": "Creality CR-X" }, + "machine_extruder_count": { "default_value": 2 }, + "machine_heated_bed": { "default_value": true }, + "machine_width": { "default_value": 300 }, + "machine_depth": { "default_value": 300 }, + "machine_height": { "default_value": 400 }, + "machine_center_is_zero": { "default_value": false }, + "retraction_amount": { "default_value": 3 }, + "retraction_speed": { "default_value": 70}, + "adhesion_type": { "default_value": "skirt" }, + "gantry_height": { "default_value": 30 }, + "speed_print": { "default_value": 60 }, + "speed_travel": { "default_value": 120 }, + "machine_max_acceleration_x": { "default_value": 500 }, + "machine_max_acceleration_y": { "default_value": 500 }, + "machine_max_acceleration_z": { "default_value": 100 }, + "machine_max_acceleration_e": { "default_value": 5000 }, + "machine_max_jerk_xy": { "default_value": 5.0 }, + "machine_max_jerk_z": { "default_value": 0.4 }, + "machine_max_jerk_e": { "default_value": 5.0 }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, + "machine_start_gcode": { "default_value": "G21 ;metric values\nG28 ;home all\nG90 ;absolute positioning\nM107 ;start with the fan off\nG1 F2400 Z15.0 ;raise the nozzle 15mm\nM109 S{material_print_temperature} ;Set Extruder Temperature and Wait\nM190 S{material_bed_temperature}; Wait for bed temperature to reach target temp\nT0 ;Switch to Extruder 1\nG1 F3000 X5 Y10 Z0.2 ;move to prime start position\nG92 E0 ;reset extrusion distance\nG1 F600 X160 E15 ;prime nozzle in a line\nG1 F5000 X180 ;quick wipe\nG92 E0 ;reset extrusion distance" }, + "machine_end_gcode": { "default_value": "M104 S0 ;hotend off\nM140 S0 ;bed off\nG92 E0\nG1 F2000 E-100 ;retract filament 100mm\nG92 E0\nG1 F3000 X0 Y270 ;move bed for easy part removal\nM84 ;disable steppers" }, + "material_print_temperature": { "default_value": 200 }, + "wall_thickness": { "default_value": 1 }, + "top_bottom_thickness": { "default_value": 1 }, + "bottom_thickness": { "default_value": 1 } + } +} diff --git a/resources/definitions/creality_cr10.def.json b/resources/definitions/creality_cr10.def.json index b727834db3..fb63867163 100644 --- a/resources/definitions/creality_cr10.def.json +++ b/resources/definitions/creality_cr10.def.json @@ -37,7 +37,7 @@ "top_bottom_thickness": { "default_value": 0.6 }, - "top_bottom_pattern": { + "top_bottom_pattern_0": { "default_value": "concentric" }, "infill_pattern": { diff --git a/resources/definitions/creality_ender3.def.json b/resources/definitions/creality_ender3.def.json new file mode 100755 index 0000000000..08d8e92b72 --- /dev/null +++ b/resources/definitions/creality_ender3.def.json @@ -0,0 +1,96 @@ +{ + "name": "Creality Ender-3", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Sacha Telgenhof", + "manufacturer": "Creality3D", + "file_formats": "text/x-gcode", + "platform": "creality_ender3_platform.stl", + "preferred_quality_type": "draft", + "machine_extruder_trains": + { + "0": "creality_ender3_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "Creality Ender-3" + }, + "machine_width": { + "default_value": 235 + }, + "machine_height": { + "default_value": 250 + }, + "machine_depth": { + "default_value": 235 + }, + "machine_heated_bed": { + "default_value": true + }, + "gantry_height": { + "default_value": 30 + }, + "machine_head_polygon": { + "default_value": [ + [-30, 34], + [-30, -32], + [30, -32], + [30, 34] + ] + }, + "material_diameter": { + "default_value": 1.75 + }, + "acceleration_enabled": { + "default_value": true + }, + "acceleration_print": { + "default_value": 500 + }, + "acceleration_travel": { + "default_value": 500 + }, + "jerk_enabled": { + "default_value": true + }, + "jerk_travel": { + "default_value": 20 + }, + "layer_height": { + "default_value": 0.10 + }, + "layer_height_0": { + "default_value": 0.2 + }, + "adhesion_type": { + "default_value": "skirt" + }, + "top_bottom_thickness": { + "default_value": 0.6 + }, + "retraction_amount": { + "default_value": 5 + }, + "retraction_speed": { + "default_value": 40 + }, + "cool_min_layer_time": { + "default_value": 10 + }, + "skirt_line_count": { + "default_value": 4 + }, + "skirt_gap": { + "default_value": 5 + }, + "machine_start_gcode": { + "default_value": "; Ender 3 Custom Start G-code\nG28 ; Home all axes\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\n; End of custom start GCode" + }, + "machine_end_gcode": { + "default_value": "; Ender 3 Custom End G-code\nG4 ; Wait\nM220 S100 ; Reset Speed factor override percentage to default (100%)\nM221 S100 ; Reset Extrude factor override percentage to default (100%)\nG91 ; Set coordinates to relative\nG1 F1800 E-3 ; Retract filament 3 mm to prevent oozing\nG1 F3000 Z20 ; Move Z Axis up 20 mm to allow filament ooze freely\nG90 ; Set coordinates to absolute\nG1 X0 Y{machine_depth} F1000 ; Move Heat Bed to the front for easy print removal\nM84 ; Disable stepper motors\n; End of custom end GCode" + } + } +} diff --git a/resources/definitions/creatable_d3.def.json b/resources/definitions/creatable_d3.def.json new file mode 100644 index 0000000000..3fb1205ead --- /dev/null +++ b/resources/definitions/creatable_d3.def.json @@ -0,0 +1,45 @@ +{ + "version": 2, + "name": "Creatable D3", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Creatable Labs", + "manufacturer": "Ateam Ventures Co. Ltd.", + "file_formats": "text/x-gcode", + "icon": "icon_ultimaker.png", + "platform": "rostock_platform.stl", + "machine_extruder_trains": + { + "0": "creatable_d3_extruder_0" + } + }, + + "overrides": { + "machine_name": { "default_value": "Creatable D3" }, + "machine_center_is_zero": { "default_value": true }, + "machine_gcode_flavor": { "default_value": "RepRap (RepRap)" }, + "machine_width": { "default_value": 250 }, + "machine_height": { "default_value": 200 }, + "machine_depth": { "default_value": 250 }, + "machine_heated_bed": { "default_value": true }, + "machine_shape": { "default_value": "elliptic" }, + "machine_max_feedrate_z": { "default_value": 300 }, + "gantry_height": {"default_value": 43}, + "layer_height": { "default_value": 0.1 }, + "relative_extrusion": { "default_value": false }, + "retraction_combing": { "default_value": "off" }, + "retraction_hop_enabled": { "default_value": true }, + "retraction_hop_only_when_collides": { "default_value": false }, + "retraction_retract_speed": { "default_value": 100 }, + "retraction_speed": { "default_value": 100 }, + "retraction_amount": { "default_value": 4.5 }, + "retraction_prime_speed": { "default_value": 45 }, + "machine_start_gcode": { + "default_value": "G21\nG90\nM82\nM106 S255\nG28\nG92 E0\nG1 Z100 F5000\nM190 S50\nM109 S200\nG1 X-135\nG1 Z0.3\nG92 E-32\nG1 E0 F1000\nG1 E50 F200\nG1 F1000\nG1 X-125\nG92 E0" + }, + "machine_end_gcode": { + "default_value": "M400\nG28\nM104 S0\nM140 S0\nM107\nG92 E0\nG1 E-32 F300\nM84\nG90" + } + } +} diff --git a/resources/definitions/cubicon_3dp_110f.def.json b/resources/definitions/cubicon_3dp_110f.def.json new file mode 100644 index 0000000000..168b57cd66 --- /dev/null +++ b/resources/definitions/cubicon_3dp_110f.def.json @@ -0,0 +1,41 @@ +{ + "id": "3DP-110F", + "version": 2, + "name": "Cubicon Single", + "inherits": "cubicon_common", + "metadata": { + "author": "Cubicon R&D Center", + "manufacturer": "Cubicon", + "visible": true, + "file_formats": "text/x-gcode", + "supports_usb_connection": false, + "machine_extruder_trains": { + "0": "cubicon_3dp_110f_extruder_0" + }, + "platform_offset": [ + 0, + -32.05, + -20 + ] + }, + "overrides": { + "machine_name": { + "default_value": "Cubicon Single" + }, + "machine_start_gcode": { + "default_value": "M911 3DP-110F\nM201 X400 Y400\nM202 X400 Y400\nG28 ; Home\nG1 Z15.0 F6000 ;move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0" + }, + "machine_width": { + "default_value": 240 + }, + "machine_depth": { + "default_value": 190 + }, + "machine_height": { + "default_value": 200 + }, + "material_bed_temp_wait": { + "default_value": true + } + } +} \ No newline at end of file diff --git a/resources/definitions/cubicon_3dp_210f.def.json b/resources/definitions/cubicon_3dp_210f.def.json new file mode 100644 index 0000000000..cc99899f92 --- /dev/null +++ b/resources/definitions/cubicon_3dp_210f.def.json @@ -0,0 +1,41 @@ +{ + "id": "3DP-210F", + "version": 2, + "name": "Cubicon Style", + "inherits": "cubicon_common", + "metadata": { + "author": "Cubicon R&D Center", + "manufacturer": "Cubicon", + "visible": true, + "file_formats": "text/x-gcode", + "supports_usb_connection": false, + "machine_extruder_trains": { + "0": "cubicon_3dp_210f_extruder_0" + }, + "platform_offset": [ + 0, + -18.8, + 0 + ] + }, + "overrides": { + "machine_name": { + "default_value": "Cubicon Style" + }, + "machine_start_gcode": { + "default_value": "M911 3DP-210F\nM201 X400 Y400\nM202 X400 Y400\nG28 ; Home\nG1 Z15.0 F6000 ;move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0" + }, + "machine_width": { + "default_value": 150 + }, + "machine_depth": { + "default_value": 150 + }, + "machine_height": { + "default_value": 150 + }, + "material_bed_temp_wait":{ + "default_value": false + } + } +} \ No newline at end of file diff --git a/resources/definitions/cubicon_3dp_310f.def.json b/resources/definitions/cubicon_3dp_310f.def.json new file mode 100644 index 0000000000..90d0e3f25c --- /dev/null +++ b/resources/definitions/cubicon_3dp_310f.def.json @@ -0,0 +1,41 @@ +{ + "id": "3DP-310F", + "version": 2, + "name": "Cubicon Single Plus", + "inherits": "cubicon_common", + "metadata": { + "author": "Cubicon R&D Center", + "manufacturer": "Cubicon", + "visible": true, + "file_formats": "text/x-gcode", + "supports_usb_connection": false, + "machine_extruder_trains": { + "0": "cubicon_3dp_310f_extruder_0" + }, + "platform_offset": [ + 0, + -32.05, + -20 + ] + }, + "overrides": { + "machine_name": { + "default_value": "Cubicon Single Plus" + }, + "machine_start_gcode": { + "default_value": "M911 3DP-310F\nM201 X400 Y400\nM202 X400 Y400\nG28 ; Home\nG1 Z15.0 F6000 ;move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0" + }, + "machine_width": { + "default_value": 240 + }, + "machine_depth": { + "default_value": 190 + }, + "machine_height": { + "default_value": 200 + }, + "material_bed_temp_wait": { + "default_value": true + } + } +} \ No newline at end of file diff --git a/resources/definitions/cubicon_common.def.json b/resources/definitions/cubicon_common.def.json new file mode 100644 index 0000000000..ae085c7552 --- /dev/null +++ b/resources/definitions/cubicon_common.def.json @@ -0,0 +1,99 @@ +{ + "version": 2, + "name": "Cubicon Common", + "inherits": "fdmprinter", + "metadata": { + "author": "Cubicon R&D Center", + "manufacturer": "Cubicon", + "visible": false + }, + "overrides": { + "machine_start_gcode": { + "default_value": "M201 X400 Y400\nM202 X400 Y400\nG28 ; Home\nG1 Z15.0 F6000 ;move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0" + }, + "machine_end_gcode": { + "default_value": "M104 S0\nM140 S0\nM904\nM117 Print completed! \nM84" + }, + "machine_gcode_flavor": { + "default_value": "Repetier" + }, + "machine_heated_bed": { + "default_value": true + }, + "travel_compensate_overlapping_walls_enabled": { + "default_value": false + }, + "travel_compensate_overlapping_walls_0_enabled": { + "default_value": false + }, + "travel_compensate_overlapping_walls_x_enabled": { + "default_value": false + }, + "layer_height": { + "default_value": 0.2 + }, + "layer_height_0": { + "default_value": 0.2 + }, + "infill_line_width": { + "default_value": 0.6 + }, + "adhesion_type": { + "default_value": "raft" + }, + "roofing_pattern": { "default_value": "lines" }, + "top_bottom_pattern": { "default_value": "lines" }, + "top_bottom_pattern_0": { + "default_value": "zigzag" + }, + "fill_perimeter_gaps": { "default_value": "everywhere" }, + "infill_pattern": { + "default_value": "zigzag" + }, + "infill_sparse_density": { "default_value": 20 }, + "infill_overlap": { + "default_value": 15 + }, + "infill_before_walls": { "default_value": false }, + "infill_sparse_thickness": { "default_value": 0.2 }, + "top_bottom_thickness": { + "default_value": 1.0 + }, + "top_thickness": { + "default_value": 1.0 + }, + "bottom_thickness": { + "default_value": 0.6, + "value": "top_bottom_thickness * 0.6" + }, + "roofing_layer_count": { + "default_value": 1 + }, + "skin_preshrink": { "default_value": true }, + "material_flow_layer_0": { "default_value": 100 }, + "top_skin_preshrink": { "default_value": 1.2 }, + "bottom_skin_preshrink": { "default_value": 1.2 }, + "max_skin_angle_for_expansion": { "default_value": 90 }, + "min_skin_width_for_expansion": { "default_value": 2.7475 }, + "skin_angles": { "default_value": "[135,45]" }, + "roofing_angles": { "default_value": "[135,45]" }, + "coasting_volume": { "default_value": 0.032 }, + "wall_thickness": { "default_value": 1.2 }, + "wall_line_count": { "default_value": 3 }, + "speed_wall_0": { "default_value": 25 }, + "skin_overlap": { "default_value": 5 }, + "cool_min_layer_time_fan_speed_max": { "default_value": 15 }, + "cool_min_layer_time": { "default_value": 15 }, + "support_roof_pattern": { "default_value": "zigzag" }, + "support_bottom_pattern": { "default_value": "zigzag" }, + "support_interface_pattern": { "default_value": "zigzag" }, + "support_pattern": { "default_value": "zigzag" }, + "retraction_amount": { "default_value": 1.5 }, + "top_layers": { + "default_value": 5 + }, + "bottom_layers": { + "default_value": 3 + } + } +} \ No newline at end of file diff --git a/resources/definitions/dagoma_neva_magis.def.json b/resources/definitions/dagoma_magis.def.json similarity index 92% rename from resources/definitions/dagoma_neva_magis.def.json rename to resources/definitions/dagoma_magis.def.json index 0b7b50cb5f..75e6e449cd 100644 --- a/resources/definitions/dagoma_neva_magis.def.json +++ b/resources/definitions/dagoma_magis.def.json @@ -1,5 +1,5 @@ { - "name": "Dagoma NEVA Magis", + "name": "Dagoma Magis", "version": 2, "inherits": "fdmprinter", "metadata": { @@ -13,7 +13,7 @@ "has_materials": true, "machine_extruder_trains": { - "0": "dagoma_neva_magis_extruder_0" + "0": "dagoma_magis_extruder_0" } }, "overrides": { @@ -43,9 +43,6 @@ "machine_shape": { "default_value": "elliptic" }, - "machine_gcode_flavor": { - "default_value": "RepRap" - }, "machine_start_gcode": { "default_value": ";Gcode by Cura\nG90\nG28\nM107\nM109 R100\nG29\nM109 S{material_print_temperature_layer_0} U-55 X55 V-85 Y-85 W0.26 Z0.26\nM82\nG92 E0\nG1 F200 E6\nG92 E0\nG1 F200 E-3.5\nG0 Z0.15\nG0 X10\nG0 Z3\nG1 F6000\n" }, diff --git a/resources/definitions/dagoma_neva.def.json b/resources/definitions/dagoma_neva.def.json index cdd5725765..67c8795678 100644 --- a/resources/definitions/dagoma_neva.def.json +++ b/resources/definitions/dagoma_neva.def.json @@ -43,9 +43,6 @@ "machine_shape": { "default_value": "elliptic" }, - "machine_gcode_flavor": { - "default_value": "RepRap" - }, "machine_start_gcode": { "default_value": ";Gcode by Cura\nG90\nG28\nM107\nM109 R100\nG29\nM109 S{material_print_temperature_layer_0} U-55 X55 V-85 Y-85 W0.26 Z0.26\nM82\nG92 E0\nG1 F200 E6\nG92 E0\nG1 F200 E-3.5\nG0 Z0.15\nG0 X10\nG0 Z3\nG1 F6000\n" }, diff --git a/resources/definitions/delta_go.def.json b/resources/definitions/delta_go.def.json index 968bf281a5..cd1fb180c2 100644 --- a/resources/definitions/delta_go.def.json +++ b/resources/definitions/delta_go.def.json @@ -8,7 +8,6 @@ "manufacturer": "Deltaprintr", "file_formats": "text/x-gcode", "platform_offset": [0, 0, 0], - "platform": "", "machine_extruder_trains": { "0": "delta_go_extruder_0" diff --git a/resources/definitions/deltacomb.def.json b/resources/definitions/deltacomb.def.json old mode 100644 new mode 100755 index a4b2d47a7b..8fec0f8950 --- a/resources/definitions/deltacomb.def.json +++ b/resources/definitions/deltacomb.def.json @@ -8,7 +8,6 @@ "manufacturer": "Deltacomb 3D", "category": "Other", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "platform": "deltacomb.stl", "has_machine_quality": true, "machine_extruder_trains": @@ -33,6 +32,7 @@ "material_final_print_temperature": { "value": "material_print_temperature - 5" }, "material_initial_print_temperature": { "value": "material_print_temperature" }, "material_print_temperature_layer_0": { "value": "material_print_temperature + 5" }, + "material_diameter": { "default_value": 1.75 }, "travel_avoid_distance": { "default_value": 1, "value": "1" }, "speed_print" : { "default_value": 70 }, "speed_travel": { "value": "150.0" }, @@ -55,6 +55,7 @@ "support_use_towers" : { "default_value": false }, "jerk_wall_0" : { "value": "30" }, "jerk_travel" : { "default_value": 20 }, - "acceleration_travel" : { "value": 10000 } + "acceleration_travel" : { "value": 10000 }, + "machine_max_feedrate_z" : { "default_value": 150 } } } diff --git a/resources/definitions/fabtotum.def.json b/resources/definitions/fabtotum.def.json index 1908e42913..10c8f68844 100644 --- a/resources/definitions/fabtotum.def.json +++ b/resources/definitions/fabtotum.def.json @@ -9,7 +9,6 @@ "category": "Other", "file_formats": "text/x-gcode", "platform": "fabtotum_platform.stl", - "icon": "fabtotum_platform.png", "has_machine_quality": true, "has_variants": true, "variants_name": "Head", diff --git a/resources/definitions/fdmextruder.def.json b/resources/definitions/fdmextruder.def.json index 3f84ed69a4..0af1e68075 100644 --- a/resources/definitions/fdmextruder.def.json +++ b/resources/definitions/fdmextruder.def.json @@ -78,7 +78,7 @@ "machine_extruder_start_code": { "label": "Extruder Start G-Code", - "description": "Start g-code to execute whenever turning the extruder on.", + "description": "Start g-code to execute when switching to this extruder.", "type": "str", "default_value": "", "settable_per_mesh": false, @@ -124,7 +124,7 @@ "machine_extruder_end_code": { "label": "Extruder End G-Code", - "description": "End g-code to execute whenever turning the extruder off.", + "description": "End g-code to execute when switching away from this extruder.", "type": "str", "default_value": "", "settable_per_mesh": false, @@ -178,7 +178,19 @@ "maximum_value": "machine_height", "settable_per_mesh": false, "settable_per_extruder": true - } + }, + "machine_extruder_cooling_fan_number": + { + "label": "Extruder Print Cooling Fan", + "description": "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.", + "type": "int", + "default_value": 0, + "minimum_value": "0", + "settable_per_mesh": false, + "settable_per_extruder": true, + "settable_per_meshgroup": false, + "settable_globally": false + } } }, "platform_adhesion": diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 3eb7cb1c32..f11c2a3588 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -77,6 +77,20 @@ "type": "str", "enabled": false }, + "material_diameter": + { + "label": "Diameter", + "description": "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament.", + "unit": "mm", + "type": "float", + "default_value": 2.85, + "minimum_value": "0.0001", + "minimum_value_warning": "0.4", + "maximum_value_warning": "3.5", + "enabled": "machine_gcode_flavor != \"UltiGCode\"", + "settable_per_mesh": false, + "settable_per_extruder": true + }, "material_bed_temp_wait": { "label": "Wait for Build Plate Heatup", @@ -216,6 +230,7 @@ "label": "Number of Extruders that are enabled", "description": "Number of extruder trains that are enabled; automatically set in software", "value": "machine_extruder_count", + "default_value": 1, "minimum_value": "1", "maximum_value": "16", "type": "int", @@ -831,6 +846,7 @@ "default_value": 0.4, "type": "float", "value": "line_width", + "enabled": "top_layers > 0 or bottom_layers > 0", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true }, @@ -860,7 +876,7 @@ "default_value": 0.4, "type": "float", "value": "line_width", - "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim'", + "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -1177,6 +1193,7 @@ "zigzag": "Zig Zag" }, "default_value": "lines", + "enabled": "top_layers > 0 or bottom_layers > 0", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true }, @@ -1192,6 +1209,7 @@ "zigzag": "Zig Zag" }, "default_value": "lines", + "enabled": "top_layers > 0 or bottom_layers > 0", "value": "top_bottom_pattern", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true @@ -1199,11 +1217,11 @@ "connect_skin_polygons": { "label": "Connect Top/Bottom Polygons", - "description": "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 happend midway over infill this feature can reduce the top surface quality.", + "description": "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.", "type": "bool", "default_value": false, - "enabled": "top_bottom_pattern == 'concentric'", - "limit_to_extruder": "infill_extruder_nr", + "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern == 'concentric'", + "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true }, "skin_angles": @@ -1212,7 +1230,7 @@ "description": "A list of integer line directions to use when the top/bottom layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees).", "type": "[int]", "default_value": "[ ]", - "enabled": "top_bottom_pattern != 'concentric'", + "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true }, @@ -1297,8 +1315,8 @@ "default_value": 0, "type": "float", "enabled": "travel_compensate_overlapping_walls_0_enabled or travel_compensate_overlapping_walls_x_enabled", - "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_mesh": true, + "settable_per_extruder": false }, "wall_min_flow_retract": { @@ -1307,8 +1325,8 @@ "type": "bool", "default_value": false, "enabled": "(travel_compensate_overlapping_walls_0_enabled or travel_compensate_overlapping_walls_x_enabled) and wall_min_flow > 0", - "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_mesh": true, + "settable_per_extruder": false }, "fill_perimeter_gaps": { @@ -1438,7 +1456,8 @@ "label": "Ignore Small Z Gaps", "description": "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting.", "type": "bool", - "default_value": true, + "default_value": false, + "enabled": "top_layers > 0 or bottom_layers > 0", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true }, @@ -1450,6 +1469,7 @@ "minimum_value": "0", "maximum_value_warning": "10", "type": "int", + "enabled": "top_layers > 0 or bottom_layers > 0", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true }, @@ -1624,7 +1644,7 @@ "infill_pattern": { "label": "Infill Pattern", - "description": "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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction.", + "description": "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.", "type": "enum", "options": { @@ -1639,7 +1659,8 @@ "concentric": "Concentric", "zigzag": "Zig Zag", "cross": "Cross", - "cross_3d": "Cross 3D" + "cross_3d": "Cross 3D", + "gyroid": "Gyroid" }, "default_value": "grid", "enabled": "infill_sparse_density > 0", @@ -1654,7 +1675,7 @@ "type": "bool", "default_value": false, "value": "infill_pattern == 'cross' or infill_pattern == 'cross_3d'", - "enabled": "infill_pattern == 'lines' or infill_pattern == 'grid' or infill_pattern == 'triangles' or infill_pattern == 'trihexagon' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'cross' or infill_pattern == 'cross_3d'", + "enabled": "infill_pattern == 'lines' or infill_pattern == 'grid' or infill_pattern == 'triangles' or infill_pattern == 'trihexagon' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_pattern == 'gyroid'", "limit_to_extruder": "infill_extruder_nr", "settable_per_mesh": true }, @@ -1664,8 +1685,8 @@ "description": "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time.", "type": "bool", "default_value": true, - "value": "infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_multiplier % 2 == 0", - "enabled": "infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_multiplier % 2 == 0", + "value": "(infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_multiplier % 2 == 0) and infill_wall_line_count > 0", + "enabled": "infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_pattern == 'concentric' or infill_multiplier % 2 == 0 or infill_wall_line_count > 1", "limit_to_extruder": "infill_extruder_nr", "settable_per_mesh": true }, @@ -1716,7 +1737,7 @@ "infill_wall_line_count": { "label": "Extra Infill Wall Count", - "description": "Add extra wals around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\nThis feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right.", + "description": "Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\nThis feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right.", "default_value": 0, "type": "int", "minimum_value": "0", @@ -1771,14 +1792,14 @@ "skin_overlap": { "label": "Skin Overlap Percentage", - "description": "The amount of overlap between the skin and the walls as a percentage of the skin line width. A slight overlap allows the walls to connect firmly to the skin. This is a percentage of the average line widths of the skin lines and the innermost wall.", + "description": "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall.", "unit": "%", "type": "float", "default_value": 5, "minimum_value_warning": "-50", "maximum_value_warning": "100", "value": "5 if top_bottom_pattern != 'concentric' else 0", - "enabled": "top_bottom_pattern != 'concentric'", + "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true, "children": @@ -1786,14 +1807,14 @@ "skin_overlap_mm": { "label": "Skin Overlap", - "description": "The amount of overlap between the skin and the walls. A slight overlap allows the walls to connect firmly to the skin.", + "description": "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall.", "unit": "mm", "type": "float", "default_value": 0.02, "minimum_value_warning": "-0.5 * machine_nozzle_size", "maximum_value_warning": "machine_nozzle_size", "value": "0.5 * (skin_line_width + (wall_line_width_x if wall_line_count > 1 else wall_line_width_0)) * skin_overlap / 100 if top_bottom_pattern != 'concentric' else 0", - "enabled": "top_bottom_pattern != 'concentric'", + "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'", "settable_per_mesh": true } } @@ -1819,9 +1840,9 @@ "unit": "mm", "type": "float", "default_value": 0.1, - "minimum_value": "resolveOrValue('layer_height')", + "minimum_value": "resolveOrValue('layer_height') if infill_line_distance > 0 else -999999", "maximum_value_warning": "0.75 * machine_nozzle_size", - "maximum_value": "resolveOrValue('layer_height') * (1.45 if spaghetti_infill_enabled else 8)", + "maximum_value": "resolveOrValue('layer_height') * (1.45 if spaghetti_infill_enabled else 8) if infill_line_distance > 0 else 999999", "value": "resolveOrValue('layer_height')", "enabled": "infill_sparse_density > 0 and not spaghetti_infill_enabled", "limit_to_extruder": "infill_extruder_nr", @@ -1906,6 +1927,7 @@ "default_value": 0, "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x", "minimum_value": "0", + "enabled": "top_layers > 0 or bottom_layers > 0", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true, "children": @@ -1919,6 +1941,7 @@ "default_value": 0, "value": "skin_preshrink", "minimum_value": "0", + "enabled": "top_layers > 0 or bottom_layers > 0", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true }, @@ -1931,6 +1954,7 @@ "default_value": 0, "value": "skin_preshrink", "minimum_value": "0", + "enabled": "top_layers > 0 or bottom_layers > 0", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true } @@ -1946,6 +1970,7 @@ "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x", "minimum_value": "-skin_preshrink", "limit_to_extruder": "top_bottom_extruder_nr", + "enabled": "top_layers > 0 or bottom_layers > 0", "settable_per_mesh": true, "children": { @@ -1958,6 +1983,7 @@ "default_value": 2.8, "value": "expand_skins_expand_distance", "minimum_value": "-top_skin_preshrink", + "enabled": "top_layers > 0 or bottom_layers > 0", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true }, @@ -1970,6 +1996,7 @@ "default_value": 2.8, "value": "expand_skins_expand_distance", "minimum_value": "-bottom_skin_preshrink", + "enabled": "top_layers > 0 or bottom_layers > 0", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true } @@ -1985,7 +2012,7 @@ "minimum_value_warning": "2", "maximum_value": "90", "default_value": 90, - "enabled": "top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0", + "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0)", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true, "children": @@ -1999,7 +2026,7 @@ "default_value": 2.24, "value": "top_layers * layer_height / math.tan(math.radians(max_skin_angle_for_expansion))", "minimum_value": "0", - "enabled": "top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0", + "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0)", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true } @@ -2379,7 +2406,7 @@ "switch_extruder_retraction_amount": { "label": "Nozzle Switch Retraction Distance", - "description": "The amount of retraction: Set at 0 for no retraction at all. This should generally be the same as the length of the heat zone.", + "description": "The amount of retraction when switching extruders. Set to 0 for no retraction at all. This should generally be the same as the length of the heat zone.", "type": "float", "unit": "mm", "enabled": "retraction_enable", @@ -2549,6 +2576,7 @@ "default_value": 30, "value": "speed_print / 2", "limit_to_extruder": "top_bottom_extruder_nr", + "enabled": "top_layers > 0 or bottom_layers > 0", "settable_per_mesh": true }, "speed_support": @@ -2873,6 +2901,7 @@ "default_value": 3000, "value": "acceleration_topbottom", "enabled": "resolveOrValue('acceleration_enabled') and roofing_layer_count > 0 and top_layers > 0", + "enabled": "top_layers > 0 or bottom_layers > 0", "limit_to_extruder": "roofing_extruder_nr", "settable_per_mesh": true }, @@ -3173,7 +3202,7 @@ "maximum_value_warning": "50", "default_value": 20, "value": "jerk_print", - "enabled": "resolveOrValue('jerk_enabled')", + "enabled": "(top_layers > 0 or bottom_layers > 0) and resolveOrValue('jerk_enabled')", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true }, @@ -3356,7 +3385,7 @@ "retraction_combing": { "label": "Combing Mode", - "description": "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases.", + "description": "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas or to only comb within the infill.", "type": "enum", "options": { @@ -3366,7 +3395,7 @@ "infill": "Within Infill" }, "default_value": "all", - "resolve": "'noskin' if 'noskin' in extruderValues('retraction_combing') else ('all' if 'all' in extruderValues('retraction_combing') else 'off')", + "resolve": "'noskin' if 'noskin' in extruderValues('retraction_combing') else ('infill' if 'infill' in extruderValues('retraction_combing') else ('all' if 'all' in extruderValues('retraction_combing') else 'off'))", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -3782,7 +3811,8 @@ "triangles": "Triangles", "concentric": "Concentric", "zigzag": "Zig Zag", - "cross": "Cross" + "cross": "Cross", + "gyroid": "Gyroid" }, "default_value": "zigzag", "enabled": "support_enable or support_tree_enable", @@ -3802,7 +3832,8 @@ "value": "1 if (support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'concentric') else 0", "enabled": "support_enable", "limit_to_extruder": "support_infill_extruder_nr", - "settable_per_mesh": true + "settable_per_mesh": false, + "settable_per_extruder": true }, "zig_zaggify_support": { @@ -3810,8 +3841,8 @@ "description": "Connect the ends of the support lines together. Enabling this setting can make your support more sturdy and reduce underextrusion, but it will cost more material.", "type": "bool", "default_value": false, - "value": "support_pattern == 'cross'", - "enabled": "support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'cross'", + "value": "support_pattern == 'cross' or support_pattern == 'gyroid'", + "enabled": "support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'cross' or support_pattern == 'gyroid'", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3875,6 +3906,61 @@ } } }, + "support_infill_angle": + { + "label": "Support Infill Line Direction", + "description": "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane.", + "unit": "°", + "type": "float", + "minimum_value": "-180", + "maximum_value": "180", + "default_value": 0, + "enabled": "support_enable and support_pattern != 'concentric' and support_infill_rate > 0", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "support_brim_enable": + { + "label": "Enable Support Brim", + "description": "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.", + "type": "bool", + "default_value": false, + "enabled": "support_enable or support_tree_enable", + "limit_to_extruder": "support_infill_extruder_nr", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "support_brim_width": + { + "label": "Support Brim Width", + "description": "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.", + "type": "float", + "unit": "mm", + "default_value": 8.0, + "minimum_value": "0.0", + "maximum_value_warning": "50.0", + "enabled": "support_enable", + "settable_per_mesh": false, + "settable_per_extruder": true, + "limit_to_extruder": "support_infill_extruder_nr", + "children": + { + "support_brim_line_count": + { + "label": "Support Brim Line Count", + "description": "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.", + "type": "int", + "default_value": 20, + "minimum_value": "0", + "maximum_value_warning": "50 / skirt_brim_line_width", + "value": "math.ceil(support_brim_width / (skirt_brim_line_width * initial_layer_line_width_factor / 100.0))", + "enabled": "support_enable", + "settable_per_mesh": false, + "settable_per_extruder": true, + "limit_to_extruder": "support_infill_extruder_nr" + } + } + }, "support_z_distance": { "label": "Support Z Distance", @@ -4054,6 +4140,18 @@ "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false }, + "minimum_support_area": + { + "label": "Minimum Support Area", + "description": "Minimum area size for support polygons. Polygons which have an area smaller than this value will not be generated.", + "unit": "mm²", + "type": "float", + "default_value": 0.0, + "minimum_value": "0", + "enabled": "support_enable", + "limit_to_extruder": "support_infill_extruder_nr", + "settable_per_mesh": true + }, "support_interface_enable": { "label": "Enable Support Interface", @@ -4293,6 +4391,94 @@ } } }, + "minimum_interface_area": + { + "label": "Minimum Support Interface Area", + "description": "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated.", + "unit": "mm²", + "type": "float", + "default_value": 1.0, + "minimum_value": "0", + "minimum_value_warning": "minimum_support_area", + "limit_to_extruder": "support_interface_extruder_nr", + "enabled": "support_interface_enable and support_enable", + "settable_per_mesh": true, + "children": + { + "minimum_roof_area": + { + "label": "Minimum Support Roof Area", + "description": "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated.", + "unit": "mm²", + "type": "float", + "default_value": 1.0, + "value": "extruderValue(support_roof_extruder_nr, 'minimum_interface_area')", + "minimum_value": "0", + "minimum_value_warning": "minimum_support_area", + "limit_to_extruder": "support_roof_extruder_nr", + "enabled": "support_roof_enable and support_enable", + "settable_per_mesh": true + }, + "minimum_bottom_area": + { + "label": "Minimum Support Floor Area", + "description": "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated.", + "unit": "mm²", + "type": "float", + "default_value": 1.0, + "value": "extruderValue(support_bottom_extruder_nr, 'minimum_interface_area')", + "minimum_value": "0", + "minimum_value_warning": "minimum_support_area", + "limit_to_extruder": "support_bottom_extruder_nr", + "enabled": "support_bottom_enable and support_enable", + "settable_per_mesh": true + } + } + }, + "support_interface_offset": + { + "label": "Support Interface Horizontal Expansion", + "description": "Amount of offset applied to the support interface polygons.", + "unit": "mm", + "type": "float", + "default_value": 0.0, + "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')", + "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 Horizontal Expansion", + "description": "Amount of offset applied to the roofs of the support.", + "unit": "mm", + "type": "float", + "default_value": 0.0, + "value": "extruderValue(support_roof_extruder_nr, 'support_interface_offset')", + "maximum_value": "extruderValue(support_extruder_nr, 'support_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 Horizontal Expansion", + "description": "Amount of offset applied to the floors of the support.", + "unit": "mm", + "type": "float", + "default_value": 0.0, + "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_offset')", + "maximum_value": "extruderValue(support_extruder_nr, 'support_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", @@ -4449,7 +4635,7 @@ "type": "extruder", "default_value": "0", "value": "defaultExtruderPosition()", - "enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') != 'none'", + "enabled": "extruders_enabled_count > 1 and (resolveOrValue('adhesion_type') != 'none' or resolveOrValue('prime_tower_brim_enable'))", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -4490,7 +4676,7 @@ "minimum_value": "0", "minimum_value_warning": "25", "maximum_value_warning": "2500", - "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim'", + "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -4503,7 +4689,8 @@ "default_value": 8.0, "minimum_value": "0.0", "maximum_value_warning": "50.0", - "enabled": "resolveOrValue('adhesion_type') == 'brim'", + "maximum_value": "0.5 * min(machine_width, machine_depth)", + "enabled": "resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr", @@ -4517,14 +4704,26 @@ "default_value": 20, "minimum_value": "0", "maximum_value_warning": "50 / skirt_brim_line_width", + "maximum_value": "0.5 * min(machine_width, machine_depth) / skirt_brim_line_width", "value": "math.ceil(brim_width / (skirt_brim_line_width * initial_layer_line_width_factor / 100.0))", - "enabled": "resolveOrValue('adhesion_type') == 'brim'", + "enabled": "resolveOrValue('adhesion_type') == 'brim' or resolveOrValue('prime_tower_brim_enable')", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" } } }, + "brim_replaces_support": + { + "label": "Brim Replaces Support", + "description": "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.", + "type": "bool", + "default_value": true, + "enabled": "resolveOrValue('adhesion_type') == 'brim' and support_enable", + "settable_per_mesh": false, + "settable_per_extruder": true, + "limit_to_extruder": "support_infill_extruder_nr" + }, "brim_outside_only": { "label": "Brim Only on Outside", @@ -5074,7 +5273,7 @@ "unit": "mm", "enabled": "resolveOrValue('prime_tower_enable')", "default_value": 200, - "value": "machine_width - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - 1", + "value": "machine_width - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enable') else 0) - 1", "maximum_value": "machine_width / 2 if machine_center_is_zero else machine_width", "minimum_value": "resolveOrValue('prime_tower_size') - machine_width / 2 if machine_center_is_zero else resolveOrValue('prime_tower_size')", "settable_per_mesh": false, @@ -5088,7 +5287,7 @@ "unit": "mm", "enabled": "resolveOrValue('prime_tower_enable')", "default_value": 200, - "value": "machine_depth - prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - 1", + "value": "machine_depth - prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enable') else 0) - 1", "maximum_value": "machine_depth / 2 - resolveOrValue('prime_tower_size') if machine_center_is_zero else machine_depth - resolveOrValue('prime_tower_size')", "minimum_value": "machine_depth / -2 if machine_center_is_zero else 0", "settable_per_mesh": false, @@ -5119,6 +5318,16 @@ "settable_per_mesh": false, "settable_per_extruder": true }, + "prime_tower_brim_enable": + { + "label": "Prime Tower Brim", + "description": "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type.", + "type": "bool", + "enabled": "resolveOrValue('prime_tower_enable') and (resolveOrValue('adhesion_type') != 'raft')", + "default_value": false, + "settable_per_mesh": false, + "settable_per_extruder": false + }, "ooze_shield_enabled": { "label": "Enable Ooze Shield", @@ -5834,7 +6043,7 @@ "description": "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions.", "type": "bool", "default_value": false, - "enabled": "top_bottom_pattern != 'concentric'", + "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true }, @@ -6483,6 +6692,29 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, + "wall_overhang_angle": + { + "label": "Overhanging Wall Angle", + "description": "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging.", + "unit": "°", + "type": "float", + "minimum_value": "0", + "minimum_value_warning": "2", + "maximum_value": "90", + "default_value": 90, + "settable_per_mesh": true + }, + "wall_overhang_speed_factor": + { + "label": "Overhanging Wall Speed", + "description": "Overhanging walls will be printed at this percentage of their normal print speed.", + "unit": "%", + "type": "float", + "default_value": 100, + "minimum_value": "0.001", + "minimum_value_warning": "25", + "settable_per_mesh": true + }, "bridge_settings_enabled": { "label": "Enable Bridge Settings", @@ -6502,8 +6734,8 @@ "minimum_value": "0", "default_value": 5, "enabled": "bridge_settings_enabled", - "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_mesh": true, + "settable_per_extruder": false }, "bridge_skin_support_threshold": { @@ -6517,18 +6749,6 @@ "enabled": "bridge_settings_enabled", "settable_per_mesh": true }, - "bridge_wall_max_overhang": - { - "label": "Bridge Wall Max Overhang", - "description": "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings.", - "unit": "%", - "default_value": 100, - "type": "float", - "minimum_value": "0", - "maximum_value": "100", - "enabled": "bridge_settings_enabled", - "settable_per_mesh": true - }, "bridge_wall_coast": { "label": "Bridge Wall Coasting", @@ -6539,7 +6759,7 @@ "minimum_value": "0", "maximum_value": "500", "enabled": "bridge_settings_enabled", - "settable_per_mesh": false + "settable_per_mesh": true }, "bridge_wall_speed": { diff --git a/resources/definitions/gmax15plus.def.json b/resources/definitions/gmax15plus.def.json index 16695714f4..069b8be999 100644 --- a/resources/definitions/gmax15plus.def.json +++ b/resources/definitions/gmax15plus.def.json @@ -14,19 +14,24 @@ "has_variants": true, "variants_name": "Hotend", "preferred_variant_name": "0.5mm E3D (Default)", + "preferred_quality_type": "gmax15plus_global_normal", "machine_extruder_trains": { "0": "gmax15plus_extruder_0" } + + }, "overrides": { - "machine_extruder_count": { "default_value": 1 }, + "machine_extruder_count": { "default_value": 1 }, "machine_name": { "default_value": "gMax 1.5 Plus" }, "machine_heated_bed": { "default_value": false }, "machine_width": { "default_value": 406 }, "machine_depth": { "default_value": 406 }, "machine_height": { "default_value": 533 }, "machine_center_is_zero": { "default_value": false }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_size": { "default_value": 0.5 }, "layer_height": { "default_value": 0.2 }, "layer_height_0": { "default_value": 0.3 }, "retraction_amount": { "default_value": 1 }, @@ -43,10 +48,10 @@ "machine_max_jerk_z": { "default_value": 0.4 }, "machine_max_jerk_e": { "default_value": 5.0 }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, - "machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 ;Home X/Y/Z\nG29 ; Bed level\nM104 S{material_print_temperature} ; Preheat\nM109 S{material_print_temperature} ; Preheat\nG91 ;relative positioning\nG90 ;absolute positioning\nG1 Z25.0 F9000 ;raise nozzle 25mm\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." }, + "machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home X/Y/Z\nM104 S{material_print_temperature} ; Preheat\nM109 S{material_print_temperature} ; Preheat\nG91 ;relative positioning\nG90 ;absolute positioning\nG1 Z25.0 F9000 ;raise nozzle 25mm\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." }, "machine_end_gcode": { "default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" }, - "material_print_temperature": { "default_value": 202 }, - "wall_thickness": { "default_value": 1 }, + "material_print_temperature": { "default_value": 202 }, + "wall_thickness": { "default_value": 1 }, "top_bottom_thickness": { "default_value": 1 }, "bottom_thickness": { "default_value": 1 } } diff --git a/resources/definitions/gmax15plus_dual.def.json b/resources/definitions/gmax15plus_dual.def.json index 5972061933..0264ef5977 100644 --- a/resources/definitions/gmax15plus_dual.def.json +++ b/resources/definitions/gmax15plus_dual.def.json @@ -10,24 +10,26 @@ "category": "Other", "file_formats": "text/x-gcode", "platform": "gmax_1-5_xt-plus_s3d_full model_150707.stl", - "has_variants": true, - "has_machine_quality": true, - "variants_name": "Hotend", - "preferred_variant_name": "0.5mm E3D (Default)", - "machine_extruder_trains": { - "0": "gmax15plus_dual_extruder_0", - "1": "gmax15plus_dual_extruder_1" - } + "has_variants": true, + "variants_name": "Hotend", + "preferred_variant_name": "0.5mm E3D (Default)", + "preferred_quality_type": "gmax15plus_global_dual_normal", + "machine_extruder_trains": { + "0": "gmax15plus_dual_extruder_0", + "1": "gmax15plus_dual_extruder_1" + } }, "overrides": { "machine_name": { "default_value": "gMax 1.5 Plus Dual Extruder" }, - "machine_extruder_count": { "default_value": 2 }, + "machine_extruder_count": { "default_value": 2 }, "machine_heated_bed": { "default_value": false }, "machine_width": { "default_value": 406 }, "machine_depth": { "default_value": 406 }, "machine_height": { "default_value": 533 }, "machine_center_is_zero": { "default_value": false }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_size": { "default_value": 0.5 }, "layer_height": { "default_value": 0.2 }, "layer_height_0": { "default_value": 0.3 }, "retraction_amount": { "default_value": 1 }, @@ -44,10 +46,10 @@ "machine_max_jerk_z": { "default_value": 0.4 }, "machine_max_jerk_e": { "default_value": 5.0 }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, - "machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 ;Home X/Y/Z\nG29 ; Bed level\nM104 S{material_print_temperature} T0 ; Preheat Left Extruder\nM104 S{material_print_temperature} T1 ; Preheat Right Extruder\nM109 S{material_print_temperature} T0 ; Preheat Left Extruder\nM109 S{material_print_temperature} T1 ; Preheat Right Extruder\nG91 ;relative positioning\nG90 ;absolute positioning\nM218 T1 X34.3 Y0; Set 2nd extruder offset. This can be changed later if needed\nG1 Z25.0 F9000 ;raise nozzle 25mm\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." }, + "machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home X/Y/Z\nM104 S{material_print_temperature} T0 ; Preheat Left Extruder\nM104 S{material_print_temperature} T1 ; Preheat Right Extruder\nM109 S{material_print_temperature} T0 ; Preheat Left Extruder\nM109 S{material_print_temperature} T1 ; Preheat Right Extruder\nG91 ;relative positioning\nG90 ;absolute positioning\nM218 T1 X34.3 Y0; Set 2nd extruder offset. This can be changed later if needed\nG1 Z25.0 F9000 ;raise nozzle 25mm\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." }, "machine_end_gcode": { "default_value": "M104 S0 T0;Left extruder off\nM104 S0 T1; Right extruder off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" }, - "material_print_temperature": { "default_value": 202 }, - "wall_thickness": { "default_value": 1 }, + "material_print_temperature": { "default_value": 202 }, + "wall_thickness": { "default_value": 1 }, "top_bottom_thickness": { "default_value": 1 }, "bottom_thickness": { "default_value": 1 } } diff --git a/resources/definitions/grr_neo.def.json b/resources/definitions/grr_neo.def.json index 0153fc4c01..67d6a92023 100644 --- a/resources/definitions/grr_neo.def.json +++ b/resources/definitions/grr_neo.def.json @@ -7,7 +7,6 @@ "author": "Simon Cor", "manufacturer": "German RepRap", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker.png", "platform": "grr_neo_platform.stl", "machine_extruder_trains": { diff --git a/resources/definitions/jgaurora_a1.def.json b/resources/definitions/jgaurora_a1.def.json new file mode 100644 index 0000000000..b9a921c311 --- /dev/null +++ b/resources/definitions/jgaurora_a1.def.json @@ -0,0 +1,93 @@ +{ + "name": "JGAurora A1", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Samuel Pinches", + "manufacturer": "JGAurora", + "file_formats": "text/x-gcode", + "preferred_quality_type": "fast", + "machine_extruder_trains": + { + "0": "jgaurora_a1_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "JGAurora A1" + }, + "machine_start_gcode": { + "default_value": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 ;home all axis\nM420 S1 ;turn on mesh bed levelling if enabled in firmware\nG92 E0 ;zero the extruded length\nG1 Z1 F1000 ;move up slightly\nG1 X60.0 Z0 E9.0 F1000.0;intro line\nG1 X100.0 E21.5 F1000.0 ;continue line\nG92 E0 ;zero the extruded length again\n; -- end of START GCODE --" + }, + "machine_end_gcode": { + "default_value": "; -- END GCODE --\nM104 S0 ;turn off nozzle heater\nM140 S0 ;turn off bed heater\nG91 ;set to relative positioning\nG1 E-10 F300 ;retract the filament slightly\nG90 ;set to absolute positioning\nG28 X0 ;move to the X-axis origin (Home)\nG0 Y280 F600 ;bring the bed to the front for easy print removal\nM84 ;turn off stepper motors\n; -- end of END GCODE --" + }, + "machine_width": { + "default_value": 300 + }, + "machine_height": { + "default_value": 300 + }, + "machine_depth": { + "default_value": 300 + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_center_is_zero": { + "default_value": false + }, + "gantry_height": { + "default_value": 10 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "material_diameter": { + "default_value": 1.75 + }, + "material_print_temperature": { + "default_value": 215 + }, + "material_bed_temperature": { + "default_value": 67 + }, + "layer_height_0": { + "default_value": 0.12 + }, + "wall_thickness": { + "default_value": 1.2 + }, + "speed_print": { + "default_value": 40 + }, + "speed_infill": { + "default_value": 40 + }, + "speed_wall": { + "default_value": 35 + }, + "speed_topbottom": { + "default_value": 35 + }, + "speed_travel": { + "default_value": 120 + }, + "speed_layer_0": { + "default_value": 12 + }, + "support_enable": { + "default_value": true + }, + "retraction_enable": { + "default_value": true + }, + "retraction_amount": { + "default_value": 6 + }, + "retraction_speed": { + "default_value": 40 + } + } +} diff --git a/resources/definitions/jgaurora_a5.def.json b/resources/definitions/jgaurora_a5.def.json new file mode 100644 index 0000000000..d84a8440e6 --- /dev/null +++ b/resources/definitions/jgaurora_a5.def.json @@ -0,0 +1,95 @@ +{ + "name": "JGAurora A5 & A5S", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Samuel Pinches", + "manufacturer": "JGAurora", + "file_formats": "text/x-gcode", + "platform": "jgaurora_a5.stl", + "platform_offset": [-242, -101, 273], + "preferred_quality_type": "fast", + "machine_extruder_trains": + { + "0": "jgaurora_a5_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "JGAurora A5 & A5S" + }, + "machine_start_gcode": { + "default_value": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 ;home all axis\nM420 S1 ;turn on mesh bed levelling if enabled in firmware\nG92 E0 ;zero the extruded length\nG1 Z1 F1000 ;move up slightly\nG1 X60.0 Z0 E9.0 F1000.0;intro line\nG1 X100.0 E21.5 F1000.0 ;continue line\nG92 E0 ;zero the extruded length again\n; -- end of START GCODE --" + }, + "machine_end_gcode": { + "default_value": "; -- END GCODE --\nM104 S0 ;turn off nozzle heater\nM140 S0 ;turn off bed heater\nG91 ;set to relative positioning\nG1 E-10 F300 ;retract the filament slightly\nG90 ;set to absolute positioning\nG28 X0 ;move to the X-axis origin (Home)\nG0 Y280 F600 ;bring the bed to the front for easy print removal\nM84 ;turn off stepper motors\n; -- end of END GCODE --" + }, + "machine_width": { + "default_value": 300 + }, + "machine_height": { + "default_value": 320 + }, + "machine_depth": { + "default_value": 300 + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_center_is_zero": { + "default_value": false + }, + "gantry_height": { + "default_value": 10 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "material_diameter": { + "default_value": 1.75 + }, + "material_print_temperature": { + "default_value": 215 + }, + "material_bed_temperature": { + "default_value": 67 + }, + "layer_height_0": { + "default_value": 0.12 + }, + "wall_thickness": { + "default_value": 1.2 + }, + "speed_print": { + "default_value": 40 + }, + "speed_infill": { + "default_value": 40 + }, + "speed_wall": { + "default_value": 35 + }, + "speed_topbottom": { + "default_value": 35 + }, + "speed_travel": { + "default_value": 120 + }, + "speed_layer_0": { + "default_value": 12 + }, + "support_enable": { + "default_value": true + }, + "retraction_enable": { + "default_value": true + }, + "retraction_amount": { + "default_value": 8 + }, + "retraction_speed": { + "default_value": 45 + } + } +} diff --git a/resources/definitions/jgaurora_z_603s.def.json b/resources/definitions/jgaurora_z_603s.def.json new file mode 100644 index 0000000000..3a78585240 --- /dev/null +++ b/resources/definitions/jgaurora_z_603s.def.json @@ -0,0 +1,93 @@ +{ + "name": "JGAurora Z-603S", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Samuel Pinches", + "manufacturer": "JGAurora", + "file_formats": "text/x-gcode", + "preferred_quality_type": "fast", + "machine_extruder_trains": + { + "0": "jgaurora_z_603s_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "JGAurora Z-603S" + }, + "machine_start_gcode": { + "default_value": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 ;home all axis\nM420 S1 ;turn on mesh bed levelling if enabled in firmware\nG92 E0 ;zero the extruded length\nG1 Z1 F1000 ;move up slightly\nG1 X60.0 Z0 E9.0 F1000.0;intro line\nG1 X100.0 E21.5 F1000.0 ;continue line\nG92 E0 ;zero the extruded length again\n; -- end of START GCODE --" + }, + "machine_end_gcode": { + "default_value": "; -- END GCODE --\nM104 S0 ;turn off nozzle heater\nM140 S0 ;turn off bed heater\nG91 ;set to relative positioning\nG1 E-10 F300 ;retract the filament slightly\nG90 ;set to absolute positioning\nG28 X0 ;move to the X-axis origin (Home)\nG0 Y280 F600 ;bring the bed to the front for easy print removal\nM84 ;turn off stepper motors\n; -- end of END GCODE --" + }, + "machine_width": { + "default_value": 280 + }, + "machine_height": { + "default_value": 175 + }, + "machine_depth": { + "default_value": 180 + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_center_is_zero": { + "default_value": false + }, + "gantry_height": { + "default_value": 10 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "material_diameter": { + "default_value": 1.75 + }, + "material_print_temperature": { + "default_value": 210 + }, + "material_bed_temperature": { + "default_value": 55 + }, + "layer_height_0": { + "default_value": 0.2 + }, + "wall_thickness": { + "default_value": 1.2 + }, + "speed_print": { + "default_value": 60 + }, + "speed_infill": { + "default_value": 60 + }, + "speed_wall": { + "default_value": 30 + }, + "speed_topbottom": { + "default_value": 45 + }, + "speed_travel": { + "default_value": 125 + }, + "speed_layer_0": { + "default_value": 20 + }, + "support_enable": { + "default_value": true + }, + "retraction_enable": { + "default_value": true + }, + "retraction_amount": { + "default_value": 5 + }, + "retraction_speed": { + "default_value": 50 + } + } +} diff --git a/resources/definitions/kossel_mini.def.json b/resources/definitions/kossel_mini.def.json index 76fe72dac1..91f374fb6d 100644 --- a/resources/definitions/kossel_mini.def.json +++ b/resources/definitions/kossel_mini.def.json @@ -7,7 +7,6 @@ "author": "Claudio Sampaio (Patola)", "manufacturer": "Other", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "platform": "kossel_platform.stl", "platform_offset": [0, -0.25, 0], "machine_extruder_trains": diff --git a/resources/definitions/kossel_pro.def.json b/resources/definitions/kossel_pro.def.json index 9fadd0db91..e104538b2c 100644 --- a/resources/definitions/kossel_pro.def.json +++ b/resources/definitions/kossel_pro.def.json @@ -7,7 +7,6 @@ "author": "Chris Petersen", "manufacturer": "OpenBeam", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "platform": "kossel_pro_build_platform.stl", "platform_offset": [0, -0.25, 0], "machine_extruder_trains": diff --git a/resources/definitions/makeR_pegasus.def.json b/resources/definitions/makeR_pegasus.def.json index 9bd4547c9b..ac09aa01ac 100644 --- a/resources/definitions/makeR_pegasus.def.json +++ b/resources/definitions/makeR_pegasus.def.json @@ -7,7 +7,6 @@ "author": "makeR", "manufacturer": "makeR", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "platform": "makeR_pegasus_platform.stl", "platform_offset": [-200, -10, 200], "machine_extruder_trains": diff --git a/resources/definitions/makeR_prusa_tairona_i3.def.json b/resources/definitions/makeR_prusa_tairona_i3.def.json index d22af5c516..0e59874978 100644 --- a/resources/definitions/makeR_prusa_tairona_i3.def.json +++ b/resources/definitions/makeR_prusa_tairona_i3.def.json @@ -7,7 +7,6 @@ "author": "makeR", "manufacturer": "makeR", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "platform": "makeR_prusa_tairona_i3_platform.stl", "platform_offset": [-2, 0, 0], "machine_extruder_trains": diff --git a/resources/definitions/makeit_pro_l.def.json b/resources/definitions/makeit_pro_l.def.json index 2f9173c90e..d40d63f97b 100644 --- a/resources/definitions/makeit_pro_l.def.json +++ b/resources/definitions/makeit_pro_l.def.json @@ -8,7 +8,6 @@ "manufacturer": "NA", "file_formats": "text/x-gcode", "has_materials": false, - "supported_actions": [ "MachineSettingsAction", "UpgradeFirmware" ], "machine_extruder_trains": { "0": "makeit_l_dual_1st", diff --git a/resources/definitions/makeit_pro_m.def.json b/resources/definitions/makeit_pro_m.def.json index 0cd7b42df3..1f0381df86 100644 --- a/resources/definitions/makeit_pro_m.def.json +++ b/resources/definitions/makeit_pro_m.def.json @@ -8,7 +8,6 @@ "manufacturer": "NA", "file_formats": "text/x-gcode", "has_materials": false, - "supported_actions": [ "MachineSettingsAction", "UpgradeFirmware" ], "machine_extruder_trains": { "0": "makeit_dual_1st", diff --git a/resources/definitions/maker_starter.def.json b/resources/definitions/maker_starter.def.json index 8fb67623ed..be85e54967 100644 --- a/resources/definitions/maker_starter.def.json +++ b/resources/definitions/maker_starter.def.json @@ -7,7 +7,6 @@ "author": "tvlgiao", "manufacturer": "3DMaker", "file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj", - "icon": "icon_ultimaker2.png", "platform": "makerstarter_platform.stl", "preferred_quality_type": "draft", "machine_extruder_trains": diff --git a/resources/definitions/makerbotreplicator.def.json b/resources/definitions/makerbotreplicator.def.json index 1770b7a979..3b02215e74 100644 --- a/resources/definitions/makerbotreplicator.def.json +++ b/resources/definitions/makerbotreplicator.def.json @@ -6,6 +6,7 @@ "visible": true, "author": "Ultimaker", "manufacturer": "MakerBot", + "machine_x3g_variant": "r1", "file_formats": "application/x3g", "platform_offset": [ 0, 0, 0], "machine_extruder_trains": diff --git a/resources/definitions/mendel90.def.json b/resources/definitions/mendel90.def.json index 104ca7f42f..85d82ae176 100644 --- a/resources/definitions/mendel90.def.json +++ b/resources/definitions/mendel90.def.json @@ -5,7 +5,7 @@ "metadata": { "visible": true, - "author": "Bo Herrmannsen", + "author": "Wilmer Gaona", "manufacturer": "Nophead", "file_formats": "text/x-gcode", "platform": "mendel90_platform.stl", @@ -23,10 +23,10 @@ "overrides": { "machine_name": { "default_value": "Mendel90" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\nG90 ;absolute positioning\nG92 E0 ;zero the extruded length\nM107 ;start with the fan off\nG1 X90 Y200 F6000 ;go to the middle of the front\nG1 Z0.05 ;close to the bed\nG1 Z0.3 ;lift Z\n" + "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;absolute extrusion\nM107 ;start with the fan off\nG28 ;home\nG92 E0 ;zero the extruded length\nM140 S{material_bed_temperature_layer_0} ; set the bed temperature and continue on\nG1 X-50 Y98 F9000 ;go to the left of the top\nG1 Z0.05 ; close to the bed\nM104 S{material_print_temperature_layer_0}; pre-heat the extruder continue on\nM190 S{material_bed_temperature_layer_0} ;set the bed temp & wait\nM109 S{material_print_temperature_layer_0};set the extruder temp for layer 0 & wait\nG92 E0 ;zero the extruded length\nG1 X50 E10 F300 ; make a thick line to prime extruder\nG92 E0 ; reset extruder\nG1 E-4 F1800\nG1 Z0.3 ;lift Z\n" }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nM107 ;carriage fan off\nG91 ;relative positioning\nG1 Z10 ;Move up Z 10mm\nG90 ;back to absolute mode\nG1 E-1 F1200 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG92 E0 ;zero the extruded length\nG1 Y200 F5000 ;Move Y to middle of bed cooling fan\nM42 P42 S255 ;Turn on Bed cooling fan on\nG4 S420 ;Wait 7 mins\nM42 P42 S0 ;Turn off bed cooling fan\nG1 Y10 F5000 ;Move Y to front\nM84 ;steppers off\n" + "default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nM107 ;carriage fan off\nG91 ;relative positioning\nG1 Z10 ;Move up Z 10mm\nG90 ;back to absolute mode\nG1 E-1 F1200 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG92 E0 ;zero the extruded length\nG1 Z200 X-100 F9000 ; go to top\nG1 Y100 F5000 ;Move Y to back\nM42 P42 S255 ;Turn on Bed cooling fan on\nG4 S10 ;Wait 10 seconds\nM42 P42 S0 ;Turn off bed cooling fan\nM84 ;steppers off\n" }, "material_bed_temp_wait": { "default_value": true @@ -47,7 +47,7 @@ "default_value": true }, "machine_center_is_zero": { - "default_value": false + "default_value": true }, "machine_extruder_count": { "default_value": 1 diff --git a/resources/definitions/monoprice_ultimate.def.json b/resources/definitions/monoprice_ultimate.def.json new file mode 100644 index 0000000000..48290f0941 --- /dev/null +++ b/resources/definitions/monoprice_ultimate.def.json @@ -0,0 +1,52 @@ +{ + "version": 2, + "name": "Monoprice Ultimate", + "inherits": "wanhao_d6", + "metadata": { + "visible": true, + "author": "Danny Tuppeny", + "manufacturer": "monoprice", + "file_formats": "text/x-gcode", + "icon": "wanhao-icon.png", + "has_materials": true, + "platform": "wanhao_200_200_platform.obj", + "platform_texture": "Wanhaobackplate.png", + "machine_extruder_trains": { + "0": "wanhao_d6_extruder_0" + }, + "platform_offset": [ + 0, + -28, + 0 + ] + }, + "overrides": { + "machine_name": { + "default_value": "Monoprice Ultimate" + }, + "machine_max_acceleration_x": { + "default_value": 3000 + }, + "machine_max_acceleration_y": { + "default_value": 3000 + }, + "machine_max_acceleration_z": { + "default_value": 100 + }, + "machine_max_acceleration_e": { + "default_value": 500 + }, + "machine_acceleration": { + "default_value": 800 + }, + "machine_max_jerk_xy": { + "default_value": 10.0 + }, + "machine_max_jerk_z": { + "default_value": 0.4 + }, + "machine_max_jerk_e": { + "default_value": 1.0 + } + } +} diff --git a/resources/definitions/nwa3d_a5.def.json b/resources/definitions/nwa3d_a5.def.json new file mode 100644 index 0000000000..3deb0027fd --- /dev/null +++ b/resources/definitions/nwa3d_a5.def.json @@ -0,0 +1,64 @@ +{ + "name": "NWA3D A5", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "DragonJe", + "manufacturer": "NWA 3D LLC", + "file_formats": "text/x-gcode", + "platform_offset": [0, 0, 0], + "has_materials": true, + "has_variants": false, + "has_machine_materials": true, + "has_variant_materials": false, + "preferred_quality_type": "normal", + "has_machine_quality": true, + "preferred_material": "generic_pla", + "machine_extruder_trains": + { + "0": "nwa3d_a5_extruder_0" + } + }, + + "overrides": { + "machine_name": { + "default_value": "NWA3D A5" + }, + "machine_width": { + "default_value": 125 + }, + "machine_height": { + "default_value": 100 + }, + "machine_depth": { + "default_value": 150 + }, + "machine_head_polygon": { + "default_value": [ + [-30, 34], + [-30, -32], + [30, -32], + [30, 34] + ] + }, + "gantry_height": { + "default_value": 30 + }, + "machine_heated_bed": { + "default_value": false + }, + "material_diameter": { + "default_value": 1.75 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (RepRap)" + }, + "machine_start_gcode": { + "default_value": "G28 ; Home\nG1 Z15.0 F6000 ; Move Z axis up 15mm\n ; Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0" + }, + "machine_end_gcode": { + "default_value": "M104 S0\nM140 S0\n ; Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84" + } + } +} diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index 5c03444d49..a578cc4240 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -4,13 +4,14 @@ "inherits": "fdmprinter", "metadata": { "visible": true, - "author": "fieldOfView", + "author": "Peopoly", "manufacturer": "Peopoly", "file_formats": "text/x-gcode", "has_machine_quality": true, "has_materials": false, - "machine_extruder_trains": - { + "platform": "moai.obj", + "platform_texture": "moai.jpg", + "machine_extruder_trains": { "0": "peopoly_moai_extruder_0" } }, @@ -46,7 +47,6 @@ "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\nG28 X0 Y0\nM84" }, - "line_width": { "minimum_value_warning": "machine_nozzle_size" }, @@ -75,7 +75,14 @@ "value": "0.1" }, "top_bottom_thickness": { - "minimum_value_warning": "0.1" + "minimum_value_warning": "0.1", + "value": "0.1" + }, + "top_thickness": { + "minimum_value_warning": "resolveOrValue('layer_height')" + }, + "bottom_thickness": { + "minimum_value_warning": "resolveOrValue('layer_height')" }, "infill_sparse_thickness": { "maximum_value_warning": "0.5" @@ -102,24 +109,23 @@ "value": "speed_print" }, "speed_travel": { - "value": "300" + "value": 150 }, "speed_travel_layer_0": { - "value": "300" + "value": 150 }, "speed_layer_0": { - "value": "5" + "value": 5 }, "speed_slowdown_layers": { - "value": "2" + "value": 3 }, "infill_overlap": { - "value": "15" + "value": 15 }, "adhesion_type": { - "value": "\"none\"" + "value": "'none'" }, - "acceleration_enabled": { "value": "False" }, @@ -139,6 +145,10 @@ "enabled": false, "value": "False" }, + "cool_fan_speed_min": { + "enabled": false, + "value": 0 + }, "retraction_enable": { "enabled": false, "value": "False" @@ -148,7 +158,8 @@ "value": "'off'" }, "retract_at_layer_change": { - "enabled": false + "enabled": false, + "value": false }, "cool_min_layer_time_fan_speed_max": { "enabled": false @@ -158,6 +169,117 @@ }, "cool_fan_full_layer": { "enabled": false + }, + "minimum_polygon_circumference": { + "value": "0.1" + }, + "meshfix_maximum_resolution": { + "value": "0.005" + }, + "skin_outline_count": { + "value": 0 + }, + "travel_compensate_overlapping_walls_enabled": { + "value": "False" + }, + "travel_compensate_overlapping_walls_0_enabled": { + "value": "False" + }, + "travel_compensate_overlapping_walls_x_enabled": { + "value": "False" + }, + "wall_0_wipe_dist": { + "value": "machine_nozzle_size / 3" + }, + "wall_thickness": { + "value": 0.5 + }, + "infill_sparse_density": { + "value": 70 + }, + "infill_pattern": { + "value": "'lines'" + }, + "infill_angles": { + "value": "[0,90]" + }, + "cool_min_layer_time": { + "enabled": false, + "value": 0 + }, + "cool_min_speed": { + "enabled": false, + "value": 0 + }, + "cool_lift_head": { + "enabled": false, + "value": "False" + }, + "material_flow": { + "enabled": false + }, + "material_flow_layer_0": { + "enabled": false + }, + "speed_equalize_flow_enabled": { + "enabled": false, + "value": "False" + }, + "draft_shield_enabled": { + "enabled": false, + "value": "False" + }, + "z_seam_corner": { + "value": "'z_seam_corner_none'" + }, + "z_seam_type": { + "value": "'shortest'" + }, + "skin_no_small_gaps_heuristic": { + "value": "False" + }, + "ironing_enabled": { + "enabled": false, + "value": "False" + }, + "skin_overlap": { + "value": 5 + }, + "infill_wipe_dist": { + "value": 0 + }, + "expand_skins_expand_distance": { + "value": "( wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x ) / 2" + }, + "max_feedrate_z_override": { + "value": 0, + "enabled": false + }, + "flow_rate_max_extrusion_offset": { + "enabled": false + }, + "flow_rate_extrusion_offset_factor": { + "enabled": false + }, + "adaptive_layer_height_enabled": { + "value": "False", + "enabled": false + }, + "bridge_settings_enabled": { + "value": "False", + "enabled": false + }, + "acceleration_enabled": { + "value": "False", + "enabled": false + }, + "relative_extrusion": { + "value": "False", + "enabled": false + }, + "coasting_enable": { + "value": "False", + "enabled": false } } } diff --git a/resources/definitions/printrbot_play_heated.def.json b/resources/definitions/printrbot_play_heated.def.json index 680496bf56..7987f55010 100644 --- a/resources/definitions/printrbot_play_heated.def.json +++ b/resources/definitions/printrbot_play_heated.def.json @@ -7,7 +7,6 @@ "author": "Chris Pearson", "manufacturer": "Printrbot", "file_formats": "text/x-gcode", - "platform": "", "machine_extruder_trains": { "0": "printrbot_play_heated_extruder_0" diff --git a/resources/definitions/prusa_i3.def.json b/resources/definitions/prusa_i3.def.json index c676f7fe96..1f0eb37aec 100644 --- a/resources/definitions/prusa_i3.def.json +++ b/resources/definitions/prusa_i3.def.json @@ -7,7 +7,6 @@ "author": "Quillford", "manufacturer": "Prusajr", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "platform": "prusai3_platform.stl", "machine_extruder_trains": { diff --git a/resources/definitions/prusa_i3_mk2.def.json b/resources/definitions/prusa_i3_mk2.def.json index 169eb6ffc2..5c5583b56f 100644 --- a/resources/definitions/prusa_i3_mk2.def.json +++ b/resources/definitions/prusa_i3_mk2.def.json @@ -7,7 +7,6 @@ "author": "Apsu, Nounours2099", "manufacturer": "Prusa Research", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "platform": "prusai3_platform.stl", "has_materials": true, "machine_extruder_trains": diff --git a/resources/definitions/prusa_i3_xl.def.json b/resources/definitions/prusa_i3_xl.def.json index eafed22df1..9931be5c72 100644 --- a/resources/definitions/prusa_i3_xl.def.json +++ b/resources/definitions/prusa_i3_xl.def.json @@ -7,7 +7,6 @@ "author": "guigashm", "manufacturer": "Prusajr", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2.png", "platform": "prusai3_xl_platform.stl", "machine_extruder_trains": { diff --git a/resources/definitions/seemecnc_artemis.def.json b/resources/definitions/seemecnc_artemis.def.json index aa788865df..ec92f528d7 100644 --- a/resources/definitions/seemecnc_artemis.def.json +++ b/resources/definitions/seemecnc_artemis.def.json @@ -7,7 +7,6 @@ "author": "PouncingIguana, JJ", "manufacturer": "SeeMeCNC", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "platform": "artemis_platform.stl", "has_materials": true, "machine_extruder_trains": diff --git a/resources/definitions/seemecnc_v32.def.json b/resources/definitions/seemecnc_v32.def.json index 5a855f67fc..d4316c25d9 100644 --- a/resources/definitions/seemecnc_v32.def.json +++ b/resources/definitions/seemecnc_v32.def.json @@ -7,7 +7,6 @@ "author": "PouncingIguana, JJ", "manufacturer": "SeeMeCNC", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "platform": "rostock_platform.stl", "has_materials": true, "machine_extruder_trains": diff --git a/resources/definitions/tam.def.json b/resources/definitions/tam.def.json index 9865abedda..0ed8d657a2 100644 --- a/resources/definitions/tam.def.json +++ b/resources/definitions/tam.def.json @@ -10,7 +10,6 @@ "platform": "tam_series1.stl", "platform_offset": [-580.0, -6.23, 253.5], "has_materials": false, - "supported_actions": ["UpgradeFirmware"], "machine_extruder_trains": { "0": "tam_extruder_0" diff --git a/resources/definitions/tevo_blackwidow.def.json b/resources/definitions/tevo_blackwidow.def.json index b193023867..25e7a2620d 100644 --- a/resources/definitions/tevo_blackwidow.def.json +++ b/resources/definitions/tevo_blackwidow.def.json @@ -7,7 +7,6 @@ "author": "TheTobby", "manufacturer": "Tevo", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "has_materials": false, "has_machine_quality": true, "platform": "tevo_blackwidow.stl", diff --git a/resources/definitions/tevo_tarantula.def.json b/resources/definitions/tevo_tarantula.def.json index 40d579552e..ec4ae667d5 100644 --- a/resources/definitions/tevo_tarantula.def.json +++ b/resources/definitions/tevo_tarantula.def.json @@ -8,7 +8,6 @@ "author": "TheAssassin", "manufacturer": "Tevo", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "platform": "prusai3_platform.stl", "machine_extruder_trains": { @@ -43,7 +42,7 @@ "machine_max_feedrate_x": { "default_value": 255 }, "machine_max_feedrate_y": { "default_value": 225 }, "machine_max_feedrate_z": { "default_value": 3 }, - "machine_max_acceleration_x": { "default_value": 2620 }, + "machine_max_acceleration_x": { "default_value": 2650 }, "machine_max_acceleration_y": { "default_value": 2650 }, "acceleration_print": { "default_value": 2650 }, "machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E3 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." }, diff --git a/resources/definitions/tevo_tornado.def.json b/resources/definitions/tevo_tornado.def.json index e121c8e097..cb3a6c45bd 100644 --- a/resources/definitions/tevo_tornado.def.json +++ b/resources/definitions/tevo_tornado.def.json @@ -7,7 +7,6 @@ "author": "nean", "manufacturer": "Tevo", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2.png", "has_materials": true, "machine_extruder_trains": { "0": "tevo_tornado_extruder_0" diff --git a/resources/definitions/tizyx_evy.def.json b/resources/definitions/tizyx_evy.def.json new file mode 100644 index 0000000000..fe9a02a31c --- /dev/null +++ b/resources/definitions/tizyx_evy.def.json @@ -0,0 +1,74 @@ +{ + "name": "TiZYX EVY", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "TiZYX", + "manufacturer": "TiZYX", + "file_formats": "text/x-gcode", + + "has_machine_quality": true, + "has_materials": true, + "has_machine_materials": true, + "has_variants": true, + + "preferred_variant_name": "0.4mm", + "preferred_material": "tizyx_pla", + "preferred_quality_type": "normal", + "exclude_materials": ["chromatik_pla", "dsm_arnitel2045_175", "dsm_novamid1070_175", "fabtotum_abs", "fabtotum_nylon", "fabtotum_pla", "fabtotum_tpu", "fiberlogy_hd_pla", "filo3d_pla", "filo3d_pla_green", "filo3d_pla_red", "generic_bam", "generic_cpe", "generic_cpe_175", "generic_cpe_plus", "generic_hips", "generic_hips_175", "generic_nylon", "generic_nylon_175", "generic_pc", "generic_pc_175","generic_pp", "generic_pva", "generic_pva_175", "generic_tpu", "imade3d_petg_green", "imade3d_petg_pink", "imade3d_pla_green", "imade3d_pla_pink", "innofill_innoflex60_175", "octofiber_pla", "polyflex_pla", "polymax_pla", "polyplus_pla", "polywood_pla", "ultimaker_abs_black", "ultimaker_abs_blue", "ultimaker_abs_green", "ultimaker_abs_grey", "ultimaker_abs_orange", "ultimaker_abs_pearl-gold", "ultimaker_abs_red", "ultimaker_abs_silver-metallic", "ultimaker_abs_white", "ultimaker_abs_yellow", "ultimaker_bam", "ultimaker_cpe_black", "ultimaker_cpe_blue", "ultimaker_cpe_dark-grey", "ultimaker_cpe_green", "ultimaker_cpe_light-grey", "ultimaker_cpe_plus_black", "ultimaker_cpe_plus_transparent", "ultimaker_cpe_plus_white", "ultimaker_cpe_red", "ultimaker_cpe_transparent", "ultimaker_cpe_white", "ultimaker_cpe_yellow", "ultimaker_nylon_black", "ultimaker_nylon_transparent", "ultimaker_pc_black", "ultimaker_pc_transparent", "ultimaker_pc_white", "ultimaker_pla_black", "ultimaker_pla_blue", "ultimaker_pla_green", "ultimaker_pla_magenta", "ultimaker_pla_orange", "ultimaker_pla_pearl-white", "ultimaker_pla_red", "ultimaker_pla_silver-metallic", "ultimaker_pla_transparent", "ultimaker_pla_white", "ultimaker_pla_yellow", "ultimaker_pp_transparent", "ultimaker_pva", "ultimaker_tough_pla_black", "ultimaker_tough_pla_green", "ultimaker_tough_pla_red", "ultimaker_tough_pla_white", "ultimaker_tpu_black", "ultimaker_tpu_blue", "ultimaker_tpu_red", "ultimaker_tpu_white", "verbatim_bvoh_175", "Vertex_Delta_ABS", "Vertex_Delta_PET", "Vertex_Delta_PLA", "Vertex_Delta_TPU", "zyyx_pro_flex", "zyyx_pro_pla" ], + + "machine_extruder_trains": + { + "0": "tizyx_evy_extruder_0" + }, + "platform": "tizyx_k25_platform.stl", + "platform_offset": [0, -4, 0], + "first_start_actions": ["MachineSettingsAction"], + "supported_actions": ["MachineSettingsAction"] + }, + + "overrides": { + "machine_extruder_count": { "default_value": 1 }, + "machine_heated_bed": { "default_value": true }, + "machine_center_is_zero": { "default_value": false }, + "gantry_height": { "default_value": 500 }, + "machine_height": { "default_value": 255 }, + "machine_depth": { "default_value": 255 }, + "machine_width": { "default_value": 255 }, + "machine_head_with_fans_polygon": { + "default_value": [ + [25, 49], + [25, -49], + [-25, -49], + [25, 49] + ] + }, + + "adhesion_type": { "default_value": "skirt" }, + "skirt_line_count": {"default_value": 2}, + "skirt_gap": { "default_value": 2}, + "fill_outline_gaps": { "default_value": true}, + "infill_sparse_density": { "default_value": 15}, + "retraction_amount": { "default_value": 2.5}, + "retraction_min_travel": { "default_value": 2}, + "retraction_speed": { "default_value": 30}, + "speed_print": { "default_value": 60}, + "speed_topbottom": { "default_value": 50}, + "speed_wall_0": { "default_value": 40}, + "top_layers": { "default_value": 4}, + "wall_line_count": { "default_value": 2}, + "cool_min_layer_time": { "default_value": 11}, + "layer_height": { "maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" }, + "layer_height_0": { "maximum_value": "(0.8 * min(extruderValues('machine_nozzle_size')))" }, + + "machine_start_gcode": + { + "default_value": "M82\nG90\nG28 X\nG28 Y\nG28 Z\nG29\nG91\nG1 Z0\nG90\nM82\nG92 E0\nG1 X125 Y245 F3000\nG1 Z0" + }, + "machine_end_gcode": + { + "default_value": "M104 S0\nM140 S0\nG91\nG1 E-5 F300\nG1 Z+3 F3000\nG1 Y245 F3000\nM84" + } + } +} diff --git a/resources/definitions/tizyx_k25.def.json b/resources/definitions/tizyx_k25.def.json index 94a20b371e..d6a5ff5ecd 100644 --- a/resources/definitions/tizyx_k25.def.json +++ b/resources/definitions/tizyx_k25.def.json @@ -14,6 +14,8 @@ "preferred_material": "tizyx_pla", "has_machine_quality": true, "has_materials": true, + "has_variants": true, + "preferred_variant_name": "0.4 mm", "machine_extruder_trains": { "0": "tizyx_k25_extruder_0" diff --git a/resources/definitions/ubuild-3d_mr_bot_280.def.json b/resources/definitions/ubuild-3d_mr_bot_280.def.json index 1b5cb1456c..7eb65c3e78 100644 --- a/resources/definitions/ubuild-3d_mr_bot_280.def.json +++ b/resources/definitions/ubuild-3d_mr_bot_280.def.json @@ -9,8 +9,6 @@ "manufacturer": "uBuild-3D", "category": "Other", "file_formats": "text/x-gcode", - "icon": "icon_uBuild-3D", - "platform": "mr_bot_280_platform.stl", "has_materials": true, "preferred_quality_type": "draft", "machine_extruder_trains": diff --git a/resources/definitions/ultimaker2.def.json b/resources/definitions/ultimaker2.def.json index aa684946c2..4cc291ff45 100644 --- a/resources/definitions/ultimaker2.def.json +++ b/resources/definitions/ultimaker2.def.json @@ -8,19 +8,20 @@ "manufacturer": "Ultimaker B.V.", "weight": 3, "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2.png", "platform": "ultimaker2_platform.obj", "platform_texture": "Ultimaker2backplate.png", "platform_offset": [9, 0, 0], "has_materials": false, "has_machine_quality": true, + "preferred_variant_name": "0.4 mm", "exclude_materials": ["generic_hips", "generic_petg", "generic_bam", "ultimaker_bam", "generic_pva", "ultimaker_pva", "generic_tough_pla", "ultimaker_tough_pla_black", "ultimaker_tough_pla_green", "ultimaker_tough_pla_red", "ultimaker_tough_pla_white"], "first_start_actions": ["UM2UpgradeSelection"], - "supported_actions":["UM2UpgradeSelection", "UpgradeFirmware"], + "supported_actions":["UM2UpgradeSelection"], "machine_extruder_trains": { "0": "ultimaker2_extruder_0" - } + }, + "firmware_file": "MarlinUltimaker2.hex" }, "overrides": { "machine_name": { "default_value": "Ultimaker 2" }, diff --git a/resources/definitions/ultimaker2_extended.def.json b/resources/definitions/ultimaker2_extended.def.json index af169c94fb..572634c602 100644 --- a/resources/definitions/ultimaker2_extended.def.json +++ b/resources/definitions/ultimaker2_extended.def.json @@ -8,13 +8,13 @@ "quality_definition": "ultimaker2", "weight": 3, "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2.png", "platform": "ultimaker2_platform.obj", "platform_texture": "Ultimaker2Extendedbackplate.png", "machine_extruder_trains": { "0": "ultimaker2_extended_extruder_0" - } + }, + "firmware_file": "MarlinUltimaker2extended.hex" }, "overrides": { diff --git a/resources/definitions/ultimaker2_extended_plus.def.json b/resources/definitions/ultimaker2_extended_plus.def.json index f3a8bfcf9f..0242115057 100644 --- a/resources/definitions/ultimaker2_extended_plus.def.json +++ b/resources/definitions/ultimaker2_extended_plus.def.json @@ -10,11 +10,11 @@ "file_formats": "text/x-gcode", "platform": "ultimaker2_platform.obj", "platform_texture": "Ultimaker2ExtendedPlusbackplate.png", - "supported_actions": ["UpgradeFirmware"], "machine_extruder_trains": { "0": "ultimaker2_extended_plus_extruder_0" - } + }, + "firmware_file": "MarlinUltimaker2extended-plus.hex" }, "overrides": { diff --git a/resources/definitions/ultimaker2_go.def.json b/resources/definitions/ultimaker2_go.def.json index c66fb38fc0..9e374b2c88 100644 --- a/resources/definitions/ultimaker2_go.def.json +++ b/resources/definitions/ultimaker2_go.def.json @@ -8,16 +8,15 @@ "quality_definition": "ultimaker2", "weight": 3, "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2.png", "platform": "ultimaker2go_platform.obj", "platform_texture": "Ultimaker2Gobackplate.png", "platform_offset": [0, 0, 0], "first_start_actions": [], - "supported_actions": ["UpgradeFirmware"], "machine_extruder_trains": { "0": "ultimaker2_go_extruder_0" - } + }, + "firmware_file": "MarlinUltimaker2go.hex" }, "overrides": { diff --git a/resources/definitions/ultimaker2_plus.def.json b/resources/definitions/ultimaker2_plus.def.json index bc4d3a6230..28fd2b71f9 100644 --- a/resources/definitions/ultimaker2_plus.def.json +++ b/resources/definitions/ultimaker2_plus.def.json @@ -15,11 +15,12 @@ "has_machine_materials": true, "has_machine_quality": true, "first_start_actions": [], - "supported_actions": ["UpgradeFirmware"], + "supported_actions": [], "machine_extruder_trains": { "0": "ultimaker2_plus_extruder_0" - } + }, + "firmware_file": "MarlinUltimaker2plus.hex" }, "overrides": { diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index 08fe01a76b..72756de2a5 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -13,7 +13,6 @@ "has_machine_quality": true, "has_materials": true, "has_machine_materials": true, - "has_variant_materials": true, "has_variants": true, "preferred_variant_name": "AA 0.4", "preferred_quality_type": "normal", @@ -25,7 +24,16 @@ }, "first_start_actions": [ "DiscoverUM3Action" ], "supported_actions": [ "DiscoverUM3Action" ], - "supports_usb_connection": false + "supports_usb_connection": false, + "firmware_update_info": { + "id": 9066, + "check_urls": + [ + "http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources", + "http://software.ultimaker.com/releases/firmware/9066/stable/version.txt" + ], + "update_url": "https://ultimaker.com/firmware" + } }, @@ -90,7 +98,7 @@ "infill_overlap": { "value": "0" }, "infill_pattern": { "value": "'triangles'" }, "infill_wipe_dist": { "value": "0" }, - "initial_layer_line_width_factor": { "value": "120" }, + "initial_layer_line_width_factor": { "value": "120" }, "jerk_enabled": { "value": "True" }, "jerk_layer_0": { "value": "jerk_topbottom" }, "jerk_prime_tower": { "value": "math.ceil(jerk_print * 15 / 25)" }, diff --git a/resources/definitions/ultimaker3_extended.def.json b/resources/definitions/ultimaker3_extended.def.json index 1e6c322c73..68f26969b7 100644 --- a/resources/definitions/ultimaker3_extended.def.json +++ b/resources/definitions/ultimaker3_extended.def.json @@ -13,7 +13,6 @@ "platform_offset": [0, 0, 0], "has_machine_quality": true, "has_machine_materials": true, - "has_variant_materials": true, "has_materials": true, "has_variants": true, "preferred_variant_name": "AA 0.4", @@ -24,7 +23,16 @@ "1": "ultimaker3_extended_extruder_right" }, "first_start_actions": [ "DiscoverUM3Action" ], - "supported_actions": [ "DiscoverUM3Action" ] + "supported_actions": [ "DiscoverUM3Action" ], + "firmware_update_info": { + "id": 9511, + "check_urls": + [ + "http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources", + "http://software.ultimaker.com/releases/firmware/9511/stable/version.txt" + ], + "update_url": "https://ultimaker.com/firmware" + } }, "overrides": { diff --git a/resources/definitions/ultimaker_original.def.json b/resources/definitions/ultimaker_original.def.json index c961423504..6a978c47cb 100644 --- a/resources/definitions/ultimaker_original.def.json +++ b/resources/definitions/ultimaker_original.def.json @@ -8,17 +8,18 @@ "manufacturer": "Ultimaker B.V.", "weight": 4, "file_formats": "text/x-gcode", - "icon": "icon_ultimaker.png", "platform": "ultimaker_platform.stl", "has_materials": true, "has_machine_quality": true, "exclude_materials": ["generic_hips", "generic_petg", "generic_bam", "ultimaker_bam", "generic_pva", "ultimaker_pva", "generic_tough_pla", "ultimaker_tough_pla_black", "ultimaker_tough_pla_green", "ultimaker_tough_pla_red", "ultimaker_tough_pla_white"], "first_start_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel"], - "supported_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel", "UpgradeFirmware"], + "supported_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel"], "machine_extruder_trains": { "0": "ultimaker_original_extruder_0" - } + }, + "firmware_file": "MarlinUltimaker-{baudrate}.hex", + "firmware_hbk_file": "MarlinUltimaker-HBK-{baudrate}.hex" }, "overrides": { diff --git a/resources/definitions/ultimaker_original_dual.def.json b/resources/definitions/ultimaker_original_dual.def.json index 55eddba85f..999650aa28 100644 --- a/resources/definitions/ultimaker_original_dual.def.json +++ b/resources/definitions/ultimaker_original_dual.def.json @@ -8,7 +8,6 @@ "manufacturer": "Ultimaker B.V.", "weight": 4, "file_formats": "text/x-gcode", - "icon": "icon_ultimaker.png", "platform": "ultimaker_platform.stl", "has_materials": true, "has_machine_quality": true, @@ -19,8 +18,10 @@ "0": "ultimaker_original_dual_1st", "1": "ultimaker_original_dual_2nd" }, + "firmware_file": "MarlinUltimaker-{baudrate}-dual.hex", + "firmware_hbk_file": "MarlinUltimaker-HBK-{baudrate}-dual.hex", "first_start_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel"], - "supported_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel", "UpgradeFirmware"] + "supported_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel"] }, "overrides": { diff --git a/resources/definitions/ultimaker_original_plus.def.json b/resources/definitions/ultimaker_original_plus.def.json index 71aa53b2bf..bdb8a3d788 100644 --- a/resources/definitions/ultimaker_original_plus.def.json +++ b/resources/definitions/ultimaker_original_plus.def.json @@ -7,16 +7,17 @@ "manufacturer": "Ultimaker B.V.", "weight": 4, "file_formats": "text/x-gcode", - "icon": "icon_ultimaker.png", "platform": "ultimaker2_platform.obj", "platform_texture": "UltimakerPlusbackplate.png", "quality_definition": "ultimaker_original", "first_start_actions": ["UMOCheckup", "BedLevel"], - "supported_actions": ["UMOCheckup", "BedLevel", "UpgradeFirmware"], + "supported_actions": ["UMOCheckup", "BedLevel"], "machine_extruder_trains": { "0": "ultimaker_original_plus_extruder_0" - } + }, + "firmware_file": "MarlinUltimaker-UMOP-{baudrate}.hex", + "firmware_hbk_file": "MarlinUltimaker-UMOP-{baudrate}.hex" }, "overrides": { diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json index f6971d0da3..310765dbc3 100644 --- a/resources/definitions/ultimaker_s5.def.json +++ b/resources/definitions/ultimaker_s5.def.json @@ -15,7 +15,6 @@ "has_machine_quality": true, "has_materials": true, "has_machine_materials": true, - "has_variant_materials": true, "has_variant_buildplates": true, "has_variants": true, "preferred_variant_name": "AA 0.4", @@ -31,7 +30,12 @@ "first_start_actions": [ "DiscoverUM3Action" ], "supported_actions": [ "DiscoverUM3Action" ], "supports_usb_connection": false, - "weight": -1 + "weight": -1, + "firmware_update_info": { + "id": 9051, + "check_urls": ["http://software.ultimaker.com/releases/firmware/9051/stable/version.txt"], + "update_url": "https://ultimaker.com/firmware" + } }, "overrides": { @@ -64,7 +68,7 @@ "machine_end_gcode": { "default_value": "" }, "prime_tower_position_x": { "default_value": 345 }, "prime_tower_position_y": { "default_value": 222.5 }, - "prime_blob_enable": { "enabled": true }, + "prime_blob_enable": { "enabled": true, "default_value": false }, "speed_travel": { @@ -128,6 +132,7 @@ "retraction_min_travel": { "value": "5" }, "retraction_prime_speed": { "value": "15" }, "skin_overlap": { "value": "10" }, + "speed_equalize_flow_enabled": { "value": "True" }, "speed_layer_0": { "value": "20" }, "speed_prime_tower": { "value": "speed_topbottom" }, "speed_print": { "value": "35" }, @@ -146,6 +151,7 @@ "switch_extruder_prime_speed": { "value": "15" }, "switch_extruder_retraction_amount": { "value": "8" }, "top_bottom_thickness": { "value": "1" }, + "travel_avoid_supports": { "value": "True" }, "travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" }, "wall_0_inset": { "value": "0" }, "wall_line_width_x": { "value": "round(line_width * 0.3 / 0.35, 2)" }, diff --git a/resources/definitions/uni_print_3d.def.json b/resources/definitions/uni_print_3d.def.json index 1612c1bf80..427177176a 100644 --- a/resources/definitions/uni_print_3d.def.json +++ b/resources/definitions/uni_print_3d.def.json @@ -26,11 +26,6 @@ "machine_center_is_zero": { "default_value": true }, "machine_nozzle_heat_up_speed": { "default_value": 2.0 }, "machine_nozzle_cool_down_speed": { "default_value": 2.0 }, - "machine_head_shape_min_x": { "default_value": 75 }, - "machine_head_shape_min_y": { "default_value": 18 }, - "machine_head_shape_max_x": { "default_value": 18 }, - "machine_head_shape_max_y": { "default_value": 35 }, - "machine_nozzle_gantry_distance": { "default_value": 55 }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { diff --git a/resources/definitions/uniqbot_one.def.json b/resources/definitions/uniqbot_one.def.json index 396e9687b8..5a33500b75 100644 --- a/resources/definitions/uniqbot_one.def.json +++ b/resources/definitions/uniqbot_one.def.json @@ -6,7 +6,6 @@ "author": "Unimatech", "manufacturer": "Unimatech", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2.png", "machine_extruder_trains": { "0": "uniqbot_one_extruder_0" diff --git a/resources/definitions/vertex_delta_k8800.def.json b/resources/definitions/vertex_delta_k8800.def.json index 7059c2e7f0..df24bd84fb 100644 --- a/resources/definitions/vertex_delta_k8800.def.json +++ b/resources/definitions/vertex_delta_k8800.def.json @@ -30,27 +30,9 @@ "machine_shape": { "default_value": "elliptic" }, - "machine_head_shape_min_x": { - "default_value": 0 - }, - "machine_head_shape_min_y": { - "default_value": 0 - }, - "machine_head_shape_max_x": { - "default_value": 0 - }, - "machine_head_shape_max_y": { - "default_value": 0 - }, "gantry_height": { "default_value": 0 }, - "machine_nozzle_offset_x_1": { - "default_value": 0 - }, - "machine_nozzle_offset_y_1": { - "default_value": 0 - }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, diff --git a/resources/definitions/vertex_k8400.def.json b/resources/definitions/vertex_k8400.def.json index 0166729951..a3a3777547 100644 --- a/resources/definitions/vertex_k8400.def.json +++ b/resources/definitions/vertex_k8400.def.json @@ -6,7 +6,6 @@ "visible": true, "manufacturer": "Velleman", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "platform": "Vertex_build_panel.stl", "platform_offset": [0, -3, 0], "supports_usb_connection": true, diff --git a/resources/definitions/vertex_k8400_dual.def.json b/resources/definitions/vertex_k8400_dual.def.json index b22dabaa94..c7706135bd 100644 --- a/resources/definitions/vertex_k8400_dual.def.json +++ b/resources/definitions/vertex_k8400_dual.def.json @@ -6,7 +6,6 @@ "visible": true, "manufacturer": "Velleman", "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", "platform": "Vertex_build_panel.stl", "platform_offset": [0, -3, 0], "machine_extruder_trains": { diff --git a/resources/definitions/wanhao_d4s.def.json b/resources/definitions/wanhao_d4s.def.json index 1ae16a9d56..c1807923c6 100644 --- a/resources/definitions/wanhao_d4s.def.json +++ b/resources/definitions/wanhao_d4s.def.json @@ -7,7 +7,6 @@ "author": "Ricardo Snoek", "manufacturer": "Wanhao", "file_formats": "text/x-gcode", - "icon": "wanhao-icon.png", "has_materials": true, "platform": "wanhao_225_145_platform.obj", "platform_texture": "Wanhaobackplate.png", @@ -40,10 +39,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/wanhao_d6.def.json b/resources/definitions/wanhao_d6.def.json index 6164f4d016..c8a690d02c 100644 --- a/resources/definitions/wanhao_d6.def.json +++ b/resources/definitions/wanhao_d6.def.json @@ -7,7 +7,6 @@ "author": "Ricardo Snoek", "manufacturer": "Wanhao", "file_formats": "text/x-gcode", - "icon": "wanhao-icon.png", "has_materials": true, "platform": "wanhao_200_200_platform.obj", "platform_texture": "Wanhaobackplate.png", @@ -18,9 +17,6 @@ 0, -28, 0 - ], - "supported_actions": [ - "UpgradeFirmware" ] }, "overrides": { @@ -46,10 +42,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/wanhao_d6_plus.def.json b/resources/definitions/wanhao_d6_plus.def.json index 04cb6fae9f..b3b5ed9b0a 100644 --- a/resources/definitions/wanhao_d6_plus.def.json +++ b/resources/definitions/wanhao_d6_plus.def.json @@ -7,7 +7,6 @@ "author": "Ricardo Snoek", "manufacturer": "Wanhao", "file_formats": "text/x-gcode", - "icon": "wanhao-icon.png", "has_materials": true, "platform": "wanhao_200_200_platform.obj", "platform_texture": "Wanhaobackplate.png", @@ -40,10 +39,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/wanhao_d9.def.json b/resources/definitions/wanhao_d9.def.json new file mode 100644 index 0000000000..4e368f970f --- /dev/null +++ b/resources/definitions/wanhao_d9.def.json @@ -0,0 +1,41 @@ +{ + "version": 2, + "name": "Wanhao Duplicator 9", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "manufacturer": "Wanhao", + "file_formats": "text/x-gcode", + "has_materials": true, + "platform": "wanhao_300_300_platform.obj", + "platform_texture": "Wanhaobackplate.png", + "machine_extruder_trains": { + "0": "wanhao_d9_extruder_0" + }, + "platform_offset": [ 0, -55, 0] + }, + + "overrides": { + "machine_name": { "default_value": "Wanhao Duplicator 9" }, + "machine_width": { "default_value": 300 }, + "machine_height": { "default_value": 400 }, + "machine_depth": { "default_value": 300 }, + "machine_heated_bed": { "default_value": true }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, + "machine_start_gcode": { + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + }, + "machine_end_gcode": { + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + }, + "support_angle": { "default_value": 60 }, + "support_enable": { "default_value": true }, + "layer_height_0": { "default_value": 0.15 }, + "top_thickness": { "default_value": 0.6 }, + "material_print_temperature": { "default_value": 190 }, + "layer_height": { "default_value": 0.2 }, + "speed_print": { "default_value": 30 }, + "adhesion_type": { "default_value": "raft" }, + "support_z_distance": { "default_value": 0.22 } + } +} diff --git a/resources/definitions/wanhao_duplicator5S.def.json b/resources/definitions/wanhao_duplicator5S.def.json index 1ccc867876..b27a13fda8 100644 --- a/resources/definitions/wanhao_duplicator5S.def.json +++ b/resources/definitions/wanhao_duplicator5S.def.json @@ -7,7 +7,6 @@ "author": "Ricardo Snoek", "manufacturer": "Wanhao", "file_formats": "text/x-gcode", - "icon": "wanhao-icon.png", "has_materials": true, "platform": "wanhao_300_200_platform.obj", "platform_texture": "Wanhaobackplate.png", @@ -43,10 +42,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/wanhao_duplicator5Smini.def.json b/resources/definitions/wanhao_duplicator5Smini.def.json index 774360f41e..e3ef0b92fe 100644 --- a/resources/definitions/wanhao_duplicator5Smini.def.json +++ b/resources/definitions/wanhao_duplicator5Smini.def.json @@ -7,7 +7,6 @@ "author": "Ricardo Snoek", "manufacturer": "Wanhao", "file_formats": "text/x-gcode", - "icon": "wanhao-icon.png", "has_materials": true, "platform": "wanhao_300_200_platform.obj", "platform_texture": "Wanhaobackplate.png", @@ -40,10 +39,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/wanhao_i3.def.json b/resources/definitions/wanhao_i3.def.json index c349259cad..42b19c8748 100644 --- a/resources/definitions/wanhao_i3.def.json +++ b/resources/definitions/wanhao_i3.def.json @@ -7,7 +7,6 @@ "author": "Ricardo Snoek", "manufacturer": "Wanhao", "file_formats": "text/x-gcode", - "icon": "wanhao-icon.png", "has_materials": true, "platform": "wanhao_200_200_platform.obj", "platform_texture": "Wanhaobackplate.png", @@ -40,10 +39,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/wanhao_i3mini.def.json b/resources/definitions/wanhao_i3mini.def.json index 4531483459..0c70391c27 100644 --- a/resources/definitions/wanhao_i3mini.def.json +++ b/resources/definitions/wanhao_i3mini.def.json @@ -7,7 +7,6 @@ "author": "Ricardo Snoek", "manufacturer": "Wanhao", "file_formats": "text/x-gcode", - "icon": "wanhao-icon.png", "has_materials": true, "platform": "wanhao_110_110_platform.obj", "platform_texture": "Wanhaobackplate.png", @@ -40,10 +39,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/wanhao_i3plus.def.json b/resources/definitions/wanhao_i3plus.def.json index 5338fbeea2..e454a40ae1 100644 --- a/resources/definitions/wanhao_i3plus.def.json +++ b/resources/definitions/wanhao_i3plus.def.json @@ -7,7 +7,6 @@ "author": "Ricardo Snoek", "manufacturer": "Wanhao", "file_formats": "text/x-gcode", - "icon": "wanhao-icon.png", "has_materials": true, "platform": "wanhao_200_200_platform.obj", "platform_texture": "Wanhaobackplate.png", @@ -40,10 +39,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/z-bolt_classic.def.json b/resources/definitions/z-bolt_classic.def.json new file mode 100644 index 0000000000..d294de473a --- /dev/null +++ b/resources/definitions/z-bolt_classic.def.json @@ -0,0 +1,59 @@ +{ + "version": 2, + "name": "Z-Bolt Classic", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Z-Bolt", + "manufacturer": "Z-Bolt Co.", + "file_formats": "text/x-gcode", + "platform": "z-bolt_classic_platform.stl", + "machine_extruder_trains": + { + "0": "z-bolt_extruder_0" + } + }, + + "overrides": { + "machine_name": { "default_value": "Z-Bolt Classic" }, + "machine_heated_bed": { + "default_value": true + }, + "machine_width": { + "default_value": 200 + }, + "machine_height": { + "default_value": 240 + }, + "machine_depth": { + "default_value": 200 + }, + "machine_center_is_zero": { + "default_value": false + }, + "machine_head_with_fans_polygon": + { + "default_value": [ + [ -75, 35 ], + [ -75, -18 ], + [ 18, 35 ], + [ 18, -18 ] + ] + }, + "gantry_height": { + "default_value": 55 + }, + "machine_use_extruder_offset_to_offset_coords": { + "default_value": true + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "machine_start_gcode": { + "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E6 ;extrude 6 mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." + }, + "machine_end_gcode": { + "default_value": "'M104 S0 ;extruder heater off' + ('\nM140 S0 ;heated bed heater off' if machine_heated_bed else '') + '\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 Z0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning'" + } + } +} \ No newline at end of file diff --git a/resources/definitions/z-bolt_plus.def.json b/resources/definitions/z-bolt_plus.def.json new file mode 100644 index 0000000000..57331df4c6 --- /dev/null +++ b/resources/definitions/z-bolt_plus.def.json @@ -0,0 +1,59 @@ +{ + "version": 2, + "name": "Z-Bolt Plus", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Z-Bolt", + "manufacturer": "Z-Bolt Co.", + "file_formats": "text/x-gcode", + "platform": "z-bolt_plus_platform.stl", + "machine_extruder_trains": + { + "0": "z-bolt_extruder_0" + } + }, + + "overrides": { + "machine_name": { "default_value": "Z-Bolt Plus" }, + "machine_heated_bed": { + "default_value": true + }, + "machine_width": { + "default_value": 300 + }, + "machine_height": { + "default_value": 335 + }, + "machine_depth": { + "default_value": 200 + }, + "machine_center_is_zero": { + "default_value": false + }, + "machine_head_with_fans_polygon": + { + "default_value": [ + [ -75, 35 ], + [ -75, -18 ], + [ 18, 35 ], + [ 18, -18 ] + ] + }, + "gantry_height": { + "default_value": 55 + }, + "machine_use_extruder_offset_to_offset_coords": { + "default_value": true + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "machine_start_gcode": { + "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E6 ;extrude 6 mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." + }, + "machine_end_gcode": { + "default_value": "'M104 S0 ;extruder heater off' + ('\nM140 S0 ;heated bed heater off' if machine_heated_bed else '') + '\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 Z0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning'" + } + } +} \ No newline at end of file diff --git a/resources/extruders/alfawise_u20_extruder_0.def.json b/resources/extruders/alfawise_u20_extruder_0.def.json new file mode 100644 index 0000000000..2fbe3f1772 --- /dev/null +++ b/resources/extruders/alfawise_u20_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "alfawise_u20_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "alfawise_u20", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} \ No newline at end of file diff --git a/resources/extruders/alfawise_u30_extruder_0.def.json b/resources/extruders/alfawise_u30_extruder_0.def.json new file mode 100644 index 0000000000..37f59eb567 --- /dev/null +++ b/resources/extruders/alfawise_u30_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "alfawise_u30_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "alfawise_u30", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/alya3dp_extruder_0.def.json b/resources/extruders/alya3dp_extruder_0.def.json index e34db5dfbf..3676f01ad2 100644 --- a/resources/extruders/alya3dp_extruder_0.def.json +++ b/resources/extruders/alya3dp_extruder_0.def.json @@ -11,6 +11,6 @@ "overrides": { "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 2.85 } + "material_diameter": { "default_value": 1.75 } } } diff --git a/resources/extruders/anycubic_4max_extruder_0.def.json b/resources/extruders/anycubic_4max_extruder_0.def.json new file mode 100644 index 0000000000..5c2ab8d479 --- /dev/null +++ b/resources/extruders/anycubic_4max_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "anycubic_4max_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "anycubic_4max", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/bibo2_dual_extruder_0.def.json b/resources/extruders/bibo2_dual_extruder_0.def.json new file mode 100644 index 0000000000..f83801fa0c --- /dev/null +++ b/resources/extruders/bibo2_dual_extruder_0.def.json @@ -0,0 +1,46 @@ +{ + "id": "BIBO1", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "BIBO2 dual", + "position": "0" + }, + "overrides": { + "extruder_nr": { + "default_value": 0, + "maximum_value": "1" + }, + "material_diameter": { + "default_value": 1.75 + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "machine_nozzle_offset_x": { + "default_value": 0.0 + }, + "machine_nozzle_offset_y": { + "default_value": 0.0 + }, + "machine_extruder_start_pos_abs": { + "default_value": true + }, + "machine_extruder_start_pos_x": { + "value": "prime_tower_position_x" + }, + "machine_extruder_start_pos_y": { + "value": "prime_tower_position_y" + }, + "machine_extruder_end_pos_abs": { + "default_value": true + }, + "machine_extruder_end_pos_x": { + "value": "prime_tower_position_x" + }, + "machine_extruder_end_pos_y": { + "value": "prime_tower_position_y" + } + } +} diff --git a/resources/extruders/bibo2_dual_extruder_1.def.json b/resources/extruders/bibo2_dual_extruder_1.def.json new file mode 100644 index 0000000000..5f479ba54b --- /dev/null +++ b/resources/extruders/bibo2_dual_extruder_1.def.json @@ -0,0 +1,46 @@ +{ + "id": "BIBO2", + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "BIBO2 dual", + "position": "1" + }, + "overrides": { + "extruder_nr": { + "default_value": 1, + "maximum_value": "1" + }, + "material_diameter": { + "default_value": 1.75 + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "machine_nozzle_offset_x": { + "default_value": 0.0 + }, + "machine_nozzle_offset_y": { + "default_value": 0.0 + }, + "machine_extruder_start_pos_abs": { + "default_value": true + }, + "machine_extruder_start_pos_x": { + "value": "prime_tower_position_x" + }, + "machine_extruder_start_pos_y": { + "value": "prime_tower_position_y" + }, + "machine_extruder_end_pos_abs": { + "default_value": true + }, + "machine_extruder_end_pos_x": { + "value": "prime_tower_position_x" + }, + "machine_extruder_end_pos_y": { + "value": "prime_tower_position_y" + } + } +} diff --git a/resources/extruders/builder_premium_large_front.def.json b/resources/extruders/builder_premium_large_front.def.json index 059f7ef8a7..4834bc8fd9 100644 --- a/resources/extruders/builder_premium_large_front.def.json +++ b/resources/extruders/builder_premium_large_front.def.json @@ -16,13 +16,13 @@ "machine_nozzle_offset_x": { "default_value": 0.0 }, "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, - - "machine_extruder_start_pos_abs": { "default_value": true }, + + "machine_extruder_start_pos_abs": { "default_value": true }, "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, "machine_extruder_end_pos_abs": { "default_value": true }, "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, - "extruder_prime_pos_abs": { "default_value": true } + "extruder_prime_pos_abs": { "default_value": true } } } diff --git a/resources/extruders/builder_premium_large_rear.def.json b/resources/extruders/builder_premium_large_rear.def.json index 769178a8b4..f257749ea4 100644 --- a/resources/extruders/builder_premium_large_rear.def.json +++ b/resources/extruders/builder_premium_large_rear.def.json @@ -20,9 +20,9 @@ "machine_extruder_start_pos_abs": { "default_value": true }, "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, - "machine_extruder_end_pos_abs": { "default_value": true }, + "machine_extruder_end_pos_abs": { "default_value": true }, "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, - "extruder_prime_pos_abs": { "default_value": true } + "extruder_prime_pos_abs": { "default_value": true } } } diff --git a/resources/extruders/builder_premium_medium_front.def.json b/resources/extruders/builder_premium_medium_front.def.json index bd735fbe25..05dcb3d49f 100644 --- a/resources/extruders/builder_premium_medium_front.def.json +++ b/resources/extruders/builder_premium_medium_front.def.json @@ -16,13 +16,13 @@ "machine_nozzle_offset_x": { "default_value": 0.0 }, "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, - - "machine_extruder_start_pos_abs": { "default_value": true }, + + "machine_extruder_start_pos_abs": { "default_value": true }, "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, "machine_extruder_end_pos_abs": { "default_value": true }, "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, - "extruder_prime_pos_abs": { "default_value": true } + "extruder_prime_pos_abs": { "default_value": true } } } diff --git a/resources/extruders/builder_premium_medium_rear.def.json b/resources/extruders/builder_premium_medium_rear.def.json index 59e688ff71..3461e07f09 100644 --- a/resources/extruders/builder_premium_medium_rear.def.json +++ b/resources/extruders/builder_premium_medium_rear.def.json @@ -20,9 +20,9 @@ "machine_extruder_start_pos_abs": { "default_value": true }, "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, - "machine_extruder_end_pos_abs": { "default_value": true }, + "machine_extruder_end_pos_abs": { "default_value": true }, "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, - "extruder_prime_pos_abs": { "default_value": true } + "extruder_prime_pos_abs": { "default_value": true } } } diff --git a/resources/extruders/builder_premium_small_front.def.json b/resources/extruders/builder_premium_small_front.def.json index 17fb914a42..7a1c352c73 100644 --- a/resources/extruders/builder_premium_small_front.def.json +++ b/resources/extruders/builder_premium_small_front.def.json @@ -16,13 +16,13 @@ "machine_nozzle_offset_x": { "default_value": 0.0 }, "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, - - "machine_extruder_start_pos_abs": { "default_value": true }, + + "machine_extruder_start_pos_abs": { "default_value": true }, "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, "machine_extruder_end_pos_abs": { "default_value": true }, "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, - "extruder_prime_pos_abs": { "default_value": true } + "extruder_prime_pos_abs": { "default_value": true } } } diff --git a/resources/extruders/builder_premium_small_rear.def.json b/resources/extruders/builder_premium_small_rear.def.json index 70a2dbf1aa..7085236a5c 100644 --- a/resources/extruders/builder_premium_small_rear.def.json +++ b/resources/extruders/builder_premium_small_rear.def.json @@ -20,9 +20,9 @@ "machine_extruder_start_pos_abs": { "default_value": true }, "machine_extruder_start_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_start_pos_y": { "value": "prime_tower_position_y" }, - "machine_extruder_end_pos_abs": { "default_value": true }, + "machine_extruder_end_pos_abs": { "default_value": true }, "machine_extruder_end_pos_x": { "value": "prime_tower_position_x" }, "machine_extruder_end_pos_y": { "value": "prime_tower_position_y" }, - "extruder_prime_pos_abs": { "default_value": true } + "extruder_prime_pos_abs": { "default_value": true } } } diff --git a/resources/extruders/cocoon_create_modelmaker_extruder_0.def.json b/resources/extruders/cocoon_create_modelmaker_extruder_0.def.json new file mode 100644 index 0000000000..26d847483d --- /dev/null +++ b/resources/extruders/cocoon_create_modelmaker_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "cocoon_create_modelmaker_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "cocoon_create_modelmaker", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/cr-x_extruder_0.def.json b/resources/extruders/cr-x_extruder_0.def.json new file mode 100644 index 0000000000..8135815afb --- /dev/null +++ b/resources/extruders/cr-x_extruder_0.def.json @@ -0,0 +1,27 @@ +{ + "id": "cr-x_extruder_0", + "version": 2, + "name": "Left Extruder", + "inherits": "fdmextruder", + "metadata": { + "machine": "Creality CR-X", + "position": "0" + }, + + "overrides": { + "extruder_nr": { + "default_value": 0, + "maximum_value": "1" + }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "machine_extruder_start_code": { + "default_value": "\nT0 ;switch to extruder 1\nG92 E0 ;reset extruder distance\nG1 F2000 E93 ;load filament\nG92 E0 ;reset extruder distance\nM104 S{material_print_temperature}" + }, + "machine_extruder_end_code": { + "default_value": "\nG92 E0 ;reset extruder distance\nG1 F800 E-5 ;short retract\nG1 F2400 X295 Y265 ;move near prime tower\nG1 F2000 E-93 ;long retract for filament removal\nG92 E0 ;reset extruder distance\nG90" + } + } +} diff --git a/resources/extruders/cr-x_extruder_1.def.json b/resources/extruders/cr-x_extruder_1.def.json new file mode 100644 index 0000000000..9313f2ea78 --- /dev/null +++ b/resources/extruders/cr-x_extruder_1.def.json @@ -0,0 +1,27 @@ +{ + "id": "cr-x_extruder_1", + "version": 2, + "name": "Right Extruder", + "inherits": "fdmextruder", + "metadata": { + "machine": "Creality CR-X", + "position": "1" + }, + + "overrides": { + "extruder_nr": { + "default_value": 1, + "maximum_value": "1" + }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "machine_extruder_start_code": { + "default_value": "\nT1 ;switch to extruder 2\nG92 E0 ;reset extruder distance\nG1 F2000 E93 ;load filament\nG92 E0 ;reset extruder distance\nM104 S{material_print_temperature}" + }, + "machine_extruder_end_code": { + "default_value": "\nG92 E0 ;reset extruder distance\nG1 F800 E-5 ;short retract\nG1 F2400 X295 Y265 ;move near prime tower\nG1 F2000 E-93 ;long retract for filament removal\nG92 E0 ;reset extruder distance\nG90" + } + } +} diff --git a/resources/extruders/creality_cr10s4_extruder_0.def.json b/resources/extruders/creality_cr10s4_extruder_0.def.json index 9afe1cee35..8a40c6431f 100644 --- a/resources/extruders/creality_cr10s4_extruder_0.def.json +++ b/resources/extruders/creality_cr10s4_extruder_0.def.json @@ -11,6 +11,6 @@ "overrides": { "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 2.85 } + "material_diameter": { "default_value": 1.75 } } } diff --git a/resources/extruders/creality_cr10s5_extruder_0.def.json b/resources/extruders/creality_cr10s5_extruder_0.def.json index fed86eb2b5..98b701ae2e 100644 --- a/resources/extruders/creality_cr10s5_extruder_0.def.json +++ b/resources/extruders/creality_cr10s5_extruder_0.def.json @@ -11,6 +11,6 @@ "overrides": { "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 2.85 } + "material_diameter": { "default_value": 1.75 } } } diff --git a/resources/extruders/creality_ender3_extruder_0.def.json b/resources/extruders/creality_ender3_extruder_0.def.json new file mode 100644 index 0000000000..431366c777 --- /dev/null +++ b/resources/extruders/creality_ender3_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "creality_ender3_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "creality_ender3", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/creatable_d3_extruder_0.def.json b/resources/extruders/creatable_d3_extruder_0.def.json new file mode 100644 index 0000000000..7d45bb8e8a --- /dev/null +++ b/resources/extruders/creatable_d3_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "creatable_d3_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "Creatable_D3", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/cubicon_3dp_110f_extruder_0.def.json b/resources/extruders/cubicon_3dp_110f_extruder_0.def.json new file mode 100644 index 0000000000..9c854fd2a1 --- /dev/null +++ b/resources/extruders/cubicon_3dp_110f_extruder_0.def.json @@ -0,0 +1,27 @@ +{ + "id": "cubicon_3dp_110f_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "cubicon_3dp_110f", + "position": "0" + }, + "overrides": { + "extruder_nr": { + "default_value": 0 + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "machine_nozzle_offset_x": { + "default_value": -15 + }, + "machine_nozzle_offset_y": { + "default_value": -5 + }, + "material_diameter": { + "default_value": 1.75 + } + } +} \ No newline at end of file diff --git a/resources/extruders/cubicon_3dp_210f_extruder_0.def.json b/resources/extruders/cubicon_3dp_210f_extruder_0.def.json new file mode 100644 index 0000000000..8a8573760a --- /dev/null +++ b/resources/extruders/cubicon_3dp_210f_extruder_0.def.json @@ -0,0 +1,27 @@ +{ + "id": "cubicon_3dp_210f_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "cubicon_3dp_210f", + "position": "0" + }, + "overrides": { + "extruder_nr": { + "default_value": 0 + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "machine_nozzle_offset_x": { + "default_value": -7.25 + }, + "machine_nozzle_offset_y": { + "default_value": -5.82 + }, + "material_diameter": { + "default_value": 1.75 + } + } +} \ No newline at end of file diff --git a/resources/extruders/cubicon_3dp_310f_extruder_0.def.json b/resources/extruders/cubicon_3dp_310f_extruder_0.def.json new file mode 100644 index 0000000000..4edbbd5a6c --- /dev/null +++ b/resources/extruders/cubicon_3dp_310f_extruder_0.def.json @@ -0,0 +1,27 @@ +{ + "id": "cubicon_3dp_310f_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "cubicon_3dp_310f", + "position": "0" + }, + "overrides": { + "extruder_nr": { + "default_value": 0 + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "machine_nozzle_offset_x": { + "default_value": -15 + }, + "machine_nozzle_offset_y": { + "default_value": -5 + }, + "material_diameter": { + "default_value": 1.75 + } + } +} \ No newline at end of file diff --git a/resources/extruders/dagoma_neva_magis_extruder_0.def.json b/resources/extruders/dagoma_magis_extruder_0.def.json similarity index 90% rename from resources/extruders/dagoma_neva_magis_extruder_0.def.json rename to resources/extruders/dagoma_magis_extruder_0.def.json index 0d5fd3c9b4..0a5850f2ed 100644 --- a/resources/extruders/dagoma_neva_magis_extruder_0.def.json +++ b/resources/extruders/dagoma_magis_extruder_0.def.json @@ -3,7 +3,7 @@ "name": "Extruder 1", "inherits": "fdmextruder", "metadata": { - "machine": "dagoma_neva_magis", + "machine": "dagoma_magis", "position": "0" }, diff --git a/resources/extruders/deltabot_extruder_0.def.json b/resources/extruders/deltabot_extruder_0.def.json index 43fce74fa5..e13d6a6ee3 100644 --- a/resources/extruders/deltabot_extruder_0.def.json +++ b/resources/extruders/deltabot_extruder_0.def.json @@ -11,6 +11,6 @@ "overrides": { "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.5 }, - "material_diameter": { "default_value": 2.85 } + "material_diameter": { "default_value": 1.75 } } } diff --git a/resources/extruders/deltacomb_extruder_0.def.json b/resources/extruders/deltacomb_extruder_0.def.json old mode 100644 new mode 100755 diff --git a/resources/extruders/gmax15plus_dual_extruder_0.def.json b/resources/extruders/gmax15plus_dual_extruder_0.def.json index b490f4a40e..d3146a0576 100644 --- a/resources/extruders/gmax15plus_dual_extruder_0.def.json +++ b/resources/extruders/gmax15plus_dual_extruder_0.def.json @@ -15,10 +15,10 @@ }, "machine_nozzle_offset_x": { "default_value": 0.0 }, "machine_nozzle_offset_y": { "default_value": 0.0 }, - "machine_nozzle_size": { "default_value": 0.5 }, + "machine_nozzle_size": { "default_value": 0.5 }, "material_diameter": { "default_value": 1.75 }, - - "machine_extruder_start_pos_abs": { "default_value": true }, + + "machine_extruder_start_pos_abs": { "default_value": true }, "machine_extruder_start_pos_x": { "value": 40 }, "machine_extruder_start_pos_y": { "value": 210 }, "machine_extruder_end_pos_abs": { "default_value": true }, diff --git a/resources/extruders/gmax15plus_dual_extruder_1.def.json b/resources/extruders/gmax15plus_dual_extruder_1.def.json index ad3c628d6f..7b7354d794 100644 --- a/resources/extruders/gmax15plus_dual_extruder_1.def.json +++ b/resources/extruders/gmax15plus_dual_extruder_1.def.json @@ -15,10 +15,10 @@ }, "machine_nozzle_offset_x": { "default_value": 0.0 }, "machine_nozzle_offset_y": { "default_value": 0.0 }, - "machine_nozzle_size": { "default_value": 0.5 }, + "machine_nozzle_size": { "default_value": 0.5 }, "material_diameter": { "default_value": 1.75 }, - - "machine_extruder_start_pos_abs": { "default_value": true }, + + "machine_extruder_start_pos_abs": { "default_value": true }, "machine_extruder_start_pos_x": { "value": 40 }, "machine_extruder_start_pos_y": { "value": 210 }, "machine_extruder_end_pos_abs": { "default_value": true }, diff --git a/resources/extruders/grr_neo_extruder_0.def.json b/resources/extruders/grr_neo_extruder_0.def.json index 9fe86d9eed..6d76c90796 100644 --- a/resources/extruders/grr_neo_extruder_0.def.json +++ b/resources/extruders/grr_neo_extruder_0.def.json @@ -11,6 +11,6 @@ "overrides": { "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.5 }, - "material_diameter": { "default_value": 2.85 } + "material_diameter": { "default_value": 1.75 } } } diff --git a/resources/extruders/jgaurora_a1_extruder_0.def.json b/resources/extruders/jgaurora_a1_extruder_0.def.json new file mode 100644 index 0000000000..71742b734a --- /dev/null +++ b/resources/extruders/jgaurora_a1_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "jgaurora_a1_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "jgaurora_a1", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/jgaurora_a5_extruder_0.def.json b/resources/extruders/jgaurora_a5_extruder_0.def.json new file mode 100644 index 0000000000..fbc6ba77e6 --- /dev/null +++ b/resources/extruders/jgaurora_a5_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "jgaurora_a5_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "jgaurora_a5", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/jgaurora_z_603s_extruder_0.def.json b/resources/extruders/jgaurora_z_603s_extruder_0.def.json new file mode 100644 index 0000000000..987425b28a --- /dev/null +++ b/resources/extruders/jgaurora_z_603s_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "jgaurora_z_603s_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "jgaurora_z_603s", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/kupido_extruder_0.def.json b/resources/extruders/kupido_extruder_0.def.json index d93395e667..ef988d4fde 100644 --- a/resources/extruders/kupido_extruder_0.def.json +++ b/resources/extruders/kupido_extruder_0.def.json @@ -11,6 +11,6 @@ "overrides": { "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 2.85 } + "material_diameter": { "default_value": 1.75 } } } diff --git a/resources/extruders/makeR_pegasus_extruder_0.def.json b/resources/extruders/makeR_pegasus_extruder_0.def.json index 8d2a98340a..e37891abde 100644 --- a/resources/extruders/makeR_pegasus_extruder_0.def.json +++ b/resources/extruders/makeR_pegasus_extruder_0.def.json @@ -11,6 +11,6 @@ "overrides": { "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 2.85 } + "material_diameter": { "default_value": 1.75 } } } diff --git a/resources/extruders/maker_starter_extruder_0.def.json b/resources/extruders/maker_starter_extruder_0.def.json index 5c60e536b7..ee94250248 100644 --- a/resources/extruders/maker_starter_extruder_0.def.json +++ b/resources/extruders/maker_starter_extruder_0.def.json @@ -11,6 +11,6 @@ "overrides": { "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 2.85 } + "material_diameter": { "default_value": 1.75 } } } diff --git a/resources/extruders/monoprice_select_mini_v1_extruder_0.def.json b/resources/extruders/monoprice_select_mini_v1_extruder_0.def.json index eef47c9b6f..e4a899d7af 100644 --- a/resources/extruders/monoprice_select_mini_v1_extruder_0.def.json +++ b/resources/extruders/monoprice_select_mini_v1_extruder_0.def.json @@ -11,6 +11,6 @@ "overrides": { "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 2.85 } + "material_diameter": { "default_value": 1.75 } } } diff --git a/resources/extruders/monoprice_select_mini_v2_extruder_0.def.json b/resources/extruders/monoprice_select_mini_v2_extruder_0.def.json index e0899304dd..b727cfce1f 100644 --- a/resources/extruders/monoprice_select_mini_v2_extruder_0.def.json +++ b/resources/extruders/monoprice_select_mini_v2_extruder_0.def.json @@ -11,6 +11,6 @@ "overrides": { "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 2.85 } + "material_diameter": { "default_value": 1.75 } } } diff --git a/resources/extruders/nwa3d_a5_extruder_0.def.json b/resources/extruders/nwa3d_a5_extruder_0.def.json new file mode 100644 index 0000000000..5c3cc6a127 --- /dev/null +++ b/resources/extruders/nwa3d_a5_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "nwa3d_a5_extruder_0", + "version": 2, + "name": "Regular 0.4mm Nozzle", + "inherits": "fdmextruder", + "metadata": { + "machine": "nwa3d_a5", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/peopoly_moai_extruder_0.def.json b/resources/extruders/peopoly_moai_extruder_0.def.json index 7940002926..bbffd4ac4d 100644 --- a/resources/extruders/peopoly_moai_extruder_0.def.json +++ b/resources/extruders/peopoly_moai_extruder_0.def.json @@ -11,6 +11,9 @@ "overrides": { "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.067 }, - "material_diameter": { "default_value": 1.75 } + "material_diameter": { + "enabled": false, + "default_value": 1.75 + } } } diff --git a/resources/extruders/printrbot_play_heated_extruder_0.def.json b/resources/extruders/printrbot_play_heated_extruder_0.def.json index ba8bc5c34c..0a3eeb3d06 100644 --- a/resources/extruders/printrbot_play_heated_extruder_0.def.json +++ b/resources/extruders/printrbot_play_heated_extruder_0.def.json @@ -11,6 +11,6 @@ "overrides": { "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 2.85 } + "material_diameter": { "default_value": 1.75 } } } diff --git a/resources/extruders/tizyx_evy_extruder_0.def.JSON b/resources/extruders/tizyx_evy_extruder_0.def.JSON new file mode 100644 index 0000000000..bd3c4c9792 --- /dev/null +++ b/resources/extruders/tizyx_evy_extruder_0.def.JSON @@ -0,0 +1,18 @@ +{ + "id": "tizyx_evy_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "tizyx_evy", + "position": "0" + }, + + "overrides": { + "extruder_nr": { + "default_value": 0, + "maximum_value": "0" + }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/ultimaker_s5_extruder_left.def.json b/resources/extruders/ultimaker_s5_extruder_left.def.json index c92873b987..275f60bb31 100644 --- a/resources/extruders/ultimaker_s5_extruder_left.def.json +++ b/resources/extruders/ultimaker_s5_extruder_left.def.json @@ -17,10 +17,10 @@ "machine_nozzle_offset_y": { "default_value": 0 }, "machine_extruder_start_pos_abs": { "default_value": true }, - "machine_extruder_start_pos_x": { "default_value": 310 }, + "machine_extruder_start_pos_x": { "default_value": 330 }, "machine_extruder_start_pos_y": { "default_value": 237 }, "machine_extruder_end_pos_abs": { "default_value": true }, - "machine_extruder_end_pos_x": { "default_value": 310 }, + "machine_extruder_end_pos_x": { "default_value": 330 }, "machine_extruder_end_pos_y": { "default_value": 237 }, "machine_nozzle_head_distance": { "default_value": 2.7 }, "extruder_prime_pos_x": { "default_value": -3 }, diff --git a/resources/extruders/ultimaker_s5_extruder_right.def.json b/resources/extruders/ultimaker_s5_extruder_right.def.json index 89d62b89a4..92e08f5cc5 100644 --- a/resources/extruders/ultimaker_s5_extruder_right.def.json +++ b/resources/extruders/ultimaker_s5_extruder_right.def.json @@ -17,10 +17,10 @@ "machine_nozzle_offset_y": { "default_value": 0 }, "machine_extruder_start_pos_abs": { "default_value": true }, - "machine_extruder_start_pos_x": { "default_value": 310 }, + "machine_extruder_start_pos_x": { "default_value": 330 }, "machine_extruder_start_pos_y": { "default_value": 219 }, "machine_extruder_end_pos_abs": { "default_value": true }, - "machine_extruder_end_pos_x": { "default_value": 310 }, + "machine_extruder_end_pos_x": { "default_value": 330 }, "machine_extruder_end_pos_y": { "default_value": 219 }, "machine_nozzle_head_distance": { "default_value": 4.2 }, "extruder_prime_pos_x": { "default_value": 333 }, diff --git a/resources/extruders/wanhao_d9_extruder_0.def.json b/resources/extruders/wanhao_d9_extruder_0.def.json new file mode 100644 index 0000000000..76d501e5a2 --- /dev/null +++ b/resources/extruders/wanhao_d9_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "wanhao_d9_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "wanhao_d9", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/z-bolt_extruder_0.def.json b/resources/extruders/z-bolt_extruder_0.def.json new file mode 100644 index 0000000000..70e9f6177c --- /dev/null +++ b/resources/extruders/z-bolt_extruder_0.def.json @@ -0,0 +1,15 @@ +{ + "id": "z-bolt_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} \ No newline at end of file diff --git a/resources/i18n/cura.pot b/resources/i18n/cura.pot index 45a85a5849..1874604139 100644 --- a/resources/i18n/cura.pot +++ b/resources/i18n/cura.pot @@ -1,20 +1,20 @@ -# Cura -# Copyright (C) 2018 Ultimaker -# This file is distributed under the same license as the Cura package. -# Ruben Dulek , 2018. +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" -"Language-Team: TEAM\n" -"Language: xx_XX\n" +"Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" +"Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -58,102 +69,52 @@ msgid "" "guide

" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "" +"A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -176,7 +137,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "" @@ -198,7 +164,7 @@ msgid "Save to Removable Drive {0}" msgstr "" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "" @@ -237,7 +203,7 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "" @@ -266,8 +232,8 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "" @@ -294,115 +260,110 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "" "Connected over the network. Please approve the access request on the printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "" "Access to the printer requested. Please approve the request on the printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "" "There is an issue with the configuration of your Ultimaker, which makes it " "impossible to start the print. Please resolve this issues before continuing." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "" "There is a mismatch between the configuration or calibration of the printer " @@ -410,40 +371,55 @@ msgid "" "that are inserted in your printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "" "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, python-brace-format msgctxt "@label" msgid "" @@ -451,23 +427,23 @@ msgid "" "{remote_printcore_name}) selected for extruder {extruder_id}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "" "The PrintCores and/or materials on your printer differ from those within " @@ -475,54 +451,59 @@ msgid "" "and materials that are inserted in your printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "" "@info Don't translate {machine_name}, since it gets replaced by a printer " @@ -532,38 +513,33 @@ msgid "" "update the firmware on your printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "" - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "" @@ -577,32 +553,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "" "Allow Cura to send anonymized usage statistics to help prioritize future " @@ -615,18 +591,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "" - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -652,23 +616,24 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "" "Unable to slice with the current material as it is incompatible with the " "selected machine or configuration." msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "" @@ -676,7 +641,7 @@ msgid "" "errors: {0}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "" @@ -684,13 +649,21 @@ msgid "" "errors on one or more models: {error_labels}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "" "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "" +"Unable to slice because there are objects associated with disabled Extruder " +"%s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "" "Nothing to slice because none of the models fit the build volume. Please " @@ -698,12 +671,12 @@ msgid "" msgstr "" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "" @@ -719,29 +692,43 @@ msgid "Configure Per Model Settings" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "" +"Project file {0} contains an unknown machine type " +"{1}. Cannot import the machine. Models will be imported " +"instead." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -752,18 +739,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "" "Make sure the g-code is suitable for your printer and printer configuration " @@ -776,27 +763,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -807,79 +794,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -893,19 +880,19 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "" "The selected material is incompatible with the selected machine or " "configuration." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "" @@ -913,7 +900,7 @@ msgid "" "[%s]" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "" @@ -945,8 +932,6 @@ msgid "Export succeeded" msgstr "" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "" @@ -956,14 +941,20 @@ msgstr "" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:190 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" msgstr "" +#: /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 "" + #: /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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "" "This profile {0} contains incorrect data, could not " "import it." @@ -971,47 +962,53 @@ msgstr "" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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 "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "" -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1038,44 +1035,44 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "" "The build volume height has been reduced due to the value of the \"Print " "Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "" "Tried to restore a Cura backup that does not match your current version." @@ -1087,32 +1084,32 @@ msgid "Multiplying and placing objects" msgstr "" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "" @@ -1250,22 +1247,22 @@ msgctxt "@action:button" msgid "Send report" msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "" "@info 'width', 'depth' and 'height' are variable names that must NOT be " @@ -1273,97 +1270,97 @@ msgctxt "" msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "" "Distance from the left of the printhead to the center of the nozzle. Used to " @@ -1371,12 +1368,12 @@ msgid "" "\"One at a Time\"." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "" "Distance from the front of the printhead to the center of the nozzle. Used " @@ -1384,12 +1381,12 @@ msgid "" "printing \"One at a Time\"." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "" "Distance from the right of the printhead to the center of the nozzle. Used " @@ -1397,12 +1394,12 @@ msgid "" "printing \"One at a Time\"." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "" "Distance from the rear of the printhead to the center of the nozzle. Used to " @@ -1410,12 +1407,12 @@ msgid "" "\"One at a Time\"." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "" "The height difference between the tip of the nozzle and the gantry system (X " @@ -1423,69 +1420,79 @@ msgid "" "gantry when printing \"One at a Time\"." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "" "The nominal diameter of filament supported by the printer. The exact " "diameter will be overridden by the material and/or the profile." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "" @@ -1506,12 +1513,20 @@ msgid "" "Could not connect to the Cura Package database. Please check your connection." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1527,8 +1542,14 @@ msgctxt "@label" msgid "Author" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "" @@ -1561,17 +1582,59 @@ msgctxt "@action:button" msgid "Back" msgstr "" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "" +"You are uninstalling materials and/or profiles that are still in use. " +"Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "" @@ -1614,12 +1677,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "" @@ -1629,9 +1692,14 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 @@ -1647,48 +1715,96 @@ msgid "Changelog" msgstr "" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "" +"Firmware is the piece of software running directly on your 3D printer. This " +"firmware controls the step motors, regulates the temperature and ultimately " +"makes your printer work." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "" +"The firmware shipping with new printers works, but new versions tend to have " +"more features and improvements." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "" + +#: /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 "" + +#: /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 "" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "" @@ -1698,24 +1814,24 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "" "This printer/group is already added to Cura. Please select another printer/" "group." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your " @@ -1727,335 +1843,402 @@ msgid "" "Select your printer from the list below:" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "" "If your printer is not listed, read the network printing " "troubleshooting guide" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." +msgid "This printer is not set up to host a group of printers." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +msgid "This printer is the host for a group of %1 printers." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" +msgid "Aborted" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" +msgid "Preparing" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" +msgid "Pausing" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" +msgid "Action required" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" +msgid "Waiting for: Unavailable printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " +msgid "Waiting for: First available" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" +msgid "Waiting for: " msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" +msgid "Configuration change" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" +msgid "" +"The assigned printer, %1, requires the following configuration change(s):" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 +msgctxt "@label" +msgid "Change material %1 from %2 to %3." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:378 +msgctxt "@label" +msgid "Load %3 as material %1 (This cannot be overridden)." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:384 +msgctxt "@label" +msgid "Change build plate to %1 (This cannot be overridden)." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "" + +#: /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 "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:435 +msgctxt "@window:title" +msgid "Override configuration configuration and start print" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "" @@ -2070,17 +2253,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "" @@ -2181,53 +2364,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "" @@ -2249,13 +2432,13 @@ msgid "Create new" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "" @@ -2272,18 +2455,19 @@ msgid "Update" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "" @@ -2295,19 +2479,20 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2337,7 +2522,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "" @@ -2348,13 +2533,13 @@ msgid "Mode" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "" @@ -2416,41 +2601,6 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "" -"Firmware is the piece of software running directly on your 3D printer. This " -"firmware controls the step motors, regulates the temperature and ultimately " -"makes your printer work." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "" -"The firmware shipping with new printers works, but new versions tend to have " -"more features and improvements." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" @@ -2600,27 +2750,11 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2654,19 +2788,17 @@ msgid "Customized" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "" @@ -2686,103 +2818,183 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "" "The new filament diameter is set to %1 mm, which is not compatible with the " "current extruder. Do you wish to continue?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "" +"Could not import material %1: %2" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "" +"Failed to export material to %1: %2" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2819,222 +3031,222 @@ msgid "Unit" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "" "You will need to restart the application for these changes to have effect." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "" "Highlight unsupported areas of the model in red. Without support these areas " "will not print properly." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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 "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "" "Should models on the platform be moved so that they no longer intersect?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "" "An model may appear extremely small if its unit is for example in meters " "rather than millimeters. Should these models be scaled up?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "" "Should a prefix based on the printer name be added to the print job name " "automatically?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" +msgid "Always ask me this" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "" "When you have made changes to a profile and switched to a different one, a " @@ -3042,27 +3254,44 @@ msgid "" "not, or you can choose a default behaviour and never show that dialog again." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" +msgid "Profiles" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "" +"Default behavior for changed setting values when switching to a different " +"profile: " +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "" "Should anonymous data about your print be sent to Ultimaker? Note, no " @@ -3070,56 +3299,37 @@ msgid "" "stored." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "" -"Should newly loaded models be arranged on the build plate? Used in " -"conjunction with multi build plate (EXPERIMENTAL)" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3137,7 +3347,7 @@ msgid "Connection:" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "" @@ -3163,7 +3373,7 @@ msgid "Aborting print..." msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "" @@ -3178,18 +3388,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3200,18 +3398,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3232,232 +3418,202 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "" "This profile uses the defaults specified by the printer, so it has no " "settings/overrides in the list below." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "" -"Could not import material %1: %2" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "" -"Failed to export material to %1: %2" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "" @@ -3467,7 +3623,7 @@ msgctxt "@label" msgid "Profile:" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the " @@ -3476,53 +3632,53 @@ msgid "" "Click to open the profile manager." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated " @@ -3541,19 +3697,19 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "" "This setting is always shared between all extruders. Changing it here will " "change the value for all extruders." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3561,7 +3717,7 @@ msgid "" "Click to restore the value of the profile." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value " @@ -3608,7 +3764,7 @@ msgid "" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "" @@ -3666,7 +3822,7 @@ msgid "The nozzle inserted in this extruder." msgstr "" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "" @@ -3696,6 +3852,21 @@ msgid "" "when you're ready to print." msgstr "" +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3711,12 +3882,12 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "" @@ -3726,12 +3897,12 @@ msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "" @@ -3792,351 +3963,350 @@ msgid "" "G-code files cannot be modified" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "" "Recommended Print Setup

Print with the recommended settings " "for the selected printer, material and quality." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "" "Custom Print Setup

Print with finegrained control over every " "last bit of the slicing process." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" +msgid "Toggle Full Screen" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" +msgid "3D View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" +msgid "Front View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" +msgid "Top View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" +msgid "Left Side View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" +msgid "Right Side View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." +msgid "About..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" msgstr[0] "" msgstr[1] "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "" msgstr[1] "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "" msgstr[1] "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" +msgid "Select All Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" +msgid "Clear Build Plate" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 +msgctxt "@action:inmenu menubar:file" +msgid "Reload All Models" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 -msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "" @@ -4159,131 +4329,147 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" +msgid "Export Selection..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "" "Are you sure you want to start a new project? This will clear the build " "plate and any unsaved settings." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "" "We have found one or more G-Code files within the files you have selected. " @@ -4296,106 +4482,101 @@ msgctxt "@title:window" msgid "Save Project" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "" "This quality profile is not available for you current material and nozzle " "configuration. Please change these to enable this quality profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "" "A custom profile is currently active. To enable the quality slider, choose a " "default quality profile in Custom tab" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "" "You have modified some profile settings. If you want to change these go to " "custom mode." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "" "Gradual infill will gradually increase the amount of infill towards the top." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "" "Generate structures to support parts of the model which have overhangs. " "Without these structures, such parts would collapse during printing." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "" "Select which extruder to use for support. This will build up supporting " @@ -4403,19 +4584,19 @@ msgid "" "mid air." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "" "Enable printing a brim or raft. This will add a flat area around or under " "your object which is easy to cut off afterwards." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "" "Need help improving your prints?
Read the Ultimaker " @@ -4466,22 +4647,22 @@ msgctxt "@label" msgid "Printer type" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" +msgid "Use glue with this material combination" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "" @@ -4570,16 +4751,6 @@ msgctxt "name" msgid "God Mode" msgstr "" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "" - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4590,6 +4761,16 @@ msgctxt "name" msgid "Changelog" msgstr "" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "" + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." @@ -4660,16 +4841,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "" - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4780,16 +4951,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "" - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4840,6 +5001,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." diff --git a/resources/i18n/de_DE/cura.po b/resources/i18n/de_DE/cura.po index 31ce980615..3433edc5bd 100644 --- a/resources/i18n/de_DE/cura.po +++ b/resources/i18n/de_DE/cura.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"Project-Id-Version: Cura 3.6\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" +"PO-Revision-Date: 2018-09-28 14:42+0200\n" "Last-Translator: Bothof \n" "Language-Team: German\n" "Language: de_DE\n" @@ -16,7 +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.4\n" +"X-Generator: Poedit 2.0.6\n" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:22 msgctxt "@action" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "G-Code-Datei" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "GCodeWriter unterstützt keinen Nicht-Textmodus." + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "Vor dem Exportieren bitte G-Code vorbereiten." + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -55,102 +66,51 @@ msgid "" "

View print quality guide

" msgstr "

Ein oder mehrere 3D-Modelle können möglicherweise aufgrund der Modellgröße und Materialkonfiguration nicht optimal gedruckt werden:

\n

{model_names}

\n

Erfahren Sie, wie Sie die bestmögliche Druckqualität und Zuverlässigkeit sicherstellen.

\n

Leitfaden zu Druckqualität anzeigen

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Mit Doodle3D WLAN-Box drucken" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Mit Doodle3D WLAN-Box drucken" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Zu Doodle3D Connect verbinden" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Abbrechen" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Daten werden zu Doodle3D Connect gesendet" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Daten können nicht zu Doodle3D Connect gesendet werden. Ist noch ein weiterer Auftrag in Bearbeitung?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Daten werden auf Doodle3D Connect gespeichert" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Datei wurde zu Doodle3D Connect gesendet" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Connect wird geöffnet ..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Doodle3D Connect Web-Schnittstelle öffnen" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Änderungsprotokoll anzeigen" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "Firmware aktualisieren" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Einstellungen Glätten aktiv" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Das Profil wurde geglättet und aktiviert." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USB-Drucken" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Über USB drucken" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Über USB drucken" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "Über USB verbunden" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "Ein USB-Druck wird ausgeführt. Das Schließen von Cura beendet diesen Druck. Sind Sie sicher?" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -173,7 +133,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Komprimierte G-Code-Datei" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "GCodeWriter unterstützt keinen Textmodus." + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "Ultimaker Format Package" @@ -195,7 +160,7 @@ msgid "Save to Removable Drive {0}" msgstr "Auf Wechseldatenträger speichern {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Es sind keine Dateiformate zum Schreiben vorhanden!" @@ -234,7 +199,7 @@ msgstr "Konnte nicht auf dem Wechseldatenträger gespeichert werden {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "Fehler" @@ -263,8 +228,8 @@ msgstr "Wechseldatenträger auswerfen {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "Warnhinweis" @@ -291,259 +256,269 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Wechseldatenträger" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Drucken über Netzwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Drücken über Netzwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "Über Netzwerk verbunden." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "Über Netzwerk verbunden. Geben Sie die Zugriffsanforderung für den Drucker frei." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "Über Netzwerk verbunden. Kein Zugriff auf die Druckerverwaltung." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "Zugriff auf Drucker erforderlich. Bestätigen Sie den Zugriff auf den Drucker" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "Authentifizierungsstatus" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "Authentifizierungsstatus" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "Erneut versuchen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Zugriffanforderung erneut senden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Zugriff auf den Drucker genehmigt" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "Kein Zugriff auf das Drucken mit diesem Drucker. Druckauftrag kann nicht gesendet werden." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "Zugriff anfordern" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Zugriffsanforderung für den Drucker senden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Es kann kein neuer Druckauftrag gestartet werden." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." msgstr "Es liegt ein Problem mit der Konfiguration Ihres Ultimaker vor, das den Druckstart verhindert. Lösen Sie dieses Problem bitte, bevor Sie fortfahren." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Konfiguration nicht übereinstimmend" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "Möchten Sie wirklich mit der gewählten Konfiguration drucken?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Anforderungen zwischen der Druckerkonfiguration oder -kalibrierung und Cura stimmen nicht überein. Für optimale Ergebnisse schneiden Sie stets für die PrintCores und Materialien, die in Ihren Drucker eingelegt wurden." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "Das Senden neuer Aufträge ist (vorübergehend) blockiert; der vorherige Druckauftrag wird noch gesendet." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Daten werden zum Drucker gesendet" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "Daten werden gesendet" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Abbrechen" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "Kein PrintCore geladen in Steckplatz {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "Kein Material geladen in Steckplatz {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, python-brace-format msgctxt "@label" msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" msgstr "Abweichender PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) für Extruder gewählt {extruder_id}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "Abweichendes Material (Cura: {0}, Drucker: {1}) für Extruder {2} gewählt" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Synchronisieren Ihres Druckers" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Möchten Sie Ihre aktuelle Druckerkonfiguration in Cura verwenden?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Die PrintCores und/oder Materialien auf Ihrem Drucker unterscheiden sich von denen Ihres aktuellen Projekts. Für optimale Ergebnisse schneiden Sie stets für die PrintCores und Materialien, die in Ihren Drucker eingelegt wurden." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" -msgstr "Über Netzwerk verbunden." +msgstr "Über Netzwerk verbunden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "Der Druckauftrag wurde erfolgreich an den Drucker gesendet." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "Daten gesendet" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "In Monitor überwachen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "Drucker '{printer_name}' hat '{job_name}' vollständig gedrückt." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "Der Druckauftrag '{job_name}' wurde ausgeführt." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "Druck vollendet" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Anschluss über Netzwerk" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Überwachen" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "Zugriff auf Update-Informationen nicht möglich." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Für Ihren {machine_name} sind neue Funktionen verfügbar! Es wird empfohlen, ein Firmware-Update für Ihren Drucker auszuführen." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Neue Firmware für %s verfügbar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "Anleitung für die Aktualisierung" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "Zugriff auf Update-Informationen nicht möglich." - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Schichtenansicht" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" -msgstr "Cura zeigt die Schichten nicht akkurat an, wenn Wire Printing aktiviert ist." +msgstr "Cura zeigt die Schichten nicht akkurat an, wenn Wire Printing aktiviert ist" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "Simulationsansicht" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "G-Code ändern" @@ -557,32 +532,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Erstellt ein Volumen, in dem keine Stützstrukturen gedruckt werden." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura erfasst anonymisierte Nutzungsstatistiken." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "Daten werden erfasst" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "Mehr Infos" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Siehe mehr Informationen dazu, was Cura sendet." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "Zulassen" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Damit lassen Sie zu, dass Cura anonymisierte Nutzungsstatistiken sendet, um zukünftige Verbesserungen für Cura zu definieren. Einige Ihrer Präferenzen und Einstellungen, die Cura-Version und ein Hash der Modelle, die Sie slicen, werden gesendet." @@ -592,18 +567,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04-Profile" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Blender-Datei" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "Exportieren in \"{}\" Qualität nicht möglich!\nZurückgeschaltet auf \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -629,49 +592,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF-Bilddatei" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Slicing mit dem aktuellen Material nicht möglich, da es mit der gewählten Maschine oder Konfiguration nicht kompatibel ist." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "Slicing nicht möglich" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Die aktuellen Einstellungen lassen kein Schneiden (Slicing) zu. Die folgenden Einstellungen sind fehlerhaft:{0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Aufgrund der Pro-Modell-Einstellungen ist kein Schneiden (Slicing) möglich. Die folgenden Einstellungen sind für ein oder mehrere Modelle fehlerhaft: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Schneiden (Slicing) ist nicht möglich, da der Einzugsturm oder die Einzugsposition(en) ungültig ist (sind)." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "Schneiden (Slicing) ist nicht möglich, da Objekte vorhanden sind, die mit dem deaktivierten Extruder %s verbunden sind." + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Es ist kein Objekt zum Schneiden vorhanden, da keines der Modelle der Druckabmessung entspricht. Bitte die Modelle passend skalieren oder drehen." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "Schichten werden verarbeitet" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "Informationen" @@ -687,29 +657,40 @@ msgid "Configure Per Model Settings" msgstr "Pro Objekteinstellungen konfigurieren" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "Empfohlen" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "Benutzerdefiniert" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF-Datei" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "Düse" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "Projektdatei {0} enthält einen unbekannten Maschinentyp {1}. Importieren der Maschine ist nicht möglich. Stattdessen werden die Modelle importiert." + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "Projektdatei öffnen" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -720,18 +701,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G-Datei" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-Code parsen" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "G-Code-Details" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Stellen Sie sicher, dass der G-Code für Ihren Drucker und Ihre Druckerkonfiguration geeignet ist, bevor Sie die Datei senden. Der Darstellung des G-Codes ist möglicherweise nicht korrekt." @@ -742,27 +723,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Cura-Profil" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF-Datei" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Cura-Projekt 3MF-Datei" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "Fehler beim Schreiben von 3MF-Datei." + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "Upgrades wählen" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "Firmware aktualisieren" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -773,79 +754,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "Druckbett nivellieren" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "Außenwand" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "Innenwände" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "Außenhaut" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "Füllung" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "Stützstruktur-Füllung" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "Stützstruktur-Schnittstelle" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "Stützstruktur" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "Skirt" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "Bewegungen" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "Einzüge" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "Sonstige" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "Unbekannt" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Vorgeschnittene Datei {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "Login fehlgeschlagen" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Datei bereits vorhanden" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -857,23 +838,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Nicht überschrieben" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Das gewählte Material ist mit der gewählten Maschine oder Konfiguration nicht kompatibel." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Material nicht kompatibel" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "Die Einstellungen wurden passend für die aktuelle Verfügbarkeit der Extruder geändert: [%s]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "Einstellungen aktualisiert" @@ -888,7 +869,7 @@ msgstr "Export des Profils nach {0} fehlgeschlagen: !" msgid "Failed to export profile to {0}: Writer plugin reported failure." -msgstr "Export des Profils nach {0} fehlgeschlagen: Fehlermeldung von Writer-Plugin" +msgstr "Export des Profils nach {0} fehlgeschlagen: Fehlermeldung von Writer-Plugin." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:143 #, python-brace-format @@ -902,8 +883,6 @@ msgid "Export succeeded" msgstr "Export erfolgreich ausgeführt" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" @@ -911,58 +890,70 @@ msgstr "Import des Profils aus Datei {0} fehlgeschlagen: or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" msgstr "Kein benutzerdefiniertes Profil für das Importieren in Datei {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 "Import des Profils aus Datei {0} fehlgeschlagen:" + #: /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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." msgstr "Dieses Profil {0} enthält falsche Daten, Importieren nicht möglich." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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 "Die Maschine, die im Profil {0} ({1}) definiert wurde, entspricht nicht Ihrer derzeitigen Maschine ({2}). Importieren nicht möglich." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "Import des Profils aus Datei {0} fehlgeschlagen:" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Profil erfolgreich importiert {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "Datei {0} enthält kein gültiges Profil." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "Profil {0} hat einen unbekannten Dateityp oder ist beschädigt." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "Benutzerdefiniertes Profil" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Für das Profil fehlt eine Qualitätsangabe." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Es konnte keine Qualitätsangabe {0} für die vorliegende Konfiguration gefunden werden." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -989,42 +980,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Alle Dateien (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "Benutzerdefiniertes Material" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "Benutzerdefiniert" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "Die Höhe der Druckabmessung wurde aufgrund des Wertes der Einstellung „Druckreihenfolge“ reduziert, um eine Kollision der Brücke mit den gedruckten Modellen zu verhindern." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Produktabmessungen" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Konnte kein Archiv von Benutzer-Datenverzeichnis {} erstellen" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "Backup" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Versucht, ein Cura-Backup-Verzeichnis ohne entsprechende Daten oder Metadaten wiederherzustellen." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Versucht, ein Cura-Backup zu erstellen, das nicht Ihrer aktuellen Version entspricht." @@ -1035,32 +1026,32 @@ msgid "Multiplying and placing objects" msgstr "Objekte vervielfältigen und platzieren" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Objekt-Platzierung" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Innerhalb der Druckabmessung für alle Objekte konnte keine Position gefunden werden" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Neue Position für Objekte finden" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Position finden" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Kann Position nicht finden" @@ -1191,223 +1182,233 @@ msgctxt "@action:button" msgid "Send report" msgstr "Bericht senden" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Geräte werden geladen..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Die Szene wird eingerichtet..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Die Benutzeroberfläche wird geladen..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f mm" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "Es kann nur jeweils ein G-Code gleichzeitig geladen werden. Wichtige {0} werden übersprungen." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "Wenn G-Code geladen wird, kann keine weitere Datei geöffnet werden. Wichtige {0} werden übersprungen." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Das gewählte Modell war zu klein zum Laden." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Geräteeinstellungen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Drucker" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Druckereinstellungen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Breite)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Tiefe)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Höhe)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Druckbettform" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Ausgang in Mitte" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Heizbares Bett" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "G-Code-Variante" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Druckkopfeinstellungen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X min." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Abstand von der linken Seite des Druckkopfes zur Düsenmitte. Wird verwendet, um Kollisionen zwischen vorherigen Drucken und dem Druckkopf während des Druckmodus „Nacheinander“ zu vermeiden." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y min." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Abstand von der Vorderseite des Druckkopfes zur Düsenmitte. Wird verwendet, um Kollisionen zwischen vorherigen Drucken und dem Druckkopf während des Druckmodus „Nacheinander“ zu vermeiden." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X max." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Abstand von der rechten Seite des Druckkopfes zur Düsenmitte. Wird verwendet, um Kollisionen zwischen vorherigen Drucken und dem Druckkopf während des Druckmodus „Nacheinander“ zu vermeiden." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y max." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Abstand von der Rückseite des Druckkopfes zur Düsenmitte. Wird verwendet, um Kollisionen zwischen vorherigen Drucken und dem Druckkopf während des Druckmodus „Nacheinander“ zu vermeiden." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Brückenhöhe" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "Der Höhenunterschied zwischen der Düsenspitze und dem Brückensystem (X- und Y-Achsen). Wird verwendet, um Kollisionen zwischen vorherigen Drucken und der Brücke zu verhindern, wenn im Modus „Nacheinander“ gedruckt wird." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Anzahl Extruder" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "Start G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "G-Code-Befehle, die zum Start ausgeführt werden sollen." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "Ende G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "G-Code-Befehle, die am Ende ausgeführt werden sollen." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Düseneinstellungen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Düsengröße" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Kompatibler Materialdurchmesser" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "Der Nenndurchmesser des durch den Drucker unterstützten Filaments. Der exakte Durchmesser wird durch das Material und/oder das Profil überschrieben." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "X-Versatz Düse" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Y-Versatz Düse" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "Kühllüfter-Nr." + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "G-Code Extruder-Start" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "G-Code Extruder-Ende" @@ -1427,12 +1428,20 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Verbindung zur Cura Paket-Datenbank konnte nicht hergestellt werden. Bitte überprüfen Sie Ihre Verbindung." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "Plugins" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materialien" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1448,8 +1457,14 @@ msgctxt "@label" msgid "Author" msgstr "Autor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "Downloads" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "Unbekannt" @@ -1482,17 +1497,57 @@ msgctxt "@action:button" msgid "Back" msgstr "Zurück" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "Deinstallieren bestätigen" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "Sie sind dabei, Materialien und/oder Profile zu deinstallieren, die noch verwendet werden. Durch Bestätigen werden die folgenden Materialien/Profile auf ihre Standardeinstellungen zurückgesetzt." + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "Materialien" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "Profile" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "Bestätigen" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "Cura muss neu gestartet werden, um die Änderungen der Pakete zu übernehmen." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Quit Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "Community-Beiträge" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "Community-Plugins" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "Generische Materialien" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "Installiert" @@ -1535,12 +1590,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Ablehnen" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Unterstützter" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Kompatibilität" @@ -1550,10 +1605,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Pakete werden abgeholt..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Kontakt" +msgid "Website" +msgstr "Website" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "E-Mail" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1566,48 +1626,88 @@ msgid "Changelog" msgstr "Änderungsprotokoll" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "Schließen" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "Firmware aktualisieren" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "Die Firmware ist der Teil der Software, der direkt auf Ihrem 3D-Drucker läuft. Diese Firmware kontrolliert die Schrittmotoren, reguliert die Temperatur und sorgt letztlich dafür, dass Ihr Drucker funktioniert." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "Die mit neuen Druckern gelieferte Firmware funktioniert, allerdings enthalten neue Versionen üblicherweise mehr Funktionen und Verbesserungen." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "Firmware automatisch aktualisieren" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "Benutzerdefinierte Firmware hochladen" + +#: /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 "Firmware kann nicht aktualisiert werden, da keine Verbindung zum Drucker besteht." + +#: /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 "Firmware kann nicht aktualisiert werden, da die Verbindung zum Drucker die Firmware-Aktualisierung nicht unterstützt." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "Benutzerdefinierte Firmware wählen" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "Firmware-Aktualisierung" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "Die Firmware wird aktualisiert." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "Firmware-Aktualisierung abgeschlossen." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "Die Firmware-Aktualisierung ist aufgrund eines unbekannten Fehlers fehlgeschlagen." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "Die Firmware-Aktualisierung ist aufgrund eines Kommunikationsfehlers fehlgeschlagen." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "Die Firmware-Aktualisierung ist aufgrund eines Eingabe-/Ausgabefehlers fehlgeschlagen." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Die Firmware-Aktualisierung ist aufgrund von fehlender Firmware fehlgeschlagen." @@ -1617,22 +1717,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Benutzervereinbarung" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "Vorhandene Verbindung" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "Diese/r Drucker/Gruppe wurde bereits zu Cura hinzugefügt. Wählen Sie bitte eine/n andere/n Drucker/Gruppe" +msgstr "Diese/r Drucker/Gruppe wurde bereits zu Cura hinzugefügt. Wählen Sie bitte eine/n andere/n Drucker/Gruppe." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Anschluss an vernetzten Drucker" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" @@ -1640,333 +1740,395 @@ msgid "" "Select your printer from the list below:" msgstr "Um über das Netzwerk direkt auf Ihrem Drucker zu drucken, stellen Sie bitte sicher, dass der Drucker mit dem Netzwerkkabel verbunden ist oder verbinden Sie Ihren Drucker mit Ihrem WLAN-Netzwerk. Wenn Sie Cura nicht mit Ihrem Drucker verbinden, können Sie dennoch ein USB-Laufwerk für die Übertragung von G-Code-Dateien auf Ihren Drucker verwenden.\n\nWählen Sie Ihren Drucker aus der folgenden Liste:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Hinzufügen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "Bearbeiten" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Entfernen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "Aktualisieren" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Wenn Ihr Drucker nicht aufgeführt ist, lesen Sie die Anleitung für Fehlerbehebung für Netzwerkdruck" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "Typ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "Firmware-Version" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "Adresse" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Dieser Drucker ist nicht eingerichtet um eine Gruppe von Ultimaker 3 Druckern anzusteuern." +msgid "This printer is not set up to host a group of printers." +msgstr "Dieser Drucker ist nicht eingerichtet um eine Gruppe von Druckern anzusteuern." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Dieser Drucker steuert eine Gruppe von %1 Ultimaker 3 Druckern an." +msgid "This printer is the host for a group of %1 printers." +msgstr "Dieser Drucker steuert eine Gruppe von %1 Druckern an." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "Der Drucker unter dieser Adresse hat nicht reagiert." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "Verbinden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "Druckeradresse" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Geben Sie die IP-Adresse oder den Hostnamen Ihres Druckers auf dem Netzwerk ein." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "Drucken über Netzwerk" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "Druckerauswahl" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "Drucken" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 ist nicht für das Hosten einer Gruppe verbundener Ultimaker 3-Drucker eingerichtet" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "Drucken über Netzwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Drucker hinzufügen/entfernen" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" +msgstr "Druckerauswahl" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Öffnet die Seite für Druckaufträge mit Ihrem Standard-Webbrowser." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" +msgstr "Nicht verfügbar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Druckaufträge anzeigen" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" +msgstr "Nicht erreichbar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Vorb. für den Druck" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Drucken" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" msgstr "Verfügbar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Verbindung zum Drucker wurde unterbrochen" +msgid "Aborted" +msgstr "Abgebrochen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Nicht verfügbar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Unbekannt" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Deaktiviert" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Reserviert" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "Beendet" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Vorbereitung für den Druck" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 +msgctxt "@label:status" +msgid "Preparing" +msgstr "Vorbereitung" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 +msgctxt "@label:status" +msgid "Pausing" +msgstr "Wird pausiert" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 +msgctxt "@label:status" +msgid "Resuming" +msgstr "Wird fortgesetzt" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" msgid "Action required" msgstr "Handlung erforderlich" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 -msgctxt "@label:status" -msgid "Paused" -msgstr "Pausiert" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 -msgctxt "@label:status" -msgid "Resuming" -msgstr "Wird fortgesetzt ..." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 -msgctxt "@label:status" -msgid "Print aborted" -msgstr "Drucken wurde abgebrochen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Akzeptiert keine Druckaufträge" +msgid "Waiting for: Unavailable printer" +msgstr "Warten auf: Drucker nicht verfügbar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "Endet um: " +msgid "Waiting for: First available" +msgstr "Warten auf: Ersten verfügbaren" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "Druckplatte räumen" +msgid "Waiting for: " +msgstr "Warten auf: " -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Warten auf eine Konfigurationsänderung" +msgid "Configuration change" +msgstr "Konfigurationsänderung" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Druckaufträge" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "Drucken" +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "Der zugewiesene Drucker %1 erfordert die folgende(n) Konfigurationsänderung(en):" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "Der Drucker %1 wurde zugewiesen, allerdings enthält der Auftrag eine unbekannte Materialkonfiguration." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 +msgctxt "@label" +msgid "Change material %1 from %2 to %3." +msgstr "Material %1 von %2 auf %3 wechseln." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:378 +msgctxt "@label" +msgid "Load %3 as material %1 (This cannot be overridden)." +msgstr "%3 als Material %1 laden (Dies kann nicht übergangen werden)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "Print Core %1 von %2 auf %3 wechseln." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:384 +msgctxt "@label" +msgid "Change build plate to %1 (This cannot be overridden)." +msgstr "Druckplatte auf %1 wechseln (Dies kann nicht übergangen werden)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "Überschreiben" + +#: /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 "Das Starten eines Druckauftrags mit einer inkompatiblen Konfiguration kann Ihren 3D-Drucker beschädigen. Möchten Sie die Konfiguration wirklich überschreiben und %1 drucken?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:435 +msgctxt "@window:title" +msgid "Override configuration configuration and start print" +msgstr "Konfiguration überschreiben und Druck starten" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "Glas" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "Aluminium" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "Warteschlange verwalten" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "In Warteschlange" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Drucker" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "Drucken" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Drucker anzeigen" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "Drucker verwalten" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "Vorziehen" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "Löschen" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "Zurückkehren" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "Pausieren" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "Abbrechen" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "Soll dieser %1 wirklich an den Anfang der Warteschlange vorgezogen werden?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "Druckauftrag vorziehen" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "Soll %1 wirklich gelöscht werden?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "Druckauftrag löschen" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "Möchten Sie %1 wirklich abbrechen?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Drucken abbrechen" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Mit einem Drucker verbinden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "Die Druckerkonfiguration in Cura laden" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Konfiguration aktivieren" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "Die Druckerkonfiguration in Cura laden" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Farbschema" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Materialfarbe" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Linientyp" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Vorschub" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Schichtdicke" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Kompatibilitätsmodus" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Bewegungen anzeigen" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Helfer anzeigen" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Gehäuse anzeigen" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Füllung anzeigen" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Nur obere Schichten anzeigen" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "5 detaillierte Schichten oben anzeigen" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Oben/Unten" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Innenwand" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "min." -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "max." @@ -1981,17 +2143,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "Skripts Nachbearbeitung" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "Ein Skript hinzufügen" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "Einstellungen" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "Aktive Skripts Nachbearbeitung ändern" @@ -2009,7 +2171,7 @@ msgstr "Cura sendet anonyme Daten an Ultimaker, um die Druckqualität und Benutz #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:101 msgctxt "@text:window" msgid "I don't want to send these data" -msgstr "Ich möchte diese Daten nicht senden." +msgstr "Ich möchte diese Daten nicht senden" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:111 msgctxt "@text:window" @@ -2054,7 +2216,7 @@ msgstr "Breite (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:103 msgctxt "@info:tooltip" msgid "The depth in millimeters on the build plate" -msgstr "Die Tiefe der Druckplatte in Millimetern." +msgstr "Die Tiefe der Druckplatte in Millimetern" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:108 msgctxt "@action:label" @@ -2086,53 +2248,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Glättung" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Mesh-Typ" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Normales Modell" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Als Stützstruktur drucken" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Keine Überlappung mit anderen Modellen unterstützen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Einstellungen für Überlappung mit anderen Modellen bearbeiten" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Einstellungen für Füllung von anderen Modellen bearbeiten" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "Einstellungen wählen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Einstellungen für die benutzerdefinierte Anpassung dieses Modells wählen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtern..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "Alle anzeigen" @@ -2154,13 +2316,13 @@ msgid "Create new" msgstr "Neu erstellen" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Zusammenfassung – Cura-Projekt" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Druckereinstellungen" @@ -2177,18 +2339,19 @@ msgid "Update" msgstr "Aktualisierung" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Typ" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "Druckergruppe" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Profileinstellungen" @@ -2200,19 +2363,20 @@ msgstr "Wie soll der Konflikt im Profil gelöst werden?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Name" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "Nicht im Profil" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2242,7 +2406,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Wie soll der Konflikt im Material gelöst werden?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Sichtbarkeit einstellen" @@ -2253,13 +2417,13 @@ msgid "Mode" msgstr "Modus" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Sichtbare Einstellungen:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 von %2" @@ -2315,40 +2479,10 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "Gehe zur nächsten Position" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "Firmware aktualisieren" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "Die Firmware ist der Teil der Software, der direkt auf Ihrem 3D-Drucker läuft. Diese Firmware kontrolliert die Schrittmotoren, reguliert die Temperatur und sorgt letztlich dafür, dass Ihr Drucker funktioniert." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "Die mit neuen Druckern gelieferte Firmware funktioniert, allerdings enthalten neue Versionen üblicherweise mehr Funktionen und Verbesserungen." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "Firmware automatisch aktualisieren" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "Benutzerdefinierte Firmware hochladen" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "Benutzerdefinierte Firmware wählen" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" -msgstr "Wählen Sie bitte alle Upgrades für dieses Ultimaker-Original." +msgstr "Wählen Sie bitte alle Upgrades für dieses Ultimaker-Original" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:45 msgctxt "@label" @@ -2363,7 +2497,7 @@ msgstr "Drucker prüfen" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:39 msgctxt "@label" msgid "It's a good idea to do a few sanity checks on your Ultimaker. You can skip this step if you know your machine is functional" -msgstr "Sie sollten einige Sanity Checks bei Ihrem Ultimaker durchführen. Sie können diesen Schritt überspringen, wenn Sie wissen, dass Ihr Gerät funktionsfähig ist." +msgstr "Sie sollten einige Sanity Checks bei Ihrem Ultimaker durchführen. Sie können diesen Schritt überspringen, wenn Sie wissen, dass Ihr Gerät funktionsfähig ist" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:53 msgctxt "@action:button" @@ -2492,27 +2626,11 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Bitte den Ausdruck entfernen" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Pausieren" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Zurückkehren" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "Drucken abbrechen" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Drucken abbrechen" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2546,19 +2664,17 @@ msgid "Customized" msgstr "Angepasst" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Stets nachfragen" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Verwerfen und zukünftig nicht mehr nachfragen" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Übernehmen und zukünftig nicht mehr nachfragen" @@ -2578,101 +2694,179 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Neues Profil erstellen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Informationen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Änderung Durchmesser bestätigen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" msgstr "Der neue Filament-Durchmesser wurde auf %1 mm eingestellt, was nicht kompatibel mit dem aktuellen Extruder ist. Möchten Sie fortfahren?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Namen anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marke" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Materialtyp" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Farbe" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Eigenschaften" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Dichte" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Durchmesser" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Filamentkosten" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Filamentgewicht" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Filamentlänge" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Kosten pro Meter" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." -msgstr "Dieses Material ist mit %1 verknüpft und teilt sich damit einige seiner Eigenschaften" +msgstr "Dieses Material ist mit %1 verknüpft und teilt sich damit einige seiner Eigenschaften." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Material trennen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Beschreibung" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Haftungsinformationen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "Druckeinstellungen" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Aktivieren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Erstellen" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "Duplizieren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "Import" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Export" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "Drucker" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "Entfernen bestätigen" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "Möchten Sie %1 wirklich entfernen? Dies kann nicht rückgängig gemacht werden!" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Material importieren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "Material konnte nicht importiert werden %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "Material wurde erfolgreich importiert %1" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Material exportieren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "Exportieren des Materials nach %1: %2 schlug fehl" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Material erfolgreich nach %1 exportiert" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2709,289 +2903,287 @@ msgid "Unit" msgstr "Einheit" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "Allgemein" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "Schnittstelle" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "Sprache:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "Währung:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "Thema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "Die Anwendung muss neu gestartet werden, um die Änderungen zu übernehmen." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Bei Änderung der Einstellungen automatisch schneiden." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "Automatisch schneiden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "Viewport-Verhalten" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Nicht gestützte Bereiche des Modells in rot hervorheben. Ohne Support werden diese Bereiche nicht korrekt gedruckt." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "Überhang anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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 "Bewegt die Kamera, bis sich das Modell im Mittelpunkt der Ansicht befindet, wenn ein Modell ausgewählt wurde" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Zentrieren Sie die Kamera, wenn das Element ausgewählt wurde" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "Soll das standardmäßige Zoom-Verhalten von Cura umgekehrt werden?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Kehren Sie die Richtung des Kamera-Zooms um." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "Soll das Zoomen in Richtung der Maus erfolgen?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "In Mausrichtung zoomen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "Sollen Modelle auf der Plattform so verschoben werden, dass sie sich nicht länger überschneiden?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Stellen Sie sicher, dass die Modelle getrennt gehalten werden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "Sollen Modelle auf der Plattform so nach unten verschoben werden, dass sie die Druckplatte berühren?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Setzt Modelle automatisch auf der Druckplatte ab" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "Warnmeldung im G-Code-Reader anzeigen." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "Warnmeldung in G-Code-Reader" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "Soll die Schicht in den Kompatibilitätsmodus gezwungen werden?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Schichtenansicht Kompatibilitätsmodus erzwingen (Neustart erforderlich)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "Dateien öffnen und speichern" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "Sollen Modelle an das Erstellungsvolumen angepasst werden, wenn sie zu groß sind?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "Große Modelle anpassen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "Ein Modell kann extrem klein erscheinen, wenn seine Maßeinheit z. B. in Metern anstelle von Millimetern angegeben ist. Sollen diese Modelle hoch skaliert werden?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Extrem kleine Modelle skalieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "Sollten Modelle gewählt werden, nachdem sie geladen wurden?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Modelle wählen, nachdem sie geladen wurden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "Soll ein Präfix anhand des Druckernamens automatisch zum Namen des Druckauftrags hinzugefügt werden?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" -msgstr "Geräte-Präfix zu Auftragsnamen hinzufügen." +msgstr "Geräte-Präfix zu Auftragsnamen hinzufügen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Soll beim Speichern einer Projektdatei eine Zusammenfassung angezeigt werden?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Dialog Zusammenfassung beim Speichern eines Projekts anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Standardverhalten beim Öffnen einer Projektdatei" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Standardverhalten beim Öffnen einer Projektdatei: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Immer nachfragen" +msgid "Always ask me this" +msgstr "Stets nachfragen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Immer als Projekt öffnen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "Modelle immer importieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "Wenn Sie Änderungen für ein Profil vorgenommen haben und zu einem anderen Profil gewechselt sind, wird ein Dialog angezeigt, der hinterfragt, ob Sie Ihre Änderungen beibehalten möchten oder nicht; optional können Sie ein Standardverhalten wählen, sodass dieser Dialog nicht erneut angezeigt wird." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "Profil überschreiben" +msgid "Profiles" +msgstr "Profile" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "Standardverhalten für geänderte Einstellungswerte beim Wechsel zu einem anderen Profil: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "Geänderte Einstellungen immer verwerfen" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "Geänderte Einstellungen immer auf neues Profil übertragen" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "Privatsphäre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "Soll Cura bei Programmstart nach Updates suchen?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Bei Start nach Updates suchen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "Sollen anonyme Daten über Ihren Druck an Ultimaker gesendet werden? Beachten Sie, dass keine Modelle, IP-Adressen oder andere personenbezogene Daten gesendet oder gespeichert werden." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(Anonyme) Druckinformationen senden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "Mehr Informationen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "Experimentell" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Mehrfach-Druckplattenfunktion verwenden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Mehrfach-Druckplattenfunktion verwenden (Neustart erforderlich)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Sollen neu geladene Modelle auf der Druckplatte angeordnet werden? In Verbindung mit Mehrfach-Druckplatte verwenden (EXPERIMENTELL)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Keine Objekte beim Laden anordnen" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "Drucker" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Aktivieren" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3009,7 +3201,7 @@ msgid "Connection:" msgstr "Verbindung:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "Der Drucker ist nicht verbunden." @@ -3035,7 +3227,7 @@ msgid "Aborting print..." msgstr "Drucken wird abgebrochen..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "Profile" @@ -3050,18 +3242,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Duplizieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Import" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Export" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3072,18 +3252,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Profil duplizieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Entfernen bestätigen" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "Möchten Sie %1 wirklich entfernen? Dies kann nicht rückgängig gemacht werden!" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3104,228 +3272,200 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Drucker: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Geschützte Profile" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Benutzerdefinierte Profile" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Profil mit aktuellen Einstellungen/Überschreibungen aktualisieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Aktuelle Änderungen verwerfen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "Dieses Profil verwendet die vom Drucker festgelegten Standardeinstellungen, deshalb sind in der folgenden Liste keine Einstellungen/Überschreibungen enthalten." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Ihre aktuellen Einstellungen stimmen mit dem gewählten Profil überein." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Globale Einstellungen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materialien" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Erstellen" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Duplizieren" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Material importieren" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr "Material konnte nicht importiert werden %1: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "Material wurde erfolgreich importiert %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Material exportieren" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "Exportieren des Materials nach %1: %2 schlug fehl" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Material erfolgreich nach %1 exportiert" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Drucker" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "Drucker hinzufügen" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "Druckername:" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "Drucker hinzufügen" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "Unbenannt" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "Über Cura" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "Version: %1" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "Komplettlösung für den 3D-Druck mit geschmolzenem Filament." -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" msgstr "Cura wurde von Ultimaker B.V. in Zusammenarbeit mit der Community entwickelt.\nCura verwendet mit Stolz die folgenden Open Source-Projekte:" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "Grafische Benutzerschnittstelle" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "Anwendungsrahmenwerk" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "G-Code-Generator" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "Bibliothek Interprozess-Kommunikation" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "Programmiersprache" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "GUI-Rahmenwerk" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "GUI-Rahmenwerk Einbindungen" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "C/C++ Einbindungsbibliothek" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "Format Datenaustausch" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "Support-Bibliothek für wissenschaftliche Berechnung" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "Support-Bibliothek für schnelleres Rechnen" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "Support-Bibliothek für die Handhabung von STL-Dateien" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "Support-Bibliothek für die Handhabung von ebenen Objekten" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "Support-Bibliothek für die Handhabung von dreieckigen Netzen" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "Support-Bibliothek für die Analyse von komplexen Netzwerken" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "Support-Bibliothek für die Handhabung von 3MF-Dateien" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "Support-Bibliothek für Datei-Metadaten und Streaming" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "Bibliothek für serielle Kommunikation" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "Bibliothek für ZeroConf-Erkennung" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "Bibliothek für Polygon-Beschneidung" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "Bibliothek für Python HTTP" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "Schriftart" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "SVG-Symbole" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "Distributionsunabhängiges Format für Linux-Anwendungen" @@ -3335,7 +3475,7 @@ msgctxt "@label" msgid "Profile:" msgstr "Profil:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" @@ -3343,53 +3483,53 @@ msgid "" "Click to open the profile manager." msgstr "Einige Einstellungs-/Überschreibungswerte unterscheiden sich von den im Profil gespeicherten Werten.\n\nKlicken Sie, um den Profilmanager zu öffnen." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "Suchen..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Werte für alle Extruder kopieren" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Alle geänderten Werte für alle Extruder kopieren" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Diese Einstellung ausblenden" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Diese Einstellung ausblenden" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Diese Einstellung weiterhin anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Sichtbarkeit einstellen wird konfiguriert..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Alle verkleinern" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Alle vergrößern" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" @@ -3407,17 +3547,17 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Wird beeinflusst von" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "Diese Einstellung wird stets zwischen allen Extrudern geteilt. Eine Änderung ändert den Wert für alle Extruder." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "Der Wert wird von Pro-Extruder-Werten gelöst " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3425,7 +3565,7 @@ msgid "" "Click to restore the value of the profile." msgstr "Diese Einstellung hat einen vom Profil abweichenden Wert.\n\nKlicken Sie, um den Wert des Profils wiederherzustellen." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3469,7 +3609,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "Einen benutzerdefinierten G-Code-Befehl an den verbundenen Drucker senden. „Eingabe“ drücken, um den Befehl zu senden." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Extruder" @@ -3522,7 +3662,7 @@ msgid "The nozzle inserted in this extruder." msgstr "Die in diesem Extruder eingesetzte Düse." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Druckbett" @@ -3547,6 +3687,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Heizen Sie das Bett vor Druckbeginn auf. Sie können Ihren Druck während des Aufheizens weiter anpassen und müssen nicht warten, bis das Bett aufgeheizt ist, wenn Sie druckbereit sind." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "Material" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "Favoriten" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "Generisch" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3562,12 +3717,12 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "&Ansicht" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "&Kameraposition" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "&Druckplatte" @@ -3577,12 +3732,12 @@ msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "Sichtbare Einstellungen" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "Alle Einstellungen anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Sichtbarkeit einstellen verwalten..." @@ -3643,347 +3798,346 @@ msgid "" "G-code files cannot be modified" msgstr "Druckeinrichtung deaktiviert\nG-Code-Dateien können nicht geändert werden" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "00 Stunden 00 Minuten" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "Zeitangabe" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "Kostenangabe" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "%1 m" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "%1 g" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "Insgesamt:" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." msgstr "Empfohlene Druckeinrichtung

Drucken mit den empfohlenen Einstellungen für den gewählten Drucker, das gewählte Material und die gewählte Qualität." -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Benutzerdefinierte Druckeinrichtung

Druck mit Feineinstellung über jedem einzelnen Bereich des Schneidvorgangs." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Aktiver Druck" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Name des Auftrags" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Druckzeit" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Geschätzte verbleibende Zeit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "Umschalten auf Vo&llbild-Modus" +msgid "Toggle Full Screen" +msgstr "Umschalten auf Vollbild-Modus" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&Rückgängig machen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Wiederholen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Beenden" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "&3D-Ansicht" +msgid "3D View" +msgstr "3D-Ansicht" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "&Vorderansicht" +msgid "Front View" +msgstr "Vorderansicht" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "&Draufsicht" +msgid "Top View" +msgstr "Draufsicht" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "&Ansicht von links" +msgid "Left Side View" +msgstr "Ansicht von links" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "&Ansicht von rechts" +msgid "Right Side View" +msgstr "Ansicht von rechts" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Cura konfigurieren..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Drucker hinzufügen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Dr&ucker verwalten..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Materialien werden verwaltet..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Profil mit aktuellen Einstellungen/Überschreibungen aktualisieren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Aktuelle Änderungen verwerfen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." -msgstr "&Profil von aktuellen Einstellungen/Überschreibungen erstellen..." +msgstr "P&rofil von aktuellen Einstellungen/Überschreibungen erstellen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Profile verwalten..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Online-&Dokumentation anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "&Fehler melden" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "&Über..." +msgid "About..." +msgstr "Über..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "&Ausgewähltes Modell löschen" -msgstr[1] "&Ausgewählte Modelle löschen" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" +msgstr[0] "Ausgewähltes Modell löschen" +msgstr[1] "Ausgewählte Modelle löschen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Ausgewähltes Modell zentrieren" msgstr[1] "Ausgewählte Modelle zentrieren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Ausgewähltes Modell multiplizieren" msgstr[1] "Ausgewählte Modelle multiplizieren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Modell löschen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Modell auf Druckplatte ze&ntrieren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "Modelle &gruppieren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Gruppierung für Modelle aufheben" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Modelle &zusammenführen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." -msgstr "Modell &multiplizieren" +msgstr "Modell &multiplizieren..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "Alle Modelle &wählen" +msgid "Select All Models" +msgstr "Alle Modelle wählen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "Druckplatte &reinigen" +msgid "Clear Build Plate" +msgstr "Druckplatte reinigen" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 +msgctxt "@action:inmenu menubar:file" +msgid "Reload All Models" +msgstr "Alle Modelle neu laden" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 -msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "Alle Modelle neu &laden" - -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Alle Modelle an allen Druckplatten anordnen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Alle Modelle anordnen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Anordnung auswählen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Alle Modellpositionen zurücksetzen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "Alle Modell&transformationen zurücksetzen" +msgid "Reset All Model Transformations" +msgstr "Alle Modelltransformationen zurücksetzen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Datei(en) öffnen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Neues Projekt..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Engine-&Protokoll anzeigen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Konfigurationsordner anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Pakete durchsuchen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Seitenleiste vergrößern/verkleinern" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Bitte laden Sie ein 3D-Modell" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Bereit zum Slicen (Schneiden)" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Das Slicing läuft..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Bereit zum %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Slicing nicht möglich" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Slicing ist nicht verfügbar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Aktuellen Druckauftrag slicen" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Slicing-Vorgang abbrechen" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Vorbereiten" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Abbrechen" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Wählen Sie das aktive Ausgabegerät" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "Datei(en) öffnen" @@ -4003,129 +4157,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&Datei" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "&Speichern..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "&Exportieren..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "Auswahl als Datei &speichern" +msgid "Export Selection..." +msgstr "Auswahl exportieren..." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Speichern &Als" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "&Projekt speichern..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Bearbeiten" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "&Ansicht" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "&Konfiguration" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Dr&ucker" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "&Material" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Als aktiven Extruder festlegen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Extruder aktivieren" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Extruder deaktivieren" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Druckplatte" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "Er&weiterungen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&Toolbox" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "E&instellungen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "&Hilfe" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Dieses Paket wird nach einem Neustart installiert." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "Datei öffnen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "Einstellungen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "Neues Projekt" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Möchten Sie wirklich ein neues Projekt beginnen? Damit werden das Druckbett und alle nicht gespeicherten Einstellungen gelöscht." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "Cura wird geschlossen" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "Möchten Sie Cura wirklich beenden?" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "Paket installieren" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "Datei(en) öffnen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." msgstr "Es wurden eine oder mehrere G-Code-Datei(en) innerhalb der von Ihnen gewählten Dateien gefunden. Sie können nur eine G-Code-Datei auf einmal öffnen. Wenn Sie eine G-Code-Datei öffnen möchten wählen Sie bitte nur eine Datei." @@ -4135,112 +4305,107 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Projekt speichern" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Druckplatte" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extruder %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & Material" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Projektzusammenfassung beim Speichern nicht erneut anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Speichern" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Schichtdicke" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" -msgstr "Dieses Qualitätsprofil ist für Ihr aktuelles Material und Ihre derzeitige Düsenkonfiguration nicht verfügbar. Bitte ändern Sie diese, um dieses Qualitätsprofil zu aktivieren." +msgstr "Dieses Qualitätsprofil ist für Ihr aktuelles Material und Ihre derzeitige Düsenkonfiguration nicht verfügbar. Bitte ändern Sie diese, um dieses Qualitätsprofil zu aktivieren" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" -msgstr "Ein benutzerdefiniertes Profil ist derzeit aktiv. Wählen Sie ein voreingestelltes Qualitätsprofil aus der Registerkarte „Benutzerdefiniert“, um den Schieberegler für Qualität zu aktivieren." +msgstr "Ein benutzerdefiniertes Profil ist derzeit aktiv. Wählen Sie ein voreingestelltes Qualitätsprofil aus der Registerkarte „Benutzerdefiniert“, um den Schieberegler für Qualität zu aktivieren" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Druckgeschwindigkeit" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Langsamer" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Schneller" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Sie haben einige Profileinstellungen geändert. Wenn Sie diese ändern möchten, wechseln Sie in den Modus „Benutzerdefiniert“." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Füllung" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Die graduelle Füllung steigert die Menge der Füllung nach oben hin schrittweise." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "Graduell aktivieren" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "Stützstruktur generieren" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Damit werden Strukturen zur Unterstützung von Modellteilen mit Überhängen generiert. Ohne diese Strukturen würden solche Teile während des Druckvorgangs zusammenfallen." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Wählen Sie, welcher Extruder für die Unterstützung verwendet wird. Dient zum Konstruieren von Stützstrukturen unter dem Modell, damit dieses nicht absinkt oder frei schwebend gedruckt wird." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Druckplattenhaftung" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." -msgstr "Drucken eines Brim- oder Raft-Elements aktivieren. Es wird ein flacher Bereich rund um oder unter Ihrem Objekt hinzugefügt, das im Anschluss leicht abgeschnitten werden kann. " +msgstr "Drucken eines Brim- oder Raft-Elements aktivieren. Es wird ein flacher Bereich rund um oder unter Ihrem Objekt hinzugefügt, das im Anschluss leicht abgeschnitten werden kann." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Sie benötigen Hilfe für Ihre Drucke?
Lesen Sie die Ultimaker Anleitungen für Fehlerbehebung>" @@ -4287,23 +4452,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Druckertyp" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Material" -# Added after the string freeze. -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Verwenden Sie eiene Klebefolie oder Klebstoff mit dieser Materialcombination" +msgid "Use glue with this material combination" +msgstr "Für diese Materialkombination Kleber verwenden" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Kompatibilität prüfen" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Klicken Sie, um die Materialkompatibilität auf Ultimaker.com zu prüfen." @@ -4393,16 +4557,6 @@ msgctxt "name" msgid "God Mode" msgstr "Gott-Modus" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Akzeptiert den G-Code und sendet diesen über WLAN an eine Doodle3D WLAN-Box." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WLAN-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4413,6 +4567,16 @@ msgctxt "name" msgid "Changelog" msgstr "Änderungsprotokoll" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "Ermöglicht Gerätemaßnahmen für die Aktualisierung der Firmware." + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "Firmware-Aktualisierungsfunktion" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." @@ -4483,16 +4647,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Vorbereitungsstufe" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Bietet ein Bearbeitungsfenster für direkte Skriptbearbeitung." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Live-Scripting-Tool" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4506,7 +4660,7 @@ msgstr "Ausgabegerät-Plugin für Wechseldatenträger" #: UM3NetworkPrinting/plugin.json msgctxt "description" msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Verwaltet Netzwerkverbindungen zu Ultimaker 3-Druckern" +msgstr "Verwaltet Netzwerkverbindungen zu Ultimaker 3-Druckern." #: UM3NetworkPrinting/plugin.json msgctxt "name" @@ -4566,7 +4720,7 @@ msgstr "Nachbearbeitung" #: SupportEraser/plugin.json msgctxt "description" msgid "Creates an eraser mesh to block the printing of support in certain places" -msgstr "Erstellt ein Radierernetz, um den Druck von Stützstrukturen in bestimmten Positionen zu blockieren." +msgstr "Erstellt ein Radierernetz, um den Druck von Stützstrukturen in bestimmten Positionen zu blockieren" #: SupportEraser/plugin.json msgctxt "name" @@ -4603,16 +4757,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Cura-Vorgängerprofil-Reader" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Unterstützt das Öffnen der Blender-Dateien direkt in Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Blender-Integration (experimentell)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4663,6 +4807,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Upgrade von Version 2.7 auf 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "Aktualisiert Konfigurationen von Cura 3.4 auf Cura 3.5." + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "Upgrade von Version 3.4 auf 3.5" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4803,6 +4957,299 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura-Profil-Reader" +#~ msgctxt "@warning:status" +#~ msgid "Please generate G-code before saving." +#~ msgstr "Generieren Sie vor dem Speichern bitte einen G-Code." + +#~ msgctxt "@item:inmenu" +#~ msgid "Profile Assistant" +#~ msgstr "Profilassistent" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Profile Assistant" +#~ msgstr "Profilassistent" + +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "Firmware aktualisieren" + +#~ msgctxt "@label unknown material" +#~ msgid "Unknown" +#~ msgstr "Unbekannt" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "No custom profile to import in file {0}" +#~ msgstr "Kein benutzerdefiniertes Profil für das Importieren in Datei {0}" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "This profile {0} contains incorrect data, could not import it." +#~ msgstr "Dieses Profil {0} enthält falsche Daten, Importieren nicht möglich." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "Die Maschine, die im Profil {0} ({1}) definiert wurde, entspricht nicht Ihrer derzeitigen Maschine ({2}). Importieren nicht möglich." + +#~ msgctxt "@title:window" +#~ msgid "Confirm uninstall " +#~ msgstr "Deinstallieren bestätigen " + +#~ msgctxt "@label:status" +#~ msgid "Paused" +#~ msgstr "Pausiert" + +#~ msgctxt "@action:button" +#~ msgid "Previous" +#~ msgstr "Zurück" + +#~ msgctxt "@action:button" +#~ msgid "Next" +#~ msgstr "Weiter" + +#~ msgctxt "@label" +#~ msgid "Tip" +#~ msgstr "Tipp" + +#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +#~ msgid "%1m / ~ %2g / ~ %4 %3" +#~ msgstr "%1m / ~ %2g / ~ %4 %3" + +#~ msgctxt "@label Print estimates: m for meters, g for grams" +#~ msgid "%1m / ~ %2g" +#~ msgstr "%1m / ~ %2g" + +#~ msgctxt "@label" +#~ msgid "Print experiment" +#~ msgstr "Druckexperiment" + +#~ msgctxt "@label" +#~ msgid "Checklist" +#~ msgstr "Checkliste" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "Firmware aktualisieren" + +#~ msgctxt "description" +#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +#~ msgstr "Ermöglichen Sie Materialherstellern die Erstellung neuer Material- und Qualitätsprofile, indem Sie eine Drop-In-Benutzerschnittstelle verwenden." + +#~ msgctxt "name" +#~ msgid "Print Profile Assistant" +#~ msgstr "Druckprofil-Assistent" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Mit Doodle3D WLAN-Box drucken" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Mit Doodle3D WLAN-Box drucken" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Zu Doodle3D Connect verbinden" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Daten werden zu Doodle3D Connect gesendet" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Daten können nicht zu Doodle3D Connect gesendet werden. Ist noch ein weiterer Auftrag in Bearbeitung?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Daten werden auf Doodle3D Connect gespeichert" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Datei wurde zu Doodle3D Connect gesendet" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Connect wird geöffnet ..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Doodle3D Connect Web-Schnittstelle öffnen" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Blender-Datei" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Exportieren in \"{}\" Qualität nicht möglich!\n" +#~ "Zurückgeschaltet auf \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Kontakt" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Dieser Drucker ist nicht eingerichtet um eine Gruppe von Ultimaker 3 Druckern anzusteuern." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Dieser Drucker steuert eine Gruppe von %1 Ultimaker 3 Druckern an." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 ist nicht für das Hosten einer Gruppe verbundener Ultimaker 3-Drucker eingerichtet" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Drucker hinzufügen/entfernen" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Öffnet die Seite für Druckaufträge mit Ihrem Standard-Webbrowser." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Druckaufträge anzeigen" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Vorb. für den Druck" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Drucken" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Verfügbar" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Verbindung zum Drucker wurde unterbrochen" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Nicht verfügbar" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Unbekannt" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Deaktiviert" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Reserviert" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Vorbereitung für den Druck" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Drucken wurde abgebrochen" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Akzeptiert keine Druckaufträge" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Endet um: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Druckplatte räumen" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Warten auf eine Konfigurationsänderung" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Druckaufträge" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Drucker" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Drucker anzeigen" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Pausieren" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Zurückkehren" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Drucken abbrechen" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Immer nachfragen" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Profil überschreiben" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Sollen neu geladene Modelle auf der Druckplatte angeordnet werden? In Verbindung mit Mehrfach-Druckplatte verwenden (EXPERIMENTELL)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Keine Objekte beim Laden anordnen" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "Auswahl als Datei &speichern" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Speichern &Als" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "&Projekt speichern..." + +# Added after the string freeze. +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Verwenden Sie eiene Klebefolie oder Klebstoff mit dieser Materialcombination" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Akzeptiert den G-Code und sendet diesen über WLAN an eine Doodle3D WLAN-Box." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WLAN-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Bietet ein Bearbeitungsfenster für direkte Skriptbearbeitung." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Live-Scripting-Tool" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Unterstützt das Öffnen der Blender-Dateien direkt in Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Blender-Integration (experimentell)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Warnhinweis Modell-Prüfer" @@ -5070,10 +5517,6 @@ msgstr "Cura-Profil-Reader" #~ msgid "Browse plugins..." #~ msgstr "Plugins durchsuchen..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Druckplatte" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "&Plugins" @@ -5299,14 +5742,6 @@ msgstr "Cura-Profil-Reader" #~ "\n" #~ "Es tut uns leid!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Profilassistent" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Profilassistent" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Kein Material geladen" @@ -5437,14 +5872,6 @@ msgstr "Cura-Profil-Reader" #~ msgid "Configure setting visiblity..." #~ msgstr "Sichtbarkeit der Einstellung wird konfiguriert..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Automatisch: %1" @@ -5481,14 +5908,6 @@ msgstr "Cura-Profil-Reader" #~ msgid "GCode Profile Reader" #~ msgstr "G-Code-Profil-Reader" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Ermöglichen Sie Materialherstellern die Erstellung neuer Material- und Qualitätsprofile, indem Sie eine Drop-In-Benutzerschnittstelle verwenden." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Druckprofil-Assistent" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Beim Öffnen Ihrer SolidWorks Datei trat ein Fehler auf! Überprüfen Sie bitte, ob sich Ihre Datei in SolidWorks ohne Probleme öffnen lässt!" @@ -5685,10 +6104,6 @@ msgstr "Cura-Profil-Reader" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Dieser Drucker ist der Host für eine Gruppe von %1 verbundenen Ultimaker 3-Druckern" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Vorbereitung" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Fertiggestellt am: " diff --git a/resources/i18n/de_DE/fdmextruder.def.json.po b/resources/i18n/de_DE/fdmextruder.def.json.po index 697560017c..77ffa5631d 100644 --- a/resources/i18n/de_DE/fdmextruder.def.json.po +++ b/resources/i18n/de_DE/fdmextruder.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 14:25+0100\n" "Last-Translator: Bothof \n" "Language-Team: German\n" "Language: de_DE\n" @@ -166,6 +166,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "Die Z-Koordinate der Position, an der die Düse am Druckbeginn einzieht." +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "Drucklüfter Extruder" + +#: 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 "Die Anzahl der Drucklüfter für diesen Extruder. Nur vom Standardwert 0 ändern, wenn Sie für jeden Extruder einen anderen Drucklüfter verwenden." + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/de_DE/fdmprinter.def.json.po b/resources/i18n/de_DE/fdmprinter.def.json.po index d518735b72..383a7a3886 100644 --- a/resources/i18n/de_DE/fdmprinter.def.json.po +++ b/resources/i18n/de_DE/fdmprinter.def.json.po @@ -5,16 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 14:57+0200\n" "Last-Translator: Bothof \n" "Language-Team: German\n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.6\n" #: fdmprinter.def.json msgctxt "machine_settings label" @@ -80,6 +81,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "GUID des Materials. Dies wird automatisch eingestellt. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Durchmesser" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Der Durchmesser des verwendeten Filaments wird angepasst. Stellen Sie hier den Durchmesser des verwendeten Filaments ein." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -533,7 +544,7 @@ msgstr "Maximale Beschleunigung X" #: fdmprinter.def.json msgctxt "machine_max_acceleration_x description" msgid "Maximum acceleration for the motor of the X-direction" -msgstr "Die maximale Beschleunigung für den Motor der X-Richtung." +msgstr "Die maximale Beschleunigung für den Motor der X-Richtung" #: fdmprinter.def.json msgctxt "machine_max_acceleration_y label" @@ -1055,6 +1066,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Zickzack" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "Polygone oben/unten verbinden" + +#: 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 "Außenhaut-Pfade oben/unten verbinden, wenn sie nebeneinander laufen. Bei konzentrischen Mustern reduziert die Aktivierung dieser Einstellung die Durchlaufzeit erheblich. Da die Verbindungen jedoch auf halbem Weg über der Füllung erfolgen können, kann diese Funktion die Oberflächenqualität reduzieren." + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1135,6 +1156,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Der Fluss für Teile einer Innenwand wird ausgeglichen, die dort gedruckt werden, wo sich bereits eine Wand befindet." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "Mindestwandfluss" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "Minimal zulässiger Fluss als Prozentwert für eine Wandlinie. Die Wand-Überlappungskompensation reduziert den Fluss einer Wand, wenn sie nah an einer vorhandenen Wand liegt. Wände, deren Fluss unter diesem Wert liegt, werden durch eine Fahrbewegung ersetzt. Bei Verwendung dieser Einstellung müssen Sie die Wand-Überlappungskompensation aktivieren und die Außenwand vor den Innenwänden drucken." + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "Einziehen bevorzugt" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "Bei Aktivierung wird der Einzug anstelle des Combings für zurückzulegende Wege verwendet, die Wände ersetzen, deren Fluss unter der mindestens erforderlichen Flussschwelle liegt." + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1203,7 +1244,7 @@ msgstr "Justierung der Z-Naht" #: fdmprinter.def.json msgctxt "z_seam_type description" msgid "Starting point of each path in a layer. When paths in consecutive layers start at the same point a vertical seam may show on the print. When aligning these near a user specified location, the seam is easiest to remove. When placed randomly the inaccuracies at the paths' start will be less noticeable. When taking the shortest path the print will be quicker." -msgstr "Der Startdruckpunkt von jedem Teil einer Schicht. Wenn der Druck der Teile in aufeinanderfolgenden Schichten am gleichen Punkt startet, kann eine vertikale Naht sichtbar werden. Wird dieser neben einer benutzerdefinierten Position ausgerichtet, ist die Naht am einfachsten zu entfernen. Wird er zufällig platziert, fallen die Ungenauigkeiten am Startpunkt weniger auf. Wird der kürzeste Weg eingestellt, ist der Druck schneller. " +msgstr "Der Startdruckpunkt von jedem Teil einer Schicht. Wenn der Druck der Teile in aufeinanderfolgenden Schichten am gleichen Punkt startet, kann eine vertikale Naht sichtbar werden. Wird dieser neben einer benutzerdefinierten Position ausgerichtet, ist die Naht am einfachsten zu entfernen. Wird er zufällig platziert, fallen die Ungenauigkeiten am Startpunkt weniger auf. Wird der kürzeste Weg eingestellt, ist der Druck schneller." #: fdmprinter.def.json msgctxt "z_seam_type option back" @@ -1452,8 +1493,8 @@ msgstr "Füllmuster" #: 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "Das Muster des Füllmaterials des Drucks. Die Linien- und Zickzackfüllmethode wechseln nach jeder Schicht die Richtung, um Materialkosten zu reduzieren. Die Gitter-, Dreieck- Tri-Hexagon-, Würfel-, Octahedral-, Viertelwürfel-, Quer- und konzentrischen Muster werden in jeder Schicht vollständig gedruckt. Würfel-, Viertelwürfel- und Octahedral-Füllungen wechseln mit jeder Schicht, um eine gleichmäßigere Verteilung der Stärke in allen Richtungen zu erzielen." +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 "Das Muster des Füllmaterials des Drucks. Die Linien- und Zickzackfüllmethode wechseln nach jeder Schicht die Richtung, um Materialkosten zu reduzieren. Die Gitter-, Dreieck- Tri-Hexagon-, Würfel-, Octahedral-, Viertelwürfel-, Quer- und konzentrischen Muster werden in jeder Schicht vollständig gedruckt. Gyroid-, Würfel-, Viertelwürfel- und Octahedral-Füllungen wechseln mit jeder Schicht, um eine gleichmäßigere Verteilung der Stärke in allen Richtungen zu erzielen." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1500,11 +1541,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Konzentrisch" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Konzentrisch 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1520,6 +1556,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "3D-Quer" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "Gyroid" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1530,6 +1571,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Verbindet die Enden, an denen das Füllmuster auf die Innenwand trifft, mithilfe einer Linie, die der Form der Innenwand folgt. Durch Aktivierung dieser Einstellung kann die Füllung besser an den Wänden haften; auch die Auswirkungen der Füllung auf die Qualität der vertikalen Flächen werden reduziert. Die Deaktivierung dieser Einstellung reduziert den Materialverbrauch." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "Füllungspolygone verbinden" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "Verbinden Sie Füllungspfade, wenn sie nebeneinander laufen. Bei Füllungsmustern, die aus mehreren geschlossenen Polygonen bestehen, reduziert die Aktivierung dieser Einstellung die Durchlaufzeit erheblich." + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1560,6 +1611,28 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Das Füllmuster wird um diese Distanz entlang der Y-Achse verschoben." +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "Fülllinie multiplizieren" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "Konvertieren Sie jede Fülllinie in diese mehrfachen Linien. Die zusätzlichen Linien überschneiden sich nicht, sondern vermeiden sich vielmehr. Damit wird die Füllung steifer, allerdings erhöhen sich Druckzeit und Materialverbrauch." + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "Zusätzliche Füllung Wandlinien" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "Fügen Sie zusätzliche Wände um den Füllbereich hinzu. Derartige Wände können zu einem verringerten Absacken der oberen/unteren Außenhautlinien beitragen, was bedeutet, dass Sie weniger Außenhautschichten oben/unten bei derselben Qualität von Kosten für zusätzliches Material benötigen.\n Diese Funktion ist verknüpfbar mit „Füllungspolygone verbinden“, um alle Füllungen mit einem einzigen Extrusionspfad zu verbinden, ohne dass hierzu Vorwärtsbewegungen oder Rückzüge erforderlich sind, sofern die richtige Konfiguration gewählt wurde." + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1668,7 +1741,7 @@ msgstr "Mindestbereich Füllung" #: fdmprinter.def.json msgctxt "min_infill_area description" msgid "Don't generate areas of infill smaller than this (use skin instead)." -msgstr "Keine Füllungsbereiche generieren, die kleiner als dieser sind (stattdessen Außenhaut verwenden). " +msgstr "Keine Füllungsbereiche generieren, die kleiner als dieser sind (stattdessen Außenhaut verwenden)." #: fdmprinter.def.json msgctxt "infill_support_enabled label" @@ -1788,7 +1861,7 @@ msgstr "Voreingestellte Drucktemperatur" #: 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 "Die für den Druck verwendete Standardtemperatur. Dies sollte die „Basis“-Temperatur eines Materials sein. Alle anderen Drucktemperaturen sollten anhand dieses Wertes einen Versatz verwenden." +msgstr "Die für den Druck verwendete Standardtemperatur. Dies sollte die „Basis“-Temperatur eines Materials sein. Alle anderen Drucktemperaturen sollten anhand dieses Wertes einen Versatz verwenden" #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1848,7 +1921,7 @@ msgstr "Standardtemperatur Druckplatte" #: fdmprinter.def.json msgctxt "default_material_bed_temperature description" msgid "The default temperature used for the heated build plate. This should be the \"base\" temperature of a build plate. All other print temperatures should use offsets based on this value" -msgstr "Die für die erhitzte Druckplatte verwendete Standardtemperatur. Dies sollte die „Basis“-Temperatur einer Druckplatte sein. Alle anderen Drucktemperaturen sollten anhand dieses Wertes einen Versatz verwenden." +msgstr "Die für die erhitzte Druckplatte verwendete Standardtemperatur. Dies sollte die „Basis“-Temperatur einer Druckplatte sein. Alle anderen Drucktemperaturen sollten anhand dieses Wertes einen Versatz verwenden" #: fdmprinter.def.json msgctxt "material_bed_temperature label" @@ -1870,16 +1943,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "Die Temperatur, die für die erhitzte Druckplatte an der ersten Schicht verwendet wird." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Durchmesser" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Der Durchmesser des verwendeten Filaments wird angepasst. Stellen Sie hier den Durchmesser des verwendeten Filaments ein." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -1888,7 +1951,7 @@ msgstr "Haftungstendenz" #: fdmprinter.def.json msgctxt "material_adhesion_tendency description" msgid "Surface adhesion tendency." -msgstr "Oberflächenhaftungstendenz" +msgstr "Oberflächenhaftungstendenz." #: fdmprinter.def.json msgctxt "material_surface_energy label" @@ -1948,7 +2011,7 @@ msgstr "Einziehen bei Schichtänderung" #: fdmprinter.def.json msgctxt "retract_at_layer_change description" msgid "Retract the filament when the nozzle is moving to the next layer." -msgstr "Ziehen Sie das Filament ein, wenn die Düse zur nächsten Schicht fährt. " +msgstr "Ziehen Sie das Filament ein, wenn die Düse zur nächsten Schicht fährt." #: fdmprinter.def.json msgctxt "retraction_amount label" @@ -2298,7 +2361,7 @@ msgstr "Anzahl der langsamen Schichten" #: fdmprinter.def.json msgctxt "speed_slowdown_layers description" msgid "The first few layers are printed slower than the rest of the model, to get better adhesion to the build plate and improve the overall success rate of prints. The speed is gradually increased over these layers." -msgstr "Die ersten Schichten werden langsamer als der Rest des Modells gedruckt, damit sie besser am Druckbett haften und um die Wahrscheinlichkeit eines erfolgreichen Drucks zu erhöhen. Die Geschwindigkeit wird während des Druckens dieser Schichten schrittweise erhöht. " +msgstr "Die ersten Schichten werden langsamer als der Rest des Modells gedruckt, damit sie besser am Druckbett haften und um die Wahrscheinlichkeit eines erfolgreichen Drucks zu erhöhen. Die Geschwindigkeit wird während des Druckens dieser Schichten schrittweise erhöht." #: fdmprinter.def.json msgctxt "speed_equalize_flow_enabled label" @@ -2678,7 +2741,7 @@ msgstr "Ruckfunktion Druck für die erste Schicht" #: fdmprinter.def.json msgctxt "jerk_print_layer_0 description" msgid "The maximum instantaneous velocity change during the printing of the initial layer." -msgstr "Die maximale unmittelbare Geschwindigkeitsänderung während des Druckens für die erste Schicht" +msgstr "Die maximale unmittelbare Geschwindigkeitsänderung während des Druckens für die erste Schicht." #: fdmprinter.def.json msgctxt "jerk_travel_layer_0 label" @@ -2717,8 +2780,8 @@ msgstr "Combing-Modus" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "Durch Combing bleibt die Düse während der Bewegung innerhalb von bereits gedruckten Bereichen. Dies führt zu einer leicht verlängerten Bewegungszeit, reduziert jedoch die Notwendigkeit von Einzügen. Wenn Combing deaktiviert ist, wird das Material eingezogen und die Düse bewegt sich in einer geraden Linie zum nächsten Punkt. Es ist außerdem möglich, das Combing über die oberen/unteren Außenhautbereiche zu vermeiden, indem nur die Füllung berücksichtigt wird." +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "Durch Combing bleibt die Düse während der Bewegung innerhalb von bereits gedruckten Bereichen. Dies führt zu einer leicht verlängerten Bewegungszeit, reduziert jedoch die Notwendigkeit von Einzügen. Wenn Combing deaktiviert ist, wird das Material eingezogen und die Düse bewegt sich in einer geraden Linie zum nächsten Punkt. Es ist außerdem möglich, das Combing über die oberen/unteren Außenhautbereiche zu vermeiden, indem nur die Füllung berücksichtigt wird. Die Option „Innerhalb der Füllung“ verhält sich genauso wie die Option „Nicht in Außenhaut“ in früheren Cura Versionen." #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2735,6 +2798,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Nicht in Außenhaut" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "Innerhalb der Füllung" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3115,11 +3183,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Konzentrisch" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Konzentrisch 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3180,6 +3243,56 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Der Abstand zwischen den gedruckten Stützstrukturlinien. Diese Einstellung wird anhand der Dichte der Stützstruktur berechnet." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "Linienabstand der ursprünglichen Stützstruktur" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "Der Abstand zwischen der ursprünglichen gedruckten Stützstrukturlinien. Diese Einstellung wird anhand der Dichte der Stützstruktur berechnet." + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "Unterstützung Linienrichtung Füllung" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "Ausrichtung des Füllmusters für Unterstützung. Das Füllmuster für Unterstützung wird in der horizontalen Planfläche gedreht." + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "Stütz-Brim aktivieren" + +#: 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 "Erstellen Sie ein Brim in den Stützstruktur-Füllungsbereichen der ersten Schicht. Das Brim wird unterhalb der Stützstruktur und nicht drumherum gedruckt. Die Aktivierung dieser Einstellung erhöht die Haftung der Stützstruktur am Druckbett." + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "Breite der Brim-Stützstruktur" + +#: 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 "Die Breite des unter der Stützstruktur zu druckenden Brims. Ein größeres Brim erhöht die Haftung am Druckbett, jedoch erhöht sich hierdurch der Materialverbrauch." + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "Anzahl der Brim-Stützstrukturlinien" + +#: 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 "Die Anzahl der Linien für die Brim-Stützstruktur. Eine größere Anzahl von Brim-Linien verbessert die Haftung am Druckbett, jedoch erhöht sich hierdurch der Materialverbrauch." + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3470,11 +3583,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Konzentrisch" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Konzentrisch 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3510,11 +3618,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Konzentrisch" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Konzentrisch 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3550,16 +3653,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Konzentrisch" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Konzentrisch 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Zickzack" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "Lüfterdrehzahl überschreiben" + +#: 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 "Bei Aktivierung wird die Lüfterdrehzahl für die Druckkühlung für die Außenhautbereiche direkt über der Stützstruktur geändert." + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "Unterstützte Lüfterdrehzahl für Außenhaut" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "Prozentwert der Lüfterdrehzahl für die Verwendung beim Drucken der Außenhautbereiche direkt oberhalb der Stützstruktur. Die Verwendung einer hohen Lüfterdrehzahl ermöglicht ein leichteres Entfernen der Stützstruktur." + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3742,6 +3860,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "Die Anzahl der Linien für das Brim-Element. Eine größere Anzahl von Brim-Linien verbessert die Haftung am Druckbett, es wird dadurch aber auch der verwendbare Druckbereich verkleinert." +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "Brim ersetzt die Stützstruktur" + +#: 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 "Erzwingen Sie den Druck des Brims um das Modell herum, auch wenn dieser Raum sonst durch die Stützstruktur belegt würde. Dies ersetzt einige der ersten Schichten der Stützstruktur durch Brim-Bereiche." + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -3884,8 +4012,8 @@ msgstr "Die Breite der Linien in der Raft-Basisschicht. Dabei sollte es sich um #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Raft-Linienabstand" +msgid "Raft Base Line Spacing" +msgstr "Linienabstand der Raft-Basis" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4102,16 +4230,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Das Mindestvolumen für jede Schicht des Einzugsturms, um ausreichend Material zu spülen." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Dicke Einzugsturm" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "Die Dicke des Hohleinzugsturms. Eine Dicke, die mehr als die Hälfte des Mindestvolumens für den Einzugsturm beträgt, führt zu einem dichten Einzugsturm." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4152,26 +4270,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Nach dem Drucken des Einzugsturms mit einer Düse wird das ausgetretene Material von der anderen Düse am Einzugsturm abgewischt." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Düse nach dem Schalten abwischen" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Wischt nach dem Schalten des Extruders ausgetretenes Material am ersten Druckelement an der Düse ab. Hierdurch wird eine sichere, langsame Wischbewegung an einer Position ausgeführt, an der das ausgetretene Material am wenigsten Schaden an der Oberflächenqualität Ihres Drucks verursacht." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Einzugsturm Spülvolumen" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Menge des zu spülenden Filaments beim Wischen des Spülturms. Spülen ist hilfreich, um dem Filament-Verlust durch Aussickern während der Inaktivität der Düse zu kompensieren." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4657,6 +4755,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Der Materialfluss (in mm3 pro Sekunde) in Bezug zur Temperatur (Grad Celsius)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "Mindestumfang Polygon" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "Polygone in geschnittenen Schichten, die einen Umfang unter diesem Wert haben, werden ausgefiltert. Niedrigere Werte führen zu einem Mesh mit höherer Auflösung zulasten der Slicing-Zeit. Dies gilt in erster Linie für SLA-Drucker mit höherer Auflösung und sehr kleine 3D-Modelle mit zahlreichen Details." + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5314,6 +5422,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Das ist der Schwellenwert, der definiert, ob eine kleinere Schicht verwendet wird oder nicht. Dieser Wert wird mit dem der stärksten Neigung in einer Schicht verglichen." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "Winkel für überhängende Wände" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "Wände, die über diesen Winkel hinaus hängen, werden mithilfe der Einstellungen für Winkel für überhängende Wände gedruckt. Wenn der Wert 90 beträgt, werden keine Wände als überhängend behandelt." + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "Geschwindigkeit für überhängende Wände" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "Überhängende Wände werden zu diesem Prozentwert ihrer normalen Druckgeschwindigkeit gedruckt." + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5344,16 +5472,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Wenn ein Außenhautbereich für weniger als diesen Prozentwert seines Bereichs unterstützt wird, drucken Sie ihn mit den Brückeneinstellungen. Ansonsten erfolgt der Druck mit den normalen Außenhauteinstellungen." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Max. Überhang Brückenwand" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "Die maximal zulässige Breite des Luftbereichs unter einer Wandlinie vor dem Druck der Wand mithilfe der Brückeneinstellungen, ausgedrückt als Prozentwert der Wandliniendicke. Wenn der Luftspalt breiter als dieser Wert ist, wird die Wandlinie mithilfe der Brückeneinstellungen gedruckt. Ansonsten wird die Wandlinie mit den normalen Einstellungen gedruckt. Je niedriger der Wert, desto wahrscheinlicher ist es, dass Überhang-Wandlinien mithilfe der Brückeneinstellungen gedruckt werden." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5574,6 +5692,74 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Transformationsmatrix, die beim Laden aus der Datei auf das Modell angewandt wird." +#~ 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 happend midway over infill this feature can reduce the top surface quality." +#~ msgstr "Außenhaut-Pfade oben/unten verbinden, wenn sie nebeneinander laufen. Bei konzentrischen Mustern reduziert die Aktivierung dieser Einstellung die Durchlaufzeit erheblich. Da die Verbindungen jedoch auf halbem Weg über der Füllung erfolgen können, kann diese Funktion die Oberflächenqualität reduzieren." + +#~ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +#~ msgstr "Das Muster des Füllmaterials des Drucks. Die Linien- und Zickzackfüllmethode wechseln nach jeder Schicht die Richtung, um Materialkosten zu reduzieren. Die Gitter-, Dreieck- Tri-Hexagon-, Würfel-, Octahedral-, Viertelwürfel-, Quer- und konzentrischen Muster werden in jeder Schicht vollständig gedruckt. Würfel-, Viertelwürfel- und Octahedral-Füllungen wechseln mit jeder Schicht, um eine gleichmäßigere Verteilung der Stärke in allen Richtungen zu erzielen." + +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Konzentrisch 3D" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "Durch Combing bleibt die Düse während der Bewegung innerhalb von bereits gedruckten Bereichen. Dies führt zu einer leicht verlängerten Bewegungszeit, reduziert jedoch die Notwendigkeit von Einzügen. Wenn Combing deaktiviert ist, wird das Material eingezogen und die Düse bewegt sich in einer geraden Linie zum nächsten Punkt. Es ist außerdem möglich, das Combing über die oberen/unteren Außenhautbereiche zu vermeiden, indem nur die Füllung berücksichtigt wird." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Konzentrisch 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Konzentrisch 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Konzentrisch 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Konzentrisch 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Raft-Linienabstand" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Dicke Einzugsturm" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "Die Dicke des Hohleinzugsturms. Eine Dicke, die mehr als die Hälfte des Mindestvolumens für den Einzugsturm beträgt, führt zu einem dichten Einzugsturm." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Düse nach dem Schalten abwischen" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Wischt nach dem Schalten des Extruders ausgetretenes Material am ersten Druckelement an der Düse ab. Hierdurch wird eine sichere, langsame Wischbewegung an einer Position ausgeführt, an der das ausgetretene Material am wenigsten Schaden an der Oberflächenqualität Ihres Drucks verursacht." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Einzugsturm Spülvolumen" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Menge des zu spülenden Filaments beim Wischen des Spülturms. Spülen ist hilfreich, um dem Filament-Verlust durch Aussickern während der Inaktivität der Düse zu kompensieren." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Max. Überhang Brückenwand" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "Die maximal zulässige Breite des Luftbereichs unter einer Wandlinie vor dem Druck der Wand mithilfe der Brückeneinstellungen, ausgedrückt als Prozentwert der Wandliniendicke. Wenn der Luftspalt breiter als dieser Wert ist, wird die Wandlinie mithilfe der Brückeneinstellungen gedruckt. Ansonsten wird die Wandlinie mit den normalen Einstellungen gedruckt. Je niedriger der Wert, desto wahrscheinlicher ist es, dass Überhang-Wandlinien mithilfe der Brückeneinstellungen gedruckt werden." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Optimieren Sie die Reihenfolge, in der die Wände gedruckt werden, um die Anzahl der Einzüge und die zurückgelegten Distanzen zu reduzieren. Dieser Schritt bringt für die meisten Teile Vorteile, allerdings werden einige möglicherweise länger benötigen. Vergleichen Sie deshalb bitte die Schätzung der Druckzeiten mit und ohne Optimierung." diff --git a/resources/i18n/es_ES/cura.po b/resources/i18n/es_ES/cura.po index 66add367c5..e6b5867e39 100644 --- a/resources/i18n/es_ES/cura.po +++ b/resources/i18n/es_ES/cura.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" +"PO-Revision-Date: 2018-09-28 14:55+0200\n" "Last-Translator: Bothof \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "Archivo GCode" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "GCodeWriter no es compatible con el modo sin texto." + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "Prepare el Gcode antes de la exportación." + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -53,107 +64,53 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

Es posible que uno o más modelos 3D no se impriman correctamente debido al tamaño del modelo y la configuración del material:

\n" -"

{model_names}

\n" -"

Obtenga más información sobre cómo garantizar la mejor calidad y fiabilidad de impresión posible.

\n" -"

Ver guía de impresión de calidad

" +msgstr "

Es posible que uno o más modelos 3D no se impriman correctamente debido al tamaño del modelo y la configuración del material:

\n

{model_names}

\n

Obtenga más información sobre cómo garantizar la mejor calidad y fiabilidad de impresión posible.

\n

Ver guía de impresión de calidad

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimir con un enrutador Doodle3D" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimir con un enrutador Doodle3D" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Conectar con Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Cancelar" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Enviando datos a Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "No se pueden enviar datos a Doodle3D Connect. ¿Hay otro trabajo que todavía esté activo?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Guardando datos en Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Archivo enviado a Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Abrir Connect..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Abrir la interfaz web de Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Mostrar registro de cambios" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "Actualizar firmware" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Aplanar ajustes activos" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "El perfil se ha aplanado y activado." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "Impresión USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Imprimir mediante USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Imprimir mediante USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "Conectado mediante USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "Se está realizando una impresión con USB, si cierra Cura detendrá la impresión. ¿Desea continuar?" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -176,7 +133,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Archivo GCode comprimido" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "GCodeGzWriter no es compatible con el modo texto." + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "Paquete de formato Ultimaker" @@ -198,10 +160,10 @@ msgid "Save to Removable Drive {0}" msgstr "Guardar en unidad extraíble {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" -msgstr "No hay formatos de archivo disponibles con los que escribir." +msgstr "¡No hay formatos de archivo disponibles con los que escribir!" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:94 #, python-brace-format @@ -237,7 +199,7 @@ msgstr "No se pudo guardar en unidad extraíble {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "Error" @@ -266,8 +228,8 @@ msgstr "Expulsar dispositivo extraíble {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "Advertencia" @@ -294,259 +256,269 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Unidad extraíble" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Imprimir a través de la red" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Imprime a través de la red" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "Conectado a través de la red." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "Conectado a través de la red. Apruebe la solicitud de acceso en la impresora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "Conectado a través de la red. No hay acceso para controlar la impresora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "Acceso a la impresora solicitado. Apruebe la solicitud en la impresora." +msgstr "Acceso a la impresora solicitado. Apruebe la solicitud en la impresora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "Estado de la autenticación" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "Estado de la autenticación" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "Volver a intentar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" -msgstr "Reenvía la solicitud de acceso." +msgstr "Reenvía la solicitud de acceso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Acceso a la impresora aceptado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "No hay acceso para imprimir con esta impresora. No se puede enviar el trabajo de impresión." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "Solicitar acceso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" -msgstr "Envía la solicitud de acceso a la impresora." +msgstr "Envía la solicitud de acceso a la impresora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "No se puede iniciar un nuevo trabajo de impresión." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." msgstr "Un problema con la configuración de Ultimaker impide iniciar la impresión. Soluciónelo antes de continuar." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Configuración desajustada" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "¿Seguro que desea imprimir con la configuración seleccionada?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "La configuración o calibración de la impresora y de Cura no coinciden. Para obtener el mejor resultado, segmente siempre los PrintCores y los materiales que se insertan en la impresora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "Envío de nuevos trabajos (temporalmente) bloqueado; se sigue enviando el trabajo de impresión previo." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Enviando datos a la impresora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "Enviando datos" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Cancelar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "No se ha cargado ningún PrintCore en la ranura {slot_number}." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "No se ha cargado ningún material en la ranura {slot_number}." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, python-brace-format msgctxt "@label" msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" msgstr "PrintCore distinto (Cura: {cura_printcore_name}, impresora: {remote_printcore_name}) seleccionado para extrusor {extruder_id}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "Material distinto (Cura: {0}, impresora: {1}) seleccionado para extrusor {2}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Sincronizar con la impresora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "¿Desea utilizar la configuración actual de su impresora en Cura?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Los PrintCores o los materiales de la impresora difieren de los del proyecto actual. Para obtener el mejor resultado, segmente siempre los PrintCores y materiales que se hayan insertado en la impresora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" -msgstr "Conectado a través de la red." +msgstr "Conectado a través de la red" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "El trabajo de impresión se ha enviado correctamente a la impresora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "Fecha de envío" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "Ver en pantalla" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "{printer_name} ha terminado de imprimir «{job_name}»." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "El trabajo de impresión '{job_name}' ha terminado." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "Impresión terminada" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Conectar a través de la red" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Supervisar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "No se pudo acceder a la información actualizada." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Hay nuevas funciones disponibles para {machine_name}. Se recomienda actualizar el firmware de la impresora." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Nuevo firmware de %s disponible" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "Cómo actualizar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "No se pudo acceder a la información actualizada." - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Vista de capas" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" -msgstr "Cura no muestra correctamente las capas si la impresión de alambre está habilitada." +msgstr "Cura no muestra correctamente las capas si la impresión de alambre está habilitada" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "Vista de simulación" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "Modificar GCode" @@ -560,32 +532,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Cree un volumen que no imprima los soportes." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura recopila estadísticas de uso de forma anónima." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "Recopilando datos" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "Más información" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Obtenga más información sobre qué datos envía Cura." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "Permitir" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Permitir a Cura enviar estadísticas de uso de forma anónima para ayudar a priorizar mejoras futuras para Cura. Se envían algunas de sus preferencias y ajustes, la versión de Cura y un resumen de los modelos que está fragmentando." @@ -595,19 +567,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Perfiles de Cura 15.04" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Archivo Blender" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "No ha podido exportarse con la calidad \"{}\"\n" -"Retroceder a \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -633,49 +592,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Imagen GIF" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "No se puede segmentar con el material actual, ya que es incompatible con el dispositivo o la configuración seleccionados." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "No se puede segmentar" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Los ajustes actuales no permiten la segmentación. Los siguientes ajustes contienen errores: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Los ajustes de algunos modelos no permiten la segmentación. Los siguientes ajustes contienen errores en uno o más modelos: {error_labels}." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "No se puede segmentar porque la torre auxiliar o la posición o posiciones de preparación no son válidas." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "No se puede segmentar porque hay objetos asociados al extrusor %s que está deshabilitado." + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "No hay nada que segmentar porque ninguno de los modelos se adapta al volumen de impresión. Escale o rote los modelos para que se adapten." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "Procesando capas" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "Información" @@ -691,29 +657,40 @@ msgid "Configure Per Model Settings" msgstr "Configurar ajustes por modelo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "Recomendado" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Archivo 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "Tobera" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "El archivo del proyecto{0} contiene un tipo de máquina desconocida {1}. No se puede importar la máquina, en su lugar, se importarán los modelos." + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "Abrir archivo de proyecto" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -724,18 +701,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Archivo G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Analizar GCode" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "Datos de GCode" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Asegúrese de que el GCode es adecuado para la impresora y para su configuración antes de enviar el archivo a la misma. Es posible que la representación del GCode no sea precisa." @@ -746,27 +723,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Perfil de cura" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "Archivo 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Archivo 3MF del proyecto de Cura" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "Error al escribir el archivo 3MF." + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "Seleccionar actualizaciones" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "Actualizar firmware" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -777,79 +754,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "Nivelar placa de impresión" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "Pared exterior" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "Paredes interiores" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "Forro" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "Relleno" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "Relleno de soporte" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "Interfaz de soporte" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "Soporte" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "Falda" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "Desplazamiento" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "Retracciones" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "Otro" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "Desconocido" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Archivo {0} presegmentado" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "Fallo de inicio de sesión" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "El archivo ya existe" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -861,23 +838,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "No reemplazado" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "El material seleccionado no es compatible con la máquina o la configuración seleccionada." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Material incompatible" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "La configuración se ha cambiado para que coincida con los extrusores disponibles en este momento: [%s]." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "Ajustes actualizados" @@ -906,8 +883,6 @@ msgid "Export succeeded" msgstr "Exportación correcta" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" @@ -915,58 +890,70 @@ msgstr "Error al importar el perfil de {0}: {1}
or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" -msgstr "No hay ningún perfil personalizado que importar en el archivo {0}." +msgstr "No hay ningún perfil personalizado para importar en el archivo {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 "Error al importar el 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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." msgstr "Este perfil {0} contiene datos incorrectos, no se han podido importar." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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 "El equipo definido en el perfil {0} ({1}) no coincide con el equipo actual ({2}), no se ha podido importar." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "Error al importar el perfil de {0}:" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Perfil {0} importado correctamente" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "El archivo {0} no contiene ningún perfil válido." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "El perfil {0} tiene un tipo de archivo desconocido o está corrupto." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "Perfil personalizado" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Al perfil le falta un tipo de calidad." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "No se ha podido encontrar un tipo de calidad {0} para la configuración actual." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -993,42 +980,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Todos los archivos (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "Material personalizado" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "La altura del volumen de impresión se ha reducido debido al valor del ajuste «Secuencia de impresión» para evitar que el caballete colisione con los modelos impresos." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Volumen de impresión" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "No se ha podido crear el archivo desde el directorio de datos de usuario: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "Copia de seguridad" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Se ha intentado restaurar una copia de seguridad de Cura sin tener los datos o metadatos adecuados." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Se ha intentado restaurar una copia de seguridad de Cura que no coincide con la versión actual." @@ -1039,32 +1026,32 @@ msgid "Multiplying and placing objects" msgstr "Multiplicar y colocar objetos" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Colocando objeto" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "No se puede encontrar una ubicación dentro del volumen de impresión para todos los objetos" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Buscando nueva ubicación para los objetos" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Buscando ubicación" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "No se puede encontrar la ubicación" @@ -1072,7 +1059,7 @@ msgstr "No se puede encontrar la ubicación" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:87 msgctxt "@title:window" msgid "Cura can't start" -msgstr "Cura no puede iniciarse." +msgstr "Cura no puede iniciarse" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:93 msgctxt "@label crash message" @@ -1082,12 +1069,7 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "" -"

¡Vaya! Ultimaker Cura ha encontrado un error.

\n" -"

Hemos detectado un error irreversible durante el inicio, posiblemente como consecuencia de varios archivos de configuración erróneos. Le recomendamos que realice una copia de seguridad y que restablezca los ajustes.

\n" -"

Las copias de seguridad se encuentran en la carpeta de configuración.

\n" -"

Envíenos el informe de errores para que podamos solucionar el problema.

\n" -" " +msgstr "

¡Vaya! Ultimaker Cura ha encontrado un error.

\n

Hemos detectado un error irreversible durante el inicio, posiblemente como consecuencia de varios archivos de configuración erróneos. Le recomendamos que realice una copia de seguridad y que restablezca los ajustes.

\n

Las copias de seguridad se encuentran en la carpeta de configuración.

\n

Envíenos el informe de errores para que podamos solucionar el problema.

\n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:102 msgctxt "@action:button" @@ -1120,10 +1102,7 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

Please use the \"Send report\" button to post a bug report automatically to our servers

\n" " " -msgstr "" -"

Se ha producido un error grave en Cura. Envíenos este informe de errores para que podamos solucionar el problema.

\n" -"

Utilice el botón \"Enviar informe\" para publicar automáticamente el informe de errores en nuestros servidores.

\n" -" " +msgstr "

Se ha producido un error grave en Cura. Envíenos este informe de errores para que podamos solucionar el problema.

\n

Utilice el botón \"Enviar informe\" para publicar automáticamente el informe de errores en nuestros servidores.

\n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1203,223 +1182,233 @@ msgctxt "@action:button" msgid "Send report" msgstr "Enviar informe" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Cargando máquinas..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Configurando escena..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Cargando interfaz..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f mm" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "Solo se puede cargar un archivo GCode a la vez. Se omitió la importación de {0}" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "No se puede abrir ningún archivo si se está cargando un archivo GCode. Se omitió la importación de {0}" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "No se puede cargar el modelo seleccionado, es demasiado pequeño." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Ajustes de la máquina" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Impresora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Ajustes de la impresora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (anchura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (profundidad)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (altura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Forma de la placa de impresión" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Origen en el centro" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Plataforma caliente" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Tipo de GCode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Ajustes del cabezal de impresión" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X mín." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distancia desde la parte izquierda del cabezal de impresión hasta el centro de la tobera. Se usa para evitar que colisionen la impresión anterior con el cabezal de impresión al imprimir «de uno en uno»." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y mín." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distancia desde la parte frontal del cabezal de impresión hasta el centro de la tobera. Se usa para evitar que colisionen la impresión anterior con el cabezal de impresión al imprimir «de uno en uno»." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X máx." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distancia desde la parte derecha del cabezal de impresión hasta el centro de la tobera. Se usa para evitar que colisionen la impresión anterior con el cabezal de impresión al imprimir «de uno en uno»." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y máx." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distancia desde la parte trasera del cabezal de impresión hasta el centro de la tobera. Se usa para evitar que colisionen la impresión anterior con el cabezal de impresión al imprimir «de uno en uno»." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Altura del caballete" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "Diferencia de altura entre la punta de la tobera y el sistema del puente (ejes X e Y). Se usa para evitar que colisionen la impresión anterior con el caballete al imprimir «de uno en uno»." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Número de extrusores" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "Iniciar GCode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Los comandos de GCode que se ejecutarán justo al inicio." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "Finalizar GCode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Los comandos de GCode que se ejecutarán justo al final." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Ajustes de la tobera" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Tamaño de la tobera" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Diámetro del material compatible" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "El diámetro nominal del filamento compatible con la impresora. El diámetro exacto se sobrescribirá según el material o el perfil." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "Desplazamiento de la tobera sobre el eje X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Desplazamiento de la tobera sobre el eje Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "Número de ventilador de enfriamiento" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "GCode inicial del extrusor" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "GCode final del extrusor" @@ -1439,12 +1428,20 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "No se ha podido conectar con la base de datos del Paquete Cura. Compruebe la conexión." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "Complementos" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materiales" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1460,8 +1457,14 @@ msgctxt "@label" msgid "Author" msgstr "Autor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "Descargas" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "Desconocido" @@ -1494,17 +1497,57 @@ msgctxt "@action:button" msgid "Back" msgstr "Atrás" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "Confirmar desinstalación" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "Va a desinstalar materiales o perfiles que todavía están en uso. Si confirma la desinstalación, los siguientes materiales o perfiles volverán a sus valores predeterminados." + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "Materiales" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "Perfiles" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "Confirmar" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "Tendrá que reiniciar Cura para que los cambios de los paquetes surtan efecto." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Salir de Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "Contribuciones de la comunidad" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "Complementos de la comunidad" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "Materiales genéricos" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "Instalado" @@ -1547,12 +1590,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Rechazar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Destacado" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilidad" @@ -1562,10 +1605,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Buscando paquetes..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Contacto" +msgid "Website" +msgstr "Sitio web" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "Correo electrónico" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1578,48 +1626,88 @@ msgid "Changelog" msgstr "Registro de cambios" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "Cerrar" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "Actualizar firmware" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "El firmware es la parte del software que se ejecuta directamente en la impresora 3D. Este firmware controla los motores de pasos, regula la temperatura y, finalmente, hace que funcione la impresora." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "El firmware que se envía con las nuevas impresoras funciona, pero las nuevas versiones suelen tener más funciones y mejoras." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "Actualización de firmware automática" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "Cargar 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 "No se puede actualizar el firmware porque no hay conexión con la impresora." + +#: /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 "No se puede actualizar el firmware porque la conexión con la impresora no permite actualizaciones de firmware." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "Seleccionar firmware personalizado" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "Actualización del firmware" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "Actualización del firmware." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "Actualización del firmware completada." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "Se ha producido un error al actualizar el firmware debido a un error desconocido." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "Se ha producido un error al actualizar el firmware debido a un error de comunicación." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "Se ha producido un error al actualizar el firmware debido a un error de entrada/salida." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Se ha producido un error al actualizar el firmware porque falta el firmware." @@ -1629,22 +1717,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Acuerdo de usuario" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "Conexión existente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "Esta impresora o grupo de impresoras ya se ha añadido a Cura. Seleccione otra impresora o grupo de impresoras." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Conectar con la impresora en red" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" @@ -1652,333 +1740,395 @@ msgid "" "Select your printer from the list below:" msgstr "Para imprimir directamente en la impresora a través de la red, asegúrese de que esta está conectada a la red utilizando un cable de red o conéctela a la red wifi. Si no conecta Cura con la impresora, también puede utilizar una unidad USB para transferir archivos GCode a la impresora.\n\nSeleccione la impresora de la siguiente lista:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Agregar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "Editar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Eliminar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "Actualizar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Si la impresora no aparece en la lista, lea la guía de solución de problemas de impresión y red" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "Tipo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "Versión de firmware" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "Dirección" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "La impresora no está configurada para alojar un grupo de impresoras Ultimaker 3." +msgid "This printer is not set up to host a group of printers." +msgstr "Esta impresora no está configurada para alojar un grupo de impresoras." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "La impresora aloja un grupo de %1 impresoras Ultimaker 3." +msgid "This printer is the host for a group of %1 printers." +msgstr "Esta impresora aloja un grupo de %1 impresoras." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "La impresora todavía no ha respondido en esta dirección." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "Conectar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "Dirección de la impresora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Introduzca la dirección IP o el nombre de host de la impresora en red." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "Aceptar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "Imprimir a través de la red" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "Selección de la impresora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "Imprimir" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 no está configurada para alojar un grupo de impresoras conectadas de Ultimaker 3" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "Imprimir a través de la red" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Agregar/eliminar impresoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" +msgstr "Selección de la impresora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Abre la página de trabajos de impresión en su navegador web por defecto." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" +msgstr "No disponible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Ver trabajos de impresión" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" +msgstr "No se puede conectar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Preparando para impresión" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Imprimiendo" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" msgstr "Disponible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Se ha perdido la conexión con la impresora." +msgid "Aborted" +msgstr "Cancelado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "No disponible" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Desconocido" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Deshabilitado" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Reservado" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "Terminado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Preparando para impresión" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" -msgstr "Acción requerida" +msgid "Preparing" +msgstr "Preparando" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" -msgstr "En pausa" +msgid "Pausing" +msgstr "Pausando" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "Reanudando" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" -msgstr "Impresión cancelada" +msgid "Action required" +msgstr "Acción requerida" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "No se aceptan trabajos de impresión" +msgid "Waiting for: Unavailable printer" +msgstr "Esperando: impresora no disponible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "Termina a las: " +msgid "Waiting for: First available" +msgstr "Esperando: primera disponible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "Borrar placa de impresión" +msgid "Waiting for: " +msgstr "Esperando: " -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Esperando a que se cambie la configuración" +msgid "Configuration change" +msgstr "Cambio de configuración" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Trabajos de impresión" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "Imprimiendo" +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "Es necesario modificar la siguiente configuración de la impresora asignada %1:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "Se ha asignado la impresora 1%, pero el trabajo tiene una configuración de material desconocido." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 +msgctxt "@label" +msgid "Change material %1 from %2 to %3." +msgstr "Cambiar material %1, de %2 a %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 "Cargar %3 como material %1 (no se puede anular)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "Cambiar print core %1, de %2 a %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 "Cambiar la placa de impresión a %1 (no se puede anular)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "Anular" + +#: /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 "Iniciar un trabajo de impresión con una configuración no compatible puede causar daños en su impresora 3D. ¿Seguro de que desea sobrescribir la configuración 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 "Sobrescribir la configuración e iniciar la impresión" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "Vidrio" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "Aluminio" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "Administrar cola" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "En cola" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Impresoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "Imprimiendo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Ver impresoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "Administrar impresoras" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "Mover al principio" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "Borrar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "Reanudar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "Pausar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "Cancelar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "¿Seguro que desea mover %1 al principio de la cola?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "Mover trabajo de impresión al principio" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "¿Seguro que desea borrar %1?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "Borrar trabajo de impresión" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "¿Seguro que desea cancelar %1?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Cancela la impresión" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" -msgstr "Conecta a una impresora." +msgstr "Conecta a una impresora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "Carga la configuración de la impresora en Cura." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Activar configuración" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "Carga la configuración de la impresora en Cura" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Combinación de colores" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Color del material" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Tipo de línea" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Velocidad" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Grosor de la capa" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Modo de compatibilidad" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Mostrar desplazamientos" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Mostrar asistentes" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Mostrar perímetro" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Mostrar relleno" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Mostrar solo capas superiores" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "Mostrar cinco capas detalladas en la parte superior" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Superior o inferior" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Pared interior" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "mín." -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "máx." @@ -1993,20 +2143,20 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "Secuencias de comandos de posprocesamiento" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "Añadir secuencia de comando" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "Ajustes" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" -msgstr "Cambia las secuencias de comandos de posprocesamiento." +msgstr "Cambia las secuencias de comandos de posprocesamiento" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:16 msgctxt "@title:window" @@ -2098,53 +2248,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Suavizado" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Tipo de malla" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Modelo normal" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" -msgstr "Imprimir según compatibilidad" +msgstr "Imprimir como soporte" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" -msgstr "No es compatible la superposición con otros modelos" +msgstr "No crear soporte en otros modelos (por superposición)" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" -msgstr "Modificar ajustes para superponer con otros modelos" +msgstr "Modificar ajustes de otros modelos (por superposición)" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" -msgstr "Modificar ajustes para rellenar con otros modelos" +msgstr "Modificar ajustes del relleno de otros modelos" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "Seleccionar ajustes" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Seleccionar ajustes o personalizar este modelo" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtrar..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "Mostrar todo" @@ -2166,13 +2316,13 @@ msgid "Create new" msgstr "Crear nuevo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Resumen: proyecto de Cura" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Ajustes de la impresora" @@ -2189,18 +2339,19 @@ msgid "Update" msgstr "Actualizar" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Tipo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "Grupo de impresoras" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Ajustes del perfil" @@ -2212,19 +2363,20 @@ msgstr "¿Cómo debería solucionarse el conflicto en el perfil?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Nombre" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "No está en el perfil" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2254,7 +2406,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "¿Cómo debería solucionarse el conflicto en el material?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Visibilidad de los ajustes" @@ -2265,13 +2417,13 @@ msgid "Mode" msgstr "Modo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Ajustes visibles:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 de un total de %2" @@ -2327,40 +2479,10 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "Mover a la siguiente posición" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "Actualización de firmware" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "El firmware es la parte del software que se ejecuta directamente en la impresora 3D. Este firmware controla los motores de pasos, regula la temperatura y, finalmente, hace que funcione la impresora." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "El firmware que se envía con las nuevas impresoras funciona, pero las nuevas versiones suelen tener más funciones y mejoras." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "Actualización de firmware automática" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "Cargar firmware personalizado" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "Seleccionar firmware personalizado" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" -msgstr "Seleccione cualquier actualización de Ultimaker Original." +msgstr "Seleccione cualquier actualización de Ultimaker Original" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:45 msgctxt "@label" @@ -2463,23 +2585,23 @@ msgstr "¡Todo correcto! Ha terminado con la comprobación." #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:119 msgctxt "@label:MonitorStatus" msgid "Not connected to a printer" -msgstr "No está conectado a ninguna impresora." +msgstr "No está conectado a ninguna impresora" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:123 msgctxt "@label:MonitorStatus" msgid "Printer does not accept commands" -msgstr "La impresora no acepta comandos." +msgstr "La impresora no acepta comandos" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:133 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:197 msgctxt "@label:MonitorStatus" msgid "In maintenance. Please check the printer" -msgstr "En mantenimiento. Compruebe la impresora." +msgstr "En mantenimiento. Compruebe la impresora" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:144 msgctxt "@label:MonitorStatus" msgid "Lost connection with the printer" -msgstr "Se ha perdido la conexión con la impresora." +msgstr "Se ha perdido la conexión con la impresora" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:146 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:187 @@ -2502,29 +2624,13 @@ msgstr "Preparando..." #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:154 msgctxt "@label:MonitorStatus" msgid "Please remove the print" -msgstr "Retire la impresión." - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Pausar" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Reanudar" +msgstr "Retire la impresión" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "Cancelar impresión" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Cancela la impresión" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2558,19 +2664,17 @@ msgid "Customized" msgstr "Valor personalizado" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Preguntar siempre" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Descartar y no volver a preguntar" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Guardar y no volver a preguntar" @@ -2590,101 +2694,179 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Crear nuevo perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Información" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Confirmar cambio de diámetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" msgstr "El nuevo diámetro del filamento está ajustado en %1 mm y no es compatible con el extrusor actual. ¿Desea continuar?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Mostrar nombre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marca" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Tipo de material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Color" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Propiedades" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Densidad" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Diámetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Coste del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Anchura del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Longitud del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Coste por metro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Este material está vinculado a %1 y comparte alguna de sus propiedades." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Desvincular material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Descripción" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Información sobre adherencia" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "Ajustes de impresión" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Activar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Crear" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "Duplicado" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "Importar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Exportar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "Impresora" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "Confirmar eliminación" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "¿Seguro que desea eliminar %1? ¡Esta acción no se puede deshacer!" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Importar material" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "No se pudo importar el material en %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "El material se ha importado correctamente en %1" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Exportar material" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "Se ha producido un error al exportar el material a %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "El material se ha exportado correctamente a %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2721,289 +2903,287 @@ msgid "Unit" msgstr "Unidad" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "General" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "Interfaz" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "Idioma:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "Moneda:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "Tema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "Tendrá que reiniciar la aplicación para que estos cambios tengan efecto." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Segmentar automáticamente al cambiar los ajustes." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "Segmentar automáticamente" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "Comportamiento de la ventanilla" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Resaltar en rojo las áreas del modelo sin soporte. Sin soporte, estas áreas no se imprimirán correctamente." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "Mostrar voladizos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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 "Mueve la cámara de manera que el modelo se encuentre en el centro de la vista cuando se selecciona un modelo." +msgstr "Mueve la cámara de manera que el modelo se encuentre en el centro de la vista cuando se selecciona un modelo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Centrar cámara cuando se selecciona elemento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "¿Se debería invertir el comportamiento predeterminado del zoom de cura?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Invertir la dirección del zoom de la cámara." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "¿Debería moverse el zoom en la dirección del ratón?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Hacer zoom en la dirección del ratón" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "¿Deben moverse los modelos en la plataforma de modo que no se crucen?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" -msgstr "Asegúrese de que lo modelos están separados." +msgstr "Asegúrese de que lo modelos están separados" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "¿Deben moverse los modelos del área de impresión de modo que no toquen la placa de impresión?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Arrastrar modelos a la placa de impresión de forma automática" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "Se muestra el mensaje de advertencia en el lector de GCode." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "Mensaje de advertencia en el lector de GCode" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "¿Debe forzarse el modo de compatibilidad de la capa?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Forzar modo de compatibilidad de la vista de capas (necesario reiniciar)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "Abrir y guardar archivos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "¿Deben ajustarse los modelos al volumen de impresión si son demasiado grandes?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "Escalar modelos de gran tamaño" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "Un modelo puede mostrarse demasiado pequeño si su unidad son metros en lugar de milímetros, por ejemplo. ¿Deben escalarse estos modelos?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Escalar modelos demasiado pequeños" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "¿Se deberían seleccionar los modelos después de haberse cargado?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Seleccionar modelos al abrirlos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "¿Debe añadirse automáticamente un prefijo basado en el nombre de la impresora al nombre del trabajo de impresión?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Agregar prefijo de la máquina al nombre del trabajo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "¿Mostrar un resumen al guardar un archivo de proyecto?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Mostrar un cuadro de diálogo de resumen al guardar el proyecto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Comportamiento predeterminado al abrir un archivo del proyecto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Comportamiento predeterminado al abrir un archivo del proyecto: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" +msgid "Always ask me this" msgstr "Preguntar siempre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Abrir siempre como un proyecto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "Importar modelos siempre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "Si ha realizado cambios en un perfil y, a continuación, ha cambiado a otro, aparecerá un cuadro de diálogo que le preguntará si desea guardar o descartar los cambios. También puede elegir el comportamiento predeterminado, así ese cuadro de diálogo no volverá a aparecer." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "Anular perfil" +msgid "Profiles" +msgstr "Perfiles" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "Comportamiento predeterminado para los valores modificados al cambiar a otro perfil: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "Descartar siempre los ajustes modificados" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "Transferir siempre los ajustes modificados al nuevo perfil" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "Privacidad" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "¿Debe Cura buscar actualizaciones cuando se abre el programa?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Buscar actualizaciones al iniciar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "¿Deben enviarse datos anónimos sobre la impresión a Ultimaker? Tenga en cuenta que no se envían ni almacenan modelos, direcciones IP ni otra información de identificación personal." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Enviar información (anónima) de impresión" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "Más información" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "Experimental" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Utilizar funcionalidad de placa de impresión múltiple" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Utilizar funcionalidad de placa de impresión múltiple (reinicio requerido)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "¿Los modelos recién cargados se deben organizar en la placa de impresión? Se han usado junto con la placa de impresión múltiple (EXPERIMENTAL)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "No organizar objetos al cargar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "Impresoras" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Activar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3021,7 +3201,7 @@ msgid "Connection:" msgstr "Conexión:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "La impresora no está conectada." @@ -3034,12 +3214,12 @@ msgstr "Estado:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:181 msgctxt "@label:MonitorStatus" msgid "Waiting for a printjob" -msgstr "Esperando un trabajo de impresión..." +msgstr "Esperando un trabajo de impresión" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:193 msgctxt "@label:MonitorStatus" msgid "Waiting for someone to clear the build plate" -msgstr "Esperando a que alguien limpie la placa de impresión..." +msgstr "Esperando a que alguien limpie la placa de impresión" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:199 msgctxt "@label:MonitorStatus" @@ -3047,7 +3227,7 @@ msgid "Aborting print..." msgstr "Cancelando impresión..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "Perfiles" @@ -3062,18 +3242,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Duplicado" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Importar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Exportar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3084,18 +3252,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplicar perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Confirmar eliminación" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "¿Seguro que desea eliminar %1? ¡Esta acción no se puede deshacer!" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3116,228 +3272,200 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Impresora: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Perfiles protegidos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Perfiles personalizados" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Actualizar perfil con ajustes o sobrescrituras actuales" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Descartar cambios actuales" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "Este perfil utiliza los ajustes predeterminados especificados por la impresora, por eso no aparece ningún ajuste o sobrescritura en la lista que se ve a continuación." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Los ajustes actuales coinciden con el perfil seleccionado." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Ajustes globales" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materiales" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Crear" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Duplicado" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Importar material" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr "No se pudo importar el material en %1: %2." - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "El material se ha importado correctamente en %1." - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Exportar material" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "Se ha producido un error al exportar el material a %1: %2." - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "El material se ha exportado correctamente a %1." - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Impresora" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "Agregar impresora" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "Nombre de la impresora:" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "Agregar impresora" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "Sin título" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "Acerca de Cura" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "versión: %1" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "Solución completa para la impresión 3D de filamento fundido." -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" msgstr "Ultimaker B.V. ha desarrollado Cura en cooperación con la comunidad.\nCura se enorgullece de utilizar los siguientes proyectos de código abierto:" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "Interfaz gráfica de usuario (GUI)" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "Entorno de la aplicación" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "Generador de GCode" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "Biblioteca de comunicación entre procesos" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "Lenguaje de programación" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "Entorno de la GUI" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "Enlaces del entorno de la GUI" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "Biblioteca de enlaces C/C++" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "Formato de intercambio de datos" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "Biblioteca de apoyo para cálculos científicos" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "Biblioteca de apoyo para cálculos más rápidos" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "Biblioteca de apoyo para gestionar archivos STL" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "Biblioteca de compatibilidad para trabajar con objetos planos" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "Biblioteca de compatibilidad para trabajar con mallas triangulares" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "Biblioteca de compatibilidad para analizar redes complejas" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "Biblioteca de compatibilidad para trabajar con archivos 3MF" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "Biblioteca de compatibilidad para metadatos y transmisión de archivos" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "Biblioteca de comunicación en serie" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "Biblioteca de detección para Zeroconf" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "Biblioteca de recorte de polígonos" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "Biblioteca HTTP de Python" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "Fuente" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "Iconos SVG" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "Implementación de la aplicación de distribución múltiple de Linux" @@ -3347,7 +3475,7 @@ msgctxt "@label" msgid "Profile:" msgstr "Perfil:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" @@ -3355,53 +3483,53 @@ msgid "" "Click to open the profile manager." msgstr "Algunos valores de los ajustes o sobrescrituras son distintos a los valores almacenados en el perfil.\n\nHaga clic para abrir el administrador de perfiles." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "Buscar..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Copiar valor en todos los extrusores" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Copiar todos los valores cambiados en todos los extrusores" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Ocultar este ajuste" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "No mostrar este ajuste" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Mostrar este ajuste" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configurar visibilidad de los ajustes..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Contraer todo" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Ampliar todo" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" @@ -3419,17 +3547,17 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Afectado por" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "Este ajuste siempre se comparte entre extrusores. Si lo modifica, modificará el valor de todos los extrusores." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "El valor se resuelve según los valores de los extrusores. " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3437,7 +3565,7 @@ msgid "" "Click to restore the value of the profile." msgstr "Este ajuste tiene un valor distinto del perfil.\n\nHaga clic para restaurar el valor del perfil." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3481,7 +3609,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "Envíe un comando de GCode personalizado a la impresora conectada. Pulse «Intro» para enviar el comando." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Extrusor" @@ -3534,7 +3662,7 @@ msgid "The nozzle inserted in this extruder." msgstr "Tobera insertada en este extrusor." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Placa de impresión" @@ -3559,6 +3687,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Caliente la plataforma antes de imprimir. Puede continuar ajustando la impresión durante el calentamiento, así no tendrá que esperar a que la plataforma se caliente para poder imprimir." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "Material" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "Favoritos" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "Genérico" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3574,27 +3717,27 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "&Ver" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "&Posición de la cámara" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" -msgstr "&Placa de impresión" +msgstr "P&laca de impresión" #: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:13 msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "Ajustes visibles" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "Mostrar todos los ajustes" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Gestionar visibilidad de los ajustes..." @@ -3655,347 +3798,346 @@ msgid "" "G-code files cannot be modified" msgstr "Ajustes de impresión deshabilitados\nNo se pueden modificar los archivos GCode" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "00 h 00 min" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "Especificación de tiempos" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "Especificación de costes" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "%1 m" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "%1 g" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "Total:" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." msgstr "Configuración de impresión recomendada

Imprimir con los ajustes recomendados para la impresora, el material y la calidad seleccionados." -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Configuración de impresión personalizada

Imprimir con un control muy detallado del proceso de segmentación." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Activar impresión" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Nombre del trabajo" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Tiempo de impresión" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Tiempo restante estimado" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "A<ernar pantalla completa" +msgid "Toggle Full Screen" +msgstr "Alternar pantalla completa" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "Des&hacer" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Rehacer" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Salir" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "&Vista en 3D" +msgid "3D View" +msgstr "Vista en 3D" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "&Vista frontal" +msgid "Front View" +msgstr "Vista frontal" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "&Vista superior" +msgid "Top View" +msgstr "Vista superior" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "&Vista del lado izquierdo" +msgid "Left Side View" +msgstr "Vista del lado izquierdo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "&Vista del lado derecho" +msgid "Right Side View" +msgstr "Vista del lado derecho" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Configurar Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Agregar impresora..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Adm&inistrar impresoras ..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Administrar materiales..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Actualizar perfil con ajustes o sobrescrituras actuales" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Descartar cambios actuales" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&Crear perfil a partir de ajustes o sobrescrituras actuales..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Administrar perfiles..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Mostrar &documentación en línea" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Informar de un &error" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "&Acerca de..." +msgid "About..." +msgstr "Acerca de..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Eliminar modelo &seleccionado" -msgstr[1] "Eliminar modelos &seleccionados" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" +msgstr[0] "Eliminar modelo seleccionado" +msgstr[1] "Eliminar modelos seleccionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Centrar modelo seleccionado" msgstr[1] "Centrar modelos seleccionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Multiplicar modelo seleccionado" msgstr[1] "Multiplicar modelos seleccionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Eliminar modelo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Ce&ntrar modelo en plataforma" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "A&grupar modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Desagrupar modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Co&mbinar modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Multiplicar modelo..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&Seleccionar todos los modelos" +msgid "Select All Models" +msgstr "Seleccionar todos los modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Borrar placa de impresión" +msgid "Clear Build Plate" +msgstr "Borrar placa de impresión" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 +msgctxt "@action:inmenu menubar:file" +msgid "Reload All Models" +msgstr "Recargar todos los modelos" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 -msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "&Recargar todos los modelos" - -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Organizar todos los modelos en todas las placas de impresión" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Organizar todos los modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Organizar selección" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Restablecer las posiciones de todos los modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "Restablecer las &transformaciones de todos los modelos" +msgid "Reset All Model Transformations" +msgstr "Restablecer las transformaciones de todos los modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Abrir archivo(s)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nuevo proyecto..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "&Mostrar registro del motor..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Mostrar carpeta de configuración" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Examinar paquetes..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Expandir/contraer barra lateral" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Cargue un modelo en 3D" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Preparado para segmentar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Segmentando..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Listo para %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" -msgstr "No se puede segmentar." +msgstr "No se puede segmentar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "No se puede segmentar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Fragmentar trabajo de impresión actual" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Cancelar proceso de fragmentación" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Preparar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Cancelar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Seleccione el dispositivo de salida activo" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "Abrir archivo(s)" @@ -4015,129 +4157,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&Archivo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "&Guardar..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "&Exportar..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "Guardar &selección en archivo" +msgid "Export Selection..." +msgstr "Exportar selección..." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Guardar &como..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Guardar &proyecto..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Edición" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "&Ver" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "A&justes" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Impresora" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "&Material" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Definir como extrusor activo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Habilitar extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Deshabilitar extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Placa de impresión" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "&Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "E&xtensiones" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&Cuadro de herramientas" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "Pre&ferencias" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "A&yuda" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Este paquete se instalará después de reiniciar." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "Abrir archivo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "Ajustes" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "Nuevo proyecto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "¿Está seguro de que desea iniciar un nuevo proyecto? Esto borrará la placa de impresión y cualquier ajuste no guardado." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "Cerrando Cura" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "¿Seguro que desea salir de Cura?" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "Instalar paquete" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "Abrir archivo(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." msgstr "Hemos encontrado uno o más archivos de GCode entre los archivos que ha seleccionado. Solo puede abrir los archivos GCode de uno en uno. Si desea abrir un archivo GCode, seleccione solo uno." @@ -4147,112 +4305,107 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Guardar proyecto" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Placa de impresión" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extrusor %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 y material" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "No mostrar resumen de proyecto al guardar de nuevo" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Guardar" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Altura de capa" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" -msgstr "Este perfil de calidad no está disponible para la configuración de material y de tobera actual. Cámbiela para poder habilitar este perfil de calidad." +msgstr "Este perfil de calidad no está disponible para la configuración de material y de tobera actual. Cámbiela para poder habilitar este perfil de calidad" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" -msgstr "Hay un perfil personalizado activado en este momento. Para habilitar el control deslizante de calidad, seleccione un perfil de calidad predeterminado en la pestaña Personalizado." +msgstr "Hay un perfil personalizado activado en este momento. Para habilitar el control deslizante de calidad, seleccione un perfil de calidad predeterminado en la pestaña Personalizado" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Velocidad de impresión" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Más lento" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Más rápido" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Ha modificado algunos ajustes del perfil. Si desea cambiarlos, hágalo en el modo personalizado." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Relleno" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Un relleno gradual aumentará gradualmente la cantidad de relleno hacia arriba." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "Habilitar gradual" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "Generar soporte" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Generar estructuras para soportar piezas del modelo que tengan voladizos. Sin estas estructuras, estas piezas se romperían durante la impresión." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Seleccione qué extrusor se utilizará como soporte. Esta opción formará estructuras de soporte por debajo del modelo para evitar que éste se combe o la impresión se haga en el aire." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Adherencia de la placa de impresión" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Habilita la impresión de un borde o una balsa. Esta opción agregará un área plana alrededor del objeto, que es fácil de cortar después." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "¿Necesita ayuda para mejorar sus impresiones?
Lea las Guías de solución de problemas de Ultimaker" @@ -4299,23 +4452,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Tipo de impresora" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Material" -# Added after the string freeze. -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Use láminas de adherencia o pegamento con esta combinación de materiales" +msgid "Use glue with this material combination" +msgstr "Utilizar pegamento con esta combinación de materiales" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Comprobar compatibilidad" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Haga clic para comprobar la compatibilidad de los materiales en Utimaker.com." @@ -4405,16 +4557,6 @@ msgctxt "name" msgid "God Mode" msgstr "God Mode" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Acepta códigos GCode y los envía a un enrutador Doodle3D por medio de wifi." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Enrutador Doodle3D" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4425,6 +4567,16 @@ msgctxt "name" msgid "Changelog" msgstr "Registro de cambios" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "Proporciona opciones a la máquina para actualizar el firmware." + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "Actualizador de firmware" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." @@ -4448,7 +4600,7 @@ msgstr "Impresión USB" #: UserAgreement/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license." -msgstr "Preguntar al usuario una vez si acepta la licencia" +msgstr "Preguntar al usuario una vez si acepta la licencia." #: UserAgreement/plugin.json msgctxt "name" @@ -4495,16 +4647,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Fase de preparación" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Proporciona una ventana de edición para la edición directa de secuencias de comandos." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Herramienta de secuencia de comandos en directo" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4568,7 +4710,7 @@ msgstr "Lector de GCode comprimido" #: PostProcessingPlugin/plugin.json msgctxt "description" msgid "Extension that allows for user created scripts for post processing" -msgstr "Extensión que permite el posprocesamiento de las secuencias de comandos creadas por los usuarios." +msgstr "Extensión que permite el posprocesamiento de las secuencias de comandos creadas por los usuarios" #: PostProcessingPlugin/plugin.json msgctxt "name" @@ -4578,7 +4720,7 @@ msgstr "Posprocesamiento" #: SupportEraser/plugin.json msgctxt "description" msgid "Creates an eraser mesh to block the printing of support in certain places" -msgstr "Crea una malla de borrado que impide la impresión de soportes en determinados lugares." +msgstr "Crea una malla de borrado que impide la impresión de soportes en determinados lugares" #: SupportEraser/plugin.json msgctxt "name" @@ -4615,16 +4757,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Lector de perfiles antiguos de Cura" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Ayuda a abrir archivos de Blender directamente en Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Integración de Blender (experimental)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4675,6 +4807,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Actualización de la versión 2.7 a la 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "Actualiza las configuraciones de Cura 3.4 a Cura 3.5." + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "Actualización de la versión 3.4 a la 3.5" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4815,6 +4957,299 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Lector de perfiles de Cura" +#~ msgctxt "@warning:status" +#~ msgid "Please generate G-code before saving." +#~ msgstr "Genere un G-code antes de guardar." + +#~ msgctxt "@item:inmenu" +#~ msgid "Profile Assistant" +#~ msgstr "Asistente del perfil" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Profile Assistant" +#~ msgstr "Asistente del perfil" + +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "Actualizar firmware" + +#~ msgctxt "@label unknown material" +#~ msgid "Unknown" +#~ msgstr "Desconocido" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "No custom profile to import in file {0}" +#~ msgstr "No hay ningún perfil personalizado que importar en el archivo {0}" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "This profile {0} contains incorrect data, could not import it." +#~ msgstr "Este perfil {0} contiene datos incorrectos, no se han podido importar." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "El equipo definido en el perfil {0} ({1}) no coincide con el equipo actual ({2}), no se ha podido importar." + +#~ msgctxt "@title:window" +#~ msgid "Confirm uninstall " +#~ msgstr "Confirmar desinstalación " + +#~ msgctxt "@label:status" +#~ msgid "Paused" +#~ msgstr "En pausa" + +#~ msgctxt "@action:button" +#~ msgid "Previous" +#~ msgstr "Anterior" + +#~ msgctxt "@action:button" +#~ msgid "Next" +#~ msgstr "Siguiente" + +#~ msgctxt "@label" +#~ msgid "Tip" +#~ msgstr "Consejo" + +#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +#~ msgid "%1m / ~ %2g / ~ %4 %3" +#~ msgstr "%1 m/~ %2 g/~ %4 %3" + +#~ msgctxt "@label Print estimates: m for meters, g for grams" +#~ msgid "%1m / ~ %2g" +#~ msgstr "%1 m/~ %2 g" + +#~ msgctxt "@label" +#~ msgid "Print experiment" +#~ msgstr "Ensayo de impresión" + +#~ msgctxt "@label" +#~ msgid "Checklist" +#~ msgstr "Lista de verificación" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "Actualización de firmware" + +#~ msgctxt "description" +#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +#~ msgstr "Permite a los fabricantes de material crear nuevos perfiles de material y calidad mediante una IU integrada." + +#~ msgctxt "name" +#~ msgid "Print Profile Assistant" +#~ msgstr "Imprimir asistente del perfil" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimir con un enrutador Doodle3D" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimir con un enrutador Doodle3D" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Conectar con Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Enviando datos a Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "No se pueden enviar datos a Doodle3D Connect. ¿Hay otro trabajo que todavía esté activo?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Guardando datos en Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Archivo enviado a Doodle3D Connect" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Abrir Connect..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Abrir la interfaz web de Doodle3D Connect" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Archivo Blender" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "No ha podido exportarse con la calidad \"{}\"\n" +#~ "Retroceder a \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Contacto" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "La impresora no está configurada para alojar un grupo de impresoras Ultimaker 3." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "La impresora aloja un grupo de %1 impresoras Ultimaker 3." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 no está configurada para alojar un grupo de impresoras conectadas de Ultimaker 3" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Agregar/eliminar impresoras" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Abre la página de trabajos de impresión en su navegador web por defecto." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Ver trabajos de impresión" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Preparando para impresión" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Imprimiendo" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Disponible" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Se ha perdido la conexión con la impresora." + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "No disponible" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Desconocido" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Deshabilitado" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Reservado" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Preparando para impresión" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Impresión cancelada" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "No se aceptan trabajos de impresión" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Termina a las: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Borrar placa de impresión" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Esperando a que se cambie la configuración" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Trabajos de impresión" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Impresoras" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Ver impresoras" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Pausar" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Reanudar" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Cancelar impresión" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Preguntar siempre" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Anular perfil" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "¿Los modelos recién cargados se deben organizar en la placa de impresión? Se han usado junto con la placa de impresión múltiple (EXPERIMENTAL)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "No organizar objetos al cargar" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "&Guardar selección en archivo" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Guardar &como..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Guardar &proyecto..." + +# Added after the string freeze. +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Use láminas de adherencia o pegamento con esta combinación de materiales" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Acepta códigos GCode y los envía a un enrutador Doodle3D por medio de wifi." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Enrutador Doodle3D" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Proporciona una ventana de edición para la edición directa de secuencias de comandos." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Herramienta de secuencia de comandos en directo" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Ayuda a abrir archivos de Blender directamente en Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Integración de Blender (experimental)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Advertencia del comprobador de modelos" @@ -5082,10 +5517,6 @@ msgstr "Lector de perfiles de Cura" #~ msgid "Browse plugins..." #~ msgstr "Examinar complementos..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Placa de impresión" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "&Complementos" @@ -5311,14 +5742,6 @@ msgstr "Lector de perfiles de Cura" #~ "\n" #~ " Disculpe." -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Asistente del perfil" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Asistente del perfil" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "No se ha cargado material." @@ -5449,14 +5872,6 @@ msgstr "Lector de perfiles de Cura" #~ msgid "Configure setting visiblity..." #~ msgstr "Configurar la visibilidad de los ajustes..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1 m/~ %2 g/~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1 m/~ %2 g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Automático: %1" @@ -5493,14 +5908,6 @@ msgstr "Lector de perfiles de Cura" #~ msgid "GCode Profile Reader" #~ msgstr "Lector de perfiles Gcode" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Permite a los fabricantes de material crear nuevos perfiles de material y calidad mediante una IU integrada." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Imprimir asistente del perfil" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Se han producido varios errores al abrir el archivo de SolidWorks. Compruebe que el archivo se puede abrir correctamente en SolidWorks." @@ -5697,10 +6104,6 @@ msgstr "Lector de perfiles de Cura" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "La impresora aloja un grupo de %1 impresoras conectadas de Ultimaker 3" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Preparando" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Completado el: " diff --git a/resources/i18n/es_ES/fdmextruder.def.json.po b/resources/i18n/es_ES/fdmextruder.def.json.po index e8f44ef4f1..3da8d5251f 100644 --- a/resources/i18n/es_ES/fdmextruder.def.json.po +++ b/resources/i18n/es_ES/fdmextruder.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 14:25+0100\n" "Last-Translator: Bothof \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -166,6 +166,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "Coordenada Z de la posición en la que la tobera queda preparada al inicio de la impresión." +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "Ventilador de refrigeración de impresión del extrusor" + +#: 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 "Número del ventilador de refrigeración de impresión asociado al extrusor. Modifique el valor predeterminado 0 solo cuando disponga de un ventilador de refrigeración de impresión diferente para cada extrusor." + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/es_ES/fdmprinter.def.json.po b/resources/i18n/es_ES/fdmprinter.def.json.po index b5cd50638f..3b519e7aec 100644 --- a/resources/i18n/es_ES/fdmprinter.def.json.po +++ b/resources/i18n/es_ES/fdmprinter.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 14:56+0200\n" "Last-Translator: Bothof \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -81,6 +81,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "GUID del material. Este valor se define de forma automática. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Diámetro" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Ajusta el diámetro del filamento utilizado. Este valor debe coincidir con el diámetro del filamento utilizado." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -229,7 +239,7 @@ msgstr "Número de extrusores habilitados" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" msgid "Number of extruder trains that are enabled; automatically set in software" -msgstr "Número de trenes extrusores habilitados y configurados en el software de forma automática." +msgstr "Número de trenes extrusores habilitados y configurados en el software de forma automática" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" @@ -534,7 +544,7 @@ msgstr "Aceleración máxima sobre el eje X" #: fdmprinter.def.json msgctxt "machine_max_acceleration_x description" msgid "Maximum acceleration for the motor of the X-direction" -msgstr "Aceleración máxima del motor de la dirección X." +msgstr "Aceleración máxima del motor de la dirección X" #: fdmprinter.def.json msgctxt "machine_max_acceleration_y label" @@ -1014,7 +1024,7 @@ msgstr "Patrón superior/inferior" #: fdmprinter.def.json msgctxt "top_bottom_pattern description" msgid "The pattern of the top/bottom layers." -msgstr "Patrón de las capas superiores/inferiores" +msgstr "Patrón de las capas superiores/inferiores." #: fdmprinter.def.json msgctxt "top_bottom_pattern option lines" @@ -1056,6 +1066,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Zigzag" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "Conectar polígonos superiores/inferiores" + +#: 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 "Conecta las trayectorias de forro superior/inferior cuando están próximas entre sí. Al habilitar este ajuste, en el patrón concéntrico se reduce considerablemente el tiempo de desplazamiento, pero las conexiones pueden producirse en mitad del relleno, con lo que bajaría la calidad de la superficie superior." + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1136,6 +1156,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Compensa el flujo en partes de una pared interior que se están imprimiendo donde ya hay una pared." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "Flujo de pared mínimo" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "Porcentaje mínimo de flujo permitido en una línea de pared. La compensación de superposición reduce el flujo de pared cuando se coloca cerca de otra pared. Las paredes con flujos inferiores a este valor se sustituirán con un movimiento de desplazamiento. Al utilizar este ajuste debe habilitar la compensación de superposición de pared e imprimir la pared exterior antes que las interiores." + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "Preferencia de retracción" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "Si se habilita esta opción, se utilizará retracción en lugar de peinada para los movimientos de desplazamiento que sustituyen las paredes cuyo flujo está por debajo de los límites mínimos de flujo." + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1354,7 +1394,7 @@ msgstr "Espaciado de líneas del alisado" #: fdmprinter.def.json msgctxt "ironing_line_spacing description" msgid "The distance between the lines of ironing." -msgstr "Distancia entre las líneas del alisado" +msgstr "Distancia entre las líneas del alisado." #: fdmprinter.def.json msgctxt "ironing_flow label" @@ -1453,8 +1493,8 @@ msgstr "Patrón de relleno" #: 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "Patrón del material de relleno de la impresión. El relleno de línea y zigzag cambia de dirección en capas alternas, con lo que se reduce el coste del material. Los patrones de rejilla, triángulo, trihexagonal, cúbico, de octeto, cúbico bitruncado y transversal y concéntrico se imprimen en todas las capas por completo. El relleno cúbico, cúbico bitruncado y de octeto cambian en cada capa para proporcionar una distribución de fuerza equitativa en cada dirección." +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 "Patrón del material de relleno de la impresión. El relleno de línea y zigzag cambia de dirección en capas alternas, con lo que se reduce el coste de material. Los patrones de rejilla, triángulo, trihexágono, cubo, octeto, cubo bitruncado, transversal y concéntrico se imprimen en todas las capas por completo. El relleno giroide, cúbico, cúbico bitruncado y de octeto cambian en cada capa para proporcionar una distribución de fuerza equitativa en cada dirección." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1501,11 +1541,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Concéntrico" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concéntrico 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1521,6 +1556,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "Cruz 3D" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "Giroide" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1531,6 +1571,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Conectar los extremos donde los patrones de relleno se juntan con la pared interior usando una línea que siga la forma de esta. Habilitar este ajuste puede lograr que el relleno se adhiera mejor a las paredes y se reduzca el efecto del relleno sobre la calidad de las superficies verticales. Deshabilitar este ajuste reduce la cantidad de material utilizado." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "Conectar polígonos de relleno" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "Conectar las trayectorias de polígonos cuando están próximas entre sí. Habilitar esta opción reduce considerablemente el tiempo de desplazamiento en los patrones de relleno que constan de varios polígonos cerrados." + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1554,13 +1604,35 @@ msgstr "El patrón de relleno se mueve esta distancia a lo largo del eje X." #: fdmprinter.def.json msgctxt "infill_offset_y label" msgid "Infill Y Offset" -msgstr "Desplazamiento del relleno sobre el eje X" +msgstr "Desplazamiento del relleno sobre el eje Y" #: fdmprinter.def.json msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "El patrón de relleno se mueve esta distancia a lo largo del eje Y." +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "Multiplicador de línea de relleno" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "Multiplicar cada línea de relleno. Las líneas adicionales no se cruzan entre sí, sino que se evitan entre ellas. Esto consigue un relleno más rígido, pero incrementa el tiempo de impresión y el uso de material." + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "Recuento de líneas de pared adicional" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "Agregar paredes adicionales alrededor del área de relleno. Estas paredes pueden hacer que las líneas del forro superior/inferior se aflojen menos, lo que significa que necesitaría menos capas de forro superior/inferior para obtener la misma calidad utilizando algo más de material.\nPuede utilizar esta función junto a la de Conectar polígonos de relleno para conectar todo el relleno en una única trayectoria de extrusión sin necesidad de desplazamientos ni retracciones si se configura correctamente." + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1789,7 +1861,7 @@ msgstr "Temperatura de impresión predeterminada" #: 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 "La temperatura predeterminada que se utiliza para imprimir. Debería ser la temperatura básica del material. Las demás temperaturas de impresión deberían calcularse a partir de este valor." +msgstr "La temperatura predeterminada que se utiliza para imprimir. Debería ser la temperatura básica del material. Las demás temperaturas de impresión deberían calcularse a partir de este valor" #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1849,7 +1921,7 @@ msgstr "Temperatura predeterminada de la placa de impresión" #: fdmprinter.def.json msgctxt "default_material_bed_temperature description" msgid "The default temperature used for the heated build plate. This should be the \"base\" temperature of a build plate. All other print temperatures should use offsets based on this value" -msgstr "La temperatura predeterminada que se utiliza en placa de impresión caliente. Debería ser la temperatura básica de una placa de impresión. Las demás temperaturas de impresión deberían calcularse a partir de este valor." +msgstr "La temperatura predeterminada que se utiliza en placa de impresión caliente. Debería ser la temperatura básica de una placa de impresión. Las demás temperaturas de impresión deberían calcularse a partir de este valor" #: fdmprinter.def.json msgctxt "material_bed_temperature label" @@ -1871,16 +1943,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "Temperatura de la placa de impresión una vez caliente en la primera capa." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Diámetro" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Ajusta el diámetro del filamento utilizado. Este valor debe coincidir con el diámetro del filamento utilizado." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2718,8 +2780,8 @@ msgstr "Modo Peinada" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "La opción de peinada mantiene la tobera dentro de las áreas ya impresas al desplazarse. Esto ocasiona movimientos de desplazamiento ligeramente más largos, pero reduce la necesidad de realizar retracciones. Si se desactiva la opción de peinada, el material se retraerá y la tobera se moverá en línea recta hasta el siguiente punto. Otra posibilidad es evitar la peinada en áreas de forro superiores/inferiores peinando solo dentro del relleno." +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "La opción de peinada mantiene la tobera dentro de las áreas ya impresas al desplazarse. Esto ocasiona movimientos de desplazamiento ligeramente más largos, pero reduce la necesidad de realizar retracciones. Si se desactiva la opción de peinada, el material se retraerá y la tobera se moverá en línea recta hasta el siguiente punto. Otra posibilidad es evitar la peinada en áreas de forro superiores/inferiores y además peinar solo en el relleno. La opción de «Sobre el relleno» actúa exactamente igual que la «No está en el forro» de las versiones de Cura anteriores." #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2736,6 +2798,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "No en el forro" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "Sobre el relleno" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3116,11 +3183,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Concéntrico" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concéntrico 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3181,6 +3243,56 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Distancia entre las líneas de estructuras del soporte impresas. Este ajuste se calcula por la densidad del soporte." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "Distancia de línea del soporte de la capa inicial" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "Distancia entre las líneas de estructuras del soporte de la capa inicial impresas. Este ajuste se calcula por la densidad del soporte." + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "Dirección de línea de relleno de soporte" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "Orientación del patrón de relleno para soportes. El patrón de relleno de soporte se gira en el plano horizontal." + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "Habilitar borde de soporte" + +#: 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 "Genera un borde dentro de las zonas de relleno del soporte de la primera capa. Este borde se imprime por debajo del soporte y no a su alrededor. Si habilita esta configuración aumentará la adhesión del soporte a la placa de impresión." + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "Ancho del borde de soporte" + +#: 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 "Anchura del borde de impresión que se imprime por debajo del soporte. Una anchura de soporte amplia mejora la adhesión a la placa de impresión, pero requieren material adicional." + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "Recuento de líneas del borde de soporte" + +#: 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 "Número de líneas utilizadas para el borde de soporte. Más líneas de borde mejoran la adhesión a la placa de impresión, pero requieren material adicional." + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3471,11 +3583,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Concéntrico" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concéntrico 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3511,11 +3618,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Concéntrico" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concéntrico 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3551,16 +3653,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Concéntrico" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concéntrico 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Zigzag" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "Alteración de velocidad del ventilador" + +#: 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 "Al habilitar esta opción, la velocidad del ventilador de enfriamiento de impresión cambia para las áreas de forro que se encuentran inmediatamente encima del soporte." + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "Velocidad del ventilador para forro con soporte" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "Porcentaje para la velocidad de ventilador que se utiliza al imprimir las áreas del forro que se encuentran inmediatamente encima del soporte. Si utiliza una velocidad alta para el ventilador, será más fácil retirar el soporte." + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3743,6 +3860,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "Número de líneas utilizadas para un borde. Más líneas de borde mejoran la adhesión a la plataforma de impresión, pero también reducen el área de impresión efectiva." +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "Sustituir soporte por borde" + +#: 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 "Aplica la impresión de un borde alrededor del modelo, aunque en esa posición debiera estar el soporte. Sustituye algunas áreas de la primera capa de soporte por áreas de borde." + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -3885,8 +4012,8 @@ msgstr "Ancho de las líneas de la capa base de la balsa. Estas deben ser línea #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Espaciado de líneas de la balsa" +msgid "Raft Base Line Spacing" +msgstr "Espacio de la línea base de la balsa" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4091,7 +4218,7 @@ msgstr "Tamaño de la torre auxiliar" #: fdmprinter.def.json msgctxt "prime_tower_size description" msgid "The width of the prime tower." -msgstr "Anchura de la torre auxiliar" +msgstr "Anchura de la torre auxiliar." #: fdmprinter.def.json msgctxt "prime_tower_min_volume label" @@ -4103,16 +4230,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "El volumen mínimo de cada capa de la torre auxiliar que permite purgar suficiente material." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Grosor de la torre auxiliar" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "El grosor de la torre auxiliar hueca. Un grosor mayor de la mitad del volumen mínimo de la torre auxiliar dará lugar a una torre auxiliar densa." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4153,26 +4270,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Tras imprimir la torre auxiliar con una tobera, limpie el material rezumado de la otra tobera de la torre auxiliar." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Limpiar tobera después de cambiar" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Tras cambiar de extrusor, limpie el material que rezuma de la tobera en el primer objeto que imprima. Esto lleva a cabo un movimiento de limpieza lento y suave en un lugar en el que el material que rezuma produzca el menor daño posible a la calidad superficial de la impresión." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Volumen de purga de la torre auxiliar" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Cantidad de filamentos que purgar al limpiar la torre auxiliar. La purga sirve para compensar la pérdida de filamentos que se produce durante el rezumado cuando la tobera está inactiva." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4476,7 +4573,7 @@ msgstr "Experimental" #: fdmprinter.def.json msgctxt "experimental description" msgid "experimental!" -msgstr "Experimental" +msgstr "¡Experimental!" #: fdmprinter.def.json msgctxt "support_tree_enable label" @@ -4658,6 +4755,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Datos que vinculan el flujo de materiales (en 3 mm por segundo) a la temperatura (grados centígrados)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "Circunferencia mínima de polígono" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "Se filtran los polígonos en capas segmentadas que tienen una circunferencia más pequeña que esta. Los valores más pequeños suponen una resolución de malla mayor a costa de un tiempo de segmentación. Está indicado, sobre todo, para impresoras SLA y modelos 3D muy pequeños con muchos detalles." + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5315,6 +5422,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Umbral para usar o no una capa más pequeña. Este número se compara con el curtido de la pendiente más empinada de una capa." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "Ángulo de voladizo de pared" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "Las paredes con un ángulo de voladizo mayor que este se imprimirán con los ajustes de voladizo de pared. Cuando el valor sea 90, no se aplicará la condición de voladizo a la pared." + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "Velocidad de voladizo de pared" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "Los voladizos de pared se imprimirán a este porcentaje de su velocidad de impresión normal." + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5345,16 +5472,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Si un área de forro es compatible con un porcentaje inferior de su área, se imprime utilizando los ajustes de puente. De lo contrario, se imprimirá utilizando los ajustes de forro habituales." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Voladizo máximo de pared del puente" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "Ancho máximo permitido de la cámara de aire por debajo de una línea de pared antes imprimir la pared utilizando los ajustes de puente. Se expresa como porcentaje del ancho de la línea de la pared. Si la cámara de aire es mayor, la línea de la pared de imprime utilizando los ajustes de puente. De lo contrario, se imprimirá utilizando los ajustes habituales. Cuando menor sea el valor, más probable es que las líneas de pared del voladizo se impriman utilizando ajustes de puente." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5575,6 +5692,74 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Matriz de transformación que se aplicará al modelo cuando se cargue desde el archivo." +#~ 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 happend midway over infill this feature can reduce the top surface quality." +#~ msgstr "Conectar las trayectorias de forro superior/inferior cuando están próximas entre sí. Al habilitar este ajuste, en el patrón concéntrico se reduce considerablemente el tiempo de desplazamiento, pero las conexiones pueden producirse en mitad del relleno, con lo que la bajaría la calidad de la superficie superior." + +#~ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +#~ msgstr "Patrón del material de relleno de la impresión. El relleno de línea y zigzag cambia de dirección en capas alternas, con lo que se reduce el coste del material. Los patrones de rejilla, triángulo, trihexagonal, cúbico, de octeto, cúbico bitruncado y transversal y concéntrico se imprimen en todas las capas por completo. El relleno cúbico, cúbico bitruncado y de octeto cambian en cada capa para proporcionar una distribución de fuerza equitativa en cada dirección." + +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concéntrico 3D" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "La opción de peinada mantiene la tobera dentro de las áreas ya impresas al desplazarse. Esto ocasiona movimientos de desplazamiento ligeramente más largos, pero reduce la necesidad de realizar retracciones. Si se desactiva la opción de peinada, el material se retraerá y la tobera se moverá en línea recta hasta el siguiente punto. Otra posibilidad es evitar la peinada en áreas de forro superiores/inferiores peinando solo dentro del relleno." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concéntrico 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concéntrico 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concéntrico 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concéntrico 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Espaciado de líneas de la balsa" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Grosor de la torre auxiliar" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "El grosor de la torre auxiliar hueca. Un grosor mayor de la mitad del volumen mínimo de la torre auxiliar dará lugar a una torre auxiliar densa." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Limpiar tobera después de cambiar" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Tras cambiar de extrusor, limpie el material que rezuma de la tobera en el primer objeto que imprima. Esto lleva a cabo un movimiento de limpieza lento y suave en un lugar en el que el material que rezuma produzca el menor daño posible a la calidad superficial de la impresión." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Volumen de purga de la torre auxiliar" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Cantidad de filamentos que purgar al limpiar la torre auxiliar. La purga sirve para compensar la pérdida de filamentos que se produce durante el rezumado cuando la tobera está inactiva." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Voladizo máximo de pared del puente" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "Ancho máximo permitido de la cámara de aire por debajo de una línea de pared antes imprimir la pared utilizando los ajustes de puente. Se expresa como porcentaje del ancho de la línea de la pared. Si la cámara de aire es mayor, la línea de la pared de imprime utilizando los ajustes de puente. De lo contrario, se imprimirá utilizando los ajustes habituales. Cuando menor sea el valor, más probable es que las líneas de pared del voladizo se impriman utilizando ajustes de puente." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Optimizar el orden en el que se imprimen las paredes a fin de reducir el número de retracciones y la distancia recorrida. La mayoría de los componentes se beneficiarán si este ajuste está habilitado pero, en algunos casos, se puede tardar más, por lo que deben compararse las previsiones de tiempo de impresión con y sin optimización." diff --git a/resources/i18n/fdmextruder.def.json.pot b/resources/i18n/fdmextruder.def.json.pot index db93c13b3c..fbb003f3c6 100644 --- a/resources/i18n/fdmextruder.def.json.pot +++ b/resources/i18n/fdmextruder.def.json.pot @@ -1,17 +1,12 @@ -# Cura JSON setting files -# Copyright (C) 2018 Ultimaker -# This file is distributed under the same license as the Cura package. -# Ruben Dulek , 2018. -# +#, fuzzy msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Uranium json setting files\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" -"Language-Team: TEAM\n" -"Language: xx_XX\n" +"Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -174,6 +169,19 @@ msgid "" "printing." msgstr "" +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "" + +#: 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 "" + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/fdmprinter.def.json.pot b/resources/i18n/fdmprinter.def.json.pot index c505755444..96071d82b8 100644 --- a/resources/i18n/fdmprinter.def.json.pot +++ b/resources/i18n/fdmprinter.def.json.pot @@ -1,17 +1,12 @@ -# Cura JSON setting files -# Copyright (C) 2018 Ultimaker -# This file is distributed under the same license as the Cura package. -# Ruben Dulek , 2018. -# +#, fuzzy msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Uranium json setting files\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" -"Language-Team: TEAM\n" -"Language: xx_XX\n" +"Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -82,6 +77,18 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "" +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "" +"Adjusts the diameter of the filament used. Match this value with the " +"diameter of the used filament." +msgstr "" + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1154,6 +1161,20 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: 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 "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1261,6 +1282,33 @@ msgid "" "already a wall in place." msgstr "" +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "" +"Minimum allowed percentage flow for a wall line. The wall overlap " +"compensation reduces a wall's flow when it lies close to an existing wall. " +"Walls whose flow is less than this value will be replaced with a travel " +"move. When using this setting, you must enable the wall overlap compensation " +"and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "" +"If enabled, retraction is used rather than combing for travel moves that " +"replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1627,8 +1675,8 @@ 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. Cubic, quarter cubic and octet " -"infill change with every layer to provide a more equal distribution of " +"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 "" @@ -1677,11 +1725,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1697,6 +1740,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1712,6 +1760,19 @@ msgid "" "of material used." msgstr "" +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "" +"Connect infill paths where they run next to each other. For infill patterns " +"which consist of several closed polygons, enabling this setting greatly " +"reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1748,6 +1809,35 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "" +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "" +"Convert each infill line to this many lines. The extra lines do not cross " +"over each other, but avoid each other. This makes the infill stiffer, but " +"increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin " +"lines sag down less which means you need less top/bottom skin layers for the " +"same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the " +"infill into a single extrusion path without the need for travels or " +"retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -2139,18 +2229,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "" -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "" -"Adjusts the diameter of the filament used. Match this value with the " -"diameter of the used filament." -msgstr "" - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -3106,7 +3184,9 @@ msgid "" "results in slightly longer travel moves but reduces the need for " "retractions. If combing is off, the material will retract and the nozzle " "moves in a straight line to the next point. It is also possible to avoid " -"combing over top/bottom skin areas by combing within the infill only." +"combing over top/bottom skin areas and also to only comb within the infill. " +"Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' " +"option in earlier Cura releases." msgstr "" #: fdmprinter.def.json @@ -3124,6 +3204,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3581,11 +3666,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3658,6 +3738,67 @@ msgid "" "calculated by the support density." msgstr "" +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "" +"Distance between the printed initial layer support structure lines. This " +"setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "" +"Orientation of the infill pattern for supports. The support infill pattern " +"is rotated in the horizontal plane." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "" + +#: 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 "" + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "" + +#: 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 "" + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "" + +#: 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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -4005,11 +4146,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -4045,11 +4181,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -4086,13 +4217,32 @@ msgid "Concentric" msgstr "" #: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" +msgctxt "support_bottom_pattern option zigzag" +msgid "Zig Zag" msgstr "" #: fdmprinter.def.json -msgctxt "support_bottom_pattern option zigzag" -msgid "Zig Zag" +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: 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 "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "" +"Percentage fan speed to use when printing the skin regions immediately above " +"the support. Using a high fan speed can make the support easier to remove." msgstr "" #: fdmprinter.def.json @@ -4313,6 +4463,19 @@ msgid "" "build plate, but also reduces the effective print area." msgstr "" +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "" + +#: 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 "" + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -4487,7 +4650,7 @@ msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" +msgid "Raft Base Line Spacing" msgstr "" #: fdmprinter.def.json @@ -4720,18 +4883,6 @@ msgid "" "enough material." msgstr "" -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "" -"The thickness of the hollow prime tower. A thickness larger than half the " -"Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "" - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4776,32 +4927,6 @@ msgid "" "the other nozzle off on the prime tower." msgstr "" -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "" -"After switching extruder, wipe the oozed material off of the nozzle on the " -"first thing printed. This performs a safe slow wipe move at a place where " -"the oozed material causes least harm to the surface quality of your print." -msgstr "" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "" -"Amount of filament to be purged when wiping on the prime tower. Purging is " -"useful for compensating the filament lost by oozing during inactivity of the " -"nozzle." -msgstr "" - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -5402,6 +5527,20 @@ msgid "" "Celsius)." msgstr "" +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "" +"Polygons in sliced layers that have a circumference smaller than this amount " +"will be filtered out. Lower values lead to higher resolution mesh at the " +"cost of slicing time. It is meant mostly for high resolution SLA printers " +"and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -6203,6 +6342,30 @@ msgid "" "the tan of the steepest slope in a layer." msgstr "" +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "" +"Walls that overhang more than this angle will be printed using overhanging " +"wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "" +"Overhanging walls will be printed at this percentage of their normal print " +"speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -6241,22 +6404,6 @@ msgid "" "skin settings." msgstr "" -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "" -"The maximum allowed width of the region of air below a wall line before the " -"wall is printed using bridge settings. Expressed as a percentage of the wall " -"line width. When the air gap is wider than this, the wall line is printed " -"using the bridge settings. Otherwise, the wall line is printed using the " -"normal settings. The lower the value, the more likely it is that overhung " -"wall lines will be printed using bridge settings." -msgstr "" - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" diff --git a/resources/i18n/fi_FI/cura.po b/resources/i18n/fi_FI/cura.po index a4b5719da7..442500f21b 100644 --- a/resources/i18n/fi_FI/cura.po +++ b/resources/i18n/fi_FI/cura.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" "PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: Finnish\n" @@ -38,6 +38,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "GCode-tiedosto" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -53,102 +64,51 @@ msgid "" "

View print quality guide

" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Tulostus Doodle3D WiFi-Boxin avulla" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Tulostus Doodle3D WiFi-Boxin avulla" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Yhteyden muodostaminen Doodle3D Connectiin" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Peruuta" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Lähetetään tietoja Doodle3D Connectiin" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Tietojen lähetys Doodle3D Connectiin ei onnistu. Onko toinen työ yhä aktiivinen?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Tietoja tallennetaan Doodle3D Connectiin" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Tiedosto lähetetty Doodle3D Connectiin" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Avaa Doodle3D Connect -verkkoliittymä" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Näytä muutosloki" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Aktivoitujen asetusten tasoitus" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Profiili on tasoitettu ja aktivoitu." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USB-tulostus" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Tulosta USB:n kautta" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Tulosta USB:n kautta" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "Yhdistetty USB:n kautta" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -171,7 +131,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "" @@ -193,7 +158,7 @@ msgid "Save to Removable Drive {0}" msgstr "Tallenna siirrettävälle asemalle {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "" @@ -232,7 +197,7 @@ msgstr "Ei voitu tallentaa siirrettävälle asemalle {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "Virhe" @@ -261,8 +226,8 @@ msgstr "Poista siirrettävä asema {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "Varoitus" @@ -289,259 +254,269 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Siirrettävä asema" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Tulosta verkon kautta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Tulosta verkon kautta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "Yhdistetty verkon kautta tulostimeen." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "Yhdistetty verkon kautta. Hyväksy tulostimen käyttöoikeuspyyntö." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "Yhdistetty verkon kautta tulostimeen. Ei käyttöoikeutta tulostimen hallintaan." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "Tulostimen käyttöoikeutta pyydetty. Hyväksy tulostimen pyyntö" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "Yritä uudelleen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Lähetä käyttöoikeuspyyntö uudelleen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Tulostimen käyttöoikeus hyväksytty" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "Tällä tulostimella tulostukseen ei ole käyttöoikeutta. Tulostustyön lähetys ei onnistu." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "Pyydä käyttöoikeutta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Lähetä tulostimen käyttöoikeuspyyntö" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Ristiriitainen määritys" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "Haluatko varmasti tulostaa valitulla määrityksellä?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Tulostimen ja Curan määrityksen tai kalibroinnin välillä on ristiriita. Parhaat tulokset saavutetaan viipaloimalla aina tulostimeen asetetuille PrintCoreille ja materiaaleille." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "Uusien töiden lähettäminen (tilapäisesti) estetty, edellistä tulostustyötä lähetetään vielä." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Lähetetään tietoja tulostimeen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "Lähetetään tietoja" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Peruuta" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, python-brace-format msgctxt "@label" msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "Eri materiaali (Cura: {0}, tulostin: {1}) valittu suulakkeelle {2}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Synkronoi tulostimen kanssa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Haluatko käyttää nykyistä tulostimen määritystä Curassa?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Tulostimen PrintCoret tai materiaalit eivät vastaa tulostettavan projektin asetuksia. Parhaat tulokset saavutetaan viipaloimalla aina tulostimeen asetetuille PrintCoreille ja materiaaleille." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "{printer_name} on tulostanut työn '{job_name}'." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "Tulosta valmis" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Yhdistä verkon kautta" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "Päivitystietoja ei löytynyt." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Uusi tulostimen %s laiteohjelmisto saatavilla" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "Päivitystietoja ei löytynyt." - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Kerrosnäkymä" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Cura ei näytä kerroksia täsmällisesti, kun rautalankatulostus on käytössä" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "Muokkaa GCode-arvoa" @@ -555,32 +530,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "Kerätään tietoja" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "" @@ -590,18 +565,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04 -profiilit" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "" - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -627,49 +590,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF-kuva" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Viipalointi ei onnistu nykyisellä materiaalilla, sillä se ei sovellu käytettäväksi valitun laitteen tai kokoonpanon kanssa." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "Viipalointi ei onnistu" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Viipalointi ei onnistu nykyisten asetuksien ollessa voimassa. Seuraavissa asetuksissa on virheitä: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Viipalointi ei onnistu, koska esitäyttötorni tai esitäytön sijainti tai sijainnit eivät kelpaa." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Ei viipaloitavaa, koska mikään malleista ei sovellu tulostustilavuuteen. Skaalaa tai pyöritä mallia, kunnes se on sopiva." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "Käsitellään kerroksia" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "Tiedot" @@ -685,29 +655,40 @@ msgid "Configure Per Model Settings" msgstr "Määritä mallikohtaiset asetukset" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "Suositeltu" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "Mukautettu" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF-tiedosto" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "Suutin" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -718,18 +699,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G File -tiedosto" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-coden jäsennys" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "G-coden tiedot" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Varmista, että G-code on tulostimelle ja sen tulostusasetuksille soveltuva, ennen kuin lähetät tiedoston siihen. G-coden esitys ei välttämättä ole tarkka." @@ -740,27 +721,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Cura-profiili" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF-tiedosto" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Cura-projektin 3MF-tiedosto" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "Valitse päivitykset" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "Päivitä laiteohjelmisto" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -771,79 +752,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "Tasaa alusta" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "Ulkoseinämä" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "Sisäseinämät" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "Pintakalvo" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "Täyttö" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "Tuen täyttö" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "Tukiliittymä" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "Tuki" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "Helma" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "Siirtoliike" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "Takaisinvedot" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "Muu" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Esiviipaloitu tiedosto {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Tiedosto on jo olemassa" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -855,23 +836,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Valittu materiaali ei sovellu käytettäväksi valitun laitteen tai kokoonpanon kanssa." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Yhteensopimaton materiaali" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "" @@ -900,8 +881,6 @@ msgid "Export succeeded" msgstr "" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" @@ -909,58 +888,70 @@ msgstr "Profiilin tuonti epäonnistui tiedostosta {0}: or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" msgstr "" +#: /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 "" + #: /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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." msgstr "" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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 "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Onnistuneesti tuotu profiili {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "Profiililla {0} on tuntematon tiedostotyyppi tai se on vioittunut." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "Mukautettu profiili" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Profiilista puuttuu laatutyyppi." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Laatutyyppiä {0} ei löydy nykyiselle kokoonpanolle." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -987,42 +978,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "Mukautettu materiaali" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "Mukautettu" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "Tulostustilavuuden korkeutta on vähennetty tulostusjärjestysasetuksen vuoksi, jotta koroke ei osuisi tulostettuihin malleihin." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Tulostustilavuus" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "" @@ -1033,32 +1024,32 @@ msgid "Multiplying and placing objects" msgstr "Kappaleiden kertominen ja sijoittelu" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Sijoitetaan kappaletta" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Kaikille kappaleille ei löydy paikkaa tulostustilavuudessa." #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Uusien paikkojen etsiminen kappaleille" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Etsitään paikkaa" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Paikkaa ei löydy" @@ -1189,223 +1180,233 @@ msgctxt "@action:button" msgid "Send report" msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Ladataan laitteita..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Asetetaan näkymää..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Ladataan käyttöliittymää..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f mm" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "Vain yksi G-code-tiedosto voidaan ladata kerralla. Tiedoston {0} tuonti ohitettiin." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "Muita tiedostoja ei voida ladata, kun G-code latautuu. Tiedoston {0} tuonti ohitettiin." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Laitteen asetukset" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Tulostin" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Tulostimen asetukset" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (leveys)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (syvyys)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (korkeus)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Alustan muoto" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Alkukohta keskellä" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Lämmitettävä pöytä" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Tulostuspään asetukset" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X väh." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Etäisyys tulostuspään vasemmalta puolelta suuttimen keskikohtaan. Käytetään estämään aiempien tulosteiden ja tulostuspään yhteentörmäyksiä, kun tulostetaan yksi kerrallaan." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y väh." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Etäisyys tulostuspään etupuolelta suuttimen keskikohtaan. Käytetään estämään aiempien tulosteiden ja tulostuspään yhteentörmäyksiä, kun tulostetaan yksi kerrallaan." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X enint." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Etäisyys tulostuspään oikealta puolelta suuttimen keskikohtaan. Käytetään estämään aiempien tulosteiden ja tulostuspään yhteentörmäyksiä, kun tulostetaan yksi kerrallaan." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y enint." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Etäisyys tulostuspään takapuolelta suuttimen keskikohtaan. Käytetään estämään aiempien tulosteiden ja tulostuspään yhteentörmäyksiä, kun tulostetaan yksi kerrallaan." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Korokkeen korkeus" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "Suuttimen kärjen ja korokejärjestelmän (X- ja Y-akselit) välinen korkeusero. Käytetään estämään aiempien tulosteiden ja korokkeen yhteentörmäyksiä, kun tulostetaan yksi kerrallaan." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Suulakkeiden määrä" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Suutinasetukset" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Suuttimen koko" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "Tulostimen tukema tulostuslangan nimellinen halkaisija. Materiaali ja/tai profiili korvaa tarkan halkaisijan." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "Suuttimen X-siirtymä" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Suuttimen Y-siirtymä" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "" @@ -1425,12 +1426,20 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materiaalit" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1446,8 +1455,14 @@ msgctxt "@label" msgid "Author" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "Tuntematon" @@ -1480,17 +1495,57 @@ msgctxt "@action:button" msgid "Back" msgstr "" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "" @@ -1533,12 +1588,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Hylkää" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "" @@ -1548,9 +1603,14 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" +msgid "Website" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" msgstr "" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 @@ -1564,48 +1624,88 @@ msgid "Changelog" msgstr "Muutosloki" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "Sulje" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "Laiteohjelmisto on suoraan 3D-tulostimessa toimiva ohjelma. Laiteohjelmisto ohjaa askelmoottoreita, säätää lämpötilaa ja saa tulostimen toimimaan." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "Uusien tulostimien mukana toimitettava laiteohjelmisto toimii, mutta uusissa versioissa on yleensä enemmän toimintoja ja parannuksia." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "Päivitä laiteohjelmisto automaattisesti" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "Lataa mukautettu laiteohjelmisto" + +#: /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 "" + +#: /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 "" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "Valitse mukautettu laiteohjelmisto" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "Laiteohjelmiston päivitys" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "Päivitetään laiteohjelmistoa." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "Laiteohjelmiston päivitys suoritettu." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "Laiteohjelmiston päivitys epäonnistui tuntemattoman virheen takia." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "Laiteohjelmiston päivitys epäonnistui tietoliikennevirheen takia." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "Laiteohjelmiston päivitys epäonnistui tiedoston lukemiseen tai kirjoittamiseen liittyvän virheen takia." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Laiteohjelmiston päivitys epäonnistui puuttuvan laiteohjelmiston takia." @@ -1615,22 +1715,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Yhdistä verkkotulostimeen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" @@ -1641,333 +1741,395 @@ msgstr "" "\n" "Valitse tulostin alla olevasta luettelosta:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Lisää" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "Muokkaa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Poista" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "Päivitä" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Jos tulostinta ei ole luettelossa, lue verkkotulostuksen vianetsintäopas" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "Tyyppi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "Laiteohjelmistoversio" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "Osoite" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Tätä tulostinta ei ole määritetty Ultimaker 3 -tulostinryhmän isännäksi." +msgid "This printer is not set up to host a group of printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Tämä tulostin on {count} tulostimen Ultimaker 3 -ryhmän isäntä." +msgid "This printer is the host for a group of %1 printers." +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "Tämän osoitteen tulostin ei ole vielä vastannut." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "Yhdistä" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "Tulostimen osoite" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Anna verkon tulostimen IP-osoite tai isäntänimi." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "Tulosta verkon kautta" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "Tulosta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 ei ole määritetty yhdistetyn Ultimaker 3 -tulostinryhmän isännäksi" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "Tulosta verkon kautta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Näytä tulostustyöt" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Tulostetaan" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" -msgstr "Saatavilla" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 -msgctxt "@label:status" -msgid "Lost connection with the printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Unavailable" +msgid "Aborted" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Varattu" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "Valmis" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Valmistellaan tulostusta" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" -msgstr "Vaatii toimenpiteitä" +msgid "Preparing" +msgstr "Valmistellaan" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" +msgid "Pausing" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" -msgstr "Tulostus keskeytetty" +msgid "Action required" +msgstr "Vaatii toimenpiteitä" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Ei hyväksy tulostustöitä" +msgid "Waiting for: Unavailable printer" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "Päättyy: " +msgid "Waiting for: First available" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "Tyhjennä alusta" +msgid "Waiting for: " +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Odotetaan määrityksen muutosta" +msgid "Configuration change" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Tulostustyöt" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "Tulostetaan" +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 +msgctxt "@label" +msgid "Change material %1 from %2 to %3." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:378 +msgctxt "@label" +msgid "Load %3 as material %1 (This cannot be overridden)." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:384 +msgctxt "@label" +msgid "Change build plate to %1 (This cannot be overridden)." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "" + +#: /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 "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:435 +msgctxt "@window:title" +msgid "Override configuration configuration and start print" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "Jonossa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Tulostimet" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "Tulostetaan" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Näytä tulostimet" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Keskeytä tulostus" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Yhdistä tulostimeen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "Lataa tulostimen määritys Curaan" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Aktivoi määritys" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "Lataa tulostimen määritys Curaan" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Värimalli" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Materiaalin väri" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Linjojen tyyppi" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Yhteensopivuustila" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Näytä siirtoliikkeet" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Näytä avustimet" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Näytä kuori" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Näytä täyttö" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Näytä vain yläkerrokset" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "Näytä 5 yksityiskohtaista kerrosta ylhäällä" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Yläosa/alaosa" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Sisäseinämä" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "" @@ -1982,17 +2144,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "Jälkikäsittelykomentosarjat" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "Lisää komentosarja" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "Asetukset" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "Muuta aktiivisia jälkikäsittelykomentosarjoja" @@ -2087,53 +2249,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Tasoitus" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "Valitse asetukset" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Valitse tätä mallia varten mukautettavat asetukset" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Suodatin..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "Näytä kaikki" @@ -2155,13 +2317,13 @@ msgid "Create new" msgstr "Luo uusi" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Yhteenveto – Cura-projekti" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Tulostimen asetukset" @@ -2178,18 +2340,19 @@ msgid "Update" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Tyyppi" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Profiilin asetukset" @@ -2201,19 +2364,20 @@ msgstr "Miten profiilin ristiriita pitäisi ratkaista?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Nimi" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "Ei profiilissa" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2243,7 +2407,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Miten materiaalin ristiriita pitäisi ratkaista?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Asetusten näkyvyys" @@ -2254,13 +2418,13 @@ msgid "Mode" msgstr "Tila" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Näkyvät asetukset:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1/%2" @@ -2316,36 +2480,6 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "Siirry seuraavaan positioon" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "Laiteohjelmiston päivitys" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "Laiteohjelmisto on suoraan 3D-tulostimessa toimiva ohjelma. Laiteohjelmisto ohjaa askelmoottoreita, säätää lämpötilaa ja saa tulostimen toimimaan." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "Uusien tulostimien mukana toimitettava laiteohjelmisto toimii, mutta uusissa versioissa on yleensä enemmän toimintoja ja parannuksia." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "Päivitä laiteohjelmisto automaattisesti" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "Lataa mukautettu laiteohjelmisto" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "Valitse mukautettu laiteohjelmisto" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" @@ -2493,26 +2627,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Poista tuloste" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Keskeytä" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Jatka" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "Keskeytä tulostus" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Keskeytä tulostus" +msgstr "" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2549,19 +2667,17 @@ msgid "Customized" msgstr "Mukautettu" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Kysy aina" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Hylkää äläkä kysy uudelleen" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Säilytä äläkä kysy uudelleen" @@ -2581,101 +2697,179 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Luo uusi profiili" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Tiedot" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Näytä nimi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Merkki" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Materiaalin tyyppi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Väri" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Ominaisuudet" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Tiheys" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Läpimitta" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Tulostuslangan hinta" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Tulostuslangan paino" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Tulostuslangan pituus" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Hinta metriä kohden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Materiaali on linkitetty kohteeseen %1 ja niillä on joitain samoja ominaisuuksia." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Poista materiaalin linkitys" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Kuvaus" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Tarttuvuustiedot" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "Tulostusasetukset" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Aktivoi" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Luo" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "Jäljennös" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "Tuo" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Vie" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Tuo materiaali" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "Materiaalin tuominen epäonnistui: %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "Materiaalin tuominen onnistui: %1" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Vie materiaali" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "Materiaalin vieminen epäonnistui kohteeseen %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Materiaalin vieminen onnistui kohteeseen %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2712,289 +2906,287 @@ msgid "Unit" msgstr "Yksikkö" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "Yleiset" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "Käyttöliittymä" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "Kieli:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "Valuutta:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "Teema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "Sovellus on käynnistettävä uudelleen, jotta nämä muutokset tulevat voimaan." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Viipaloi automaattisesti, kun asetuksia muutetaan." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "Viipaloi automaattisesti" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "Näyttöikkunan käyttäytyminen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Korosta mallin vailla tukea olevat alueet punaisella. Ilman tukea nämä alueet eivät tulostu kunnolla." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "Näytä uloke" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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 "Siirtää kameraa siten, että valittuna oleva malli on näkymän keskellä." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Keskitä kamera kun kohde on valittu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "Pitääkö Curan oletusarvoinen zoom-toimintatapa muuttaa päinvastaiseksi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Käännä kameran zoomin suunta päinvastaiseksi." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "Tuleeko zoomauksen siirtyä hiiren suuntaan?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Zoomaa hiiren suuntaan" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "Pitäisikö alustalla olevia malleja siirtää niin, etteivät ne enää leikkaa toisiaan?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Varmista, että mallit ovat erillään" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "Pitäisikö tulostusalueella olevia malleja siirtää alas niin, että ne koskettavat tulostusalustaa?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Pudota mallit automaattisesti alustalle" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "Pakotetaanko kerros yhteensopivuustilaan?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Pakota kerrosnäkymän yhteensopivuustila (vaatii uudelleenkäynnistyksen)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "Tiedostojen avaaminen ja tallentaminen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "Pitäisikö mallit skaalata tulostustilavuuteen, jos ne ovat liian isoja?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "Skaalaa suuret mallit" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "Malli voi vaikuttaa erittäin pieneltä, jos sen koko on ilmoitettu esimerkiksi metreissä eikä millimetreissä. Pitäisikö nämä mallit suurentaa?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Skaalaa erittäin pienet mallit" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "Pitäisikö tulostustyön nimeen lisätä automaattisesti tulostimen nimeen perustuva etuliite?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Lisää laitteen etuliite työn nimeen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Näytetäänkö yhteenveto, kun projektitiedosto tallennetaan?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Näytä yhteenvetoikkuna, kun projekti tallennetaan" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Projektitiedoston avaamisen oletustoimintatapa" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Projektitiedoston avaamisen oletustoimintatapa: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Kysy aina" +msgid "Always ask me this" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Avaa aina projektina" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "Tuo mallit aina" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "Kun olet tehnyt muutokset profiiliin ja vaihtanut toiseen, näytetään valintaikkuna, jossa kysytään, haluatko säilyttää vai hylätä muutokset. Tässä voit myös valita oletuskäytöksen, jolloin valintaikkunaa ei näytetä uudelleen." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "Kumoa profiili" +msgid "Profiles" +msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "Tietosuoja" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "Pitäisikö Curan tarkistaa saatavilla olevat päivitykset, kun ohjelma käynnistetään?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Tarkista päivitykset käynnistettäessä" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "Pitäisikö anonyymejä tietoja tulosteesta lähettää Ultimakerille? Huomaa, että malleja, IP-osoitteita tai muita henkilökohtaisia tietoja ei lähetetä eikä tallenneta." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Lähetä (anonyymit) tulostustiedot" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "Tulostimet" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Aktivoi" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3012,7 +3204,7 @@ msgid "Connection:" msgstr "Yhteys:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "Tulostinta ei ole yhdistetty." @@ -3038,7 +3230,7 @@ msgid "Aborting print..." msgstr "Keskeytetään tulostus..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "Profiilit" @@ -3053,18 +3245,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Jäljennös" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Tuo" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Vie" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3075,18 +3255,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Monista profiili" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3107,126 +3275,78 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Tulostin: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Suojatut profiilit" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Mukautetut profiilit" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Päivitä nykyiset asetukset tai ohitukset profiiliin" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Hylkää tehdyt muutokset" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "Tässä profiilissa käytetään tulostimen oletusarvoja, joten siinä ei ole alla olevan listan asetuksia tai ohituksia." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Nykyiset asetukset vastaavat valittua profiilia." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Yleiset asetukset" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materiaalit" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Luo" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Jäljennös" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Tuo materiaali" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr "Materiaalin tuominen epäonnistui: %1: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "Materiaalin tuominen onnistui: %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Vie materiaali" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "Materiaalin vieminen epäonnistui kohteeseen %1: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Materiaalin vieminen onnistui kohteeseen %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "Lisää tulostin" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "Tulostimen nimi:" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "Lisää tulostin" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "Tietoja Curasta" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "Kokonaisvaltainen sulatettavan tulostuslangan 3D-tulostusratkaisu." -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" @@ -3235,102 +3355,122 @@ msgstr "" "Cura-ohjelman on kehittänyt Ultimaker B.V. yhteistyössä käyttäjäyhteisön kanssa.\n" "Cura hyödyntää seuraavia avoimeen lähdekoodiin perustuvia projekteja:" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "Graafinen käyttöliittymä" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "Sovelluskehys" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "Prosessien välinen tietoliikennekirjasto" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "Ohjelmointikieli" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "GUI-kehys" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "GUI-kehyksen sidonnat" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "C/C++ -sidontakirjasto" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "Data Interchange Format" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "Tieteellisen laskennan tukikirjasto" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "Nopeamman laskennan tukikirjasto" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "STL-tiedostojen käsittelyn tukikirjasto" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "Tukikirjasto 3MF-tiedostojen käsittelyyn" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "Sarjatietoliikennekirjasto" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "ZeroConf-etsintäkirjasto" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "Monikulmion leikkauskirjasto" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "Fontti" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "SVG-kuvakkeet" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "" @@ -3340,7 +3480,7 @@ msgctxt "@label" msgid "Profile:" msgstr "Profiili:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" @@ -3351,53 +3491,53 @@ msgstr "" "\n" "Avaa profiilin hallinta napsauttamalla." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "Haku…" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Kopioi arvo kaikkiin suulakepuristimiin" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Piilota tämä asetus" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Älä näytä tätä asetusta" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Pidä tämä asetus näkyvissä" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Määritä asetusten näkyvyys..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" @@ -3418,17 +3558,17 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Riippuu seuraavista:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "Arvo perustuu suulakepuristimien arvoihin " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3439,7 +3579,7 @@ msgstr "" "\n" "Palauta profiilin arvo napsauttamalla." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3486,7 +3626,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Suulake" @@ -3539,7 +3679,7 @@ msgid "The nozzle inserted in this extruder." msgstr "Tähän suulakkeeseen liitetty suutin." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Alusta" @@ -3564,6 +3704,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Lämmitä pöytä ennen tulostusta. Voit edelleen säätää tulostinta sen lämmitessä, eikä sinun tarvitse odottaa pöydän lämpiämistä, kun olet valmis tulostamaan." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3579,12 +3734,12 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "&Näytä" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "" @@ -3594,12 +3749,12 @@ msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "" @@ -3662,347 +3817,346 @@ msgstr "" "Tulostuksen asennus ei käytössä\n" "G-code-tiedostoja ei voida muokata" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." msgstr "Suositeltu tulostuksen asennus

Tulosta valitun tulostimen, materiaalin ja laadun suositelluilla asetuksilla." -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Mukautettu tulostuksen asennus

Tulosta hallitsemalla täysin kaikkia viipalointiprosessin vaiheita." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Aktiivinen tulostustyö" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Työn nimi" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Tulostusaika" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Aikaa jäljellä arviolta" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "Vaihda &koko näyttöön" +msgid "Toggle Full Screen" +msgstr "Vaihda koko näyttöön" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&Kumoa" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "Tee &uudelleen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Lopeta" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" +msgid "3D View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" +msgid "Front View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" +msgid "Top View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" +msgid "Left Side View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" +msgid "Right Side View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Määritä Curan asetukset..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "L&isää tulostin..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Tulostinten &hallinta..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Hallitse materiaaleja..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Päivitä nykyiset asetukset tai ohitukset profiiliin" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Hylkää tehdyt muutokset" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&Luo profiili nykyisten asetusten tai ohitusten perusteella..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Profiilien hallinta..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Näytä sähköinen &dokumentaatio" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Ilmoita &virheestä" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "Ti&etoja..." +msgid "About..." +msgstr "Tietoja..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Poista &valittu malli" -msgstr[1] "Poista &valitut mallit" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" +msgstr[0] "Poista valittu malli" +msgstr[1] "Poista valitut mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Keskitä valittu malli" msgstr[1] "Keskitä valitut mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Kerro valittu malli" msgstr[1] "Kerro valitut mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Poista malli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Ke&skitä malli alustalle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Ryhmittele mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Poista mallien ryhmitys" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Yhdistä mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Kerro malli..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&Valitse kaikki mallit" +msgid "Select All Models" +msgstr "Valitse kaikki mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Tyhjennä tulostusalusta" +msgid "Clear Build Plate" +msgstr "Tyhjennä tulostusalusta" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 +msgctxt "@action:inmenu menubar:file" +msgid "Reload All Models" +msgstr "Lataa kaikki mallit uudelleen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 -msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "&Lataa kaikki mallit uudelleen" - -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Järjestä kaikki mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Järjestä valinta" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Määritä kaikkien mallien positiot uudelleen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "Määritä kaikkien mallien &muutokset uudelleen" +msgid "Reset All Model Transformations" +msgstr "Määritä kaikkien mallien muutokset uudelleen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Avaa tiedosto(t)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Uusi projekti..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Näytä moottorin l&oki" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Näytä määrityskansio" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Lataa 3D-malli" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Valmiina viipaloimaan" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Viipaloidaan..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Valmis: %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Viipalointi ei onnistu" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Viipalointi ei käytettävissä" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Valmistele" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Peruuta" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Valitse aktiivinen tulostusväline" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "Avaa tiedosto(t)" @@ -4022,129 +4176,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" -msgstr "&Tiedosto" +msgstr "Tie&dosto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 -msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "&Tallenna valinta tiedostoon" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Tallenna &nimellä…" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." +msgid "&Save..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 +msgctxt "@action:inmenu menubar:file" +msgid "Export Selection..." +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Muokkaa" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "&Näytä" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "&Asetukset" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Tulostin" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "&Materiaali" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Aseta aktiiviseksi suulakepuristimeksi" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "&Profiili" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "Laa&jennukset" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "L&isäasetukset" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "&Ohje" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "Avaa tiedosto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "Asetukset" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "Uusi projekti" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Haluatko varmasti aloittaa uuden projektin? Se tyhjentää alustan ja kaikki tallentamattomat asetukset." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "Avaa tiedosto(t)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." msgstr "Löysimme vähintään yhden Gcode-tiedoston valitsemiesi tiedostojen joukosta. Voit avata vain yhden Gcode-tiedoston kerrallaan. Jos haluat avata Gcode-tiedoston, valitse vain yksi." @@ -4154,112 +4324,107 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Tallenna projekti" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Suulake %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & materiaali" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Älä näytä projektin yhteenvetoa tallennettaessa" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Tallenna" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Kerroksen korkeus" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Tulostusnopeus" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Hitaammin" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Nopeammin" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Täyttö" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Asteittainen täyttö lisää täytön tiheyttä vähitellen yläosaa kohti." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "Ota asteittainen käyttöön" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "Muodosta tuki" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Muodosta rakenteita, jotka tukevat mallin ulokkeita sisältäviä osia. Ilman tukirakenteita kyseiset osat luhistuvat tulostuksen aikana." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Valitse tukena käytettävä suulakepuristin. Näin mallin alle rakennetaan tukirakenteita estämään mallin painuminen tai tulostuminen ilmaan." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Alustan tarttuvuus" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Ota reunuksen tai pohjaristikon tulostus käyttöön. Tämä lisää kappaleen ympärille tai alle tasaisen alueen, joka on helppo leikata pois myöhemmin." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Tarvitsetko apua tulosteiden parantamiseen?
Lue Ultimakerin vianmääritysoppaat" @@ -4306,22 +4471,22 @@ msgctxt "@label" msgid "Printer type" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Materiaali" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" +msgid "Use glue with this material combination" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Napsauta ja tarkista materiaalin yhteensopivuus sivustolla Ultimaker.com." @@ -4411,16 +4576,6 @@ msgctxt "name" msgid "God Mode" msgstr "Jumala-tila" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Hyväksyy GCode-määrittelyt ja lähettää ne Wi-Fi-yhteyden kautta Doodle3D WiFi-Boxiin." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4431,6 +4586,16 @@ msgctxt "name" msgid "Changelog" msgstr "Muutosloki" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "" + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." @@ -4501,16 +4666,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "" - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4621,16 +4776,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Aikaisempien Cura-profiilien lukija" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "" - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4681,6 +4826,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Päivitys versiosta 2.7 versioon 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4821,6 +4976,146 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura-profiilin lukija" +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "Päivitä laiteohjelmisto" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "Laiteohjelmiston päivitys" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Tulostus Doodle3D WiFi-Boxin avulla" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Tulostus Doodle3D WiFi-Boxin avulla" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Yhteyden muodostaminen Doodle3D Connectiin" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Lähetetään tietoja Doodle3D Connectiin" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Tietojen lähetys Doodle3D Connectiin ei onnistu. Onko toinen työ yhä aktiivinen?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Tietoja tallennetaan Doodle3D Connectiin" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Tiedosto lähetetty Doodle3D Connectiin" + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Avaa Doodle3D Connect -verkkoliittymä" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Tätä tulostinta ei ole määritetty Ultimaker 3 -tulostinryhmän isännäksi." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Tämä tulostin on {count} tulostimen Ultimaker 3 -ryhmän isäntä." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 ei ole määritetty yhdistetyn Ultimaker 3 -tulostinryhmän isännäksi" + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Näytä tulostustyöt" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Tulostetaan" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Saatavilla" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Varattu" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Valmistellaan tulostusta" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Tulostus keskeytetty" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Ei hyväksy tulostustöitä" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Päättyy: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Tyhjennä alusta" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Odotetaan määrityksen muutosta" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Tulostustyöt" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Tulostimet" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Näytä tulostimet" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Keskeytä" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Jatka" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Keskeytä tulostus" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Kysy aina" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Kumoa profiili" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "&Tallenna valinta tiedostoon" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Tallenna &nimellä…" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Hyväksyy GCode-määrittelyt ja lähettää ne Wi-Fi-yhteyden kautta Doodle3D WiFi-Boxiin." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + #~ msgctxt "@item:inlistbox" #~ msgid "SolidWorks part file" #~ msgstr "SolidWorks-osatiedosto" @@ -5307,10 +5602,6 @@ msgstr "Cura-profiilin lukija" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Tämä tulostin on %1 tulostimen yhdistetyn Ultimaker 3 -ryhmän isäntä" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Valmistellaan" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Valmistunut: " diff --git a/resources/i18n/fi_FI/fdmextruder.def.json.po b/resources/i18n/fi_FI/fdmextruder.def.json.po index 02f11f3837..07ccc2502e 100644 --- a/resources/i18n/fi_FI/fdmextruder.def.json.po +++ b/resources/i18n/fi_FI/fdmextruder.def.json.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" "PO-Revision-Date: 2017-08-11 14:31+0200\n" "Last-Translator: Bothof \n" "Language-Team: Finnish\n" @@ -166,6 +166,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "Z-koordinaatti sijainnille, jossa suutin esitäytetään tulostusta aloitettaessa." +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "" + +#: 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 "" + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/fi_FI/fdmprinter.def.json.po b/resources/i18n/fi_FI/fdmprinter.def.json.po index 862dadaa15..6a4e7390ad 100644 --- a/resources/i18n/fi_FI/fdmprinter.def.json.po +++ b/resources/i18n/fi_FI/fdmprinter.def.json.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" "PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: Finnish\n" @@ -80,6 +80,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "Materiaalin GUID. Tämä määritetään automaattisesti. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Läpimitta" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Säätää käytetyn tulostuslangan halkaisijaa. Määritä tämä arvo vastaamaan käytetyn tulostuslangan halkaisijaa." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1055,6 +1065,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Siksak" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "" + +#: 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 "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1135,6 +1155,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Kompensoi tulostettaessa virtausta niiden sisäseinämien osien kohdalla, joissa on jo olemassa seinämä." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1452,7 +1492,7 @@ msgstr "Täyttökuvio" #: 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +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 "" #: fdmprinter.def.json @@ -1500,11 +1540,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Samankeskinen" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Samankeskinen 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1520,6 +1555,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "Risti 3D" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1530,6 +1570,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "" +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1560,6 +1610,28 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "" +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1870,16 +1942,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "Lämmitettävän alustan lämpötila ensimmäistä kerrosta tulostettaessa." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Läpimitta" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Säätää käytetyn tulostuslangan halkaisijaa. Määritä tämä arvo vastaamaan käytetyn tulostuslangan halkaisijaa." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2717,8 +2779,8 @@ msgstr "Pyyhkäisytila" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "Pyyhkäisy pitää suuttimen aiemmin tulostetuilla alueilla siirtoliikkeitä tehtäessä. Tämä johtaa hieman pidempiin siirtoliikkeisiin, mutta vähentää takaisinvedon tarvetta. Jos pyyhkäisy on poistettu käytöstä, materiaalille tehdään takaisinveto ja suutin liikkuu suoraan seuraavaan pisteeseen. On myös mahdollista välttää pyyhkäisy ylä- tai alapintakalvojen yli pyyhkäisemällä vain täytössä." +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2735,6 +2797,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3115,11 +3182,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Samankeskinen" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Samankeskinen 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3180,6 +3242,56 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Tulostettujen tukirakenteiden linjojen välinen etäisyys. Tämä asetus lasketaan tuen tiheyden perusteella." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "" + +#: 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 "" + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "" + +#: 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 "" + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "" + +#: 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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3470,11 +3582,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Samankeskinen" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Samankeskinen 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3510,11 +3617,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Samankeskinen" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Samankeskinen 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3550,16 +3652,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Samankeskinen" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Samankeskinen 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Siksak" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "" + +#: 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 "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3742,6 +3859,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "Reunukseen käytettävien linjojen lukumäärä. Useampi reunuslinja parantaa kiinnitystä alustaan, mutta rajoittaa tehokasta tulostusaluetta." +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "" + +#: 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 "" + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -3884,8 +4011,8 @@ msgstr "Pohjaristikon pohjakerroksen linjojen leveys. Näiden tulisi olla paksuj #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Pohjaristikon linjajako" +msgid "Raft Base Line Spacing" +msgstr "" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4102,16 +4229,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Esitäyttötornin kunkin kerroksen minimitilavuus, jotta voidaan poistaa riittävästi materiaalia." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Esitäyttötornin paksuus" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "Onton esitäyttötornin paksuus. Jos paksuus ylittää puolet esitäyttötornin minimitilavuudesta, tuloksena on tiheä esitäyttötorni." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4152,26 +4269,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Kun esitäyttötorni on tulostettu yhdellä suuttimella, pyyhi toisesta suuttimesta tihkunut materiaali pois esitäyttötornissa." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Pyyhi suutin vaihdon jälkeen" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Pyyhi suuttimen vaihdon jälkeen tihkunut materiaali pois suuttimesta, kun ensimmäinen kappale on tulostettu. Näin saadaan aikaan turvallinen ja hidas pyyhkäisyliike kohdassa, jossa tihkunut materiaali vaurioittaa mahdollisimman vähän tulostuksen pinnan laatua." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Esitäyttötornin poistoainemäärä" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Poistettavan tulostuslangan määrä esitäyttötornia pyyhittäessä. Poisto on hyödyllinen menetetyn tulostuslangan kompensointiin, silloin kun sitä tihkuu suuttimen ollessa ei-aktiivinen." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4657,6 +4754,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Tiedot, jotka yhdistävät materiaalivirran (mm3 sekunnissa) lämpötilaan (celsiusastetta)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5316,6 +5423,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "" +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5346,16 +5473,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "" -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "" - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5576,6 +5693,58 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Mallissa käytettävä muunnosmatriisi, kun malli ladataan tiedostosta." +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Samankeskinen 3D" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "Pyyhkäisy pitää suuttimen aiemmin tulostetuilla alueilla siirtoliikkeitä tehtäessä. Tämä johtaa hieman pidempiin siirtoliikkeisiin, mutta vähentää takaisinvedon tarvetta. Jos pyyhkäisy on poistettu käytöstä, materiaalille tehdään takaisinveto ja suutin liikkuu suoraan seuraavaan pisteeseen. On myös mahdollista välttää pyyhkäisy ylä- tai alapintakalvojen yli pyyhkäisemällä vain täytössä." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Samankeskinen 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Samankeskinen 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Samankeskinen 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Samankeskinen 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Pohjaristikon linjajako" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Esitäyttötornin paksuus" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "Onton esitäyttötornin paksuus. Jos paksuus ylittää puolet esitäyttötornin minimitilavuudesta, tuloksena on tiheä esitäyttötorni." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Pyyhi suutin vaihdon jälkeen" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Pyyhi suuttimen vaihdon jälkeen tihkunut materiaali pois suuttimesta, kun ensimmäinen kappale on tulostettu. Näin saadaan aikaan turvallinen ja hidas pyyhkäisyliike kohdassa, jossa tihkunut materiaali vaurioittaa mahdollisimman vähän tulostuksen pinnan laatua." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Esitäyttötornin poistoainemäärä" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Poistettavan tulostuslangan määrä esitäyttötornia pyyhittäessä. Poisto on hyödyllinen menetetyn tulostuslangan kompensointiin, silloin kun sitä tihkuu suuttimen ollessa ei-aktiivinen." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Optimoi seinämien tulostusjärjestys takaisinvetojen ja kuljetun etäisyyden vähentämiseksi. Useimmat osat hyötyvät tämän asetuksen käytöstä, mutta joissakin saattaa kestää kauemmin, joten vertaa tulostusajan arvioita optimointia käytettäessä ja ilman sitä." diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po index 8921c2c6c7..9b1fff4124 100644 --- a/resources/i18n/fr_FR/cura.po +++ b/resources/i18n/fr_FR/cura.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" +"PO-Revision-Date: 2018-09-28 14:59+0200\n" "Last-Translator: Bothof \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "Fichier GCode" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "GCodeWriter ne prend pas en charge le mode non-texte." + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "Veuillez préparer le G-Code avant d'exporter." + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -55,102 +66,51 @@ msgid "" "

View print quality guide

" msgstr "

Un ou plusieurs modèles 3D peuvent ne pas s'imprimer de manière optimale en raison de la taille du modèle et de la configuration matérielle :

\n

{model_names}

\n

Découvrez comment optimiser la qualité et la fiabilité de l'impression.

\n

Consultez le guide de qualité d'impression

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimer avec Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimer avec Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Connexion avec Doodle3D Connecter..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Annuler" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Envoi de données vers Doodle3D Connecter..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Impossible d'envoyer les données à Doodle3D Connect. Une autre tâche est-elle toujours active ?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Enregistrement de données dans Doodle3D Connecter..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Fichier envoyé vers Doodle3D Connecter" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Ouvrir Connect..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Ouvrir l'interface web Doodle3D Connecter" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Afficher le récapitulatif des changements" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "Mettre à jour le firmware" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Aplatir les paramètres actifs" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Le profil a été aplati et activé." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "Impression par USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Imprimer via USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Imprimer via USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "Connecté via USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "Une impression USB est en cours, la fermeture de Cura arrêtera cette impression. Êtes-vous sûr ?" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -173,7 +133,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Fichier G-Code compressé" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "GCodeGzWriter ne prend pas en charge le mode texte." + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "Ultimaker Format Package" @@ -195,7 +160,7 @@ msgid "Save to Removable Drive {0}" msgstr "Enregistrer sur un lecteur amovible {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Aucun format de fichier n'est disponible pour écriture !" @@ -209,7 +174,7 @@ msgstr "Enregistrement sur le lecteur amovible {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:94 msgctxt "@info:title" msgid "Saving" -msgstr "Enregistrement..." +msgstr "Enregistrement" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:104 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:107 @@ -234,7 +199,7 @@ msgstr "Impossible d'enregistrer sur le lecteur {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "Erreur" @@ -263,8 +228,8 @@ msgstr "Ejecter le lecteur amovible {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "Avertissement" @@ -291,259 +256,269 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Lecteur amovible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Imprimer sur le réseau" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Imprimer sur le réseau" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "Connecté sur le réseau." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "Connecté sur le réseau. Veuillez approuver la demande d'accès sur l'imprimante." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "Connecté sur le réseau. Pas d'accès pour commander l'imprimante." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "Accès à l'imprimante demandé. Veuillez approuver la demande sur l'imprimante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "Statut d'authentification" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "Statut d'authentification" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "Réessayer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Renvoyer la demande d'accès" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Accès à l'imprimante accepté" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "Aucun accès pour imprimer avec cette imprimante. Impossible d'envoyer la tâche d'impression." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "Demande d'accès" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Envoyer la demande d'accès à l'imprimante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Impossible de démarrer une nouvelle tâche d'impression." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." msgstr "Un problème avec la configuration de votre Ultimaker empêche le démarrage de l'impression. Veuillez résoudre ce problème avant de continuer." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Configuration différente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "Êtes-vous sûr(e) de vouloir imprimer avec la configuration sélectionnée ?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Problème de compatibilité entre la configuration ou l'étalonnage de l'imprimante et Cura. Pour un résultat optimal, découpez toujours pour les PrintCores et matériaux insérés dans votre imprimante." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "Envoi de nouvelles tâches (temporairement) bloqué, envoi de la tâche d'impression précédente en cours." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Envoi des données à l'imprimante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" -msgstr "Envoi des données..." +msgstr "Envoi des données" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Annuler" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "Pas de PrintCore inséré dans la fente {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "Aucun matériau inséré dans la fente {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, python-brace-format msgctxt "@label" msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" msgstr "PrintCore différent (Cura : {cura_printcore_name}, Imprimante : {remote_printcore_name}) sélectionné pour l'extrudeuse {extruder_id}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "Matériau différent (Cura : {0}, Imprimante : {1}) sélectionné pour l'extrudeuse {2}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Synchroniser avec votre imprimante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Voulez-vous utiliser votre configuration d'imprimante actuelle dans Cura ?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Les PrintCores et / ou matériaux sur votre imprimante diffèrent de ceux de votre projet actuel. Pour un résultat optimal, découpez toujours pour les PrintCores et matériaux insérés dans votre imprimante." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" -msgstr "Connecté sur le réseau." +msgstr "Connecté sur le réseau" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "L'envoi de la tâche d'impression à l'imprimante a réussi." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "Données envoyées" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "Afficher sur le moniteur" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "{printer_name} a terminé d'imprimer '{job_name}'." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "La tâche d'impression '{job_name}' est terminée." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "Impression terminée" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Connecter via le réseau" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Surveiller" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "Impossible d'accéder aux informations de mise à jour." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "De nouvelles fonctionnalités sont disponibles pour votre {machine_name} ! Il est recommandé de mettre à jour le firmware sur votre imprimante." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Nouveau firmware %s disponible" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "Comment effectuer la mise à jour" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "Impossible d'accéder aux informations de mise à jour." - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Vue en couches" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Cura n'affiche pas les couches avec précision lorsque l'impression filaire est activée" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "Vue simulation" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "Modifier le G-Code" @@ -557,32 +532,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Créer un volume dans lequel les supports ne sont pas imprimés." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura recueille des statistiques d'utilisation anonymes." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" -msgstr "Collecte des données..." +msgstr "Collecte des données" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "Plus d'informations" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Voir plus d'informations sur les données envoyées par Cura." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "Autoriser" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Autoriser Cura à envoyer des statistiques d'utilisation anonymes pour mieux prioriser les améliorations futures apportées à Cura. Certaines de vos préférences et paramètres sont envoyés, ainsi que la version du logiciel Cura et un hachage des modèles que vous découpez." @@ -592,18 +567,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Profils Cura 15.04" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Fichier Blender" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "Impossible d'exporter avec la qualité \"{}\" !\nQualité redéfinie sur \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -629,49 +592,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Image GIF" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Impossible de découper le matériau actuel, car celui-ci est incompatible avec la machine ou la configuration sélectionnée." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "Impossible de découper" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Impossible de couper avec les paramètres actuels. Les paramètres suivants contiennent des erreurs : {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Impossible de couper en raison de certains paramètres par modèle. Les paramètres suivants contiennent des erreurs sur un ou plusieurs modèles : {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Impossible de couper car la tour primaire ou la (les) position(s) d'amorçage ne sont pas valides." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "Impossible de couper car il existe des objets associés à l'extrudeuse désactivée %s." + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Rien à couper car aucun des modèles ne convient au volume d'impression. Mettez à l'échelle ou faites pivoter les modèles pour les faire correspondre." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "Traitement des couches" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "Informations" @@ -687,29 +657,40 @@ msgid "Configure Per Model Settings" msgstr "Configurer les paramètres par modèle" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "Recommandé" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "Personnalisé" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Fichier 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "Buse" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "Le fichier projet {0} contient un type de machine inconnu {1}. Impossible d'importer la machine. Les modèles seront importés à la place." + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "Ouvrir un fichier de projet" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -720,18 +701,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Fichier G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Analyse du G-Code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "Détails G-Code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Assurez-vous que le g-code est adapté à votre imprimante et à la configuration de l'imprimante avant d'y envoyer le fichier. La représentation du g-code peut ne pas être exacte." @@ -742,27 +723,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Profil Cura" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "Fichier 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Projet Cura fichier 3MF" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "Erreur d'écriture du fichier 3MF." + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "Sélectionner les mises à niveau" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "Mise à niveau du firmware" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -773,79 +754,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "Nivellement du plateau" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "Paroi externe" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "Parois internes" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "Couche extérieure" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "Remplissage" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "Remplissage du support" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "Interface du support" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "Support" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "Jupe" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "Déplacement" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "Rétractions" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "Autre" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "Inconnu" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Fichier {0} prédécoupé" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "La connexion a échoué" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Le fichier existe déjà" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -857,23 +838,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Pas écrasé" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Le matériau sélectionné est incompatible avec la machine ou la configuration sélectionnée." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Matériau incompatible" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "Les paramètres ont été modifiés pour correspondre aux extrudeuses actuellement disponibles : [%s]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "Paramètres mis à jour" @@ -902,8 +883,6 @@ msgid "Export succeeded" msgstr "L'exportation a réussi" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" @@ -911,58 +890,70 @@ msgstr "Échec de l'importation du profil depuis le fichier {0} or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" msgstr "Aucun profil personnalisé à importer dans le fichier {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 "Échec de l'importation du profil depuis le fichier {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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." msgstr "Le profil {0} contient des données incorrectes ; échec de l'importation." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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 "La machine définie dans le profil {0} ({1}) ne correspond pas à votre machine actuelle ({2}) ; échec de l'importation." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "Échec de l'importation du profil depuis le fichier {0} :" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Importation du profil {0} réussie" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "Le fichier {0} ne contient pas de profil valide." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "Le profil {0} est un type de fichier inconnu ou est corrompu." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "Personnaliser le profil" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Il manque un type de qualité au profil." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Impossible de trouver un type de qualité {0} pour la configuration actuelle." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -989,42 +980,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Tous les fichiers (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "Matériau personnalisé" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "Personnalisé" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "La hauteur du volume d'impression a été réduite en raison de la valeur du paramètre « Séquence d'impression » afin d'éviter que le portique ne heurte les modèles imprimés." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Volume d'impression" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Impossible de créer une archive à partir du répertoire de données de l'utilisateur : {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "Sauvegarde" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "A essayé de restaurer une sauvegarde Cura sans disposer de données ou de métadonnées appropriées." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "A essayé de restaurer une sauvegarde Cura qui ne correspond pas à votre version actuelle." @@ -1035,32 +1026,32 @@ msgid "Multiplying and placing objects" msgstr "Multiplication et placement d'objets" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" -msgstr "Placement de l'objet..." +msgstr "Placement de l'objet" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Impossible de trouver un emplacement dans le volume d'impression pour tous les objets" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Recherche d'un nouvel emplacement pour les objets" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" -msgstr "Recherche d'emplacement..." +msgstr "Recherche d'emplacement" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Impossible de trouver un emplacement" @@ -1191,223 +1182,233 @@ msgctxt "@action:button" msgid "Send report" msgstr "Envoyer rapport" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Chargement des machines..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Préparation de la scène..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Chargement de l'interface..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f mm" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "Un seul fichier G-Code peut être chargé à la fois. Importation de {0} sautée" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "Impossible d'ouvrir un autre fichier si le G-Code est en cours de chargement. Importation de {0} sautée" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Le modèle sélectionné était trop petit pour être chargé." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Paramètres de la machine" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Imprimante" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Paramètres de l'imprimante" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Largeur)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Profondeur)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Hauteur)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Forme du plateau" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Origine au centre" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Plateau chauffant" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Parfum G-Code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Paramètres de la tête d'impression" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distance entre la gauche de la tête d'impression et le centre de la buse. Permet d'empêcher les collisions entre les impressions précédentes et la tête d'impression lors d'une impression « Un à la fois »." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distance entre le devant de la tête d'impression et le centre de la buse. Permet d'empêcher les collisions entre les impressions précédentes et la tête d'impression lors d'une impression « Un à la fois »." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distance entre la droite de la tête d'impression et le centre de la buse. Permet d'empêcher les collisions entre les impressions précédentes et la tête d'impression lors d'une impression « Un à la fois »." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distance entre le dos de la tête d'impression et le centre de la buse. Permet d'empêcher les collisions entre les impressions précédentes et la tête d'impression lors d'une impression « Un à la fois »." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Hauteur du portique" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "La différence de hauteur entre la pointe de la buse et le système de portique (axes X et Y). Permet d'empêcher les collisions entre les impressions précédentes et le portique lors d'une impression « Un à la fois »." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Nombre d'extrudeuses" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "G-Code de démarrage" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Commandes G-Code à exécuter au tout début." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "G-Code de fin" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Commandes G-Code à exécuter tout à la fin." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Paramètres de la buse" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Taille de la buse" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Diamètre du matériau compatible" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "Le diamètre nominal de filament pris en charge par l'imprimante. Le diamètre exact sera remplacé par le matériau et / ou le profil." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "Décalage buse X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Décalage buse Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "Numéro du ventilateur de refroidissement" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "Extrudeuse G-Code de démarrage" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "Extrudeuse G-Code de fin" @@ -1427,12 +1428,20 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Impossible de se connecter à la base de données Cura Package. Veuillez vérifier votre connexion." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "Plug-ins" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Matériaux" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1448,8 +1457,14 @@ msgctxt "@label" msgid "Author" msgstr "Auteur" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "Téléchargements" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "Inconnu" @@ -1482,17 +1497,57 @@ msgctxt "@action:button" msgid "Back" msgstr "Précédent" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "Confirmer la désinstallation" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "Vous désinstallez des matériaux et/ou des profils qui sont encore en cours d'utilisation. La confirmation réinitialisera les matériaux / profils suivants à leurs valeurs par défaut." + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "Matériaux" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "Profils" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "Confirmer" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "Vous devez redémarrer Cura pour que les changements apportés aux paquets ne prennent effet." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Quitter Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "Contributions de la communauté" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "Plug-ins de la communauté" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "Matériaux génériques" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "Installé" @@ -1535,12 +1590,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Refuser" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Fonctionnalités" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilité" @@ -1550,10 +1605,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Récupération des paquets..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Contact" +msgid "Website" +msgstr "Site Internet" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "E-mail" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1566,48 +1626,88 @@ msgid "Changelog" msgstr "Récapitulatif des changements" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "Fermer" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "Mettre à jour le firmware" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "Le firmware est le logiciel fonctionnant directement dans votre imprimante 3D. Ce firmware contrôle les moteurs pas à pas, régule la température et surtout, fait que votre machine fonctionne." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "Le firmware fourni avec les nouvelles imprimantes fonctionne, mais les nouvelles versions ont tendance à fournir davantage de fonctionnalités ainsi que des améliorations." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "Mise à niveau automatique du firmware" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "Charger le firmware personnalisé" + +#: /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 "Impossible de se connecter à l'imprimante ; échec de la mise à jour du firmware." + +#: /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 "Échec de la mise à jour du firmware, car cette fonctionnalité n'est pas prise en charge par la connexion avec l'imprimante." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "Sélectionner le firmware personnalisé" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "Mise à jour du firmware" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "Mise à jour du firmware en cours." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "Mise à jour du firmware terminée." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "Échec de la mise à jour du firmware en raison d'une erreur inconnue." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "Échec de la mise à jour du firmware en raison d'une erreur de communication." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "Échec de la mise à jour du firmware en raison d'une erreur d'entrée/de sortie." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Échec de la mise à jour du firmware en raison du firmware manquant." @@ -1617,22 +1717,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Accord utilisateur" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "Connexion existante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "Ce groupe / cette imprimante a déjà été ajouté à Cura. Veuillez sélectionner un autre groupe / imprimante." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Connecter à l'imprimante en réseau" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" @@ -1640,333 +1740,395 @@ msgid "" "Select your printer from the list below:" msgstr "Pour imprimer directement sur votre imprimante sur le réseau, assurez-vous que votre imprimante est connectée au réseau via un câble réseau ou en connectant votre imprimante à votre réseau Wi-Fi. Si vous ne connectez pas Cura avec votre imprimante, vous pouvez utiliser une clé USB pour transférer les fichiers g-code sur votre imprimante.\n\nSélectionnez votre imprimante dans la liste ci-dessous :" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Ajouter" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "Modifier" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Supprimer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "Rafraîchir" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Si votre imprimante n'apparaît pas dans la liste, lisez le guide de dépannage de l'impression en réseau" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "Type" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "Version du firmware" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "Adresse" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "L'imprimante n'est pas configurée pour héberger un groupe d'imprimantes Ultimaker 3." +msgid "This printer is not set up to host a group of printers." +msgstr "Cette imprimante n'est pas configurée pour héberger un groupe d'imprimantes." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "L'imprimante est le patron pour un groupe de %1 imprimantes Ultimaker 3." +msgid "This printer is the host for a group of %1 printers." +msgstr "Cette imprimante est l'hôte d'un groupe d'imprimantes %1." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "L'imprimante à cette adresse n'a pas encore répondu." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "Connecter" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "Adresse de l'imprimante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Saisissez l'adresse IP ou le nom d'hôte de votre imprimante sur le réseau." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "Imprimer sur le réseau" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "Sélection d'imprimantes" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "Imprimer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 n'est pas configurée pour héberger un groupe d'imprimantes connectées Ultimaker 3." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "Imprimer sur le réseau" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Ajouter / supprimer une imprimante" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" +msgstr "Sélection d'imprimantes" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Ouvre la page des tâches d'impression avec votre navigateur web." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" +msgstr "Non disponible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Afficher les tâches d'impression" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" +msgstr "Injoignable" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Préparation..." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Impression..." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" msgstr "Disponible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Connexion avec l'imprimante perdue" +msgid "Aborted" +msgstr "Abandonné" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Indisponible" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Inconnu" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Désactivé" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Réservée" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "Terminé" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Préparation de l'impression..." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" -msgstr "Action requise" +msgid "Preparing" +msgstr "Préparation" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" -msgstr "En pause" +msgid "Pausing" +msgstr "Mise en pause" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "Reprise" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" -msgstr "Abandon de l'impression" +msgid "Action required" +msgstr "Action requise" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Non acceptation des tâches d'impression" +msgid "Waiting for: Unavailable printer" +msgstr "En attente : imprimante non disponible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "Complète a: " +msgid "Waiting for: First available" +msgstr "En attente : première imprimante disponible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "Enlever les objets du plateau" +msgid "Waiting for: " +msgstr "En attente : " -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "En attente de modification de configuration" +msgid "Configuration change" +msgstr "Modification des configurations" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Imprimer les tâches" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "Impression..." +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "L'imprimante assignée, %1, nécessite d'apporter la ou les modifications suivantes à la configuration :" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "L'imprimante %1 est assignée, mais le projet contient une configuration matérielle inconnue." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 +msgctxt "@label" +msgid "Change material %1 from %2 to %3." +msgstr "Changer le matériau %1 de %2 à %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 "Charger %3 comme matériau %1 (Ceci ne peut pas être remplacé)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "Changer le print core %1 de %2 à %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 "Changer le plateau en %1 (Ceci ne peut pas être remplacé)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "Remplacer" + +#: /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 "Le fait de démarrer un travail d'impression avec une configuration incompatible peut endommager votre imprimante 3D. Êtes-vous sûr de vouloir remplacer la configuration et imprimer %1 ?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:435 +msgctxt "@window:title" +msgid "Override configuration configuration and start print" +msgstr "Remplacer la configuration et lancer l'impression" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "Verre" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "Aluminium" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "Gérer la file d'attente" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "Mis en file d'attente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Imprimantes" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "Impression" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Afficher les imprimantes" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "Gérer les imprimantes" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "Déplacer l'impression en haut" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "Effacer" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "Reprendre" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "Pause" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "Abandonner" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "Êtes-vous sûr de vouloir déplacer %1 en haut de la file d'attente ?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "Déplacer l'impression en haut de la file d'attente" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "Êtes-vous sûr de vouloir supprimer %1 ?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "Supprimer l'impression" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "Êtes-vous sûr de vouloir annuler %1 ?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Abandonner l'impression" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Connecter à une imprimante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "Charger la configuration de l'imprimante dans Cura" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Activer la configuration" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "Charger la configuration de l'imprimante dans Cura" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Modèle de couleurs" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Couleur du matériau" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Type de ligne" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Taux d'alimentation" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Épaisseur de la couche" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Mode de compatibilité" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Afficher les déplacements" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Afficher les aides" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Afficher la coque" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Afficher le remplissage" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Afficher uniquement les couches supérieures" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "Afficher 5 niveaux détaillés en haut" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Haut / bas" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Paroi interne" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "min." -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "max." @@ -1981,17 +2143,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "Scripts de post-traitement" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "Ajouter un script" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "Paramètres" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "Modifier les scripts de post-traitement actifs" @@ -2086,53 +2248,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Lissage" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Type de maille" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Modèle normal" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Imprimer comme support" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Ne pas prendre en charge le chevauchement avec d'autres modèles" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Modifier les paramètres de chevauchement avec d'autres modèles" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Modifier les paramètres de remplissage d'autres modèles" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "Sélectionner les paramètres" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Sélectionner les paramètres pour personnaliser ce modèle" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtrer..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "Afficher tout" @@ -2154,13 +2316,13 @@ msgid "Create new" msgstr "Créer" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Résumé - Projet Cura" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Paramètres de l'imprimante" @@ -2177,18 +2339,19 @@ msgid "Update" msgstr "Mise à jour" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Type" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "Groupe d'imprimantes" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Paramètres de profil" @@ -2200,19 +2363,20 @@ msgstr "Comment le conflit du profil doit-il être résolu ?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Nom" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "Absent du profil" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2242,7 +2406,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Comment le conflit du matériau doit-il être résolu ?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Visibilité des paramètres" @@ -2253,13 +2417,13 @@ msgid "Mode" msgstr "Mode" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Paramètres visibles :" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 sur %2" @@ -2315,36 +2479,6 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "Aller à la position suivante" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "Mise à niveau du firmware" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "Le firmware est le logiciel fonctionnant directement dans votre imprimante 3D. Ce firmware contrôle les moteurs pas à pas, régule la température et surtout, fait que votre machine fonctionne." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "Le firmware fourni avec les nouvelles imprimantes fonctionne, mais les nouvelles versions ont tendance à fournir davantage de fonctionnalités ainsi que des améliorations." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "Mise à niveau automatique du firmware" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "Charger le firmware personnalisé" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "Sélectionner le firmware personnalisé" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" @@ -2492,27 +2626,11 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Supprimez l'imprimante" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Pause" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Reprendre" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "Abandonner l'impression" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Abandonner l'impression" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2546,19 +2664,17 @@ msgid "Customized" msgstr "Personnalisé" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Toujours me demander" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Annuler et ne plus me demander" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Conserver et ne plus me demander" @@ -2578,101 +2694,179 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Créer un nouveau profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Informations" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Confirmer le changement de diamètre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" msgstr "Le nouveau diamètre de filament est réglé sur %1 mm, ce qui n'est pas compatible avec l'extrudeuse actuelle. Souhaitez-vous poursuivre ?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Afficher le nom" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marque" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Type de matériau" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Couleur" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Propriétés" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Densité" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Diamètre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Coût du filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Poids du filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Longueur du filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Coût au mètre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Ce matériau est lié à %1 et partage certaines de ses propriétés." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Délier le matériau" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Description" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Informations d'adhérence" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "Paramètres d'impression" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Activer" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Créer" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "Dupliquer" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "Importer" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Exporter" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "Imprimante" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "Confirmer la suppression" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "Êtes-vous sûr de vouloir supprimer l'objet %1 ? Vous ne pourrez pas revenir en arrière !" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Importer un matériau" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "Impossible d'importer le matériau %1 : %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "Matériau %1 importé avec succès" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Exporter un matériau" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "Échec de l'exportation de matériau vers %1 : %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Matériau exporté avec succès vers %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2709,289 +2903,287 @@ msgid "Unit" msgstr "Unité" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "Général" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "Interface" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "Langue :" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "Devise :" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "Thème :" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "Vous devez redémarrer l'application pour que ces changements prennent effet." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Découper automatiquement si les paramètres sont modifiés." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "Découper automatiquement" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "Comportement Viewport" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Surligne les parties non supportées du modèle en rouge. Sans ajouter de support, ces zones ne s'imprimeront pas correctement." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "Mettre en surbrillance les porte-à-faux" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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 "Déplace la caméra afin que le modèle sélectionné se trouve au centre de la vue." +msgstr "Déplace la caméra afin que le modèle sélectionné se trouve au centre de la vue" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Centrer la caméra lorsqu'un élément est sélectionné" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "Le comportement de zoom par défaut de Cura doit-il être inversé ?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Inverser la direction du zoom de la caméra." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "Le zoom doit-il se faire dans la direction de la souris ?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Zoomer vers la direction de la souris" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "Les modèles dans la zone d'impression doivent-ils être déplacés afin de ne plus se croiser ?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Veillez à ce que les modèles restent séparés" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "Les modèles dans la zone d'impression doivent-ils être abaissés afin de toucher le plateau ?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Abaisser automatiquement les modèles sur le plateau" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "Afficher le message d'avertissement dans le lecteur G-Code." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "Message d'avertissement dans le lecteur G-Code" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "La couche doit-elle être forcée en mode de compatibilité ?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Forcer l'affichage de la couche en mode de compatibilité (redémarrage requis)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "Ouvrir et enregistrer des fichiers" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "Les modèles doivent-ils être mis à l'échelle du volume d'impression s'ils sont trop grands ?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "Réduire la taille des modèles trop grands" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "Un modèle peut apparaître en tout petit si son unité est par exemple en mètres plutôt qu'en millimètres. Ces modèles doivent-ils être agrandis ?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Mettre à l'échelle les modèles extrêmement petits" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "Les modèles doivent-ils être sélectionnés après leur chargement ?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Sélectionner les modèles lorsqu'ils sont chargés" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "Un préfixe basé sur le nom de l'imprimante doit-il être automatiquement ajouté au nom de la tâche d'impression ?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Ajouter le préfixe de la machine au nom de la tâche" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Un résumé doit-il être affiché lors de l'enregistrement d'un fichier de projet ?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Afficher la boîte de dialogue du résumé lors de l'enregistrement du projet" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Comportement par défaut lors de l'ouverture d'un fichier de projet" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Comportement par défaut lors de l'ouverture d'un fichier de projet : " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Toujours demander" +msgid "Always ask me this" +msgstr "Toujours me demander" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Toujours ouvrir comme projet" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "Toujours importer les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "Lorsque vous apportez des modifications à un profil puis passez à un autre profil, une boîte de dialogue apparaît, vous demandant si vous souhaitez conserver les modifications. Vous pouvez aussi choisir une option par défaut, et le dialogue ne s'affichera plus." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "Écraser le profil" +msgid "Profiles" +msgstr "Profils" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "Comportement par défaut pour les valeurs de paramètres modifiées lors du passage à un profil différent : " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "Toujours rejeter les paramètres modifiés" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "Toujours transférer les paramètres modifiés dans le nouveau profil" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "Confidentialité" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "Cura doit-il vérifier les mises à jour au démarrage du programme ?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Vérifier les mises à jour au démarrage" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "Les données anonymes de votre impression doivent-elles être envoyées à Ultimaker ? Notez qu'aucun modèle, aucune adresse IP ni aucune autre information permettant de vous identifier personnellement ne seront envoyés ou stockés." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Envoyer des informations (anonymes) sur l'impression" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "Plus d'informations" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "Expérimental" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Utiliser la fonctionnalité multi-plateau" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Utiliser la fonctionnalité multi-plateau (redémarrage requis)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Les modèles nouvellement chargés doivent-ils être disposés sur le plateau ? Utilisé en conjonction avec le multi-plateau (EXPÉRIMENTAL)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Ne pas réorganiser les objets lors du chargement" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "Imprimantes" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Activer" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3009,7 +3201,7 @@ msgid "Connection:" msgstr "Connexion :" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "L'imprimante n'est pas connectée." @@ -3035,7 +3227,7 @@ msgid "Aborting print..." msgstr "Abandon de l'impression..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "Profils" @@ -3050,18 +3242,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Dupliquer" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Importer" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Exporter" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3072,18 +3252,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Dupliquer un profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Confirmer la suppression" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "Êtes-vous sûr de vouloir supprimer l'objet %1 ? Vous ne pourrez pas revenir en arrière !" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3104,228 +3272,200 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Imprimante : %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Profils protégés" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Personnaliser les profils" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Mettre à jour le profil à l'aide des paramètres / forçages actuels" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Ignorer les modifications actuelles" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "Ce profil utilise les paramètres par défaut spécifiés par l'imprimante, de sorte qu'aucun paramètre / forçage n'apparaît dans la liste ci-dessous." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Vos paramètres actuels correspondent au profil sélectionné." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Paramètres généraux" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Matériaux" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Créer" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Dupliquer" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Importer un matériau" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr "Impossible d'importer le matériau %1 : %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "Matériau %1 importé avec succès" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Exporter un matériau" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "Échec de l'exportation de matériau vers %1 : %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Matériau exporté avec succès vers %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Imprimante" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "Ajouter une imprimante" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "Nom de l'imprimante :" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "Ajouter une imprimante" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "Sans titre" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "À propos de Cura" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "version : %1" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "Solution complète pour l'impression 3D par dépôt de filament fondu." -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" msgstr "Cura a été développé par Ultimaker B.V. en coopération avec la communauté Ultimaker.\nCura est fier d'utiliser les projets open source suivants :" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "Interface utilisateur graphique" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "Cadre d'application" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "Générateur G-Code" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "Bibliothèque de communication interprocess" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "Langage de programmation" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "Cadre IUG" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "Liens cadre IUG" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "Bibliothèque C/C++ Binding" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "Format d'échange de données" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "Prise en charge de la bibliothèque pour le calcul scientifique" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "Prise en charge de la bibliothèque pour des maths plus rapides" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "Prise en charge de la bibliothèque pour le traitement des fichiers STL" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "Prise en charge de la bibliothèque pour le traitement des objets planaires" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "Prise en charge de la bibliothèque pour le traitement des mailles triangulaires" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "Prise en charge de la bibliothèque pour l'analyse de réseaux complexes" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "Prise en charge de la bibliothèque pour le traitement des fichiers 3MF" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "Prise en charge de la bibliothèque pour les métadonnées et le streaming de fichiers" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "Bibliothèque de communication série" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "Bibliothèque de découverte ZeroConf" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "Bibliothèque de découpe polygone" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "Bibliothèque Python HTTP" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "Police" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "Icônes SVG" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "Déploiement d'applications sur multiples distributions Linux" @@ -3335,7 +3475,7 @@ msgctxt "@label" msgid "Profile:" msgstr "Profil :" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" @@ -3343,53 +3483,53 @@ msgid "" "Click to open the profile manager." msgstr "Certaines valeurs de paramètre / forçage sont différentes des valeurs enregistrées dans le profil. \n\nCliquez pour ouvrir le gestionnaire de profils." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "Rechercher..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Copier la valeur vers tous les extrudeurs" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Copier toutes les valeurs modifiées vers toutes les extrudeuses" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Masquer ce paramètre" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Masquer ce paramètre" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Afficher ce paramètre" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configurer la visibilité des paramètres..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Réduire tout" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Développer tout" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" @@ -3407,17 +3547,17 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Touché par" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "Ce paramètre est toujours partagé par toutes les extrudeuses. Le modifier ici entraînera la modification de la valeur pour toutes les extrudeuses." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "La valeur est résolue à partir des valeurs par extrudeur " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3425,7 +3565,7 @@ msgid "" "Click to restore the value of the profile." msgstr "Ce paramètre possède une valeur qui est différente du profil.\n\nCliquez pour restaurer la valeur du profil." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3469,7 +3609,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "Envoyer une commande G-Code personnalisée à l'imprimante connectée. Appuyez sur « Entrée » pour envoyer la commande." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Extrudeuse" @@ -3522,7 +3662,7 @@ msgid "The nozzle inserted in this extruder." msgstr "Buse insérée dans cet extrudeur." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Plateau" @@ -3547,6 +3687,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Préchauffez le plateau avant l'impression. Vous pouvez continuer à ajuster votre impression pendant qu'il chauffe, et vous n'aurez pas à attendre que le plateau chauffe lorsque vous serez prêt à lancer l'impression." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "Matériau" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "Favoris" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "Générique" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3562,12 +3717,12 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "&Visualisation" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "Position de la &caméra" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "&Plateau" @@ -3577,15 +3732,15 @@ msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "Paramètres visibles" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "Afficher tous les paramètres" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." -msgstr "Gérer la visibilité des paramètres" +msgstr "Gérer la visibilité des paramètres..." #: /home/ruben/Projects/Cura/resources/qml/Menus/ContextMenu.qml:27 msgctxt "@label" @@ -3609,7 +3764,7 @@ msgstr "Nombre de copies" #: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml:33 msgctxt "@label:header configurations" msgid "Available configurations" -msgstr "Configurations disponibles :" +msgstr "Configurations disponibles" #: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/PrintCoreConfiguration.qml:28 msgctxt "@label:extruder label" @@ -3643,347 +3798,346 @@ msgid "" "G-code files cannot be modified" msgstr "Configuration de l'impression désactivée\nLes fichiers G-Code ne peuvent pas être modifiés" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "00h 00min" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "Spécification de temps" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "Spécification de coût" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "%1m" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "%1g" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "Total :" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." msgstr "Configuration de l'impression recommandée

Imprimer avec les paramètres recommandés pour l'imprimante, le matériau et la qualité sélectionnés." -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Configuration de l'impression personnalisée

Imprimer avec un contrôle fin de chaque élément du processus de découpe." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Activer l'impression" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Nom de la tâche" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Durée d'impression" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Durée restante estimée" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "Passer en P&lein écran" +msgid "Toggle Full Screen" +msgstr "Passer en Plein écran" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&Annuler" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Rétablir" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Quitter" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "Vue &3D" +msgid "3D View" +msgstr "Vue 3D" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "Vue de &face" +msgid "Front View" +msgstr "Vue de face" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "Vue du dess&us" +msgid "Top View" +msgstr "Vue du dessus" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "Vue latérale &gauche" +msgid "Left Side View" +msgstr "Vue latérale gauche" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "Vue latérale &droite" +msgid "Right Side View" +msgstr "Vue latérale droite" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Configurer Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Ajouter une imprimante..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Gérer les &imprimantes..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Gérer les matériaux..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Mettre à jour le profil à l'aide des paramètres / forçages actuels" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Ignorer les modifications actuelles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&Créer un profil à partir des paramètres / forçages actuels..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Gérer les profils..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Afficher la &documentation en ligne" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Notifier un &bug" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "&À propos de..." +msgid "About..." +msgstr "À propos de..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Supprimer le modèle &sélectionné" -msgstr[1] "Supprimer les modèles &sélectionnés" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" +msgstr[0] "Supprimer le modèle sélectionné" +msgstr[1] "Supprimer les modèles sélectionnés" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Centrer le modèle sélectionné" msgstr[1] "Centrer les modèles sélectionnés" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Multiplier le modèle sélectionné" msgstr[1] "Multiplier les modèles sélectionnés" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Supprimer le modèle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Ce&ntrer le modèle sur le plateau" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Grouper les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Dégrouper les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Fusionner les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Multiplier le modèle..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&Sélectionner tous les modèles" +msgid "Select All Models" +msgstr "Sélectionner tous les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Supprimer les objets du plateau" +msgid "Clear Build Plate" +msgstr "Supprimer les objets du plateau" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 +msgctxt "@action:inmenu menubar:file" +msgid "Reload All Models" +msgstr "Recharger tous les modèles" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 -msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "Rechar&ger tous les modèles" - -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Réorganiser tous les modèles sur tous les plateaux" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Réorganiser tous les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Réorganiser la sélection" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Réinitialiser toutes les positions des modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "Réinitialiser tous les modèles et transformations" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Ouvrir le(s) fichier(s)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nouveau projet..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Afficher le &journal du moteur..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Afficher le dossier de configuration" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Parcourir les paquets..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Déplier / replier la barre latérale" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Veuillez charger un modèle 3D" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Prêt à découper" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Découpe en cours..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Prêt à %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Impossible de découper" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Découpe indisponible" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Découper la tâche d'impression en cours" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Annuler le processus de découpe" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Préparer" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Annuler" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Sélectionner le périphérique de sortie actif" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "Ouvrir le(s) fichier(s)" @@ -4003,129 +4157,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&Fichier" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "Enregi&strer..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "&Exporter..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "Enregi&strer la sélection dans un fichier" +msgid "Export Selection..." +msgstr "Exporter la sélection..." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Enregistrer &sous..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Enregistrer le &projet..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Modifier" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "&Visualisation" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "&Paramètres" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Im&primante" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "&Matériau" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Définir comme extrudeur actif" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Activer l'extrudeuse" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Désactiver l'extrudeuse" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "Plateau" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "E&xtensions" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&Boîte à outils" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "P&références" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "&Aide" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Ce paquet sera installé après le redémarrage." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "Ouvrir un fichier" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "Paramètres" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "Nouveau projet" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Êtes-vous sûr(e) de souhaiter lancer un nouveau projet ? Cela supprimera les objets du plateau ainsi que tous paramètres non enregistrés." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "Fermeture de Cura" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "Êtes-vous sûr de vouloir quitter Cura ?" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "Installer le paquet" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "Ouvrir le(s) fichier(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." msgstr "Nous avons trouvé au moins un fichier G-Code parmi les fichiers que vous avez sélectionné. Vous ne pouvez ouvrir qu'un seul fichier G-Code à la fois. Si vous souhaitez ouvrir un fichier G-Code, veuillez ne sélectionner qu'un seul fichier de ce type." @@ -4135,112 +4305,107 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Enregistrer le projet" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Plateau" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extrudeuse %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & matériau" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Ne pas afficher à nouveau le résumé du projet lors de l'enregistrement" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Enregistrer" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Hauteur de la couche" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" -msgstr "Ce profil de qualité n'est pas disponible pour votre matériau et configuration des buses actuels. Veuillez modifier ces derniers pour activer ce profil de qualité." +msgstr "Ce profil de qualité n'est pas disponible pour votre matériau et configuration des buses actuels. Veuillez modifier ces derniers pour activer ce profil de qualité" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "Un profil personnalisé est actuellement actif. Pour activer le curseur de qualité, choisissez un profil de qualité par défaut dans l'onglet Personnaliser" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Vitesse d’impression" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Ralentir" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Accélérer" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Vous avez modifié certains paramètres du profil. Si vous souhaitez les modifier, allez dans le mode Personnaliser." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Remplissage" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Un remplissage graduel augmentera la quantité de remplissage vers le haut." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "Permettre le remplissage graduel" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "Générer les supports" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Générer des structures pour soutenir les parties du modèle qui possèdent des porte-à-faux. Sans ces structures, ces parties s'effondreront durant l'impression." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Sélectionnez l'extrudeur à utiliser comme support. Cela créera des structures de support sous le modèle afin de l'empêcher de s'affaisser ou de s'imprimer dans les airs." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Adhérence au plateau" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Activez l'impression d'une bordure ou plaquette (Brim/Raft). Cela ajoutera une zone plate autour de ou sous votre objet qui est facile à découper par la suite." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Besoin d'aide pour améliorer vos impressions ?
Lisez les Guides de dépannage Ultimaker" @@ -4287,23 +4452,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Type d'imprimante" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Matériau" -# Added after the string freeze. -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Utilisez feuilles d'adhérence ou de la colle avec cette combinaison des matériaux" +msgid "Use glue with this material combination" +msgstr "Utiliser de la colle avec cette combinaison de matériaux" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Vérifier la compatibilité" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Cliquez ici pour vérifier la compatibilité des matériaux sur Ultimaker.com." @@ -4393,16 +4557,6 @@ msgctxt "name" msgid "God Mode" msgstr "Mode God" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Accepte les G-Code et les envoie par Wi-Fi à une box WiFi Doodle3D." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Box WiFi Doodle3D" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4413,6 +4567,16 @@ msgctxt "name" msgid "Changelog" msgstr "Récapitulatif des changements" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "Fournit à une machine des actions permettant la mise à jour du firmware." + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "Programme de mise à jour du firmware" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." @@ -4436,7 +4600,7 @@ msgstr "Impression par USB" #: UserAgreement/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license." -msgstr "Demander à l'utilisateur une fois s'il appose son accord à notre licence" +msgstr "Demander à l'utilisateur une fois s'il appose son accord à notre licence." #: UserAgreement/plugin.json msgctxt "name" @@ -4483,16 +4647,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Étape de préparation" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Fournit une fenêtre d'édition pour l'édition directe de script." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Outil de scripting en direct" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4506,7 +4660,7 @@ msgstr "Plugin de périphérique de sortie sur disque amovible" #: UM3NetworkPrinting/plugin.json msgctxt "description" msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Gère les connexions réseau vers les imprimantes Ultimaker 3" +msgstr "Gère les connexions réseau vers les imprimantes Ultimaker 3." #: UM3NetworkPrinting/plugin.json msgctxt "name" @@ -4603,16 +4757,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Lecteur de profil Cura antérieur" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Aide à ouvrir les fichiers Blender directement dans Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Intégration Blender (expérimental)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4663,6 +4807,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Mise à niveau de version, de 2.7 vers 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "Configurations des mises à niveau de Cura 3.4 vers Cura 3.5." + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "Mise à niveau de 3.4 vers 3.5" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4776,7 +4930,7 @@ msgstr "Générateur de profil Cura" #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." -msgstr "Permet l'écriture de fichiers 3MF" +msgstr "Permet l'écriture de fichiers 3MF." #: 3MFWriter/plugin.json msgctxt "name" @@ -4803,6 +4957,299 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Lecteur de profil Cura" +#~ msgctxt "@warning:status" +#~ msgid "Please generate G-code before saving." +#~ msgstr "Veuillez générer le G-Code avant d'enregistrer." + +#~ msgctxt "@item:inmenu" +#~ msgid "Profile Assistant" +#~ msgstr "Assistant de profil" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Profile Assistant" +#~ msgstr "Assistant de profil" + +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "Mise à niveau du firmware" + +#~ msgctxt "@label unknown material" +#~ msgid "Unknown" +#~ msgstr "Inconnu" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "No custom profile to import in file {0}" +#~ msgstr "Aucun profil personnalisé à importer dans le fichier {0}" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "This profile {0} contains incorrect data, could not import it." +#~ msgstr "Le profil {0} contient des données incorrectes ; échec de l'importation." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "La machine définie dans le profil {0} ({1}) ne correspond pas à votre machine actuelle ({2}) ; échec de l'importation." + +#~ msgctxt "@title:window" +#~ msgid "Confirm uninstall " +#~ msgstr "Confirmer la désinstallation " + +#~ msgctxt "@label:status" +#~ msgid "Paused" +#~ msgstr "En pause" + +#~ msgctxt "@action:button" +#~ msgid "Previous" +#~ msgstr "Précédent" + +#~ msgctxt "@action:button" +#~ msgid "Next" +#~ msgstr "Suivant" + +#~ msgctxt "@label" +#~ msgid "Tip" +#~ msgstr "Astuce" + +#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +#~ msgid "%1m / ~ %2g / ~ %4 %3" +#~ msgstr "%1m / ~ %2g / ~ %4 %3" + +#~ msgctxt "@label Print estimates: m for meters, g for grams" +#~ msgid "%1m / ~ %2g" +#~ msgstr "%1m / ~ %2g" + +#~ msgctxt "@label" +#~ msgid "Print experiment" +#~ msgstr "Test d'impression" + +#~ msgctxt "@label" +#~ msgid "Checklist" +#~ msgstr "Liste de contrôle" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "Mise à niveau du firmware" + +#~ msgctxt "description" +#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +#~ msgstr "Permet aux fabricants de matériaux de créer de nouveaux matériaux et profils de qualité à l'aide d'une interface utilisateur ad hoc." + +#~ msgctxt "name" +#~ msgid "Print Profile Assistant" +#~ msgstr "Assistant de profil d'impression" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimer avec Doodle3D WiFi-Box" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimer avec Doodle3D WiFi-Box" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Connexion avec Doodle3D Connecter..." + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Envoi de données vers Doodle3D Connecter..." + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Impossible d'envoyer les données à Doodle3D Connect. Une autre tâche est-elle toujours active ?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Enregistrement de données dans Doodle3D Connecter..." + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Fichier envoyé vers Doodle3D Connecter" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Ouvrir Connect..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Ouvrir l'interface web Doodle3D Connecter" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Fichier Blender" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Impossible d'exporter avec la qualité \"{}\" !\n" +#~ "Qualité redéfinie sur \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Contact" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "L'imprimante n'est pas configurée pour héberger un groupe d'imprimantes Ultimaker 3." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "L'imprimante est le patron pour un groupe de %1 imprimantes Ultimaker 3." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 n'est pas configurée pour héberger un groupe d'imprimantes connectées Ultimaker 3." + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Ajouter / supprimer une imprimante" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Ouvre la page des tâches d'impression avec votre navigateur web." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Afficher les tâches d'impression" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Préparation..." + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Impression..." + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Disponible" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Connexion avec l'imprimante perdue" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Indisponible" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Inconnu" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Désactivé" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Réservée" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Préparation de l'impression..." + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Abandon de l'impression" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Non acceptation des tâches d'impression" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Complète a: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Enlever les objets du plateau" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "En attente de modification de configuration" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Imprimer les tâches" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Imprimantes" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Afficher les imprimantes" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Pause" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Reprendre" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Abandonner l'impression" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Toujours demander" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Écraser le profil" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Les modèles nouvellement chargés doivent-ils être disposés sur le plateau ? Utilisé en conjonction avec le multi-plateau (EXPÉRIMENTAL)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Ne pas réorganiser les objets lors du chargement" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "Enregi&strer la sélection dans un fichier" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Enregistrer &sous..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Enregistrer le &projet..." + +# Added after the string freeze. +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Utilisez feuilles d'adhérence ou de la colle avec cette combinaison des matériaux" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Accepte les G-Code et les envoie par Wi-Fi à une box WiFi Doodle3D." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Box WiFi Doodle3D" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Fournit une fenêtre d'édition pour l'édition directe de script." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Outil de scripting en direct" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Aide à ouvrir les fichiers Blender directement dans Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Intégration Blender (expérimental)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Avertissement contrôleur de modèle" @@ -5070,10 +5517,6 @@ msgstr "Lecteur de profil Cura" #~ msgid "Browse plugins..." #~ msgstr "Parcourir les plug-ins..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Plateau" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "&Plug-ins" @@ -5299,14 +5742,6 @@ msgstr "Lecteur de profil Cura" #~ "\n" #~ "Désolé !" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Assistant de profil" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Assistant de profil" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Pas de matériau chargé" @@ -5437,14 +5872,6 @@ msgstr "Lecteur de profil Cura" #~ msgid "Configure setting visiblity..." #~ msgstr "Configurer la visibilité des paramètres..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Automatique : %1" @@ -5481,14 +5908,6 @@ msgstr "Lecteur de profil Cura" #~ msgid "GCode Profile Reader" #~ msgstr "Lecteur de profil GCode" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Permet aux fabricants de matériaux de créer de nouveaux matériaux et profils de qualité à l'aide d'une interface utilisateur ad hoc." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Assistant de profil d'impression" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Des erreurs sont apparues lors de l'ouverture de votre fichier SolidWorks ! Veuillez vérifier s'il est possible d'ouvrir votre fichier dans SolidWorks sans que cela ne cause de problèmes." @@ -5685,10 +6104,6 @@ msgstr "Lecteur de profil Cura" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "L'imprimante est configurée pour héberger un groupe de %1 imprimantes connectées Ultimaker 3." -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Préparation..." - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Finalisé sur : " diff --git a/resources/i18n/fr_FR/fdmextruder.def.json.po b/resources/i18n/fr_FR/fdmextruder.def.json.po index d4d827870e..52969f511f 100644 --- a/resources/i18n/fr_FR/fdmextruder.def.json.po +++ b/resources/i18n/fr_FR/fdmextruder.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 14:25+0100\n" "Last-Translator: Bothof \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -166,6 +166,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "Les coordonnées Z de la position à laquelle la buse s'amorce au début de l'impression." +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "Ventilateur de refroidissement d'impression de l'extrudeuse" + +#: 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 "Numéro du ventilateur de refroidissement d'impression associé à cette extrudeuse. Ne modifiez cette valeur par rapport à la valeur par défaut 0 que si vous utilisez un ventilateur de refroidissement d'impression différent pour chaque extrudeuse." + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/fr_FR/fdmprinter.def.json.po b/resources/i18n/fr_FR/fdmprinter.def.json.po index 68f9060093..87aa9d5a27 100644 --- a/resources/i18n/fr_FR/fdmprinter.def.json.po +++ b/resources/i18n/fr_FR/fdmprinter.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 15:00+0200\n" "Last-Translator: Bothof \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -81,6 +81,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "GUID du matériau. Cela est configuré automatiquement. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Diamètre" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Ajuste le diamètre du filament utilisé. Faites correspondre cette valeur au diamètre du filament utilisé." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -534,7 +544,7 @@ msgstr "Accélération maximale X" #: fdmprinter.def.json msgctxt "machine_max_acceleration_x description" msgid "Maximum acceleration for the motor of the X-direction" -msgstr "Accélération maximale pour le moteur du sens X." +msgstr "Accélération maximale pour le moteur du sens X" #: fdmprinter.def.json msgctxt "machine_max_acceleration_y label" @@ -1034,7 +1044,7 @@ msgstr "Zig Zag" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 label" msgid "Bottom Pattern Initial Layer" -msgstr "Couche initiale du motif du dessous." +msgstr "Couche initiale du motif du dessous" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 description" @@ -1056,6 +1066,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Zig Zag" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "Relier les polygones supérieurs / inférieurs" + +#: 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 "Relier les voies de couche extérieure supérieures / inférieures lorsqu'elles sont côte à côte. Pour le motif concentrique, ce paramètre réduit considérablement le temps de parcours, mais comme les liens peuvent se trouver à mi-chemin sur le remplissage, cette fonctionnalité peut réduire la qualité de la surface supérieure." + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1136,6 +1156,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Compenser le débit pour les parties d'une paroi intérieure imprimées aux endroits où une paroi est déjà en place." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "Débit minimal de la paroi" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "Pourcentage de débit minimum autorisé pour une ligne de paroi. La compensation de chevauchement de paroi réduit le débit d'une paroi lorsqu'elle se trouve à proximité d'une paroi existante. Les parois dont le débit est inférieur à cette valeur seront remplacées par un déplacement. Lors de l'utilisation de ce paramètre, vous devez activer la compensation de chevauchement de paroi et imprimer la paroi externe avant les parois internes." + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "Préférer la rétractation" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "Si cette option est activée, la rétraction est utilisée à la place des détours pour les déplacements qui remplacent les parois dont le débit est inférieur au seuil de débit minimal." + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1434,7 +1474,7 @@ msgstr "Densité du remplissage" #: fdmprinter.def.json msgctxt "infill_sparse_density description" msgid "Adjusts the density of infill of the print." -msgstr "Adapte la densité de remplissage de l'impression" +msgstr "Adapte la densité de remplissage de l'impression." #: fdmprinter.def.json msgctxt "infill_line_distance label" @@ -1453,8 +1493,8 @@ msgstr "Motif de remplissage" #: 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "Motif du matériau de remplissage de l'impression. La ligne et le remplissage en zigzag changent de sens à chaque alternance de couche, réduisant ainsi les coûts matériels. Les motifs en grille, en triangle, trihexagonaux, cubiques, octaédriques, quart cubiques et concentriques sont entièrement imprimés sur chaque couche. Les remplissages cubique, quart cubique et octaédrique changent à chaque couche afin d'offrir une répartition plus égale de la solidité dans chaque direction." +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 "Motif du matériau de remplissage de l'impression. La ligne et le remplissage en zigzag changent de sens à chaque alternance de couche, réduisant ainsi les coûts matériels. Les motifs en grille, en triangle, trihexagonaux, cubiques, octaédriques, quart cubiques et concentriques sont entièrement imprimés sur chaque couche. Les remplissages gyroïde, cubique, quart cubique et octaédrique changent à chaque couche afin d'offrir une répartition plus égale de la solidité dans chaque direction." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1501,11 +1541,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Concentrique" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrique 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1521,6 +1556,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "Entrecroisé 3D" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "Gyroïde" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1531,6 +1571,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Relie les extrémités où le motif de remplissage touche la paroi interne, à l'aide d'une ligne épousant la forme de la paroi interne. Activer ce paramètre peut faire mieux coller le remplissage aux parois, et réduit les effets du remplissage sur la qualité des surfaces verticales. Désactiver ce paramètre diminue la quantité de matière utilisée." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "Relier les polygones de remplissage" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "Relier les voies de remplissage lorsqu'elles sont côte à côte. Pour les motifs de remplissage composés de plusieurs polygones fermés, ce paramètre permet de réduire considérablement le temps de parcours." + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1561,6 +1611,28 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Le motif de remplissage est décalé de cette distance sur l'axe Y." +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "Multiplicateur de ligne de remplissage" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "Convertir chaque ligne de remplissage en ce nombre de lignes. Les lignes supplémentaires ne se croisent pas entre elles, mais s'évitent mutuellement. Cela rend le remplissage plus rigide, mais augmente le temps d'impression et la quantité de matériau utilisé." + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "Nombre de parois de remplissage supplémentaire" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "Ajoutez des parois supplémentaires autour de la zone de remplissage. De telles parois peuvent réduire l'affaissement des lignes de couche extérieure supérieure / inférieure, réduisant le nombre de couches extérieures supérieures / inférieures nécessaires pour obtenir la même qualité, au prix d'un peu de matériau supplémentaire.\nConfigurée correctement, cette fonctionnalité peut être combinée avec « Relier les polygones de remplissage » pour relier tous les remplissages en un seul mouvement d'extrusion sans avoir besoin de déplacements ou de rétractions." + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1789,7 +1861,7 @@ msgstr "Température d’impression par défaut" #: 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 "La température par défaut utilisée pour l'impression. Il doit s'agir de la température de « base » d'un matériau. Toutes les autres températures d'impression doivent utiliser des décalages basés sur cette valeur." +msgstr "La température par défaut utilisée pour l'impression. Il doit s'agir de la température de « base » d'un matériau. Toutes les autres températures d'impression doivent utiliser des décalages basés sur cette valeur" #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1849,7 +1921,7 @@ msgstr "Température du plateau par défaut" #: fdmprinter.def.json msgctxt "default_material_bed_temperature description" msgid "The default temperature used for the heated build plate. This should be the \"base\" temperature of a build plate. All other print temperatures should use offsets based on this value" -msgstr "Température par défaut utilisée pour le plateau chauffant. Il doit s'agir de la température de « base » d'un plateau. Toutes les autres températures d'impression sont définies en fonction de cette valeur." +msgstr "Température par défaut utilisée pour le plateau chauffant. Il doit s'agir de la température de « base » d'un plateau. Toutes les autres températures d'impression sont définies en fonction de cette valeur" #: fdmprinter.def.json msgctxt "material_bed_temperature label" @@ -1871,16 +1943,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "Température utilisée pour le plateau chauffant à la première couche." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Diamètre" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Ajuste le diamètre du filament utilisé. Faites correspondre cette valeur au diamètre du filament utilisé." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2718,8 +2780,8 @@ msgstr "Mode de détours" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "Les détours (le 'combing') maintiennent le bec dans les zones déjà imprimées lors des déplacements. Cela résulte en des déplacements légèrement plus longs mais réduit le recours aux rétractions. Si les détours sont désactivés, le matériau se rétractera et le bec se déplacera en ligne droite jusqu'au point suivant. Il est également possible d'éviter les détours sur les zones de la couche du dessus / dessous en effectuant les détours uniquement dans le remplissage." +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "Les détours maintiennent la buse dans les zones déjà imprimées lors des déplacements. Cela résulte en des déplacements légèrement plus longs mais réduit le recours aux rétractions. Si les détours sont désactivés, le matériau se rétractera et la buse se déplacera en ligne droite jusqu'au point suivant. Il est également possible d'éviter les détours sur les zones de la couche extérieure supérieure / inférieure et aussi de n'effectuer les détours que dans le remplissage. Notez que l'option « À l'intérieur du remplissage » se comporte exactement comme l'option « Pas dans la couche extérieure » dans les versions précédentes de Cura." #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2736,6 +2798,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Pas dans la couche extérieure" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "À l'intérieur du remplissage" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3116,11 +3183,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Concentrique" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrique 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3181,6 +3243,56 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Distance entre les lignes de support imprimées. Ce paramètre est calculé par la densité du support." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "Distance d'écartement de ligne du support de la couche initiale" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "Distance entre les lignes de la structure de support de la couche initiale imprimée. Ce paramètre est calculé en fonction de la densité du support." + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "Direction de ligne de remplissage du support" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "Orientation du motif de remplissage pour les supports. Le motif de remplissage du support pivote dans le plan horizontal." + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "Activer la bordure du support" + +#: 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 "Générer un bord à l'intérieur des zones de remplissage du support de la première couche. Cette bordure est imprimée sous le support et non autour de celui-ci, ce qui augmente l'adhérence du support au plateau." + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "Largeur de la bordure du support" + +#: 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 "Largeur de la bordure à imprimer sous le support. Une plus grande bordure améliore l'adhérence au plateau, mais demande un peu de matériau supplémentaire." + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "Nombre de lignes de la bordure du support" + +#: 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 "Nombre de lignes utilisées pour la bordure du support. L'augmentation du nombre de lignes de bordure améliore l'adhérence au plateau, mais demande un peu de matériau supplémentaire." + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3471,11 +3583,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Concentrique" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrique 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3511,11 +3618,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Concentrique" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrique 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3551,16 +3653,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Concentrique" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrique 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Zig Zag" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "Annulation de la vitesse du ventilateur" + +#: 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 "Lorsque cette fonction est activée, la vitesse du ventilateur de refroidissement de l'impression est modifiée pour les régions de la couche extérieure situées immédiatement au-dessus du support." + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "Vitesse du ventilateur de couche extérieure supportée" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "Pourcentage de la vitesse du ventilateur à utiliser lors de l'impression des zones de couche extérieure situées immédiatement au-dessus du support. Une vitesse de ventilateur élevée facilite le retrait du support." + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3743,6 +3860,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "Le nombre de lignes utilisées pour une bordure. Un plus grand nombre de lignes de bordure renforce l'adhérence au plateau mais réduit également la zone d'impression réelle." +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "La bordure remplace le support" + +#: 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 "Appliquer la bordure à imprimer autour du modèle même si cet espace aurait autrement dû être occupé par le support, en remplaçant certaines régions de la première couche de support par des régions de la bordure." + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -3885,8 +4012,8 @@ msgstr "Largeur des lignes de la couche de base du radeau. Elles doivent être #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Interligne du radeau" +msgid "Raft Base Line Spacing" +msgstr "Espacement des lignes de base du radeau" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4103,16 +4230,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Le volume minimum pour chaque touche de la tour primaire afin de purger suffisamment de matériau." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Épaisseur de la tour primaire" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "L'épaisseur de la tour primaire creuse. Une épaisseur supérieure à la moitié du volume minimum de la tour primaire résultera en une tour primaire dense." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4153,26 +4270,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Après l'impression de la tour primaire à l'aide d'une buse, nettoyer le matériau qui suinte de l'autre buse sur la tour primaire." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Essuyer la buse après chaque changement" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Après un changement d'extrudeuse, essuie le matériau qui suinte de la buse sur la première chose imprimée. Cela exécute un mouvement de nettoyage lent et sûr à l'endroit auquel le matériau qui suinte cause le moins de dommages à la qualité de la surface de votre impression." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Volume de purge de la tour primaire" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Quantité de filament à purger lors de l'essuyage de la tour primaire. La purge est utile pour compenser le filament perdu par la suinte pendant l'inactivité de la buse." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4658,6 +4755,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Données reliant le flux de matériau (en mm3 par seconde) à la température (degrés Celsius)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "Circonférence minimale du polygone" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "Les polygones en couches tranchées dont la circonférence est inférieure à cette valeur seront filtrés. Des valeurs élevées permettent d'obtenir un maillage de meilleure résolution mais augmentent le temps de découpe. Cette option est principalement destinée aux imprimantes SLA haute résolution et aux modèles 3D de très petite taille avec beaucoup de détails." + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5315,6 +5422,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Limite indiquant d'utiliser ou non une couche plus petite. Ce nombre est comparé à la tangente de la pente la plus raide d'une couche." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "Angle de parois en porte-à-faux" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "Les parois ayant un angle supérieur à cette valeur seront imprimées en utilisant les paramètres de parois en porte-à-faux. Si la valeur est 90, aucune paroi ne sera considérée comme étant en porte-à-faux." + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "Vitesse de paroi en porte-à-faux" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "Les parois en porte-à-faux seront imprimées à ce pourcentage de leur vitesse d'impression normale." + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5345,16 +5472,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Si une région de couche extérieure est supportée pour une valeur inférieure à ce pourcentage de sa surface, elle sera imprimée selon les paramètres du pont. Sinon, elle sera imprimée selon les paramètres normaux de la couche extérieure." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Porte-à-faux max. de la paroi du pont" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "Largeur maximale autorisée de la zone d'air sous une ligne de paroi avant que la paroi ne soit imprimée selon les paramètres du pont. Exprimée en pourcentage de la largeur de la ligne de paroi. Si la zone d'air est plus large, la ligne de paroi sera imprimée selon les paramètres du pont. Sinon, la ligne de paroi sera imprimée selon les paramètres normaux. Plus la valeur est faible, plus il est probable que les lignes de paroi en surplomb seront imprimées selon les paramètres du pont." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5575,6 +5692,74 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Matrice de transformation à appliquer au modèle lors de son chargement depuis le fichier." +#~ 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 happend midway over infill this feature can reduce the top surface quality." +#~ msgstr "Relier les voies de couche extérieure supérieures / inférieures lorsqu'elles sont côte à côte. Pour le motif concentrique, ce paramètre réduit considérablement le temps de parcours, mais comme les liens peuvent se trouver à mi-chemin sur le remplissage, cette fonctionnalité peut réduire la qualité de la surface supérieure." + +#~ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +#~ msgstr "Motif du matériau de remplissage de l'impression. La ligne et le remplissage en zigzag changent de sens à chaque alternance de couche, réduisant ainsi les coûts matériels. Les motifs en grille, en triangle, trihexagonaux, cubiques, octaédriques, quart cubiques et concentriques sont entièrement imprimés sur chaque couche. Les remplissages cubique, quart cubique et octaédrique changent à chaque couche afin d'offrir une répartition plus égale de la solidité dans chaque direction." + +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrique 3D" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "Les détours (le 'combing') maintiennent le bec dans les zones déjà imprimées lors des déplacements. Cela résulte en des déplacements légèrement plus longs mais réduit le recours aux rétractions. Si les détours sont désactivés, le matériau se rétractera et le bec se déplacera en ligne droite jusqu'au point suivant. Il est également possible d'éviter les détours sur les zones de la couche du dessus / dessous en effectuant les détours uniquement dans le remplissage." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrique 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrique 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrique 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrique 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Interligne du radeau" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Épaisseur de la tour primaire" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "L'épaisseur de la tour primaire creuse. Une épaisseur supérieure à la moitié du volume minimum de la tour primaire résultera en une tour primaire dense." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Essuyer la buse après chaque changement" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Après un changement d'extrudeuse, essuie le matériau qui suinte de la buse sur la première chose imprimée. Cela exécute un mouvement de nettoyage lent et sûr à l'endroit auquel le matériau qui suinte cause le moins de dommages à la qualité de la surface de votre impression." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Volume de purge de la tour primaire" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Quantité de filament à purger lors de l'essuyage de la tour primaire. La purge est utile pour compenser le filament perdu par la suinte pendant l'inactivité de la buse." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Porte-à-faux max. de la paroi du pont" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "Largeur maximale autorisée de la zone d'air sous une ligne de paroi avant que la paroi ne soit imprimée selon les paramètres du pont. Exprimée en pourcentage de la largeur de la ligne de paroi. Si la zone d'air est plus large, la ligne de paroi sera imprimée selon les paramètres du pont. Sinon, la ligne de paroi sera imprimée selon les paramètres normaux. Plus la valeur est faible, plus il est probable que les lignes de paroi en surplomb seront imprimées selon les paramètres du pont." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Optimiser l'ordre dans lequel des parois sont imprimées de manière à réduire le nombre de retraits et les distances parcourues. La plupart des pièces bénéficieront de cette possibilité, mais certaines peuvent en fait prendre plus de temps à l'impression ; veuillez dès lors comparer les estimations de durée d'impression avec et sans optimisation." diff --git a/resources/i18n/it_IT/cura.po b/resources/i18n/it_IT/cura.po index 2565825b95..d285cbfdc3 100644 --- a/resources/i18n/it_IT/cura.po +++ b/resources/i18n/it_IT/cura.po @@ -5,16 +5,18 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" +"PO-Revision-Date: 2018-09-28 15:01+0200\n" "Last-Translator: Bothof \n" "Language-Team: Italian\n" "Language: it_IT\n" "MIME-Version: 1.0\n" "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" @@ -38,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "File G-Code" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "GCodeWriter non supporta la modalità non di testo." + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "Preparare il codice G prima dell’esportazione." + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -53,102 +66,51 @@ msgid "" "

View print quality guide

" msgstr "

La stampa di uno o più modelli 3D può non avvenire in modo ottimale a causa della dimensioni modello e della configurazione materiale:

\n

{model_names}

\n

Scopri come garantire la migliore qualità ed affidabilità di stampa.

\n

Visualizza la guida alla qualità di stampa

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Stampa con Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Stampa con Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Collegamento a Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Annulla" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Invio dati a Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Impossibile inviare dati a Doodle3D Connect. C'è un altro processo in corso?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Memorizzazione dati su Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "File inviato a Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Apri Connect..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Apri interfaccia web Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Visualizza registro modifiche" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "Aggiornamento firmware" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Impostazioni attive profilo appiattito" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Il profilo è stato appiattito e attivato." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "Stampa USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Stampa tramite USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Stampa tramite USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "Connesso tramite USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "Stampa tramite USB in corso, la chiusura di Cura interrompe la stampa. Confermare?" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -171,7 +133,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "File G-Code compresso" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "GCodeGzWriter non supporta la modalità di testo." + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "Pacchetto formato Ultimaker" @@ -193,7 +160,7 @@ msgid "Save to Removable Drive {0}" msgstr "Salva su unità rimovibile {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Non ci sono formati di file disponibili per la scrittura!" @@ -232,7 +199,7 @@ msgstr "Impossibile salvare su unità rimovibile {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "Errore" @@ -261,8 +228,8 @@ msgstr "Rimuovi il dispositivo rimovibile {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "Avvertenza" @@ -289,259 +256,269 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Unità rimovibile" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Stampa sulla rete" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Stampa sulla rete" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "Collegato alla rete." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "Collegato alla rete. Si prega di approvare la richiesta di accesso sulla stampante." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "Collegato alla rete. Nessun accesso per controllare la stampante." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "Richiesto accesso alla stampante. Approvare la richiesta sulla stampante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "Stato di autenticazione" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "Stato di autenticazione" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "Riprova" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Invia nuovamente la richiesta di accesso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Accesso alla stampante accettato" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "Nessun accesso per stampare con questa stampante. Impossibile inviare il processo di stampa." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "Richiesta di accesso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Invia la richiesta di accesso alla stampante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Impossibile avviare un nuovo processo di stampa." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." msgstr "È presente un problema di configurazione della stampante che rende impossibile l’avvio della stampa. Risolvere il problema prima di continuare." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Mancata corrispondenza della configurazione" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "Sei sicuro di voler stampare con la configurazione selezionata?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Le configurazioni o la calibrazione della stampante e di Cura non corrispondono. Per ottenere i migliori risultati, sezionare sempre per i PrintCore e i materiali inseriti nella stampante utilizzata." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "Invio nuovi processi (temporaneamente) bloccato, invio in corso precedente processo di stampa." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Invio dati alla stampante in corso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "Invio dati" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Annulla" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "Nessun PrintCore caricato nello slot {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "Nessun materiale caricato nello slot {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, python-brace-format msgctxt "@label" msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" msgstr "PrintCore diverso (Cura: {cura_printcore_name}, Stampante: {remote_printcore_name}) selezionata per estrusore {extruder_id}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "Materiale diverso (Cura: {0}, Stampante: {1}) selezionato per l’estrusore {2}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Sincronizzazione con la stampante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Desideri utilizzare la configurazione corrente della tua stampante in Cura?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "I PrintCore e/o i materiali sulla stampante differiscono da quelli contenuti nel tuo attuale progetto. Per ottenere i risultati migliori, sezionare sempre per i PrintCore e i materiali inseriti nella stampante utilizzata." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" -msgstr "Collegato alla rete." +msgstr "Collegato alla rete" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "Processo di stampa inviato con successo alla stampante." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "Dati inviati" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "Visualizzazione in Controlla" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "La stampante '{printer_name}' ha finito di stampare '{job_name}'." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "Il processo di stampa '{job_name}' è terminato." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "Stampa finita" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Collega tramite rete" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Controlla" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "Non è possibile accedere alle informazioni di aggiornamento." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Sono disponibili nuove funzioni per la {machine_name}! Si consiglia di aggiornare il firmware sulla stampante." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Nuovo firmware %s disponibile" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "Modalità di aggiornamento" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "Non è possibile accedere alle informazioni di aggiornamento." - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Visualizzazione strato" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Cura non visualizza in modo accurato gli strati se la funzione Wire Printing è abilitata" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "Vista simulazione" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "Modifica G-code" @@ -555,32 +532,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Crea un volume in cui i supporti non vengono stampati." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura raccoglie statistiche di utilizzo in forma anonima." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "Acquisizione dati" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "Per saperne di più" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Vedere ulteriori informazioni sui dati inviati da Cura." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "Consenti" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Consente a Cura di inviare in forma anonima statistiche d’uso, riguardanti alcune delle preferenze e impostazioni, la versione cura e una serie di modelli in sezionamento, per aiutare a dare priorità a miglioramenti futuri in Cura." @@ -590,18 +567,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Profili Cura 15.04" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "File Blender" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "Impossibile esportare utilizzando qualità \"{}\" quality!\nTornato a \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -627,49 +592,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Immagine GIF" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Impossibile eseguire il sezionamento con il materiale corrente in quanto incompatibile con la macchina o la configurazione selezionata." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "Sezionamento impossibile" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Impossibile eseguire il sezionamento con le impostazioni attuali. Le seguenti impostazioni presentano errori: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Impossibile eseguire il sezionamento a causa di alcune impostazioni per modello. Le seguenti impostazioni presentano errori su uno o più modelli: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Impossibile eseguire il sezionamento perché la torre di innesco o la posizione di innesco non sono valide." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "Impossibile effettuare il sezionamento in quanto vi sono oggetti associati a Extruder %s disabilitato." + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Nulla da sezionare in quanto nessuno dei modelli corrisponde al volume di stampa. Ridimensionare o ruotare i modelli secondo necessità." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "Elaborazione dei livelli" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "Informazioni" @@ -685,29 +657,40 @@ msgid "Configure Per Model Settings" msgstr "Configura impostazioni per modello" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "Consigliata" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "Personalizzata" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "File 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "Ugello" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "Il file di progetto {0} contiene un tipo di macchina sconosciuto {1}. Impossibile importare la macchina. Verranno invece importati i modelli." + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "Apri file progetto" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -718,18 +701,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "File G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Parsing codice G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "Dettagli codice G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Verifica che il codice G sia idoneo alla tua stampante e alla sua configurazione prima di trasmettere il file. La rappresentazione del codice G potrebbe non essere accurata." @@ -740,27 +723,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Profilo Cura" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "File 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "File 3MF Progetto Cura" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "Errore scrittura file 3MF." + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "Seleziona aggiornamenti" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "Aggiorna firmware" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -771,79 +754,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "Livella piano di stampa" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "Parete esterna" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "Pareti interne" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "Rivestimento esterno" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "Riempimento" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "Riempimento del supporto" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "Interfaccia supporto" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "Supporto" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "Skirt" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "Spostamenti" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "Retrazioni" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "Altro" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "Sconosciuto" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "File pre-sezionato {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "Login non riuscito" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Il file esiste già" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -855,23 +838,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Non sottoposto a override" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Il materiale selezionato è incompatibile con la macchina o la configurazione selezionata." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Materiale incompatibile" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "Le impostazioni sono state modificate in base all’attuale disponibilità di estrusori: [%s]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "Impostazioni aggiornate" @@ -900,8 +883,6 @@ msgid "Export succeeded" msgstr "Esportazione riuscita" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" @@ -909,58 +890,70 @@ msgstr "Impossibile importare il profilo da {0}: { #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:190 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" msgstr "Nessun profilo personalizzato da importare nel file {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 "Impossibile importare il profilo da {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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." msgstr "Questo profilo {0} contiene dati errati, impossibile importarlo." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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 "La macchina definita nel profilo {0} ({1}) non corrisponde alla macchina corrente ({2}), impossibile importarlo." +msgstr "La macchina definita nel profilo {0} ({1}) non corrisponde alla macchina corrente ({2}), impossibile importarla." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "Impossibile importare il profilo da {0}:" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Profilo importato correttamente {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "Il file {0} non contiene nessun profilo valido." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "Il profilo {0} ha un tipo di file sconosciuto o corrotto." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "Profilo personalizzato" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Il profilo è privo del tipo di qualità." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Impossibile trovare un tipo qualità {0} per la configurazione corrente." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -987,42 +980,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Tutti i file (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "Materiale personalizzato" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "Personalizzata" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "L’altezza del volume di stampa è stata ridotta a causa del valore dell’impostazione \"Sequenza di stampa” per impedire la collisione del gantry con i modelli stampati." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Volume di stampa" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Impossibile creare un archivio dalla directory dei dati utente: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "Backup" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Tentativo di ripristinare un backup di Cura senza dati o metadati appropriati." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Tentativo di ripristinare un backup di Cura non corrispondente alla versione corrente." @@ -1033,32 +1026,32 @@ msgid "Multiplying and placing objects" msgstr "Moltiplicazione e collocazione degli oggetti" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Sistemazione oggetto" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Impossibile individuare una posizione nel volume di stampa per tutti gli oggetti" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Ricerca nuova posizione per gli oggetti" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Ricerca posizione" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Impossibile individuare posizione" @@ -1189,223 +1182,233 @@ msgctxt "@action:button" msgid "Send report" msgstr "Invia report" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Caricamento macchine in corso..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Impostazione scena in corso..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Caricamento interfaccia in corso..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f mm" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "È possibile caricare un solo file codice G per volta. Importazione saltata {0}" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "Impossibile aprire altri file durante il caricamento del codice G. Importazione saltata {0}" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Il modello selezionato è troppo piccolo per il caricamento." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Impostazioni macchina" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Stampante" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Impostazioni della stampante" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Larghezza)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Profondità)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Altezza)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Forma del piano di stampa" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Origine al centro" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Piano riscaldato" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Versione codice G" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Impostazioni della testina di stampa" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distanza tra il lato sinistro della testina di stampa e il centro dell'ugello. Utilizzata per evitare collisioni tra le stampe precedenti e la testina di stampa durante la stampa \"Uno alla volta\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distanza tra il lato anteriore della testina di stampa e il centro dell'ugello. Utilizzata per evitare collisioni tra le stampe precedenti e la testina di stampa durante la stampa \"Uno alla volta\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distanza tra il lato destro della testina di stampa e il centro dell'ugello. Utilizzata per evitare collisioni tra le stampe precedenti e la testina di stampa durante la stampa \"Uno alla volta\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distanza tra il lato posteriore della testina di stampa e il centro dell'ugello. Utilizzata per evitare collisioni tra le stampe precedenti e la testina di stampa durante la stampa \"Uno alla volta\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Altezza gantry" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "La differenza di altezza tra la punta dell’ugello e il sistema gantry (assi X e Y). Utilizzata per evitare collisioni tra le stampe precedenti e il gantry durante la stampa \"Uno alla volta\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Numero di estrusori" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "Codice G avvio" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Comandi codice G da eseguire all’avvio." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "Codice G fine" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Comandi codice G da eseguire alla fine." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Impostazioni ugello" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Dimensione ugello" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Diametro del materiale compatibile" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "Diametro nominale del filamento supportato dalla stampante. Il diametro esatto verrà sovrapposto dal materiale e/o dal profilo." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "Scostamento X ugello" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Scostamento Y ugello" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "Numero ventola di raffreddamento" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "Codice G avvio estrusore" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "Codice G fine estrusore" @@ -1425,12 +1428,20 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Impossibile connettersi al database pacchetto Cura. Verificare la connessione." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "Plugin" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materiali" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1446,8 +1457,14 @@ msgctxt "@label" msgid "Author" msgstr "Autore" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "Download" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "Sconosciuto" @@ -1480,17 +1497,57 @@ msgctxt "@action:button" msgid "Back" msgstr "Indietro" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "Conferma disinstalla" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "Si stanno installando materiali e/o profili ancora in uso. La conferma ripristina i seguenti materiali/profili ai valori predefiniti." + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "Materiali" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "Profili" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "Conferma" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "Riavviare Cura per rendere effettive le modifiche apportate ai pacchetti." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Esci da Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "Contributi della comunità" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "Plugin della comunità" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "Materiali generici" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "Installa" @@ -1533,12 +1590,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Non accetto" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "In primo piano" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilità" @@ -1548,10 +1605,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Recupero dei pacchetti..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Contatto" +msgid "Website" +msgstr "Sito web" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "E-mail" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1564,48 +1626,88 @@ msgid "Changelog" msgstr "Registro modifiche" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "Chiudi" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "Aggiornamento firmware" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "Il firmware è la parte di software eseguita direttamente sulla stampante 3D. Questo firmware controlla i motori passo-passo, regola la temperatura e, in ultima analisi, consente il funzionamento della stampante." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "Il firmware inviato a corredo delle nuove stampanti funziona, tuttavia le nuove versioni tendono ad avere più funzioni ed ottimizzazioni." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "Aggiorna automaticamente il firmware" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "Carica il firmware personalizzato" + +#: /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 "Impossibile aggiornare il firmware: nessun collegamento con la stampante." + +#: /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 "Impossibile aggiornare il firmware: il collegamento con la stampante non supporta l’aggiornamento del firmware." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "Seleziona il firmware personalizzato" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "Aggiornamento del firmware" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "Aggiornamento firmware." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "Aggiornamento del firmware completato." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "Aggiornamento firmware non riuscito a causa di un errore sconosciuto." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "Aggiornamento firmware non riuscito a causa di un errore di comunicazione." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "Aggiornamento firmware non riuscito a causa di un errore di input/output." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Aggiornamento firmware non riuscito per firmware mancante." @@ -1615,22 +1717,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Contratto di licenza" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "Collegamento esistente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "Stampante/gruppo già aggiunto a Cura. Selezionare un’altra stampante o un altro gruppo." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Collega alla stampante in rete" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" @@ -1638,333 +1740,395 @@ msgid "" "Select your printer from the list below:" msgstr "Per stampare direttamente sulla stampante in rete, verificare che la stampante desiderata sia collegata alla rete mediante un cavo di rete o mediante collegamento alla rete WIFI. Se si collega Cura alla stampante, è comunque possibile utilizzare una chiavetta USB per trasferire i file codice G alla stampante.\n\nSelezionare la stampante dall’elenco seguente:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Aggiungi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "Modifica" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Rimuovi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "Aggiorna" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Se la stampante non è nell’elenco, leggere la guida alla risoluzione dei problemi per la stampa in rete" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "Tipo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "Versione firmware" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "Indirizzo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Questa stampante non è predisposta per comandare un gruppo di stampanti Ultimaker 3." +msgid "This printer is not set up to host a group of printers." +msgstr "Questa stampante non è predisposta per comandare un gruppo di stampanti." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Questa stampante comanda un gruppo di %1 stampanti Ultimaker 3." +msgid "This printer is the host for a group of %1 printers." +msgstr "Questa stampante comanda un gruppo di %1 stampanti." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "La stampante a questo indirizzo non ha ancora risposto." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "Collega" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "Indirizzo stampante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Inserire l’indirizzo IP o l’hostname della stampante sulla rete." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "Stampa sulla rete" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "Selezione stampante" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "Stampa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 non è configurata per supportare la connessione di un gruppo di stampanti Ultimaker 3" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "Stampa sulla rete" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Aggiungi/Rimuovi stampanti" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" +msgstr "Selezione stampante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Apre la pagina processi di stampa con il browser web predefinito." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" +msgstr "Non disponibile" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Visualizza processi di stampa" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" +msgstr "Non raggiungibile" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Preparazione della stampa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Stampa in corso" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" msgstr "Disponibile" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Persa connessione con la stampante" +msgid "Aborted" +msgstr "Interrotto" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Non disponibile" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Sconosciuto" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Disabilitato" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Riservato" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "Terminato" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Preparazione della stampa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" -msgstr "Richiede un'azione" +msgid "Preparing" +msgstr "Preparazione in corso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" -msgstr "In pausa" +msgid "Pausing" +msgstr "Messa in pausa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "Ripresa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" -msgstr "Stampa interrotta" +msgid "Action required" +msgstr "Richiede un'azione" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Mancata accettazione processi di stampa" +msgid "Waiting for: Unavailable printer" +msgstr "In attesa: stampante non disponibile" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "Finisce alle: " +msgid "Waiting for: First available" +msgstr "In attesa della prima disponibile" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "Cancellare piano di stampa" +msgid "Waiting for: " +msgstr "In attesa: " -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "In attesa di modifica configurazione" +msgid "Configuration change" +msgstr "Modifica configurazione" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Processi di stampa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "Stampa in corso" +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "La stampante assegnata, %1, richiede le seguenti modifiche di configurazione:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "La stampante %1 è assegnata, ma il processo contiene una configurazione materiale sconosciuta." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 +msgctxt "@label" +msgid "Change material %1 from %2 to %3." +msgstr "Cambia materiale %1 da %2 a %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 "Caricare %3 come materiale %1 (Operazione non annullabile)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "Cambia print core %1 da %2 a %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 "Cambia piano di stampa a %1 (Operazione non annullabile)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "Override" + +#: /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 "L’avvio di un processo di stampa con una configurazione non compatibile potrebbe danneggiare la stampante 3D. Sei sicuro di voler annullare la configurazione e stampare %1?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:435 +msgctxt "@window:title" +msgid "Override configuration configuration and start print" +msgstr "Annullare la configurazione e avviare la stampa" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "Vetro" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "Alluminio" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "Gestione coda di stampa" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "Coda di stampa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Stampanti" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "Stampa in corso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Visualizza stampanti" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "Gestione stampanti" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "Sposta in alto" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "Cancella" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "Riprendi" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "Pausa" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "Interrompi" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "Sei sicuro di voler spostare 1% all’inizio della coda?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "Sposta il processo di stampa in alto" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "Sei sicuro di voler cancellare %1?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "Cancella processo di stampa" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "Sei sicuro di voler interrompere %1?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Interrompi la stampa" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Collega a una stampante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "Carica la configurazione della stampante in Cura" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Attiva la configurazione" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "Carica la configurazione della stampante in Cura" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Schema colori" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Colore materiale" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Tipo di linea" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Velocità" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Spessore strato" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Modalità di compatibilità" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Mostra spostamenti" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Mostra helper" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Mostra guscio" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Mostra riempimento" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Mostra solo strati superiori" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "Mostra 5 strati superiori in dettaglio" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Superiore / Inferiore" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Parete interna" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "min." -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "max." @@ -1979,17 +2143,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "Script di post-elaborazione" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "Aggiungi uno script" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "Impostazioni" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "Modifica script di post-elaborazione attivi" @@ -2084,53 +2248,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Smoothing" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Tipo di maglia" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Modello normale" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Stampa come supporto" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Non supporta sovrapposizione con altri modelli" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Modifica impostazioni per sovrapposizione con altri modelli" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Modifica impostazioni per riempimento di altri modelli" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "Seleziona impostazioni" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Seleziona impostazioni di personalizzazione per questo modello" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtro..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "Mostra tutto" @@ -2152,13 +2316,13 @@ msgid "Create new" msgstr "Crea nuovo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Riepilogo - Progetto Cura" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Impostazioni della stampante" @@ -2175,18 +2339,19 @@ msgid "Update" msgstr "Aggiorna" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Tipo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "Gruppo stampanti" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Impostazioni profilo" @@ -2198,19 +2363,20 @@ msgstr "Come può essere risolto il conflitto nel profilo?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Nome" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "Non nel profilo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2240,7 +2406,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Come può essere risolto il conflitto nel materiale?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Impostazione visibilità" @@ -2251,13 +2417,13 @@ msgid "Mode" msgstr "Modalità" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Impostazioni visibili:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 su %2" @@ -2313,36 +2479,6 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "Spostamento alla posizione successiva" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "Aggiorna firmware" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "Il firmware è la parte di software eseguita direttamente sulla stampante 3D. Questo firmware controlla i motori passo-passo, regola la temperatura e, in ultima analisi, consente il funzionamento della stampante." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "Il firmware inviato a corredo delle nuove stampanti funziona, tuttavia le nuove versioni tendono ad avere più funzioni ed ottimizzazioni." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "Aggiorna automaticamente il firmware" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "Carica il firmware personalizzato" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "Seleziona il firmware personalizzato" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" @@ -2490,27 +2626,11 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Rimuovere la stampa" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Pausa" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Riprendi" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "Interrompi la stampa" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Interrompi la stampa" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2544,19 +2664,17 @@ msgid "Customized" msgstr "Valore personalizzato" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Chiedi sempre" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Elimina e non chiedere nuovamente" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Mantieni e non chiedere nuovamente" @@ -2576,101 +2694,179 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Crea nuovo profilo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Informazioni" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Conferma modifica diametro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" msgstr "Il nuovo diametro del filamento impostato a %1 mm non è compatibile con l'attuale estrusore. Continuare?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Visualizza nome" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marchio" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Tipo di materiale" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Colore" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Proprietà" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Densità" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Diametro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Costo del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Peso del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Lunghezza del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Costo al metro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Questo materiale è collegato a %1 e condivide alcune delle sue proprietà." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Scollega materiale" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Descrizione" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Informazioni sull’aderenza" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "Impostazioni di stampa" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Attiva" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Crea" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "Duplica" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "Importa" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Esporta" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "Stampante" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "Conferma rimozione" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "Sei sicuro di voler rimuovere %1? Questa operazione non può essere annullata!" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Importa materiale" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "Impossibile importare materiale {1}: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "Materiale importato correttamente %1" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Esporta materiale" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "Impossibile esportare il materiale su %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Materiale esportato correttamente su %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2707,289 +2903,287 @@ msgid "Unit" msgstr "Unità" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "Generale" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "Interfaccia" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "Lingua:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "Valuta:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "Tema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "Riavviare l'applicazione per rendere effettive le modifiche." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Seziona automaticamente alla modifica delle impostazioni." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "Seziona automaticamente" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "Comportamento del riquadro di visualizzazione" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Evidenzia in rosso le zone non supportate del modello. In assenza di supporto, queste aree non saranno stampate in modo corretto." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "Visualizza sbalzo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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 "Sposta la fotocamera in modo che il modello si trovi al centro della visualizzazione quando è selezionato" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Centratura fotocamera alla selezione dell'elemento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "Il comportamento dello zoom predefinito di Cura dovrebbe essere invertito?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Inverti la direzione dello zoom della fotocamera." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "Lo zoom si muove nella direzione del mouse?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Zoom verso la direzione del mouse" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "I modelli sull’area di stampa devono essere spostati per evitare intersezioni?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Assicurarsi che i modelli siano mantenuti separati" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "I modelli sull’area di stampa devono essere portati a contatto del piano di stampa?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Rilascia automaticamente i modelli sul piano di stampa" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "Visualizza il messaggio di avvertimento sul lettore codice G." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" -msgstr "Messaggio di avvertimento sul lettore codice G." +msgstr "Messaggio di avvertimento sul lettore codice G" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "Lo strato deve essere forzato in modalità di compatibilità?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Forzare la modalità di compatibilità visualizzazione strato (riavvio necessario)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "Apertura e salvataggio file" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "I modelli devono essere ridimensionati al volume di stampa, se troppo grandi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "Ridimensiona i modelli troppo grandi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "Un modello può apparire eccessivamente piccolo se la sua unità di misura è espressa in metri anziché in millimetri. Questi modelli devono essere aumentati?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Ridimensiona i modelli eccessivamente piccoli" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "I modelli devono essere selezionati dopo essere stati caricati?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Selezionare i modelli dopo il caricamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "Al nome del processo di stampa deve essere aggiunto automaticamente un prefisso basato sul nome della stampante?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Aggiungi al nome del processo un prefisso macchina" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Quando si salva un file di progetto deve essere visualizzato un riepilogo?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Visualizza una finestra di riepilogo quando si salva un progetto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Comportamento predefinito all'apertura di un file progetto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Comportamento predefinito all'apertura di un file progetto: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" +msgid "Always ask me this" msgstr "Chiedi sempre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Apri sempre come progetto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "Importa sempre i modelli" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "Dopo aver modificato un profilo ed essere passati a un altro, si apre una finestra di dialogo che chiede se mantenere o eliminare le modifiche oppure se scegliere un comportamento predefinito e non visualizzare più tale finestra di dialogo." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "Override profilo" +msgid "Profiles" +msgstr "Profili" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "Comportamento predefinito per i valori di impostazione modificati al passaggio a un profilo diverso: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "Elimina sempre le impostazioni modificate" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "Trasferisci sempre le impostazioni modificate a un nuovo profilo" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "Privacy" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "Cura deve verificare la presenza di eventuali aggiornamenti all’avvio del programma?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Controlla aggiornamenti all’avvio" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "I dati anonimi sulla stampa devono essere inviati a Ultimaker? Nota, non sono trasmessi o memorizzati modelli, indirizzi IP o altre informazioni personali." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Invia informazioni di stampa (anonime)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "Ulteriori informazioni" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "Sperimentale" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Utilizzare la funzionalità piano di stampa multiplo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Utilizzare la funzionalità piano di stampa multiplo (necessario riavvio)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "I modelli appena caricati devono essere sistemati sul piano di stampa? Utilizzato in abbinamento al piano di stampa multiplo (SPERIMENTALE)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Non posizionare oggetti sul carico" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "Stampanti" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Attiva" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3007,7 +3201,7 @@ msgid "Connection:" msgstr "Collegamento:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "La stampante non è collegata." @@ -3033,7 +3227,7 @@ msgid "Aborting print..." msgstr "Interruzione stampa in corso..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "Profili" @@ -3048,18 +3242,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Duplica" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Importa" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Esporta" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3070,18 +3252,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplica profilo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Conferma rimozione" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "Sei sicuro di voler rimuovere %1? Questa operazione non può essere annullata!" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3102,228 +3272,200 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Stampante: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Profili protetti" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Profili personalizzati" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Aggiorna il profilo con le impostazioni/esclusioni correnti" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Elimina le modifiche correnti" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "Questo profilo utilizza le impostazioni predefinite dalla stampante, perciò non ci sono impostazioni/esclusioni nell’elenco riportato di seguito." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Le impostazioni correnti corrispondono al profilo selezionato." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Impostazioni globali" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materiali" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Crea" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Duplica" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Importa materiale" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr "Impossibile importare materiale {1}: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "Materiale importato correttamente %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Esporta materiale" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "Impossibile esportare il materiale su %1: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Materiale esportato correttamente su %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Stampante" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "Aggiungi stampante" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "Nome stampante:" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "Aggiungi stampante" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "Senza titolo" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "Informazioni su Cura" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "versione: %1" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "Soluzione end-to-end per la stampa 3D con filamento fuso." -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" msgstr "Cura è stato sviluppato da Ultimaker B.V. in cooperazione con la comunità.\nCura è orgogliosa di utilizzare i seguenti progetti open source:" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "Interfaccia grafica utente" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "Struttura applicazione" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "Generatore codice G" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "Libreria di comunicazione intra-processo" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "Lingua di programmazione" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "Struttura GUI" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "Vincoli struttura GUI" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "Libreria vincoli C/C++" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "Formato scambio dati" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "Libreria di supporto per calcolo scientifico" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "Libreria di supporto per calcolo rapido" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "Libreria di supporto per gestione file STL" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "Libreria di supporto per gestione oggetti planari" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "Libreria di supporto per gestione maglie triangolari" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "Libreria di supporto per l’analisi di reti complesse" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "Libreria di supporto per gestione file 3MF" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "Libreria di supporto per metadati file e streaming" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "Libreria di comunicazione seriale" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "Libreria scoperta ZeroConf" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "Libreria ritaglio poligono" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "Libreria Python HTTP" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "Font" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "Icone SVG" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "Apertura applicazione distribuzione incrociata Linux" @@ -3333,7 +3475,7 @@ msgctxt "@label" msgid "Profile:" msgstr "Profilo:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" @@ -3341,53 +3483,53 @@ msgid "" "Click to open the profile manager." msgstr "Alcuni valori di impostazione/esclusione sono diversi dai valori memorizzati nel profilo.\n\nFare clic per aprire la gestione profili." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "Ricerca..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Copia valore su tutti gli estrusori" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Copia tutti i valori modificati su tutti gli estrusori" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Nascondi questa impostazione" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Nascondi questa impostazione" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Mantieni visibile questa impostazione" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configura visibilità delle impostazioni..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Comprimi tutto" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Espandi tutto" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" @@ -3405,17 +3547,17 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Influenzato da" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "Questa impostazione è sempre condivisa tra tutti gli estrusori. La sua modifica varierà il valore per tutti gli estrusori." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "Questo valore è risolto da valori per estrusore " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3423,7 +3565,7 @@ msgid "" "Click to restore the value of the profile." msgstr "Questa impostazione ha un valore diverso dal profilo.\n\nFare clic per ripristinare il valore del profilo." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3467,7 +3609,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "Invia un comando codice G personalizzato alla stampante connessa. Premere ‘invio’ per inviare il comando." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Estrusore" @@ -3520,7 +3662,7 @@ msgid "The nozzle inserted in this extruder." msgstr "L’ugello inserito in questo estrusore." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Piano di stampa" @@ -3545,6 +3687,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Riscalda il piano prima della stampa. È possibile continuare a regolare la stampa durante il riscaldamento e non è necessario attendere il riscaldamento del piano quando si è pronti per la stampa." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "Materiale" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "Preferiti" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "Generale" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3560,27 +3717,27 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "&Visualizza" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "&Posizione fotocamera" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" -msgstr "&Piano di stampa" +msgstr "P&iano di stampa" #: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:13 msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "Impostazioni visibili" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "Mostra tutte le impostazioni" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Gestisci Impostazione visibilità..." @@ -3641,347 +3798,346 @@ msgid "" "G-code files cannot be modified" msgstr "Impostazione di stampa disabilitata\nI file codice G non possono essere modificati" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "00h 00min" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "Indicazioni di tempo" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "Indicazione di costo" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "%1m" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "%1g" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "Totale:" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." msgstr "Impostazione di stampa consigliata

Stampa con le impostazioni consigliate per la stampante, il materiale e la qualità selezionati." -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Impostazione di stampa personalizzata

Stampa con il controllo grana fine su ogni sezione finale del processo di sezionamento." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Stampa attiva" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Nome del processo" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Tempo di stampa" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Tempo residuo stimato" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "Att&iva/disattiva schermo intero" +msgid "Toggle Full Screen" +msgstr "Attiva/disattiva schermo intero" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&Annulla" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "Ri&peti" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" -msgstr "E&sci" +msgstr "&Esci" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "&Visualizzazione 3D" +msgid "3D View" +msgstr "Visualizzazione 3D" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "&Visualizzazione frontale" +msgid "Front View" +msgstr "Visualizzazione frontale" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "&Visualizzazione superiore" +msgid "Top View" +msgstr "Visualizzazione superiore" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "&Visualizzazione lato sinistro" +msgid "Left Side View" +msgstr "Visualizzazione lato sinistro" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "&Visualizzazione lato destro" +msgid "Right Side View" +msgstr "Visualizzazione lato destro" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Configura Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." -msgstr "A&ggiungi stampante..." +msgstr "&Aggiungi stampante..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." -msgstr "&Gestione stampanti..." +msgstr "Gestione stampanti..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Gestione materiali..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Aggiorna il profilo con le impostazioni/esclusioni correnti" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Elimina le modifiche correnti" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&Crea profilo dalle impostazioni/esclusioni correnti..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Gestione profili..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Mostra documentazione &online" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Se&gnala un errore" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "I&nformazioni..." +msgid "About..." +msgstr "Informazioni..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Cancella &modello selezionato" -msgstr[1] "Cancella modelli &selezionati" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" +msgstr[0] "Cancella modello selezionato" +msgstr[1] "Cancella modelli selezionati" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Centra modello selezionato" msgstr[1] "Centra modelli selezionati" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Moltiplica modello selezionato" msgstr[1] "Moltiplica modelli selezionati" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Elimina modello" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "C&entra modello su piattaforma" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Raggruppa modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Separa modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Unisci modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." -msgstr "Mo<iplica modello" +msgstr "Mo<iplica modello..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "Sel&eziona tutti i modelli" +msgid "Select All Models" +msgstr "Seleziona tutti i modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Cancellare piano di stampa" +msgid "Clear Build Plate" +msgstr "Cancellare piano di stampa" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 +msgctxt "@action:inmenu menubar:file" +msgid "Reload All Models" +msgstr "Ricarica tutti i modelli" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 -msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "R&icarica tutti i modelli" - -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Sistema tutti i modelli su tutti i piani di stampa" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Sistema tutti i modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Sistema selezione" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Reimposta tutte le posizioni dei modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "Reimposta tutte le &trasformazioni dei modelli" +msgid "Reset All Model Transformations" +msgstr "Reimposta tutte le trasformazioni dei modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Apri file..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nuovo Progetto..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." -msgstr "M&ostra log motore..." +msgstr "Mostra &log motore..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Mostra cartella di configurazione" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Sfoglia i pacchetti..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Espandi/Riduci barra laterale" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Caricare un modello 3D" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Pronto per il sezionamento" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Sezionamento in corso..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Pronto a %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Sezionamento impossibile" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Sezionamento non disponibile" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Seziona processo di stampa corrente" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Annulla processo di sezionamento" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Prepara" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Annulla" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Seleziona l'unità di uscita attiva" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "Apri file" @@ -4001,244 +4157,255 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&File" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "&Salva..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "&Esporta..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "&Salva selezione su file" +msgid "Export Selection..." +msgstr "Esporta selezione..." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Salva &come..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Salva &progetto..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Modifica" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "&Visualizza" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "&Impostazioni" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "S&tampante" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "Ma&teriale" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Imposta come estrusore attivo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Abilita estrusore" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Disabilita estrusore" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Piano di stampa" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "&Profilo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "Es&tensioni" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&Casella degli strumenti" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "P&referenze" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "&Help" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Questo pacchetto sarà installato dopo il riavvio." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "Apri file" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "Impostazioni" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "Nuovo progetto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Sei sicuro di voler aprire un nuovo progetto? Questo cancellerà il piano di stampa e tutte le impostazioni non salvate." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "Chiusura di Cura" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "Sei sicuro di voler uscire da Cura?" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "Installa il pacchetto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "Apri file" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." -msgstr "Rilevata la presenza di uno o più file codice G tra i file selezionati. È possibile aprire solo un file codice G alla volta. Se desideri aprire un file codice G, selezionane uno solo. " +msgstr "Rilevata la presenza di uno o più file codice G tra i file selezionati. È possibile aprire solo un file codice G alla volta. Se desideri aprire un file codice G, selezionane uno solo." #: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:14 msgctxt "@title:window" msgid "Save Project" msgstr "Salva progetto" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Piano di stampa" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Estrusore %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & materiale" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Non mostrare il riepilogo di progetto alla ripetizione di salva" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Salva" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Altezza dello strato" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" -msgstr "Questo profilo di qualità non è disponibile per il materiale e la configurazione ugello corrente. Modificarli per abilitare questo profilo di qualità." +msgstr "Questo profilo di qualità non è disponibile per il materiale e la configurazione ugello corrente. Modificarli per abilitare questo profilo di qualità" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "Un profilo personalizzato è attualmente attivo. Per attivare il cursore qualità, selezionare un profilo di qualità predefinito nella scheda Personalizza" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Velocità di stampa" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Più lenta" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Più veloce" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Sono state modificate alcune impostazioni del profilo. Per modificarle, andare alla modalità personalizzata." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Riempimento" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Un riempimento graduale aumenterà gradualmente la quantità di riempimento verso l'alto." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "Consenti variazione graduale" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "Generazione supporto" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Genera strutture per supportare le parti del modello a sbalzo. Senza queste strutture, queste parti collasserebbero durante la stampa." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Seleziona l’estrusore da utilizzare per la stampa di strutture di supporto. Ciò consentirà di costruire strutture di supporto sotto il modello per evitare cedimenti del modello o di stampare a mezz'aria." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Adesione piano di stampa" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Abilita stampa di brim o raft. Questa funzione aggiunge un’area piana attorno o sotto l’oggetto, facile da tagliare successivamente." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Serve aiuto per migliorare le tue stampe?
Leggi la Guida alla ricerca e riparazione guasti Ultimaker" @@ -4285,23 +4452,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Tipo di stampante" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Materiale" -# Added after the string freeze. -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Utilizzare un foglio di adesione o colla con questa combinazione di materiali" +msgid "Use glue with this material combination" +msgstr "Utilizzare la colla con questa combinazione di materiali" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Controlla compatibilità" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Fai clic per verificare la compatibilità del materiale su Ultimaker.com." @@ -4391,16 +4557,6 @@ msgctxt "name" msgid "God Mode" msgstr "Modalità God" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Accetta i G-Code e li invia tramite WiFi a un Doodle3D WiFi-Box." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4411,6 +4567,16 @@ msgctxt "name" msgid "Changelog" msgstr "Registro modifiche" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "Fornisce azioni macchina per l’aggiornamento del firmware." + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "Aggiornamento firmware" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." @@ -4434,7 +4600,7 @@ msgstr "Stampa USB" #: UserAgreement/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license." -msgstr "Chiedere una volta all'utente se accetta la nostra licenza" +msgstr "Chiedere una volta all'utente se accetta la nostra licenza." #: UserAgreement/plugin.json msgctxt "name" @@ -4481,16 +4647,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Fase di preparazione" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Fornisce una finestra di modifica per la modifica script diretta." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Strumento di script diretto" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4504,7 +4660,7 @@ msgstr "Plugin dispositivo di output unità rimovibile" #: UM3NetworkPrinting/plugin.json msgctxt "description" msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Gestisce le connessioni di rete alle stampanti Ultimaker 3" +msgstr "Gestisce le connessioni di rete alle stampanti Ultimaker 3." #: UM3NetworkPrinting/plugin.json msgctxt "name" @@ -4601,16 +4757,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Lettore legacy profilo Cura" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Aiuta ad aprire i file Blender direttamente in Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Integrazione Blender (sperimentale)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4661,6 +4807,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Aggiornamento della versione da 2.7 a 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "Aggiorna le configurazioni da Cura 3.4 a Cura 3.5." + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "Aggiornamento della versione da 3.4 a 3.5" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4801,6 +4957,299 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Lettore profilo Cura" +#~ msgctxt "@warning:status" +#~ msgid "Please generate G-code before saving." +#~ msgstr "Generare il codice G prima di salvare." + +#~ msgctxt "@item:inmenu" +#~ msgid "Profile Assistant" +#~ msgstr "Assistente profilo" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Profile Assistant" +#~ msgstr "Assistente profilo" + +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "Aggiorna firmware" + +#~ msgctxt "@label unknown material" +#~ msgid "Unknown" +#~ msgstr "Sconosciuto" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "No custom profile to import in file {0}" +#~ msgstr "Nessun profilo personalizzato da importare nel file {0}" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "This profile {0} contains incorrect data, could not import it." +#~ msgstr "Questo profilo {0} contiene dati errati, impossibile importarlo." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "La macchina definita nel profilo {0} ({1}) non corrisponde alla macchina corrente ({2}), impossibile importarlo." + +#~ msgctxt "@title:window" +#~ msgid "Confirm uninstall " +#~ msgstr "Conferma disinstalla " + +#~ msgctxt "@label:status" +#~ msgid "Paused" +#~ msgstr "In pausa" + +#~ msgctxt "@action:button" +#~ msgid "Previous" +#~ msgstr "Precedente" + +#~ msgctxt "@action:button" +#~ msgid "Next" +#~ msgstr "Avanti" + +#~ msgctxt "@label" +#~ msgid "Tip" +#~ msgstr "Suggerimento" + +#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +#~ msgid "%1m / ~ %2g / ~ %4 %3" +#~ msgstr "%1m / ~ %2g / ~ %4 %3" + +#~ msgctxt "@label Print estimates: m for meters, g for grams" +#~ msgid "%1m / ~ %2g" +#~ msgstr "%1m / ~ %2g" + +#~ msgctxt "@label" +#~ msgid "Print experiment" +#~ msgstr "Prova di stampa" + +#~ msgctxt "@label" +#~ msgid "Checklist" +#~ msgstr "Lista di controllo" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "Aggiorna firmware" + +#~ msgctxt "description" +#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +#~ msgstr "Consente ai produttori di materiali di creare nuovi profili materiale e di qualità utilizzando una UI drop-in." + +#~ msgctxt "name" +#~ msgid "Print Profile Assistant" +#~ msgstr "Assistente profilo di stampa" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Stampa con Doodle3D WiFi-Box" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Stampa con Doodle3D WiFi-Box" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Collegamento a Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Invio dati a Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Impossibile inviare dati a Doodle3D Connect. C'è un altro processo in corso?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Memorizzazione dati su Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "File inviato a Doodle3D Connect" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Apri Connect..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Apri interfaccia web Doodle3D Connect" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "File Blender" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Impossibile esportare utilizzando qualità \"{}\" quality!\n" +#~ "Tornato a \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Contatto" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Questa stampante non è predisposta per comandare un gruppo di stampanti Ultimaker 3." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Questa stampante comanda un gruppo di %1 stampanti Ultimaker 3." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 non è configurata per supportare la connessione di un gruppo di stampanti Ultimaker 3" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Aggiungi/Rimuovi stampanti" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Apre la pagina processi di stampa con il browser web predefinito." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Visualizza processi di stampa" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Preparazione della stampa" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Stampa in corso" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Disponibile" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Persa connessione con la stampante" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Non disponibile" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Sconosciuto" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Disabilitato" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Riservato" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Preparazione della stampa" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Stampa interrotta" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Mancata accettazione processi di stampa" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Finisce alle: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Cancellare piano di stampa" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "In attesa di modifica configurazione" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Processi di stampa" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Stampanti" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Visualizza stampanti" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Pausa" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Riprendi" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Interrompi la stampa" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Chiedi sempre" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Override profilo" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "I modelli appena caricati devono essere sistemati sul piano di stampa? Utilizzato in abbinamento al piano di stampa multiplo (SPERIMENTALE)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Non posizionare oggetti sul carico" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "&Salva selezione su file" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Salva &come..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Salva &progetto..." + +# Added after the string freeze. +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Utilizzare un foglio di adesione o colla con questa combinazione di materiali" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Accetta i G-Code e li invia tramite WiFi a un Doodle3D WiFi-Box." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Fornisce una finestra di modifica per la modifica script diretta." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Strumento di script diretto" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Aiuta ad aprire i file Blender direttamente in Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Integrazione Blender (sperimentale)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Avvertenza controllo modello" @@ -5068,10 +5517,6 @@ msgstr "Lettore profilo Cura" #~ msgid "Browse plugins..." #~ msgstr "Sfoglia plugin..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Piano di stampa" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "&Plugin" @@ -5297,14 +5742,6 @@ msgstr "Lettore profilo Cura" #~ "\n" #~ " Spiacenti." -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Assistente profilo" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Assistente profilo" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Nessun materiale caricato" @@ -5435,14 +5872,6 @@ msgstr "Lettore profilo Cura" #~ msgid "Configure setting visiblity..." #~ msgstr "Configurazione visibilità delle impostazioni in corso..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Automatico: %1" @@ -5479,14 +5908,6 @@ msgstr "Lettore profilo Cura" #~ msgid "GCode Profile Reader" #~ msgstr "Lettore profilo GCode" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Consente ai produttori di materiali di creare nuovi profili materiale e di qualità utilizzando una UI drop-in." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Assistente profilo di stampa" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Rilevati errori all'apertura del file SolidWorks! Controllare se è possibile aprire il file in SolidWorks senza che si verifichino problemi!" @@ -5683,10 +6104,6 @@ msgstr "Lettore profilo Cura" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Questa stampante fa da host per un gruppo di %1 stampanti Ultimaker 3 connesse" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Preparazione in corso" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Completato su: " diff --git a/resources/i18n/it_IT/fdmextruder.def.json.po b/resources/i18n/it_IT/fdmextruder.def.json.po index 0ed16e504b..aa170f18be 100644 --- a/resources/i18n/it_IT/fdmextruder.def.json.po +++ b/resources/i18n/it_IT/fdmextruder.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 14:25+0100\n" "Last-Translator: Bothof \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -166,6 +166,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "Indica la coordinata Z della posizione in cui l’ugello si innesca all’avvio della stampa." +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "Ventola di raffreddamento stampa estrusore" + +#: 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 "Il numero di ventole di raffreddamento stampa abbinate a questo estrusore. Modificarlo dal valore predefinito 0 solo quando si ha una ventola di raffreddamento diversa per ciascun estrusore." + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/it_IT/fdmprinter.def.json.po b/resources/i18n/it_IT/fdmprinter.def.json.po index 2d883982e3..e2d013f74c 100644 --- a/resources/i18n/it_IT/fdmprinter.def.json.po +++ b/resources/i18n/it_IT/fdmprinter.def.json.po @@ -5,16 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 15:02+0200\n" "Last-Translator: Bothof \n" "Language-Team: Italian\n" "Language: it_IT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.6\n" #: fdmprinter.def.json msgctxt "machine_settings label" @@ -80,6 +81,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "Il GUID del materiale. È impostato automaticamente. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Diametro" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Regolare il diametro del filamento utilizzato. Abbinare questo valore al diametro del filamento utilizzato." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -533,7 +544,7 @@ msgstr "Accelerazione massima X" #: fdmprinter.def.json msgctxt "machine_max_acceleration_x description" msgid "Maximum acceleration for the motor of the X-direction" -msgstr "Indica l’accelerazione massima del motore per la direzione X." +msgstr "Indica l’accelerazione massima del motore per la direzione X" #: fdmprinter.def.json msgctxt "machine_max_acceleration_y label" @@ -853,7 +864,7 @@ msgstr "Larghezza linea strato iniziale" #: fdmprinter.def.json msgctxt "initial_layer_line_width_factor description" msgid "Multiplier of the line width on the first layer. Increasing this could improve bed adhesion." -msgstr "Moltiplicatore della larghezza della linea del primo strato Il suo aumento potrebbe migliorare l'adesione al piano" +msgstr "Moltiplicatore della larghezza della linea del primo strato Il suo aumento potrebbe migliorare l'adesione al piano." #: fdmprinter.def.json msgctxt "shell label" @@ -1055,6 +1066,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Zig Zag" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "Collega poligoni superiori/inferiori" + +#: 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 "Collega i percorsi del rivestimento esterno superiore/inferiore quando corrono uno accanto all’altro. Per le configurazioni concentriche, l’abilitazione di questa impostazione riduce notevolmente il tempo di spostamento, tuttavia poiché i collegamenti possono aver luogo a metà del riempimento, con questa funzione la qualità della superficie superiore potrebbe risultare inferiore." + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1135,6 +1156,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Compensa il flusso per le parti di una parete interna che viene stampata dove è già presente una parete." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "Flusso minimo della parete" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "Flusso percentuale minimo ammesso per una linea perimetrale. La compensazione di sovrapposizione pareti riduce il flusso di una parete quando si trova vicino a una parete esistente. Le pareti con un flusso inferiore a questo valore saranno sostituite da uno spostamento. Quando si utilizza questa impostazione, si deve abilitare la compensazione della sovrapposizione pareti e stampare la parete esterna prima delle pareti interne." + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "Preferire retrazione" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "Se abilitata, la retrazione viene utilizzata al posto del combing per gli spostamenti che sostituiscono le pareti aventi un flusso inferiore alla soglia minima." + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1383,7 +1424,7 @@ msgstr "Velocità di stiratura" #: fdmprinter.def.json msgctxt "speed_ironing description" msgid "The speed at which to pass over the top surface." -msgstr "Velocità alla quale passare sopra la superficie superiore" +msgstr "Velocità alla quale passare sopra la superficie superiore." #: fdmprinter.def.json msgctxt "acceleration_ironing label" @@ -1452,8 +1493,8 @@ msgstr "Configurazione di riempimento" #: 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "Configurazione del materiale di riempimento della stampa. Il riempimento a linea e a zig zag cambia direzione su strati alternati, riducendo il costo del materiale. Le configurazioni a griglia, a triangolo, tri-esagonali, cubiche, ottagonali, a quarto di cubo, incrociate e concentriche sono stampate completamente su ogni strato. Le configurazioni cubiche, a quarto di cubo e ottagonali variano per ciascuno strato per garantire una più uniforme distribuzione della forza in ogni direzione." +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 "Configurazione del materiale di riempimento della stampa. Il riempimento a linea e a zig zag cambia direzione su strati alternati, riducendo il costo del materiale. Le configurazioni a griglia, a triangolo, tri-esagonali, cubiche, ottagonali, a quarto di cubo, incrociate e concentriche sono stampate completamente su ogni strato. Le configurazioni gyroid, cubiche, a quarto di cubo e ottagonali variano per ciascuno strato per garantire una più uniforme distribuzione della forza in ogni direzione." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1500,11 +1541,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Concentriche" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D concentrica" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1520,6 +1556,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "Incrociata 3D" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "Gyroid" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1530,6 +1571,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Collegare le estremità nel punto in cui il riempimento incontra la parete interna utilizzando una linea che segue la forma della parete interna. L'abilitazione di questa impostazione può far meglio aderire il riempimento alle pareti riducendo nel contempo gli effetti del riempimento sulla qualità delle superfici verticali. La disabilitazione di questa impostazione consente di ridurre la quantità di materiale utilizzato." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "Collega poligoni di riempimento" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "Collega i percorsi di riempimento quando corrono uno accanto all’altro. Per le configurazioni di riempimento composte da più poligoni chiusi, l’abilitazione di questa impostazione riduce notevolmente il tempo di spostamento." + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1560,6 +1611,28 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Il riempimento si sposta di questa distanza lungo l'asse Y." +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "Moltiplicatore delle linee di riempimento" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "Converte ogni linea di riempimento in questo numero di linee. Le linee supplementari non si incrociano tra loro, ma si evitano. In tal modo il riempimento risulta più rigido, ma il tempo di stampa e la quantità di materiale aumentano." + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "Conteggio pareti di riempimento supplementari" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "Aggiunge pareti supplementari intorno alla zona di riempimento. Queste pareti possono ridurre l’abbassamento delle linee del rivestimento esterno superiore/inferiore, pertanto saranno necessari meno strati di rivestimento esterno superiore/inferiore per ottenere la stessa qualità al costo del materiale supplementare.\nQuesta funzione può essere abbinata a Collega poligoni riempimento per collegare tutto il riempimento in un unico percorso di estrusione senza necessità di avanzamenti o arretramenti, se configurata correttamente." + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1788,7 +1861,7 @@ msgstr "Temperatura di stampa preimpostata" #: 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 "La temperatura preimpostata utilizzata per la stampa. Deve essere la temperatura “base” di un materiale. Tutte le altre temperature di stampa devono usare scostamenti basati su questo valore." +msgstr "La temperatura preimpostata utilizzata per la stampa. Deve essere la temperatura “base” di un materiale. Tutte le altre temperature di stampa devono usare scostamenti basati su questo valore" #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1848,7 +1921,7 @@ msgstr "Temperatura piano di stampa preimpostata" #: fdmprinter.def.json msgctxt "default_material_bed_temperature description" msgid "The default temperature used for the heated build plate. This should be the \"base\" temperature of a build plate. All other print temperatures should use offsets based on this value" -msgstr "La temperatura preimpostata utilizzata per il piano di stampa. Deve essere la temperatura “base” di un piano di stampa. Tutte le altre temperature di stampa devono usare scostamenti basati su questo valore." +msgstr "La temperatura preimpostata utilizzata per il piano di stampa. Deve essere la temperatura “base” di un piano di stampa. Tutte le altre temperature di stampa devono usare scostamenti basati su questo valore" #: fdmprinter.def.json msgctxt "material_bed_temperature label" @@ -1870,16 +1943,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "Indica la temperatura usata per il piano di stampa riscaldato per il primo strato." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Diametro" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Regolare il diametro del filamento utilizzato. Abbinare questo valore al diametro del filamento utilizzato." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -1948,7 +2011,7 @@ msgstr "Retrazione al cambio strato" #: fdmprinter.def.json msgctxt "retract_at_layer_change description" msgid "Retract the filament when the nozzle is moving to the next layer." -msgstr "Ritrae il filamento quando l'ugello si sta muovendo allo strato successivo. " +msgstr "Ritrae il filamento quando l'ugello si sta muovendo allo strato successivo." #: fdmprinter.def.json msgctxt "retraction_amount label" @@ -2717,8 +2780,8 @@ msgstr "Modalità Combing" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "La funzione Combing tiene l’ugello all’interno delle aree già stampate durante lo spostamento. In tal modo le corse di spostamento sono leggermente più lunghe ma si riduce l’esigenza di effettuare retrazioni. Se questa funzione viene disabilitata, il materiale viene retratto e l’ugello si sposta in linea retta al punto successivo. È anche possibile evitare il combing sopra le aree del rivestimento esterno superiore/inferiore effettuando il combing solo nel riempimento." +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "La funzione Combing tiene l’ugello all’interno delle aree già stampate durante lo spostamento. In tal modo le corse di spostamento sono leggermente più lunghe, ma si riduce l’esigenza di effettuare retrazioni. Se questa funzione viene disabilitata, il materiale viene retratto e l’ugello si sposta in linea retta al punto successivo. È anche possibile evitare il combing sopra le aree del rivestimento esterno superiore/inferiore effettuando il combing solo nel riempimento. Si noti che l’opzione ‘Nel riempimento' si comporta esattamente come l’opzione ‘Non nel rivestimento' delle precedenti versioni Cura." #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2735,6 +2798,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Non nel rivestimento" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "Nel riempimento" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3115,11 +3183,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Concentriche" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D concentrica" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3180,6 +3243,56 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Indica la distanza tra le linee della struttura di supporto stampata. Questa impostazione viene calcolata mediante la densità del supporto." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "Distanza tra le linee del supporto dello strato iniziale" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "Indica la distanza tra le linee della struttura di supporto dello strato iniziale stampato. Questa impostazione viene calcolata mediante la densità del supporto." + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "Direzione delle linee di riempimento supporto" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "Indica l’orientamento della configurazione del riempimento per i supporti. La configurazione del riempimento del supporto viene ruotata sul piano orizzontale." + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "Abilitazione brim del supporto" + +#: 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 "Genera un brim entro le zone di riempimento del supporto del primo strato. Questo brim viene stampato al di sotto del supporto, non intorno ad esso. L’abilitazione di questa impostazione aumenta l’adesione del supporto al piano di stampa." + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "Larghezza del brim del supporto" + +#: 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 "Corrisponde alla larghezza del brim da stampare al di sotto del supporto. Un brim più largo migliora l’adesione al piano di stampa, ma utilizza una maggiore quantità di materiale." + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "Numero di linee del brim del supporto" + +#: 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 "Corrisponde al numero di linee utilizzate per il brim del supporto. Più linee brim migliorano l’adesione al piano di stampa, ma utilizzano una maggiore quantità di materiale." + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3470,11 +3583,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Concentriche" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D concentrica" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3510,11 +3618,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Concentriche" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D concentrica" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3550,16 +3653,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Concentriche" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D concentrica" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Zig Zag" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "Override velocità della ventola" + +#: 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 abilitata, la velocità della ventola di raffreddamento stampa viene modificata per le zone del rivestimento esterno subito sopra il supporto." + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "Velocità della ventola del rivestimento esterno supportato" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "Percentuale della velocità della ventola da usare quando si stampano le zone del rivestimento esterno subito sopra il supporto. L’uso di una velocità ventola elevata può facilitare la rimozione del supporto." + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3742,6 +3860,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "Corrisponde al numero di linee utilizzate per un brim. Più linee brim migliorano l’adesione al piano di stampa, ma con riduzione dell'area di stampa." +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "Brim in sostituzione del supporto" + +#: 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 "Abilita la stampa del brim intorno al modello anche se quello spazio dovrebbe essere occupato dal supporto. Sostituisce alcune zone del primo strato del supporto con zone del brim." + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -3884,8 +4012,8 @@ msgstr "Indica la larghezza delle linee dello strato di base del raft. Le linee #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Spaziatura delle linee del raft" +msgid "Raft Base Line Spacing" +msgstr "Spaziatura delle linee dello strato di base del raft" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4102,16 +4230,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Il volume minimo per ciascuno strato della torre di innesco per scaricare materiale a sufficienza." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Spessore torre di innesco" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "Lo spessore della torre di innesco cava. Uno spessore superiore alla metà del volume minimo della torre di innesco genera una torre di innesco densa." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4152,26 +4270,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Dopo la stampa della torre di innesco con un ugello, pulisce il materiale fuoriuscito dall’altro ugello sulla torre di innesco." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Ugello pulitura dopo commutazione" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Dopo la commutazione dell’estrusore, pulire il materiale fuoriuscito dall’ugello sul primo oggetto stampato. Questo effettua un movimento di pulitura lento in un punto in cui il materiale fuoriuscito causa il minor danno alla qualità della superficie della stampa." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Volume di scarico torre di innesco" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Quantità di filamento da scaricare durante la pulizia della torre di innesco. Lo scarico è utile per compensare il filamento perso per colatura durante l'inattività dell'ugello." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4590,7 +4688,7 @@ msgstr "Larghezza linea rivestimento superficie superiore" #: fdmprinter.def.json msgctxt "roofing_line_width description" msgid "Width of a single line of the areas at the top of the print." -msgstr "Larghezza di un singola linea delle aree nella parte superiore della stampa" +msgstr "Larghezza di un singola linea delle aree nella parte superiore della stampa." #: fdmprinter.def.json msgctxt "roofing_pattern label" @@ -4657,6 +4755,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Collegamento dei dati di flusso del materiale (in mm3 al secondo) alla temperatura (in °C)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "Circonferenza minima dei poligoni" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "I poligoni in strati sezionati con una circonferenza inferiore a questo valore verranno scartati. I valori inferiori generano una maglia con risoluzione superiore al costo del tempo di sezionamento. È dedicata in particolare alle stampanti SLA ad alta risoluzione e a modelli 3D molto piccoli, ricchi di dettagli." + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5314,6 +5422,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Soglia per l’utilizzo o meno di uno strato di dimensioni minori. Questo numero è confrontato al valore dell’inclinazione più ripida di uno strato." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "Angolo parete di sbalzo" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "Le pareti che sbalzano oltre questo angolo verranno stampate utilizzando le impostazioni parete di sbalzo. Quando il valore è 90, nessuna parete sarà trattata come sbalzo." + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "Velocità parete di sbalzo" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "Le pareti di sbalzo verranno stampate a questa percentuale della loro normale velocità di stampa." + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5344,16 +5472,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Se una zona di rivestimento esterno è supportata per meno di questa percentuale della sua area, effettuare la stampa utilizzando le impostazioni ponte. In caso contrario viene stampata utilizzando le normali impostazioni rivestimento esterno." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Massimo sbalzo parete ponte" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "La larghezza massima ammessa per la zona di aria al di sotto di una linea perimetrale prima di stampare la parete utilizzando le impostazioni ponte. Espressa come percentuale della larghezza della linea perimetrale. Quando la distanza è superiore a questo valore, la linea perimetrale viene stampata utilizzando le normali impostazioni. Più è basso il valore, più è probabile che le linee perimetrali a sbalzo siano stampate utilizzando le impostazioni ponte." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5574,6 +5692,74 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Matrice di rotazione da applicare al modello quando caricato dal file." +#~ 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 happend midway over infill this feature can reduce the top surface quality." +#~ msgstr "Collega i percorsi del rivestimento esterno superiore/inferiore quando corrono uno accanto all’altro. Per le configurazioni concentriche, l’abilitazione di questa impostazione riduce notevolmente il tempo di spostamento, tuttavia poiché i collegamenti possono aver luogo a metà del riempimento, con questa funzione la qualità della superficie superiore potrebbe risultare inferiore." + +#~ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +#~ msgstr "Configurazione del materiale di riempimento della stampa. Il riempimento a linea e a zig zag cambia direzione su strati alternati, riducendo il costo del materiale. Le configurazioni a griglia, a triangolo, tri-esagonali, cubiche, ottagonali, a quarto di cubo, incrociate e concentriche sono stampate completamente su ogni strato. Le configurazioni cubiche, a quarto di cubo e ottagonali variano per ciascuno strato per garantire una più uniforme distribuzione della forza in ogni direzione." + +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D concentrica" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "La funzione Combing tiene l’ugello all’interno delle aree già stampate durante lo spostamento. In tal modo le corse di spostamento sono leggermente più lunghe ma si riduce l’esigenza di effettuare retrazioni. Se questa funzione viene disabilitata, il materiale viene retratto e l’ugello si sposta in linea retta al punto successivo. È anche possibile evitare il combing sopra le aree del rivestimento esterno superiore/inferiore effettuando il combing solo nel riempimento." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D concentrica" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D concentrica" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D concentrica" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D concentrica" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Spaziatura delle linee del raft" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Spessore torre di innesco" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "Lo spessore della torre di innesco cava. Uno spessore superiore alla metà del volume minimo della torre di innesco genera una torre di innesco densa." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Ugello pulitura dopo commutazione" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Dopo la commutazione dell’estrusore, pulire il materiale fuoriuscito dall’ugello sul primo oggetto stampato. Questo effettua un movimento di pulitura lento in un punto in cui il materiale fuoriuscito causa il minor danno alla qualità della superficie della stampa." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Volume di scarico torre di innesco" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Quantità di filamento da scaricare durante la pulizia della torre di innesco. Lo scarico è utile per compensare il filamento perso per colatura durante l'inattività dell'ugello." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Massimo sbalzo parete ponte" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "La larghezza massima ammessa per la zona di aria al di sotto di una linea perimetrale prima di stampare la parete utilizzando le impostazioni ponte. Espressa come percentuale della larghezza della linea perimetrale. Quando la distanza è superiore a questo valore, la linea perimetrale viene stampata utilizzando le normali impostazioni. Più è basso il valore, più è probabile che le linee perimetrali a sbalzo siano stampate utilizzando le impostazioni ponte." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Ottimizza l'ordine in cui vengono stampate le pareti in modo da ridurre le retrazioni e la distanza percorsa. L'abilitazione di questa funzione porta vantaggi per la maggior parte dei pezzi, ma alcuni potrebbero richiedere un maggior tempo di esecuzione, per cui si consiglia di confrontare i tempi di stampa stimati con e senza ottimizzazione." diff --git a/resources/i18n/ja_JP/cura.po b/resources/i18n/ja_JP/cura.po index 6995099db1..13916ef1e2 100644 --- a/resources/i18n/ja_JP/cura.po +++ b/resources/i18n/ja_JP/cura.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" +"PO-Revision-Date: 2018-11-06 14:58+0100\n" "Last-Translator: Bothof \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 2.0.4\n" +"X-Generator: Poedit 2.0.6\n" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:22 msgctxt "@action" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "G-codeファイル" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "GCodeWriter は非テキストモードはサポートしていません。" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "エクスポートする前にG-codeの準備をしてください。" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -53,106 +64,58 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

モデルのサイズまたは材料の設定によっては、適切に印刷しない3Dモデルがあります。:

\n

{model_names}

\n

可能な限り最高の品質および信頼性を得る方法をご覧ください。

\n

印字品質ガイドを見る

" +msgstr "" +"

モデルのサイズまたは材料の設定によっては、適切に印刷しない3Dモデルがあります。:

\n" +"

{model_names}

\n" +"

可能な限り最高の品質および信頼性を得る方法をご覧ください。

\n" +"

印字品質ガイドを見る

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Boxでプリントする" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Boxでプリント" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Doodle3D Connectに接続する" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "キャンセル" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Doodle3D Connectにデータを送信" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Doodle3D Connectにデータを送れませんでした。他のジョブはまだアクティブですか?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Doodle3D Connectにデータを保存" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Doodle3D Connectにファイル送信完了" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Connectを開いています..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Doodle3D Connect web interfaceを開く" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Changelogの表示" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 -#, fuzzy +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "ファームウェアアップデート" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" -msgstr "アクティブ設定を平らにします。" +msgstr "アクティブ設定を平らにします" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 #, fuzzy msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "プロファイルが平らになり、アクティベートされました。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USBプリンティング" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "USBを使ってプリントする" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "USBを使ってプリントする" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "USBにて接続する" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "USBプリントを実行しています。Cura を閉じるとこのプリントも停止します。実行しますか?" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -175,7 +138,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "圧縮G-codeファイル" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "GCodeGzWriter はテキストモードをサポートしていません。" + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "Ultimakerフォーマットパッケージ" @@ -197,7 +165,7 @@ msgid "Save to Removable Drive {0}" msgstr "リムーバブルドライブ{0}に保存" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "書き出すために利用可能な形式のファイルがありません!" @@ -236,7 +204,7 @@ msgstr "リムーバブルドライブ{0}に保存することができません #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "エラー" @@ -265,8 +233,8 @@ msgstr "リムーバブルデバイス{0}を取り出す" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "警告" @@ -280,7 +248,7 @@ msgstr "{0}取り出し完了。デバイスを安全に取り外せます。" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:161 msgctxt "@info:title" msgid "Safely Remove Hardware" -msgstr "ハードウェアを安全に取り外します。" +msgstr "ハードウェアを安全に取り外します" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 #, python-brace-format @@ -293,259 +261,269 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "リムーバブルドライブ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "ネットワーク上のプリント" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "ネットワークのプリント" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." -msgstr "ネットワーク上で接続" +msgstr "ネットワーク上で接続。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "ネットワーク上で接続。プリンタへのリクエストを承認してください。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "ネットワーク上で接続。プリントを操作するアクセス権がありません。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "プリンターへのアクセスが申請されました。プリンタへのリクエストを承認してください。" +msgstr "プリンターへのアクセスが申請されました。プリンタへのリクエストを承認してください" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "認証ステータス" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "認証ステータス" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "再試行" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "アクセスリクエストを再送信" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" -msgstr "プリンターへのアクセスが承認されました。" +msgstr "プリンターへのアクセスが承認されました" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "このプリンターへのアクセスが許可されていないため、プリントジョブの送信ができませんでした。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "アクセスのリクエスト" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "アクセスのリクエスト送信" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "新しいプリントジョブを開始できません。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." msgstr "Ultimakerの設定に問題があるため、印刷が開始できません。問題を解消してからやり直してください。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "ミスマッチの構成" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "選択された構成にてプリントを開始してもいいですか。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "プリンターの設定、キャリブレーションとCuraの構成にミスマッチがあります。プリンターに設置されたプリントコア及びフィラメントを元にCuraをスライスすることで最良の印刷結果を出すことができます。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "新しいデータの送信 (temporarily) をブロックします、前のプリントジョブが送信中です。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "プリンターにプリントデータを送信中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "プリントデータを送信中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "キャンセル" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "プリントコアがスロット{slot_number}に入っていません。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "材料がスロット{slot_number}に入っていません。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, python-brace-format msgctxt "@label" msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" msgstr "エクストルーダー {extruder_id} に対して異なるプリントコア(Cura: {cura_printcore_name}, プリンター: {remote_printcore_name})が選択されています。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "異なるフィラメントが入っています(Cura:{0}, プリンター{1})エクストルーダー{2}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "プリンターと同期する" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Curaで設定しているプリンタ構成を使用されますか?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "プリンターのプリントコア及びフィラメントが現在のプロジェクトと異なります。最善な印刷結果のために、プリンタに装着しているプリントコア、フィラメントに合わせてスライスして頂くことをお勧めします。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" msgstr "ネットワーク上で接続" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "プリントジョブは正常にプリンターに送信されました。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "データを送信しました" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "モニター表示" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "プリンター’{printer_name}’が’{job_name}’のプリントを終了しました。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "プリントジョブ '{job_name}' は完了しました。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "プリント終了" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "ネットワーク上にて接続" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "モニター" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "必要なアップデートの情報にアクセスできません。" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "{machine_name} で利用可能な新しい機能があります。プリンターのファームウェアをアップデートしてください。" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" -msgstr "新しい利用可能な%sファームウェアのアップデートがあります。" +msgstr "新しい利用可能な%sファームウェアのアップデートがあります" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "アップデートの仕方" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "必要なアップデートの情報にアクセスできません。" - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "レイヤービュー" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" -msgstr "Curaはワイヤープリンティング設定中には正確にレイヤーを表示しません。" +msgstr "Curaはワイヤープリンティング設定中には正確にレイヤーを表示しません" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "シミュレーションビュー" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "G-codeを修正" @@ -559,32 +537,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "サポートが印刷されないボリュームを作成します。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Curaは、匿名化した利用統計を収集します。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "データを収集中" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "詳細" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Curaが送信するデータについて詳しくご覧ください。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "許可" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Curaが匿名化した利用統計を送信することを許可し、Curaの将来の改善を優先的に行うことに貢献します。プレファレンスと設定の一部、Curaのバージョン、スライスしているモデルのハッシュが送信されます。" @@ -594,18 +572,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04 プロファイル" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Blenderファイル" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "\"{}\"品質を使用したエクスポートができませんでした!\n\"{}\"になりました。" - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -631,49 +597,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF画像" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "選ばれたプリンターまたは選ばれたプリント構成が異なるため進行中の材料にてスライスを完了できません。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" -msgstr "スライスできません。" +msgstr "スライスできません" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "現在の設定でスライスが完了できません。以下の設定にエラーがあります: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "モデル別の設定があるためスライスできません。1つまたは複数のモデルで以下の設定にエラーが発生しました:{error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "プライムタワーまたはプライム位置が無効なためスライスできません。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "無効な Extruder %s に関連付けられている造形物があるため、スライスできません。" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "モデルのデータがビルトボリュームに入っていないためスライスできるものがありません。スケールやローテーションにて合うように設定してください。" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" -msgstr "レイヤーを処理しています。" +msgstr "レイヤーを処理しています" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "インフォメーション" @@ -689,29 +662,40 @@ msgid "Configure Per Model Settings" msgstr "各モデル構成設定" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "推奨" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "カスタム" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF ファイル" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "ノズル" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "プロジェクトファイル {0} に不明なマシンタイプ {1} があります。マシンをインポートできません。代わりにモデルをインポートします。" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "プロジェクトファイルを開く" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -722,18 +706,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Gファイル" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-codeを解析" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "G-codeの詳細" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "データファイルを送信する前に、プリンターとプリンターの構成設定にそのG-codeが適応しているか確認してください。G-codeの表示が適切でない場合があります。" @@ -744,15 +728,20 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Curaプロファイル" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MFファイル" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" -msgstr "Curaが3MF fileを算出します。" +msgstr "Curaが3MF fileを算出します" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "3Mf ファイルの書き込みエラー。" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 @@ -760,11 +749,6 @@ msgctxt "@action" msgid "Select upgrades" msgstr "アップグレードを選択する" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "ファームウェアをアップグレード" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -775,79 +759,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "ビルドプレートを調整する" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "アウターウォール" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "インナーウォール" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "スキン" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "インフィル" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "サポートイルフィル" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "サポートインターフェイス" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "サポート" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "スカート" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "移動" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "退却" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "他" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "不明" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "スライス前ファイル {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "ログインに失敗しました" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" -msgstr "すでに存在するファイルです。" +msgstr "すでに存在するファイルです" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -859,23 +843,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "上書きできません" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "選択されたフィラメントはプリンターとそのプリント構成に適応しておりません。" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "不適合フィラメント" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "現在利用可能なエクストルーダー [%s] に合わせて設定が変更されました。" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "設定が更新されました" @@ -890,13 +874,13 @@ msgstr "{0}にプロファイルを書き出すのに失敗 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to export profile to {0}: Writer plugin reported failure." -msgstr " {0}にプロファイルを書き出すことに失敗しました。:ライタープラグイン失敗の報告" +msgstr "{0}にプロファイルを書き出すことに失敗しました。:ライタープラグイン失敗の報告。" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:143 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Exported profile to {0}" -msgstr "{0}にプロファイルを書き出しました。" +msgstr "{0}にプロファイルを書き出しました" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144 msgctxt "@info:title" @@ -904,67 +888,77 @@ msgid "Export succeeded" msgstr "書き出し完了" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" -msgstr "{0}: {1}からプロファイルを取り込むことに失敗しました。" +msgstr "{0}: {1}からプロファイルを取り込むことに失敗しました" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:190 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" msgstr "ファイル{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 "{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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." -msgstr "このプロファイル{0}には、正しくないデータが含まれていて、インポートできません。" +msgstr "このプロファイル{0}には、正しくないデータが含まれているため、インポートできません。" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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 "プロファイル{0}の中で定義されているマシン({1})は、現在お使いのマシン({2})と一致しませんので、インポートできませんでした。" +msgstr "プロファイル{0}の中で定義されているマシン({1})は、現在お使いのマシン({2})と一致しないため、インポートできませんでした。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "{0}からプロファイルの取り込に失敗しました。" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "プロファイル {0}の取り込み完了" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "ファイル{0}には、正しいプロファイルが含まれていません。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "プロファイル{0}は不特定なファイルまたは破損があります。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "カスタムプロファイル" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "プロファイルはクオリティータイプが不足しています。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "進行中のプリント構成にあったクオリティータイプ{0}が見つかりませんでした。" -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -991,42 +985,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "全てのファイル" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "カスタムフィラメント" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "カスタム" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "プリントシークエンス設定値により、ガントリーと造形物の衝突を避けるため印刷データの高さを低くしました。" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "造形サイズ" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "ユーザーデータディレクトリからアーカイブを作成できません: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "バックアップ" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "適切なデータまたはメタデータがないのにCuraバックアップをリストアしようとしました。" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "現行バージョンと一致しないCuraバックアップをリストアしようとしました。" @@ -1034,38 +1028,38 @@ msgstr "現行バージョンと一致しないCuraバックアップをリス #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 msgctxt "@info:status" msgid "Multiplying and placing objects" -msgstr "造形データを増やす、配置する。" +msgstr "造形データを増やす、配置する" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "造形データを配置" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "全ての造形物の造形サイズに対し、適切な位置が確認できません" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "造形物のために新しい位置を探索中" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "位置確認" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" -msgstr "位置を確保できません。" +msgstr "位置を確保できません" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:87 msgctxt "@title:window" @@ -1080,7 +1074,12 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "

申し訳ありません。Ultimaker Cura で何らかの不具合が生じています。

\n

開始時に回復不能のエラーが発生しました。不適切なファイル設定が原因の可能性があります。バックアップを実行してからリセットしてください。

\n

バックアップは、設定フォルダに保存されます。

\n

問題解決のために、このクラッシュ報告をお送りください。

\n " +msgstr "" +"

申し訳ありません。Ultimaker Cura で何らかの不具合が生じています。

\n" +"

開始時に回復不能のエラーが発生しました。不適切なファイル設定が原因の可能性があります。バックアップを実行してからリセットしてください。

\n" +"

バックアップは、設定フォルダに保存されます。

\n" +"

問題解決のために、このクラッシュ報告をお送りください。

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:102 msgctxt "@action:button" @@ -1113,7 +1112,10 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

Please use the \"Send report\" button to post a bug report automatically to our servers

\n" " " -msgstr "

致命的なエラーが発生しました。問題解決のためこのクラッシュレポートを送信してください

\n

「レポート送信」ボタンを使用してバグレポートが自動的に当社サーバーに送られるようにしてください

\n " +msgstr "" +"

致命的なエラーが発生しました。問題解決のためこのクラッシュレポートを送信してください

\n" +"

「レポート送信」ボタンを使用してバグレポートが自動的に当社サーバーに送られるようにしてください

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1193,223 +1195,233 @@ msgctxt "@action:button" msgid "Send report" msgstr "レポート送信" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "プリンターを読み込み中…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "シーンをセットアップ中…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "インターフェイスを読み込み中…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f mm" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "一度に一つのG-codeしか読み取れません。{0}の取り込みをスキップしました。" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "G-codeを読み込み中は他のファイルを開くことができません。{0}の取り込みをスキップしました。" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "選択したモデルは読み込むのに小さすぎます。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "プリンターの設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "プリンター" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "プリンターの設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X(幅)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (奥行き)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (高さ)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "ビルドプレート形" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" -msgstr "センターを出します。" +msgstr "センターを出します" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "ヒーテッドドベッド" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "G-codeフレーバー" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "プリントヘッド設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X分" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "プリントヘッド左側からノズルの中心までの距離。印刷時に前の造形物とプリントヘッドとの衝突を避けるために “1プリントづつ”印刷を使用。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y分" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "プリントヘッド前部からノズルの中心までの距離。印刷時に前の造形物とプリントヘッドとの衝突を避けるために “1プリントづつ”印刷を使用。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "最大X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "プリントヘッド右側からノズルの中心までの距離。印刷時に前の造形物とプリントヘッドとの衝突を避けるために “1プリントづつ”印刷を使用。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "最大Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "プリントヘッド後部からノズルの中心までの距離。印刷時に前の造形物とプリントヘッドとの衝突を避けるために “1プリントづつ”印刷を使用。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "ガントリーの高さ" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "(X 軸及びY軸)ノズルの先端とガントリーシステムの高さに相違があります。印刷時に前の造形物とプリントヘッドとの衝突を避けるために “1プリントづつ”印刷を使用。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "エクストルーダーの数" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "G-Codeの開始" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "G-codeコマンドが最初に実行されるようにします。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "G-codeの終了" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "G-codeコマンドが最後に実行されるようにします。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "ノズル設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "ノズルサイズ" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "適合する材料直径" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "プリンターに対応したフィラメントの直径。正確な直径はフィラメント及びまたはプロファイルに変動します。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "ノズルオフセットX" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "ノズルオフセットY" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "冷却ファンの番号" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "エクストルーダーがG-Codeを開始する" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "エクストルーダーがG-Codeを終了する" @@ -1429,12 +1441,20 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Curaパッケージデータベースに接続できません。接続を確認してください。" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "プラグイン" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "マテリアル" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1450,8 +1470,14 @@ msgctxt "@label" msgid "Author" msgstr "著者" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "ダウンロード" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "不明" @@ -1484,17 +1510,57 @@ msgctxt "@action:button" msgid "Back" msgstr "戻る" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "アンインストール確認" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "使用中の材料またはプロファイルをアンインストールしようとしています。確定すると以下の材料/プロファイルをデフォルトにリセットします。" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "材料" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "プロファイル" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "確認" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "パッケージへの変更を有効にするためにCuraを再起動する必要があります。" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Curaを終了する" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "地域貢献" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "コミュニティプラグイン" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "汎用材料" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "インストールした" @@ -1525,7 +1591,10 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "このプラグインにはライセンスが含まれています。\nこのプラグインをインストールするにはこのライセンスに同意する必要があります。\n下の利用規約に同意しますか?" +msgstr "" +"このプラグインにはライセンスが含まれています。\n" +"このプラグインをインストールするにはこのライセンスに同意する必要があります。\n" +"下の利用規約に同意しますか?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1537,12 +1606,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "拒否する" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "特長" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "互換性" @@ -1550,12 +1619,17 @@ msgstr "互換性" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLoadingPage.qml:16 msgctxt "@info" msgid "Fetching packages..." -msgstr "パッケージ取得中" +msgstr "パッケージ取得中…" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "連絡" +msgid "Website" +msgstr "ウェブサイト" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "電子メール" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1568,48 +1642,88 @@ msgid "Changelog" msgstr "Changelogの表示" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "閉める" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "ファームウェアアップデート" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "ファームウェアとは直接お持ちの3Dプリンターを動かすソフトウェアです。このファームウェアはステップモーターを操作し、温度を管理し、プリンターとして成すべき点を補います。" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "配達時のファームウェアで動かすことはできますが、新しいバージョンの方がより改善され、便利なフィーチャーがついてきます。" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "自動でファームウェアをアップグレード" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "カスタムファームウェアをアップロードする" + +#: /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 "プリンターと接続されていないため、ファームウェアをアップデートできません。" + +#: /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 "プリンターとの接続はファームウェアのアップデートをサポートしていないため、ファームウェアをアップデートできません。" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "カスタムファームウェアを選択する" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "ファームウェアアップデート" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." -msgstr "ファームウェアアップデート中" +msgstr "ファームウェアアップデート中。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." -msgstr "ファームウェアアップデート完了" +msgstr "ファームウェアアップデート完了。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "不特定なエラーの発生によりファームウェアアップデート失敗しました。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "コミュニケーションエラーによりファームウェアアップデート失敗しました。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "インプット/アウトプットエラーによりファームウェアアップデート失敗しました。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "ファームウェアが見つからず、ファームウェアアップデート失敗しました。" @@ -1619,22 +1733,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "ユーザー用使用許諾契約" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "既存の接続" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "このプリンター/グループはすでにCuraに追加されています。別のプリンター/グループを選択しえください。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "ネットワーク上で繋がったプリンターに接続" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" @@ -1642,333 +1756,395 @@ msgid "" "Select your printer from the list below:" msgstr "ネットワーク接続にて直接プリントするためには、必ずケーブルまたはWifiネットワークにて繋がっていることを確認してください。Curaをプリンターに接続していない場合でも、USBメモリを使って直接プリンターにg-codeファイルをトランスファーできます。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "追加" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "編集" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "取り除く" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "更新" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" -msgstr "お持ちのプリンターがリストにない場合、ネットワーク・プリンティング・トラブルシューティング・ガイドを読んでください。" +msgstr "お持ちのプリンターがリストにない場合、ネットワーク・プリンティング・トラブルシューティング・ガイドを読んでください" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "タイプ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "ファームウェアバージョン" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "アドレス" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Ultimaker3のグループをホストするために設定されていません。" +msgid "This printer is not set up to host a group of printers." +msgstr "このプリンターは、プリンターのグループをホストするために設定されていません。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "このプリンターはUltimaker3 %1グループのホストプリンターです。" +msgid "This printer is the host for a group of %1 printers." +msgstr "このプリンターは %1 プリンターのループのホストプリンターです。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "このアドレスのプリンターは応答していません。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "接続" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "プリンターアドレス" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "ネットワーク内のプリンターのIPアドレスまたはホストネームを入力してください。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "ネットワーク上のプリント" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "プリンターの選択" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "プリント" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1は、繋がっているUltimaker3プリンターのグループをホストするために設定されていません。" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "ネットワーク上のプリント" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "プリンターの追加/削除" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" +msgstr "プリンターの選択" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "デフォルトのウェブブラウザで印刷ジョブページを開きます。" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" +msgstr "利用できません" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "プリントジョブを見る" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" +msgstr "到達不能" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "印刷の準備をする" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "プリント中" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" msgstr "利用可能" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "プリンターへの接続が切断されました。" +msgid "Aborted" +msgstr "中止しました" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "利用不可" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "不明" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "無効" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "予約済み" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "終了" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "プリントの準備をする" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" -msgstr "アクションが必要です。" +msgid "Preparing" +msgstr "準備中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" -msgstr "一時停止" +msgid "Pausing" +msgstr "一時停止中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "再開" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" -msgstr "プリント中止" +msgid "Action required" +msgstr "アクションが必要です" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "プリントデータを確認できない" +msgid "Waiting for: Unavailable printer" +msgstr "待ち時間: 利用できないプリンター" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "この層で終了します:" +msgid "Waiting for: First available" +msgstr "待ち時間: 次の空き" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "ビルドプレートをクリアにする" +msgid "Waiting for: " +msgstr "待ち時間: " -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "プリント構成の変更を待っている" +msgid "Configuration change" +msgstr "構成の変更" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "プリントジョブ" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "プリント中" +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "割り当てられたプリンター %1 には以下の構成変更が必要です。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "プリンター %1 が割り当てられましたが、ジョブには不明な材料構成があります。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 +msgctxt "@label" +msgid "Change material %1 from %2 to %3." +msgstr "材料 %1 を %2 から %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 "%3 を 材料 %1 にロードします(これは上書きできません)。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "プリントコア %1 を %2 から %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 "ビルドプレートを %1 に変更します(これは上書きできません)。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "上書き" + +#: /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 "互換性のない構成で印刷ジョブを開始すると3Dプリンターを損傷することがあります。構成と印刷 %1 を上書きしますか?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:435 +msgctxt "@window:title" +msgid "Override configuration configuration and start print" +msgstr "構成を上書きしてから印刷を開始" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "ガラス" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "アルミニウム" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "キュー管理" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "順番を待つ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "複数のプリンター" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "プリント中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "複数のプリンターをみる" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "プリンター管理" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "最上位に移動" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "削除" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "再開" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "一時停止" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "中止" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "%1 をキューの最上位に移動しますか?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "印刷ジョブを最上位に移動する" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "%1 を削除しますか?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "印刷ジョブの削除" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "%1 を中止してよろしいですか?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "プリント中止" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "プリンターにつなぐ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "プリンターの構成をCuraに取り入れる。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "プリント構成をアクティベートする" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "プリンターの構成をCuraに取り入れる" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "カラースキーム" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "フィラメントの色" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "ラインタイプ" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "送り速度" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "レイヤーの厚さ" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "コンパティビリティモード" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "移動を表示する" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "ヘルプを表示する" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "シェルを表示する" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "インフィルを表示する" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "トップのレイヤーを表示する" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "トップの5レイヤーの詳細を表示する" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "トップ/ボトム" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "インナーウォール" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "最小" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "最大" @@ -1983,17 +2159,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "スクリプトの処理後" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "スクリプトを加える" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "設定" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "処理したスクリプトを変更する" @@ -2026,7 +2202,7 @@ msgstr "画像を変換する…" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:33 msgctxt "@info:tooltip" msgid "The maximum distance of each pixel from \"Base.\"" -msgstr "“ベース”から各ピクセルへの最大距離" +msgstr "“ベース”から各ピクセルへの最大距離。" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:38 msgctxt "@action:label" @@ -2036,7 +2212,7 @@ msgstr "高さ(mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:56 msgctxt "@info:tooltip" msgid "The base height from the build plate in millimeters." -msgstr "ミリメートルでビルドプレートからベースの高さ" +msgstr "ミリメートルでビルドプレートからベースの高さ。" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:61 msgctxt "@action:label" @@ -2046,7 +2222,7 @@ msgstr "ベース(mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:79 msgctxt "@info:tooltip" msgid "The width in millimeters on the build plate." -msgstr "ビルドプレート上の幅ミリメートル" +msgstr "ビルドプレート上の幅ミリメートル。" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:84 msgctxt "@action:label" @@ -2081,60 +2257,60 @@ msgstr "暗いほうを高く" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:149 msgctxt "@info:tooltip" msgid "The amount of smoothing to apply to the image." -msgstr "画像に適応したスムージング量" +msgstr "画像に適応したスムージング量。" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:154 msgctxt "@action:label" msgid "Smoothing" msgstr "スムージング" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "メッシュタイプ" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "標準モデル" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "サポートとしてプリント" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "他のモデルとのオーバーラップは未サポート" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "他のモデルとのオーバーラップの設定を変更" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "他のモデルのインフィルの設定を変更" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "設定を選択する" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "このモデルをカスタマイズする設定を選択する" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "フィルター…" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "すべて表示する" @@ -2156,13 +2332,13 @@ msgid "Create new" msgstr "新しいものを作成する" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "サマリーCuraプロジェクト" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "プリンターの設定" @@ -2179,18 +2355,19 @@ msgid "Update" msgstr "アップデート" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "タイプ" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "プリンターグループ" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "プロファイル設定" @@ -2202,20 +2379,21 @@ msgstr "このプロファイルの問題をどのように解決すればいい #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "ネーム" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "プロファイル内にない" # Can’t edit the Japanese text #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2246,7 +2424,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "このフィラメントの問題をどのように解決すればいいか?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "視野設定" @@ -2257,13 +2435,13 @@ msgid "Mode" msgstr "モード" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "ビジブル設定:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%2のうち%1" @@ -2302,12 +2480,12 @@ msgstr "ビルドプレートのレベリング" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:38 msgctxt "@label" msgid "To make sure your prints will come out great, you can now adjust your buildplate. When you click 'Move to Next Position' the nozzle will move to the different positions that can be adjusted." -msgstr "プリントの成功率を上げるために、ビルドプレートを今調整できます。’次のポジションに移動’をクリックすると" +msgstr "プリントの成功率を上げるために、ビルドプレートを今調整できます。’次のポジションに移動’をクリックすると。" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:47 msgctxt "@label" msgid "For every position; insert a piece of paper under the nozzle and adjust the print build plate height. The print build plate height is right when the paper is slightly gripped by the tip of the nozzle." -msgstr "すべてのポジションに;" +msgstr "すべてのポジションに" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:62 msgctxt "@action:button" @@ -2319,36 +2497,6 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "次のポジションに移動" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "ファームウェアをアップグレード" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "ファームウェアとは直接お持ちの3Dプリンターを動かすソフトウェアです。このファームウェアはステップモーターを操作し、温度を管理し、プリンターとして成すべき点を補います。" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "配達時のファームウェアで動かすことはできますが、新しいバージョンの方がより改善され、便利なフィーチャーがついてきます。" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "自動でファームウェアをアップグレード" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "カスタムファームウェアをアップロードする" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "カスタムファームウェアを選択する。" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" @@ -2367,7 +2515,7 @@ msgstr "プリンターチェック" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:39 msgctxt "@label" msgid "It's a good idea to do a few sanity checks on your Ultimaker. You can skip this step if you know your machine is functional" -msgstr "お持ちのUltimkaerにてサニティーチェックを数回行うことは推奨します。もしプリンター機能に問題ない場合はこの項目をスキップしてください。" +msgstr "お持ちのUltimkaerにてサニティーチェックを数回行うことは推奨します。もしプリンター機能に問題ない場合はこの項目をスキップしてください" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:53 msgctxt "@action:button" @@ -2377,7 +2525,7 @@ msgstr "プリンターチェックを開始する" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:80 msgctxt "@label" msgid "Connection: " -msgstr "コネクション:" +msgstr "コネクション: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:89 msgctxt "@info:status" @@ -2387,12 +2535,12 @@ msgstr "接続済" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:89 msgctxt "@info:status" msgid "Not connected" -msgstr "プリンターにつながっていません。" +msgstr "プリンターにつながっていません" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:99 msgctxt "@label" msgid "Min endstop X: " -msgstr "エンドストップ X:" +msgstr "エンドストップ X: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:109 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:130 @@ -2408,22 +2556,22 @@ msgstr "作品" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:234 msgctxt "@info:status" msgid "Not checked" -msgstr "チェックされていません。" +msgstr "チェックされていません" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:120 msgctxt "@label" msgid "Min endstop Y: " -msgstr "エンドストップ Y:" +msgstr "エンドストップ Y: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:141 msgctxt "@label" msgid "Min endstop Z: " -msgstr "エンドストップ Z:" +msgstr "エンドストップ Z: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:163 msgctxt "@label" msgid "Nozzle temperature check: " -msgstr "ノズル温度チェック:" +msgstr "ノズル温度チェック: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:187 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:248 @@ -2455,29 +2603,29 @@ msgstr "すべてに異常はありません。チェックアップを終了し #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:119 msgctxt "@label:MonitorStatus" msgid "Not connected to a printer" -msgstr "プリンターにつながっていません。" +msgstr "プリンターにつながっていません" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:123 msgctxt "@label:MonitorStatus" msgid "Printer does not accept commands" -msgstr "今プリンタはコマンドを処理できません。" +msgstr "今プリンタはコマンドを処理できません" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:133 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:197 msgctxt "@label:MonitorStatus" msgid "In maintenance. Please check the printer" -msgstr "メンテナンス。プリンターをチェックしてください。" +msgstr "メンテナンス。プリンターをチェックしてください" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:144 msgctxt "@label:MonitorStatus" msgid "Lost connection with the printer" -msgstr "プリンターへの接続が切断されました。" +msgstr "プリンターへの接続が切断されました" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:146 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:187 msgctxt "@label:MonitorStatus" msgid "Printing..." -msgstr "プリント中" +msgstr "プリント中…" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:149 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:189 @@ -2489,34 +2637,18 @@ msgstr "一時停止しました" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:191 msgctxt "@label:MonitorStatus" msgid "Preparing..." -msgstr "準備中" +msgstr "準備中…" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:154 msgctxt "@label:MonitorStatus" msgid "Please remove the print" -msgstr "造形物を取り出してください。" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "一時停止" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "再開" +msgstr "造形物を取り出してください" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "プリント中止" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "プリント中止" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2550,22 +2682,20 @@ msgid "Customized" msgstr "カスタマイズ" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "毎回確認する" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" -msgstr "取り消し、再度確認しない。" +msgstr "取り消し、再度確認しない" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" -msgstr "キープし、再度確認しない。" +msgstr "キープし、再度確認しない" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:196 msgctxt "@action:button" @@ -2582,101 +2712,179 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "新しいプロファイルを作る" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "インフォメーション" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "直径変更の確認" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" msgstr "新しいフィラメントの直径は %1 mm に設定されています。これは現在のエクストルーダーに適応していません。続行しますか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "ディスプレイ名" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "ブランド" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "フィラメントタイプ" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "色" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "プロパティ" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "密度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "直径" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "フィラメントコスト" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "フィラメントの重さ" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "フィラメントの長さ" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "毎メーターコスト" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "このフィラメントは %1にリンクすプロパティーを共有する。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "フィラメントをリンクを外す" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "記述" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "接着のインフォメーション" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "プリント設定" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "アクティベート" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "作成する" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "複製" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "取り込む" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "書き出す" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "プリンター" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "モデルを取り除きました" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "%1を取り外しますか?この作業はやり直しが効きません。" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "フィラメントを取り込む" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "%1フィラメントを取り込むことができない: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "フィラメント%1の取り込みに成功しました" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "フィラメントを書き出す" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "フィラメントの書き出しに失敗しました %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "フィラメントの%1への書き出しが完了ました" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2713,289 +2921,287 @@ msgid "Unit" msgstr "ユニット" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "一般" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "インターフェイス" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "言語:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "通貨:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "テーマ:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "それらの変更を有効にするためにはアプリケーションを再起動しなけらばなりません。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "セッティングを変更すると自動にスライスします。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "自動的にスライスする" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "ビューポイント機能" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "赤でサポートができないエリアをハイライトしてください。サポートがない場合、正確にプリントができない場合があります。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "ディスプレイオーバーハング" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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 "モデルの選択時にモデルがカメラの中心に見えるようにカメラを移動する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "アイテムを選択するとカメラが中心にきます" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "Curaのデフォルトのズーム機能は変更できるべきか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." -msgstr "カメラのズーム方向を反転する" +msgstr "カメラのズーム方向を反転する。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "ズームはマウスの方向に動くべきか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "マウスの方向にズームする" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "交差を避けるためにプラットホーム上のモデルを移動するべきですか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "モデルの距離が離れているように確認する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "プラットホーム上のモデルはブルドプレートに触れるように下げるべきか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "自動的にモデルをビルドプレートに落とす" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "G-codeリーダーに注意メッセージを表示します。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "G-codeリーダーに注意メッセージ" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "レイヤーはコンパティビリティモードに強制されるべきか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "レイヤービューコンパティビリティモードを強制する。(再起動が必要)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "ファイルを開くまた保存" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "モデルがビルドボリュームに対して大きすぎる場合はスケールされるべきか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "大きなモデルをスケールする" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "ユニット値がミリメートルではなくメートルの場合、モデルが極端に小さく現れる場合があります。モデルはスケールアップされるべきですか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "極端に小さなモデルをスケールアップする" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "モデルはロード後に選択しますか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "ロード後にモデルを選択" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "プリンター名の敬称はプリントジョブの名前に自動的に加えられるべきか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "プリンターの敬称をジョブネームに加える" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "プロジェクトファイルを保存時にサマリーを表示するべきか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "プロジェクトを保存時にダイアログサマリーを表示する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "プロジェクトファイルを開く際のデフォルト機能" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " -msgstr "プロジェクトファイル開く際のデフォルト機能:" +msgstr "プロジェクトファイル開く際のデフォルト機能: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "いつもお尋ねください。" +msgid "Always ask me this" +msgstr "毎回確認する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "常にプロジェクトとして開く" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "常にモデルを取り込む" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "プロファイル内を変更し異なるプロファイルにしました、どこの変更点を保持、破棄したいのダイアログが表示されます、また何度もダイアログが表示されないようにデフォルト機能を選ぶことができます。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "プロファイルを無効にする" +msgid "Profiles" +msgstr "プロファイル" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "プロファイル交換時に設定値を変更するためのデフォルト処理: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "常に変更した設定を廃棄する" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "常に変更した設定を新しいプロファイルに送信する" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "プライバシー" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "Curaのプログラム開始時にアップデートがあるかチェックしますか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "スタート時にアップデートあるかどうかのチェック" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "プリンターの不明なデータをUltimakerにおくりますか?メモ、モデル、IPアドレス、個人的な情報は送信されたり保存されたりはしません。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" -msgstr " (不特定な) プリントインフォメーションを送信" +msgstr "(不特定な) プリントインフォメーションを送信" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "詳細" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "実験" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "マルチビルドプレート機能を使用" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "マルチビルドプレート機能を使用 (再起動が必要)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "新たにロードしたモデルをビルドプレート上に配置すべきですか? マルチビルドプレートと共に使用 (実験的)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "ロード時にオブジェクトを配置しません" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "プリンター" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "アクティベート" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3013,7 +3219,7 @@ msgid "Connection:" msgstr "コネクション:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "このプリンターはつながっていません。" @@ -3039,7 +3245,7 @@ msgid "Aborting print..." msgstr "プリントを停止します…" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "プロファイル" @@ -3054,18 +3260,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "複製" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "取り込む" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "書き出す" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3076,18 +3270,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "プロファイルを複製する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "モデルを取り除きました。" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "%1を取り外しますか?この作業はやり直しが効きません。" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3108,228 +3290,200 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "プリンター:%1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "保護されたプロファイル" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "カスタムプロファイル" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "プロファイルを現在のセッティング/" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "今の変更を破棄する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "このプロファイルはプリンターによりデフォルトを使用、従いこのプロファイルはセッティング/書き換えが以下のリストにありません。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "設定は選択したプロファイルにマッチしています。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "グローバル設定" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "マテリアル" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "作成する" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "複製" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "フィラメントを取り込む" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr " %1フィラメントを取り込むことができない: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "フィラメント%1の取り込みに成功しました。" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "フィラメントを書き出す" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "フィラメントの書き出しに失敗しました %1: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "フィラメントの%1への書き出しが完了ました。" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "プリンター" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "プリンターを追加する" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "プリンター名:" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "プリンターについて" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "無題" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "Curaについて" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "バージョン: %1" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." -msgstr "熱溶解積層型3Dプリンティングのエンドtoエンドソリューション" +msgstr "熱溶解積層型3Dプリンティングのエンドtoエンドソリューション。" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" msgstr "CuraはUltimakerB.Vのコミュニティの協力によって開発され、Curaはオープンソースで使えることを誇りに思います:" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "グラフィックユーザーインターフェイス" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "アプリケーションフレームワーク" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "G-codeの生成" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "インタープロセスコミュニケーションライブラリー" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "プログラミング用語" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "GUIフレームワーク" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "GUIフレームワークバインディング" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "C/C++ バインディングライブラリー" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "データインターフェイスフォーマット" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "サイエンスコンピューティングを操作するためのライブラリーサポート" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "ファターマスを操作するためのライブラリーサポート" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "STLファイルを操作するためのライブラリーサポート" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "平面対象物を操作するためのライブラリーサポート" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "参画メッシュを操作するためのライブラリーサポート" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "複雑なネットワークを分析するためのライブラリーサポート" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "3MFファイルを操作するためのライブラリーサポート" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "ファイルメタデータとストリーミングのためのライブラリーサポート" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "シリアルコミュニケーションライブラリー" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "ZeroConfディスカバリーライブラリー" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "ポリゴンクリッピングライブラリー" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "Python HTTPライブラリー" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "フォント" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "SVGアイコン" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "Linux 分散アプリケーションの開発" @@ -3339,67 +3493,71 @@ msgctxt "@label" msgid "Profile:" msgstr "プロファイル:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "いくらかの設定プロファイルにある値とことなる場合無効にします。\nプロファイルマネージャーをクリックして開いてください。" +msgstr "" +"いくらかの設定プロファイルにある値とことなる場合無効にします。\n" +"プロファイルマネージャーをクリックして開いてください。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "検索…" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "すべてのエクストルーダーの値をコピーする" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "すべてのエクストルーダーに対して変更された値をコピーする" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "この設定を非表示にする" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "この設定を表示しない" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "常に見えるように設定する" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." -msgstr "視野のセッティングを構成する" +msgstr "視野のセッティングを構成する…" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "すべて折りたたむ" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "すべて展開する" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "いくらかの非表示設定は通常の計算された値と異なる値を使用します。\n表示されるようにクリックしてください。" +msgstr "" +"いくらかの非表示設定は通常の計算された値と異なる値を使用します。\n" +"表示されるようにクリックしてください。" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3411,31 +3569,35 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "次によって影響を受ける" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "この設定は常に全てのエクストルーダーに共有されています。ここですべてのエクストルーダーの数値を変更できます。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " -msgstr "この値は各エクストルーダーの値から取得します。" +msgstr "この値は各エクストルーダーの値から取得します " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "この設定にプロファイルと異なった値があります。\nプロファイルの値を戻すためにクリックしてください。" +msgstr "" +"この設定にプロファイルと異なった値があります。\n" +"プロファイルの値を戻すためにクリックしてください。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "このセッティングは通常計算されます、今は絶対値に固定されています。\n計算された値に変更するためにクリックを押してください。" +msgstr "" +"このセッティングは通常計算されます、今は絶対値に固定されています。\n" +"計算された値に変更するためにクリックを押してください。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3473,7 +3635,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "カスタムG-codeコマンドを接続されているプリンターに送信します。「Enter」を押してコマンドを送信します。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "エクストルーダー" @@ -3513,20 +3675,20 @@ msgstr "プリント開始前にホットエンドを加熱します。加熱中 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:401 msgctxt "@tooltip" msgid "The colour of the material in this extruder." -msgstr "エクストルーダーのマテリアルの色" +msgstr "エクストルーダーのマテリアルの色。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:433 msgctxt "@tooltip" msgid "The material in this extruder." -msgstr "エクストルーダー入ったフィラメント" +msgstr "エクストルーダー入ったフィラメント。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:465 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." -msgstr "ノズルが入ったエクストルーダー" +msgstr "ノズルが入ったエクストルーダー。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "ビルドプレート" @@ -3539,18 +3701,33 @@ msgstr "ヒーティッドベッドの目標温度。ベッドはこの温度に #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:87 msgctxt "@tooltip" msgid "The current temperature of the heated bed." -msgstr "現在のヒーティッドベッドの温度" +msgstr "現在のヒーティッドベッドの温度。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:160 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the bed to." -msgstr "ベッドのプリヒート温度" +msgstr "ベッドのプリヒート温度。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:360 msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "プリント開始前にベッドを加熱します。加熱中もプリントの調整を行えます、またべットが加熱するまでプリント開始を待つ必要もありません。" +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "材料" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "お気に入り" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "汎用" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3566,12 +3743,12 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "&ビュー" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "カメラ位置 (&C)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "ビルドプレート (&B)" @@ -3581,15 +3758,15 @@ msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "ビジブル設定" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "すべての設定を表示" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." -msgstr "視野のセッティングを管理する" +msgstr "視野のセッティングを管理する…" # can’t enter japanese texts #: /home/ruben/Projects/Cura/resources/qml/Menus/ContextMenu.qml:27 @@ -3645,349 +3822,350 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "プリントセットアップが無効\nG-codeファイルを修正することができません。" +msgstr "" +"プリントセットアップが無効\n" +"G-codeファイルを修正することができません" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "00時間 00分" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "時間仕様" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "コスト仕様" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "%1m" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "%1g" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "合計:" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." -msgstr "おすすめプリントセットアップ

選択されたプリンターにておすすめの設定、フィラメント、質にてプリントしてください。 " +msgstr "おすすめプリントセットアップ

選択されたプリンターにておすすめの設定、フィラメント、質にてプリントしてください。" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." -msgstr "カスタムプリントセットアップ

スライス処理のきめ細かなコントロールにてプリントする" +msgstr "カスタムプリントセットアップ

スライス処理のきめ細かなコントロールにてプリントする。" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "プリントをアクティベートする" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "ジョブネーム" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "プリント時間" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "残り時間" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" +msgid "Toggle Full Screen" msgstr "留め金 フルスクリーン" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&取り消す" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&やりなおす" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&やめる" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "3Dビュー (&3)" +msgid "3D View" +msgstr "3Dビュー" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "フロントビュー (&F)" +msgid "Front View" +msgstr "フロントビュー" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "トップビュー (&T)" +msgid "Top View" +msgstr "トップビュー" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "左サイドビュー (&L)" +msgid "Left Side View" +msgstr "左サイドビュー" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "右サイドビュー (&R)" +msgid "Right Side View" +msgstr "右サイドビュー" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Curaを構成する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." -msgstr "&プリンターを追加する" +msgstr "&プリンターを追加する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." -msgstr "プリンターを管理する" +msgstr "プリンターを管理する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." -msgstr "フィラメントを管理する" +msgstr "フィラメントを管理する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&現在の設定/無効にプロファイルをアップデートする" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&変更を破棄する" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&今の設定/無効からプロファイルを作成する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." -msgstr "プロファイルを管理する" +msgstr "プロファイルを管理する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "オンラインドキュメントを表示する" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "報告&バグ" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." +msgid "About..." msgstr "アバウト..." # can’t enter japanese text -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" msgstr[0] "&選択したモデルを削除" # can’t enter japanese text -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "選択したモデルを中央に移動" # can’t edit japanese text -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "選択した複数のモデル" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "モデルを消去する" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "プラットホームの中心にモデルを配置" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&モデルグループ" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "モデルを非グループ化" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" -msgstr "&モデルの合体" +msgstr "モ&デルの合体" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&モデルを増倍する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&すべてのモデル選択" +msgid "Select All Models" +msgstr "すべてのモデル選択" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&ビルドプレート上のクリア" +msgid "Clear Build Plate" +msgstr "ビルドプレート上のクリア" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" +msgid "Reload All Models" msgstr "すべてのモデルを読み込む" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "すべてのモデルをすべてのビルドプレートに配置" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "すべてのモデルをアレンジする" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "選択をアレンジする" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "すべてのモデルのポジションをリセットする" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "すべてのモデル&変更点をリセットする" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&ファイルを開く(s)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&新しいプロジェクト…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." -msgstr "エンジン&ログを表示する" +msgstr "エンジン&ログを表示する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "コンフィグレーションのフォルダーを表示する" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "パッケージを見る…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "サイドバーを展開する/たたむ" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" -msgstr "3Dモデルをロードしてください。" +msgstr "3Dモデルをロードしてください" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" -msgstr "スライスの準備ができました。" +msgstr "スライスの準備ができました" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "スライス中…" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "%1の準備完了" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" -msgstr "スライスできません。" +msgstr "スライスできません" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "スライスが利用不可能" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "現在のプリントジョブをスライスします" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "スライスプロセスをキャンセルします" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "準備する" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "キャンセル" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "アクティブなアウトプットデバイスを選択する" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "ファイルを開く" @@ -4007,129 +4185,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&ファイル" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "&保存..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "&エクスポート..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "&ファイルに選択したものを保存" +msgid "Export Selection..." +msgstr "選択エクスポート..." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "名前をつけて保存" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "プロジェクトの保存 (&P)..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&編集" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "&ビュー" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "&設定" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&プリンター" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "&フィラメント" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "アクティブエクストルーダーとしてセットする" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "エクストルーダーを有効にする" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "エクストルーダーを無効にする" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "ビルドプレート (&B)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "&プロファイル" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "拡張子" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&ツールボックス" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "プレファレンス" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "ヘルプ" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "このパッケージは再起動後にインストールされます。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "ファイルを開く" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "設定" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" -msgstr "新しいプロジェクト…" +msgstr "新しいプロジェクト" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "新しいプロジェクトを開始しますか?この作業では保存していない設定やビルドプレートをクリアします。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "Cura を閉じる" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "Cura を終了しますか?" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "パッケージをインストール" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "ファイルを開く(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." msgstr "選択したファイルの中に複数のG-codeが存在します。1つのG-codeのみ一度に開けます。G-codeファイルを開く場合は、1点のみ選んでください。" @@ -4139,115 +4333,110 @@ msgctxt "@title:window" msgid "Save Project" msgstr "プロジェクトを保存" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "ビルドプレート" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "エクストルーダー%1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1とフィラメント" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "保存中のプロジェクトサマリーを非表示にする" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "保存" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "レイヤーの高さ" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" -msgstr "この品質プロファイルは現在の材料およびノズル構成では使用できません。この品質プロファイルを使用できるように変更してください。" +msgstr "この品質プロファイルは現在の材料およびノズル構成では使用できません。この品質プロファイルを使用できるように変更してください" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "カスタムプロファイルが有効になっています。品質スライダーを有効にするには、カスタムタブでデフォルトの品質プロファイルを選択してください" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "プリントスピード" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "ゆっくり" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "早く" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "プロファイルの設定がいくつか変更されました。変更を有効にするにはカスタムモードに移動してください。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "インフィル" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "グラデュアルインフィルはトップに向かうに従ってインフィルの量を増やします。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "グラデュアルを有効にする" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" -msgstr "サポートを生成します。" +msgstr "サポートを生成します" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "オーバーハングがあるモデルにサポートを生成します。このサポート構造なしでは、プリント中にオーバーハングのパーツが崩壊してしまいます。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "サポートに使うエクストルーダーを選択してください。モデルの垂れや中空プリントを避けるためにモデルの下にサポート構造を生成します。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "ビルドプレートの接着" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "ブリムまたはラフトのプリントの有効化。それぞれ、プリントの周り、また造形物の下に底面を加え切り取りやすくします。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" -msgstr "プリントにヘルプが必要ですか?
Ultimakerトラブルシューティングガイドを読んでください。" +msgstr "プリントにヘルプが必要ですか?
Ultimakerトラブルシューティングガイドを読んでください" # can’t enter japanese #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 @@ -4291,25 +4480,25 @@ msgctxt "@label" msgid "Printer type" msgstr "プリンタータイプ" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "フィラメント" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "密着性シートを使用する、またはこの材料の組み合わせで接着する" +msgid "Use glue with this material combination" +msgstr "この材料の組み合わせで接着する" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "互換性の確認" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." -msgstr "Ultimaker.comにてマテリアルのコンパティビリティを調べるためにクリック" +msgstr "Ultimaker.comにてマテリアルのコンパティビリティを調べるためにクリック。" #: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:211 msgctxt "@option:check" @@ -4349,7 +4538,7 @@ msgstr "ツールボックス" #: XRayView/plugin.json msgctxt "description" msgid "Provides the X-Ray view." -msgstr "透視ビューイング" +msgstr "透視ビューイング。" #: XRayView/plugin.json msgctxt "name" @@ -4359,7 +4548,7 @@ msgstr "透視ビュー" #: X3DReader/plugin.json msgctxt "description" msgid "Provides support for reading X3D files." -msgstr "X3Dファイルを読むこむためのサポートを供給する" +msgstr "X3Dファイルを読むこむためのサポートを供給する。" #: X3DReader/plugin.json msgctxt "name" @@ -4389,37 +4578,37 @@ msgstr "モデルチェッカー" #: cura-god-mode-plugin/src/GodMode/plugin.json msgctxt "description" msgid "Dump the contents of all settings to a HTML file." -msgstr "HTMLファイルに設定内容を放置する" +msgstr "HTMLファイルに設定内容を放置する。" #: cura-god-mode-plugin/src/GodMode/plugin.json msgctxt "name" msgid "God Mode" msgstr "Godモード" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "G-codeを承認し、Doodle3D WiFi-ボックスにWifi上にて送る" - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." -msgstr "最新の更新バージョンの変更点を表示する" +msgstr "最新の更新バージョンの変更点を表示する。" #: ChangeLogPlugin/plugin.json msgctxt "name" msgid "Changelog" msgstr "Changelog" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "ファームウェアアップデートのためのマシン操作を提供します。" + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "ファームウェアアップデーター" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." -msgstr "プロファイルを変更するフラットエンドクオリティーを作成する" +msgstr "プロファイルを変更するフラットエンドクオリティーを作成する。" #: ProfileFlattener/plugin.json msgctxt "name" @@ -4439,7 +4628,7 @@ msgstr "USBプリンティング" #: UserAgreement/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license." -msgstr "ライセンスに同意するかどうかユーザーに1回だけ確認する" +msgstr "ライセンスに同意するかどうかユーザーに1回だけ確認する。" #: UserAgreement/plugin.json msgctxt "name" @@ -4486,20 +4675,10 @@ msgctxt "name" msgid "Prepare Stage" msgstr "ステージの準備" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "直接スクリプト編集のための編集ウィンドウを提供します。" - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "ライブスクリプティングツール" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." -msgstr "取り外し可能なドライブホットプラギング及びサポートの書き出しの供給" +msgstr "取り外し可能なドライブホットプラギング及びサポートの書き出しの供給。" #: RemovableDriveOutputDevice/plugin.json msgctxt "name" @@ -4529,7 +4708,7 @@ msgstr "モニターステージ" #: FirmwareUpdateChecker/plugin.json msgctxt "description" msgid "Checks for firmware updates." -msgstr "ファームウェアアップデートをチェックする" +msgstr "ファームウェアアップデートをチェックする。" #: FirmwareUpdateChecker/plugin.json msgctxt "name" @@ -4599,23 +4778,13 @@ msgstr "フィラメントプロファイル" #: LegacyProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from legacy Cura versions." -msgstr "レガシーCura Versionsからプロファイルを取り込むためのサポートを供給する" +msgstr "レガシーCura Versionsからプロファイルを取り込むためのサポートを供給する。" #: LegacyProfileReader/plugin.json msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "レガシーCuraプロファイルリーダー" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Curaの中で直接Blenderファイルを開くために役立ちます。" - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Blender統合 (実験的)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4629,7 +4798,7 @@ msgstr "G-codeプロファイルリーダー" #: VersionUpgrade/VersionUpgrade32to33/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.2 to Cura 3.3." -msgstr "Cura 3.2からCura 3.3のコンフィグレーションアップグレート" +msgstr "Cura 3.2からCura 3.3のコンフィグレーションアップグレート。" #: VersionUpgrade/VersionUpgrade32to33/plugin.json msgctxt "name" @@ -4639,7 +4808,7 @@ msgstr "3.2から3.3にバージョンアップグレート" #: VersionUpgrade/VersionUpgrade33to34/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.3 to Cura 3.4." -msgstr "Cura 3.3からCura 3.4のコンフィグレーションアップグレート" +msgstr "Cura 3.3からCura 3.4のコンフィグレーションアップグレート。" #: VersionUpgrade/VersionUpgrade33to34/plugin.json msgctxt "name" @@ -4649,7 +4818,7 @@ msgstr "3.3から3.4にバージョンアップグレート" #: VersionUpgrade/VersionUpgrade25to26/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.5 to Cura 2.6." -msgstr "Cura 2.5 からCura 2.6のコンフィグレーションアップグレート" +msgstr "Cura 2.5 からCura 2.6のコンフィグレーションアップグレート。" #: VersionUpgrade/VersionUpgrade25to26/plugin.json msgctxt "name" @@ -4659,17 +4828,27 @@ msgstr "2.5から2.6にバージョンアップグレート" #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.7 to Cura 3.0." -msgstr "Cura 2.7からCura 3.0のコンフィグレーションアップグレート" +msgstr "Cura 2.7からCura 3.0のコンフィグレーションアップグレート。" #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "2.7から3.0にバージョンアップグレート" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "Cura 3.4 から Cura 3.5 のコンフィグレーションアップグレート。" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "3.4 から 3.5 にバージョンアップグレート" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." -msgstr "Cura 3.0からCura 3.1のコンフィグレーションアップグレート" +msgstr "Cura 3.0からCura 3.1のコンフィグレーションアップグレート。" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "name" @@ -4679,7 +4858,7 @@ msgstr "3.0から3.1にバージョンアップグレート" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." -msgstr "Cura 2.6 からCura 2.7のコンフィグレーションアップグレート" +msgstr "Cura 2.6 からCura 2.7のコンフィグレーションアップグレート。" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "name" @@ -4689,7 +4868,7 @@ msgstr "2.6から2.7にバージョンアップグレート" #: VersionUpgrade/VersionUpgrade21to22/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.1 to Cura 2.2." -msgstr "Cura 2.1 からCura 2.2のコンフィグレーションアップグレート" +msgstr "Cura 2.1 からCura 2.2のコンフィグレーションアップグレート。" #: VersionUpgrade/VersionUpgrade21to22/plugin.json msgctxt "name" @@ -4699,7 +4878,7 @@ msgstr "2.1 から2.2にバージョンアップグレート" #: VersionUpgrade/VersionUpgrade22to24/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.2 to Cura 2.4." -msgstr "Cura 2.2 からCura 2.4のコンフィグレーションアップグレート" +msgstr "Cura 2.2 からCura 2.4のコンフィグレーションアップグレート。" #: VersionUpgrade/VersionUpgrade22to24/plugin.json msgctxt "name" @@ -4709,7 +4888,7 @@ msgstr "2.2 から2.4にバージョンアップグレート" #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." -msgstr "2Dの画像ファイルからプリント可能なジオメトリーを生成を可能にする" +msgstr "2Dの画像ファイルからプリント可能なジオメトリーを生成を可能にする。" #: ImageReader/plugin.json msgctxt "name" @@ -4719,7 +4898,7 @@ msgstr "画像リーダー" #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." -msgstr "CuraEngineスライシングバックエンドにリンクを供給する" +msgstr "CuraEngineスライシングバックエンドにリンクを供給する。" #: CuraEngineBackend/plugin.json msgctxt "name" @@ -4729,7 +4908,7 @@ msgstr "Curaエンジンバックエンド" #: PerObjectSettingsTool/plugin.json msgctxt "description" msgid "Provides the Per Model Settings." -msgstr "各モデル設定を与える" +msgstr "各モデル設定を与える。" #: PerObjectSettingsTool/plugin.json msgctxt "name" @@ -4739,7 +4918,7 @@ msgstr "各モデル設定ツール" #: 3MFReader/plugin.json msgctxt "description" msgid "Provides support for reading 3MF files." -msgstr "3MFファイルを読むこむためのサポートを供給する" +msgstr "3MFファイルを読むこむためのサポートを供給する。" #: 3MFReader/plugin.json msgctxt "name" @@ -4749,7 +4928,7 @@ msgstr "3MFリーダー" #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." -msgstr "ノーマルなソリットメッシュビューを供給する" +msgstr "ノーマルなソリットメッシュビューを供給する。" #: SolidView/plugin.json msgctxt "name" @@ -4759,7 +4938,7 @@ msgstr "ソリッドビュー" #: GCodeReader/plugin.json msgctxt "description" msgid "Allows loading and displaying G-code files." -msgstr "G-codeファイルの読み込み、表示を許可する" +msgstr "G-codeファイルの読み込み、表示を許可する。" #: GCodeReader/plugin.json msgctxt "name" @@ -4769,7 +4948,7 @@ msgstr "G-codeリーダー" #: CuraProfileWriter/plugin.json msgctxt "description" msgid "Provides support for exporting Cura profiles." -msgstr "Curaプロファイルを書き出すためのサポートを供給する" +msgstr "Curaプロファイルを書き出すためのサポートを供給する。" #: CuraProfileWriter/plugin.json msgctxt "name" @@ -4779,7 +4958,7 @@ msgstr "Curaプロファイルライター" #: 3MFWriter/plugin.json msgctxt "description" msgid "Provides support for writing 3MF files." -msgstr "3MFファイルを読むこむためのサポートを供給する" +msgstr "3MFファイルを読むこむためのサポートを供給する。" #: 3MFWriter/plugin.json msgctxt "name" @@ -4799,13 +4978,305 @@ msgstr "Ultimkerプリンターのアクション" #: CuraProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing Cura profiles." -msgstr "Curaプロファイルを取り込むためのサポートを供給する" +msgstr "Curaプロファイルを取り込むためのサポートを供給する。" #: CuraProfileReader/plugin.json msgctxt "name" msgid "Cura Profile Reader" msgstr "Curaプロファイルリーダー" +#~ msgctxt "@warning:status" +#~ msgid "Please generate G-code before saving." +#~ msgstr "保存する前に G-code を生成してください。" + +#~ msgctxt "@item:inmenu" +#~ msgid "Profile Assistant" +#~ msgstr "プロファイルアシスタント" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Profile Assistant" +#~ msgstr "プロファイルアシスタント" + +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "ファームウェアをアップグレード" + +#~ msgctxt "@label unknown material" +#~ msgid "Unknown" +#~ msgstr "不明" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "No custom profile to import in file {0}" +#~ msgstr "ファイル{0}にはカスタムプロファイルがインポートされていません" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "This profile {0} contains incorrect data, could not import it." +#~ msgstr "このプロファイル{0}には、正しくないデータが含まれていて、インポートできません。" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "プロファイル{0}の中で定義されているマシン({1})は、現在お使いのマシン({2})と一致しませんので、インポートできませんでした。" + +#~ msgctxt "@title:window" +#~ msgid "Confirm uninstall " +#~ msgstr "アンインストール確認 " + +#~ msgctxt "@label:status" +#~ msgid "Paused" +#~ msgstr "一時停止" + +#~ msgctxt "@action:button" +#~ msgid "Previous" +#~ msgstr "前" + +#~ msgctxt "@action:button" +#~ msgid "Next" +#~ msgstr "次" + +#~ msgctxt "@label" +#~ msgid "Tip" +#~ msgstr "ヒント" + +#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +#~ msgid "%1m / ~ %2g / ~ %4 %3" +#~ msgstr "%1m / ~ %2g / ~ %4 %3" + +#~ msgctxt "@label Print estimates: m for meters, g for grams" +#~ msgid "%1m / ~ %2g" +#~ msgstr "%1m / ~ %2g" + +#~ msgctxt "@label" +#~ msgid "Print experiment" +#~ msgstr "試し印刷" + +#~ msgctxt "@label" +#~ msgid "Checklist" +#~ msgstr "チェックリスト" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "ファームウェアをアップグレード" + +#~ msgctxt "description" +#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +#~ msgstr "材料メーカーがドロップインUIを使用して新しい材料と品質のプロファイルを作成できるようにします。" + +#~ msgctxt "name" +#~ msgid "Print Profile Assistant" +#~ msgstr "プリントプロファイルアシスタント" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Boxでプリントする" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Boxでプリント" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Doodle3D Connectに接続する" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Doodle3D Connectにデータを送信" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Doodle3D Connectにデータを送れませんでした。他のジョブはまだアクティブですか?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Doodle3D Connectにデータを保存" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Doodle3D Connectにファイル送信完了" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Connectを開いています..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Doodle3D Connect web interfaceを開く" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Blenderファイル" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "\"{}\"品質を使用したエクスポートができませんでした!\n" +#~ "\"{}\"になりました。" + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "連絡" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Ultimaker3のグループをホストするために設定されていません。" + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "このプリンターはUltimaker3 %1グループのホストプリンターです。" + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1は、繋がっているUltimaker3プリンターのグループをホストするために設定されていません。" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "プリンターの追加/削除" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "デフォルトのウェブブラウザで印刷ジョブページを開きます。" + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "プリントジョブを見る" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "印刷の準備をする" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "プリント中" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "利用可能" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "プリンターへの接続が切断されました。" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "利用不可" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "不明" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "無効" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "予約済み" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "プリントの準備をする" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "プリント中止" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "プリントデータを確認できない" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "この層で終了します:" + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "ビルドプレートをクリアにする" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "プリント構成の変更を待っている" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "プリントジョブ" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "複数のプリンター" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "複数のプリンターをみる" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "一時停止" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "再開" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "プリント中止" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "いつもお尋ねください。" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "プロファイルを無効にする" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "新たにロードしたモデルをビルドプレート上に配置すべきですか? マルチビルドプレートと共に使用 (実験的)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "ロード時にオブジェクトを配置しません" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "フ&ァイルに選択したものを保存" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "名前をつけて保存" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "プロジェクトの保存 (&P)..." + +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "密着性シートを使用する、またはこの材料の組み合わせで接着する" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "G-codeを承認し、Doodle3D WiFi-ボックスにWifi上にて送る" + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "直接スクリプト編集のための編集ウィンドウを提供します。" + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "ライブスクリプティングツール" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Curaの中で直接Blenderファイルを開くために役立ちます。" + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Blender統合 (実験的)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "モデルチェッカー警告" @@ -5073,10 +5544,6 @@ msgstr "Curaプロファイルリーダー" #~ msgid "Browse plugins..." #~ msgstr "プラグインをみる" -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "ビルドプレート (&B)" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "プラグイン" @@ -5302,14 +5769,6 @@ msgstr "Curaプロファイルリーダー" #~ "\n" #~ "申し訳ありません。" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "プロファイルアシスタント" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "プロファイルアシスタント" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "フィラメントがロードされていません。" @@ -5440,14 +5899,6 @@ msgstr "Curaプロファイルリーダー" #~ msgid "Configure setting visiblity..." #~ msgstr "視野のセッティングを構成する" -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "自動選択: %1" @@ -5484,14 +5935,6 @@ msgstr "Curaプロファイルリーダー" #~ msgid "GCode Profile Reader" #~ msgstr "GCodeプロファイルリーダー" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "材料メーカーがドロップインUIを使用して新しい材料と品質のプロファイルを作成できるようにします。" - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "プリントプロファイルアシスタント" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "ソリッドワークスのファイルを開く際にエラーが発生しました!ソリッドワークスで、問題なく開くことができるか確認してください。" @@ -5688,10 +6131,6 @@ msgstr "Curaプロファイルリーダー" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "このプリンターは繋がっているUltimaker3プリンターの%1グループのホストです。" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "準備中" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "完了:" diff --git a/resources/i18n/ja_JP/fdmextruder.def.json.po b/resources/i18n/ja_JP/fdmextruder.def.json.po index 81d7a09420..95f0382823 100644 --- a/resources/i18n/ja_JP/fdmextruder.def.json.po +++ b/resources/i18n/ja_JP/fdmextruder.def.json.po @@ -5,17 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 15:24+0200\n" "Last-Translator: Bothof \n" -"Language-Team: Brule\n" +"Language-Team: Japanese\n" "Language: ja_JP\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.4\n" +"X-Generator: Poedit 2.0.6\n" #: fdmextruder.def.json msgctxt "machine_settings label" @@ -45,7 +45,7 @@ msgstr "ノズルID" #: fdmextruder.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 "\"AA 0.4\"や\"BB 0.8\"などのノズルID" +msgstr "\"AA 0.4\"や\"BB 0.8\"などのノズルID。" #: fdmextruder.def.json msgctxt "machine_nozzle_size label" @@ -65,7 +65,7 @@ msgstr "Xノズルオフセット" #: fdmextruder.def.json msgctxt "machine_nozzle_offset_x description" msgid "The x-coordinate of the offset of the nozzle." -msgstr "ノズルのX軸のオフセット" +msgstr "ノズルのX軸のオフセット。" #: fdmextruder.def.json msgctxt "machine_nozzle_offset_y label" @@ -75,7 +75,7 @@ msgstr "Yノズルオフセット" #: fdmextruder.def.json msgctxt "machine_nozzle_offset_y description" msgid "The y-coordinate of the offset of the nozzle." -msgstr "ノズルのY軸のオフセット" +msgstr "ノズルのY軸のオフセット。" #: fdmextruder.def.json msgctxt "machine_extruder_start_code label" @@ -105,7 +105,7 @@ msgstr "エクストルーダー スタート位置X" #: fdmextruder.def.json msgctxt "machine_extruder_start_pos_x description" msgid "The x-coordinate of the starting position when turning the extruder on." -msgstr "エクストルーダーのX座標のスタート位置" +msgstr "エクストルーダーのX座標のスタート位置。" #: fdmextruder.def.json msgctxt "machine_extruder_start_pos_y label" @@ -115,7 +115,7 @@ msgstr "エクストルーダースタート位置Y" #: fdmextruder.def.json msgctxt "machine_extruder_start_pos_y description" msgid "The y-coordinate of the starting position when turning the extruder on." -msgstr "エクストルーダーのY座標のスタート位置" +msgstr "エクストルーダーのY座標のスタート位置。" #: fdmextruder.def.json msgctxt "machine_extruder_end_code label" @@ -145,7 +145,7 @@ msgstr "エクストルーダーエンド位置X" #: fdmextruder.def.json msgctxt "machine_extruder_end_pos_x description" msgid "The x-coordinate of the ending position when turning the extruder off." -msgstr "エクストルーダーを切った際のX座標の最終位置" +msgstr "エクストルーダーを切った際のX座標の最終位置。" #: fdmextruder.def.json msgctxt "machine_extruder_end_pos_y label" @@ -155,7 +155,7 @@ msgstr "エクストルーダーエンド位置Y" #: fdmextruder.def.json msgctxt "machine_extruder_end_pos_y description" msgid "The y-coordinate of the ending position when turning the extruder off." -msgstr "エクストルーダーを切った際のY座標の最終位置" +msgstr "エクストルーダーを切った際のY座標の最終位置。" #: fdmextruder.def.json msgctxt "extruder_prime_pos_z label" @@ -167,6 +167,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "印刷開始時にノズルがポジションを確認するZ座標。" +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "エクストルーダープリント冷却ファン" + +#: 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 "このエクストルーダーに関連付けられているプリント冷却ファンの数です。デフォルト値は0(ゼロ)です。各エクストルーダーに対してプリント冷却ファンが異なる場合にのみ変更します。" + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/ja_JP/fdmprinter.def.json.po b/resources/i18n/ja_JP/fdmprinter.def.json.po index cc0ac98b68..3156e77288 100644 --- a/resources/i18n/ja_JP/fdmprinter.def.json.po +++ b/resources/i18n/ja_JP/fdmprinter.def.json.po @@ -5,18 +5,18 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 15:27+0200\n" "Last-Translator: Bothof \n" -"Language-Team: Brule\n" +"Language-Team: Japanese\n" "Language: ja_JP\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 2.0.4\n" +"X-Generator: Poedit 2.0.6\n" #: fdmprinter.def.json msgctxt "machine_settings label" @@ -38,7 +38,7 @@ msgstr "プリンターのタイプ" #: fdmprinter.def.json msgctxt "machine_name description" msgid "The name of your 3D printer model." -msgstr "3Dプリンターの機種名" +msgstr "3Dプリンターの機種名。" #: fdmprinter.def.json msgctxt "machine_show_variants label" @@ -84,7 +84,17 @@ msgstr "マテリアルGUID" #: fdmprinter.def.json msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " -msgstr "マテリアルのGUID。これは自動的に設定されます。" +msgstr "マテリアルのGUID。これは自動的に設定されます。 " + +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "直径" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "使用するフィラメントの太さの調整 この値を使用するフィラメントの太さと一致させてください。" #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" @@ -475,7 +485,7 @@ msgstr "ノズルID" #: 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 "\"AA 0.4\"や\"BB 0.8\"などのノズルID" +msgstr "\"AA 0.4\"や\"BB 0.8\"などのノズルID。" #: fdmprinter.def.json msgctxt "machine_nozzle_size label" @@ -565,7 +575,7 @@ msgstr "最大加速度X" #: fdmprinter.def.json msgctxt "machine_max_acceleration_x description" msgid "Maximum acceleration for the motor of the X-direction" -msgstr "X方向のモーターの最大速度。" +msgstr "X方向のモーターの最大速度" #: fdmprinter.def.json msgctxt "machine_max_acceleration_y label" @@ -847,7 +857,7 @@ msgstr "サポート面のライン幅" #: fdmprinter.def.json msgctxt "support_interface_line_width description" msgid "Width of a single line of support roof or floor." -msgstr "サポートのルーフ、フロアのライン幅" +msgstr "サポートのルーフ、フロアのライン幅。" #: fdmprinter.def.json msgctxt "support_roof_line_width label" @@ -943,7 +953,7 @@ msgstr "壁の厚さ" #: fdmprinter.def.json msgctxt "wall_thickness description" msgid "The thickness of the walls in the horizontal direction. This value divided by the wall line width defines the number of walls." -msgstr "壁の厚さ。この値をラインの幅で割ることで壁の数が決まります" +msgstr "壁の厚さ。この値をラインの幅で割ることで壁の数が決まります。" #: fdmprinter.def.json msgctxt "wall_line_count label" @@ -976,7 +986,7 @@ msgstr "上部表面用エクストルーダー" #: fdmprinter.def.json msgctxt "roofing_extruder_nr description" msgid "The extruder train used for printing the top most skin. This is used in multi-extrusion." -msgstr "上部の表面印刷用のエクストルーダー。デュアルノズル印刷時に使用" +msgstr "上部の表面印刷用のエクストルーダー。デュアルノズル印刷時に使用。" #: fdmprinter.def.json msgctxt "roofing_layer_count label" @@ -987,7 +997,7 @@ msgstr "上部表面レイヤー" #: fdmprinter.def.json msgctxt "roofing_layer_count description" msgid "The number of top most skin layers. Usually only one top most layer is sufficient to generate higher quality top surfaces." -msgstr "上部表面のレイヤー数。通常一層で綺麗に出来上がります" +msgstr "上部表面のレイヤー数。通常一層で綺麗に出来上がります。" #: fdmprinter.def.json msgctxt "top_bottom_extruder_nr label" @@ -998,7 +1008,7 @@ msgstr "上部/底面エクストルーダー" #: fdmprinter.def.json msgctxt "top_bottom_extruder_nr description" msgid "The extruder train used for printing the top and bottom skin. This is used in multi-extrusion." -msgstr "上部と下部の表面を印刷する時に使われるエクストルーダー。デュアルノズル印刷時に使用" +msgstr "上部と下部の表面を印刷する時に使われるエクストルーダー。デュアルノズル印刷時に使用。" #: fdmprinter.def.json msgctxt "top_bottom_thickness label" @@ -1101,6 +1111,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "ジグザグ" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "上層/底層ポリゴンに接合" + +#: 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 "互いに次に実行する上層/底層スキンパスに接合します。同心円のパターンの場合、この設定を有効にすることにより、移動時間が短縮されますが、インフィルまでの途中で接合があるため、この機能で上層面の品質が損なわれることがあります。" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1181,6 +1201,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "すでに壁が設置されている場所にプリントされている内壁の部分の流れを補正します。" +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "最小壁フロー" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "ウォールラインに対する流れを最小割合にします。既存の壁に近い場合に、壁補正により壁の流れが減少します。壁の流れがこの値より低い場合は、移動に置き換えられます。この設定を使用する場合は、壁補正を有効にして、内装の前に外装を印刷する必要があります。" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "引き戻し優先" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "有効にすると、フローが最小フローしきい値を下回っている壁を置き換える移動量より多い場合は、引き戻しを使用します。" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1220,7 +1260,7 @@ msgstr "薄壁印刷" #: fdmprinter.def.json msgctxt "fill_outline_gaps description" msgid "Print pieces of the model which are horizontally thinner than the nozzle size." -msgstr "ノズルサイズよりも細い壁を作ります" +msgstr "ノズルサイズよりも細い壁を作ります。" #: fdmprinter.def.json msgctxt "xy_offset label" @@ -1241,7 +1281,7 @@ msgstr "初期層水平展開" #: fdmprinter.def.json msgctxt "xy_offset_layer_0 description" msgid "Amount of offset applied to all polygons in the first layer. A negative value can compensate for squishing of the first layer known as \"elephant's foot\"." -msgstr "最初のレイヤーのポリゴンに適用されるオフセットの値。マイナスの値はelephant's footと呼ばれる第一層が潰れるを現象を軽減させます" +msgstr "最初のレイヤーのポリゴンに適用されるオフセットの値。マイナスの値はelephant's footと呼ばれる第一層が潰れるを現象を軽減させます。" #: fdmprinter.def.json msgctxt "z_seam_type label" @@ -1393,7 +1433,7 @@ msgstr "アイロンパターン" #: fdmprinter.def.json msgctxt "ironing_pattern description" msgid "The pattern to use for ironing top surfaces." -msgstr "アイロンのパターン" +msgstr "アイロンのパターン。" #: fdmprinter.def.json msgctxt "ironing_pattern option concentric" @@ -1416,7 +1456,7 @@ msgstr "アイロン線のスペース" #: fdmprinter.def.json msgctxt "ironing_line_spacing description" msgid "The distance between the lines of ironing." -msgstr "アイロンライン同士の距離" +msgstr "アイロンライン同士の距離。" #: fdmprinter.def.json msgctxt "ironing_flow label" @@ -1449,7 +1489,7 @@ msgstr "アイロン速度" #: fdmprinter.def.json msgctxt "speed_ironing description" msgid "The speed at which to pass over the top surface." -msgstr "上部表面通過時の速度" +msgstr "上部表面通過時の速度。" #: fdmprinter.def.json msgctxt "acceleration_ironing label" @@ -1460,7 +1500,7 @@ msgstr "アイロン加速度" #: fdmprinter.def.json msgctxt "acceleration_ironing description" msgid "The acceleration with which ironing is performed." -msgstr "アイロン時の加速度" +msgstr "アイロン時の加速度。" #: fdmprinter.def.json msgctxt "jerk_ironing label" @@ -1471,7 +1511,7 @@ msgstr "アイロンジャーク" #: fdmprinter.def.json msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." -msgstr "アイロン時の最大加速度" +msgstr "アイロン時の最大加速度。" #: fdmprinter.def.json msgctxt "infill label" @@ -1493,7 +1533,7 @@ msgstr "インフィルエクストルーダー" #: fdmprinter.def.json msgctxt "infill_extruder_nr description" msgid "The extruder train used for printing infill. This is used in multi-extrusion." -msgstr "インフィル造形時に使われるExtruder。デュアルノズルの場合に利用します" +msgstr "インフィル造形時に使われるExtruder。デュアルノズルの場合に利用します。" #: fdmprinter.def.json msgctxt "infill_sparse_density label" @@ -1522,8 +1562,8 @@ msgstr "インフィルパターン" #: 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "印刷用インフィル材料のパターン。代替層のラインとジグザグの面詰めスワップ方向、材料コストを削減します。グリッド、トライアングル、トライ六角、キュービック、オクテット、クォーターキュービック、クロスと同心円のパターンは、すべてのレイヤーを完全に印刷されます。キュービック、クォーターキュービック、オクテットのインフィルは、各レイヤーを変更して各方向の強度をより均等な分布にします。" +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 "印刷用インフィル材料のパターン。代替層のラインとジグザグの面詰めスワップ方向、材料コストを削減します。グリッド、トライアングル、トライ六角、キュービック、オクテット、クォーターキュービック、クロスと同心円のパターンは、すべてのレイヤーを完全に印刷されます。ジャイロイド、キュービック、クォーターキュービック、オクテットのインフィルは、各レイヤーを変更して各方向の強度をより均等な分布にします。" #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1572,12 +1612,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "同心円" -# msgstr "同心円" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D同心円" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1594,6 +1628,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "3Dクロス" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "ジャイロイド" + # msgstr "クロス3D" #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" @@ -1605,6 +1644,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "内壁の形状に沿ったラインを使用してインフィルパターンと内壁が合うところで接合します。この設定を有効にすると、インフィルが壁により密着するようになり、垂直面の品質に対するインフィルの影響が軽減します。この設定を無効にすると、材料の使用量が減ります。" +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "インフィルポリゴン接合" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "互いに次に実行するインフィルパスに接合します。いくつかの閉じられたポリゴンを含むインフィルパターンの場合、この設定を有効にすることにより、移動時間が大幅に短縮されます。" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1636,6 +1685,28 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "インフィルパターンはY軸に沿ってこの距離を移動します。" +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "インフィルライン乗算" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "各インフィルラインをこの多重ラインに変換します。余分なラインが互いに交差せず、互いを避け合います。これによりインフィルが硬くなり、印刷時間と材料使用量が増えます。" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "外側インフィル壁の数" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "インフィルエリア周辺に外壁を追加します。このような壁は、上層/底層ラインにたるみを作ります。つまり、一部の外壁材料の費用で同じ品質を実現するためには、必要な上層/底層スキンが少ないことを意味します。\nこの機能は、インフィルポリゴン接合と組み合わせて、構成が正しい場合、移動または引き戻しが必要なく、すべてのインフィルを1つの押出経路に接続することができます。" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1737,7 +1808,7 @@ msgstr "インフィル優先" #: fdmprinter.def.json msgctxt "infill_before_walls description" msgid "Print the infill before printing the walls. Printing the walls first may lead to more accurate walls, but overhangs print worse. Printing the infill first leads to sturdier walls, but the infill pattern might sometimes show through the surface." -msgstr "壁より前にインフィルをプリントします はじめに壁をプリントするとより精密な壁になりますが、オーバーハングのプリントは悪化します\nはじめにインフィルをプリントすると丈夫な壁になりますが、インフィルの模様が時折表面から透けて表れます" +msgstr "壁より前にインフィルをプリントします はじめに壁をプリントするとより精密な壁になりますが、オーバーハングのプリントは悪化します\nはじめにインフィルをプリントすると丈夫な壁になりますが、インフィルの模様が時折表面から透けて表れます。" #: fdmprinter.def.json msgctxt "min_infill_area label" @@ -1872,7 +1943,7 @@ msgstr "デフォルト印刷温度" #: 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 "印刷中のデフォルトの温度。これはマテリアルの基本温度となります。他のすべての造形温度はこの値に基づいてオフセットする必要があります。" +msgstr "印刷中のデフォルトの温度。これはマテリアルの基本温度となります。他のすべての造形温度はこの値に基づいてオフセットする必要があります" #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1932,7 +2003,7 @@ msgstr "ビルドプレートのデフォルト温度" #: fdmprinter.def.json msgctxt "default_material_bed_temperature description" msgid "The default temperature used for the heated build plate. This should be the \"base\" temperature of a build plate. All other print temperatures should use offsets based on this value" -msgstr "加熱式ビルドプレートのデフォルト温度。これはビルドプレートの「基本」温度でます。他のすべての印刷温度はこの値に基づいてオフセットする必要があります。" +msgstr "加熱式ビルドプレートのデフォルト温度。これはビルドプレートの「基本」温度でます。他のすべての印刷温度はこの値に基づいてオフセットする必要があります" #: fdmprinter.def.json msgctxt "material_bed_temperature label" @@ -1954,16 +2025,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "最初のレイヤー印刷時のビルドプレートの温度。" -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "直径" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "使用するフィラメントの太さの調整 この値を使用するフィラメントの太さと一致させてください。" - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2022,7 +2083,7 @@ msgstr "引き戻し有効" #: fdmprinter.def.json msgctxt "retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area. " -msgstr "ノズルが印刷しないで良い領域を移動する際にフィラメントを引き戻す。" +msgstr "ノズルが印刷しないで良い領域を移動する際にフィラメントを引き戻す。 " #: fdmprinter.def.json msgctxt "retract_at_layer_change label" @@ -2042,7 +2103,7 @@ msgstr "引き戻し距離" #: fdmprinter.def.json msgctxt "retraction_amount description" msgid "The length of material retracted during a retraction move." -msgstr "引き戻されるマテリアルの長さ" +msgstr "引き戻されるマテリアルの長さ。" #: fdmprinter.def.json msgctxt "retraction_speed label" @@ -2050,10 +2111,9 @@ msgid "Retraction Speed" msgstr "引き戻し速度" #: fdmprinter.def.json -#, fuzzy msgctxt "retraction_speed description" msgid "The speed at which the filament is retracted and primed during a retraction move." -msgstr "フィラメントが引き戻される時のスピード" +msgstr "フィラメントが引き戻される時のスピード。" #: fdmprinter.def.json msgctxt "retraction_retract_speed label" @@ -2061,10 +2121,9 @@ msgid "Retraction Retract Speed" msgstr "引き戻し速度の取り消し" #: fdmprinter.def.json -#, fuzzy msgctxt "retraction_retract_speed description" msgid "The speed at which the filament is retracted during a retraction move." -msgstr "フィラメントが引き戻される時のスピード" +msgstr "フィラメントが引き戻される時のスピード。" #: fdmprinter.def.json msgctxt "retraction_prime_speed label" @@ -2072,10 +2131,9 @@ msgid "Retraction Prime Speed" msgstr "押し戻し速度の取り消し" #: fdmprinter.def.json -#, fuzzy msgctxt "retraction_prime_speed description" msgid "The speed at which the filament is primed during a retraction move." -msgstr "フィラメントが引き戻される時のスピード" +msgstr "フィラメントが引き戻される時のスピード。" #: fdmprinter.def.json msgctxt "retraction_extra_prime_amount label" @@ -2195,7 +2253,7 @@ msgstr "印刷速度" #: fdmprinter.def.json msgctxt "speed_print description" msgid "The speed at which printing happens." -msgstr "印刷スピード" +msgstr "印刷スピード。" #: fdmprinter.def.json msgctxt "speed_infill label" @@ -2205,7 +2263,7 @@ msgstr "インフィル速度" #: fdmprinter.def.json msgctxt "speed_infill description" msgid "The speed at which infill is printed." -msgstr "インフィルを印刷する速度" +msgstr "インフィルを印刷する速度。" #: fdmprinter.def.json msgctxt "speed_wall label" @@ -2215,7 +2273,7 @@ msgstr "ウォール速度" #: fdmprinter.def.json msgctxt "speed_wall description" msgid "The speed at which the walls are printed." -msgstr "ウォールを印刷する速度" +msgstr "ウォールを印刷する速度。" #: fdmprinter.def.json msgctxt "speed_wall_0 label" @@ -2246,7 +2304,7 @@ msgstr "最上面速度" #: fdmprinter.def.json msgctxt "speed_roofing description" msgid "The speed at which top surface skin layers are printed." -msgstr "上部表面プリント時の速度" +msgstr "上部表面プリント時の速度。" #: fdmprinter.def.json msgctxt "speed_topbottom label" @@ -2256,7 +2314,7 @@ msgstr "上面/底面速度" #: fdmprinter.def.json msgctxt "speed_topbottom description" msgid "The speed at which top/bottom layers are printed." -msgstr "トップ/ボトムのレイヤーのプリント速度" +msgstr "トップ/ボトムのレイヤーのプリント速度。" #: fdmprinter.def.json msgctxt "speed_support label" @@ -2297,7 +2355,7 @@ msgstr "サポートルーフ速度" #: fdmprinter.def.json msgctxt "speed_support_roof description" msgid "The speed at which the roofs of support are printed. Printing them at lower speeds can improve overhang quality." -msgstr "ルーフとフロアのサポート材をプリントする速度 これらを低速でプリントするとオーバーハングの品質を向上できます" +msgstr "ルーフとフロアのサポート材をプリントする速度 これらを低速でプリントするとオーバーハングの品質を向上できます。" #: fdmprinter.def.json msgctxt "speed_support_bottom label" @@ -2328,7 +2386,7 @@ msgstr "移動速度" #: fdmprinter.def.json msgctxt "speed_travel description" msgid "The speed at which travel moves are made." -msgstr "移動中のスピード" +msgstr "移動中のスピード。" #: fdmprinter.def.json msgctxt "speed_layer_0 label" @@ -2338,7 +2396,7 @@ msgstr "初期レイヤー速度" #: fdmprinter.def.json msgctxt "speed_layer_0 description" msgid "The speed for the initial layer. A lower value is advised to improve adhesion to the build plate." -msgstr "一層目での速度。ビルトプレートへの接着を向上するため低速を推奨します" +msgstr "一層目での速度。ビルトプレートへの接着を向上するため低速を推奨します。" #: fdmprinter.def.json msgctxt "speed_print_layer_0 label" @@ -2348,7 +2406,7 @@ msgstr "初期レイヤー印刷速度" #: fdmprinter.def.json msgctxt "speed_print_layer_0 description" msgid "The speed of printing for the initial layer. A lower value is advised to improve adhesion to the build plate." -msgstr "一層目をプリントする速度 ビルトプレートへの接着を向上するため低速を推奨します" +msgstr "一層目をプリントする速度 ビルトプレートへの接着を向上するため低速を推奨します。" #: fdmprinter.def.json msgctxt "speed_travel_layer_0 label" @@ -2408,7 +2466,7 @@ msgstr "均一フローの最大速度" #: fdmprinter.def.json msgctxt "speed_equalize_flow_max description" msgid "Maximum print speed when adjusting the print speed in order to equalize flow." -msgstr "吐出を均一にするための調整時の最高スピード" +msgstr "吐出を均一にするための調整時の最高スピード。" #: fdmprinter.def.json msgctxt "acceleration_enabled label" @@ -2458,7 +2516,7 @@ msgstr "外壁加速度" #: fdmprinter.def.json msgctxt "acceleration_wall_0 description" msgid "The acceleration with which the outermost walls are printed." -msgstr "最も外側の壁をプリントする際の加速度" +msgstr "最も外側の壁をプリントする際の加速度。" #: fdmprinter.def.json msgctxt "acceleration_wall_x label" @@ -2479,7 +2537,7 @@ msgstr "最上面加速度" #: fdmprinter.def.json msgctxt "acceleration_roofing description" msgid "The acceleration with which top surface skin layers are printed." -msgstr "上部表面プリント時の加速度" +msgstr "上部表面プリント時の加速度。" #: fdmprinter.def.json msgctxt "acceleration_topbottom label" @@ -2499,7 +2557,7 @@ msgstr "サポート加速度" #: fdmprinter.def.json msgctxt "acceleration_support description" msgid "The acceleration with which the support structure is printed." -msgstr "サポート材プリント時の加速スピード" +msgstr "サポート材プリント時の加速スピード。" #: fdmprinter.def.json msgctxt "acceleration_support_infill label" @@ -2519,7 +2577,7 @@ msgstr "サポートインタフェース加速度" #: fdmprinter.def.json msgctxt "acceleration_support_interface description" msgid "The acceleration with which the roofs and floors of support are printed. Printing them at lower acceleration can improve overhang quality." -msgstr "サポートの上面と下面が印刷される加速度。低加速度で印刷するとオーバーハングの品質が向上します" +msgstr "サポートの上面と下面が印刷される加速度。低加速度で印刷するとオーバーハングの品質が向上します。" #: fdmprinter.def.json msgctxt "acceleration_support_roof label" @@ -2591,7 +2649,7 @@ msgstr "初期レイヤー移動加速度" #: fdmprinter.def.json msgctxt "acceleration_travel_layer_0 description" msgid "The acceleration for travel moves in the initial layer." -msgstr "最初のレイヤー時の加速度" +msgstr "最初のレイヤー時の加速度。" #: fdmprinter.def.json msgctxt "acceleration_skirt_brim label" @@ -2672,7 +2730,7 @@ msgstr "最上面ジャーク" #: fdmprinter.def.json msgctxt "jerk_roofing description" msgid "The maximum instantaneous velocity change with which top surface skin layers are printed." -msgstr "上部表面プリント時の最大加速度" +msgstr "上部表面プリント時の最大加速度。" #: fdmprinter.def.json msgctxt "jerk_topbottom label" @@ -2813,8 +2871,8 @@ msgstr "コーミングモード" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "コーミングは、走行時にすでに印刷された領域内にノズルを保ちます。その結果、移動距離はわずかに長くなりますが、引き込みの必要性は減ります。コーミングがオフの場合、フィラメントの引き戻しを行い、ノズルは次のポイントまで直線移動します。また、インフィルのみにてコーミングすることにより、トップとボトムのスキン領域上での櫛通りを回避します。" +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "コーミングは、移動時に印刷済みエリア内にノズルを保持します。この結果、移動距離が長くなりますが、引き戻しの必要性が軽減されます。コーミングがオフの場合は、材料を引き戻して、ノズルを次のポイントまで直線に移動します。コーミングが上層/底層スキンエリアを超えずに、インフィル内のみコーミングするようにできます。「インフィル内」オプションは、Cura の旧版の「スキン内にない」オプションと全く同じ動作をします。" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2831,6 +2889,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "スキン内にない" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "インフィル内" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -2879,7 +2942,7 @@ msgstr "移動回避距離" #: fdmprinter.def.json msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." -msgstr "ノズルが既に印刷された部分を移動する際の間隔" +msgstr "ノズルが既に印刷された部分を移動する際の間隔。" #: fdmprinter.def.json msgctxt "start_layers_at_same_position label" @@ -3072,7 +3135,7 @@ msgstr "ヘッド持ち上げ" #: fdmprinter.def.json msgctxt "cool_lift_head description" msgid "When the minimum speed is hit because of minimum layer time, lift the head away from the print and wait the extra time until the minimum layer time is reached." -msgstr "レイヤーの最小プリント時間より早く印刷が終わった場合、ヘッド部分を持ち上げてレイヤーの最小プリント時間に到達するまで待機します" +msgstr "レイヤーの最小プリント時間より早く印刷が終わった場合、ヘッド部分を持ち上げてレイヤーの最小プリント時間に到達するまで待機します。" #: fdmprinter.def.json msgctxt "support label" @@ -3217,11 +3280,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "同心円" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D同心円" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3283,6 +3341,56 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "印刷されたサポート材の間隔。この設定は、サポート材の密度によって算出されます。" +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "初期層サポートラインの距離" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "印刷した初期層間の距離が構造ライをサポートします。この設定は、対応濃度で算出されます。" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "サポートインフィルラインの向き" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "対応するインフィルラインの向きです。サポートインフィルパターンは平面で回転します。" + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "サポートブリムを有効にする" + +#: 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 "最初の層のインフィルエリア内ブリムを生成します。このブリムは、サポートの周囲ではなく、サポートの下に印刷されます。この設定を有効にすると、サポートのビルドプレートへの吸着性が高まります。" + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "サポートブリムの幅" + +#: 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 "サポートの下に印刷されるブリムの幅。ブリムが大きいほど、追加材料の費用でビルドプレートへの接着性が強化されます。" + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "サポートブリムのライン数" + +#: 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 "サポートブリムに使用される線の数。ブリムの線数を増やすと、追加材料の費用でビルドプレートへの接着性が強化されます。" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3321,7 +3429,7 @@ msgstr "サポートX/Y距離" #: fdmprinter.def.json msgctxt "support_xy_distance description" msgid "Distance of the support structure from the print in the X/Y directions." -msgstr "印刷物からX/Y方向へのサポート材との距離" +msgstr "印刷物からX/Y方向へのサポート材との距離。" #: fdmprinter.def.json msgctxt "support_xy_overrides_z label" @@ -3351,7 +3459,7 @@ msgstr "最小サポートX/Y距離" #: fdmprinter.def.json msgctxt "support_xy_distance_overhang description" msgid "Distance of the support structure from the overhang in the X/Y directions. " -msgstr "X/Y方向におけるオーバーハングからサポートまでの距離" +msgstr "X/Y方向におけるオーバーハングからサポートまでの距離。 " #: fdmprinter.def.json msgctxt "support_bottom_stair_step_height label" @@ -3414,7 +3522,7 @@ msgstr "サポートインフィル半減回数" #: fdmprinter.def.json msgctxt "gradual_support_infill_steps description" msgid "Number of times to reduce the support infill density by half when getting further below top surfaces. Areas which are closer to top surfaces get a higher density, up to the Support Infill Density." -msgstr "天井面より下に遠ざかる際にサポートのインフィル密度が半減する回数 天井面に近い領域ほど高い密度となり、サポートのインフィル密度になります" +msgstr "天井面より下に遠ざかる際にサポートのインフィル密度が半減する回数 天井面に近い領域ほど高い密度となり、サポートのインフィル密度になります。" #: fdmprinter.def.json msgctxt "gradual_support_infill_step_height label" @@ -3508,7 +3616,7 @@ msgstr "サポートインタフェース密度" #: fdmprinter.def.json msgctxt "support_interface_density description" msgid "Adjusts the density of the roofs and floors of the support structure. A higher value results in better overhangs, but the supports are harder to remove." -msgstr "サポート材のルーフとフロアの密度を調整します 大きな値ではオーバーハングでの成功率があがりますが、サポート材が除去しにくくなります" +msgstr "サポート材のルーフとフロアの密度を調整します 大きな値ではオーバーハングでの成功率があがりますが、サポート材が除去しにくくなります。" #: fdmprinter.def.json msgctxt "support_roof_density label" @@ -3583,11 +3691,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "同心円" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D同心円" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3602,7 +3705,7 @@ msgstr "サポートルーフパターン" #: fdmprinter.def.json msgctxt "support_roof_pattern description" msgid "The pattern with which the roofs of the support are printed." -msgstr "サポートのルーフが印刷されるパターン" +msgstr "サポートのルーフが印刷されるパターン。" #: fdmprinter.def.json msgctxt "support_roof_pattern option lines" @@ -3627,12 +3730,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "同心円" -# msgstr "同心" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D同心円" - # msgstr "同心3D" #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" @@ -3674,18 +3771,32 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "同心円" -# msgstr "同心円" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "3D同心円" - # msgstr "コンセントリック3D" #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "ジグザグ" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "ファン速度上書き" + +#: 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 "有効にすると、サポートを超えた直後に印刷冷却ファンの速度がスキン領域に対して変更されます。" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "サポート対象スキンファン速度" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "サポートを超えた直後にスキン領域に印字するときに使用するファン速度を割合で示します。高速ファンを使用すると、サポートが取り外しやすくなります。" + # msgstr "ジグザグ" #: fdmprinter.def.json msgctxt "support_use_towers label" @@ -3875,6 +3986,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "ブリムに使用される線数。ブリムの線数は、ビルドプレートへの接着性を向上させるだけでなく、有効な印刷面積を減少させる。" +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "ブリム交換サポート" + +#: 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 "スペースがサポートで埋まっている場合でも、モデルの周辺にブリムを印刷します。これにより、サポートの最初の層の一部のエリアがブリムになります。" + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -4017,8 +4138,8 @@ msgstr "ベースラフト層の線幅。ビルドプレートの接着のため #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "ラフトラインスペース" +msgid "Raft Base Line Spacing" +msgstr "ラフトベースラインスペース" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4083,7 +4204,7 @@ msgstr "ラフト上層層印刷加速度" #: fdmprinter.def.json msgctxt "raft_surface_acceleration description" msgid "The acceleration with which the top raft layers are printed." -msgstr "ラフトのトップ印刷時の加速度" +msgstr "ラフトのトップ印刷時の加速度。" #: fdmprinter.def.json msgctxt "raft_interface_acceleration label" @@ -4093,7 +4214,7 @@ msgstr "ラフト中間層印刷加速度" #: fdmprinter.def.json msgctxt "raft_interface_acceleration description" msgid "The acceleration with which the middle raft layer is printed." -msgstr "ラフトの中間層印刷時の加速度" +msgstr "ラフトの中間層印刷時の加速度。" #: fdmprinter.def.json msgctxt "raft_base_acceleration label" @@ -4103,7 +4224,7 @@ msgstr "ラフトベース印刷加速度" #: fdmprinter.def.json msgctxt "raft_base_acceleration description" msgid "The acceleration with which the base raft layer is printed." -msgstr "ラフトの底面印刷時の加速度" +msgstr "ラフトの底面印刷時の加速度。" #: fdmprinter.def.json msgctxt "raft_jerk label" @@ -4123,7 +4244,7 @@ msgstr "ラフト上層印刷ジャーク" #: fdmprinter.def.json msgctxt "raft_surface_jerk description" msgid "The jerk with which the top raft layers are printed." -msgstr "トップラフト層印刷時のジャーク" +msgstr "トップラフト層印刷時のジャーク。" #: fdmprinter.def.json msgctxt "raft_interface_jerk label" @@ -4133,7 +4254,7 @@ msgstr "ラフト中間層印刷ジャーク" #: fdmprinter.def.json msgctxt "raft_interface_jerk description" msgid "The jerk with which the middle raft layer is printed." -msgstr "ミドルラフト層印刷時のジャーク" +msgstr "ミドルラフト層印刷時のジャーク。" #: fdmprinter.def.json msgctxt "raft_base_jerk label" @@ -4143,7 +4264,7 @@ msgstr "ラフトベース印刷ジャーク" #: fdmprinter.def.json msgctxt "raft_base_jerk description" msgid "The jerk with which the base raft layer is printed." -msgstr "ベースラフト層印刷時のジャーク" +msgstr "ベースラフト層印刷時のジャーク。" #: fdmprinter.def.json msgctxt "raft_fan_speed label" @@ -4183,7 +4304,7 @@ msgstr "ラフトベースファン速度" #: fdmprinter.def.json msgctxt "raft_base_fan_speed description" msgid "The fan speed for the base raft layer." -msgstr "ベースラフト層印刷時のファン速度" +msgstr "ベースラフト層印刷時のファン速度。" #: fdmprinter.def.json msgctxt "dual label" @@ -4193,7 +4314,7 @@ msgstr "デュアルエクストルーダー" #: fdmprinter.def.json msgctxt "dual description" msgid "Settings used for printing with multiple extruders." -msgstr "デュアルエクストルーダーで印刷するための設定" +msgstr "デュアルエクストルーダーで印刷するための設定。" #: fdmprinter.def.json msgctxt "prime_tower_enable label" @@ -4203,7 +4324,7 @@ msgstr "プライムタワーを有効にする" #: fdmprinter.def.json msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." -msgstr "印刷物の横にタワーを造形して、ノズル交換後にフィラメントの調整をします" +msgstr "印刷物の横にタワーを造形して、ノズル交換後にフィラメントの調整をします。" #: fdmprinter.def.json msgctxt "prime_tower_circular label" @@ -4233,17 +4354,7 @@ msgstr "プライムタワー最小容積" #: fdmprinter.def.json msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." -msgstr "プライムタワーの各層の最小容積" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "プライムタワーの厚さ" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "中空プライムタワーの厚さ。プライムタワーの半分を超える厚さは、密集したプライムタワーになります。" +msgstr "プライムタワーの各層の最小容積。" #: fdmprinter.def.json msgctxt "prime_tower_position_x label" @@ -4273,7 +4384,7 @@ msgstr "プライムタワーのフロー" #: fdmprinter.def.json msgctxt "prime_tower_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "吐出量: マテリアルの吐出量はこの値の乗算で計算されます" +msgstr "吐出量: マテリアルの吐出量はこの値の乗算で計算されます。" #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" @@ -4285,27 +4396,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "1本のノズルでプライムタワーを印刷した後、もう片方のノズルから滲み出した材料をプライムタワーが拭き取ります。" -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "スイッチ後のノズル拭き取り" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "エクストルーダーを切り替えた後、最初に印刷したものの上にあるノズルから滲み出したマテリアルを拭き取ってください。余分に出たマテリアルがプリントの表面品質に与える影響が最も少ない場所で、ゆっくりと払拭を行います。" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "プライムタワーのパージ量" - -# msgstr "プライムタワーのパージ時のボリューム" -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "プライムタワーの上を拭くときにパージするフィラメントの量。パージは、ノズルの不活動時にじみ出たフィラメントを補修するため便利です。" - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4334,7 +4424,7 @@ msgstr "Ooze Shield距離" #: fdmprinter.def.json msgctxt "ooze_shield_dist description" msgid "Distance of the ooze shield from the print, in the X/Y directions." -msgstr "壁(ooze shield)の造形物からの距離" +msgstr "壁(ooze shield)の造形物からの距離。" #: fdmprinter.def.json msgctxt "meshfix label" @@ -4474,7 +4564,7 @@ msgstr "インフィルメッシュの順序" #: fdmprinter.def.json msgctxt "infill_mesh_order description" msgid "Determines which infill mesh is inside the infill of another infill mesh. An infill mesh with a higher order will modify the infill of infill meshes with lower order and normal meshes." -msgstr "他のインフィルメッシュのインフィル内にあるインフィルメッシュを決定します。優先度の高いのインフィルメッシュは、低いメッシュと通常のメッシュのインフィルを変更します" +msgstr "他のインフィルメッシュのインフィル内にあるインフィルメッシュを決定します。優先度の高いのインフィルメッシュは、低いメッシュと通常のメッシュのインフィルを変更します。" #: fdmprinter.def.json msgctxt "cutting_mesh label" @@ -4742,7 +4832,7 @@ msgstr "上部表面パターン" #: fdmprinter.def.json msgctxt "roofing_pattern description" msgid "The pattern of the top most layers." -msgstr "上層のパターン" +msgstr "上層のパターン。" #: fdmprinter.def.json msgctxt "roofing_pattern option lines" @@ -4803,6 +4893,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "マテリアルフロー(毎秒 3mm) と温度 (° c) をリンクします。" +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "最小ポリゴン円周" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "この量よりも小さい円周を持つスライスレイヤーのポリゴンは、除外されます。値を小さくすると、スライス時間のコストで、メッシュの解像度が高くなります。つまり、ほとんどが高解像 SLA プリンター、極小多機能 3D モデルです。" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -4874,7 +4974,7 @@ msgstr "ドラフトシールドとX/Yの距離" #: fdmprinter.def.json msgctxt "draft_shield_dist description" msgid "Distance of the draft shield from the print, in the X/Y directions." -msgstr "ドラフトシールドと造形物のX / Y方向の距離" +msgstr "ドラフトシールドと造形物のX / Y方向の距離。" #: fdmprinter.def.json msgctxt "draft_shield_height_limitation label" @@ -5027,7 +5127,7 @@ msgstr "スパゲッティインフィルの手順" #: fdmprinter.def.json msgctxt "spaghetti_infill_stepped description" msgid "Whether to print spaghetti infill in steps or extrude all the infill filament at the end of the print." -msgstr "スパゲッティインフィルをプリントするか印刷の最後に全てのインフィルフィラメントを押し出すか" +msgstr "スパゲッティインフィルをプリントするか印刷の最後に全てのインフィルフィラメントを押し出すか。" #: fdmprinter.def.json msgctxt "spaghetti_max_infill_angle label" @@ -5049,7 +5149,7 @@ msgstr "スパゲッティインフィル最大高さ" #: fdmprinter.def.json msgctxt "spaghetti_max_height description" msgid "The maximum height of inside space which can be combined and filled from the top." -msgstr "内部空間の上から結合して埋め込むことができる最大の高さ" +msgstr "内部空間の上から結合して埋め込むことができる最大の高さ。" #: fdmprinter.def.json msgctxt "spaghetti_inset label" @@ -5082,7 +5182,7 @@ msgstr "スパゲッティインフィル余剰調整" #: fdmprinter.def.json msgctxt "spaghetti_infill_extra_volume description" msgid "A correction term to adjust the total volume being extruded each time when filling spaghetti." -msgstr "スパゲッティをプリントする際に毎回行なう吐出量の調整" +msgstr "スパゲッティをプリントする際に毎回行なう吐出量の調整。" #: fdmprinter.def.json msgctxt "support_conical_enabled label" @@ -5471,6 +5571,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "小さいレイヤーを使用するかどうかの閾値。この値が、レイヤー中の最も急な斜面のタンジェントと比較されます。" +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "張り出し壁アングル" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "この角度以上に張り出した壁は、オーバーハング壁設定を使用して印刷されます。値が 90 の場合は、オーバーハング壁として処理されません。" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "張り出し壁速度" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "張り出し壁は、この割合で通常の印刷速度で印刷されます。" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5501,16 +5621,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "対象領域に対してこのパーセンテージ未満のスキン領域がサポートされている場合、ブリッジ設定で印刷します。それ以外の場合は、通常のスキン設定で印刷します。" -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "ブリッジ壁最大オーバーハング" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "ブリッジ設定でウォールを印刷する前に、壁の線の下の空気の領域で可能な最大幅。空気ギャップがこれより広い場合は、壁の線はブリッジ設定で印刷されます。それ以外は、通常の設定で印刷されます。この値より低い場合は、オーバーハング壁線がブリッジ設定で印刷されます。" - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5731,6 +5841,78 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "ファイルから読み込むときに、モデルに適用するトランスフォーメーションマトリックス。" +#~ 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 happend midway over infill this feature can reduce the top surface quality." +#~ msgstr "互いに次に実行する上層/底層スキンパスに接合します。同心円のパターンの場合、この設定を有効にすることにより、移動時間が短縮されますが、インフィルまでの途中で接合があるため、この機能で上層面の品質が損なわれることがあります。" + +#~ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +#~ msgstr "印刷用インフィル材料のパターン。代替層のラインとジグザグの面詰めスワップ方向、材料コストを削減します。グリッド、トライアングル、トライ六角、キュービック、オクテット、クォーターキュービック、クロスと同心円のパターンは、すべてのレイヤーを完全に印刷されます。キュービック、クォーターキュービック、オクテットのインフィルは、各レイヤーを変更して各方向の強度をより均等な分布にします。" + +# msgstr "同心円" +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D同心円" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "コーミングは、走行時にすでに印刷された領域内にノズルを保ちます。その結果、移動距離はわずかに長くなりますが、引き込みの必要性は減ります。コーミングがオフの場合、フィラメントの引き戻しを行い、ノズルは次のポイントまで直線移動します。また、インフィルのみにてコーミングすることにより、トップとボトムのスキン領域上での櫛通りを回避します。" + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D同心円" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D同心円" + +# msgstr "同心" +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D同心円" + +# msgstr "同心円" +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "3D同心円" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "ラフトラインスペース" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "プライムタワーの厚さ" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "中空プライムタワーの厚さ。プライムタワーの半分を超える厚さは、密集したプライムタワーになります。" + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "スイッチ後のノズル拭き取り" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "エクストルーダーを切り替えた後、最初に印刷したものの上にあるノズルから滲み出したマテリアルを拭き取ってください。余分に出たマテリアルがプリントの表面品質に与える影響が最も少ない場所で、ゆっくりと払拭を行います。" + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "プライムタワーのパージ量" + +# msgstr "プライムタワーのパージ時のボリューム" +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "プライムタワーの上を拭くときにパージするフィラメントの量。パージは、ノズルの不活動時にじみ出たフィラメントを補修するため便利です。" + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "ブリッジ壁最大オーバーハング" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "ブリッジ設定でウォールを印刷する前に、壁の線の下の空気の領域で可能な最大幅。空気ギャップがこれより広い場合は、壁の線はブリッジ設定で印刷されます。それ以外は、通常の設定で印刷されます。この値より低い場合は、オーバーハング壁線がブリッジ設定で印刷されます。" + # msgstr "壁のプリントの順番を最適化する" #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." diff --git a/resources/i18n/ko_KR/cura.po b/resources/i18n/ko_KR/cura.po index 2b5dec7c0f..6f32d46cd7 100644 --- a/resources/i18n/ko_KR/cura.po +++ b/resources/i18n/ko_KR/cura.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" -"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" -"PO-Revision-Date: 2018-04-19 16:10+0900\n" +"Project-Id-Version: Cura 3.6\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" +"PO-Revision-Date: 2018-11-06 15:00+0100\n" "Last-Translator: Jinbuhm Kim \n" "Language-Team: Jinbum Kim , Korean \n" "Language: ko_KR\n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "G-code 파일" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "GCodeWriter는 텍스트가 아닌 모드는 지원하지 않습니다." + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "내보내기 전에 G-code를 준비하십시오." + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -53,104 +64,57 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

하나 이상의 3D 모델이 모델 크기 및 재료 구성으로 인해 최적의 상태로 인쇄되지 않을 수 있습니다.

\n

{model_names}

\n

인쇄 품질 및 안정성을 최고로 높이는 방법을 알아보십시오.

\n

인쇄 품질 가이드 보기

" +msgstr "" +"

하나 이상의 3D 모델이 모델 크기 및 재료 구성으로 인해 최적의 상태로 인쇄되지 않을 수 있습니다.

\n" +"

{model_names}

\n" +"

인쇄 품질 및 안정성을 최고로 높이는 방법을 알아보십시오.

\n" +"

인쇄 품질 가이드 보기

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box로 프린팅" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box로 프린팅" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Doodle3D Connect에 연결" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "취소" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Doodle3D Connect에 데이터 보내기" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Doodle3D Connect에 데이터를 보낼 수 없습니다. 다른 작업이 진행중인가요?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Doodle3D Connect에 데이터 저장" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Doodle3D Connect에 파일 전송" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Connect 열기..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Doodle3D Connect 웹 인터페이스 열기" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "변경 내역 표시" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "펌웨어 업데이트" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "활성 설정 병합" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "프로파일이 병합되고 활성화되었습니다." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USB 프린팅" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "USB를 통해 프린팅" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "USB를 통해 프린팅" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "USB를 통해 연결" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "USB 인쇄가 진행 중입니다. Cura를 닫으면 인쇄도 중단됩니다. 계속하시겠습니까?" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -173,7 +137,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "압축된 G-code 파일" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "GCodeGzWriter는 텍스트 모드는 지원하지 않습니다." + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "Ultimaker 포맷 패키지" @@ -195,7 +164,7 @@ msgid "Save to Removable Drive {0}" msgstr "이동식 드라이브 {0}에 저장" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "쓸 수있는 파일 형식이 없습니다!" @@ -234,7 +203,7 @@ msgstr "이동식 드라이브 {0}: {1} 에 저장할 수 없습니다 :" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "오류" @@ -263,8 +232,8 @@ msgstr "이동식 장치 {0} 꺼내기" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "경고" @@ -291,259 +260,269 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "이동식 드라이브" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "네트워크를 통해 프린팅" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "네트워크를 통해 프린팅" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "네트워크를 통해 연결됨." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "네트워크를 통해 연결되었습니다. 프린터의 접근 요청을 승인하십시오." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "네트워크를 통해 연결되었습니다. 프린터를 제어할 수 있는 권한이 없습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "요청된 프린터에 대한 액세스. 프린터에서 요청을 승인하십시오" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "인증 상태" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "인증 상태" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "재시도" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "접근 요청 다시 보내기" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "허용 된 프린터에 대한 접근 허용" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "이 프린터로 프린팅 할 수 없습니다. 프린팅 작업을 보낼 수 없습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "접근 요청" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "프린터에 접근 요청 보내기" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "새 프린팅 작업을 시작할 수 없습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." msgstr "Ultimaker의 설정에 문제가 있어 프린팅을 시작할 수 없습니다. 계속하기 전에 이 문제를 해결하십시오." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "일치하지 않는 구성" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "선택한 구성으로 프린팅 하시겠습니까?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "프린터와 Cura의 설정이 일치하지 않습니다. 최상의 결과를 얻으려면 프린터에 삽입 된 PrintCores 및 재료로 슬라이싱을 하십시오." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "새로운 작업 전송 (일시적)이 차단되어 이전 프린팅 작업을 계속 보냅니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "프린터로 데이터 보내기" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "데이터 전송 중" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "취소" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "{slot_number} 슬롯에 로드 된 프린터코어가 없음" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "{slot_number}에 로드 된 재료가 없음" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, python-brace-format msgctxt "@label" msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" msgstr "익스트루더 {extruder_id}에 대해 다른 프린터코어 (Cura : {cura_printcore_name}, 프린터 : {remote_printcore_name})가 선택되었습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "익스트루더 {2}에 다른 재료 (Cura : {0}, Printer : {1})가 선택됨" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "프린터와 동기화" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Cura에서 현재 프린터 구성을 사용 하시겠습니까?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "프린터의 PrintCores와 재료는 현재 프로젝트 내의 재료와 다릅니다. 최상의 결과를 얻으려면 프린터에 삽입 된 PrintCores 및 재료로 슬라이싱 하십시오." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" msgstr "네트워크를 통해 연결됨" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "출력 작업이 프린터에 성공적으로 보내졌습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "데이터 전송 됨" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "모니터에서 보기" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "'{printer_name} 프린터가 '{job_name}' 프린팅을 완료했습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "인쇄 작업 ‘{job_name}’이 완료되었습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "프린팅이 완료됨" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "네트워크를 통해 연결" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "모니터" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "업데이트 정보에 액세스 할 수 없습니다." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "{machine_name}의 새로운 기능을 사용할 수 있습니다! 프린터의 펌웨어를 업데이트하는 것이 좋습니다." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "새로운 %s 펌웨어를 사용할 수 있습니다" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "업데이트하는 방법" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "업데이트 정보에 액세스 할 수 없습니다." - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "레이어 뷰" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "와이어 프린팅이 활성화되어 있을 때 Cura는 레이어를 정확하게 표시하지 않습니다" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "시뮬레이션 뷰" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "G 코드 수정" @@ -557,32 +536,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "서포트가 프린팅되지 않는 볼륨을 만듭니다." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura는 익명의 사용 통계를 수집합니다." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "데이터 수집" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "추가 정보" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Cura가 전송하는 데이터에 대한 추가 정보를 확인하십시오." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "허용" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Cura가 익명의 사용 통계를 보내 Cura에 대한 향후 개선을 우선화하는 데 도움을 줍니다. Cura 버전과 슬라이싱하는 모델의 해쉬 등 일부 환경설정 값이 발송됩니다." @@ -592,18 +571,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04 프로파일" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Blender 파일" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "\"{}\" 품질을 사용하여 내보낼 수 없습니다!\n \"{}\"(으)로 돌아갑니다." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -629,49 +596,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF 이미지" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "선택한 소재 또는 구성과 호환되지 않기 때문에 현재 소재로 슬라이스 할 수 없습니다." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "슬라이스 할 수 없습니다" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "현재 설정으로 슬라이스 할 수 없습니다. 다음 설정에는 오류가 있습니다 : {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "일부 모델별 설정으로 인해 슬라이스할 수 없습니다. 하나 이상의 모델에서 다음 설정에 오류가 있습니다. {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "프라임 타워 또는 위치가 유효하지 않아 슬라이스 할 수 없습니다." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "비활성화된 익스트루더 %s(와)과 연결된 개체가 있기 때문에 슬라이스할 수 없습니다." + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "어떤 모델도 빌드 볼륨에 맞지 않으므로 슬라이스 할 수 없습니다. 크기에 맞게 모델을 회전하거나 회전하십시오." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "레이어 처리 중" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "정보" @@ -687,29 +661,40 @@ msgid "Configure Per Model Settings" msgstr "모델 별 설정 구성" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "추천" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "사용자 정의" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF 파일" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "노즐" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "프로젝트 파일 {0}에 알 수 없는 기기 유형 {1}이(가) 포함되어 있습니다. 기기를 가져올 수 없습니다. 대신 모델을 가져옵니다." + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "프로젝트 파일 열기" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -720,18 +705,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G 파일" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G 코드 파싱" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "G-코드 세부 정보" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "파일을 보내기 전에 g-코드가 프린터 및 프린터 구성에 적합한 지 확인하십시오. g-코드가 정확하지 않을 수 있습니다." @@ -742,27 +727,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Cura 프로파일" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF 파일" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Cura 프로젝트 3MF 파일" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "3MF 파일 작성 중 오류." + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "업그레이드 선택" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "펌웨어 업그레이드" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -773,79 +758,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "레벨 빌드 플레이트" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "외벽" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "내벽" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "스킨" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "내부채움" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "내부채움 서포트" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "지원하는 인터페이스" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "서포트" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "스커트" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "움직임 경로" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "리트랙션" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "다른" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "알 수 없음" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "미리 슬라이싱한 파일 {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "로그인 실패" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "파일이 이미 있습니다" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -857,23 +842,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "재정의되지 않음" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "선택한 재료가 선택한 기기 또는 구성과 호환되지 않습니다." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "호환되지 않는 재료" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "현재 사용가능한 익스트루더: [% s]에 맞도록 설정이 변경되었습니다" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "설정이 업데이트되었습니다" @@ -902,8 +887,6 @@ msgid "Export succeeded" msgstr "내보내기 완료" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" @@ -911,58 +894,70 @@ msgstr "{0}: {1} 에서 프로파일을 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:190 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" -msgstr "{0} 로 가져올 사용자 정의 프로파일이 없습니다" +msgstr "{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 "{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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." -msgstr "프로파일 {0} 에는 정확하지 않은 데이터가 포함되어 있으므로, 불러올 수 없습니다." +msgstr "프로파일 {0}에는 정확하지 않은 데이터가 포함되어 있으므로, 불러올 수 없습니다." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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 "The machine defined in profile {0} ({1}) doesn’t match with your current machine ({2}), could not import it." +msgstr "프로필 {0}({1})에 정의된 제품이 현재 제품({2})과 일치하지 않으므로, 불러올 수 없습니다." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "{0}에서 프로파일을 가져오지 못했습니다:" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "프로파일 {0}을 성공적으로 가져 왔습니다." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "파일 {0}에 유효한 프로파일이 포함되어 있지 않습니다." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "프로파일 {0}에 알 수 없는 파일 유형이 있거나 손상되었습니다." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "사용자 정의 프로파일" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "프로파일에 품질 타입이 누락되었습니다." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "현재 구성에 대해 품질 타입 {0}을 찾을 수 없습니다." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -989,42 +984,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "모든 파일 (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "사용자 정의 소재" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "사용자 정의" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "\"프린팅 순서\"설정 값으로 인해 갠트리가 프린팅 된 모델과 충돌하지 않도록 출력물 높이가 줄어 들었습니다." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "출력물 크기" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "사용자 데이터 디렉터리에서 압축 파일을 만들 수 없습니다: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "백업" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "적절한 데이터 또는 메타 데이터 없이 Cura 백업을 복원하려고 시도했습니다." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "현재 버전과 일치하지 않는 Cura 백업을 복원하려고 시도했습니다." @@ -1035,32 +1030,32 @@ msgid "Multiplying and placing objects" msgstr "객체를 증가시키고 배치" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "개체 배치 중" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "모든 개체가 출력할 수 있는 최대 사이즈 내에 위치할 수 없습니다" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "객체의 새 위치 찾기" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "위치 찾기" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "위치를 찾을 수 없음" @@ -1078,7 +1073,12 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "

죄송합니다, Ultimaker Cura가 정상적이지 않습니다. \n                    

시작할 때 복구 할 수없는 오류가 발생했습니다. 이 오류는 잘못된 구성 파일로 인해 발생할 수 있습니다. 설정을 백업하고 재설정하는 것이 좋습니다. \n                    

백업은 설정 폴더에서 찾을 수 있습니다. \n                    

문제를 해결하기 위해이 오류 보고서를 보내주십시오. \n " +msgstr "" +"

죄송합니다, Ultimaker Cura가 정상적이지 않습니다. \n" +"                    

시작할 때 복구 할 수없는 오류가 발생했습니다. 이 오류는 잘못된 구성 파일로 인해 발생할 수 있습니다. 설정을 백업하고 재설정하는 것이 좋습니다. \n" +"                    

백업은 설정 폴더에서 찾을 수 있습니다. \n" +"                    

문제를 해결하기 위해이 오류 보고서를 보내주십시오. \n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:102 msgctxt "@action:button" @@ -1111,7 +1111,10 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

Please use the \"Send report\" button to post a bug report automatically to our servers

\n" " " -msgstr "

치명적인 오류가 발생했습니다. 문제를 해결할 수 있도록 이 충돌 보고서를 보내주십시오

\n

\"보고서 전송\" 버튼을 사용하면 버그 보고서가 서버에 자동으로 전달됩니다

\n " +msgstr "" +"

치명적인 오류가 발생했습니다. 문제를 해결할 수 있도록 이 충돌 보고서를 보내주십시오

\n" +"

\"보고서 전송\" 버튼을 사용하면 버그 보고서가 서버에 자동으로 전달됩니다

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1191,223 +1194,233 @@ msgctxt "@action:button" msgid "Send report" msgstr "보고서 전송" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "기기로드 중 ..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "장면 설정 중..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "인터페이스 로드 중 ..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f mm" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "한 번에 하나의 G-코드 파일만 로드 할 수 있습니다. {0} 가져 오기를 건너 뛰었습니다." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "G-코드가 로드되어 있으면 다른 파일을 열 수 없습니다. {0} 가져 오기를 건너 뛰었습니다." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "선택한 모델이 너무 작아서 로드할 수 없습니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "기기 설정" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "프린터" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "프린터 설정" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (너비)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (깊이)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (높이)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "빌드 플레이트 모양" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "중앙이 원점" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "히트 베드" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Gcode 유형" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "프린트헤드 설정" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X 최소값" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "프린트 헤드 왼쪽에서 노즐 중심까지의 거리. \"한 번에 하나\"를 프린팅 할 때 이전 프린팅물과 프린팅 헤드 사이의 충돌을 방지하는 데 사용됩니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y 최소값" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "프린트 헤드 전면에서 노즐 중앙까지의 거리. \"한 번에 하나\"를 프린팅 할 때 이전 프린팅물과 프린팅 헤드 사이의 충돌을 방지하는 데 사용됩니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X 최대값" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "프린트 헤드의 오른쪽에서 노즐 중앙까지의 거리. \"한 번에 하나\"를 프린팅 할 때 이전 프린팅물과 프린팅 헤드 사이의 충돌을 방지하는 데 사용됩니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y 최대값" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "프린트 헤드의 뒤쪽에서 노즐 중심까지의 거리. \"한 번에 하나\"를 프린팅 할 때 이전 프린팅물과 프린팅 헤드 사이의 충돌을 방지하는 데 사용됩니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "갠트리 높이" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "노즐 끝과 갠트리 시스템 사이의 높이 차이 (X 및 Y 축). \"한 번에 하나\"를 프린팅 할 때 이전 프린팅물과 갠트리 사이의 충돌을 방지하는 데 사용됩니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "익스트루더의 수" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "시작 Gcode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "시작시 Gcode 명령이 실행됩니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "종료 Gcode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Gcode 명령어가 맨 마지막에 실행됩니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "노즐 설정" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "노즐 크기" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "호환되는 재료의 직경" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "프린터가 지원하는 필라멘트의 직경. 정확한 직경은 소재 및 / 또는 프로파일에 의해 덮어써집니다." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "노즐 오프셋 X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "노즐 오프셋 Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "냉각 팬 번호" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "익스트루더 시작 Gcode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "익스트루더 종료 Gcode" @@ -1427,12 +1440,20 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Cura 패키지 데이터베이스에 연결할 수 없습니다. 연결을 확인하십시오." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "플러그인" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "재료" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1448,8 +1469,14 @@ msgctxt "@label" msgid "Author" msgstr "원작자" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "다운로드" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "알 수 없는" @@ -1482,17 +1509,57 @@ msgctxt "@action:button" msgid "Back" msgstr "뒤로" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "제거 확인" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "아직 사용 중인 재료 및/또는 프로파일을 제거합니다. 확인하면 다음 재료/프로파일이 기본값으로 재설정됩니다." + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "재료" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "프로파일" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "확인" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." -msgstr "패키지의 변경 사항이 적용되기 전에 Cura를 다시 시작해야 합니다" +msgstr "패키지의 변경 사항이 적용되기 전에 Cura를 다시 시작해야 합니다." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Cura 끝내기" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "커뮤니티 기여" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "커뮤니티 플러그인" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "일반 재료" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "설치됨" @@ -1523,7 +1590,10 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "이 플러그인에는 라이선스가 포함되어 있습니다.\n이 플러그인을 설치하려면 이 라이선스를 수락해야 합니다.\n아래의 약관에 동의하시겠습니까?" +msgstr "" +"이 플러그인에는 라이선스가 포함되어 있습니다.\n" +"이 플러그인을 설치하려면 이 라이선스를 수락해야 합니다.\n" +"아래의 약관에 동의하시겠습니까?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1535,12 +1605,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "거절" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "추천" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "호환성" @@ -1550,10 +1620,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "패키지 가져오는 중..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "연락처" +msgid "Website" +msgstr "웹 사이트" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "이메일" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1566,48 +1641,88 @@ msgid "Changelog" msgstr "변경 내역" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "닫기" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "펌웨어 업데이트" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "펌웨어는 3D 프린터에서 직접 실행되는 소프트웨어입니다. 이 펌웨어는 스텝 모터를 제어하고 온도를 조절하며 프린터를 작동시킵니다." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "새 프린터와 함께 제공되는 펌웨어는 작동하지만 새로운 버전은 더 많은 기능과 향상된 기능을 제공하는 경향이 있습니다." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "펌웨어 자동 업그레이드" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "사용자 정의 펌웨어 업로드" + +#: /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 "프린터와 연결되지 않아 펌웨어를 업데이트할 수 없습니다." + +#: /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 "프린터와 연결이 펌웨어 업그레이드를 지원하지 않아 펌웨어를 업데이트할 수 없습니다." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "사용자 정의 펌웨어 선택" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "펌웨어 업데이트" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "펌웨어 업데이트 중." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "펌웨어 업데이트가 완료되었습니다." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "알 수 없는 오류로 인해 펌웨어 업데이트에 실패했습니다." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "통신 오류로 인해 펌웨어 업데이트에 실패했습니다." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "입/출력 오류로 인해 펌웨어 업데이트에 실패했습니다." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "펌웨어 누락으로 인해 펌웨어 업데이트에 실패했습니다." @@ -1617,356 +1732,421 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "사용자 계약" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "기존 연결" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "이 프린터/그룹은 이미 Cura에 추가되었습니다. 다른 프린터/그룹을 선택하십시오." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "네트워크 프린터에 연결" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" "\n" "Select your printer from the list below:" -msgstr "네트워크를 통해 프린터로 직접 프린팅하려면 네트워크 케이블을 사용하거나 프린터를 WIFI 네트워크에 연결하여 프린터가 네트워크에 연결되어 있는지 확인하십시오. Cura를 프린터에 연결하지 않은 경우에도 USB 드라이브를 사용하여 g 코드 파일을 프린터로 전송할 수 있습니다\n\n아래 목록에서 프린터를 선택하십시오:" +msgstr "" +"네트워크를 통해 프린터로 직접 프린팅하려면 네트워크 케이블을 사용하거나 프린터를 WIFI 네트워크에 연결하여 프린터가 네트워크에 연결되어 있는지 확인하십시오. Cura를 프린터에 연결하지 않은 경우에도 USB 드라이브를 사용하여 g 코드 파일을 프린터로 전송할 수 있습니다\n" +"\n" +"아래 목록에서 프린터를 선택하십시오:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "추가" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "편집" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "제거" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "새로고침" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "프린터가 목록에 없으면 네트워크 프린팅 문제 해결 가이드를 읽어보십시오" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "유형" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "펌웨어 버전" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "주소" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "이 프린터는 Ultimaker 3 프린터 그룹을 호스트하도록 설정되지 않았습니다." +msgid "This printer is not set up to host a group of printers." +msgstr "이 프린터는 프린터 그룹을 호스트하도록 설정되어 있지 않습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "이 프린터는 1% Ultimaker 3 프린터 그룹의 호스트입니다." +msgid "This printer is the host for a group of %1 printers." +msgstr "이 프린터는 1%개 프린터 그룹의 호스트입니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "이 주소의 프린터가 아직 응답하지 않았습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "연결" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "프린터 주소" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "네트워크에 프린터의 IP 주소 또는 호스트 이름을 입력하십시오." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "확인" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "네트워크를 통해 프린팅" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "프린터 선택" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "프린트" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1은 연결된 Ultimaker 3에 연결된 프린터 그룹을 호스트하도록 설정되지 않았습니다" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "네트워크를 통해 프린팅" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "프린터 추가/제거" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" +msgstr "프린터 선택" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "프린팅 작업 페이지를 기본 웹 브라우저로 엽니다." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" +msgstr "사용 불가" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "프린팅 작업보기" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" +msgstr "연결할 수 없음" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "프린팅 준비" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "프린팅" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" msgstr "유효한" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "프린터와의 연결이 끊어졌습니다" +msgid "Aborted" +msgstr "중단됨" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "사용불가" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "알 수 없음" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "사용 중지됨" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "예약된" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "끝마친" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "프린팅 준비" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" -msgstr "조치가 필요함" +msgid "Preparing" +msgstr "준비중인" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" -msgstr "일시 중지됨" +msgid "Pausing" +msgstr "일시 정지 중" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "다시 시작" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" -msgstr "프린터가 중단됨" +msgid "Action required" +msgstr "조치가 필요함" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "프린팅 작업을 수락하지 않음" +msgid "Waiting for: Unavailable printer" +msgstr "대기: 사용할 수 없는 프린터" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "종료시간 : " +msgid "Waiting for: First available" +msgstr "대기: 첫 번째로 사용 가능" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "빌드 플레이트를 정리하십시오" +msgid "Waiting for: " +msgstr "대기: " -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "설정 변경 대기중" +msgid "Configuration change" +msgstr "구성 변경" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "프린팅 작업" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "프린팅" +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "할당된 프린터 %1의 구성을 다음과 같이 변경해야 합니다:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "프린터 %1이(가) 할당되었으나 작업에 알 수 없는 재료 구성이 포함되어 있습니다." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 +msgctxt "@label" +msgid "Change material %1 from %2 to %3." +msgstr "재료 %1을(를) %2에서 %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 "%3을(를) 재료 %1(으)로 로드합니다(이 작업은 무효화할 수 없음)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "PrintCore %1을(를) %2에서 %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 "빌드 플레이트를 %1(으)로 변경합니다(이 작업은 무효화할 수 없음)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "무시하기" + +#: /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 "호환되지 않는 구성이 있는 인쇄 작업을 시작하면 3D 프린터가 손상될 수 있습니다. 구성을 재정의하고 %1을(를) 인쇄하시겠습니까?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:435 +msgctxt "@window:title" +msgid "Override configuration configuration and start print" +msgstr "구성 재정의 및 인쇄 시작" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "유리" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "알루미늄" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "대기열 관리" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "대기 중" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "프린터" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "프린팅" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "프린터 보기" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "프린터 관리" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "맨 위로 이동" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "삭제" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "재개" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "중지" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "중단" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "%1(을)를 대기열의 맨 위로 이동하시겠습니까?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "인쇄 작업을 맨 위로 이동" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "%1(을)를 삭제하시겠습니까?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "인쇄 작업 삭제" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "%1(을)를 정말로 중지하시겠습니까?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "프린팅 중단" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "프린터에 연결" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "Cura에 프린터 설정 로드" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "설정 활성화" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "Cura에 프린터 설정 로드" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "색 구성표" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "재료 색상" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "라인 유형" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "이송 속도" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "레이어 두께" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "호환 모드" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "이동 표시" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "도움말 보이기" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "셸 표시" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "내부채움 표시" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "상단 레이어 만 표시" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "상단에 5 개의 세부 레이어 표시" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "위 / 아래" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "내벽" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "최소" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "최대" @@ -1981,17 +2161,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "후처리 스크립트" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "스크립트 추가" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "설정" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "활성 사후 처리 스크립트 변경" @@ -2024,7 +2204,7 @@ msgstr "이미지 변환 ..." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:33 msgctxt "@info:tooltip" msgid "The maximum distance of each pixel from \"Base.\"" -msgstr "\"Base\"에서 각 픽셀까지의 최대 거리" +msgstr "\"Base\"에서 각 픽셀까지의 최대 거리." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:38 msgctxt "@action:label" @@ -2086,53 +2266,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "스무딩(smoothing)" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "메쉬 유형" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "일반 모델" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "서포터로 프린팅" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "다른 모델과 오버랩되도록 지원하지 않음" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "다른 모델과의 오버랩에 대한 설정 수정" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "다른 모델의 내부채움에 대한 설정 수정" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "설정 선택" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "이 모델에 맞게 사용자 정의 설정을 선택하십시오" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "필터..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "모두 보이기" @@ -2154,13 +2334,13 @@ msgid "Create new" msgstr "새로 만들기" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "요약 - Cura 프로젝트" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "프린터 설정" @@ -2177,18 +2357,19 @@ msgid "Update" msgstr "업데이트" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "유형" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "프린터 그룹" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "프로파일 설정" @@ -2200,19 +2381,20 @@ msgstr "프로파일의 충돌을 어떻게 해결해야합니까?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "이름" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "프로파일에 없음" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2240,7 +2422,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "재료의 충돌은 어떻게 해결되어야합니까?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "표시 설정" @@ -2251,13 +2433,13 @@ msgid "Mode" msgstr "종류" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "표시 설정 :" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "1 out of %2" @@ -2313,36 +2495,6 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "다음 위치로 이동" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "펌웨어 업그레이드" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "펌웨어는 3D 프린터에서 직접 실행되는 소프트웨어입니다. 이 펌웨어는 스텝 모터를 제어하고 온도를 조절하며 프린터를 작동시킵니다." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "새 프린터와 함께 제공되는 펌웨어는 작동하지만 새로운 버전은 더 많은 기능과 향상된 기능을 제공하는 경향이 있습니다." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "펌웨어 자동 업그레이드" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "사용자 정의 펌웨어 업로드" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "사용자 정의 펌웨어 선택" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" @@ -2490,27 +2642,11 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "프린트물을 제거하십시오" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "중지" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "재개" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "프린팅 중단" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "프린팅 중단" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2526,7 +2662,9 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "일부 프로파일 설정을 수정했습니다.\n이러한 설정을 유지하거나 삭제 하시겠습니까?" +msgstr "" +"일부 프로파일 설정을 수정했습니다.\n" +"이러한 설정을 유지하거나 삭제 하시겠습니까?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2544,19 +2682,17 @@ msgid "Customized" msgstr "사용자 정의" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "항상 묻기" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "최소하고 다시 묻지않기" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "계속하고 다시 묻지않기" @@ -2576,101 +2712,179 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "새 프로파일 만들기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "정보" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "직경 변경 확인" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" msgstr "새 필라멘트의 직경은 %1 mm로 설정되었으며, 현재 압출기와 호환되지 않습니다. 계속하시겠습니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "표시 이름" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "상표" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "재료 유형" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "색깔" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "속성" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "밀도" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "직경" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "필라멘트 비용" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "필라멘트 무게" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "필라멘트 길이" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "미터 당 비용" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "이 재료는 %1에 연결되어 있으며 일부 속성을 공유합니다." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "재료 연결 해제" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "설명" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "접착 정보" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "프린팅 설정" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "활성화" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "생성" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "복제" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "가져오기" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "내보내기" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "프린터" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "제거 확인" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "%1을 제거 하시겠습니까? 이것은 취소 할 수 없습니다!" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "재료 가져 오기" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "재료를 가져올 수 없습니다" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "재료를 성공적으로 가져왔습니다" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "재료 내보내기" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "재료를 내보내는데 실패했습니다" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "재료를 성공적으로 내보냈습니다" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2707,289 +2921,287 @@ msgid "Unit" msgstr "단위" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "일반" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "인터페이스" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "언어:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "통화:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "테마:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "이러한 변경 사항을 적용하려면 응용 프로그램을 다시 시작해야합니다." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "설정이 변경되면 자동으로 슬라이싱 합니다." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "자동으로 슬라이싱" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "뷰포트 동작" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "지원되지 않는 모델 영역을 빨간색으로 강조 표시하십시오. 서포트가 없으면 이 영역이 제대로 프린팅되지 않습니다." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "오버행 표시" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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 "모델을 선택하면 모델이 뷰의 가운데에 오도록 카메라를 이동합니다" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "항목을 선택하면 카메라를 중앙에 위치" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "큐라의 기본 확대 동작을 반전시켜야 합니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "카메라 줌의 방향을 반전시키기." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "확대가 마우스 방향으로 이동해야 합니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "마우스 방향으로 확대" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "모델을 더 이상 교차시키지 않도록 이동해야합니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "모델이 분리되어 있는지 확인" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "모델을 빌드 플레이트에 닿도록 아래로 움직여야합니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "모델을 빌드 플레이트에 자동으로 놓기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "g-code 리더에 주의 메시지를 표시하기." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "g-code 리더의 주의 메시지" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "레이어가 호환 모드로 강제 설정되어야합니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "레이어 뷰 호환성 모드로 전환 (다시 시작해야 함)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "파일 열기 및 저장" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "크기가 너무 큰 경우 모델을 빌드 볼륨에 맞게 조정해야합니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "큰 모델의 사이즈 수정" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "단위가 밀리미터가 아닌 미터 단위 인 경우 모델이 매우 작게 나타날 수 있습니다. 이 모델을 확대할까요?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "매우 작은 모델의 크기 조정" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "모델을 로드한 후에 선택해야 합니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "로드된 경우 모델 선택" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "프린터 이름에 기반한 접두어가 프린팅 작업 이름에 자동으로 추가되어야합니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "작업 이름에 기기 접두어 추가" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "프로젝트 파일을 저장할 때 요약이 표시되어야합니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "프로젝트 저장시 요약 대화 상자 표시" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "프로젝트 파일을 열 때 기본 동작" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "프로젝트 파일을 열 때 기본 동작 " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "항상 물어보기" +msgid "Always ask me this" +msgstr "항상 묻기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "항상 프로젝트로 열기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "항상 모델 가져 오기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "프로파일을 변경하고 다른 프로파일로 전환하면 수정 사항을 유지할지 여부를 묻는 대화 상자가 표시됩니다. 기본 행동을 선택하면 해당 대화 상자를 다시 표시 하지 않을 수 있습니다." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "프로파일 덮어쓰기" +msgid "Profiles" +msgstr "프로파일" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "다른 프로파일로 변경하는 경우 변경된 설정값에 대한 기본 동작 " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "항상 변경된 설정 삭제" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "항상 변경된 설정을 새 프로파일로 전송" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "보안" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "Cura가 프로그램이 시작될 때 업데이트를 확인할까요?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "시작시 업데이트 확인" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "프린터에 대한 익명의 데이터를 Ultimaker로 보낼까요? 모델, IP 주소 또는 기타 개인 식별 정보는 전송되거나 저장되지 않습니다." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(익명) 프린터 정보 보내기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "추가 정보" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "실험적 설정" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "다수의 빌드 플레이트 사용하기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "다수의 빌드 플레이트 사용하기(다시 시작해야 합니다)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "새롭게 로드한 모델을 빌드 플레이트에 정렬할까요? 다수의 빌드 플레이트 사용(실험적 설정)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "로드 중인 대상물을 정렬하지 마십시오" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "프린터" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "활성화" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3007,7 +3219,7 @@ msgid "Connection:" msgstr "연결:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "프린터가 연결되어 있지 않습니다." @@ -3033,7 +3245,7 @@ msgid "Aborting print..." msgstr "프린팅 중단 중 ..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "프로파일" @@ -3048,18 +3260,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "복제" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "가져오기" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "내보내기" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3070,18 +3270,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "프로파일 복제하기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "제거 확인" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "%1을 제거 하시겠습니까? 이것은 취소 할 수 없습니다!" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3102,228 +3290,202 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "프린터: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "보호 된 프로파일" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "사용자 정의 프로파일" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "현재 설정 / 재정의 프로파일 업데이트" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "현재 변경 사항 삭제" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "이 프로파일은 프린터에서 지정한 기본값을 사용하므로 아래 목록에 아무런 설정/재정의가 없습니다." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "현재 설정이 선택한 프로파일과 일치합니다." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "전역 설정" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "재료" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "생성" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "복제" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "재료 가져 오기" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr "재료를 가져올 수 없습니다" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "재료를 성공적으로 가져왔습니다" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "재료 내보내기" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "재료를 내보내는데 실패했습니다" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "재료를 성공적으로 내보냈습니다" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "프린터" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "프린터 추가" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "프린터 이름 :" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "프린터 추가" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "제목 없음" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "Cura 소개" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "버전: %1" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "3D 프린팅을 위한 엔드 투 엔트 솔루션." -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "Cura는 커뮤니티와 공동으로 Ultimaker B.V.에 의해 개발되었습니다.\nCura는 다음의 오픈 소스 프로젝트를 사용합니다:" +msgstr "" +"Cura는 커뮤니티와 공동으로 Ultimaker B.V.에 의해 개발되었습니다.\n" +"Cura는 다음의 오픈 소스 프로젝트를 사용합니다:" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "그래픽 사용자 인터페이스" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "애플리케이션 프레임 워크" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "GCode 생성기" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "프로세스간 통신 라이브러리" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "프로그래밍 언어" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "GUI 프레임 워크" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "GUI 프레임 워크 바인딩" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "C/C ++ 바인딩 라이브러리" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "데이터 교환 형식" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "과학 컴퓨팅을 위한 라이브러리" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "더 빠른 수학연산을 위한 라이브러리" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "STL 파일 처리를 위한 라이브러리" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "평면 개체 처리를 위한 지원 라이브러리" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "삼각형 메쉬 처리를 위한 지원 라이브러리" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "복잡한 네트워크 분석을 위한 지원 라이브러리" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "3MF 파일 처리를 위한 라이브러리" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "파일 메타데이터 및 스트리밍을 위한 지원 라이브러리" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "직렬 통신 라이브러리" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "ZeroConf discovery 라이브러리" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "다각형 클리핑 라이브러리" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "Python HTTP 라이브러리" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "폰트" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "SVG 아이콘" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "Linux 교차 배포 응용 프로그램 배포" @@ -3333,67 +3495,73 @@ msgctxt "@label" msgid "Profile:" msgstr "프로파일:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "일부 설정/대체 값은 프로파일에 저장된 값과 다릅니다.\n\n프로파일 매니저를 열려면 클릭하십시오." +msgstr "" +"일부 설정/대체 값은 프로파일에 저장된 값과 다릅니다.\n" +"\n" +"프로파일 매니저를 열려면 클릭하십시오." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "찾기..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "모든 익스트루더에 값 복사" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "변경된 사항을 모든 익스트루더에 복사" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "이 설정 숨기기" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "이 설정을 표시하지 않음" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "이 설정을 계속 표시하십시오" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "설정 보기..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "모두 축소" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "모두 확장" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "일부 숨겨진 설정은 일반적인 계산 값과 다른 값을 사용합니다.\n\n이 설정을 표시하려면 클릭하십시오." +msgstr "" +"일부 숨겨진 설정은 일반적인 계산 값과 다른 값을 사용합니다.\n" +"\n" +"이 설정을 표시하려면 클릭하십시오." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3405,31 +3573,37 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "영향을 받다" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "이 설정은 항상 모든 익스트루더 사이에 공유됩니다. 여기서 변경하면 모든 익스트루더에 대한 값이 변경됩니다." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "이 값은 익스트루더마다 결정됩니다 " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "이 설정에는 프로파일과 다른 값이 있습니다.\n\n프로파일 값을 복원하려면 클릭하십시오." +msgstr "" +"이 설정에는 프로파일과 다른 값이 있습니다.\n" +"\n" +"프로파일 값을 복원하려면 클릭하십시오." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "이 설정은 일반적으로 계산되지만 현재는 절대 값이 설정되어 있습니다.\n\n계산 된 값을 복원하려면 클릭하십시오." +msgstr "" +"이 설정은 일반적으로 계산되지만 현재는 절대 값이 설정되어 있습니다.\n" +"\n" +"계산 된 값을 복원하려면 클릭하십시오." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3467,7 +3641,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "연결된 프린터에 사용자 정의 G 코드 명령을 보냅니다. ‘Enter’키를 눌러 명령을 전송하십시오." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "익스트루더" @@ -3520,7 +3694,7 @@ msgid "The nozzle inserted in this extruder." msgstr "이 익스트루더에 삽입 된 노즐." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "빌드 플레이트" @@ -3545,6 +3719,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "프린팅하기 전에 베드를 미리 가열하십시오. 가열되는 동안 계속해서 프린팅물을 조정할 수 있으며, 프린팅 준비가 되면 베드가 가열 될 때까지 기다릴 필요가 없습니다." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "재료" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "즐겨찾기" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "일반" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3560,12 +3749,12 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "보기(&V)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "카메라 위치(&C)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "빌드 플레이트(&B)" @@ -3575,12 +3764,12 @@ msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "표시 설정" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "모든 설정 보기" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "보기 설정 관리..." @@ -3637,346 +3826,347 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "프린팅 설정 사용 안 함\nG-코드 파일은 수정할 수 없습니다" +msgstr "" +"프린팅 설정 사용 안 함\n" +"G-코드 파일은 수정할 수 없습니다" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "00시간 00분" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "시간 사양" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "비용 사양" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "%1m" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "%1g" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "총계:" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." msgstr "권장 프린팅 설정

선택한 프린터, 재료 및 품질에 대한 권장 설정으로 프린팅하십시오." -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "사용자 정의 프린팅 설정

미세하게 슬라이싱 설정을 조절하여 프린팅하십시오." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "활성화된 프린트" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "작업 이름" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "프린팅 시간" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "예상 남은 시간" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" +msgid "Toggle Full Screen" msgstr "전채 화면 전환" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "되돌리기(&U)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "다시하기(&R)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "종료(&Q)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "3D 보기(&3)" +msgid "3D View" +msgstr "3D 보기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "앞에서 보기(&F)" +msgid "Front View" +msgstr "앞에서 보기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "위에서 보기(&T)" +msgid "Top View" +msgstr "위에서 보기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "왼쪽에서 보기(&L)" +msgid "Left Side View" +msgstr "왼쪽에서 보기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "오른쪽에서 보기(&R)" +msgid "Right Side View" +msgstr "오른쪽에서 보기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Cura 구성 ..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "프린터 추가..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "프린터 관리 ..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "재료 관리..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "현재 설정으로로 프로파일 업데이트" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "현재 변경 사항 무시" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "현재 설정으로 프로파일 생성..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "프로파일 관리..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "온라인 문서 표시" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "버그 리포트" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." +msgid "About..." msgstr "소개..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" msgstr[0] "선택한 모델 삭제" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "선택한 모델 중심에 놓기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "선택한 모델 복제" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "모델 삭제" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "플랫폼중심에 모델 위치하기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "모델 그룹화" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "모델 그룹 해제" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "모델 합치기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "모델 복제..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" +msgid "Select All Models" msgstr "모든 모델 선택" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" +msgid "Clear Build Plate" msgstr "빌드 플레이트 지우기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" +msgid "Reload All Models" msgstr "모든 모델 다시 로드" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "모든 모델을 모든 빌드 플레이트에 정렬" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "모든 모델 정렬" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "선택한 모델 정렬" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "모든 모델의 위치 재설정" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "모든 모델의 변환 재설정" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "파일 열기..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "새로운 프로젝트..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "엔진 로그 표시..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "설정 폴더 표시" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "패키지 찾아보기..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "사이드바 확장/축소" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "3D 모델을 로드하십시오" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "슬라이스 준비 완료" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "슬라이싱..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "%1 준비 완료" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "슬라이스 할 수 없음" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "슬라이스 사용 불가" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "현재 프린트작업 슬라이스" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "슬라이싱 프로세스 취소" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "준비" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "취소" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "활성 출력 장치 선택" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "파일 열기" @@ -3996,129 +4186,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "파일" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "저장(&S)..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "내보내기(&E)..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "선택 사항을 파일에 저장" +msgid "Export Selection..." +msgstr "내보내기 선택..." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "다른 이름으로 저장..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "프로젝트 저장(&P)..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" -msgstr "편집" +msgstr "편집(&E)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" -msgstr "보기" +msgstr "보기(&V)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" -msgstr "설정" +msgstr "설정(&S)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" -msgstr "프린터" +msgstr "프린터(&P)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" -msgstr "재료" +msgstr "재료(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "활성 익스트루더로 설정" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "익스트루더 사용" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "익스트루더 사용하지 않음" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" -msgid "&Profile" -msgstr "프로파일" +msgid "&Build plate" +msgstr "빌드 플레이트(&B)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" +msgid "&Profile" +msgstr "프로파일(&P)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" -msgstr "확장 프로그램" +msgstr "확장 프로그램(&X)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" -msgstr "도구 상자" +msgstr "도구 상자(&T)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" -msgstr "환경설정" +msgstr "환경설정(&R)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" -msgstr "도움말" +msgstr "도움말(&H)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "다시 시작한 후에 이 패키지가 설치됩니다." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "파일 열기" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "설정" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "새 프로젝트" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "새 프로젝트를 시작 하시겠습니까? 빌드 플레이트 및 저장하지 않은 설정이 지워집니다." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "Cura 닫기" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "Cura를 정말로 종료하시겠습니까?" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "패키지 설치" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "파일 열기" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." msgstr "선택한 파일 내에 하나 이상의 G-코드 파일이 있습니다. 한 번에 하나의 G-코드 파일 만 열 수 있습니다. G-코드 파일을 열려면 하나만 선택하십시오." @@ -4128,112 +4334,107 @@ msgctxt "@title:window" msgid "Save Project" msgstr "프로젝트 저장" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "빌드 플레이트" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "%1익스트루더" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & 재료" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "프로젝트 요약을 다시 저장하지 마십시오" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "저장" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "레이어 높이" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "이 품질 프로파일은 현재 재료 및 노즐 설정에 사용할 수 없습니다. 이 품질 프로파일을 사용하려면 이 값을 변경하십시오" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "사용자 지정 프로파일이 현재 활성 상태입니다. 품질 슬라이더를 실행하려면 사용자 지정 탭에서 기본 품질 프로파일을 선택하십시오" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "프린팅 속도" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "천천히" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "빨리" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "일부 프로파일 설정을 수정했습니다. 이러한 설정을 변경하려면 사용자 지정 모드로 이동하십시오." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "내부채움" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "점차적인 내부채움은 점차적으로 빈 공간 채우기의 양을 증가시킵니다." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "점진적으로 사용" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "서포트 생성" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "오버행이 있는 모델 서포트를 생성합니다. 이러한 구조가 없으면 이러한 부분이 프린팅 중에 붕괴됩니다." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "서포트에 사용할 익스트루더를 선택하십시오. 이렇게 하면 모형 아래에 지지 구조가 만들어져 모델이 중간 공기에서 처지거나 프린팅되는 것을 방지합니다." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "빌드 플레이트 고정" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "브림이나 라프트를 사용합니다. 이렇게하면 출력물 주변이나 아래에 평평한 영역이 추가되어 나중에 쉽게 자를 수 있습니다." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "프린팅물 개선에 도움이 필요하십니까?Ultimaker Troubleshooting Guides 읽기" @@ -4279,22 +4480,22 @@ msgctxt "@label" msgid "Printer type" msgstr "프린터 유형" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "재료" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "이 재료 조합과 함께 접착 시트 또는 접착제를 사용하십시오" +msgid "Use glue with this material combination" +msgstr "이 재료 조합과 함께 접착제를 사용하십시오" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "호환성 확인" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Ultimaker.com의 재료 호환성을 확인하려면 클릭하십시오." @@ -4384,16 +4585,6 @@ msgctxt "name" msgid "God Mode" msgstr "God 모드" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "G-코드를 받아서 WiFi를 통해 Doodle3D WiFi-Box로 보냅니다." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle 3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4404,6 +4595,16 @@ msgctxt "name" msgid "Changelog" msgstr "변경 내역" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "펌웨어 업데이트를 위한 기계 동작을 제공합니다." + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "펌웨어 업데이터" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." @@ -4474,16 +4675,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "준비 단계" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "직접 스크립트 편집을 위한 편집창 제공." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "라이브 스크립팅 도구" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4497,7 +4688,7 @@ msgstr "이동식 드라이브 출력 장치 플러그인" #: UM3NetworkPrinting/plugin.json msgctxt "description" msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Ultimaker 3 프린터에 대한 네트워크 연결을 관리합니다" +msgstr "Ultimaker 3 프린터에 대한 네트워크 연결을 관리합니다." #: UM3NetworkPrinting/plugin.json msgctxt "name" @@ -4594,16 +4785,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "레거시 Cura 프로파일 리더" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Cura에서 직접 Blender 파일을 열도록 도와줍니다." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Blender 통합(실험 중)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4654,6 +4835,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "2.7에서 3.0으로 버전 업그레이드" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "Cura 3.4에서 Cura 3.5로 구성을 업그레이드합니다." + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "3.4에서 3.5로 버전 업그레이드" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4794,6 +4985,298 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura 프로파일 리더" +#~ msgctxt "@warning:status" +#~ msgid "Please generate G-code before saving." +#~ msgstr "저장하기 전에 G-code를 생성하십시오." + +#~ msgctxt "@item:inmenu" +#~ msgid "Profile Assistant" +#~ msgstr "프로파일 어시스턴트" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Profile Assistant" +#~ msgstr "프로파일 어시스턴트" + +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "펌웨어 업그레이드" + +#~ msgctxt "@label unknown material" +#~ msgid "Unknown" +#~ msgstr "알 수 없음" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "No custom profile to import in file {0}" +#~ msgstr "{0} 로 가져올 사용자 정의 프로파일이 없습니다" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "This profile {0} contains incorrect data, could not import it." +#~ msgstr "프로파일 {0} 에는 정확하지 않은 데이터가 포함되어 있으므로, 불러올 수 없습니다." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "The machine defined in profile {0} ({1}) doesn’t match with your current machine ({2}), could not import it." + +#~ msgctxt "@title:window" +#~ msgid "Confirm uninstall " +#~ msgstr "제거 확인 " + +#~ msgctxt "@label:status" +#~ msgid "Paused" +#~ msgstr "일시 중지됨" + +#~ msgctxt "@action:button" +#~ msgid "Previous" +#~ msgstr "이전" + +#~ msgctxt "@action:button" +#~ msgid "Next" +#~ msgstr "다음" + +#~ msgctxt "@label" +#~ msgid "Tip" +#~ msgstr "팁" + +#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +#~ msgid "%1m / ~ %2g / ~ %4 %3" +#~ msgstr "%1m / ~ %2g / ~ %4 %3" + +#~ msgctxt "@label Print estimates: m for meters, g for grams" +#~ msgid "%1m / ~ %2g" +#~ msgstr "%1m / ~ %2g" + +#~ msgctxt "@label" +#~ msgid "Print experiment" +#~ msgstr "인쇄 실험" + +#~ msgctxt "@label" +#~ msgid "Checklist" +#~ msgstr "체크리스트" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "펌웨어 업그레이드" + +#~ msgctxt "description" +#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +#~ msgstr "재료 제조사가 드롭 인 UI를 사용하여 새로운 재료와 품질 프로파일을 만들 수 있게 합니다." + +#~ msgctxt "name" +#~ msgid "Print Profile Assistant" +#~ msgstr "프린트 프로파일 어시스턴트" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box로 프린팅" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box로 프린팅" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Doodle3D Connect에 연결" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Doodle3D Connect에 데이터 보내기" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Doodle3D Connect에 데이터를 보낼 수 없습니다. 다른 작업이 진행중인가요?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Doodle3D Connect에 데이터 저장" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Doodle3D Connect에 파일 전송" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Connect 열기..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Doodle3D Connect 웹 인터페이스 열기" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Blender 파일" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "\"{}\" 품질을 사용하여 내보낼 수 없습니다!\n" +#~ " \"{}\"(으)로 돌아갑니다." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "연락처" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "이 프린터는 Ultimaker 3 프린터 그룹을 호스트하도록 설정되지 않았습니다." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "이 프린터는 1% Ultimaker 3 프린터 그룹의 호스트입니다." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1은 연결된 Ultimaker 3에 연결된 프린터 그룹을 호스트하도록 설정되지 않았습니다" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "프린터 추가/제거" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "프린팅 작업 페이지를 기본 웹 브라우저로 엽니다." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "프린팅 작업보기" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "프린팅 준비" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "프린팅" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "유효한" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "프린터와의 연결이 끊어졌습니다" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "사용불가" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "알 수 없음" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "사용 중지됨" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "예약된" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "프린팅 준비" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "프린터가 중단됨" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "프린팅 작업을 수락하지 않음" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "종료시간 : " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "빌드 플레이트를 정리하십시오" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "설정 변경 대기중" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "프린팅 작업" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "프린터" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "프린터 보기" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "중지" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "재개" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "프린팅 중단" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "항상 물어보기" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "프로파일 덮어쓰기" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "새롭게 로드한 모델을 빌드 플레이트에 정렬할까요? 다수의 빌드 플레이트 사용(실험적 설정)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "로드 중인 대상물을 정렬하지 마십시오" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "선택 사항을 파일에 저장" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "다른 이름으로 저장..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "프로젝트 저장(&P)..." + +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "이 재료 조합과 함께 접착 시트 또는 접착제를 사용하십시오" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "G-코드를 받아서 WiFi를 통해 Doodle3D WiFi-Box로 보냅니다." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle 3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "직접 스크립트 편집을 위한 편집창 제공." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "라이브 스크립팅 도구" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Cura에서 직접 Blender 파일을 열도록 도와줍니다." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Blender 통합(실험 중)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "모델 검사기 경고" @@ -5061,10 +5544,6 @@ msgstr "Cura 프로파일 리더" #~ msgid "Browse plugins..." #~ msgstr "플러그인 찾아보기..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "빌드 플레이트(&B)" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "플러그인" @@ -5290,14 +5769,6 @@ msgstr "Cura 프로파일 리더" #~ "\n" #~ "죄송합니다!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "프로파일 어시스턴트" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "프로파일 어시스턴트" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "로드 된 재료가 없음" @@ -5428,14 +5899,6 @@ msgstr "Cura 프로파일 리더" #~ msgid "Configure setting visiblity..." #~ msgstr "표시 설정..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "자동: %1" @@ -5472,14 +5935,6 @@ msgstr "Cura 프로파일 리더" #~ msgid "GCode Profile Reader" #~ msgstr "GCode 프로파일 리더" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "재료 제조사가 드롭 인 UI를 사용하여 새로운 재료와 품질 프로파일을 만들 수 있게 합니다." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "프린트 프로파일 어시스턴트" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "SolidWorks 파일을 여는 중 오류가 발생했습니다! 문제없이 SolidWorks에서 파일을 열 수 있는지 확인하십시오" @@ -5675,10 +6130,6 @@ msgstr "Cura 프로파일 리더" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "이 프린터는 Ultimaker 3에 연결된 프린터 그룹의 호스트입니다" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "준비중인" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "완료일: " diff --git a/resources/i18n/ko_KR/fdmextruder.def.json.po b/resources/i18n/ko_KR/fdmextruder.def.json.po index bee8d815f4..bbfe9429fb 100644 --- a/resources/i18n/ko_KR/fdmextruder.def.json.po +++ b/resources/i18n/ko_KR/fdmextruder.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" -"PO-Revision-Date: 2018-04-19 13:27+0900\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 14:25+0100\n" "Last-Translator: Jinbuhm Kim \n" "Language-Team: Jinbum Kim , Korean \n" "Language: ko_KR\n" @@ -168,6 +168,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "프린팅이 시작될 때 노즐이 시작하는 위치의 Z 좌표입니다." +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "익스트루더 프린팅 냉각 팬" + +#: 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 "이 익스트루더와 관련된 프린팅 냉각 팬의 개수. 각 익스트루더마다 다른 프린팅 냉각 팬이 있을 때만 기본값 0에서 변경하십시오." + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/ko_KR/fdmprinter.def.json.po b/resources/i18n/ko_KR/fdmprinter.def.json.po index 381fc58c15..37392395ef 100644 --- a/resources/i18n/ko_KR/fdmprinter.def.json.po +++ b/resources/i18n/ko_KR/fdmprinter.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" -"PO-Revision-Date: 2018-04-19 13:26+0900\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-10-01 14:10+0100\n" "Last-Translator: Jinbuhm Kim \n" "Language-Team: Jinbum Kim , Korean \n" "Language: ko_KR\n" @@ -82,6 +82,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "재료의 GUID. 자동으로 설정됩니다. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "직경" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "사용 된 필라멘트의 직경을 조정합니다. 이 값을 사용될 필라멘트의 직경과 일치시킵니다." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1057,6 +1067,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "지그재그" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "상단/하단 다각형 연결" + +#: 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 "스킨 경로가 나란히 이어지는 상단/하단 스킨 경로를 연결합니다. 동심원 패턴의 경우 이 설정을 사용하면 이동 시간이 크게 감소하지만, 내부채움의 중간에 연결될 수 있기 때문에 이 기능은 상단 표면 품질을 저하시킬 수 있습니다." + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1137,6 +1157,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "이미 벽이있는 곳에 프린팅되는 내부 벽 부분에 대한 흐름을 보정하십시오." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "최소 압출량" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "벽 라인에 대한 최소 허용 백분율 흐름 벽 오버랩 보상이 기존 벽과 가까울 때 벽의 흐름을 줄입니다. 흐름이 이 값보다 작은 벽은 이동으로 대체됩니다. 이 설정을 사용하는 경우 벽 오버랩 보상을 사용하고 내벽 전에 외벽을 인쇄해야 합니다." + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "리트렉션 선호" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "이 옵션을 사용하면 흐름이 최소 흐름 임계 값보다 낮은 벽을 교체하는 이동에 대해 빗질 대신에 리트렉션을 사용합니다." + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1454,8 +1494,8 @@ msgstr "내부채움 패턴" #: 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "프린트 내부채움 재료의 패턴입니다. 선과 지그재그 내부채움이 레이어를 하나 걸러서 방향을 바꾸므로 재료비가 절감됩니다. 격자, 삼각형, 삼-육각형, 입방체, 옥텟, 쿼터 큐빅, 십자, 동심원 패턴이 레이어마다 프린팅됩니다. 입방체, 4분 입방체, 옥텟 내부채움이 레이어마다 변경되므로 각 방향으로 힘이 더 균등하게 분산됩니다." +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 "프린트 충진 재료의 패턴입니다. 선과 갈지자형 충진이 레이어를 하나 걸러서 방향을 바꾸므로 재료비가 절감됩니다. 격자, 삼각형, 삼육각형, 입방체, 옥텟, 4분 입방체, 십자, 동심원 패턴이 레이어마다 완전히 인쇄됩니다. 자이로이드, 입방체, 4분 입방체, 옥텟 충진이 레이어마다 변경되므로 각 방향으로 힘이 더 균등하게 분산됩니다." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1502,11 +1542,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "동심원" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "동심원 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1522,6 +1557,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "십자형 3D" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "자이로이드" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1532,6 +1572,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "내벽의 형태를 따라가는 선을 사용하여 내부채움 패턴과 내벽이 만나는 끝을 연결합니다. 이 설정을 사용하면 내부채움이 벽에 더 잘 붙게되어 내부채움이 수직면의 품질에 미치는 영향을 줄일 수 있습니다. 이 설정을 해제하면 사용되는 재료의 양이 줄어듭니다." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "내부채움 다각형 연결" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "스킨 경로가 나란히 이어지는 내부채움 경로를 연결합니다. 여러 개의 폐다각형으로 구성되는 내부채움 패턴의 경우 이 설정을 사용하면 이동 시간이 크게 감소합니다." + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1562,6 +1612,28 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "내부채움 패턴이 Y축을 따라 이 거리만큼 이동합니다." +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "내부채움 선 승수" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "각 내부채움 선을 여러 개의 선으로 변환합니다. 추가되는 선은 다른 선을 교차하지 않고, 다른 선을 피해 변환됩니다. 내부채움을 빽빽하게 만들지만, 인쇄 및 재료 사용이 증가합니다." + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "여분의 내부채움 벽 수" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "내부채움 영역 주변에 여분의 벽을 추가합니다. 이러한 벽은 상단/하단 스킨 라인이 늘어지는 것을 줄여줄 수 있습니다. 일부 여분 재료를 사용해도 같은 품질을 유지하는 데 필요한 필요한 상단/하단 스킨 층이 감소한다는 의미입니다.\n이 기능을 올바르게 구성하는 경우 내부채움 다각형 연결과 함께 사용해 이동 또는 리트랙션없이 모든 내부채움을 단일 돌출 경로에 연결할 수 있습니다." + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1872,16 +1944,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "첫 번째 레이어에서 가열 된 빌드 플레이트에 사용되는 온도." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "직경" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "사용 된 필라멘트의 직경을 조정합니다. 이 값을 사용될 필라멘트의 직경과 일치시킵니다." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2719,8 +2781,8 @@ msgstr "Combing 모드" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "빗질은 여행 할 때 이미 인쇄 된 영역 내에 노즐을 유지합니다. 이로 인해 여행 이동이 약간 더 길어 지지만 수축의 필요성은 줄어 듭니다. 빗질이 꺼져 있으면 재료가 후퇴하고 노즐이 직선으로 다음 점으로 이동합니다. 또한 infill 내에서만 빗질하여 상 / 하 피부 영역을 빗질하는 것을 피할 수 있습니다." +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "Combing은 이동할 때 이미 인쇄 된 영역 내에 노즐을 유지합니다. 이로 인해 이동이 약간 더 길어 지지만 리트렉션의 필요성은 줄어 듭니다. Combing이 꺼져 있으면 재료가 후퇴하고 노즐이 직선으로 다음 점으로 이동합니다. 또한 내부채움 내에서만 빗질하여 상단/하단 스킨 영역을 Combing하는 것을 피할 수 있습니다. '내부채움 내' 옵션은 이전 Cura 릴리즈에서 '스킨에 없음' 옵션과 정확하게 동일한 동작을 합니다." #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2737,6 +2799,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "스킨에 없음" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "내부채움 내" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3117,11 +3184,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "동심원의" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "동심원 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3182,6 +3244,56 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "프린팅 된 서포트 구조 선 사이의 거리. 이 설정은 서포트 밀도로 계산됩니다." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "초기 레이어 서포트 선 거리" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "인쇄된 초기 레이어 서포트 구조 선 사이의 거리. 이 설정은 서포트 밀도로 계산됩니다." + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "서포트 내부채움 선 방향" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "서포트에 대한 내부채움 패턴 방향. 서포트 내부채움 패턴은 수평면에서 회전합니다." + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "서포트 브림 사용" + +#: 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 "첫 번째 레이어의 서포트 내부채움 영역 내에서 브림을 생성합니다. 이 브림은 서포트 주변이 아니라 아래에 인쇄됩니다. 이 설정을 사용하면 빌드 플레이트에 대한 서포트력이 향상됩니다." + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "서포트 브림 폭" + +#: 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 "서포트 아래를 인쇄하기 위한 브림 폭. 브림이 커질수록 추가 재료가 소요되지만 빌드 플레이트에 대한 접착력이 향상됩니다." + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "서포트 브림 라인 수" + +#: 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 "서포트 브림에 사용되는 라인의 수. 브림 라인이 많아질수록 추가 재료가 소요되지만 빌드 플레이트에 대한 접착력이 향상됩니다." + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3472,11 +3584,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "동심원의" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "동심원 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3512,11 +3619,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "동심원의" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "동심원의 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3552,16 +3654,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "동심원의" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "동심원 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "지그재그" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "팬 속도 무시" + +#: 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 "활성화되면 서포트 바로 위의 스킨 영역에 대한 프린팅 냉각 팬 속도가 변경됩니다." + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "지원되는 스킨 팬 속도" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "서포트 바로 위의 스킨 영역을 인쇄할 때 사용할 팬 속도 백분율 빠른 팬 속도를 사용하면 서포트를 더 쉽게 제거할 수 있습니다." + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3744,6 +3861,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "브림에 사용되는 선의 수입니다. 더 많은 브림 선이 빌드 플레이트에 대한 접착력을 향상 시키지만 유효 프린트 영역도 감소시킵니다." +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "브림이 서포트 대체" + +#: 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 "서포트가 차지할 공간이더라도 모델 주변에 브림이 인쇄되도록 합니다. 이렇게 하면 서포트의 첫 번째 레이어 영역 일부가 브림 영역으로 대체됩니다." + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -3886,8 +4013,8 @@ msgstr "기본 래프트 층에있는 선의 너비. 이것은 빌드 플레이 #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "래프트 선 간격" +msgid "Raft Base Line Spacing" +msgstr "래프트 기준 선 간격" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4104,16 +4231,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "충분한 재료를 퍼지하기 위해 프라임 타워 각 층의 최소 부피." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "프라임 타워 두께" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "속이 빈 프라임 타워의 두께. 프라임 타워의 최소 볼륨의 절반보다 큰 두께는 조밀 한 소수 타워가 됩니다." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4154,26 +4271,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "하나의 노즐로 프라임 타워를 프린팅 한 후, 다른 타워의 이물질을 프라임 타워에서 닦아냅니다." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "전환 후 노즐 닦기" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "익스트루더를 전환한 후, 프린팅을 한 노즐에서 흐르는 재료를 닦아냅니다. 이렇게 하면 흘러 나온 물질이 출력물의 표면 품질에 영향을 주지 않는 위치에서 천천히 닦아줍니다." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "프라임 타워 퍼지 볼륨" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "프라임 타워에서 닦을 때 제거 할 필라멘트의 양. 퍼지는 노즐이 작동하지 않을 때 새어 나온 필라멘트를 보정하는 데 유용합니다." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4659,6 +4756,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "재료 공급 데이터 (mm3 / 초) - 온도 (섭씨)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "최소 다각형 둘레" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "레이어가 슬라이스 된, 이 값보다 둘레가 작은 다각형은 필터링됩니다. 값을 낮을수록 슬라이스가 느려지지만, 해상도 메쉬가 높아집니다. 주로 고해상도 SLA 프린터 및 세부 사항이 많은 매우 작은 3D 모델에 적합합니다." + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5316,6 +5423,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "더 작은 레이어를 사용할지 여부에 대한 임계 값. 이 숫자는 레이어의 가장 급한 경사의 탄젠트와 비교됩니다." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "오버행된 벽 각도" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "이 각도를 초과해 오버행된 벽은 오버행된 벽 설정을 사용해 인쇄됩니다. 값이 90인 경우 벽이 오버행된 것으로 간주하지 않습니다." + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "오버행된 벽 속도" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "오버행된 벽은 정상적인 인쇄 속도의 이 비율로 인쇄됩니다." + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5346,16 +5473,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "스킨 영역이 해당 영역의 비율 미만으로 생성되면 브릿지 설정을 사용하여 인쇄하십시오. 그렇지 않으면 일반 스킨 설정을 사용하여 인쇄됩니다." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "브리지 벽 최대 오버행" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "브릿지 설정을 사용하여 벽을 인쇄하기 전에 벽 선 아래의 에어영역의 최대 허용 폭. 벽 선 너비의 백분율로 표시됩니다. 에어 갭이 이보다 넓은 경우 브리지 설정을 사용하여 벽 선이 인쇄됩니다. 그렇지 않으면 벽 선이 일반 설정을 사용하여 인쇄됩니다. 값이 낮을수록 브릿지 설정을 사용하여 오버행 된 벽 선이 인쇄 될 가능성이 높아집니다." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5576,6 +5693,74 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "파일로부터 로드 하는 경유, 모델에 적용될 변환 행렬입니다." +#~ 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 happend midway over infill this feature can reduce the top surface quality." +#~ msgstr "스킨 경로가 나란히 이어지는 상단/하단 스킨 경로를 연결합니다. 동심원 패턴의 경우 이 설정을 사용하면 이동 시간이 크게 감소하지만, 내부채움의 중간에 연결될 수 있기 때문에 이 기능은 상단 표면 품질을 저하시킬 수 있습니다." + +#~ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +#~ msgstr "프린트 내부채움 재료의 패턴입니다. 선과 지그재그 내부채움이 레이어를 하나 걸러서 방향을 바꾸므로 재료비가 절감됩니다. 격자, 삼각형, 삼-육각형, 입방체, 옥텟, 쿼터 큐빅, 십자, 동심원 패턴이 레이어마다 프린팅됩니다. 입방체, 4분 입방체, 옥텟 내부채움이 레이어마다 변경되므로 각 방향으로 힘이 더 균등하게 분산됩니다." + +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "동심원 3D" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "빗질은 여행 할 때 이미 인쇄 된 영역 내에 노즐을 유지합니다. 이로 인해 여행 이동이 약간 더 길어 지지만 수축의 필요성은 줄어 듭니다. 빗질이 꺼져 있으면 재료가 후퇴하고 노즐이 직선으로 다음 점으로 이동합니다. 또한 infill 내에서만 빗질하여 상 / 하 피부 영역을 빗질하는 것을 피할 수 있습니다." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "동심원 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "동심원 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "동심원의 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "동심원 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "래프트 선 간격" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "프라임 타워 두께" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "속이 빈 프라임 타워의 두께. 프라임 타워의 최소 볼륨의 절반보다 큰 두께는 조밀 한 소수 타워가 됩니다." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "전환 후 노즐 닦기" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "익스트루더를 전환한 후, 프린팅을 한 노즐에서 흐르는 재료를 닦아냅니다. 이렇게 하면 흘러 나온 물질이 출력물의 표면 품질에 영향을 주지 않는 위치에서 천천히 닦아줍니다." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "프라임 타워 퍼지 볼륨" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "프라임 타워에서 닦을 때 제거 할 필라멘트의 양. 퍼지는 노즐이 작동하지 않을 때 새어 나온 필라멘트를 보정하는 데 유용합니다." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "브리지 벽 최대 오버행" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "브릿지 설정을 사용하여 벽을 인쇄하기 전에 벽 선 아래의 에어영역의 최대 허용 폭. 벽 선 너비의 백분율로 표시됩니다. 에어 갭이 이보다 넓은 경우 브리지 설정을 사용하여 벽 선이 인쇄됩니다. 그렇지 않으면 벽 선이 일반 설정을 사용하여 인쇄됩니다. 값이 낮을수록 브릿지 설정을 사용하여 오버행 된 벽 선이 인쇄 될 가능성이 높아집니다." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "리트렉션 및 이동 거리를 줄이도록 벽이 프린팅되는 순서를 최적화하십시오. 대부분 이 기능을 사용하면 도움이되지만, 실제로는 시간이 오래 걸릴 수 있으므로, 최적화 여부에 관계없이 프린팅 시간을 비교하십시오." diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index 20b285168b..60b7671e6c 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -5,16 +5,18 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" +"PO-Revision-Date: 2018-11-06 15:03+0100\n" "Last-Translator: Bothof \n" "Language-Team: Dutch\n" "Language: nl_NL\n" "MIME-Version: 1.0\n" "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" @@ -38,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "G-code-bestand" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "GCodeWriter ondersteunt geen non-tekstmodus." + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "Bereid voorafgaand aan het exporteren G-code voor." + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -51,104 +64,57 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

Een of meer 3D-modellen worden mogelijk niet optimaal geprint vanwege het modelformaat en de materiaalconfiguratie:

\n

{model_names}

\n

Ontdek hoe u de best mogelijke printkwaliteit en betrouwbaarheid verkrijgt.

\n

Handleiding printkwaliteit bekijken

" +msgstr "" +"

Een of meer 3D-modellen worden mogelijk niet optimaal geprint vanwege het modelformaat en de materiaalconfiguratie:

\n" +"

{model_names}

\n" +"

Ontdek hoe u de best mogelijke printkwaliteit en betrouwbaarheid verkrijgt.

\n" +"

Handleiding printkwaliteit bekijken

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Printen via Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Printen via Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Verbinding maken met Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Annuleren" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "De gegevens worden naar Doodle3D Connect verzonden" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Kan geen gegevens naar Doodle3D Connect verzenden. Is er nog een andere taak actief?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Gegevens op Doodle3D Connect opslaan" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Het bestand is naar Doodle3D Connect verzonden" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Connect openen..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "De Doodle3D Connect-webinterface openen" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Wijzigingenlogboek Weergeven" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "Firmware bijwerken" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" -msgstr "Actieve instellingen vlakken" +msgstr "Actieve instellingen platmaken" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." -msgstr "Profiel is gevlakt en geactiveerd." +msgstr "Profiel is platgemaakt en geactiveerd." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USB-printen" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Printen via USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Via USB Printen" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "Aangesloten via USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "Er wordt momenteel via USB geprint. Wanneer u Cura afsluit, wordt het printen gestopt. Weet u zeker dat u wilt afsluiten?" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -171,7 +137,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Gecomprimeerd G-code-bestand" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "GCodeGzWriter ondersteunt geen tekstmodus." + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "Ultimaker Format Package" @@ -193,7 +164,7 @@ msgid "Save to Removable Drive {0}" msgstr "Opslaan op Verwisselbaar Station {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Er zijn geen bestandsindelingen beschikbaar om te schrijven!" @@ -232,7 +203,7 @@ msgstr "Kan niet opslaan op verwisselbaar station {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "Fout" @@ -261,8 +232,8 @@ msgstr "Verwisselbaar station {0} uitwerpen" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "Waarschuwing" @@ -289,259 +260,269 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Verwisselbaar Station" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Printen via netwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Printen via netwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "Via het netwerk verbonden." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "Via het netwerk verbonden. Keur de aanvraag goed op de printer." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "Via het netwerk verbonden. Kan de printer niet beheren." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "Er is een toegangsaanvraag voor de printer verstuurd. Keur de aanvraag goed op de printer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "Verificatiestatus" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "Verificatiestatus" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "Opnieuw proberen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "De toegangsaanvraag opnieuw verzenden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Toegang tot de printer is geaccepteerd" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "Kan geen toegang verkrijgen om met deze printer te printen. Kan de printtaak niet verzenden." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "Toegang aanvragen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Toegangsaanvraag naar de printer verzenden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Er kan geen nieuwe taak worden gestart." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." msgstr "Er is een probleem met de configuratie van de Ultimaker waardoor het niet mogelijk is het printen te starten. Los het probleem op voordat u verder gaat." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "De configuratie komt niet overeen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "Weet u zeker dat u met de geselecteerde configuratie wilt printen?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "De configuratie of kalibratie van de printer komt niet overeen met de configuratie van Cura. Slice voor het beste resultaat altijd voor de PrintCores en materialen die in de printer zijn ingevoerd." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "Het verzenden van nieuwe taken is (tijdelijk) geblokkeerd. Nog bezig met het verzenden van de vorige printtaak." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "De gegevens worden naar de printer verzonden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "Gegevens Verzenden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Annuleren" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "Er is geen PrintCore geladen in de sleuf {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "Er is geen materiaal geladen in de sleuf {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, python-brace-format msgctxt "@label" msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" msgstr "Er is een afwijkende PrintCore (Cura: {cura_printcore_name}, printer: {remote_printcore_name}) geselecteerd voor de extruder {extruder_id}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "Afwijkend materiaal (Cura: {0}, Printer: {1}) geselecteerd voor de extruder {2}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Synchroniseren met de printer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Wilt u uw huidige printerconfiguratie gebruiken in Cura?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "De PrintCores en/of materialen in de printer wijken af van de PrintCores en/of materialen in uw huidige project. Slice voor het beste resultaat altijd voor de PrintCores en materialen die in de printer zijn ingevoerd." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" -msgstr "Via het netwerk verbonden." +msgstr "Via het netwerk verbonden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "De printtaak is naar de printer verzonden." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "Gegevens verzonden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "In monitor weergeven" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "Printer '{printer_name}' is klaar met het printen van '{job_name}'." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "De printtaak '{job_name}' is voltooid." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "Print klaar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Verbinding Maken via Netwerk" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Controleren" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "Geen toegang tot update-informatie." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Er zijn nieuwe functies beschikbaar voor uw {machine_name}! Het wordt aanbevolen de firmware van uw printer bij te werken." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Nieuwe firmware voor %s beschikbaar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "Instructies voor bijwerken" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "Geen toegang tot update-informatie." - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Laagweergave" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Als draadprinten is ingeschakeld, geeft Cura lagen niet nauwkeurig weer" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "Simulatieweergave" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "G-code wijzigen" @@ -555,32 +536,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Maak een volume waarin supportstructuren niet worden geprint." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura verzamelt geanonimiseerde gebruiksstatistieken." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "Gegevens verzamelen" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "Meer informatie" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Lees meer over welke gegevens Cura verzendt." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "Toestaan" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Cura toestaan geanonimiseerde gebruiksstatistieken te verzenden om toekomstige verbeteringen aan Cura te helpen prioriteren. Onder de verzonden gegevens bevindt zich informatie over uw voorkeuren en instellingen, de Cura-versie en een selectie van de modellen die u slicet." @@ -590,18 +571,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04-profielen" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Blender-bestand" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "Kan niet exporteren met de kwaliteit \"{}\"!\nInstelling teruggezet naar \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -627,49 +596,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF-afbeelding" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Met het huidige materiaal is slicen niet mogelijk, omdat het materiaal niet compatibel is met de geselecteerde machine of configuratie." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "Kan niet slicen" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Met de huidige instellingen is slicing niet mogelijk. De volgende instellingen bevatten fouten: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Slicing is niet mogelijk vanwege enkele instellingen per model. De volgende instellingen bevatten fouten voor een of meer modellen: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Slicen is niet mogelijk omdat de terugduwpijler of terugduwpositie(s) ongeldig zijn." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "Slicen is niet mogelijk omdat er objecten gekoppeld zijn aan uitgeschakelde Extruder %s." + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Er valt niets te slicen omdat geen van de modellen in het bouwvolume past. Schaal of roteer de modellen totdat deze passen." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "Lagen verwerken" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "Informatie" @@ -685,29 +661,40 @@ msgid "Configure Per Model Settings" msgstr "Instellingen per Model configureren" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "Aanbevolen" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "Aangepast" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF-bestand" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "Nozzle" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "Projectbestand {0} bevat een onbekend type machine {1}. Kan de machine niet importeren. In plaats daarvan worden er modellen geïmporteerd." + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "Projectbestand Openen" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -718,18 +705,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G-bestand" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-code parseren" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "Details van de G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Zorg ervoor dat de G-code geschikt is voor uw printer en de printerconfiguratie voordat u het bestand verzendt. Mogelijk is de weergave van de G-code niet nauwkeurig." @@ -740,27 +727,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Cura-profiel" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF-bestand" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Cura-project 3MF-bestand" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "Fout bij het schrijven van het 3mf-bestand." + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "Upgrades selecteren" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "Firmware-upgrade Uitvoeren" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -771,79 +758,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "Platform kalibreren" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "Buitenwand" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "Binnenwanden" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "Skin" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "Vulling" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "Supportvulling" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "Verbindingsstructuur" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "Supportstructuur" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "Skirt" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "Beweging" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "Intrekkingen" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "Overig(e)" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "Onbekend" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Vooraf geslicet bestand {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "Inloggen mislukt" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Het Bestand Bestaat Al" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -855,23 +842,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Niet overschreven" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Het geselecteerde materiaal is niet compatibel met de geselecteerde machine of configuratie." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Niet-compatibel materiaal" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "De instellingen zijn gewijzigd zodat deze overeenkomen met de huidige beschikbaarheid van de extruders: [%s]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "De instellingen zijn bijgewerkt" @@ -900,8 +887,6 @@ msgid "Export succeeded" msgstr "De export is voltooid" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" @@ -909,58 +894,70 @@ msgstr "Kan het profiel niet importeren uit {0}: { #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:190 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" msgstr "Er is geen aangepast profiel om in het bestand {0} te importeren" +#: /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 "Kan het profiel niet importeren uit {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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." msgstr "Dit profiel {0} bevat incorrecte gegevens. Kan het profiel niet importeren." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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 "De machine die is vastgelegd in het profiel {0} ({1}) komt niet overeen met uw huidige machine ({2}). Kan het profiel niet importeren." +msgstr "De machine die is vastgelegd in het profiel {0} ({1}), komt niet overeen met uw huidige machine ({2}). Kan het profiel niet importeren." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "Kan het profiel niet importeren uit {0}:" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Het profiel {0} is geïmporteerd" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "Het bestand {0} bevat geen geldig profiel." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "Het profiel {0} heeft een onbekend bestandstype of is beschadigd." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "Aangepast profiel" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Er ontbreekt een kwaliteitstype in het profiel." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Kan geen kwaliteitstype {0} vinden voor de huidige configuratie." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -987,42 +984,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Alle Bestanden (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "Aangepast materiaal" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "Aangepast" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "De hoogte van het bouwvolume is verminderd wegens de waarde van de instelling “Printvolgorde”, om te voorkomen dat de rijbrug tegen geprinte modellen botst." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Werkvolume" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Kan geen archief maken van gegevensmap van gebruiker: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "Back-up" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Geprobeerd een Cura-back-up te herstellen zonder correcte gegevens of metadata." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Geprobeerd een Cura-back-up te herstellen die niet overeenkomt met uw huidige versie." @@ -1033,32 +1030,32 @@ msgid "Multiplying and placing objects" msgstr "Objecten verveelvoudigen en plaatsen" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Object plaatsen" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Kan binnen het werkvolume niet voor alle objecten een locatie vinden" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Nieuwe locatie vinden voor objecten" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Locatie vinden" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Kan locatie niet vinden" @@ -1076,7 +1073,12 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "

Oeps, Ultimaker Cura heeft een probleem gedetecteerd.

\n

Tijdens het opstarten is een onherstelbare fout opgetreden. Deze fout is mogelijk veroorzaakt door enkele onjuiste configuratiebestanden. Het wordt aanbevolen een back-up te maken en de standaardinstelling van uw configuratie te herstellen.

\n

Back-ups bevinden zich in de configuratiemap.

\n

Stuur ons dit crashrapport om het probleem op te lossen.

\n " +msgstr "" +"

Oeps, Ultimaker Cura heeft een probleem gedetecteerd.

\n" +"

Tijdens het opstarten is een onherstelbare fout opgetreden. Deze fout is mogelijk veroorzaakt door enkele onjuiste configuratiebestanden. Het wordt aanbevolen een back-up te maken en de standaardinstelling van uw configuratie te herstellen.

\n" +"

Back-ups bevinden zich in de configuratiemap.

\n" +"

Stuur ons dit crashrapport om het probleem op te lossen.

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:102 msgctxt "@action:button" @@ -1109,7 +1111,10 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

Please use the \"Send report\" button to post a bug report automatically to our servers

\n" " " -msgstr "

Er is een fatale fout opgetreden in Cura. Stuur ons het crashrapport om het probleem op te lossen

\n

Druk op de knop \"Rapport verzenden\" om het foutenrapport automatisch naar onze servers te verzenden

\n " +msgstr "" +"

Er is een fatale fout opgetreden in Cura. Stuur ons het crashrapport om het probleem op te lossen

\n" +"

Druk op de knop \"Rapport verzenden\" om het foutenrapport automatisch naar onze servers te verzenden

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1189,223 +1194,248 @@ msgctxt "@action:button" msgid "Send report" msgstr "Rapport verzenden" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Machines laden..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Scene instellen..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Interface laden..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f mm" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "Er kan slechts één G-code-bestand tegelijkertijd worden geladen. Het importeren van {0} is overgeslagen" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "Kan geen ander bestand openen als G-code wordt geladen. Het importeren van {0} is overgeslagen" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Het geselecteerde model is te klein om te laden." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Machine-instellingen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Printer" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Printerinstellingen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Breedte)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Diepte)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Hoogte)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Vorm van het platform" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Centraal oorsprongpunt" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Verwarmd bed" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Versie G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Instellingen Printkop" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Afstand van de linkerkant van de printkop tot het midden van de nozzle. Wordt tijdens \"een voor een\"-printen gebruikt om botsingen tussen eerder geprinte voorwerpen en de printkop te voorkomen." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Afstand van de voorkant van de printkop tot het midden van de nozzle. Wordt tijdens \"een voor een\"-printen gebruikt om botsingen tussen eerder geprinte voorwerpen en de printkop te voorkomen." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Afstand van de rechterkant van de printkop tot het midden van de nozzle. Wordt tijdens \"een voor een\"-printen gebruikt om botsingen tussen eerder geprinte voorwerpen en de printkop te voorkomen." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Afstand van de achterkant van de printkop tot het midden van de nozzle. Wordt tijdens \"een voor een\"-printen gebruikt om botsingen tussen eerder geprinte voorwerpen en de printkop te voorkomen." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Hoogte rijbrug" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." -msgstr "Het hoogteverschil tussen de punt van de nozzle en het rijbrugsysteem (X- en Y-as). Wordt tijdens \"een voor een\"-printen gebruikt om botsingen tussen eerder geprinte voorwerpen en het rijbrugsysteem te voorkomen" +msgstr "Het hoogteverschil tussen de punt van de nozzle en het rijbrugsysteem (X- en Y-as). Wordt tijdens \"een voor een\"-printen gebruikt om botsingen tussen eerder geprinte voorwerpen en het rijbrugsysteem te voorkomen." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Aantal extruders" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "Start G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "G-code-opdrachten die aan het begin worden uitgevoerd." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "Eind G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "G-code-opdrachten die aan het eind worden uitgevoerd." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Nozzle-instellingen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Maat nozzle" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Compatibele materiaaldiameter" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "De nominale diameter van het filament dat wordt ondersteund door de printer. De exacte diameter wordt overschreven door het materiaal en/of het profiel." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "Nozzle-offset X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Nozzle-offset Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "Nummer van koelventilator" + +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-13 17:41+0200\n" +"PO-Revision-Date: 2016-09-29 13:44+0200\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "Start-G-code van Extruder" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "Eind-G-code van Extruder" @@ -1425,12 +1455,20 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Kan geen verbinding maken met de Cura Package-database. Controleer uw verbinding." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "Invoegtoepassingen" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materialen" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1446,8 +1484,14 @@ msgctxt "@label" msgid "Author" msgstr "Auteur" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "Downloads" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "Onbekend" @@ -1480,17 +1524,57 @@ msgctxt "@action:button" msgid "Back" msgstr "Terug" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "De-installeren bevestigen" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "U verwijdert materialen en/of profielen die nog in gebruik zijn. Wanneer u het verwijderen bevestigt, worden de volgende materialen/profielen teruggezet naar hun standaardinstellingen." + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "Materialen" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "Profielen" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "Bevestigen" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "U moet Cura opnieuw starten voordat wijzigingen in packages van kracht worden." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Cura sluiten" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "Community-bijdragen" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "Community-invoegtoepassingen" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "Standaard materialen" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "Geïnstalleerd" @@ -1521,7 +1605,10 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "Deze invoegtoepassing bevat een licentie.\nU moet akkoord gaan met deze licentie om deze invoegtoepassing te mogen installeren.\nGaat u akkoord met de onderstaande voorwaarden?" +msgstr "" +"Deze invoegtoepassing bevat een licentie.\n" +"U moet akkoord gaan met deze licentie om deze invoegtoepassing te mogen installeren.\n" +"Gaat u akkoord met de onderstaande voorwaarden?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1533,12 +1620,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Nee, ik ga niet akkoord" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Functies" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Compatibiliteit" @@ -1548,10 +1635,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Packages ophalen..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Contact" +msgid "Website" +msgstr "Website" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "E-mail" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1564,48 +1656,88 @@ msgid "Changelog" msgstr "Wijzigingenlogboek" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "Sluiten" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "Firmware bijwerken" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "Firmware is de software die direct op de 3D-printer wordt uitgevoerd. Deze firmware bedient de stappenmotoren, regelt de temperatuur en zorgt er in feite voor dat de printer doet wat deze moet doen." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "De firmware die bij nieuwe printers wordt geleverd, werkt wel, maar nieuwe versies hebben vaak meer functies en verbeteringen." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "Firmware-upgrade Automatisch Uitvoeren" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "Aangepaste Firmware Uploaden" + +#: /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 "Kan de firmware niet bijwerken omdat er geen verbinding met de printer is." + +#: /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 "Kan de firmware niet bijwerken omdat de verbinding met de printer geen ondersteuning biedt voor het uitvoeren van een firmware-upgrade." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "Aangepaste firmware selecteren" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "Firmware-update" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "De firmware wordt bijgewerkt." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "De firmware-update is voltooid." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "Firmware-update mislukt door een onbekende fout." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "Firmware-update mislukt door een communicatiefout." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "Firmware-update mislukt door een invoer-/uitvoerfout." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Firmware-update mislukt door ontbrekende firmware." @@ -1615,356 +1747,421 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Gebruikersovereenkomst" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "Bestaande verbinding" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "Deze printer/groep is al aan Cura toegevoegd. Selecteer een andere printer/groep." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Verbinding Maken met Printer in het Netwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" "\n" "Select your printer from the list below:" -msgstr "Als u rechtstreeks via het netwerk wilt printen naar de printer, moet u ervoor zorgen dat de printer met een netwerkkabel is verbonden met het netwerk of moet u verbinding maken met de printer via het wifi-netwerk. Als u geen verbinding maakt tussen Cura en de printer, kunt u een USB-station gebruiken om g-code-bestanden naar de printer over te zetten.\n\nSelecteer uw printer in de onderstaande lijst:" +msgstr "" +"Als u rechtstreeks via het netwerk wilt printen naar de printer, moet u ervoor zorgen dat de printer met een netwerkkabel is verbonden met het netwerk of moet u verbinding maken met de printer via het wifi-netwerk. Als u geen verbinding maakt tussen Cura en de printer, kunt u een USB-station gebruiken om g-code-bestanden naar de printer over te zetten.\n" +"\n" +"Selecteer uw printer in de onderstaande lijst:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Toevoegen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "Bewerken" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Verwijderen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "Vernieuwen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Raadpleeg de handleiding voor probleemoplossing bij printen via het netwerk als uw printer niet in de lijst wordt vermeld" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "Type" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "Firmwareversie" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "Adres" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Deze printer is niet opgezet om een groep Ultimaker 3 printers te hosten." +msgid "This printer is not set up to host a group of printers." +msgstr "Deze printer is niet ingesteld voor het hosten van een groep printers." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Deze printer is de host voor een groep van %1 Ultimaker 3 printers." +msgid "This printer is the host for a group of %1 printers." +msgstr "Deze printer is de host voor een groep van %1 printers." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "De printer op dit adres heeft nog niet gereageerd." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "Verbinden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "Printeradres" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Voer het IP-adres of de hostnaam van de printer in het netwerk in." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "Printen via netwerk" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "Printerselectie" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "Printen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 is niet ingesteld voor het hosten van een groep aangesloten Ultimaker 3-printers" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "Printen via netwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Printers toevoegen/verwijderen" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" +msgstr "Printerselectie" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Hiermee opent u de pagina met printtaken in uw standaard webbrowser." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" +msgstr "Niet beschikbaar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Printtaken weergeven" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" +msgstr "Niet bereikbaar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Printen voorbereiden" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Printen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" msgstr "Beschikbaar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Verbinding met de printer is verbroken" +msgid "Aborted" +msgstr "Afgebroken" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Niet beschikbaar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Onbekend" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Uitgeschakeld" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Gereserveerd" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "Gereed" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Voorbereiden om te printen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" -msgstr "Handeling nodig" +msgid "Preparing" +msgstr "Voorbereiden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" -msgstr "Gepauzeerd" +msgid "Pausing" +msgstr "Pauzeren" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "Hervatten" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" -msgstr "Print afgebroken" +msgid "Action required" +msgstr "Handeling nodig" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Accepteert geen printtaken" +msgid "Waiting for: Unavailable printer" +msgstr "Wachten op: Niet-beschikbare printer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "Klaar om: " +msgid "Waiting for: First available" +msgstr "Wachten op: Eerst beschikbare" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "Platform leegmaken" +msgid "Waiting for: " +msgstr "Wachten op: " -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Wacht op wijziging van configuratie" +msgid "Configuration change" +msgstr "Configuratiewijziging" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Printtaken" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "Printen" +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "Voor de toegewezen printer, 1%, is/zijn de volgende configuratiewijziging/configuratiewijzigingen vereist:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "De printer 1% is toegewezen. De taak bevat echter een onbekende materiaalconfiguratie." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 +msgctxt "@label" +msgid "Change material %1 from %2 to %3." +msgstr "Wijzig het materiaal %1 van %2 in %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 "Laad %3 als materiaal %1 (kan niet worden overschreven)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "Wijzig de print core %1 van %2 in %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 "Wijzig het platform naar %1 (kan niet worden overschreven)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "Overschrijven" + +#: /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 "Als u een printtaak met een incompatibele configuratie start, kan dit leiden tot schade aan de 3D-printer. Weet u zeker dat u de configuratie en print %1 wilt overschrijven?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:435 +msgctxt "@window:title" +msgid "Override configuration configuration and start print" +msgstr "Configuratie overschrijven en printen starten" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "Glas" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "Aluminium" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "Wachtrij beheren" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "In wachtrij" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Printers" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "Printen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Printers weergeven" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "Printers beheren" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "Plaats bovenaan" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "Verwijderen" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "Hervatten" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "Pauzeren" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "Afbreken" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "Weet u zeker dat u %1 bovenaan de wachtrij wilt plaatsen?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "Plaats printtaak bovenaan" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "Weet u zeker dat u %1 wilt verwijderen?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "Printtaak verwijderen" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "Weet u zeker dat u %1 wilt afbreken?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Printen afbreken" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Verbinding maken met een printer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "De configuratie van de printer in Cura laden" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Configuratie Activeren" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "De configuratie van de printer in Cura laden" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Kleurenschema" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Materiaalkleur" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Lijntype" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Doorvoersnelheid" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Laagdikte" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Compatibiliteitsmodus" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Bewegingen weergeven" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Helpers weergeven" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Shell weergeven" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Vulling weergeven" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Alleen bovenlagen weergegeven" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "5 gedetailleerde lagen bovenaan weergeven" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Boven-/onderkant" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Binnenwand" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "min." -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "max." @@ -1979,17 +2176,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "Scripts voor Nabewerking" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "Een script toevoegen" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "Instellingen" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "Actieve scripts voor nabewerking wijzigen" @@ -2007,12 +2204,12 @@ msgstr "Cura verzendt anonieme gegevens naar Ultimaker om de printkwaliteit en g #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:101 msgctxt "@text:window" msgid "I don't want to send these data" -msgstr "Ik wil deze gegevens niet verzenden." +msgstr "Ik wil deze gegevens niet verzenden" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:111 msgctxt "@text:window" msgid "Allow sending these data to Ultimaker and help us improve Cura" -msgstr "Verzenden van deze gegevens naar Ultimaker toestaan en ons helpen Cura te verbeteren." +msgstr "Verzenden van deze gegevens naar Ultimaker toestaan en ons helpen Cura te verbeteren" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2052,7 +2249,7 @@ msgstr "Breedte (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:103 msgctxt "@info:tooltip" msgid "The depth in millimeters on the build plate" -msgstr "De diepte op het platform in millimeters." +msgstr "De diepte op het platform in millimeters" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:108 msgctxt "@action:label" @@ -2084,53 +2281,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Effenen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Rastertype" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Normaal model" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Printen als supportstructuur" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Supportstructuur niet laten overlappen met andere modellen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Instellingen aanpassen voor overlapping met andere modellen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Instellingen aanpassen voor vulling van andere modellen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "Instellingen selecteren" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Instellingen Selecteren om Dit Model Aan te Passen" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filteren..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "Alles weergeven" @@ -2152,13 +2349,13 @@ msgid "Create new" msgstr "Nieuw maken" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Samenvatting - Cura-project" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Printerinstellingen" @@ -2175,18 +2372,19 @@ msgid "Update" msgstr "Bijwerken" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Type" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "Printergroep" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Profielinstellingen" @@ -2198,19 +2396,20 @@ msgstr "Hoe dient het conflict in het profiel te worden opgelost?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Naam" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "Niet in profiel" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2240,7 +2439,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Hoe dient het materiaalconflict te worden opgelost?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Zichtbaarheid instellen" @@ -2251,13 +2450,13 @@ msgid "Mode" msgstr "Modus" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Zichtbare instellingen:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 van %2" @@ -2281,7 +2480,7 @@ msgstr "Printerupgrades Selecteren" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:38 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker 2." -msgstr "Selecteer eventuele upgrades die op deze Ultimaker 2 zijn uitgevoerd" +msgstr "Selecteer eventuele upgrades die op deze Ultimaker 2 zijn uitgevoerd." #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:47 msgctxt "@label" @@ -2313,36 +2512,6 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "Beweeg Naar de Volgende Positie" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "Firmware-upgrade Uitvoeren" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "Firmware is de software die direct op de 3D-printer wordt uitgevoerd. Deze firmware bedient de stappenmotoren, regelt de temperatuur en zorgt er in feite voor dat de printer doet wat deze moet doen." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "De firmware die bij nieuwe printers wordt geleverd, werkt wel, maar nieuwe versies hebben vaak meer functies en verbeteringen." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "Firmware-upgrade Automatisch Uitvoeren" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "Aangepaste Firmware Uploaden" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "Aangepaste firmware selecteren" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" @@ -2490,27 +2659,11 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Verwijder de print" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Pauzeren" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Hervatten" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "Printen Afbreken" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Printen afbreken" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2526,7 +2679,9 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "U hebt enkele profielinstellingen aangepast.\nWilt u deze instellingen behouden of verwijderen?" +msgstr "" +"U hebt enkele profielinstellingen aangepast.\n" +"Wilt u deze instellingen behouden of verwijderen?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2544,19 +2699,17 @@ msgid "Customized" msgstr "Aangepast" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Altijd vragen" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Verwijderen en nooit meer vragen" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Behouden en nooit meer vragen" @@ -2576,101 +2729,179 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Nieuw profiel maken" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Informatie" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Diameterwijziging bevestigen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" msgstr "Het nieuwe filament is ingesteld op %1 mm. Dit is niet compatibel met de huidige extruder. Wilt u verder gaan?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Naam" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Merk" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Type Materiaal" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Kleur" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Eigenschappen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Dichtheid" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Diameter" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Kostprijs Filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Gewicht filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Lengte filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Kostprijs per meter" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Dit materiaal is gekoppeld aan %1 en deelt hiermee enkele eigenschappen." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Materiaal ontkoppelen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Beschrijving" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Gegevens Hechting" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "Instellingen voor printen" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Activeren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Maken" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "Dupliceren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "Importeren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Exporteren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "Printer" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "Verwijderen Bevestigen" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "Weet u zeker dat u %1 wilt verwijderen? Deze bewerking kan niet ongedaan worden gemaakt!" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Materiaal Importeren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "Kon materiaal %1 niet importeren: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "Materiaal %1 is geïmporteerd" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Materiaal Exporteren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "Exporteren van materiaal naar %1 is mislukt: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Materiaal is geëxporteerd naar %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2707,289 +2938,287 @@ msgid "Unit" msgstr "Eenheid" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "Algemeen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "Interface" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "Taal:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "Valuta:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "Thema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "U moet de toepassing opnieuw starten voordat deze wijzigingen van kracht worden." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Automatisch slicen bij wijzigen van instellingen." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "Automatisch slicen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "Gedrag kijkvenster" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Geef niet-ondersteunde gedeelten van het model een rode markering. Zonder ondersteuning zullen deze gedeelten niet goed worden geprint." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "Overhang weergeven" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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 "Verplaatst de camera zodanig dat wanneer een model wordt geselecteerd, het model in het midden van het beeld wordt weergegeven" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Camera centreren wanneer een item wordt geselecteerd" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "Moet het standaard zoomgedrag van Cura worden omgekeerd?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Keer de richting van de camerazoom om." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "Moet het zoomen in de richting van de muis gebeuren?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Zoomen in de richting van de muis" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "Moeten modellen op het platform zodanig worden verplaatst dat ze elkaar niet meer doorsnijden?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Modellen gescheiden houden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "Moeten modellen in het printgebied omlaag worden gebracht zodat ze het platform raken?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Modellen automatisch op het platform laten vallen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "Toon het waarschuwingsbericht in de G-code-lezer." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "Waarschuwingsbericht in de G-code-lezer" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "Moet de laag in de compatibiliteitsmodus worden geforceerd?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Compatibiliteitsmodus voor laagweergave forceren (opnieuw opstarten vereist)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "Bestanden openen en opslaan" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "Moeten modellen worden geschaald naar het werkvolume als ze te groot zijn?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "Grote modellen schalen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "Een model wordt mogelijk extreem klein weergegeven als de eenheden bijvoorbeeld in meters zijn in plaats van in millimeters. Moeten dergelijke modellen worden opgeschaald?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Extreem kleine modellen schalen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "Moeten modellen worden geselecteerd nadat ze zijn geladen?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Modellen selecteren wanneer ze geladen zijn" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "Moet er automatisch een op de printernaam gebaseerde voorvoegsel aan de naam van de printtaak worden toegevoegd?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Machinevoorvoegsel toevoegen aan taaknaam" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Dient er een samenvatting te worden weergegeven wanneer een projectbestand wordt opgeslagen?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Dialoogvenster voor samenvatting weergeven tijdens het opslaan van een project" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Standaardgedrag tijdens het openen van een projectbestand" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Standaardgedrag tijdens het openen van een projectbestand: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" +msgid "Always ask me this" msgstr "Altijd vragen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Altijd als project openen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "Altijd modellen importeren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "Wanneer u wijzigingen hebt aangebracht aan een profiel en naar een ander profiel wisselt, wordt een dialoogvenster weergegeven waarin u wordt gevraagd of u de aanpassingen wilt behouden. U kunt ook een standaardgedrag kiezen en het dialoogvenster nooit meer laten weergeven." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "Profiel overschrijven" +msgid "Profiles" +msgstr "Profielen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "Standaardgedrag voor gewijzigde instellingen wanneer er naar een ander profiel wordt overgeschakeld: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "Gewijzigde instellingen altijd verwijderen" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "Gewijzigde instellingen altijd naar nieuw profiel overbrengen" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "Privacy" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "Moet Cura op updates controleren wanneer het programma wordt gestart?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Bij starten op updates controleren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "Mogen anonieme gegevens over uw print naar Ultimaker worden verzonden? Opmerking: er worden geen modellen, IP-adressen of andere persoonlijk identificeerbare gegevens verzonden of opgeslagen." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(Anonieme) printgegevens verzenden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "Meer informatie" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "Experimenteel" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Functionaliteit voor meerdere platformen gebruiken" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Functionaliteit voor meerdere platformen gebruiken (opnieuw opstarten vereist)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Moeten nieuw geladen modellen op het platform worden geschikt? Gebruikt in combinatie met meerdere platformen (EXPERIMENTEEL)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Objecten niet schikken na laden" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "Printers" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Activeren" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3007,7 +3236,7 @@ msgid "Connection:" msgstr "Verbinding:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "Er is geen verbinding met de printer." @@ -3033,7 +3262,7 @@ msgid "Aborting print..." msgstr "Printen afbreken..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "Profielen" @@ -3048,18 +3277,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Dupliceren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Importeren" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Exporteren" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3070,18 +3287,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Profiel Dupliceren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Verwijderen Bevestigen" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "Weet u zeker dat u %1 wilt verwijderen? Deze bewerking kan niet ongedaan worden gemaakt." - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3102,228 +3307,202 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Printer: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Beschermde profielen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Aangepaste profielen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Profiel bijwerken met huidige instellingen/overschrijvingen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Huidige wijzigingen verwijderen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "Dit profiel gebruikt de standaardinstellingen die door de printer zijn opgegeven, dus er zijn hiervoor geen instellingen/overschrijvingen in de onderstaande lijst." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Uw huidige instellingen komen overeen met het geselecteerde profiel." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Algemene Instellingen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materialen" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Maken" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Dupliceren" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Materiaal Importeren" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr "Kon materiaal %1 niet importeren: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "Materiaal %1 is geïmporteerd" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Materiaal Exporteren" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "Exporteren van materiaal naar %1 is mislukt: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Materiaal is geëxporteerd naar %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Printer" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "Printer Toevoegen" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "Printernaam:" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "Printer Toevoegen" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "Zonder titel" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "Over Cura" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "versie: %1" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "End-to-end-oplossing voor fused filament 3D-printen." -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "Cura is ontwikkeld door Ultimaker B.V. in samenwerking met de community.\nCura maakt met trots gebruik van de volgende opensourceprojecten:" +msgstr "" +"Cura is ontwikkeld door Ultimaker B.V. in samenwerking met de community.\n" +"Cura maakt met trots gebruik van de volgende opensourceprojecten:" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "Grafische gebruikersinterface (GUI)" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "Toepassingskader" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "G-code-generator" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "InterProcess Communication-bibliotheek" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "Programmeertaal" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "GUI-kader" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "Bindingen met GUI-kader" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "Bindingenbibliotheek C/C++" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "Indeling voor gegevensuitwisseling" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "Ondersteuningsbibliotheek voor wetenschappelijke berekeningen" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "Ondersteuningsbibliotheek voor snellere berekeningen" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "Ondersteuningsbibliotheek voor het verwerken van STL-bestanden" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "Ondersteuningsbibliotheek voor het verwerken van tweedimensionale objecten" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "Ondersteuningsbibliotheek voor het verwerken van driehoekig rasters" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "Ondersteuningsbibliotheek voor de analyse van complexe netwerken" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "Ondersteuningsbibliotheek voor het verwerken van 3MF-bestanden" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "Ondersteuningsbibliotheek voor bestandsmetadata en streaming" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "Seriële-communicatiebibliotheek" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "ZeroConf-detectiebibliotheek" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "Bibliotheek met veelhoeken" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "Python HTTP-bibliotheek" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "Lettertype" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "SVG-pictogrammen" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "Implementatie van Linux-toepassing voor kruisdistributie" @@ -3333,67 +3512,73 @@ msgctxt "@label" msgid "Profile:" msgstr "Profiel:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "Sommige waarden of aanpassingen van instellingen zijn anders dan de waarden die in het profiel zijn opgeslagen.\n\nKlik om het profielbeheer te openen." +msgstr "" +"Sommige waarden of aanpassingen van instellingen zijn anders dan de waarden die in het profiel zijn opgeslagen.\n" +"\n" +"Klik om het profielbeheer te openen." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "Zoeken..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Waarde naar alle extruders kopiëren" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Alle gewijzigde waarden naar alle extruders kopiëren" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Deze instelling verbergen" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Deze instelling verbergen" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Deze instelling zichtbaar houden" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Zichtbaarheid Instelling Configureren..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Alles samenvouwen" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Alles uitvouwen" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "Een aantal verborgen instellingen gebruiken andere waarden dan hun normale berekende waarde.\n\nKlik om deze instellingen zichtbaar te maken." +msgstr "" +"Een aantal verborgen instellingen gebruiken andere waarden dan hun normale berekende waarde.\n" +"\n" +"Klik om deze instellingen zichtbaar te maken." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3405,31 +3590,37 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Beïnvloed door" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." -msgstr "Deze instelling wordt altijd door alle extruders gedeeld. Als u hier de instelling wijzigt, wordt de waarde voor alle extruders gewijzigd" +msgstr "Deze instelling wordt altijd door alle extruders gedeeld. Als u hier de instelling wijzigt, wordt de waarde voor alle extruders gewijzigd." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "De waarde wordt afgeleid van de waarden per extruder " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "Deze instelling heeft een andere waarde dan in het profiel.\n\nKlik om de waarde van het profiel te herstellen." +msgstr "" +"Deze instelling heeft een andere waarde dan in het profiel.\n" +"\n" +"Klik om de waarde van het profiel te herstellen." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "Deze instelling wordt normaliter berekend, maar is nu ingesteld op een absolute waarde.\n\nKlik om de berekende waarde te herstellen." +msgstr "" +"Deze instelling wordt normaliter berekend, maar is nu ingesteld op een absolute waarde.\n" +"\n" +"Klik om de berekende waarde te herstellen." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3467,7 +3658,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "Verzend een aangepaste G-code-opdracht naar de verbonden printer. Druk op Enter om de opdracht te verzenden." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Extruder" @@ -3520,7 +3711,7 @@ msgid "The nozzle inserted in this extruder." msgstr "De nozzle die in deze extruder geplaatst is." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Platform" @@ -3545,6 +3736,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Verwarm het bed voordat u gaat printen. U kunt doorgaan met het aanpassen van uw print terwijl het bed wordt verwarmd. Zo hoeft u niet te wachten totdat het bed opgewarmd is wanneer u gereed bent om te printen." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "Materiaal" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "Favorieten" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "Standaard" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3560,12 +3766,12 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "Beel&d" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "&Camerapositie" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "&Platform" @@ -3575,12 +3781,12 @@ msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "Zichtbare instellingen" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "Alle instellingen weergeven" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Instelling voor zichtbaarheid beheren..." @@ -3639,349 +3845,350 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "Instelling voor printen uitgeschakeld\nG-code-bestanden kunnen niet worden aangepast" +msgstr "" +"Instelling voor printen uitgeschakeld\n" +"G-code-bestanden kunnen niet worden aangepast" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "00u 00min" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "Tijdspecificatie" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "Kostenspecificatie" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "%1 m" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "%1 g" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "Totaal:" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." msgstr "Aanbevolen instellingen voor printen

Print met de aanbevolen instellingen voor de geselecteerde printer en kwaliteit, en het geselecteerde materiaal." -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Aangepaste instellingen voor printen

Print met uiterst precieze controle over elk detail van het slice-proces." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Actieve print" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Taaknaam" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Printtijd" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Geschatte resterende tijd" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "Vo&lledig Scherm In-/Uitschakelen" +msgid "Toggle Full Screen" +msgstr "Volledig Scherm In-/Uitschakelen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "Ongedaan &Maken" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Opnieuw" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Afsluiten" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "&3D-weergave" +msgid "3D View" +msgstr "3D-weergave" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "Weergave &voorzijde" +msgid "Front View" +msgstr "Weergave voorzijde" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "Weergave &bovenzijde" +msgid "Top View" +msgstr "Weergave bovenzijde" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "Weergave &linkerzijde" +msgid "Left Side View" +msgstr "Weergave linkerzijde" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "Weergave &rechterzijde" +msgid "Right Side View" +msgstr "Weergave rechterzijde" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Cura Configureren..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Printer Toevoegen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Pr&inters Beheren..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Materialen Beheren..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "Profiel bijwerken met h&uidige instellingen/overschrijvingen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "Hui&dige wijzigingen verwijderen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "Profiel maken op basis van huidige instellingen/overs&chrijvingen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Profielen Beheren..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Online &Documentatie Weergeven" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Een &Bug Rapporteren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "&Over..." +msgid "About..." +msgstr "Over..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Ge&selecteerd model verwijderen" -msgstr[1] "Ge&selecteerde modellen verwijderen" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" +msgstr[0] "Geselecteerd model verwijderen" +msgstr[1] "Geselecteerde modellen verwijderen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Geselecteerd model centreren" msgstr[1] "Geselecteerde modellen centreren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Geselecteerd model verveelvoudigen" msgstr[1] "Geselecteerde modellen verveelvoudigen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Model Verwijderen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Model op Platform Ce&ntreren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "Modellen &Groeperen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Groeperen van Modellen Opheffen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Modellen Samen&voegen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Model verveelvoudigen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "Alle Modellen &Selecteren" +msgid "Select All Models" +msgstr "Alle Modellen Selecteren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Platform Leegmaken" +msgid "Clear Build Plate" +msgstr "Platform Leegmaken" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 +msgctxt "@action:inmenu menubar:file" +msgid "Reload All Models" +msgstr "Alle Modellen Opnieuw Laden" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 -msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "Alle Modellen Opnieuw &Laden" - -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Alle modellen schikken op alle platformen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Alle modellen schikken" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Selectie schikken" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Alle Modelposities Herstellen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "Alle Model&transformaties Herstellen" +msgid "Reset All Model Transformations" +msgstr "Alle Modeltransformaties Herstellen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "Bestand(en) &openen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nieuw project..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Engine-&logboek Weergeven..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Open Configuratiemap" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Door packages bladeren..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Zijbalk uitbreiden/samenvouwen" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Laad een 3D-model" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Gereed om te slicen" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Slicen..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Gereed voor %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Kan Niet Slicen" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Slicen is niet beschikbaar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Huidige printtaak slicen" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Slicen annuleren" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Voorbereiden" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Annuleren" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Actief Uitvoerapparaat Selecteren" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "Bestand(en) openen" @@ -4001,129 +4208,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&Bestand" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "&Opslaan..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "&Exporteren..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "&Selectie Opslaan naar Bestand" +msgid "Export Selection..." +msgstr "Selectie Exporteren..." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Opslaan &als..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "&Project opslaan..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "B&ewerken" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "Beel&d" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "In&stellingen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Printer" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "&Materiaal" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Instellen als Actieve Extruder" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Extruder inschakelen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Extruder uitschakelen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Platform" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "&Profiel" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "E&xtensies" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "Werkse&t" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "Voo&rkeuren" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "&Help" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Dit package wordt na opnieuw starten geïnstalleerd." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "Bestand Openen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "Instellingen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "Nieuw project" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Weet u zeker dat u een nieuw project wilt starten? Hiermee wordt het platform leeggemaakt en worden eventuele niet-opgeslagen instellingen verwijderd." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "Cura afsluiten" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "Weet u zeker dat u Cura wilt verlaten?" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "Package installeren" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "Bestand(en) openen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." msgstr "Binnen de door u geselecteerde bestanden zijn een of meer G-code-bestanden aangetroffen. U kunt maximaal één G-code-bestand tegelijk openen. Selecteer maximaal één bestand als u dit wilt openen als G-code-bestand." @@ -4133,112 +4356,107 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Project opslaan" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Platform" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extruder %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 &materiaal" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Bij opnieuw opslaan projectsamenvatting niet weergeven" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Opslaan" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Laaghoogte" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Dit kwaliteitsprofiel is niet beschikbaar voor uw huidige materiaal- en nozzleconfiguratie. Breng hierin wijzigingen aan om gebruik van dit kwaliteitsprofiel mogelijk te maken" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "Er is momenteel een aangepast profiel actief. Als u de kwaliteitsschuifregelaar wilt gebruiken, kiest u een standaard kwaliteitsprofiel op het tabblad Aangepast" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Printsnelheid" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Langzamer" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Sneller" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "U hebt enkele profielinstellingen aangepast. Ga naar de aangepaste modus als u deze wilt wijzigen." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Vulling" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Met geleidelijke vulling neemt de hoeveelheid vulling naar boven toe." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "Geleidelijke vulling" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "Support genereren" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Genereer structuren om delen van het model met overhang te ondersteunen. Zonder deze structuren zakken dergelijke delen in tijdens het printen." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Selecteren welke extruder voor support wordt gebruikt. Deze optie zorgt ervoor dat onder het model ondersteuning wordt geprint, om te voorkomen dat dit doorzakt of dat er midden in de lucht moet worden geprint." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Hechting aan platform" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Het printen van een brim of raft inschakelen. Deze optie zorgt ervoor dat er extra materiaal rondom of onder het object wordt neergelegd, dat er naderhand eenvoudig kan worden afgesneden." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Hebt u hulp nodig om betere prints te krijgen?
Lees de Ultimaker Troubleshooting Guides (Handleiding voor probleemoplossing)" @@ -4285,23 +4503,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Type printer" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Materiaal" -# Added after the string freeze. -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Gebruik een hechtingsvel of lijm met deze materiaalcombinatie" +msgid "Use glue with this material combination" +msgstr "Gebruik lijm bij deze combinatie van materialen" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Compatibiliteit controleren" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Klik om de materiaalcompatibiliteit te controleren op Ultimaker.com." @@ -4324,7 +4541,7 @@ msgstr "Huidig platform schikken" #: MachineSettingsAction/plugin.json msgctxt "description" msgid "Provides a way to change machine settings (such as build volume, nozzle size, etc.)." -msgstr "Biedt een manier om de machine-instellingen (zoals bouwvolume, maat nozzle, enz.) te wijzigen" +msgstr "Biedt een manier om de machine-instellingen (zoals bouwvolume, maat nozzle, enz.) te wijzigen." #: MachineSettingsAction/plugin.json msgctxt "name" @@ -4391,16 +4608,6 @@ msgctxt "name" msgid "God Mode" msgstr "Godmodus" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Accepteert G-code en verzendt deze code via wifi naar een Doodle3D WiFi-Box." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4411,6 +4618,16 @@ msgctxt "name" msgid "Changelog" msgstr "Wijzigingenlogboek" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "Biedt machineacties voor het bijwerken van de firmware." + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "Firmware-updater" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." @@ -4434,7 +4651,7 @@ msgstr "USB-printen" #: UserAgreement/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license." -msgstr "Vraag de gebruiker één keer of deze akkoord gaat met de licentie" +msgstr "Vraag de gebruiker één keer of deze akkoord gaat met de licentie." #: UserAgreement/plugin.json msgctxt "name" @@ -4481,16 +4698,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Stadium voorbereiden" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Deze optie biedt een bewerkingsvenster voor rechtstreeks bewerken van scripts." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Gereedschap voor live uitvoeren van scripts" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4504,7 +4711,7 @@ msgstr "Invoegtoepassing voor Verwijderbaar uitvoerapparaat" #: UM3NetworkPrinting/plugin.json msgctxt "description" msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Hiermee beheert u netwerkverbindingen naar Ultimaker 3-printers" +msgstr "Hiermee beheert u netwerkverbindingen naar Ultimaker 3-printers." #: UM3NetworkPrinting/plugin.json msgctxt "name" @@ -4601,16 +4808,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Lezer voor Profielen van oudere Cura-versies" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Hiermee kunnen Blender-bestanden rechtstreeks in Cura worden geopend." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Blender-integratie (experimenteel)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4649,7 +4846,7 @@ msgstr "Hiermee worden configuraties bijgewerkt van Cura 2.5 naar Cura 2.6." #: VersionUpgrade/VersionUpgrade25to26/plugin.json msgctxt "name" msgid "Version Upgrade 2.5 to 2.6" -msgstr "Versie-upgrade van 2.5 naar 2.6." +msgstr "Versie-upgrade van 2.5 naar 2.6" #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "description" @@ -4661,6 +4858,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Versie-upgrade van 2.7 naar 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "Hiermee worden configuraties bijgewerkt van Cura 3.4 naar Cura 3.5." + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "Versie-upgrade van 3.4 naar 3.5" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4679,7 +4886,7 @@ msgstr "Hiermee worden configuraties bijgewerkt van Cura 2.6 naar Cura 2.7." #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "name" msgid "Version Upgrade 2.6 to 2.7" -msgstr "Versie-upgrade van 2.6 naar 2.7." +msgstr "Versie-upgrade van 2.6 naar 2.7" #: VersionUpgrade/VersionUpgrade21to22/plugin.json msgctxt "description" @@ -4699,7 +4906,7 @@ msgstr "Hiermee worden configuraties bijgewerkt van Cura 2.2 naar Cura 2.4." #: VersionUpgrade/VersionUpgrade22to24/plugin.json msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" -msgstr "Versie-upgrade van 2.2 naar 2.4." +msgstr "Versie-upgrade van 2.2 naar 2.4" #: ImageReader/plugin.json msgctxt "description" @@ -4801,6 +5008,299 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura-profiellezer" +#~ msgctxt "@warning:status" +#~ msgid "Please generate G-code before saving." +#~ msgstr "Genereer G-code voordat u het bestand opslaat." + +#~ msgctxt "@item:inmenu" +#~ msgid "Profile Assistant" +#~ msgstr "Profielassistent" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Profile Assistant" +#~ msgstr "Profielassistent" + +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "Firmware-upgrade Uitvoeren" + +#~ msgctxt "@label unknown material" +#~ msgid "Unknown" +#~ msgstr "Onbekend" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "No custom profile to import in file {0}" +#~ msgstr "Er is geen aangepast profiel om in het bestand {0} te importeren" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "This profile {0} contains incorrect data, could not import it." +#~ msgstr "Dit profiel {0} bevat incorrecte gegevens. Kan het profiel niet importeren." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "De machine die is vastgelegd in het profiel {0} ({1}) komt niet overeen met uw huidige machine ({2}). Kan het profiel niet importeren." + +#~ msgctxt "@title:window" +#~ msgid "Confirm uninstall " +#~ msgstr "Bevestig de-installeren " + +#~ msgctxt "@label:status" +#~ msgid "Paused" +#~ msgstr "Gepauzeerd" + +#~ msgctxt "@action:button" +#~ msgid "Previous" +#~ msgstr "Vorige" + +#~ msgctxt "@action:button" +#~ msgid "Next" +#~ msgstr "Volgende" + +#~ msgctxt "@label" +#~ msgid "Tip" +#~ msgstr "Tip" + +#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +#~ msgid "%1m / ~ %2g / ~ %4 %3" +#~ msgstr "%1 m / ~ %2 g / ~ %4 %3" + +#~ msgctxt "@label Print estimates: m for meters, g for grams" +#~ msgid "%1m / ~ %2g" +#~ msgstr "%1 m / ~ %2 g" + +#~ msgctxt "@label" +#~ msgid "Print experiment" +#~ msgstr "Print experiment" + +#~ msgctxt "@label" +#~ msgid "Checklist" +#~ msgstr "Checklist" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "Firmware-upgrade Uitvoeren" + +#~ msgctxt "description" +#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +#~ msgstr "Maakt het fabrikanten mogelijk nieuwe materiaal- en kwaliteitsprofielen aan te maken met behulp van een drop-in-gebruikersinterface." + +#~ msgctxt "name" +#~ msgid "Print Profile Assistant" +#~ msgstr "Profielassistent afdrukken" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Printen via Doodle3D WiFi-Box" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Printen via Doodle3D WiFi-Box" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Verbinding maken met Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "De gegevens worden naar Doodle3D Connect verzonden" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Kan geen gegevens naar Doodle3D Connect verzenden. Is er nog een andere taak actief?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Gegevens op Doodle3D Connect opslaan" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Het bestand is naar Doodle3D Connect verzonden" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Connect openen..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "De Doodle3D Connect-webinterface openen" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Blender-bestand" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Kan niet exporteren met de kwaliteit \"{}\"!\n" +#~ "Instelling teruggezet naar \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Contact" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Deze printer is niet opgezet om een groep Ultimaker 3 printers te hosten." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Deze printer is de host voor een groep van %1 Ultimaker 3 printers." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 is niet ingesteld voor het hosten van een groep aangesloten Ultimaker 3-printers" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Printers toevoegen/verwijderen" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Hiermee opent u de pagina met printtaken in uw standaard webbrowser." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Printtaken weergeven" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Printen voorbereiden" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Printen" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Beschikbaar" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Verbinding met de printer is verbroken" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Niet beschikbaar" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Onbekend" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Uitgeschakeld" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Gereserveerd" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Voorbereiden om te printen" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Print afgebroken" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Accepteert geen printtaken" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Klaar om: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Platform leegmaken" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Wacht op wijziging van configuratie" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Printtaken" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Printers" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Printers weergeven" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Pauzeren" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Hervatten" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Printen Afbreken" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Altijd vragen" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Profiel overschrijven" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Moeten nieuw geladen modellen op het platform worden geschikt? Gebruikt in combinatie met meerdere platformen (EXPERIMENTEEL)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Objecten niet schikken na laden" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "&Selectie Opslaan naar Bestand" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Opslaan &als..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "&Project opslaan..." + +# Added after the string freeze. +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Gebruik een hechtingsvel of lijm met deze materiaalcombinatie" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Accepteert G-code en verzendt deze code via wifi naar een Doodle3D WiFi-Box." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Deze optie biedt een bewerkingsvenster voor rechtstreeks bewerken van scripts." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Gereedschap voor live uitvoeren van scripts" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Hiermee kunnen Blender-bestanden rechtstreeks in Cura worden geopend." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Blender-integratie (experimenteel)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Waarschuwing modelcontrole" @@ -5068,10 +5568,6 @@ msgstr "Cura-profiellezer" #~ msgid "Browse plugins..." #~ msgstr "Door invoegtoepassingen bladeren..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Platform" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "&Plugins" @@ -5297,14 +5793,6 @@ msgstr "Cura-profiellezer" #~ "\n" #~ "Sorry." -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Profielassistent" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Profielassistent" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Geen materiaal ingevoerd" @@ -5435,14 +5923,6 @@ msgstr "Cura-profiellezer" #~ msgid "Configure setting visiblity..." #~ msgstr "Zichtbaarheid van instelling configureren..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1 m / ~ %2 g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1 m / ~ %2 g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Automatisch: %1" @@ -5479,14 +5959,6 @@ msgstr "Cura-profiellezer" #~ msgid "GCode Profile Reader" #~ msgstr "G-code-profiellezer" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Maakt het fabrikanten mogelijk nieuwe materiaal- en kwaliteitsprofielen aan te maken met behulp van een drop-in-gebruikersinterface." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Profielassistent afdrukken" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Er zijn fouten opgetreden tijdens het openen van het SolidWorks-bestand. Controleer of u het bestand zonder problemen in SolidWorks kunt openen." @@ -5683,10 +6155,6 @@ msgstr "Cura-profiellezer" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Deze printer is de host voor een groep van %1 aaneengesloten Ultimaker 3-printers" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Voorbereiden" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Voltooid op: " @@ -5840,25 +6308,6 @@ msgstr "Cura-profiellezer" #~ msgid "Extruder Temperature: %1/%2°C" #~ msgstr "Extrudertemperatuur: %1/%2°C" -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#~ msgctxt "@label" -#~ msgid "" -#~ msgstr "" -#~ "Project-Id-Version: PACKAGE VERSION\n" -#~ "Report-Msgid-Bugs-To: \n" -#~ "POT-Creation-Date: 2016-09-13 17:41+0200\n" -#~ "PO-Revision-Date: 2016-09-29 13:44+0200\n" -#~ "Last-Translator: FULL NAME \n" -#~ "Language-Team: LANGUAGE \n" -#~ "Language: \n" -#~ "MIME-Version: 1.0\n" -#~ "Content-Type: text/plain; charset=UTF-8\n" -#~ "Content-Transfer-Encoding: 8bit\n" - #~ msgctxt "@label" #~ msgid "Bed Temperature: %1/%2°C" #~ msgstr "Printbedtemperatuur: %1/%2°C" diff --git a/resources/i18n/nl_NL/fdmextruder.def.json.po b/resources/i18n/nl_NL/fdmextruder.def.json.po index 80241171ac..9dfe5e859e 100644 --- a/resources/i18n/nl_NL/fdmextruder.def.json.po +++ b/resources/i18n/nl_NL/fdmextruder.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 14:25+0100\n" "Last-Translator: Bothof \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -166,6 +166,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "De Z-coördinaat van de positie waar filament in de nozzle wordt teruggeduwd aan het begin van het printen." +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "Printkoelventilator van extruder" + +#: 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 "Het nummer van de bij deze extruder behorende printkoelventilator. Verander de standaardwaarde 0 alleen als u voor elke extruder een andere printkoelventilator hebt." + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/nl_NL/fdmprinter.def.json.po b/resources/i18n/nl_NL/fdmprinter.def.json.po index 038b2a4e56..1733d1830e 100644 --- a/resources/i18n/nl_NL/fdmprinter.def.json.po +++ b/resources/i18n/nl_NL/fdmprinter.def.json.po @@ -5,16 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-11-06 15:03+0100\n" "Last-Translator: Bothof \n" "Language-Team: Dutch\n" "Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.6\n" #: fdmprinter.def.json msgctxt "machine_settings label" @@ -56,7 +57,9 @@ msgctxt "machine_start_gcode description" msgid "" "G-code commands to be executed at the very start - separated by \n" "." -msgstr "G-code-opdrachten die aan het begin worden uitgevoerd, gescheiden door \n." +msgstr "" +"G-code-opdrachten die aan het begin worden uitgevoerd, gescheiden door \n" +"." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -68,7 +71,9 @@ msgctxt "machine_end_gcode description" msgid "" "G-code commands to be executed at the very end - separated by \n" "." -msgstr "G-code-opdrachten die aan het eind worden uitgevoerd, gescheiden door \n." +msgstr "" +"G-code-opdrachten die aan het eind worden uitgevoerd, gescheiden door \n" +"." #: fdmprinter.def.json msgctxt "material_guid label" @@ -80,6 +85,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "GUID van het materiaal. Deze optie wordt automatisch ingesteld. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Diameter" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Bepaalt de diameter van het gebruikte filament. Pas deze waarde aan de diameter van het gebruikte filament aan." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -533,7 +548,7 @@ msgstr "Maximale Acceleratie X" #: fdmprinter.def.json msgctxt "machine_max_acceleration_x description" msgid "Maximum acceleration for the motor of the X-direction" -msgstr "De maximale acceleratie van de motor in de X-richting." +msgstr "De maximale acceleratie van de motor in de X-richting" #: fdmprinter.def.json msgctxt "machine_max_acceleration_y label" @@ -683,7 +698,7 @@ msgstr "Minimale Doorvoersnelheid" #: fdmprinter.def.json msgctxt "machine_minimum_feedrate description" msgid "The minimal movement speed of the print head." -msgstr "De minimale bewegingssnelheid van de printkop" +msgstr "De minimale bewegingssnelheid van de printkop." #: fdmprinter.def.json msgctxt "machine_feeder_wheel_diameter label" @@ -733,7 +748,7 @@ msgstr "Lijnbreedte" #: fdmprinter.def.json msgctxt "line_width description" msgid "Width of a single line. Generally, the width of each line should correspond to the width of the nozzle. However, slightly reducing this value could produce better prints." -msgstr "De breedte van een enkele lijn. Over het algemeen dient de breedte van elke lijn overeen te komen met de breedte van de nozzle. Wanneer deze waarde echter iets wordt verlaagd, resulteert dit in betere prints" +msgstr "De breedte van een enkele lijn. Over het algemeen dient de breedte van elke lijn overeen te komen met de breedte van de nozzle. Wanneer deze waarde echter iets wordt verlaagd, resulteert dit in betere prints." #: fdmprinter.def.json msgctxt "wall_line_width label" @@ -1055,6 +1070,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Zigzag" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "Boven-/onderkant Polygonen Verbinden" + +#: 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 "Verbind skinpaden aan de boven-/onderkant waar ze naast elkaar lopen. Met deze instelling wordt bij concentrische patronen de bewegingstijd aanzienlijk verkort. Dit kan echter ten koste gaan van de kwaliteit van de bovenste laag aangezien de verbindingen in het midden van de vulling kunnen komen te liggen." + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1135,6 +1160,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Hiermee wordt de doorvoer gecompenseerd voor delen van binnenwanden die worden geprint op een plek waar zich al een wanddeel bevindt." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "Minimale Wand-doorvoer" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "Minimaal toegestane doorvoerpercentage voor een wandlijn. Compensatie van de overlapping van wanden zorgt voor een kleinere doorvoer tijdens het printen van een wand als deze dicht bij een bestaande wand ligt. Wanden waarbij de doorvoerwaarde lager is dan deze waarde, worden vervangen door een beweging. Wanneer u deze instelling gebruikt, moet u compensatie van overlapping van wanden inschakelen en de buitenwand printen voordat u de binnenwanden print." + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "Bij Voorkeur Intrekken" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "Als deze optie ingeschakeld is, volgt er een intrekbeweging in plaats van een combing-beweging ter vervanging van wanden waarbij de doorvoer lager is dan de minimale doorvoerwaarde." + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1452,8 +1497,8 @@ msgstr "Vulpatroon" #: 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "Het patroon van het vulmateriaal van de print. De lijn- en zigzagvulling veranderen per vullaag van richting, waardoor wordt bespaard op materiaalkosten. De raster-, driehoeks-, tri-hexagonale, kubische, achtvlaks-, afgeknotte kubus-, kruis- en concentrische patronen worden elke laag volledig geprint. Kubische, afgeknotte kubus- en achtvlaksvullingen veranderen elke laag voor een meer gelijke krachtsverdeling in elke richting." +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 "Het patroon van het vulmateriaal van de print. De lijn- en zigzagvulling veranderen per vullaag van richting, waardoor wordt bespaard op materiaalkosten. De raster-, driehoeks-, tri-hexagonale, kubische, achtvlaks-, afgeknotte kubus-, kruis- en concentrische patronen worden elke laag volledig geprint. Gyroïde, kubische, afgeknotte kubus- en achtvlaksvullingen veranderen elke laag voor een meer gelijke krachtverdeling in elke richting." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1500,11 +1545,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Concentrisch" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrisch 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1520,6 +1560,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "Kruis 3D" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "Gyroïde" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1530,6 +1575,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Verbindt de uiteinden waar het vulpatroon bij de binnenwand komt, met een lijn die de vorm van de binnenwand volgt. Als u deze instelling inschakelt, kan de vulling beter hechten aan de wanden en wordt de invloed van de vulling op de kwaliteit van de verticale oppervlakken kleiner. Als u deze instelling uitschakelt, wordt er minder materiaal gebruikt." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "Vulpolygonen Verbinden" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "Vulpaden verbinden waar ze naast elkaar lopen. Bij vulpatronen die uit meerdere gesloten polygonen bestaan, wordt met deze instelling de bewegingstijd aanzienlijk verkort." + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1560,6 +1615,30 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Het vulpatroon wordt over deze afstand verplaatst langs de Y-as." +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "Vermenigvuldiging Vullijn" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "Zet elke vullijn om naar zoveel keer vullijnen. De extra lijnen kruisen elkaar niet, maar mijden elkaar. Hierdoor wordt de vulling stijver, maar duurt het printen langer en wordt er meer materiaal verbruikt." + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "Aantal Extra Wanden Rond vulling" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" +"Voeg extra wanden toe rondom de vulling. Deze wanden kunnen ervoor zorgen dat de skin aan de boven-/onderkant minder doorzakt. Dit betekent dat u met alleen wat extra materiaal voor dezelfde kwaliteit minder skinlagen aan de boven-/onderkant nodig hebt.\n" +"Deze optie kan in combinatie met de optie 'Polygonen voor de vulling verbinden' worden gebruikt om alle vulling in één doorvoerpad te verbinden zonder extra bewegingen of intrekkingen, mits correct ingesteld." + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1788,7 +1867,7 @@ msgstr "Standaard printtemperatuur" #: 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 "De standaardtemperatuur waarmee wordt geprint. Dit moet overeenkomen met de basistemperatuur van een materiaal. Voor alle andere printtemperaturen moet een offset worden gebruikt die gebaseerd is op deze waarde." +msgstr "De standaardtemperatuur waarmee wordt geprint. Dit moet overeenkomen met de basistemperatuur van een materiaal. Voor alle andere printtemperaturen moet een offset worden gebruikt die gebaseerd is op deze waarde" #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1848,7 +1927,7 @@ msgstr "Standaardtemperatuur platform" #: fdmprinter.def.json msgctxt "default_material_bed_temperature description" msgid "The default temperature used for the heated build plate. This should be the \"base\" temperature of a build plate. All other print temperatures should use offsets based on this value" -msgstr "De standaardtemperatuur die wordt gebruikt voor het verwarmde platform. Dit moet overeenkomen met de basistemperatuur van een platform. Voor alle andere printtemperaturen moet een offset worden gebruikt die is gebaseerd op deze waarde." +msgstr "De standaardtemperatuur die wordt gebruikt voor het verwarmde platform. Dit moet overeenkomen met de basistemperatuur van een platform. Voor alle andere printtemperaturen moet een offset worden gebruikt die is gebaseerd op deze waarde" #: fdmprinter.def.json msgctxt "material_bed_temperature label" @@ -1870,16 +1949,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "De temperatuur van het verwarmde platform voor de eerste laag." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Diameter" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Bepaalt de diameter van het gebruikte filament. Pas deze waarde aan de diameter van het gebruikte filament aan." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -1948,7 +2017,7 @@ msgstr "Intrekken bij laagwisseling" #: fdmprinter.def.json msgctxt "retract_at_layer_change description" msgid "Retract the filament when the nozzle is moving to the next layer." -msgstr "Trek het filament in wanneer de nozzle naar de volgende laag beweegt. " +msgstr "Trek het filament in wanneer de nozzle naar de volgende laag beweegt." #: fdmprinter.def.json msgctxt "retraction_amount label" @@ -2318,7 +2387,7 @@ msgstr "Maximale Snelheid voor het Afstemmen van Doorvoer" #: fdmprinter.def.json msgctxt "speed_equalize_flow_max description" msgid "Maximum print speed when adjusting the print speed in order to equalize flow." -msgstr "Maximale printsnelheid tijdens het aanpassen van de printsnelheid om de doorvoer af te stemmen" +msgstr "Maximale printsnelheid tijdens het aanpassen van de printsnelheid om de doorvoer af te stemmen." #: fdmprinter.def.json msgctxt "acceleration_enabled label" @@ -2717,8 +2786,8 @@ msgstr "Combing-modus" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "Met combing blijft de nozzle tijdens bewegingen binnen eerder geprinte delen. Hierdoor zijn de bewegingen iets langer, maar hoeft het filament minder vaak te worden ingetrokken. Als combing is uitgeschakeld, wordt het materiaal ingetrokken en beweegt de nozzle in een rechte lijn naar het volgende punt. Het is ook mogelijk om combing over boven-/onderskingedeelten te voorkomen door alleen combing te gebruiken over de vulling." +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "Met combing blijft de nozzle tijdens bewegingen binnen eerder geprinte delen. Hierdoor zijn de bewegingen iets langer, maar hoeft het filament minder vaak te worden ingetrokken. Als combing uitgeschakeld is, wordt het materiaal ingetrokken en beweegt de nozzle in een rechte lijn naar het volgende punt. Het is ook mogelijk om combing over boven-/onderskingedeelten te voorkomen en ook om alleen combing te gebruiken binnen de vulling. Houd er rekening mee dat de optie 'Binnen Vulling' precies dezelfde uitwerking heeft als de optie 'Niet in skin' in eerdere versies van Cura." #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2735,6 +2804,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Niet in skin" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "Binnen Vulling" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3115,11 +3189,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Concentrisch" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrisch 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3180,6 +3249,56 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "De afstand tussen de geprinte lijnen van de supportstructuur. Deze instelling wordt berekend op basis van de dichtheid van de supportstructuur." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "Lijnafstand Supportstructuur Eerste Laag" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "Afstand tussen de lijnen van de supportstructuur voor de eerste laag. Deze wordt berekend op basis van de dichtheid van de supportstructuur." + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "Lijnrichting Vulling Supportstructuur" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "Richting van het vulpatroon voor supportstructuren. Het vulpatroon voor de supportstructuur wordt in het horizontale vlak gedraaid." + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "Supportbrim inschakelen" + +#: 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 "Genereer een brim binnen de supportvulgebieden van de eerste laag. Deze brim wordt niet rondom maar onder de supportstructuur geprint. Als u deze instelling inschakelt, hecht de supportstructuur beter aan het platform." + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "Breedte supportbrim" + +#: 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 "De breedte van de brim die onder de support wordt geprint. Een bredere brim kost meer materiaal, maar hecht beter aan het platform." + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "Aantal supportbrimlijnen" + +#: 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 "Het aantal lijnen dat voor de supportbrim wordt gebruikt. Meer brimlijnen zorgen voor betere hechting aan het platform, maar kosten wat extra materiaal." + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3470,11 +3589,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Concentrisch" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrisch 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3510,11 +3624,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Concentrisch" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrisch 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3550,16 +3659,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Concentrisch" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concentrisch 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Zigzag" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "Ventilatorsnelheid Overschrijven" + +#: 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 "Wanneer deze optie ingeschakeld is, wordt de ventilatorsnelheid voor het koelen van de print gewijzigd voor de skinregio's direct boven de supportstructuur." + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "Ondersteunde Ventilatorsnelheid Skin" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "Percentage van de ventilatorsnelheid dat tijdens het printen van skinregio's direct boven de supportstructuur moet worden gebruikt. Bij gebruikmaking van een hoge ventilatorsnelheid kan de supportstructuur gemakkelijker worden verwijderd." + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3710,7 +3834,9 @@ msgctxt "skirt_gap description" msgid "" "The horizontal distance between the skirt and the first layer of the print.\n" "This is the minimum distance. Multiple skirt lines will extend outwards from this distance." -msgstr "De horizontale afstand tussen de skirt en de eerste laag van de print.\nDit is de minimumafstand. Als u meerdere skirtlijnen print, worden deze vanaf deze afstand naar buiten geprint." +msgstr "" +"De horizontale afstand tussen de skirt en de eerste laag van de print.\n" +"Dit is de minimumafstand. Als u meerdere skirtlijnen print, worden deze vanaf deze afstand naar buiten geprint." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3742,6 +3868,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "Het aantal lijnen dat voor een brim wordt gebruikt. Meer lijnen zorgen voor betere hechting aan het platform, maar verkleinen uw effectieve printgebied." +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "Brim vervangt supportstructuur" + +#: 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 "Dwing af dat de brim rond het model wordt geprint, zelfs als deze ruimte anders door supportstructuur zou worden ingenomen. Hierdoor worden enkele gebieden van de eerste supportlaag vervangen door brimgebieden." + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -3884,8 +4020,8 @@ msgstr "Breedte van de lijnen van de onderste laag van de raft. Deze lijnen moet #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Tussenruimte Lijnen Raft" +msgid "Raft Base Line Spacing" +msgstr "Tussenruimte Lijnen Grondvlak Raft" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4102,16 +4238,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Het minimale volume voor elke laag van de primepijler om voldoende materiaal te zuiveren." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Dikte primepijler" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "De dikte van de holle primepijler. Een dikte groter dan de helft van het minimale volume van de primepijler leidt tot een primepijler met een hoge dichtheid." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4152,26 +4278,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Veeg na het printen van de primepijler met één nozzle het doorgevoerde materiaal van de andere nozzle af aan de primepijler." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Nozzle vegen na wisselen" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Veeg na het wisselen van de extruder het doorgevoerde materiaal van de nozzle af aan het eerste dat wordt geprint. Hiermee wordt met een langzame beweging het doorgevoerde materiaal veilig afgeveegd op een plek waar dit het minste kwaad kan voor de oppervlaktekwaliteit van de print." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Zuiveringsvolume primepijler" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "De hoeveelheid filament die wordt gezuiverd tijdens afvegen aan de primepijler. Zuiveren wordt gebruikt om filament te compenseren dat tijdens inactiviteit van de nozzle wordt verloren via uitloop." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4657,6 +4763,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Grafiek om de materiaaldoorvoer (in mm3 per seconde) te koppelen aan de temperatuur (graden Celsius)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "Minimale Polygoonomtrek" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "Polygonen in geslicete lagen, die een kleinere omtrek hebben dan deze waarde, worden eruit gefilterd. Bij lagere waarden krijgt het raster een hogere resolutie, waardoor het slicen langer duurt. Dit is voornamelijk bedoeld voor SLA-printers met een hoge resolutie en zeer kleine 3D-modellen die veel details bevatten." + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5167,7 +5283,9 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "De afstand van een opwaartse beweging waarbij de doorvoersnelheid wordt gehalveerd.\nHierdoor ontstaat een betere hechting aan voorgaande lagen, zonder dat het materiaal in die lagen te zeer wordt verwarmd. Alleen van toepassing op Draadprinten." +msgstr "" +"De afstand van een opwaartse beweging waarbij de doorvoersnelheid wordt gehalveerd.\n" +"Hierdoor ontstaat een betere hechting aan voorgaande lagen, zonder dat het materiaal in die lagen te zeer wordt verwarmd. Alleen van toepassing op Draadprinten." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -5314,6 +5432,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "De drempel of er al dan niet een kleinere laag moet worden gebruikt. Deze waarde wordt vergeleken met de waarde van de steilste helling in een laag." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "Hoek Overhangende Wand" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "Wanden die overhangen in een hoek groter dan deze waarde, worden geprint met instellingen voor overhangende wanden. Wanneer de waarde 90 is, wordt een wand niet als een overhangende wand gezien." + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "Snelheid Overhangende Wand" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "Overhangende wanden worden geprint met een snelheid die gelijk is aan dit percentage van hun normale printsnelheid." + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5344,16 +5482,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Als voor een skinregio minder supportstructuur wordt geprint dan dit percentage van zijn oppervlakte, print u dit met de bruginstellingen. Anders wordt er geprint met de normale skininstellingen." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Maximale overhang brugwand" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "De maximaal toegestane breedte van de vrije ruimte onder een wandlijn voordat de wand wordt geprint met de bruginstellingen. Dit wordt uitgedrukt in een percentage van de lijnbreedte van de wand. Als de vrije ruimte breder is dan deze waarde, wordt de wandlijn geprint met de bruginstellingen. Anders wordt de wandlijn geprint met de normale instellingen. Hoe lager de waarde, hoe meer kans dat de overhangende wandlijnen met bruginstellingen worden geprint." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5574,6 +5702,74 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Omzettingsmatrix die moet worden toegepast op het model wanneer dit wordt geladen vanuit een bestand." +#~ 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 happend midway over infill this feature can reduce the top surface quality." +#~ msgstr "Skinpaden aan boven-/onderkant verbinden waar ze naast elkaar lopen. Met deze instelling wordt bij concentrische patronen de bewegingstijd aanzienlijk verkort. Dit kan echter ten koste gaan van de kwaliteit van de bovenste laag aangezien de verbindingen in het midden van de vulling kunnen komen te liggen." + +#~ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +#~ msgstr "Het patroon van het vulmateriaal van de print. De lijn- en zigzagvulling veranderen per vullaag van richting, waardoor wordt bespaard op materiaalkosten. De raster-, driehoeks-, tri-hexagonale, kubische, achtvlaks-, afgeknotte kubus-, kruis- en concentrische patronen worden elke laag volledig geprint. Kubische, afgeknotte kubus- en achtvlaksvullingen veranderen elke laag voor een meer gelijke krachtsverdeling in elke richting." + +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrisch 3D" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "Met combing blijft de nozzle tijdens bewegingen binnen eerder geprinte delen. Hierdoor zijn de bewegingen iets langer, maar hoeft het filament minder vaak te worden ingetrokken. Als combing is uitgeschakeld, wordt het materiaal ingetrokken en beweegt de nozzle in een rechte lijn naar het volgende punt. Het is ook mogelijk om combing over boven-/onderskingedeelten te voorkomen door alleen combing te gebruiken over de vulling." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrisch 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrisch 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrisch 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concentrisch 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Tussenruimte Lijnen Raft" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Dikte primepijler" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "De dikte van de holle primepijler. Een dikte groter dan de helft van het minimale volume van de primepijler leidt tot een primepijler met een hoge dichtheid." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Nozzle vegen na wisselen" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Veeg na het wisselen van de extruder het doorgevoerde materiaal van de nozzle af aan het eerste dat wordt geprint. Hiermee wordt met een langzame beweging het doorgevoerde materiaal veilig afgeveegd op een plek waar dit het minste kwaad kan voor de oppervlaktekwaliteit van de print." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Zuiveringsvolume primepijler" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "De hoeveelheid filament die wordt gezuiverd tijdens afvegen aan de primepijler. Zuiveren wordt gebruikt om filament te compenseren dat tijdens inactiviteit van de nozzle wordt verloren via uitloop." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Maximale overhang brugwand" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "De maximaal toegestane breedte van de vrije ruimte onder een wandlijn voordat de wand wordt geprint met de bruginstellingen. Dit wordt uitgedrukt in een percentage van de lijnbreedte van de wand. Als de vrije ruimte breder is dan deze waarde, wordt de wandlijn geprint met de bruginstellingen. Anders wordt de wandlijn geprint met de normale instellingen. Hoe lager de waarde, hoe meer kans dat de overhangende wandlijnen met bruginstellingen worden geprint." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Optimaliseer de volgorde waarin wanden worden geprint om het aantal intrekbewegingen en de afgelegde afstand te verkleinen. Deze instelling is gunstig voor de meeste onderdelen. Bij sommige onderdelen duurt het printen echter langer. Controleer daarom de verwachte printtijd met en zonder optimalisatie." diff --git a/resources/i18n/pl_PL/cura.po b/resources/i18n/pl_PL/cura.po index 3c9db61d59..2d11edabff 100644 --- a/resources/i18n/pl_PL/cura.po +++ b/resources/i18n/pl_PL/cura.po @@ -5,18 +5,18 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" -"PO-Revision-Date: 2018-04-14 14:35+0200\n" -"Last-Translator: 'Jaguś' Paweł Jagusiak and Andrzej 'anraf1001' Rafalski\n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" +"PO-Revision-Date: 2018-09-21 20:52+0200\n" +"Last-Translator: 'Jaguś' Paweł Jagusiak, Andrzej 'anraf1001' Rafalski and Jakub 'drzejkopf' Świeciński\n" "Language-Team: reprapy.pl\n" "Language: pl_PL\n" "MIME-Version: 1.0\n" "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" +"X-Generator: Poedit 2.1.1\n" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:22 msgctxt "@action" @@ -40,10 +40,21 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "Pliki G-code" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "Zapisywacz G-code nie obsługuje trybu nietekstowego." + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" -msgstr "" +msgstr "Asystent Modelu 3D" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:80 #, python-brace-format @@ -54,103 +65,56 @@ msgid "" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" msgstr "" +"

Jeden lub więcej modeli 3D może nie zostać wydrukowanych optymalnie ze względu na wymiary modelu oraz konfigurację materiału:

\n" +"

{model_names}

\n" +"

Dowiedz się, jak zapewnić najlepszą możliwą jakość oraz niezawodnośc wydruku.

\n" +"

Zobacz przewodnik po jakości wydruku (strona w języku angielskim)

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Drukuj z Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Drukuj z Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Łączenie z Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Anuluj" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Wysyłanie danych do Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Nie można wysłać danych do Doodle3D Connect. Czy inne zadanie jest aktywne?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Przetrzymywanie danych na Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Plik wysłany do Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Otwórz Connect..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Otwórz interfejs Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Pokaż Dziennik" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Spłaszczyć aktywne ustawienia" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Profil został spłaszczony i aktywowany." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "Drukowanie USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Drukuj przez USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Drukuj przez USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "Połączono przez USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "Trwa drukowanie przez USB, zamknięcie Cura spowoduje jego zatrzymanie. Jesteś pewien?" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -160,12 +124,12 @@ msgstr "Plik X3G" #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16 msgctxt "X3g Writer Plugin Description" msgid "Writes X3g to files" -msgstr "" +msgstr "Zapisuje do plików X3g" #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:21 msgctxt "X3g Writer File Description" msgid "X3g File" -msgstr "" +msgstr "Plik X3g" #: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17 #: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17 @@ -173,7 +137,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Skompresowany Plik G-code" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "Zapisywacz skompresowanego G-code nie obsługuje trybu tekstowego." + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "Pakiet Formatu Ultimaker" @@ -195,7 +164,7 @@ msgid "Save to Removable Drive {0}" msgstr "Zapisz na dysk wymienny {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Nie ma żadnych formatów plików do zapisania!" @@ -234,7 +203,7 @@ msgstr "Nie można zapisać na wymiennym dysku {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "Błąd" @@ -263,8 +232,8 @@ msgstr "Wyjmij urządzenie wymienne {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "Ostrzeżenie" @@ -291,259 +260,269 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Dysk wymienny" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Drukuj przez sieć" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Drukuj przez sieć" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "Połączono przez sieć." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "Połączono przez sieć. Proszę zatwierdzić żądanie dostępu na drukarce." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "Połączono przez sieć. Brak dostępu do sterowania drukarką." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "Wymagany dostęp do drukarki. Proszę zatwierdzić prośbę na drukarce" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "Status uwierzytelniania" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "Status Uwierzytelniania" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "Spróbuj ponownie" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Prześlij ponownie żądanie dostępu" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Dostęp do drukarki został zaakceptowany" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "Brak dostępu do tej drukarki. Nie można wysłać zadania drukowania." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "Poproś o dostęp" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Wyślij żądanie dostępu do drukarki" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Nie można uruchomić nowego zadania drukowania." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." msgstr "Wystąpił problem z konfiguracją twojego Ultimaker'a, przez który nie można rozpocząć wydruku. Proszę rozwiąż te problemy przed kontynuowaniem." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Niedopasowana konfiguracja" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "Czy na pewno chcesz drukować z wybraną konfiguracją?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Występuje niezgodność między konfiguracją lub kalibracją drukarki a Curą. Aby uzyskać najlepszy rezultat, zawsze tnij dla Print core'ów i materiałów włożonych do drukarki." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "Wysyłanie nowych zadań (tymczasowo) zostało zablokowane, dalej wysyłane jest poprzednie zadanie." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Wysyłanie danych do drukarki" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "Wysyłanie danych" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Anuluj" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "Brak Printcore'a w slocie {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "Brak załadowanego materiału w slocie {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, python-brace-format msgctxt "@label" msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" msgstr "Inny PrintCore (Cura: {cura_printcore_name}, Drukarka: {remote_printcore_name}) wybrany dla extrudera {extruder_id}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "Różne materiały (Cura: {0}, Drukarka: {1}) wybrane do dzyszy {2}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Synchronizuj się z drukarką" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Czy chcesz używać bieżącej konfiguracji drukarki w programie Cura?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "PrintCore'y i/lub materiały w drukarce różnią się od tych w obecnym projekcie. Dla najlepszego rezultatu, zawsze tnij dla wybranych PrinCore'ów i materiałów, które są umieszczone w drukarce." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" msgstr "Połączone przez sieć" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "Zadanie drukowania zostało pomyślnie wysłane do drukarki." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "Dane Wysłane" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "Zobacz w Monitorze" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "{printer_name} skończyła drukowanie '{job_name}'." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "Zadanie '{job_name}' zostało zakończone." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "Drukowanie zakończone" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Połącz przez sieć" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Monitor" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "Nie można uzyskać dostępu do informacji o aktualizacji." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Nowe funkcje są dostępne dla twojej {machine_name}! Rekomendowane jest zaktualizowanie oprogramowania drukarki." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Nowe oprogramowanie %s jest dostępne" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "Jak zaktualizować" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "Nie można uzyskać dostępu do informacji o aktualizacji" - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Widok warstwy" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Cura nie wyświetla dokładnie warstw kiedy drukowanie przewodowe jest włączone" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "Widok symulacji" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "Modyfikuj G-Code" @@ -557,32 +536,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Stwórz obszar, w którym podpory nie będą drukowane." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura zbiera anonimowe dane statystyczne." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "Zbieranie Danych" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" -msgstr "" +msgstr "Więcej informacji" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." -msgstr "" +msgstr "Zobacz więcej informacji o tym, jakie dane przesyła Cura." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "Zezwól" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Zezwól Cura na wysyłanie anonimowych danych statystycznych, aby pomóc w wyborze przyszłych usprawnień Cura. Część twoich ustawień i preferencji jest wysyłana, a także wersja Cury i kod modelu który tniesz." @@ -590,21 +569,7 @@ msgstr "Zezwól Cura na wysyłanie anonimowych danych statystycznych, aby pomóc #: /home/ruben/Projects/Cura/plugins/LegacyProfileReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" -msgstr "Profile Cura 15.04 " - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Plik Blender" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "" -"Nie można wyeksportować używając \"{}\" jakości!\n" -"Powrócono do \"{}\"." +msgstr "Profile Cura 15.04" #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" @@ -631,49 +596,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Obraz GIF" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Nie można pociąć z obecnym materiałem, ponieważ nie jest on kompatybilny z wybraną maszyną lub konfiguracją." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "Nie można pociąć" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Nie można pociąć z bieżącymi ustawieniami. Następujące ustawienia mają błędy: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Nie można pokroić przez ustawienia osobne dla modelu. Następujące ustawienia mają błędy w jednym lub więcej modeli: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Nie można pociąć, ponieważ wieża czyszcząca lub jej pozycja(e) są niewłaściwe." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "Nie można pociąć, ponieważ obecne są obiekty powiązane z wyłączonym ekstruderem %s." + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Nic do pocięcia, ponieważ żaden z modeli nie pasuje do obszaru roboczego. Proszę o przeskalowanie lub obrócenie modelu, żeby pasował." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "Przetwarzanie warstw" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "Informacja" @@ -689,29 +661,40 @@ msgid "Configure Per Model Settings" msgstr "Konfiguruj ustawienia każdego modelu z osobna" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "Zalecane" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "Niestandardowe" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Plik 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "Dysza" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "Plik projektu {0} zawiera nieznany typ maszyny {1}. Nie można zaimportować maszyny. Zostaną zaimportowane modele." + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "Otwórz Plik Projektu" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -722,18 +705,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Plik G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Analizowanie G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "Szczegóły G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Przed wysłaniem pliku upewnij się, że G-code jest odpowiedni do konfiguracji drukarki. Przedstawienie G-kodu może nie być dokładne." @@ -744,27 +727,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Profile Cura" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "Plik 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Plik Cura Project 3MF" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "Błąd zapisu pliku 3mf." + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "Wybierz aktualizacje" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "Uaktualnij oprogramowanie układowe" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -775,79 +758,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "Wypoziomuj stół" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "Zewnętrzna ściana" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "Ściany wewnętrzne" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "Skin" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "Wypełnienie" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "Wypełnienie podpór" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "Łączenie podpory" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" -msgstr "Podpory " +msgstr "Podpory" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "Obwódka" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "Ruch jałowy" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "Retrakcja" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "Inny" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "Nieznany" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Plik pocięty wcześniej {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Plik już istnieje" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -859,23 +842,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Nie zastąpione" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Wybrany materiał jest niezgodny z wybranym urządzeniem lub konfiguracją." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Niekompatybilny Materiał" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "Ustawienia został zmienione, aby pasowały do obecnej dostępności extruderów: [%s]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "Ustawienia zostały zaaktualizowane" @@ -904,8 +887,6 @@ msgid "Export succeeded" msgstr "Eksport udany" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" @@ -913,58 +894,70 @@ msgstr "Nie udało się zaimportować profilu z {0}: or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" -msgstr "Brak niestandardowego profilu do zaimportowania do pliku {0}" +msgstr "" + +#: /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 "" #: /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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." -msgstr "Ten profil {0} zawiera błędne dane, nie można go zaimportować." +msgstr "" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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 "Maszyna zdefiniowana w profilu {0} ({1}) nie zgadza się z obecnie wybraną maszyną ({2}), nie można tego zaimportować." +msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Profil zaimportowany {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "Plik {0} nie zawiera żadnego poprawnego profilu." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "Profil {0} ma nieznany typ pliku lub jest uszkodzony." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "Niestandardowy profil" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Profilowi brakuje typu jakości." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Nie można znaleźć typu jakości {0} dla bieżącej konfiguracji." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -991,45 +984,45 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Wszystkie Pliki (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "Niestandardowy materiał" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "Niestandardowy" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "Wysokość obszaru roboczego została zmniejszona ze względu na wartość ustawienia Print Sequence (Sekwencja wydruku), aby zapobiec kolizji z wydrukowanymi modelami." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Obszar Roboczy" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" -msgstr "" +msgstr "Nie można utworzyć archiwum z folderu danych użytkownika: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" -msgstr "" +msgstr "Kopia zapasowa" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." -msgstr "" +msgstr "Podjęto próbę przywrócenia kopii zapasowej Cura na podstawie niepoprawnych danych lub metadanych." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." -msgstr "" +msgstr "Podjęto próbę przywrócenia kopii zapasowej Cura, która nie odpowiada obecnej wersji programu." #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 msgctxt "@info:status" @@ -1037,32 +1030,32 @@ msgid "Multiplying and placing objects" msgstr "Zwielokrotnienie i umieszczanie przedmiotów" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Rozmieszczenie Obiektów" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Nie można znaleźć lokalizacji w obrębie obszaru roboczego dla wszystkich obiektów" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Znajdowanie nowej lokalizacji obiektów" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Szukanie Lokalizacji" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Nie można Znaleźć Lokalizacji" @@ -1201,223 +1194,233 @@ msgctxt "@action:button" msgid "Send report" msgstr "Wyślij raport" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Ładowanie drukarek..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Ustawianie sceny ..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Ładowanie interfejsu ..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f mm" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "Jednocześnie można załadować tylko jeden plik G-code. Pominięto importowanie {0}" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "Nie można otworzyć żadnego innego pliku, jeśli ładuje się G-code. Pominięto importowanie {0}" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Wybrany model był zbyta mały do załadowania." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Ustawienia Drukarki" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Drukarka" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Ustawienia drukarki" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Szerokość)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Głębokość)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Wysokość)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Kształt stołu roboczego" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Początek na środku" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Podgrzewany stół" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Wersja G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Ustawienia głowic drukujących" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Odległość od lewej strony głowicy do środka dyszy. Używane do unikania kolizji pomiędzy poprzednimi wydrukami a głowicą podczas drukowania \"Jeden na Raz\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Odległość od przedniej strony głowicy do środka dyszy. Używane do unikania kolizji pomiędzy poprzednimi wydrukami a głowicą podczas drukowania \"Jeden na Raz\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Odległość od prawej strony głowicy do środka dyszy. Używane do unikania kolizji pomiędzy poprzednimi wydrukami a głowicą podczas drukowania \"Jeden na Raz\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Odległość od tylnej strony głowicy do środka dyszy. Używane do unikania kolizji pomiędzy poprzednimi wydrukami a głowicą podczas drukowania \"Jeden na Raz\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Wysokość ramy" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "Różnica w wysokości pomiędzy końcówką dyszy i systemem suwnym (osie X i Y). Używane do unikania kolizji z poprzednimi wydrukami podczas drukowania \"Jeden na Raz\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Liczba ekstruderów" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "Początkowy G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Komedy G-code, które są wykonywane na samym początku." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "Końcowy G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Komendy G-code, które są wykonywane na samym końcu." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Ustawienia dyszy" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Rozmiar dyszy" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Kompatybilna średnica materiału" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "Nominalna średnica filamentu wspierana przez drukarkę. Dokładna średnica będzie nadpisana przez materiał i/lub profil." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "Korekcja dyszy X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Korekcja dyszy Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "Początkowy G-code Ekstrudera" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "Końcowy G-code Ekstrudera" @@ -1435,31 +1438,45 @@ msgstr "Zainstalowane" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxErrorPage.qml:16 msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." -msgstr "" +msgstr "Nie można połączyć się z bazą danych pakietów Cura. Sprawdź swoje połączenie z internetem." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "Wtyczki" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materiał" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" -msgstr "" +msgstr "Wersja" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:85 msgctxt "@label" msgid "Last updated" -msgstr "" +msgstr "Ostatnia aktualizacja" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:91 msgctxt "@label" msgid "Author" -msgstr "" +msgstr "Autor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "Pobrań" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "Nieznany" @@ -1474,53 +1491,93 @@ msgstr "Aktualizuj" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:31 msgctxt "@action:button" msgid "Updating" -msgstr "" +msgstr "Aktualizowanie" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:32 msgctxt "@action:button" msgid "Updated" -msgstr "" +msgstr "Zaktualizowano" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/Toolbox.qml:13 msgctxt "@title" msgid "Toolbox" -msgstr "" +msgstr "Narzędzia" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml:25 msgctxt "@action:button" msgid "Back" +msgstr "Powrót" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" msgstr "" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "Odinstalowujesz materiały i/lub profile, które są aktualnie używane. Zatwierdzenie spowoduje przywrócenie bieżących ustawień materiału/profilu do ustawień domyślnych." + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "Materiały" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "Profile" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "Potwierdź" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." -msgstr "" +msgstr "Należy uruchomić ponownie Cura, aby zmiany w pakietach przyniosły efekt." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" -msgstr "" +msgstr "Zakończ Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "Udział Społeczności" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "Wtyczki Społeczności" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "Materiały Podstawowe" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" -msgstr "" +msgstr "Zainstalowano" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:19 msgctxt "@label" msgid "Will install upon restarting" -msgstr "" +msgstr "Zostanie zainstalowane po ponownym uruchomieniu" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:51 msgctxt "@action:button" msgid "Downgrade" -msgstr "" +msgstr "Zainstaluj poprzednią wersję" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:51 msgctxt "@action:button" msgid "Uninstall" -msgstr "" +msgstr "Odinstaluj" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:16 msgctxt "@title:window" @@ -1548,25 +1605,30 @@ msgctxt "@action:button" msgid "Decline" msgstr "Odrzuć" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" -msgstr "" +msgstr "Polecane" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" -msgstr "" +msgstr "Zgodność" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLoadingPage.qml:16 msgctxt "@info" msgid "Fetching packages..." -msgstr "" +msgstr "Uzyskiwanie pakietów..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "" +msgid "Website" +msgstr "Strona internetowa" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "E-mail" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1579,48 +1641,88 @@ msgid "Changelog" msgstr "Dziennik" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "Zamknij" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "Oprogramowanie ukłądowe jest częścią oprogramowania działającego bezpośrednio na drukarce 3D. Oprogramowanie to steruje silnikami krokowymi, reguluje temperaturę i ostatecznie sprawia, że drukarka działa." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "Oprogramowanie ukłądowe dostarczane z nowymi drukarkami działa, ale nowe wersje mają zazwyczaj więcej funkcji i ulepszeń." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "Automatycznie uaktualnij oprogramowanie" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "Prześlij niestandardowe oprogramowanie" + +#: /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 "" + +#: /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 "" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "Wybierz niestandardowe oprogramowanie" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "Aktualizacja oprogramowania układowego" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "Aktualizowanie oprogramowania." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "Aktualizacja oprogramowania zakończona." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "Aktualizacja oprogramowania nie powiodła się z powodu nieznanego błędu." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "Aktualizacja oprogramowania nie powiodła się z powodu błędu komunikacji." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "Aktualizacja oprogramowania nie powiodła się z powodu błędu wejścia / wyjścia." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Aktualizacja oprogramowania nie powiodła się z powodu utraconego oprogramowania." @@ -1630,22 +1732,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Zgoda Użytkownika" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "Istniejące Połączenie" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "Ta drukarka/grupa jest już dodana do Cura. Proszę wybierz inną drukarkę/grupę." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Połącz się z drukarką sieciową" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" @@ -1656,333 +1758,395 @@ msgstr "" "\n" "Wybierz drukarkę z poniższej listy:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Dodaj" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "Edycja" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Usunąć" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "Odśwież" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Jeżeli twojej drukarki nie ma na liście, przeczytaj poradnik o problemach z drukowaniem przez sieć" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "Rodzaj" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "Wersja oprogramowania" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "Adres" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Ta drukarka nie jest skonfigurowana do zarządzania grupą drukarek Ultimaker 3." +msgid "This printer is not set up to host a group of printers." +msgstr "Ta drukarka nie jest skonfigurowana jako host dla grupy drukarek." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Ta drukarka jest gospodarzem grupy %1 drukarek Ultimaker 3." +msgid "This printer is the host for a group of %1 printers." +msgstr "Ta drukarka jest hostem grupy %1 drukarek." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "Drukarka pod tym adresem jeszcze nie odpowiedziała." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "Połącz" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "Adres drukarki" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Wpisz adres IP lub nazwę hosta drukarki w sieci." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "Drukuj przez sieć" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "Wybór drukarki" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "Drukuj" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 nie została ustawiona do hostowania grupy podłączonych drukarek Ultimaker 3" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "Drukuj przez sieć" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Dodaj/Usuń drukarki" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" +msgstr "Wybór drukarki" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Otwiera stronę zadań drukowania w twojej domyślnej przeglądarce sieciowej." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" +msgstr "Niedostępny" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Zobacz zadania drukowania" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" +msgstr "Nieosiągalny" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Przygotowywanie do drukowania" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Drukowanie" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" -msgstr "Dostępna" +msgstr "Dostępny" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Utracono połączenie z drukarką" +msgid "Aborted" +msgstr "Anulowano" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Niedostępne" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Nieznane" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Wyłączona" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Zajęta" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "Zakończono" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Przygotowywanie do druku" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" -msgstr "Konieczne są działania" +msgid "Preparing" +msgstr "Przygotowywanie" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" -msgstr "Wstrzymana" +msgid "Pausing" +msgstr "Wstrzymywanie" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "Wznawianie" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" -msgstr "Drukowanie zostaje przerwane" +msgid "Action required" +msgstr "Konieczne są działania" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Nie akceptuje zadań drukowania" +msgid "Waiting for: Unavailable printer" +msgstr "Oczekiwanie na: Niedostępną drukarkę" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "Wykończenia na: " +msgid "Waiting for: First available" +msgstr "Oczekiwanie na: Pierwszą dostępną" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "Oczyść platformę roboczą" +msgid "Waiting for: " +msgstr "Oczekiwanie na: " -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Oczekuje na zmianę konfiguracji" +msgid "Configuration change" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Zadania drukowania" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "Drukowanie" +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 +msgctxt "@label" +msgid "Change material %1 from %2 to %3." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:378 +msgctxt "@label" +msgid "Load %3 as material %1 (This cannot be overridden)." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:384 +msgctxt "@label" +msgid "Change build plate to %1 (This cannot be overridden)." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "" + +#: /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 "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:435 +msgctxt "@window:title" +msgid "Override configuration configuration and start print" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "Zarządzaj kolejką" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "W kolejce" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Drukarki" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "Drukowanie" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Zobacz drukarki" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "Zarządzaj drukarkami" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "Przesuń na początek" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "Usuń" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "Ponów" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "Wstrzymaj" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "Anuluj" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "Czy jesteś pewien, że chcesz przesunąć %1 na początek kolejki?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "Przesuń zadanie drukowania na początek" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "Czy jesteś pewien, że chcesz usunąć %1?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "Usuń zadanie drukowania" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "Czy jesteś pewien, że chcesz anulować %1?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Anuluj wydruk" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Podłącz do drukarki" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "Załaduj konfigurację drukarki do Cura" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Uaktywnij konfigurację" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "Załaduj konfigurację drukarki do Cura" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Schemat kolorów" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Kolor materiału" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Rodzaj linii" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Szybkość Posuwu" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Grubość warstwy" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Tryb zgodności" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Pokaż ruch jałowy" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Pokaż pomocnik" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Pokaż powłokę" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Pokaż wypełnienie" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Pokaż tylko najwyższe warstwy" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "Pokaż 5 Szczegółowych Warstw" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Góra/ Dół" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Wewnętrzna ściana" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "min" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "max" @@ -1997,17 +2161,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "Skrypty post-processingu" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "Dodaj skrypt" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "Ustawienia" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "Zmień aktywne skrypty post-processingu" @@ -2015,22 +2179,22 @@ msgstr "Zmień aktywne skrypty post-processingu" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:16 msgctxt "@title:window" msgid "More information on anonymous data collection" -msgstr "" +msgstr "Wiećej informacji o zbieraniu anonimowych danych" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:66 msgctxt "@text:window" msgid "Cura sends anonymous data to Ultimaker in order to improve the print quality and user experience. Below is an example of all the data that is sent." -msgstr "" +msgstr "Cura wysyła anonimowe dane do Ultimaker w celu polepszenia jakości wydruków oraz interakcji z użytkownikiem. Poniżej podano przykład wszystkich danych, jakie mogą być przesyłane." #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:101 msgctxt "@text:window" msgid "I don't want to send these data" -msgstr "" +msgstr "Nie chcę przesyłać tych danych" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:111 msgctxt "@text:window" msgid "Allow sending these data to Ultimaker and help us improve Cura" -msgstr "" +msgstr "Zezwól na przesyłanie tych danych do Ultimaker i pomóż nam ulepszać Cura" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2102,53 +2266,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Wygładzanie" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Typ siatki" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Normalny model" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Drukuj jako podpora" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Nie wspieraj nałożeń z innymi modelami" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Modyfikuj ustawienia nakładania z innymi modelami" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Modyfikuj ustawienia wypełnienia innych modeli" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "Wybierz ustawienia" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Wybierz Ustawienia, aby dostosować ten model" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtr..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "Pokaż wszystko" @@ -2170,13 +2334,13 @@ msgid "Create new" msgstr "Utwórz nowy" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Podsumowanie - Projekt Cura" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Ustawienia drukarki" @@ -2193,18 +2357,19 @@ msgid "Update" msgstr "Aktualizacja" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Typ" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "Grupa drukarek" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Ustawienia profilu" @@ -2216,19 +2381,20 @@ msgstr "Jak powinien zostać rozwiązany problem z profilem?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Nazwa" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "Nie w profilu" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2258,7 +2424,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Jak powinien zostać rozwiązany problem z materiałem?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Ustawienie widoczności" @@ -2269,13 +2435,13 @@ msgid "Mode" msgstr "Tryb" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Widoczne ustawienie:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 poza %2" @@ -2331,36 +2497,6 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "Przejdź do następnego położenia" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "Uaktualnij oprogramowanie" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "Oprogramowanie ukłądowe jest częścią oprogramowania działającego bezpośrednio na drukarce 3D. Oprogramowanie to steruje silnikami krokowymi, reguluje temperaturę i ostatecznie sprawia, że drukarka działa." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "Oprogramowanie ukłądowe dostarczane z nowymi drukarkami działa, ale nowe wersje mają zazwyczaj więcej funkcji i ulepszeń." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "Automatycznie uaktualnij oprogramowanie" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "Prześlij niestandardowe oprogramowanie" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "Wybierz niestandardowe oprogramowanie" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" @@ -2508,26 +2644,10 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Usuń wydruk" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Wstrzymaj" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Wznów" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" -msgstr "Przerwij wydruk" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Przerwij wydruk" +msgstr "Anuluj Wydruk" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" @@ -2564,19 +2684,17 @@ msgid "Customized" msgstr "Dostosowane" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Zawsze pytaj o to" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Odrzuć i nigdy nie pytaj" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Zachowaj i nigdy nie pytaj" @@ -2596,101 +2714,179 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Utwórz nowy profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Informacja" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Potwierdź Zmianę Średnicy" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" -msgstr "" +msgstr "Średnica nowego filamentu została ustawiona na %1mm, i nie jest kompatybilna z bieżącym ekstruderem. Czy chcesz kontynuować?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Wyświetlana nazwa" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marka" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Typ Materiału" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Kolor" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Właściwości" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Gęstość" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Średnica" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Koszt Filamentu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Waga filamentu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Długość Filamentu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Koszt na metr" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Ten materiał jest powiązany z %1 i dzieli się niekórymi swoimi właściwościami." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Odłącz materiał" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Opis" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Informacje dotyczące przyczepności" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "Ustawienia druku" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Aktywuj" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Stwórz" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "Duplikuj" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "Importuj" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Eksportuj" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "Drukarka" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "Potwierdź Usunięcie" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "Czy na pewno chcesz usunąć %1? Nie można tego cofnąć!" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Importuj Materiał" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "Nie można zaimportować materiału %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "Udało się zaimportować materiał %1" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Eksportuj Materiał" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "Nie udało się wyeksportować materiału do %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Udało się wyeksportować materiał do %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2727,289 +2923,287 @@ msgid "Unit" msgstr "Jednostka" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "Ogólny" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "Interfejs" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "Język:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "Waluta:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "Motyw:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "Musisz zrestartować aplikację, aby te zmiany zaczęły obowiązywać." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Tnij automatycznie podczas zmiany ustawień." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "Automatyczne Cięcie" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "Zachowanie okna edycji" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Zaznacz nieobsługiwane obszary modelu na czerwono. Bez wsparcia te obszary nie będą drukowane prawidłowo." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "Wyświetl zwis" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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 "Przenosi kamerę, aby model był w centrum widoku, gdy wybrano model" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Wyśrodkuj kamerę kiedy przedmiot jest zaznaczony" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "Czy domyślne zachowanie zoomu powinno zostać odwrócone?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Odwróć kierunek zoomu kamery." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "Czy przybliżanie powinno poruszać się w kierunku myszy?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Przybliżaj w kierunku myszy" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "Czy modele na platformie powinny być przenoszone w taki sposób, aby nie przecinały się?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Upewnij się, że modele są oddzielone" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "Czy modele na platformie powinny być przesunięte w dół, aby dotknęły stołu roboczego?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Automatycznie upuść modele na stół roboczy" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "Pokaż wiadomości ostrzegawcze w czytniku g-code." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "Wiadomość ostrzegawcza w czytniku g-code" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "Czy warstwa powinna być wymuszona w trybie zgodności?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Wymuszenie widoku warstw w trybie zgodności (wymaga ponownego uruchomienia)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "Otwieranie i zapisywanie plików" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "Czy modele powinny być skalowane do wielkości obszaru roboczego, jeśli są zbyt duże?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "Skaluj duże modele" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "Model może wydawać się bardzo mały, jeśli jego jednostka jest na przykład w metrach, a nie w milimetrach. Czy takie modele powinny być skalowane?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Skaluj bardzo małe modele" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" -msgstr "" +msgstr "Czy modele powinny zostać zaznaczone po załadowaniu?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" -msgstr "" +msgstr "Zaznaczaj modele po załadowaniu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "Czy przedrostek oparty na nazwie drukarki powinien być automatycznie dodawany do nazwy zadania?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Dodaj przedrostek maszyny do nazwy zadania" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Czy podsumowanie powinno być wyświetlane podczas zapisu projektu?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Pokaż okno podsumowania podczas zapisywaniu projektu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Domyślne zachowanie podczas otwierania pliku projektu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Domyślne zachowanie podczas otwierania pliku projektu: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" +msgid "Always ask me this" msgstr "Zawsze pytaj" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Zawsze otwieraj jako projekt" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "Zawsze importuj modele" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "Kiedy dokonasz zmian w profilu i przełączysz się na inny, zostanie wyświetlone okno z pytaniem, czy chcesz zachować twoje zmiany, czy nie. Możesz też wybrać domyślne zachowanie, żeby to okno już nigdy nie było pokazywane." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "Nadpisz profil" +msgid "Profiles" +msgstr "Profile" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "Domyślne zachowanie dla zmienionych ustawień podczas zmiany profilu na inny: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "Zawsze odrzucaj wprowadzone zmiany" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "Zawsze przenoś wprowadzone zmiany do nowego profilu" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "Prywatność" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "Czy Cura ma sprawdzać dostępność aktualizacji podczas uruchamiania programu?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Sprawdź, dostępność aktualizacji podczas uruchamiania" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "Czy anonimowe dane na temat wydruku mają być wysyłane do Ultimaker? Uwaga. Żadne modele, adresy IP, ani żadne inne dane osobiste nie będą wysyłane i/lub przechowywane." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Wyślij (anonimowe) informacje o drukowaniu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" -msgstr "" +msgstr "Więcej informacji" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "Eksperymentalne" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Użyj funkcji wielu pól roboczych" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Użyj funkcji wielu pól roboczych (wymagany restart)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Czy nowo załadowane modele powinny zostać rozłożone na platformie roboczej? Używane w połączeniu z multi platformą roboczą (EKSPERYMENTALNE)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Nie układaj obiektów podczas ładowania" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "Drukarki" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Aktywuj" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3027,7 +3221,7 @@ msgid "Connection:" msgstr "Połączenie:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "Drukarka nie jest podłączona." @@ -3053,7 +3247,7 @@ msgid "Aborting print..." msgstr "Przerywanie drukowania..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "Profile" @@ -3068,18 +3262,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Duplikuj" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Importuj" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Eksportuj" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3090,18 +3272,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplikuj profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Potwierdź Usunięcie" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "Czy na pewno chcesz usunąć %1? Nie można tego cofnąć!" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3122,126 +3292,78 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Drukarka: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Chronione profile" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Profile niestandardowe" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Aktualizuj profil z bieżącymi ustawieniami" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Odrzuć bieżące zmiany" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "Ten profil używa ustawień domyślnych określonych przez drukarkę, dlatego nie ma żadnych ustawień z poniższej liście." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Aktualne ustawienia odpowiadają wybranemu profilowi." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Ustawienia ogólne" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materiał" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Stwórz" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Duplikuj" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Importuj Materiał" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr "Nie można zaimportować materiału %1: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "Udało się zaimportować materiał %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Eksportuj Materiał" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "Nie udało się wyeksportować materiału do %1: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Udało się wyeksportować materiał do %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Drukarka" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "Dodaj drukarkę" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "Nazwa drukarki:" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "Dodaj drukarkę" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "Bez tytułu" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "O Cura" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "version: %1" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "Kompletne rozwiązanie do druku przestrzennego." -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" @@ -3250,102 +3372,122 @@ msgstr "" "Cura jest rozwijana przez firmę Ultimaker B.V. we współpracy ze społecznością.\n" "Cura z dumą korzysta z następujących projektów open source:" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "Graficzny interfejs użytkownika" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "Struktura aplikacji" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "Generator g-code" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "Biblioteka komunikacji międzyprocesowej" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "Język programowania" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "Framework GUI" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "Powiązania Frameworka GUI" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "Biblioteka Powiązań C/C++" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "Format wymiany danych" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "Wsparcie biblioteki do obliczeń naukowych" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "Wsparcie biblioteki dla szybszej matematyki" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "Wsparcie biblioteki do obsługi plików STL" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "Wsparcie biblioteki do obsługi plików 3MF" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "Biblioteka komunikacji szeregowej" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "Bilbiotek poszukująca Zeroconf" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "Biblioteka edytująca pola" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "Biblioteka Python HTTP" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "Czcionka" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "Ikony SVG" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "Wdrożenie aplikacji pomiędzy dystrybucjami Linux" @@ -3355,7 +3497,7 @@ msgctxt "@label" msgid "Profile:" msgstr "Profil:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" @@ -3366,53 +3508,53 @@ msgstr "" "\n" "Kliknij, aby otworzyć menedżer profili." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "Szukanie..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Skopiuj wartość do wszystkich ekstruderów" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Skopiuj wszystkie zmienione wartości do wszystkich ekstruderów" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Ukryj tę opcję" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Nie pokazuj tej opcji" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Pozostaw tę opcję widoczną" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Skonfiguruj widoczność ustawień ..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" -msgstr "" +msgstr "Schowaj wszystkie" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" -msgstr "" +msgstr "Rozwiń wszystkie" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" @@ -3433,17 +3575,17 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Pod wpływem" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "To ustawienie jest dzielone pomiędzy wszystkimi ekstruderami. Zmiana tutaj spowoduje zmianę dla wszystkich ekstruderów." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "Wartość jest pobierana z osobna dla każdego ekstrudera " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3454,7 +3596,7 @@ msgstr "" "\n" "Kliknij, aby przywrócić wartość z profilu." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3501,7 +3643,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "Wyślij niestandardową komendę G-code do podłączonej drukarki. Naciśnij 'enter', aby wysłać komendę." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Ekstruder" @@ -3554,7 +3696,7 @@ msgid "The nozzle inserted in this extruder." msgstr "Dysza włożona do tego ekstrudera." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Stół roboczy" @@ -3579,6 +3721,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Przed drukowaniem podgrzej stół. W dalszym ciągu można dostosowywać druk podczas nagrzewania, a nie będziesz musiał czekać na rozgrzanie stołu, gdy będziesz gotowy do drukowania." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "Materiał" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "Ulubione" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "Podstawowe" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3594,27 +3751,27 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "&Widok" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "&Pozycja kamery" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" -msgstr "&Pole robocze" +msgstr "P&ole robocze" #: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:13 msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "Widoczne Ustawienia" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "Pokaż Wszystkie Ustawienia" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Ustaw Widoczność Ustawień..." @@ -3651,12 +3808,12 @@ msgstr "Ekstruder" #: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/SyncButton.qml:16 msgctxt "@label:extruder label" msgid "Yes" -msgstr "" +msgstr "Tak" #: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/SyncButton.qml:16 msgctxt "@label:extruder label" msgid "No" -msgstr "" +msgstr "Nie" #: /home/ruben/Projects/Cura/resources/qml/Menus/RecentFilesMenu.qml:13 msgctxt "@title:menu menubar:file" @@ -3677,347 +3834,346 @@ msgstr "" "Konfiguracja wydruku jest wyłączona\n" "Pliki G-code nie mogą zostać zmodyfikowane" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "00godz. 00min." -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "Specyfikacja czasu" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "Szacowanie kosztów" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "%1m" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "%1g" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "Razem:" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." msgstr "Zalecana konfiguracja wydruku

Drukowanie z zalecanymi ustawieniami dla wybranej drukarki, materiału i jakości." -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Niestandardowa konfiguracja wydruku

Drukowanie z precyzyjną kontrolą nad każdym elementem procesu cięcia." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Aktywny wydruk" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Nazwa pracy" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Czas druku" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Szacowany czas pozostały" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" +msgid "Toggle Full Screen" msgstr "Przełącz tryb pełnoekranowy" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&Cofnij" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Ponów" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Zamknij" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "&Widok 3D" +msgid "3D View" +msgstr "Widok 3D" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "&Widok z przodu" +msgid "Front View" +msgstr "Widok z przodu" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "&Widok z góry" +msgid "Top View" +msgstr "Widok z góry" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "&Widok z lewej strony" +msgid "Left Side View" +msgstr "Widok z lewej strony" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "&Widok z prawej strony" +msgid "Right Side View" +msgstr "Widok z prawej strony" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Konfiguruj Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Dodaj drukarkę..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Zarządzaj drukarkami..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Zarządzaj materiałami..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Aktualizuj profil z bieżącymi ustawieniami" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Odrzuć bieżące zmiany" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&Utwórz profil z bieżących ustawień..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Zarządzaj profilami..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Pokaż dokumentację internetową" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Zgłoś błąd" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "&O..." +msgid "About..." +msgstr "O..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Usuń &wybrany model" -msgstr[1] "Usuń &wybrane modele" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" +msgstr[0] "Usuń wybrany model" +msgstr[1] "Usuń wybrane modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Wyśrodkuj wybrany model" msgstr[1] "Wyśrodkuj wybrane modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Rozmnóż wybrany model" msgstr[1] "Rozmnóż wybrane modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Usuń model" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Wyśrodkuj model na platformie" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Grupuj modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" -msgstr "Rozgrupuj modele " +msgstr "Rozgrupuj modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" -msgstr "&Połącz modele" +msgstr "Połącz modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Powiel model..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&Wybierz wszystkie modele" +msgid "Select All Models" +msgstr "Wybierz wszystkie modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Wyczyść stół" +msgid "Clear Build Plate" +msgstr "Wyczyść stół" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" +msgid "Reload All Models" msgstr "Przeładuj wszystkie modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" -msgstr "Rozłóż Wszystkie Modele na Wszystkie Platformy Robocze." +msgstr "Rozłóż Wszystkie Modele na Wszystkie Platformy Robocze" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Ułóż wszystkie modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Wybór ułożenia" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Zresetuj wszystkie pozycje modelu" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "Zresetuj wszystkie przekształcenia modelu" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Otwórz plik(i)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nowy projekt..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Pokaż &dziennik silnika..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Pokaż folder konfiguracji" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." -msgstr "" +msgstr "Przeglądaj pakiety..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Rozłóż/Schowaj Pasek Boczny" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Proszę załaduj model 3D" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Gotowy do cięcia" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Cięcie..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Gotowy do %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Nie można pociąć" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Cięcie niedostępne" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Potnij aktualny wydruk" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Przerwij proces cięcia" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Przygotuj" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Anuluj" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Wybierz aktywne urządzenie wyjściowe" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "Otwórz plik(i)" @@ -4037,129 +4193,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Cura Ultimaker" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&Plik" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "&Zapisz..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "&Eksportuj..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "&Zapisz wybór w pliku" +msgid "Export Selection..." +msgstr "Eksportuj Zaznaczenie..." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Zapisz &jako..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Zapisz &Project..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Edytuj" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "&Widok" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "&Ustawienia" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Drukarka" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "&Materiał" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Ustaw jako aktywną głowicę" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Włącz Ekstruder" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Wyłącz Ekstruder" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Pole robocze" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "&Rozszerzenia" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" -msgstr "" +msgstr "&Narzędzia" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "Preferencje" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" -msgstr "&Pomoc" +msgstr "P&omoc" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." -msgstr "" +msgstr "Ten pakiet zostanie zainstalowany po ponownym uruchomieniu." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "Otwórz plik" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "Ustawienia" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "Nowy projekt" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Czy na pewno chcesz rozpocząć nowy projekt? Spowoduje to wyczyszczenie stołu i niezapisanych ustawień." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "Zamykanie Cura" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "Czy jesteś pewien, że chcesz zakończyć Cura?" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" -msgstr "" +msgstr "Instaluj pakiety" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "Otwórz plik(i)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." msgstr "Znaleziono jeden lub więcej plików G-code w wybranych plikach. Możesz otwierać tylko jeden plik G-code jednocześnie. Jeśli chcesz otworzyć plik G-code, proszę wybierz tylko jeden." @@ -4169,112 +4341,107 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Zapisz projekt" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Pole robocze" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Ekstruder %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & materiał" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Nie pokazuj podsumowania projektu podczas ponownego zapisywania" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Zapisz" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Wysokość warstwy" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Ten profil jakości nie jest dostępny dla wybranego materiału i konfiguracji dyszy. Proszę to zmienić, aby włączyć ten profil jakości" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "Niestandardowy profil jest obecnie aktywny. Aby włączyć pasek jakości, wybierz domyślny profil w zakładce Niestandardowe" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Prędkość Druku" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Wolniej" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Szybciej" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Zmodyfikowałeś ustawienia profilu. Jeżeli chcesz je zmienić, przejdź do trybu niestandardowego." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Wypełnienie" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Stopniowe wypełnienie stopniowo zwiększa ilość wypełnień w górę." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "Włącz stopniowane" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "Generuj podpory" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Generuje podpory wspierające części modelu, które mają zwis. Bez tych podpór takie części mogłyby spaść podczas drukowania." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Wybierz, który ekstruder ma służyć do drukowania podpór. Powoduje to tworzenie podpór poniżej modelu, aby zapobiec spadaniu lub drukowaniu modelu w powietrzu." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Popraw przycz. modelu" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Włącz drukowanie obrysu lub tratwy. Spowoduje to dodanie płaskiej powierzchni wokół lub pod Twoim obiektem, która jest łatwa do usunięcia po wydruku." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Potrzebujesz pomocy w ulepszaniu wydruków?
Przeczytaj instrukcje dotyczące rozwiązywania problemów" @@ -4321,22 +4488,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Typ drukarki" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Materiał" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "" +msgid "Use glue with this material combination" +msgstr "Użyj kleju z tą kombinacją materiałów" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Sprawdź kompatybilność" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Kliknij, aby sprawdzić zgodność materiału na Ultimaker.com." @@ -4359,7 +4526,7 @@ msgstr "Rozłóż na obecnej platformie roboczej" #: MachineSettingsAction/plugin.json msgctxt "description" msgid "Provides a way to change machine settings (such as build volume, nozzle size, etc.)." -msgstr "" +msgstr "Zapewnia możliwość zmiany ustawień maszyny (takich jak objętość robocza, rozmiar dyszy itp.)." #: MachineSettingsAction/plugin.json msgctxt "name" @@ -4369,12 +4536,12 @@ msgstr "Ustawienia Maszyny" #: Toolbox/plugin.json msgctxt "description" msgid "Find, manage and install new Cura packages." -msgstr "" +msgstr "Znajdź, zarządzaj i instaluj nowe pakiety Cura." #: Toolbox/plugin.json msgctxt "name" msgid "Toolbox" -msgstr "" +msgstr "Narzędzia" #: XRayView/plugin.json msgctxt "description" @@ -4404,7 +4571,7 @@ msgstr "Zapisuje g-code do pliku." #: GCodeWriter/plugin.json msgctxt "name" msgid "G-code Writer" -msgstr "Pisarz G-code" +msgstr "Zapisywacz G-code" #: ModelChecker/plugin.json msgctxt "description" @@ -4426,16 +4593,6 @@ msgctxt "name" msgid "God Mode" msgstr "Tryb Boga" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Akceptuje G-Code i wysyła go przez WiFi do Doodle3D WiFi-Box." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4446,6 +4603,16 @@ msgctxt "name" msgid "Changelog" msgstr "Lista zmian" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "" + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." @@ -4469,7 +4636,7 @@ msgstr "Drukowanie USB" #: UserAgreement/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license." -msgstr "" +msgstr "Zapytaj użytkownika jednokrotnie, czy zgadza się z warunkami naszej licencji." #: UserAgreement/plugin.json msgctxt "name" @@ -4479,12 +4646,12 @@ msgstr "ZgodaUżytkownika" #: X3GWriter/plugin.json msgctxt "description" msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "" +msgstr "Umożliwia zapisanie wyników cięcia jako plik X3G, aby wspierać drukarki obsługujące ten format (Malyan, Makerbot oraz inne oparte o oprogramowanie Sailfish)." #: X3GWriter/plugin.json msgctxt "name" msgid "X3GWriter" -msgstr "" +msgstr "Zapisywacz X3G" #: GCodeGzWriter/plugin.json msgctxt "description" @@ -4516,16 +4683,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Etap Przygotowania" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Zapewnia okno edycji dla bezpośredniego edytowania skryptów." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Narzędzie pisania skryptów na żywo." - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4539,7 +4696,7 @@ msgstr "Wtyczka Urządzenia Wyjścia Dysku Zewn." #: UM3NetworkPrinting/plugin.json msgctxt "description" msgid "Manages network connections to Ultimaker 3 printers." -msgstr "" +msgstr "Zarządza ustawieniami połączenia sieciowego z drukarkami Ultimaker 3." #: UM3NetworkPrinting/plugin.json msgctxt "name" @@ -4636,16 +4793,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Czytnik Profili Starszej Cura" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Pomaga w otwieraniu plików Blender bezpośrednio w Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Integracja z Blenderem (eksperymentalny)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4669,12 +4816,12 @@ msgstr "Ulepszenie Wersji z 3.2 do 3.3" #: VersionUpgrade/VersionUpgrade33to34/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.3 to Cura 3.4." -msgstr "" +msgstr "Ulepsza konfigurację z Cura 3.3 do Cura 3.4." #: VersionUpgrade/VersionUpgrade33to34/plugin.json msgctxt "name" msgid "Version Upgrade 3.3 to 3.4" -msgstr "" +msgstr "Ulepszenie Wersji z 3.3 do 3.4" #: VersionUpgrade/VersionUpgrade25to26/plugin.json msgctxt "description" @@ -4696,6 +4843,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Ulepszenie Wersji 2.7 do 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "Ulepsza konfigurację z Cura 3.4 do Cura 3.5." + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "Ulepszenie Wersji z 3.4 do 3.5" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4819,7 +4976,7 @@ msgstr "3MF Writer" #: UltimakerMachineActions/plugin.json msgctxt "description" msgid "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.)." -msgstr "" +msgstr "Zapewnia czynności maszyny dla urządzeń Ultimaker (na przykład kreator poziomowania stołu, wybór ulepszeń itp.)." #: UltimakerMachineActions/plugin.json msgctxt "name" @@ -4836,6 +4993,290 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Czytnik Profili Cura" +#~ msgctxt "@warning:status" +#~ msgid "Please generate G-code before saving." +#~ msgstr "Wygeneruj G-code przed zapisem." + +#~ msgctxt "@item:inmenu" +#~ msgid "Profile Assistant" +#~ msgstr "Asystent Profilu" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Profile Assistant" +#~ msgstr "Asystent Profilu" + +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "Uaktualnij oprogramowanie układowe" + +#~ msgctxt "@label unknown material" +#~ msgid "Unknown" +#~ msgstr "Nieznany" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "No custom profile to import in file {0}" +#~ msgstr "Brak niestandardowego profilu do zaimportowania do pliku {0}" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "This profile {0} contains incorrect data, could not import it." +#~ msgstr "Ten profil {0} zawiera błędne dane, nie można go zaimportować." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "Maszyna zdefiniowana w profilu {0} ({1}) nie zgadza się z obecnie wybraną maszyną ({2}), nie można tego zaimportować." + +#~ msgctxt "@title:window" +#~ msgid "Confirm uninstall " +#~ msgstr "Potwierdź odinstalowanie " + +#~ msgctxt "@label:status" +#~ msgid "Paused" +#~ msgstr "Wstrzymana" + +#~ msgctxt "@action:button" +#~ msgid "Previous" +#~ msgstr "Poprzedni" + +#~ msgctxt "@action:button" +#~ msgid "Next" +#~ msgstr "Następny" + +#~ msgctxt "@label" +#~ msgid "Tip" +#~ msgstr "Końcówka" + +#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +#~ msgid "%1m / ~ %2g / ~ %4 %3" +#~ msgstr "%1m / ~ %2g / ~ %4 %3" + +#~ msgctxt "@label Print estimates: m for meters, g for grams" +#~ msgid "%1m / ~ %2g" +#~ msgstr "%1m / ~ %2g" + +#~ msgctxt "@label" +#~ msgid "Print experiment" +#~ msgstr "Próbny wydruk" + +#~ msgctxt "@label" +#~ msgid "Checklist" +#~ msgstr "Lista kontrolna" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "Uaktualnij oprogramowanie" + +#~ msgctxt "description" +#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +#~ msgstr "Pozwala twórcą materiałów na tworzenie nowych profili materiałów i jakości używając rozwijanego menu." + +#~ msgctxt "name" +#~ msgid "Print Profile Assistant" +#~ msgstr "Asystent Profilów Druku" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Drukuj z Doodle3D WiFi-Box" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Drukuj z Doodle3D WiFi-Box" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Łączenie z Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Wysyłanie danych do Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Nie można wysłać danych do Doodle3D Connect. Czy inne zadanie jest aktywne?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Przetrzymywanie danych na Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Plik wysłany do Doodle3D Connect" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Otwórz Connect..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Otwórz interfejs Doodle3D Connect" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Plik Blender" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Nie można wyeksportować używając \"{}\" jakości!\n" +#~ "Powrócono do \"{}\"." + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Ta drukarka nie jest skonfigurowana do zarządzania grupą drukarek Ultimaker 3." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Ta drukarka jest gospodarzem grupy %1 drukarek Ultimaker 3." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 nie została ustawiona do hostowania grupy podłączonych drukarek Ultimaker 3" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Dodaj/Usuń drukarki" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Otwiera stronę zadań drukowania w twojej domyślnej przeglądarce sieciowej." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Zobacz zadania drukowania" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Przygotowywanie do drukowania" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Drukowanie" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Dostępna" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Utracono połączenie z drukarką" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Niedostępne" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Nieznane" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Wyłączona" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Zajęta" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Przygotowywanie do druku" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Drukowanie zostaje przerwane" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Nie akceptuje zadań drukowania" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Wykończenia na: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Oczyść platformę roboczą" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Oczekuje na zmianę konfiguracji" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Zadania drukowania" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Drukarki" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Zobacz drukarki" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Wstrzymaj" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Wznów" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Przerwij wydruk" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Zawsze pytaj" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Nadpisz profil" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Czy nowo załadowane modele powinny zostać rozłożone na platformie roboczej? Używane w połączeniu z multi platformą roboczą (EKSPERYMENTALNE)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Nie układaj obiektów podczas ładowania" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "Z&apisz wybór w pliku" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Zapisz &jako..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Zapisz &Project..." + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Akceptuje G-Code i wysyła go przez WiFi do Doodle3D WiFi-Box." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Zapewnia okno edycji dla bezpośredniego edytowania skryptów." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Narzędzie pisania skryptów na żywo." + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Pomaga w otwieraniu plików Blender bezpośrednio w Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Integracja z Blenderem (eksperymentalny)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Ostrzeżenie Sprawdzacza Modelu" @@ -5102,10 +5543,6 @@ msgstr "Czytnik Profili Cura" #~ msgid "Browse plugins..." #~ msgstr "Przeglądaj wtyczki..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Pole robocze" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "W&tyczki" @@ -5331,14 +5768,6 @@ msgstr "Czytnik Profili Cura" #~ "\n" #~ "Przepraszamy!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Asystent Profilu" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Asystent Profilu" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Nie załadowano materiału" @@ -5469,14 +5898,6 @@ msgstr "Czytnik Profili Cura" #~ msgid "Configure setting visiblity..." #~ msgstr "Skonfiguruj widoczność ustawień..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Automatyczny: %1" @@ -5513,14 +5934,6 @@ msgstr "Czytnik Profili Cura" #~ msgid "GCode Profile Reader" #~ msgstr "Czytnik Profili GCode" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Pozwala twórcą materiałów na tworzenie nowych profili materiałów i jakości używając rozwijanego menu." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Asystent Profilów Druku" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Wystąpił błąd podczas otwierania pliku SolidWorks! Proszę sprawdź, czy możesz otworzyć plik SolidWorks bez żadnych problemów!" @@ -5717,10 +6130,6 @@ msgstr "Czytnik Profili Cura" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Ta drukarka nie została ustawiona do hostowania grupy %1 podłączonych drukarek Ultimaker 3" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Przygotowywanie" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Zakończono:" diff --git a/resources/i18n/pl_PL/fdmextruder.def.json.po b/resources/i18n/pl_PL/fdmextruder.def.json.po index eda4694124..02527d4849 100644 --- a/resources/i18n/pl_PL/fdmextruder.def.json.po +++ b/resources/i18n/pl_PL/fdmextruder.def.json.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" "PO-Revision-Date: 2018-03-30 20:33+0200\n" "Last-Translator: 'Jaguś' Paweł Jagusiak and Andrzej 'anraf1001' Rafalski\n" "Language-Team: reprapy.pl\n" @@ -168,6 +168,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "Współrzędna Z, w której dysza jest czyszczona na początku wydruku." +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "" + +#: 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 "" + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/pl_PL/fdmprinter.def.json.po b/resources/i18n/pl_PL/fdmprinter.def.json.po index 88634c37ab..a684c98068 100644 --- a/resources/i18n/pl_PL/fdmprinter.def.json.po +++ b/resources/i18n/pl_PL/fdmprinter.def.json.po @@ -5,17 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" -"PO-Revision-Date: 2018-04-17 16:45+0200\n" -"Last-Translator: 'Jaguś' Paweł Jagusiak and Andrzej 'anraf1001' Rafalski\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-21 21:52+0200\n" +"Last-Translator: 'Jaguś' Paweł Jagusiak, Andrzej 'anraf1001' Rafalski and Jakub 'drzejkopf' Świeciński\n" "Language-Team: reprapy.pl\n" "Language: pl_PL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.6\n" +"X-Generator: Poedit 2.1.1\n" #: fdmprinter.def.json msgctxt "machine_settings label" @@ -85,6 +85,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "GUID materiału. To jest ustawiana automatycznie " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Średnica" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Dostosowuje średnicę stosowanego filamentu. Dopasuj tę wartość do średnicy stosowanego filamentu." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1060,6 +1070,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Zygzak" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "Połącz Górne/Dolne Wieloboki" + +#: 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 "" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1088,7 +1108,7 @@ msgstr "Optymalizuj Kolejność Drukowania Ścian" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order description" msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization. First layer is not optimized when choosing brim as build plate adhesion type." -msgstr "" +msgstr "Optymalizuje kolejność, w jakiej będą drukowane ścianki w celu zredukowania ilości retrakcji oraz dystansu ruchów jałowych. Większość części skorzysta na załączeniu tej funkcji, jednak w niektórych przypadkach czas druku może się wydłużyć, proszę więc o porównanie oszacowanego czasu z funkcją załączoną oraz wyłączoną. Pierwsza warstwa nie zostanie zoptymalizowana, jeżeli jako poprawa przyczepności stołu zostanie wybrany obrys." #: fdmprinter.def.json msgctxt "outer_inset_first label" @@ -1140,6 +1160,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Kompensuje przepływ dla części, których wewnętrzna ściana jest drukowana kiedy jest już w tym miejscu ściana." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "Minimalny Przepływ Dla Ścianek" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "Minimalny dopuszczalny przepływ procentowy dla linii ścianki. Kompensacja nakładania się ścianek redukuje przepływ, gdy dana ścianka znajduje się blisko wydrukowanej już ścianki. Ścianki, których przepływ powinien być mniejszy, niż ta wartość, będą zastąpione ruchami jałowymi. Aby używać tego ustawienia należy załączyć kompensację nakładających się ścianek oraz drukowanie ścianek zewnętrznych przed wewnętrznymi." + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "Preferuj Retrakcję" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "Gdy załączone, retrakcja jest używana zamiast kombinowanego ruchu jałowego, który zastępuje ściankę, której przepływ jest mniejszy od minimalnego." + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1438,7 +1478,7 @@ msgstr "Gęstość Wypełn." #: fdmprinter.def.json msgctxt "infill_sparse_density description" msgid "Adjusts the density of infill of the print." -msgstr "Dostosowuje gęstość wypełnienia wydruku" +msgstr "Dostosowuje gęstość wypełnienia wydruku." #: fdmprinter.def.json msgctxt "infill_line_distance label" @@ -1457,8 +1497,8 @@ msgstr "Wzór Wypełn." #: 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "Wzór materiału wypełniającego wydruk. Linie i zygzaki zmieniają kierunek na przemiennych warstwach, redukując koszty materiału. Kratka, trójkąty, tri-sześciokąt, sześcienne, ośmiościenne, ćwierć sześcienny i koncentryczny wzór są drukowane w pełni na każdej warstwie. Sześcienne, ćwierć sześcienne i czworościenne wypełnienie zmienia się co każdą warstwę, aby zapewnić równy rozkład siły w każdym kierunku." +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 "" #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1505,11 +1545,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Koncentryczny" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Koncentryczny 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1525,6 +1560,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "Krzyż 3D" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1535,6 +1575,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Łączy końce gdzie wzór wypełnienia spotyka się z wewn. ścianą używając linii, która podąża za kształtem wewn. ściany. Włączenie tego ustawienia może spowodować lepszą przyczepność wypełnienia do ścian i zredukować efekty wypełnienia w jakości powierzchni. Wyłączenie tego ustawienia redukuje ilość potrzebnego materiału." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "Połącz Wieloboki Wypełnienia" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "Łączy ścieżki wypełnienia, gdy są one prowadzone obok siebie. Dla wzorów wypełnienia zawierających kilka zamkniętych wieloboków, załączenie tego ustawienia znacznie skróci czas ruchów jałowych." + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1565,6 +1615,30 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Wzór wypełnienia jest przesunięty o tę odległość wzdłuż osi Y." +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "Mnożnik Linii Wypełnienia" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "Zmienia pojedynczą linię wypełnienia na zadaną ilość linii. Dodatkowe linie wypełnienia nie będą nad sobą przechodzić, ale będą się unikać. Sprawi to, że wypełnienie będzie sztywniejsze, ale czas druku oraz zużycie materiału zwiększą się." + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "Ilość Dodatkowych Ścianek Wypełnienia" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" +"Dodaje ścianki naokoło wypełnienia. Takie ścianki mogą spowodować, że linie górnej/dolnej powłoki będą zwisać mniej, co pozwoli na zastosowanie mniejszej ilości górnych/dolnych warstw przy zachowaniu takiej samej jakości kosztem dodatkowego materiału.\n" +"Ta funkcja może być używana razem z funkcją \"Połącz Wieloboki Wypełnienia\", aby połączyć całe wypełnienie w pojedynczą ścieżkę, co przy poprawnej konfiguracji wyelinimuje potrzebę wykonywania ruchów jałowych lub retrakcji." + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1678,22 +1752,22 @@ msgstr "Nie generuj obszarów wypełnienia mniejszych niż to (zamiast tego uży #: fdmprinter.def.json msgctxt "infill_support_enabled label" msgid "Infill Support" -msgstr "" +msgstr "Wypełnienie Podporowe" #: fdmprinter.def.json msgctxt "infill_support_enabled description" msgid "Print infill structures only where tops of the model should be supported. Enabling this reduces print time and material usage, but leads to ununiform object strength." -msgstr "" +msgstr "Drukuj wypełnienie tylko w miejscach, w których górna część modelu powinna być podparta strukturą wewnętrzną. Załączenie tej funkcji skutkuje redukcją czasu druku, ale prowadzi do niejednolitej wytrzymałości obiektu." #: fdmprinter.def.json msgctxt "infill_support_angle label" msgid "Infill Overhang Angle" -msgstr "" +msgstr "Kąt Zwisu dla Wypełnienia" #: fdmprinter.def.json msgctxt "infill_support_angle description" msgid "The minimum angle of internal overhangs for which infill is added. At a value of 0° objects are totally filled with infill, 90° will not provide any infill." -msgstr "" +msgstr "Minimalny kąt zwisu wewnętrznego, dla którego zostanie dodane wypełnienie. Przy wartości 0° obiekty zostaną wypełnione całkowicie, natomiast przy 90° wypełnienie nie zostanie wygenerowane." #: fdmprinter.def.json msgctxt "skin_preshrink label" @@ -1875,16 +1949,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "Temperatura stosowana przy podgrzewanym stole na pierwszej warstwie." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Średnica" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Dostosowuje średnicę stosowanego filamentu. Dopasuj tę wartość do średnicy stosowanego filamentu." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2038,12 +2102,12 @@ msgstr "Okno, w którym wymuszona jest maksymalna liczba retrakcji. Wartość ta #: fdmprinter.def.json msgctxt "limit_support_retractions label" msgid "Limit Support Retractions" -msgstr "" +msgstr "Ogranicz Retrakcje Pomiędzy Podporami" #: fdmprinter.def.json msgctxt "limit_support_retractions description" msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." -msgstr "" +msgstr "Unikaj retrakcji podczas poruszania się od podpory do podpory w linii prostej. Załączenie tej funkcji spowoduje skrócenie czasu druku, lecz może prowadzić do nadmiernego nitkowania wewnątrz struktur podporowych." #: fdmprinter.def.json msgctxt "material_standby_temperature label" @@ -2153,7 +2217,7 @@ msgstr "Prędkość Wewn. Ściany" #: fdmprinter.def.json msgctxt "speed_wall_x description" msgid "The speed at which all inner walls are printed. Printing the inner wall faster than the outer wall will reduce printing time. It works well to set this in between the outer wall speed and the infill speed." -msgstr "Szybkość, z jaką drukowane są ściany wewnętrzne. Drukowanie wewnętrznej ściany szybciej niż zewn. pozwoli skrócić czas druku. Zaleca się, aby ustawić to pomiędzy prędkością zewn. ściany, a prędkością wypełnienia" +msgstr "Szybkość, z jaką drukowane są ściany wewnętrzne. Drukowanie wewnętrznej ściany szybciej niż zewn. pozwoli skrócić czas druku. Zaleca się, aby ustawić to pomiędzy prędkością zewn. ściany, a prędkością wypełnienia." #: fdmprinter.def.json msgctxt "speed_roofing label" @@ -2722,8 +2786,8 @@ msgstr "Tryb Kombinowania" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "Kombinowanie utrzymuje dyszę w już zadrukowanych obszarach podczas ruchu jałowego. Powoduje to nieco dłuższe ruchy jałowe, ale zmniejsza potrzebę retrakcji Jeśli kombinowanie jest wyłączone, materiał się cofa, a dysza przemieszcza się w linii prostej do następnego punktu. Można też unikać kombinowania na górnych/dolnych obszarach skóry przez kombinowanie tylko wewnątrz wypełnienia." +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "Kombinowanie utrzymuje dyszę w już zadrukowanych obszarach podczas ruchu jałowego. Powoduje to nieco dłuższe ruchy jałowe, ale zmniejsza potrzebę retrakcji. Jeśli kombinowanie jest wyłączone, materiał się cofa, a dysza przemieszcza się w linii prostej do następnego punktu. Można też unikać kombinowania na górnych/dolnych obszarach powłoki, a także kombinować tylko wewnątrz wypełnienia. Opcja \"Wewnątrz Wypełnienia\" wymusza takie samo zachowanie, jak opcja \"Nie w Powłoce\" we wcześniejszych wydaniach Cura." #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2738,17 +2802,22 @@ msgstr "Wszędzie" #: fdmprinter.def.json msgctxt "retraction_combing option noskin" msgid "Not in Skin" -msgstr "" +msgstr "Nie w Powłoce" + +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "Wewnątrz Wypełnienia" #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" -msgstr "" +msgstr "Max. Dystans Kombinowania Bez Retrakcji" #: fdmprinter.def.json msgctxt "retraction_combing_max_distance description" msgid "When non-zero, combing travel moves that are longer than this distance will use retraction." -msgstr "" +msgstr "Przy wartości niezerowej, kombinowane ruchy jałowe o dystansie większym niż zadany bedą używały retrakcji." #: fdmprinter.def.json msgctxt "travel_retract_before_outer_wall label" @@ -2773,12 +2842,12 @@ msgstr "Dysza unika już wydrukowanych części podczas ruchu jałowego. Ta opcj #: fdmprinter.def.json msgctxt "travel_avoid_supports label" msgid "Avoid Supports When Traveling" -msgstr "" +msgstr "Unikaj Podpór Podczas Ruchu Jałowego" #: fdmprinter.def.json msgctxt "travel_avoid_supports description" msgid "The nozzle avoids already printed supports when traveling. This option is only available when combing is enabled." -msgstr "" +msgstr "Dysza będzie omijała już wydrukowane podpory podczas ruchu jałowego. Ta opcja jest dostępna jedynie, gdy kombinowanie jest włączone." #: fdmprinter.def.json msgctxt "travel_avoid_distance label" @@ -3120,11 +3189,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Koncentryczny" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Koncentryczny 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3138,12 +3202,12 @@ msgstr "Krzyż" #: fdmprinter.def.json msgctxt "support_wall_count label" msgid "Support Wall Line Count" -msgstr "" +msgstr "Ilość Ścianek Podpory" #: fdmprinter.def.json msgctxt "support_wall_count description" msgid "The number of walls with which to surround support infill. Adding a wall can make support print more reliably and can support overhangs better, but increases print time and material used." -msgstr "" +msgstr "Liczba ścianek otaczających wypełnienie podpory. Dodanie ścianki może sprawić, że podpory będą drukowane solidniej i będą mogły lepiej podpierać nawisy, ale wydłuży to czas druku i zwiększy ilość użytego materiału." #: fdmprinter.def.json msgctxt "zig_zaggify_support label" @@ -3185,6 +3249,56 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Odległość między drukowanymi liniami struktury podpory. To ustawienie jest obliczane przez gęstość podpory." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "Odstęp Między Liniami Podpory w Pocz. Warstwie" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "Odległość między drukowanymi liniami struktury podpory w początkowej warstwie. To ustawienie jest obliczane na podstawie gęstości podpory." + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "Kierunek Linii Wypełnienia Podpory" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "Orientacja wzoru wypełnienia dla podpór. Wzór podpory jest obracany w płaszczyźnie poziomej." + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "" + +#: 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 "" + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "" + +#: 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 "" + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "" + +#: 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 "" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3475,11 +3589,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Koncentryczny" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Koncentryczny 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3515,11 +3624,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Koncentryczny" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Koncentryczny 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3555,16 +3659,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Koncentryczny" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Koncentryczny 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Zygzak" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "Nadpisanie Prędkości Wentylatora" + +#: 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 "Gdy załączone, prędkość wentylatora chłodzącego wydruk jest zmieniana dla obszarów leżących bezpośrednio ponad podporami," + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "Prędkość Wentylatora Podpartej Powłoki" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "Procentowa prędkść wentylatora, która zostanie użyta podczas drukowania obszarów powłoki leżących bezpośrednio nad podstawami. Użycie wysokiej prędkości może ułatwić usuwanie podpór." + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3749,6 +3868,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "Liczba linii używana dla obrysu. Więcej linii obrysu poprawia przyczepność do stołu, ale zmniejsza rzeczywiste pole wydruku." +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "" + +#: 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 "" + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -3891,8 +4020,8 @@ msgstr "Szerokość linii na podstawowej warstwie tratwy. Powinny być to grube #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Rozstaw Linii Tratwy" +msgid "Raft Base Line Spacing" +msgstr "Rozstaw Linii Podstawy Tratwy" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -3987,7 +4116,7 @@ msgstr "Zryw Tratwy" #: fdmprinter.def.json msgctxt "raft_jerk description" msgid "The jerk with which the raft is printed." -msgstr "Zryw, z jakim drukowana jest tratwa" +msgstr "Zryw, z jakim drukowana jest tratwa." #: fdmprinter.def.json msgctxt "raft_surface_jerk label" @@ -4109,16 +4238,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Minimalna objętość każdej warstwy wieży czyszczącej w celu oczyszczenia wystarczającej ilości materiału." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Grubość Wieży Czyszcz." - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "Grubość pustej wieży czyszczącej. Grubość większa niż połowa minimalnej objętości wieży czyszczącej spowoduje, że wieża będzie miała dużą gęstość." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4159,26 +4278,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Po wydrukowaniu podstawowej wieży jedną dyszą, wytrzyj wytłoczony materiał z drugiej dyszy o wieżę czyszczącą." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Wytrzyj Dyszę po Przełączeniu" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Po przełączeniu ekstrudera, wytrzyj materiał wyciekający z dyszy na pierwszą drukowaną część. powoduje to bezpieczny, powolny ruch wycierania w miejscu gdzie wyciekający materiał nie spowoduje dużej szkody dla powierzchni modelu." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Pole Czyszczące Wieży Czyszcz." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Ilość filamentu, która jest czyszczona podczas wycierania na wieży czyszczącej. Czyszczenie jest użyteczne do kompensowania utraty filamentu przez wypływanie z nieużywanej dyszy." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4664,6 +4763,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Dane łączące przepływ materiału (w mm3 na sekundę) z temperaturą (stopnie Celsjusza)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "Minimalny Obwód Wieloboku" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "Wieloboki w pociętych warstwach mające obwód mniejszy, niż podany, będą odfiltrowane. Mniejsze wartości dają wyższą rozdzielczość siatki kosztem czasu cięcia. Funkcja ta jest przeznaczona głównie dla drukarek wysokiej rozdzielczości SLA oraz bardzo małych modeli z dużą ilością detali." + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -4677,12 +4786,12 @@ msgstr "Minimalny rozmiar linii segmentu po pocięciu. Jeżeli to zwiększysz, s #: fdmprinter.def.json msgctxt "meshfix_maximum_travel_resolution label" msgid "Maximum Travel Resolution" -msgstr "" +msgstr "Maksymalna Rozdzielczość Ruchów Jałowych" #: fdmprinter.def.json msgctxt "meshfix_maximum_travel_resolution description" msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate." -msgstr "" +msgstr "Minimalny rozmiar segmentu linii ruchu jałowego po pocięciu. Jeżeli ta wartość zostanie zwiększona, ruch jałowy będzie miał mniej gładkie zakręty. Może to spowodować przyspieszenie prędkości przetwarzania g-code, ale unikanie modelu może być mniej dokładne." #: fdmprinter.def.json msgctxt "support_skip_some_zags label" @@ -4847,22 +4956,22 @@ msgstr "Rozmiar kieszeni na czterostronnych skrzyżowaniach we wzorze krzyż 3D #: fdmprinter.def.json msgctxt "cross_infill_density_image label" msgid "Cross Infill Density Image" -msgstr "" +msgstr "Gęstośc Wypełnienia Krzyżowego Według Obrazu" #: fdmprinter.def.json msgctxt "cross_infill_density_image description" msgid "The file location of an image of which the brightness values determine the minimal density at the corresponding location in the infill of the print." -msgstr "" +msgstr "Lokalizacja pliku obrazu, którego jasność będzie determinowała minimalną gęstość wypełnienia wydruku w danym punkcie." #: fdmprinter.def.json msgctxt "cross_support_density_image label" msgid "Cross Fill Density Image for Support" -msgstr "" +msgstr "Gęstości Wypełnienia Krzyżowego Podstaw Według Obrazu" #: fdmprinter.def.json msgctxt "cross_support_density_image description" msgid "The file location of an image of which the brightness values determine the minimal density at the corresponding location in the support." -msgstr "" +msgstr "Lokalizacja pliku obrazu, którego jasność będzie determinowała minimalną gęstość wypełnienia podstawy w danym punkcie." #: fdmprinter.def.json msgctxt "spaghetti_infill_enabled label" @@ -5112,7 +5221,7 @@ msgstr "DD Przepływ" #: fdmprinter.def.json msgctxt "wireframe_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value. Only applies to Wire Printing." -msgstr "Kompensacja przepływu: ilość wytłaczanego materiału jest mnożona przez tę wartość. Odnosi się tylko do Drukowania Drutu. " +msgstr "Kompensacja przepływu: ilość wytłaczanego materiału jest mnożona przez tę wartość. Odnosi się tylko do Drukowania Drutu." #: fdmprinter.def.json msgctxt "wireframe_flow_connection label" @@ -5196,7 +5305,7 @@ msgstr "DD Spadek" #: fdmprinter.def.json msgctxt "wireframe_fall_down description" msgid "Distance with which the material falls down after an upward extrusion. This distance is compensated for. Only applies to Wire Printing." -msgstr "Odległość o jaką spada materiału przez wytłaczanie w górę. Długość ta jest kompensowana. Odnosi się tylko do Drukowania Drutu" +msgstr "Odległość o jaką spada materiału przez wytłaczanie w górę. Długość ta jest kompensowana. Odnosi się tylko do Drukowania Drutu." #: fdmprinter.def.json msgctxt "wireframe_drag_along label" @@ -5301,7 +5410,7 @@ msgstr "Maks. zmiana zmiennych warstw" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" msgid "The maximum allowed height different from the base layer height." -msgstr "" +msgstr "Maksymalna dozwolona różnica wysokości względem bazowej wysokości warstwy." #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" @@ -5323,6 +5432,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Opóźnienie w wyborze, czy użyć mniejszej warstwy, czy nie. Ta liczba jest porównywana do najbardziej stromego nachylenia na warstwie." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "Kąt Nawisającej Ścianki" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "Ścianka o większym kącie nawisu niż podany będzie drukowana z użyciem ustawień nawisającej ścianki. Przy wartości 90°, żadna ścianka nie będzie traktowana jako ścianka nawisająca." + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "Prędkość Ścianki Nawisającej" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "Nawisające ścianki będą drukowane z taką procentową wartością względem normalnej prędkości druku." + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5353,16 +5482,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Jeśli obszar skóry jest podpierany w mniejszym procencie jego powierzchni, drukuj to według ustawień mostu. W przeciwnym wypadku użyj normalnych ustawień skóry." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Maks. Nachylenie Ściany Mostu" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "Maksymalna dozwolona szerokość obszaru powietrza pod linią ściany zanim zostanie wydrukowana ściana używająca ustawień mostu. Wyrażona w procentach szerokości linii ściany. Kiedy przestrzeń powietrza jest szersza od tego, linia ściany jest drukowana używając ustawień mostu. W przeciwnym wypadku linia ściany jest drukowana z normalnymi ustawieniami. Tym niższa wartość, tym większa szansa, że linie ściany na nawisach będą drukowane z ustawieniami mostu." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5536,7 +5655,7 @@ msgstr "Ustawienia, które są używane tylko wtedy, gdy CuraEngine nie jest wyw #: fdmprinter.def.json msgctxt "center_object label" msgid "Center Object" -msgstr "" +msgstr "Wyśrodkuj obiekt" #: fdmprinter.def.json msgctxt "center_object description" @@ -5546,7 +5665,7 @@ msgstr "Czy wyśrodkować obiekt na środku stołu (0,0), zamiast używać ukła #: fdmprinter.def.json msgctxt "mesh_position_x label" msgid "Mesh Position X" -msgstr "" +msgstr "Pozycja Siatki w X" #: fdmprinter.def.json msgctxt "mesh_position_x description" @@ -5556,7 +5675,7 @@ msgstr "Przesunięcie zastosowane dla obiektu w kierunku X." #: fdmprinter.def.json msgctxt "mesh_position_y label" msgid "Mesh Position Y" -msgstr "" +msgstr "Pozycja Siatki w Y" #: fdmprinter.def.json msgctxt "mesh_position_y description" @@ -5566,7 +5685,7 @@ msgstr "Przesunięcie zastosowane dla obiektu w kierunku Y." #: fdmprinter.def.json msgctxt "mesh_position_z label" msgid "Mesh Position Z" -msgstr "" +msgstr "Pozycja Siatki w Z" #: fdmprinter.def.json msgctxt "mesh_position_z description" @@ -5583,6 +5702,74 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Forma przesunięcia, która ma być zastosowana do modelu podczas ładowania z pliku." +#~ 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 happend midway over infill this feature can reduce the top surface quality." +#~ msgstr "Łączy górne/dolne ścieżki powłoki, gdy są one prowadzone obok siebie. Przy wzorze koncentrycznym, załączenie tego ustawienia znacznie zredukuje czas ruchów jałowych, ale ze względu na to, że połączenie może nastąpić w połowie drogi ponad wypełnieniem, ta fukncja może pogorszyć jakość górnej powierzchni." + +#~ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +#~ msgstr "Wzór materiału wypełniającego wydruk. Linie i zygzaki zmieniają kierunek na przemiennych warstwach, redukując koszty materiału. Kratka, trójkąty, tri-sześciokąt, sześcienne, ośmiościenne, ćwierć sześcienny i koncentryczny wzór są drukowane w pełni na każdej warstwie. Sześcienne, ćwierć sześcienne i czworościenne wypełnienie zmienia się co każdą warstwę, aby zapewnić równy rozkład siły w każdym kierunku." + +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Koncentryczny 3D" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "Kombinowanie utrzymuje dyszę w już zadrukowanych obszarach podczas ruchu jałowego. Powoduje to nieco dłuższe ruchy jałowe, ale zmniejsza potrzebę retrakcji Jeśli kombinowanie jest wyłączone, materiał się cofa, a dysza przemieszcza się w linii prostej do następnego punktu. Można też unikać kombinowania na górnych/dolnych obszarach skóry przez kombinowanie tylko wewnątrz wypełnienia." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Koncentryczny 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Koncentryczny 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Koncentryczny 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Koncentryczny 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Rozstaw Linii Tratwy" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Grubość Wieży Czyszcz." + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "Grubość pustej wieży czyszczącej. Grubość większa niż połowa minimalnej objętości wieży czyszczącej spowoduje, że wieża będzie miała dużą gęstość." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Wytrzyj Dyszę po Przełączeniu" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Po przełączeniu ekstrudera, wytrzyj materiał wyciekający z dyszy na pierwszą drukowaną część. powoduje to bezpieczny, powolny ruch wycierania w miejscu gdzie wyciekający materiał nie spowoduje dużej szkody dla powierzchni modelu." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Pole Czyszczące Wieży Czyszcz." + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Ilość filamentu, która jest czyszczona podczas wycierania na wieży czyszczącej. Czyszczenie jest użyteczne do kompensowania utraty filamentu przez wypływanie z nieużywanej dyszy." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Maks. Nachylenie Ściany Mostu" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "Maksymalna dozwolona szerokość obszaru powietrza pod linią ściany zanim zostanie wydrukowana ściana używająca ustawień mostu. Wyrażona w procentach szerokości linii ściany. Kiedy przestrzeń powietrza jest szersza od tego, linia ściany jest drukowana używając ustawień mostu. W przeciwnym wypadku linia ściany jest drukowana z normalnymi ustawieniami. Tym niższa wartość, tym większa szansa, że linie ściany na nawisach będą drukowane z ustawieniami mostu." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Optymalizuj kolejność, według której drukowane są ściany, aby zredukować ilość retrakcji i długości ruchu jałowego. Większość części powinno na tym zyskać, ale niektóre mogą drukować się dłużej, dlatego prosimy o porównaniu czasu drukowania z i bez włączonej opcji." diff --git a/resources/i18n/pt_BR/cura.po b/resources/i18n/pt_BR/cura.po index 741ec379c1..73b8d759ce 100644 --- a/resources/i18n/pt_BR/cura.po +++ b/resources/i18n/pt_BR/cura.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" -"PO-Revision-Date: 2018-06-23 02:20-0300\n" +"POT-Creation-Date: 2018-10-29 15:01+0100\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" @@ -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" @@ -39,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "Arquivo G-Code" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "O GCodeWriter não suporta modo binário." + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "Por favor prepare o G-Code antes de exportar." + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -58,102 +70,51 @@ msgstr "" "

Descubra como assegurar a melhor qualidade de impressão e confiabilidade possível.

\n" "

Ver guia de qualidade de impressão

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimir com a WiFi-Box do Doodle3D" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimir com a WiFi-Box do Doodle3D" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Conectando ao Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Cancelar" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Enviando dados ao Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Incapaz de enviar dados ao Doodle3D Connect. Há outro trabalho ainda ativo?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Armazenando dados no Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Arquivo enviado ao Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Abrir Connect..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Abrir a interface web do Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Exibir registro de alterações" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "Atualizar Firmware" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Achatar os ajustes ativos" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "O perfil foi achatado & ativado." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "Impressão USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Imprimir pela USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Imprimir pela USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "Conectado via USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "Uma impressão USB está em progresso, fechar o Cura interromperá esta impressão. Tem certeza?" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -176,7 +137,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Arquivo de G-Code Comprimido" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "O GCodeGzWriter não suporta modo binário." + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "Pacote de Formato da Ultimaker" @@ -198,10 +164,10 @@ msgid "Save to Removable Drive {0}" msgstr "Salvar em Unidade Removível {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" -msgstr "Há formatos de arquivo disponíveis com os quais escrever!" +msgstr "Não há formatos de arquivo disponíveis com os quais escrever!" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:94 #, python-brace-format @@ -237,7 +203,7 @@ msgstr "Não foi possível salvar em unidade removível {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "Erro" @@ -266,8 +232,8 @@ msgstr "Ejetar dispositivo removível {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "Aviso" @@ -294,259 +260,269 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Unidade Removível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Imprimir pela rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Imprime pela rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "Conectado pela rede." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "Conectado pela rede. Por favor aprove a requisição de acesso na impressora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "Conectado pela rede. Sem acesso para controlar a impressora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "Acesso à impressora solicitado. Por favor aprove a requisição na impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "Status da autenticação" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "Status da Autenticação" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "Tentar novamente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Reenvia o pedido de acesso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Acesso à impressora confirmado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "Sem acesso para imprimir por esta impressora. Incapaz de enviar o trabalho de impressão." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "Solicitar acesso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Envia pedido de acesso à impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Incapaz de iniciar novo trabalho de impressão." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "Há um problema com a configuração de sua Ultimaker que torna impossível iniciar a impressão. Por favor resolva este problema antes de continuar." +msgstr "Há um problema com a configuração de sua Ultimaker, o que torna impossível iniciar a impressão. Por favor resolva este problema antes de continuar." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" -msgstr "Configuração divergente" +msgstr "Configuração conflitante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "Tem certeza que quer imprimir com a configuração selecionada?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Há divergências entre a configuração ou calibração da impressora e do Cura. Para melhores resultados, sempre fatie com os PrintCores e materiais que estão carregados em sua impressora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "Envio de novos trabalhos (temporariamente) bloqueado, ainda enviando o trabalho de impressão anterior." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Enviando dados à impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "Enviando Dados" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Cancelar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "Printcore não carregado no slot {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "Nenhum material carregado no slot {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, 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/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "Material diferente (Cura: {0}, Impressora: {1}) selecionado para o extrusor {2}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Sincronizar com a impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Deseja usar a configuração atual de sua impressora no Cura?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Os PrintCores e/ou materiais da sua impressora diferem dos que estão dentro de seu projeto atual. Para melhores resultados, sempre fatie para os PrintCores e materiais que estão na sua impressora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" msgstr "Conectado pela rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "Trabalho de impressão enviado à impressora com sucesso." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "Dados Enviados" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "Ver no Monitor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "{printer_name} acabou de imprimir '{job_name}'." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "O trabalho de impressão '{job_name}' terminou." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "Impressão Concluída" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Conectar pela rede" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Monitor" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "Não foi possível acessar informação de atualização." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Novos recursos estão disponível para sua {machine_name}! Recomenda-se atualizar o firmware da impressora." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Novo firmware de %s disponível" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "Como atualizar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "Não foi possível acessar informação de atualização." - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Visão de Camadas" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "O Cura não mostra as camadas corretamente quando Impressão em Arame estiver habilitada" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "Visão Simulada" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "Modificar G-Code" @@ -558,34 +534,34 @@ msgstr "Bloqueador de Suporte" #: /home/ruben/Projects/Cura/plugins/SupportEraser/__init__.py:13 msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." -msgstr "Cria um volume em que suportes não são impressos." +msgstr "Cria um volume em que os suportes não são impressos." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "O Cura coleta estatísticas anônimas de uso." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "Coletando Dados" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "Mais informações" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." -msgstr "Ver mais informações em que dados o Cura envia." +msgstr "Ver mais informações sobre os dados enviados pelo Cura." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "Permitir" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Permite que o Cura envie estatísticas anônimas de uso para ajudar a priorizar futuras melhorias ao software. Algumas de suas preferências e ajustes são enviados junto à versão atual do Cura e um hash dos modelos que estão sendo fatiados." @@ -595,20 +571,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Perfis do Cura 15.04" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Arquivo do Blender" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "" -"Não foi possível exportar usando qualidade \"{}\"!\n" -"Foi usada a \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -634,49 +596,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Imagem GIF" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Incapaz de fatiar com o material atual visto que é incompatível com a máquina ou configuração selecionada." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "Incapaz de fatiar" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Incapaz de fatiar com os ajustes atuais. Os seguintes ajustes têm erros: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" -msgstr "Incapaz de fatiar devido a alguns ajustes por modelo. Os seguintes ajustes têm erros em um ou mais dos modelos: {error_labels}" +msgstr "Incapaz de fatiar devido a alguns ajustes por modelo. Os seguintes ajustes têm erros em um dos modelos ou mais: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Incapaz de fatiar porque a torre de purga ou posição de purga são inválidas." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "Incapaz de fatiar porque há objetos associados com o Extrusor desabilitado %s." + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Nada a fatiar porque nenhum dos modelos cabe no volume de impressão. Por favor redimensione ou rotacione os modelos para caberem." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "Processando Camadas" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "Informação" @@ -692,29 +661,40 @@ msgid "Configure Per Model Settings" msgstr "Configurar ajustes por Modelo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "Recomendado" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Arquivo 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "Bico" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "O arquivo de projeto {0} contém um tipo de máquina desconhecido {1}. Não foi possível importar a máquina. Os modelos serão importados ao invés dela." + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "Abrir Arquivo de Projeto" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -725,18 +705,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Arquivo G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Interpretando G-Code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "Detalhes do G-Code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Assegure-se que o g-code é adequado para sua impressora e configuração antes de enviar o arquivo. A representação de g-code pode não ser acurada." @@ -747,27 +727,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Perfil do Cura" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "Arquivo 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Arquivo de Projeto 3MF do Cura" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "Erro ao escrever arquivo 3mf." + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "Selecionar Atualizações" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "Atualizar Firmware" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -778,79 +758,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "Nivelar mesa" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "Parede Externa" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "Paredes Internas" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "Contorno" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "Preenchimento" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "Preenchimento de Suporte" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "Interface de Suporte" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "Suporte" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "Skirt (Saia)" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "Percurso" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "Retrações" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "Outros" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "Desconhecido" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Arquivo pré-fatiado {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "Login falhou" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "O Arquivo Já Existe" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -860,25 +840,25 @@ msgstr "O arquivo {0} já existe. Tem certeza que quer sobr #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:212 msgctxt "@menuitem" msgid "Not overridden" -msgstr "Não sobrepujado" +msgstr "Não sobreposto" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "O material selecionado é incompatível com a máquina ou configuração selecionada." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Material Incompatível" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "Os ajustes foram mudados para atender à atual disponibilidade de extrusores: [%s]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "Ajustes atualizados" @@ -907,8 +887,6 @@ msgid "Export succeeded" msgstr "Exportação concluída" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" @@ -916,58 +894,70 @@ msgstr "Falha ao importa perfil de {0}: {1}
or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" -msgstr "Não há perfil personalizado para importar no arquivo {0}" +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 "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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." 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 or !" +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 "A máquina definida no perfil {0} ({1}) não corresponde à sua máquina atual ({2}), não foi possível importá-la." +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:316 +#: /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 "Erro ao importar perfil de {0}:" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Perfil {0} importado com sucesso" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "Arquivo {0} não contém nenhum perfil válido." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "O Perfil {0} tem tipo de arquivo desconhecido ou está corrompido." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "Perfil personalizado" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Falta um tipo de qualidade ao Perfil." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Não foi possível encontrar tipo de qualidade {0} para a configuração atual." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -994,42 +984,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Todos Os Arquivos (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "Material Personalizado" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "A altura do volume de impressão foi reduzida para que o valor da \"Sequência de Impressão\" impeça o eixo de colidir com os modelos impressos." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Volume de Impressão" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Não pude criar arquivo do diretório de dados de usuário: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "Backup" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Tentativa de restauração de backup do Cura sem dados ou metadados apropriados." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Tentativa de restauração de backup do Cura que não corresponde à versão atual." @@ -1040,32 +1030,32 @@ msgid "Multiplying and placing objects" msgstr "Multiplicando e colocando objetos" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Colocando Objeto" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Incapaz de achar um lugar dentro do volume de construção para todos os objetos" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Achando novos lugares para objetos" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Buscando Localização" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Não Foi Encontrada Localização" @@ -1204,223 +1194,233 @@ msgctxt "@action:button" msgid "Send report" msgstr "Enviar relatório" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Carregando máquinas..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Configurando cena..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Carregando interface..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f mm" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "Somente um arquivo G-Code pode ser carregado por vez. Pulando importação de {0}" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "Não é possível abrir nenhum outro arquivo se G-Code estiver sendo carregado. Pulando importação de {0}" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "O modelo selecionado é pequenos demais para carregar." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Ajustes da Máquina" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Impressora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Ajustes da Impressora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (largura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Profundidade)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Altura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Forma da plataforma de impressão" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Origem no centro" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Mesa aquecida" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Sabor de G-Code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Ajustes da Cabeça de Impressão" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X mín." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância da esquerda da cabeça de impressão ao centro do bico. Usado para prevenir colisões entre impressões anteriores e a cabeça ao imprimir \"Um de cada Vez\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y mín." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância da frente da cabeça de impressão ao centro do bico. Usado para prevenir colisões entre impressões anteriores e a cabeça ao imprimir \"Um de cada Vez\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X máx." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância da direita da cabeça de impressão ao centro do bico. Usado para prevenir colisões entre impressões anteriores e a cabeça ao imprimir \"Um de cada Vez\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y máx." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância da traseira da cabeça de impressão ao centro do bico. Usado para prevenir colisões entre impressões anteriores e a cabeça ao imprimir \"Um de cada Vez\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Altura do eixo" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "A diferença de altura entre a ponta do bico e o sistema de eixos X e Y. Usado para prevenir colisões entre impressões e a cabeça ao imprimir \"Um de cada Vez\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Número de Extrusores" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "G-Code Inicial" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Comandos de G-Code a serem executados no início da impressão." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "G-Code Final" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Comandos de G-Code a serem executados no final da impressão." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Ajustes do Bico" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Tamanho do bico" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Diâmetro de material compatível" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." -msgstr "O diâmetro nominal do filamento suportado pela impressora. O diâmetro exato será sobrepujado pelo material e/ou perfil." +msgstr "O diâmetro nominal do filamento suportado pela impressora. O diâmetro exato será sobreposto pelo material e/ou perfil." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "Deslocamento X do Bico" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Deslocamento Y do Bico" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "Número da Ventoinha de Resfriamento" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "G-Code Inicial do Extrusor" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "G-Code Final do Extrusor" @@ -1440,12 +1440,20 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Não foi possível conectar-se à base de dados de Pacotes do Cura. Por favor verifique sua conexão." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "Complementos" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materiais" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1461,8 +1469,14 @@ msgctxt "@label" msgid "Author" msgstr "Autor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "Downloads" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "Desconhecido" @@ -1495,17 +1509,57 @@ msgctxt "@action:button" msgid "Back" msgstr "Voltar" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "Confirme a desinstalação" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "Você está desinstalando material e/ou perfis que ainda estão em uso. Confirmar irá restaurar os materiais e perfis seguintes a seus defaults." + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "Materiais" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "Perfis" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "Confirmar" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "Você precisará reiniciar o Cura para que as alterações tenham efeito." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Sair do Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "Contribuições da Comunidade" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "Complementos da Comunidade" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "Materiais Genéricos" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "Instalado" @@ -1551,12 +1605,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Recusar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Em destaque" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilidade" @@ -1566,10 +1620,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Obtendo pacotes..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Contato" +msgid "Website" +msgstr "Sítio Web" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "Email" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1582,48 +1641,88 @@ msgid "Changelog" msgstr "Registro de alterações" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "Fechar" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "Atualizar Firmware" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "O firmware é o software rodando diretamente no maquinário de sua impressora 3D. Este firmware controla os motores de passo, regula a temperatura e é o que faz a sua impressora funcionar." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "O firmware que já vêm embutido nas novas impressoras funciona, mas novas versões costumam ter mais recursos, correções e melhorias." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "Automaticamente atualizar Firmware" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +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 "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 "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" +msgid "Select custom firmware" +msgstr "Selecionar firmware personalizado" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "Atualização do Firmware" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "Atualizando firmware." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "Atualização do Firmware completada." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "A atualização de Firmware falhou devido a um erro desconhecido." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "A atualização de firmware falhou devido a um erro de comunicação." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "A atualização de firmware falhou devido a um erro de entrada e saída." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "A atualização de firmware falhou devido a firmware não encontrado." @@ -1633,22 +1732,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Termos de Acordo do Usuário" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "Conexão Existente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "Esta impressora ou grupo já foi adicionada ao Cura. Por favor selecione outra impressora ou grupo." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Conectar a Impressora de Rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" @@ -1659,333 +1758,395 @@ msgstr "" "\n" "Selecione sua impressora da lista abaixo:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Adicionar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "Editar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Remover" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "Atualizar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Se sua impressora não está listada, leia o guia de resolução de problemas de impressão em rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "Tipo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "Versão do firmware" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "Endereço" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Esta impressora não está configurada para hospedar um grupo de impressoras Ultimaker 3." +msgid "This printer is not set up to host a group of printers." +msgstr "Esta impressora não está configurada para hospedar um grupo de impressoras." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Esta impressora hospeda um grupo de %1 impressoras Ultimaker 3." +msgid "This printer is the host for a group of %1 printers." +msgstr "Esta impressora é a hospedeira de um grupo de %1 impressoras." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "A impressora neste endereço ainda não respondeu." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "Conectar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "Endereço da Impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Introduza o endereço IP ou hostname da sua impressora na rede." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "Ok" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "Imprimir pela rede" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "Seleção de impressora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "Imprimir" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 não está configurada para hospedar um grupo de impressora Ultimaker 3 conectadas" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "Imprimir pela rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Adicionar/Remover impressoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" +msgstr "Seleção de impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Abre a página de trabalhos de impressão com seu navegador default." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" +msgstr "Não disponível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Visualizar trabalhos de impressão" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" +msgstr "Inacessível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Preparando para imprimir" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Imprimindo" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" msgstr "Disponível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Conexão à impressora perdida" +msgid "Aborted" +msgstr "Abortado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Indisponível" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Desconhecido" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Desabilitado" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Reservado" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "Finalizado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Preparando para imprimir" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" -msgstr "Necessária uma ação" +msgid "Preparing" +msgstr "Preparando" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" -msgstr "Pausado" +msgid "Pausing" +msgstr "Pausando" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "Continuando" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" -msgstr "A impressão foi interrompida" +msgid "Action required" +msgstr "Necessária uma ação" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Não aceitando trabalhos de impressão" +msgid "Waiting for: Unavailable printer" +msgstr "Aguardando por: Impressora indisponível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "Termina em: " +msgid "Waiting for: First available" +msgstr "Aguardando por: A primeira disponível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "Esvaziar a mesa de impressão" +msgid "Waiting for: " +msgstr "Aguardando por: " -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Esperando alteração de configuração" +msgid "Configuration change" +msgstr "Alteração de configuração" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Trabalhos de impressão" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "Imprimindo" +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "A impressora atribuída, %1, requer as seguintes alterações de configuração:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "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 "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 "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 "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 "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 "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 "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 "Sobrepôr configuração e iniciar impressão" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "Vidro" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "Alumínio" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "Gerenciar fila" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "Enfileirados" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Impressoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "Imprimindo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Visualizar impressoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "Gerenciar impressoras" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "Mover para o topo" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "Remover" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "Continuar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "Pausar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "Abortar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "Você tem certeza que quer mover %1 para o topo da fila?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "Move o trabalho de impressão para o topo da fila" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "Você tem certeza que quer remover %1?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "Remover trabalho de impressão" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "Você tem certeza que quer abortar %1?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +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/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "Carrega a configuração da impressora no Cura" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Ativar Configuração" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "Carrega a configuração da impressora no Cura" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Esquema de Cores" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Cor do Material" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Tipo de Linha" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Taxa de alimentação" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Largura de camada" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Modo de Compatibilidade" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Exibir Percursos" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Exibir Assistentes" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Exibir Perímetro" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Exibir Preenchimento" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Somente Exibir Camadas Superiores" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "Exibir 5 Camadas Superiores Detalhadas" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Topo / Base" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Parede Interna" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "mín" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "máx" @@ -2000,17 +2161,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "Scripts de Pós-Processamento" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "Adicionar um script" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "Ajustes" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "Troca os scripts de pós-processamento ativos" @@ -2105,53 +2266,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Suavização" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Tipo de Malha" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Modelo normal" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Imprimir como suporte" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Não suportar sobreposição com outros modelos" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Modificar ajustes para sobrepor com outros modelos" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Modificar ajustes para preenchimento de outros modelos" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "Selecionar ajustes" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Selecionar Ajustes a Personalizar para este modelo" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtrar..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "Exibir tudo" @@ -2173,13 +2334,13 @@ msgid "Create new" msgstr "Criar novo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Resumo - Projeto do Cura" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Ajustes da impressora" @@ -2196,18 +2357,19 @@ msgid "Update" msgstr "Atualizar" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Tipo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "Grupo de Impressora" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Ajustes de perfil" @@ -2219,24 +2381,25 @@ msgstr "Como o conflito no perfil deve ser resolvido?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Nome" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "Ausente no perfil" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" -msgstr[0] "%1 sobrepujança" -msgstr[1] "%1 sobrepujanças" +msgstr[0] "%1 sobreposto" +msgstr[1] "%1 sobrepostos" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:247 msgctxt "@action:label" @@ -2247,8 +2410,8 @@ msgstr "Derivado de" msgctxt "@action:label" msgid "%1, %2 override" msgid_plural "%1, %2 overrides" -msgstr[0] "%1, %2 sobrepujança" -msgstr[1] "%1, %2 sobrepujanças" +msgstr[0] "%1, %2 sobreposição" +msgstr[1] "%1, %2 sobreposições" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:268 msgctxt "@action:label" @@ -2261,7 +2424,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Como o conflito no material deve ser resolvido?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Visibilidade dos ajustes" @@ -2272,13 +2435,13 @@ msgid "Mode" msgstr "Modo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Ajustes visíveis:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 de %2" @@ -2334,36 +2497,6 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "Mover pra a Posição Seguinte" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "Atualizar Firmware" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "O firmware é o software rodando diretamente no maquinário de sua impressora 3D. Este firmware controla os motores de passo, regula a temperatura e é o que faz a sua impressora funcionar." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "O firmware que já vêm embutido nas novas impressoras funciona, mas novas versões costumam ter mais recursos, correções e melhorias." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "Automaticamente atualizar Firmware" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "Carregar Firmware personalizado" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "Selecionar firmware personalizado" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" @@ -2470,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" @@ -2511,27 +2644,11 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Por favor remova a impressão" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Pausar" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Continuar" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "Abortar Impressão" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Abortar impressão" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2567,19 +2684,17 @@ msgid "Customized" msgstr "Personalizado" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Sempre perguntar" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Descartar e não perguntar novamente" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Manter e não perguntar novamente" @@ -2599,101 +2714,179 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Criar Novo Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Informação" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Confirmar Mudança de Diâmetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" msgstr "O novo diâmetro de filamento está ajustado em %1 mm, que não é compatível com o extrusor atual. Você deseja continuar?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Exibir Nome" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marca" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Tipo de Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Cor" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Propriedades" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Densidade" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Diâmetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Custo do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Peso do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Comprimento do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Custo por Metro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Este material está vinculado a %1 e compartilha algumas de suas propriedades." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Desvincular Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Descrição" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Informação sobre Aderência" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "Ajustes de impressão" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Ativar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Criar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "Duplicar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "Importar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Exportar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "Impressora" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "Confirmar Remoção" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "Tem certeza que deseja remover %1? Isto não poderá ser desfeito!" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Importar Material" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "Não foi possível importar material %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "Material %1 importado com sucesso" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Exportar Material" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "Falha em exportar material para %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Material exportado para %1 com sucesso" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2730,289 +2923,287 @@ msgid "Unit" msgstr "Unidade" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "Geral" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "Interface" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "Idioma:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "Moeda:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "Tema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "Você precisará reiniciar a aplicação para que essas mudanças tenham efeito." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Fatiar automaticamente quando mudar ajustes." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "Fatiar automaticamente" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "Comportamento da área de visualização" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Ressaltar áreas sem suporte do modelo em vermelho. Sem suporte, estas áreas não serão impressas corretamente." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "Exibir seções pendentes" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Centralizar câmera quanto o item é selecionado" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "O comportamento default de ampliação deve ser invertido?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Inverter a direção da ampliação de câmera." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "A ampliação (zoom) deve se mover na direção do mouse?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Ampliar na direção do mouse" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "Os modelos devem ser movidos na plataforma de modo que não se sobreponham?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Assegurar que os modelos sejam mantidos separados" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "Os modelos devem ser movidos pra baixo pra se assentar na plataforma de impressão?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /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:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "Exibir mensagem de alerta no leitor de G-Code." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "Mensagem de alera no leitor de G-Code" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "A Visão de Camada deve ser forçada a ficar em modo de compatibilidade?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Forçar modo de compatibilidade da visão de camadas (requer reinício)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "Abrindo e salvando arquivos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "Os modelos devem ser redimensionados dentro do volume de impressão se forem muito grandes?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "Redimensionar modelos grandes" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "Um modelo pode ser carregado diminuto se sua unidade for por exemplo em metros ao invés de milímetros. Devem esses modelos ser redimensionados?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Redimensionar modelos minúsculos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "Os modelos devem ser selecionados após serem carregados?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Selecionar modelos ao carregar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "Um prefixo baseado no nome da impressora deve ser adicionado ao nome do trabalho de impressão automaticamente?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Adicionar prefixo de máquina ao nome do trabalho" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Um resumo deve ser exibido ao salvar um arquivo de projeto?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Exibir diálogo de resumo ao salvar projeto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Comportamento default ao abrir um arquivo de projeto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /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:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Sempre perguntar" +msgid "Always ask me this" +msgstr "Sempre me perguntar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Sempre abrir como projeto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "Sempre importar modelos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "Quando você faz alterações em um perfil e troca para um diferent, um diálogo aparecerá perguntando se você quer manter ou aplicar suas modificações, ou você pode forçar um comportamento default e não ter o diálogo." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "Sobrepujar Perfil" +msgid "Profiles" +msgstr "Perfis" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "Comportamento default para valores de configuração alterados ao mudar para um perfil diferente: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "Sempre descartar alterações da configuração" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "Sempre transferir as alterações para o novo perfil" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "Privacidade" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "O Cura deve verificar novas atualizações quando o programa for iniciado?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Verificar atualizações na inicialização" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "Dados anônimos sobre sua impressão podem ser enviados para a Ultimaker? Nota: nenhuma informação pessoalmente identificável, modelos ou endereços IP são enviados ou armazenados." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /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:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "Mais informações" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "Experimental" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Usar funcionalidade de plataforma múltipla de impressão" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Usar funcionalidade de plataforma múltipla de impressão (reinício requerido)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Novos modelos carregados devem ser posicionados na plataforma de impressão? Usado em conjunção com plataforma múltipla de impressão (EXPERIMENTAL)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Não posicionar objetos ao carregar." - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "Impressoras" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Ativar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3030,7 +3221,7 @@ msgid "Connection:" msgstr "Conexão:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "A impressora não está conectada." @@ -3056,7 +3247,7 @@ msgid "Aborting print..." msgstr "Abortando impressão..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "Perfis" @@ -3071,18 +3262,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Duplicar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Importar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Exportar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3093,18 +3272,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplicar Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Confirmar Remoção" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "Tem certeza que deseja remover %1? Isto não poderá ser desfeito!" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3125,126 +3292,78 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Impressora: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Perfis Protegidos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Perfis personalizados" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" -msgstr "Atualizar perfil com ajustes atuais" +msgstr "Atualizar perfil com ajustes/sobreposições atuais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Descartar ajustes atuais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." -msgstr "Este perfil usa os defaults especificados pela impressora, portanto não tem ajustes e sobrepujanças na lista abaixo." +msgstr "Este perfil usa os defaults especificados pela impressora, portanto não tem ajustes/sobreposições na lista abaixo." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Seus ajustes atuais coincidem com o perfil selecionado." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Ajustes globais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materiais" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Criar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Duplicar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Importar Material" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr "Não foi possível importar material %1: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "Material %1 importado com sucesso" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Exportar Material" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "Falha em exportar material para %1: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Material exportado para %1 com sucesso" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Impressora" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "Adicionar Impressora" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "Nome da Impressora:" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "Adicionar Impressora" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "Sem Título" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "Sobre o Cura" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "versão: %1" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "Solução completa para impressão 3D com filamento fundido." -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" @@ -3253,102 +3372,122 @@ msgstr "" "Cura é desenvolvido pela Ultimaker B.V. em cooperação com a comunidade.\n" "Cura orgulhosamente usa os seguintes projetos open-source:" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "Interface Gráfica de usuário" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "Framework de Aplicações" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "Gerador de G-Code" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "Biblioteca de comunicação interprocessos" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "Linguagem de Programação" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "Framework Gráfica" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "Ligações da Framework Gráfica" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "Biblioteca de Ligações C/C++" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "Formato de Intercâmbio de Dados" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "Bibliteca de suporte para computação científica" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "Biblioteca de suporte para matemática acelerada" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "Biblioteca de suporte para manuseamento de arquivos STL" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "Biblioteca de suporte para manuseamento de arquivos 3MF" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "Biblioteca de comunicação serial" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "Biblioteca de descoberta 'ZeroConf'" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "Biblioteca de recorte de polígonos" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "Biblioteca de HTTP Python" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "Fonte" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "Ícones SVG" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "Implementação de aplicação multidistribuição em Linux" @@ -3358,64 +3497,64 @@ msgctxt "@label" msgid "Profile:" msgstr "Perfil:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." msgstr "" -"Alguns ajustes/sobrepujanças têm valores diferentes dos que estão armazenados no perfil.\n" +"Alguns ajustes/sobreposições têm valores diferentes dos que estão armazenados no perfil.\n" "\n" "Clique para abrir o gerenciador de perfis." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "Buscar..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Copiar valor para todos os extrusores" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Copiar todos os valores alterados para todos os extrusores" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Ocultar este ajuste" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Não exibir este ajuste" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Manter este ajuste visível" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configurar a visibilidade dos ajustes..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Encolher Todos" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Expandir Todos" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" @@ -3424,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." @@ -3436,17 +3575,17 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Afetado Por" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "Este ajuste é sempre compartilhado entre todos os extrusores. Modificá-lo aqui mudará o valor para todos." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /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:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3457,7 +3596,7 @@ msgstr "" "\n" "Clique para restaurar o valor do perfil." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3504,7 +3643,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "Enviar comando G-Code personalizado para a impressora conectada. Pressione 'enter' para enviar o comando." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Extrusor" @@ -3517,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" @@ -3557,7 +3696,7 @@ msgid "The nozzle inserted in this extruder." msgstr "O bico inserido neste extrusor." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Mesa de Impressão" @@ -3582,6 +3721,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Aquecer a mesa antes de imprimir. Você pode continuar ajustando sua impressão enquanto ela está aquecendo, e não terá que esperar o aquecimento quando estiver pronto pra imprimir." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "Material" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "Favoritos" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "Genérico" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3597,12 +3751,12 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "&Ver" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "Posição da &câmera" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "Plataforma de Impressão (&B)" @@ -3612,12 +3766,12 @@ msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "Ajustes Visíveis" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "Mostrar Todos Os Ajustes" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Gerenciar Visibilidade dos Ajustes..." @@ -3680,347 +3834,346 @@ msgstr "" "Configuração de Impressão desabilitada\n" "Arquivos G-Code não podem ser modificados" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "00h 00min" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "Especificação de tempo" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "Especificação de custo" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "%1m" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "%1g" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "Total:" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." msgstr "Configuração Recomendada de Impressão

Imprimir com os ajustes recomendados para a impressora, material e qualidade selecionados." -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Configuração de Impressão Personalizada

Imprimir com controle fino sobre cada parte do processo de fatiamento." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Impressão ativa" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Nome do Trabalho" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Tempo de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Tempo restante estimado" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "A<ernar Tela Cheia" +msgid "Toggle Full Screen" +msgstr "Alternar Tela Cheia" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "Desfazer (&U)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Refazer" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "Sair (&Q)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" +msgid "3D View" msgstr "Visão &3D" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "Visão &Frontal" +msgid "Front View" +msgstr "Visão Frontal" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "Visão Superior (&T)" +msgid "Top View" +msgstr "Visão Superior" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "Visão do Lado Esquerdo (&L)" +msgid "Left Side View" +msgstr "Visão do Lado Esquerdo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "Visão do Lado Direito (&R)" +msgid "Right Side View" +msgstr "Visão do Lado Direito" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Configurar Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Adicionar Impressora..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Adm&inistrar Impressoras..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Administrar Materiais..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" -msgstr "At&ualizar perfil com valores e sobrepujanças atuais" +msgstr "At&ualizar perfil com valores e sobreposições atuais" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Descartar ajustes atuais" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." -msgstr "&Criar perfil a partir de ajustes atuais..." +msgstr "&Criar perfil a partir de ajustes/sobreposições atuais..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Administrar perfis..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Exibir &Documentação Online" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Relatar um &Bug" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "Sobre (&A)..." +msgid "About..." +msgstr "Sobre..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Remover Modelo &Selecionado" -msgstr[1] "Remover Modelos &Selecionados" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" +msgstr[0] "Remover Modelo Selecionado" +msgstr[1] "Remover Modelos Selecionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Centralizar Modelo Selecionado" msgstr[1] "Centralizar Modelos Selecionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Multiplicar Modelo Selecionado" msgstr[1] "Multiplicar Modelos Selecionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Remover Modelo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Ce&ntralizar Modelo na Mesa" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "A&grupar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Desagrupar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Co&mbinar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Multiplicar Modelo..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&Selecionar Todos Os Modelos" +msgid "Select All Models" +msgstr "Selecionar Todos Os Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "Esvaziar a Mesa de Impressão (&C)" +msgid "Clear Build Plate" +msgstr "Esvaziar a Mesa de Impressão" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 +msgctxt "@action:inmenu menubar:file" +msgid "Reload All Models" +msgstr "Recarregar Todos Os Modelos" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 -msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "Recarregar Todos Os Mode&los" - -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Posicionar Todos os Modelos em Todas as Plataformas de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Posicionar Todos os Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Posicionar Seleção" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Reestabelecer as Posições de Todos Os Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "Remover as &Transformações de Todos Os Modelos" +msgid "Reset All Model Transformations" +msgstr "Remover as Transformações de Todos Os Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "Abrir Arquiv&o(s)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Novo Projeto..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Exibir o Registro do Motor de Fatiamento (&L)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Exibir Pasta de Configuração" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Navegar pacotes..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Expandir/Encolher Barra Lateral" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Por favor carregue um modelo 3D" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Pronto para fatiar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Fatiando..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Pronto para %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Incapaz de Fatiar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Fatiamento indisponível" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Fatiar trabalho de impressão atual" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Cancelar processo de fatiamento" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Preparar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Cancelar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Selecione o dispositivo de saída ativo" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "Abrir arquivo(s)" @@ -4040,129 +4193,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "Arquivo (&F)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "&Salvar..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "&Exportar..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "Salvar &Seleção em Arquivo" +msgid "Export Selection..." +msgstr "Exportar Seleção..." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "S&alvar Como..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Salvar &Projeto..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Editar" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "&Ver" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "Aju&stes" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Im&pressora" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "&Material" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Definir Como Extrusor Ativo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Habilitar Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Desabilitar Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "Plataforma de Impressão (&B)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "&Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "E&xtensões" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "Ferramen&tas" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "P&referências" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "Ajuda (&H)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Este pacote será instalado após o reinício." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "Abrir arquivo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "Ajustes" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "Novo projeto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Tem certeza que quer iniciar novo projeto? Isto esvaziará a mesa de impressão e quaisquer ajustes não salvos." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "Fechando o Cura" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "Você tem certeza que deseja sair do Cura?" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "Instalar Pacote" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "Abrir Arquivo(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." msgstr "Encontramos um ou mais arquivos de G-Code entre os arquivos que você selecionou. Você só pode abrir um arquivo de G-Code por vez. Se você quiser abrir um arquivo de G-Code, por favor selecione somente um." @@ -4172,112 +4341,107 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Salvar Projeto" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Plataforma de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extrusor %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & material" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Não exibir resumo do projeto ao salvar novamente" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Salvar" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Altura de Camada" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Este perfil de qualidade não está disponível para seu material e sua configuração de bicos atuais. Por favor altere-os para abilitar este perfil de qualidade" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "Um perfil personalizado está atualmente ativo. Para habilitar o controle deslizante de qualidade, escolha um perfil de qualidade default na aba Personalizado" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Velocidade de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Mais Lento" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Mais Rápido" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Você modificou alguns ajustes de perfil. Se você quiser alterá-los, use o modo personalizado." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /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:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Preenchimento gradual aumentará gradualmente a quantidade de preenchimento em direção ao topo." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "Habilitar gradual" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "Gerar Suportes" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Gera estrutura que suportarão partes do modelo que têm seções pendentes. Sem estas estruturas, tais partes desabariam durante a impressão." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Selecione qual extrusor a usar para o suporte. Isto construirá estruturas de suportes abaixo do modelo para prevenir que o modelo desabe ou seja impresso no ar." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Aderência à Mesa de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Habilita imprimir um brim (bainha) ou raft (jangada). Adicionará uma área chata em volta ou sob o objeto que é fácil de remover após a impressão ter finalizado." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Precisa de ajuda para melhorar sua impressões?
Leia os Guias de Resolução de Problema da Ultimaker" @@ -4324,22 +4488,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Tipo de impressora" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Material" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Use camada de aderência ou cola com esta combinação de material" +msgid "Use glue with this material combination" +msgstr "Use cola com esta combinação de materiais" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Verificar compatibilidade" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Clique para verificar a compatibilidade do material em Ultimaker.com." @@ -4429,16 +4593,6 @@ msgctxt "name" msgid "God Mode" msgstr "Modo Deus" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Aceita G-Code e o envia através da WiFi para uma WiFi-Box Doodle3D." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "WiFi-Box Doodle3D" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4449,6 +4603,16 @@ msgctxt "name" msgid "Changelog" msgstr "Registro de Alterações" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "" + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." @@ -4519,16 +4683,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Estágio de Preparação" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Provê uma janela de edição para edição direta de script." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Ferramenta de scripting integrada" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4639,16 +4793,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Leitor de Perfis de Cura Legado" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Ajuda a abrir arquivos do Blender diretamente no Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Integração ao Blender (experimental)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4699,6 +4843,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" 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." + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "Atualização de Versão de 3.4 para 3.5" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4839,6 +4993,298 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Leitor de Perfis do Cura" +#~ msgctxt "@warning:status" +#~ msgid "Please generate G-code before saving." +#~ msgstr "Por favor gere o G-Code antes de salvar." + +#~ msgctxt "@item:inmenu" +#~ msgid "Profile Assistant" +#~ msgstr "Assistente de Perfil" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Profile Assistant" +#~ msgstr "Assistente de Perfil" + +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "Atualizar Firmware" + +#~ msgctxt "@label unknown material" +#~ msgid "Unknown" +#~ msgstr "Desconhecido" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "No custom profile to import in file {0}" +#~ msgstr "Não há perfil personalizado para importar no arquivo {0}" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "This profile {0} contains incorrect data, could not import it." +#~ msgstr "Este perfil {0} contém dados incorretos, não foi possível importá-lo." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "A máquina definida no perfil {0} ({1}) não corresponde à sua máquina atual ({2}), não foi possível importá-la." + +#~ msgctxt "@title:window" +#~ msgid "Confirm uninstall " +#~ msgstr "Confirme a deinstalação" + +#~ msgctxt "@label:status" +#~ msgid "Paused" +#~ msgstr "Pausado" + +#~ msgctxt "@action:button" +#~ msgid "Previous" +#~ msgstr "Anterior" + +#~ msgctxt "@action:button" +#~ msgid "Next" +#~ msgstr "Próximo" + +#~ msgctxt "@label" +#~ msgid "Tip" +#~ msgstr "Dica" + +#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +#~ msgid "%1m / ~ %2g / ~ %4 %3" +#~ msgstr "%1m / ~ %2g / ~ %4 %3" + +#~ msgctxt "@label Print estimates: m for meters, g for grams" +#~ msgid "%1m / ~ %2g" +#~ msgstr "%1m / ~ %2g" + +#~ msgctxt "@label" +#~ msgid "Print experiment" +#~ msgstr "Imprimir experimento" + +#~ msgctxt "@label" +#~ msgid "Checklist" +#~ msgstr "Lista de verificação" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "Atualizar Firmware" + +#~ msgctxt "description" +#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +#~ msgstr "Permite que fabricantes de material criem novos perfis de material e qualidade usando uma interface drop-in." + +#~ msgctxt "name" +#~ msgid "Print Profile Assistant" +#~ msgstr "Assistente de Perfil de Impressão" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimir com a WiFi-Box do Doodle3D" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimir com a WiFi-Box do Doodle3D" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Conectando ao Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Enviando dados ao Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Incapaz de enviar dados ao Doodle3D Connect. Há outro trabalho ainda ativo?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Armazenando dados no Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Arquivo enviado ao Doodle3D Connect" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Abrir Connect..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Abrir a interface web do Doodle3D Connect" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Arquivo do Blender" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Não foi possível exportar usando qualidade \"{}\"!\n" +#~ "Foi usada a \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Contato" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Esta impressora não está configurada para hospedar um grupo de impressoras Ultimaker 3." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Esta impressora hospeda um grupo de %1 impressoras Ultimaker 3." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 não está configurada para hospedar um grupo de impressora Ultimaker 3 conectadas" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Adicionar/Remover impressoras" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Abre a página de trabalhos de impressão com seu navegador default." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Visualizar trabalhos de impressão" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Preparando para imprimir" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Imprimindo" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Disponível" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Conexão à impressora perdida" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Indisponível" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Desconhecido" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Desabilitado" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Reservado" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Preparando para imprimir" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "A impressão foi interrompida" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Não aceitando trabalhos de impressão" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Termina em: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Esvaziar a mesa de impressão" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Esperando alteração de configuração" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Trabalhos de impressão" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Impressoras" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Visualizar impressoras" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Pausar" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Continuar" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Abortar Impressão" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Sempre perguntar" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Sobrescrever Perfil" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Novos modelos carregados devem ser posicionados na plataforma de impressão? Usado em conjunção com plataforma múltipla de impressão (EXPERIMENTAL)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Não posicionar objetos ao carregar." + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "Salvar &Seleção em Arquivo" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "S&alvar Como..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Salvar &Projeto..." + +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Use camada de aderência ou cola com esta combinação de material" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Aceita G-Code e o envia através da WiFi para uma WiFi-Box Doodle3D." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "WiFi-Box Doodle3D" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Provê uma janela de edição para edição direta de script." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Ferramenta de scripting integrada" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Ajuda a abrir arquivos do Blender diretamente no Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Integração ao Blender (experimental)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Alerta de Verificador de Modelo" @@ -5106,10 +5552,6 @@ msgstr "Leitor de Perfis do Cura" #~ msgid "Browse plugins..." #~ msgstr "Navegar complementos..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "Plataforma de Impressão (&B)" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "Comp&lementos" @@ -5335,14 +5777,6 @@ msgstr "Leitor de Perfis do Cura" #~ "\n" #~ "Desculpe!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Assistente de Perfil" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Assistente de Perfil" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Não há material carregado" @@ -5473,14 +5907,6 @@ msgstr "Leitor de Perfis do Cura" #~ msgid "Configure setting visiblity..." #~ msgstr "Configurar a visibilidade dos ajustes..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Automático: %1" @@ -5517,14 +5943,6 @@ msgstr "Leitor de Perfis do Cura" #~ msgid "GCode Profile Reader" #~ msgstr "Leitor de Perfis de G-Code" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Permite que fabricantes de material criem novos perfis de material e qualidade usando uma interface drop-in." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Assistente de Perfil de Impressão" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Erros apareceram ao abrir seu arquivo SolidWorks! Por favor verifique se é possível abrir seu arquivo no próprio SolidWorks sem problema também!" @@ -5721,10 +6139,6 @@ msgstr "Leitor de Perfis do Cura" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Esta impressora hospeda um grupo de %1 impressoras Ultimaker 3 conectadas" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Preparando" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Completado em: " diff --git a/resources/i18n/pt_BR/fdmextruder.def.json.po b/resources/i18n/pt_BR/fdmextruder.def.json.po index d1d9bebbd2..10db723a69 100644 --- a/resources/i18n/pt_BR/fdmextruder.def.json.po +++ b/resources/i18n/pt_BR/fdmextruder.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" -"PO-Revision-Date: 2018-06-23 05:00-0300\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\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" @@ -167,6 +167,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "A coordenada Z da posição onde o bico faz a purga no início da impressão." +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +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 "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" msgid "Build Plate Adhesion" @@ -215,4 +225,4 @@ msgstr "Diâmetro" #: fdmextruder.def.json msgctxt "material_diameter description" msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Ajusta o diâmetro do filamento usado. Acerte este valor com o diâmetro do filamento atual." +msgstr "Ajusta o diâmetro do filamento usado. Use o valor medido do diâmetro do filamento atual." diff --git a/resources/i18n/pt_BR/fdmprinter.def.json.po b/resources/i18n/pt_BR/fdmprinter.def.json.po index e6df9e6b39..bd55d331ae 100644 --- a/resources/i18n/pt_BR/fdmprinter.def.json.po +++ b/resources/i18n/pt_BR/fdmprinter.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" -"PO-Revision-Date: 2018-04-23 05:20-0300\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\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" @@ -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" @@ -85,6 +86,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "GUID do material. Este valor é ajustado automaticamente. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Diâmetro" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Ajusta o diâmetro do filamento utilizado. Acerte este valor com o diâmetro real do filamento." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -448,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" @@ -538,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" @@ -588,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" @@ -1060,6 +1071,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Ziguezague" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +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 "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" msgid "Top/Bottom Line Directions" @@ -1140,6 +1161,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Compensa o fluxo para partes de uma parede interna sendo impressa onde já há outra parede." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "Mínimo Fluxo da Parede" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "Mínima porcentagem de fluxo permite para um filete de parede. A compensação de sobreposição de parede reduz o fluxo de uma parede quando ela está próxima a outra já impressa. Paredes cujo fluxo seja menor que este valor serão trocadas por um momento de percurso. Ao usar este ajuste, você deve habilitar a compensação de sobreposição de paredes e imprimir as paredes externas antes das internas." + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "Preferir Retração" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "Se usado, a retração é usada ao invés de combing para movimentos de percurso que substituem paredes cujo fluxo estiver abaixo do limite mínimo." + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1457,8 +1498,8 @@ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "O padrão do material de preenchimento da impressão. Preenchimento de Linhas e Ziguezague trocam direções em camadas alternadas, reduzindo 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 totalmente impressos em cada camada. Os preenchimentos Cúbico, Quarto Cúbico e Octeto mudam em cada camada para prover uma distribuição mais uniforme de forças em cada direção." +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 "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" @@ -1505,11 +1546,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1525,6 +1561,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "Cruzado 3D" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "Giróide" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1535,6 +1576,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Conecta as extremidades onde o padrão de preenchimento toca a parede interna usando uma linha que segue a forma da parede interna. Habilitar este ajuste pode fazer o preenchimento aderir melhor às paredes e reduzir o efeito do preenchimento na qualidade de superfícies verticais. Desabilitar este ajuda diminui a quantidade de material usado." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "Conectar Polígonos do Preenchimento" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "Conecta os caminhos de preenchimentos onde estiverem próximos um ao outro. Para padrões de preenchimento que consistam de vários polígonos fechados, a habilitação deste ajuste reduz bastante o tempo de percurso." + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1565,6 +1616,30 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "O padrão de preenchimento é movido por esta distância no eixo Y." +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "Multiplicador de Filete de Preenchimento" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "Converte cada file de preenchimento para este número de filetes. Os filetes extras não se cruzam, se evitam. Isto torna o preenchimento mais rígido, mas aumenta o tempo de impressão e uso do material." + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "Contagem de Paredes de Preenchimento Extras" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" +"Adiciona paredes extra em torno da área de preenchimento. Tais paredes podem fazer filetes de contorno de topo e base afundarem menos, o que significa que você precisará de menos camadas de contorno de topo e base para a mesma qualidade, à custa de algum material extra.\n" +"Este recurso pode combinar com o Conectar Polígonos de Preenchimento para conecta todo o preenchimento em um único caminho de extrusão sem a necessidade de percursos ou retrações se os ajustes forem consistentes." + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1793,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" @@ -1875,16 +1950,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "A temperatura usada para a mesa aquecida na primeira camada." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Diâmetro" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Ajusta o diâmetro do filamento utilizado. Acerte este valor com o diâmetro real do filamento." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -1893,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" @@ -1943,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" @@ -2722,8 +2787,8 @@ msgstr "Modo de Combing" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "O Combing, ou penteamento, mantém o bico dentro de áreas já impressas se movimenta. Isso resulta em percursos ligeiramente mais longos mas reduz a necessidade de retrações. Se o penteamento estiver desligado, o material sofrerá retração e o bico se moverá em linha reta para o próximo ponto. É também possível evitar o penteamento em área de contornos superiores e inferiores habilitando o penteamento no preenchimento somente." +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "O Combing (penteamento) mantém o bico dentro de áreas já impressas durante os percursos. Isto resulta em movimentações um pouco mais amplas mas reduz a necessidade de retrações. Se o combing for desligado, o material sofrerá retração e o bico se moverá em linha reta ao próximo ponto. É também possível evitar combing sobre áreas de contorno de topo e base e ainda só fazer combing no preenchimento. Note que a opção 'Dentro do Preenchimento' se comporta exatamente como a 'Não no Contorno' em versões anteriores do Cura." #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2740,6 +2805,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Não no Contorno" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "Dentro do Preenchimento" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3120,11 +3190,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3185,6 +3250,56 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Distância entre as linhas impressas da estrutura de suporte. Este ajuste é calculado a partir da densidade de suporte." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "Distância de Filetes da Camada Inicial de Suporte" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "Distância entre os filetes da camada inicial da camada de suporte. Este ajuste é calculado pela densidade de suporte." + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "Direção de Filete do Preenchimento de Suporte" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "Orientação do padrão de preenchimento para suportes. O padrão de preenchimento do suporte é rotacionado no plano horizontal." + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +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 "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 "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 "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 "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 "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" msgid "Support Z Distance" @@ -3233,17 +3348,17 @@ msgstr "Prioridade das Distâncias de Suporte" #: fdmprinter.def.json msgctxt "support_xy_overrides_z description" msgid "Whether the Support X/Y Distance overrides the Support Z Distance or vice versa. When X/Y overrides Z the X/Y distance can push away the support from the model, influencing the actual Z distance to the overhang. We can disable this by not applying the X/Y distance around overhangs." -msgstr "Se a distância XY sobrepuja a distância Z de suporte ou vice-versa. Quando XY sobrepuja Z a distância XY pode afastar o suporte do modelo, influenciando a distância Z real até a seção pendente. Podemos desabilitar isso não aplicando a distância XY em volta das seções pendentes." +msgstr "Se a distância XY substitui a distância Z de suporte ou vice-versa. Quando XY substitui Z a distância XY pode afastar o suporte do modelo, influenciando a distância Z real até a seção pendente. Podemos desabilitar isso não aplicando a distância XY em volta das seções pendentes." #: fdmprinter.def.json msgctxt "support_xy_overrides_z option xy_overrides_z" msgid "X/Y overrides Z" -msgstr "X/Y sobrepuja Z" +msgstr "X/Y substitui Z" #: fdmprinter.def.json msgctxt "support_xy_overrides_z option z_overrides_xy" msgid "Z overrides X/Y" -msgstr "Z sobrepuja X/Y" +msgstr "Z substitui X/Y" #: fdmprinter.def.json msgctxt "support_xy_distance_overhang label" @@ -3433,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" @@ -3475,11 +3590,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3515,11 +3625,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3555,16 +3660,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Ziguezague" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +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." + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "Velocidade de Ventoinha do Contorno Suportado" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "Porcentagem de velocidade da ventoinha a usar ao imprimir as regiões de contorno imediatamente sobre o suporte. Usar uma velocidade de ventoinha alta pode fazer o suporte mais fácil de remover." + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3749,6 +3869,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "O número de linhas usada para o brim. Mais linhas de brim melhoram a aderência à mesa, mas também reduzem a área efetiva de impressão." +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +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 "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" msgid "Brim Only on Outside" @@ -3817,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" @@ -3891,8 +4021,8 @@ msgstr "Largura das linhas na camada de base do raft. Devem ser grossas para aux #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Espaçamento de Linhas do Raft" +msgid "Raft Base Line Spacing" +msgstr "Espaçamento de Filete de Base do Raft" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4109,16 +4239,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "O volume mínimo para cada camada da torre de purga de forma a purgar material suficiente." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Espessura da Torre de Purga" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "A espessura da torre de purga (que é oca). Uma espessura maior que a metade do volume mínimo da torre de purga resultará em uma torre de purga densa." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4159,26 +4279,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Depois de imprimir a torre de purga com um bico, limpar o material escorrendo do outro bico na torre de purga." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Limpar Bico Depois da Troca" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Depois de trocar extrusores, limpar o material escorrendo do bico na primeira peça impressa. Isso causa um movimento lento de limpeza do bico em um lugar onde o material escorrido causa o menor dano à qualidade de superfície da sua impressão." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Volume de Purga da Torre de Purga" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Quantidade de filamento a ser purgado na torre de purga. A purga é útil para compensar filamento perdido por escorrimento durante inatividade do bico." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4664,6 +4764,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Dados relacionando fluxo de material (em mm³ por segundo) a temperatura (graus Celsius)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "Mínima Circunferência do Polígono" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "Polígonos em camadas fatiadas que tiverem uma circunferência menor que esta quantia serão excluídos. Menores valores levam a malha de maior resolução ao custo de tempo de fatiamento. Serve melhor para impressoras SLA de alta resolução e pequenos modelos 3D com muitos detalhes." + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5007,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" @@ -5323,6 +5433,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Limite até onde se usa uma camada menor ou não. Este número é comparado à tangente da ladeira mais vertical da camada." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "Ângulo de Parede Pendente" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "Paredes que têm inclinação maior que este ângulo serão impressas usando ajustes de seção pendente de parede. Quando o valor for 90, nenhuma parede será tratada como seção pendente." + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "Velocidade de Parede Pendente" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "Paredes pendentes serão impressas com esta porcentagem de sua velocidade de impressão normal." + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5353,16 +5483,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Se uma região do contorno for suportada por menos do que esta porcentagem de sua área, imprimi-la com os ajustes de ponte. Senão, imprimir usando os ajustes normais de contorno." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Seção Pendente Máxima da Parede de Ponte" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "O comprimento máximo permitido da região de ar abaixo da linha da parede antes que a parede seja impressa usando ajustes de ponte. Expressado como uma porcentagem da espessura de filete de parede. Quando o vão for mais largo que esta quantia, a parede é impressa usando os ajustes de ponte. Senão, a parede é impressa com os ajustes normais. Quanto menor o valor, mais provável que os filetes da parede sejam impressos com os ajustes de ponte." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5583,6 +5703,74 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Matriz de transformação a ser aplicada ao modelo após o carregamento do arquivo." +#~ 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 happend midway over infill this feature can reduce the top surface quality." +#~ msgstr "Conectar camihos de contorno do topo e base onde se situarem próximos. Habilitar para o padrão concêntrico reduzirá bastante o tempo de percurso, mas visto que as conexões podem acontecer sobre o preenchimento no meio do caminho, este recurso pode reduzir a qualidade da superfície superior." + +#~ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +#~ msgstr "O padrão do material de preenchimento da impressão. Preenchimento de Linhas e Ziguezague trocam direções em camadas alternadas, reduzindo 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 totalmente impressos em cada camada. Os preenchimentos Cúbico, Quarto Cúbico e Octeto mudam em cada camada para prover uma distribuição mais uniforme de forças em cada direção." + +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "O Combing, ou penteamento, mantém o bico dentro de áreas já impressas se movimenta. Isso resulta em percursos ligeiramente mais longos mas reduz a necessidade de retrações. Se o penteamento estiver desligado, o material sofrerá retração e o bico se moverá em linha reta para o próximo ponto. É também possível evitar o penteamento em área de contornos superiores e inferiores habilitando o penteamento no preenchimento somente." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Espaçamento de Linhas do Raft" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Espessura da Torre de Purga" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "A espessura da torre de purga (que é oca). Uma espessura maior que a metade do volume mínimo da torre de purga resultará em uma torre de purga densa." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Limpar Bico Depois da Troca" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Depois de trocar extrusores, limpar o material escorrendo do bico na primeira peça impressa. Isso causa um movimento lento de limpeza do bico em um lugar onde o material escorrido causa o menor dano à qualidade de superfície da sua impressão." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Volume de Purga da Torre de Purga" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Quantidade de filamento a ser purgado na torre de purga. A purga é útil para compensar filamento perdido por escorrimento durante inatividade do bico." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Seção Pendente Máxima da Parede de Ponte" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "O comprimento máximo permitido da região de ar abaixo da linha da parede antes que a parede seja impressa usando ajustes de ponte. Expressado como uma porcentagem da espessura de filete de parede. Quando o vão for mais largo que esta quantia, a parede é impressa usando os ajustes de ponte. Senão, a parede é impressa com os ajustes normais. Quanto menor o valor, mais provável que os filetes da parede sejam impressos com os ajustes de ponte." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Otimiza a ordem em que paredes são impressas de modo a reduzir o número de retrações e a distância percorrida. A maioria das peças se beneficiarão deste ajuste habilitado mas algumas podem acabar levando mais tempo, portanto por favor compare as estimativas de tempo de impressão com e sem otimização." diff --git a/resources/i18n/pt_PT/cura.po b/resources/i18n/pt_PT/cura.po index cb52613320..bcfa154d11 100644 --- a/resources/i18n/pt_PT/cura.po +++ b/resources/i18n/pt_PT/cura.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" -"PO-Revision-Date: 2018-06-21 14:30+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" +"PO-Revision-Date: 2018-10-01 13:15+0100\n" "Last-Translator: Paulo Miranda \n" "Language-Team: Paulo Miranda , Portuguese \n" "Language: pt_PT\n" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "Ficheiro G-code" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "O GCodeWriter não suporta modo sem texto." + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "Prepare um G-code antes de exportar." + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -54,111 +65,56 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "" -"

Um, ou mais, dos modelos 3D podem ter menos qualidade de impressão devido à dimensão do modelo 3D e definição de material:

\n" -"

{model_names}

\n" -"

Descubra como assegurar a melhor qualidade e fiabilidade possível da impressão.

\n" -"

Ver o guia de qualidade da impressão

" +msgstr "

Um, ou mais, dos modelos 3D podem ter menos qualidade de impressão devido à dimensão do modelo 3D e definição de material:

\n

{model_names}

\n

Descubra como assegurar a melhor qualidade e fiabilidade possível da impressão.

\n

Ver o guia de qualidade da impressão

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimir com a Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Imprimir com a Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "A ligar ao Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Cancelar" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "A enviar dados para o Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Não é possível enviar dados para o Doodle3D Connect. Será que há outro trabalho ainda ativo?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "A guardar dados no Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Ficheiro enviado para o Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Abrir Connect..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Abrir a interface web do Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Mostrar Lista das Alterações de cada Versão" +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "Atualizar firmware" + # rever! # flatten -ver contexto! # nivelar? -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Nivelar Definições Ativas" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "O perfil foi nivelado & ativado." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "Impressão USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Imprimir por USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Imprimir por USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "Ligado via USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "Existe uma impressão por USB em curso; fechar o Cura irá interromper esta impressão. Tem a certeza?" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -181,7 +137,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Ficheiro G-code comprimido" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "O GCodeGzWriter não suporta modo de texto." + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "Arquivo Ultimaker Format" @@ -205,7 +166,7 @@ msgstr "Guardar no Disco Externo {0}" # rever! # contexto #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Não existem quaisquer formatos disponíveis para gravar o ficheiro!" @@ -244,7 +205,7 @@ msgstr "Não foi possível guardar no Disco Externo {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "Erro" @@ -276,8 +237,8 @@ msgstr "Ejetar Disco Externo {0}" # Atenção? #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "Aviso" @@ -304,97 +265,92 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Disco Externo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Imprimir através da rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Imprimir através da rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "Ligado através da rede." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "Ligado através da rede. Por favor aprove o pedido de acesso, na impressora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "Ligado através da rede. Sem autorização para controlar a impressora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "Acesso à impressora solicitado. Por favor aprove o pedido de acesso, na impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "Estado da autenticação" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "Estado da autenticação" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "Tentar de Novo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Reenviar a solicitação de acesso" # rever! # aceite? -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Acesso à impressora confirmado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "Sem autorização para imprimir com esta impressora. Não foi possível enviar o trabalho de impressão." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "Solicitar Acesso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Enviar pedido de acesso para a impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Não é possível iniciar um novo trabalho de impressão." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." msgstr "Existe um problema com a configuração da sua Ultimaker, o qual impede o inicio da impressão. Por favor resolva este problema antes de continuar." @@ -402,110 +358,125 @@ msgstr "Existe um problema com a configuração da sua Ultimaker, o qual impede # rever! # ver contexto! pode querer dizer # Configuração incompatível -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Divergência de Configuração" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "Tem a certeza de que deseja imprimir com a configuração selecionada?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Existe uma divergência entre a configuração ou calibração da impressora e o Cura. Para se obter os melhores resultados, o seccionamento (no Cura) deve ser sempre feito para os núcleos de impressão e para os materiais que estão introduzidos na impressora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "O envio de novos trabalhos está (temporariamente) bloqueado; o trabalho de impressão anterior ainda está a ser enviado." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "A enviar dados para a impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "A Enviar Dados" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Cancelar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "Nenhum PrintCore instalado na ranhura {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "Nenhum material carregado na ranhura {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, 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: {cura_printcore_name}, Impressora: {remote_printcore_name}) selecionado para o extrusor {extruder_id}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "Material diferente (Cura: {0}, Impressora: {1}) selecionado para o extrusor {2}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Sincronizar com a impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Deseja utilizar a configuração atual da impressora no Cura?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Os núcleos de impressão e/ou materiais na sua impressora são diferentes dos definidos no seu projeto atual. Para se obter os melhores resultados, o seccionamento (no Cura) deve ser sempre feito para os núcleos de impressão e para os materiais que estão introduzidos na impressora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" msgstr "Ligado através da rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "O trabalho de impressão foi enviado com sucesso para a impressora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "Dados Enviados" # rever! # contexto -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "Ver no Monitor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "A impressora {printer_name} terminou a impressão de \"{job_name}\"." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." @@ -513,59 +484,59 @@ msgstr "O trabalho de impressão '{job_name}' terminou." # rever! # Concluída? -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "Impressão terminada" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Ligar Através da Rede" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Monitorizar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "Não foi possível aceder às informações de atualização." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Estão disponíveis novas funcionalidades para a impressora {machine_name}! É recomendado atualizar o firmware da impressora." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Novo firmware para %s está disponível" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "Como atualizar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "Não foi possível aceder às informações de atualização." - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Vista Camadas" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Quando a opção \"Wire Printing\" está ativa, o Cura não permite visualizar as camadas de uma forma precisa" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "Visualização por Camadas" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "Modificar G-code" @@ -579,32 +550,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Criar um volume dentro do qual não são impressos suportes." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "O Cura recolhe, de forma anónima, estatísticas sobre as opções usadas." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "A Recolher Dados" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "Mais informação" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Saiba mais sobre que informação o Cura envia." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "Permitir" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Permitir que o Cura envie de forma anónima, estatísticas sobre as opções usadas, para nos ajudar a estabelecer as prioridades para os futuros desenvolvimentos do Cura. São enviadas apenas algumas das preferências e definições usadas, a versão do Cura e um valor \"hash\" dos modelos que está a seccionar." @@ -614,20 +585,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Perfis Cura 15.04" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Ficheiro Blender" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "" -"Não foi possível exportar utilizando a qualidade \"{}\"!\n" -"Foi revertido para \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -653,55 +610,62 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Imagem GIF" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Não é possível seccionar com o material atual, uma vez que é incompatível com a impressora ou configuração selecionada." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "Não é possível Seccionar" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Não é possível seccionar com as definições atuais. As seguintes definições apresentam erros: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Não é possível seccionar devido a algumas definições por modelo. As seguintes definições apresentam erros num ou mais modelos: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Não é possível seccionar porque a torre de preparação ou a(s) posição(ões) de preparação é(são) inválidas." +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "Não é possível seccionar porque existem objetos associados à extrusora %s desativada." + # rever! # models fit the # dentro do? # contido pelo # se adapta? # cabem no...? -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Sem conteúdo para seccionar porque nenhum dos modelos está dentro do volume de construção. Por favor redimensione, mova ou rode os modelos para os adaptar ao volume de construção." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "A Processar Camadas" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "Informações" @@ -717,29 +681,40 @@ msgid "Configure Per Model Settings" msgstr "Configurar definições individuais Por-Modelo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "Recomendado" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Ficheiro 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "Nozzle" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "O ficheiro de projeto {0} contém um tipo de máquina desconhecido {1}. Não é possível importar a máquina. Em vez disso, serão importados os modelos." + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "Abrir ficheiro de projeto" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -750,18 +725,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Ficheiro G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "A analisar G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "Detalhes do G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Certifique-se de que este g-code é apropriado para a sua impressora e respetiva configuração, antes de enviar o ficheiro para a impressora. A representação do g-code poderá não ser exata." @@ -772,27 +747,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Perfil Cura" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "Ficheiro 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Ficheiro 3MF de Projeto Cura" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "Erro ao gravar ficheiro 3mf." + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "Selecionar atualizações" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "Atualizar firmware" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -803,79 +778,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "Nivelar base de construção" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "Parede Exterior" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "Paredes Interiores" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "Revestimento" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "Enchimento" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "Enchimento dos Suportes" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "Interface dos Suportes" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "Suportes" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "Contorno" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "Deslocação" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "Retrações" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "Outro" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "Desconhecido" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Ficheiro pré-seccionado {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "Falha no início de sessão" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "O Ficheiro Já Existe" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -887,23 +862,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Manter" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "O material selecionado é incompatível com a máquina ou a configuração selecionada." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Material incompatível" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "As definições foram alteradas de forma a corresponder aos extrusores disponíveis de momento: [%s]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "Definições atualizadas" @@ -932,8 +907,6 @@ msgid "Export succeeded" msgstr "Exportação bem-sucedida" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" @@ -941,58 +914,70 @@ msgstr "Falha ao importar perfil de {0}: {1} or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" -msgstr "O ficheiro {0} não contém qualquer perfil personalizado para importar" +msgstr "Nenhum perfil personalizado para importar no ficheiro {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 "Falha 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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." msgstr "O 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 or !" +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 "A máquina definida no perfil {0} ({1}) não corresponde à sua máquina atual ({2}), e não foi possível importá-la." +msgstr "A máquina definida no perfil {0} ({1}) não corresponde à sua máquina atual ({2}), não foi possível importá-la." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "Falha ao importar perfil de {0}:" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Perfil {0} importado com êxito" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "O ficheiro {0} não contém qualquer perfil válido." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "O perfil {0} é de um formato de ficheiro desconhecido ou está corrompido." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "Perfil personalizado" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "O perfil não inclui qualquer tipo de qualidade." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Não foi possível encontrar um tipo de qualidade {0} para a configuração atual." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1021,42 +1006,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Todos os Ficheiros (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "Material Personalizado" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "A altura do volume de construção foi reduzida devido ao valor da definição \"Sequência de impressão\" para impedir que o pórtico colida com os modelos impressos." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Volume de construção" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Não é possível criar um arquivo a partir do directório de dados do utilizador: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "Backup" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Tentou restaurar um Cura backup sem existirem dados ou metadados correctos." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Tentou restaurar um Cura backup que não corresponde á sua versão actual." @@ -1067,33 +1052,33 @@ msgid "Multiplying and placing objects" msgstr "Multiplicar e posicionar objetos" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "A Posicionar Objeto" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Não é possível posicionar todos os objetos dentro do volume de construção" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "A procurar nova posição para os objetos" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "A Procurar Posição" # rever! #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Não é Possível Posicionar" @@ -1111,12 +1096,7 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "" -"

Ups, o Ultimaker Cura encontrou um possível problema.

\n" -"

Foi encontrado um erro irrecuperável durante o arranque da aplicação. Este pode ter sido causado por alguns ficheiros de configuração incorrectos. Sugerimos que faça um backup e reponha a sua configuração.

\n" -"

Os backups estão localizados na pasta de configuração.

\n" -"

Por favor envie-nos este Relatório de Falhas para podermos resolver o problema.

\n" -" " +msgstr "

Ups, o Ultimaker Cura encontrou um possível problema.

\n

Foi encontrado um erro irrecuperável durante o arranque da aplicação. Este pode ter sido causado por alguns ficheiros de configuração incorrectos. Sugerimos que faça um backup e reponha a sua configuração.

\n

Os backups estão localizados na pasta de configuração.

\n

Por favor envie-nos este Relatório de Falhas para podermos resolver o problema.

\n " # rever! # button size? @@ -1151,10 +1131,7 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

Please use the \"Send report\" button to post a bug report automatically to our servers

\n" " " -msgstr "" -"

Ocorreu um erro fatal no Cura. Por favor envie-nos este Relatório de Falhas para podermos resolver o problema

\n" -"

Por favor utilize o botão \"Enviar relatório\" para publicar um relatório de erros automaticamente nos nossos servidores

\n" -" " +msgstr "

Ocorreu um erro fatal no Cura. Por favor envie-nos este Relatório de Falhas para podermos resolver o problema

\n

Por favor utilize o botão \"Enviar relatório\" para publicar um relatório de erros automaticamente nos nossos servidores

\n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1236,223 +1213,233 @@ msgctxt "@action:button" msgid "Send report" msgstr "Enviar relatório" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "A carregar máquinas..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "A configurar cenário..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "A carregar interface..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f mm" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "Apenas pode ser carregado um ficheiro G-code de cada vez. Importação {0} ignorada" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "Não é possível abrir outro ficheiro enquanto o G-code estiver a carregar. Importação {0} ignorada" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "O modelo selecionado era demasiado pequeno para carregar." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Definições da máquina" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Impressora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Definições da Impressora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Largura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Profundidade)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Altura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Forma da base de construção" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Origem no centro" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Base aquecida" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Variante do G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Definições Cabeça de Impressão" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X mín" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância desde a parte esquerda da cabeça de impressão até ao centro do nozzle. Utilizado para impedir colisões entre as impressões anteriores e a cabeça de impressão ao imprimir \"Individualmente\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y mín" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância desde a parte frontal da cabeça de impressão até ao centro do nozzle. Utilizado para impedir colisões entre as impressões anteriores e a cabeça de impressão ao imprimir \"Individualmente\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X máx" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância desde a parte direita da cabeça de impressão até ao centro do nozzle. Utilizado para impedir colisões entre as impressões anteriores e a cabeça de impressão ao imprimir \"Individualmente\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y máx" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Distância desde a parte posterior da cabeça de impressão até ao centro do nozzle. Utilizado para impedir colisões entre as impressões anteriores e a cabeça de impressão ao imprimir \"Individualmente\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Altura do pórtico" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "A diferença de altura entre a ponta do nozzle e o sistema de pórtico (eixos X e Y). Utilizado para impedir colisões entre as impressões anteriores e o pórtico ao imprimir \"Individualmente\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Número de Extrusores" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "G-code Inicial" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Comandos G-code a serem executados no início." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "G-code Final" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Comandos G-code a serem executados no final." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Definições do Nozzle" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Tamanho do nozzle" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Diâmetro do material compatível" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "O diâmetro nominal do filamento suportado pela impressora. O diâmetro exato será substituído pelo material e/ou perfil." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "Desvio X do Nozzle" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Desvio Y do Nozzle" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "Número de ventoinha de arrefecimento" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "G-code Inicial do Extrusor" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "G-code Final do Extrusor" @@ -1472,12 +1459,20 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Não foi possível aceder á base de dados de Pacotes do Cura. Por favor verifique a sua ligação." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "Plug-ins" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Materiais" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1493,8 +1488,14 @@ msgctxt "@label" msgid "Author" msgstr "Autor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "Transferências" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "Desconhecido" @@ -1527,17 +1528,57 @@ msgctxt "@action:button" msgid "Back" msgstr "Anterior" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "Confirmar desinstalação" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "Está a desinstalar materiais e/ou perfis que ainda estão a ser utilizados. Mediante confirmação, as predefinições dos seguintes materiais/perfis serão repostas." + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "Materiais" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "Perfis" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "Confirmar" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "É necessário reiniciar o Cura para que as alterações dos pacotes sejam aplicadas." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Sair do Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "Contribuições comunitárias" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "Plug-ins comunitários" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "Materiais genéricos" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "Instalado" @@ -1568,10 +1609,7 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "" -"Este plug-in contém uma licença.\n" -"É necessário aceitar esta licença para instalar o plug-in.\n" -"Concorda com os termos abaixo?" +msgstr "Este plug-in contém uma licença.\nÉ necessário aceitar esta licença para instalar o plug-in.\nConcorda com os termos abaixo?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1583,12 +1621,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Rejeitar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Em Destaque" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilidade" @@ -1598,10 +1636,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "A obter pacotes..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Contacto" +msgid "Website" +msgstr "Site" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "E-mail" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1614,48 +1657,89 @@ msgid "Changelog" msgstr "Lista das Alterações" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "Fechar" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "Atualizar firmware" + +# rever! +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "O firmware é o software que é executado diretamente na sua impressora 3D. Este firmware controla os motores de passo, regula a temperatura e basicamente assegura o funcionamento da sua impressora." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "O firmware que é expedido com as novas impressoras funciona corretamente, mas as novas versões costumam ter mais funcionalidades e melhorias." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "Atualizar firmware automaticamente" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +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 "O firmware não pode ser atualizado por não existir ligaçã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 "O firmware não pode ser atualizado porque a ligação com a impressora não suporta a atualização de firmware." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "Selecionar firmware personalizado" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "Atualização de firmware" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "A atualizar firmware." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "Atualização de firmware concluída." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "A atualização de firmware falhou devido a um erro desconhecido." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "A atualização de firmware falhou devido a um erro de comunicação." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "A atualização de firmware falhou devido a um erro de entrada/saída." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "A atualização de firmware falhou devido à ausência de firmware." @@ -1665,311 +1749,370 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Contrato de Utilizador" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "Ligação Existente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "Esta impressora/grupo já foi adicionada ao Cura. Por favor selecione outra impressora/grupo." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Ligar a uma Impressora em Rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" "\n" "Select your printer from the list below:" -msgstr "" -"Para imprimir diretamente para a sua impressora através da rede, certifique-se de que a sua impressora está ligada à rede por meio de um cabo de rede ou através de ligação à rede Wi-Fi. Se não ligar o Cura por rede à impressora, poderá ainda assim utilizar uma unidade USB para transferir ficheiros g-code para a impressora.\n" -"\n" -"Selecione a sua impressora na lista em baixo:" +msgstr "Para imprimir diretamente para a sua impressora através da rede, certifique-se de que a sua impressora está ligada à rede por meio de um cabo de rede ou através de ligação à rede Wi-Fi. Se não ligar o Cura por rede à impressora, poderá ainda assim utilizar uma unidade USB para transferir ficheiros g-code para a impressora.\n\nSelecione a sua impressora na lista em baixo:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Adicionar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "Editar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Remover" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "Atualizar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Se a sua impressora não estiver na lista, por favor, consulte o guia de resolução de problemas de impressão em rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "Tipo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "Versão de Firmware" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "Endereço" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Esta impressora não está configurada para ser Host de um grupo de impressoras Ultimaker 3." +msgid "This printer is not set up to host a group of printers." +msgstr "Esta impressora não está configurada para alojar um grupo de impressoras." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Esta impressora é o Host de um grupo de %1 impressoras Ultimaker 3." +msgid "This printer is the host for a group of %1 printers." +msgstr "Esta impressora aloja um grupo de %1 impressoras." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "A impressora neste endereço ainda não respondeu." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "Ligar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "Endereço da Impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Introduza o endereço IP ou o hostname da sua impressora na rede." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "Imprimir Através da Rede" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "Seleção de Impressora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "Imprimir" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 não está configurada para ser Host de um grupo de impressoras Ultimaker 3 ligadas em rede" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "Imprimir Através da Rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Adicionar / Remover Impressoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" +msgstr "Seleção de Impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Abre a página com a lista dos trabalhos de impressão, no seu browser predefinido." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" +msgstr "Não disponível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Ver Trabalhos em Impressão" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" +msgstr "Inacessível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "A preparar para imprimir" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "A Imprimir" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" msgstr "Disponível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Perdeu-se a ligação com a impressora" +msgid "Aborted" +msgstr "Cancelado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Indisponível" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Desconhecida" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Desativada" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Reservada" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "Impressão terminada" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "A preparar para imprimir" - -# rever! -# ver contexto! -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" -msgstr "Ação necessária" +msgid "Preparing" +msgstr "A preparar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" -msgstr "Em Pausa" +msgid "Pausing" +msgstr "A colocar em pausa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "A Recomeçar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +# rever! +# ver contexto! +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" -msgstr "Impressão cancelada" +msgid "Action required" +msgstr "Ação necessária" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Não são aceites trabalhos de impressão" +msgid "Waiting for: Unavailable printer" +msgstr "A aguardar: Impressora indisponível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "Termina às: " +msgid "Waiting for: First available" +msgstr "A aguardar: Primeira disponível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "Limpar base de construção" +msgid "Waiting for: " +msgstr "A aguardar: " -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "A aguardar pela alteração de configuração" +msgid "Configuration change" +msgstr "Configuração alterada" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Trabalhos em Impressão" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "A Imprimir" +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "A impressora atribuída %1 requer as seguintes alterações de configuração:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "A impressora %1 está atribuída, mas o trabalho tem uma 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 "Alterar o 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 "Carregar %3 como material %1 (isto não pode ser substituído)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "Substituir o 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 "Alterar placa de construção para %1 (isto não pode ser substituído)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "Ignorar" + +#: /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 "Iniciar um trabalho de impressão com uma configuração incompatível pode danificar a impressora 3D. Tem a certeza de que pretende ignorar 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 "Ignorar configuração e iniciar impressão" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "Vidro" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "Alumínio" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "Gerir fila" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "Em fila" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Impressoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "A Imprimir" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Ver Impressoras" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "Gerir impressoras" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "Mover para o topo" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "Eliminar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "Retomar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "Colocar em pausa" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "Cancelar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "Tem a certeza de que pretende mover %1 para o topo da fila?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "Mover trabalho de impressão para o topo" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "Tem a certeza de que pretende eliminar %1?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "Eliminar trabalho de impressão" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "Tem a certeza de que deseja cancelar %1?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Cancelar impressão" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Ligar a uma impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "Importar a configuração da impressora para o Cura" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Ativar Configuração" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "Importar a configuração da impressora para o Cura" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Esquema de cores" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Cor do Material" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Tipo de Linha" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Velocidade de Alimentação" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Espessura da Camada" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Modo Compatibilidade" @@ -1977,32 +2120,32 @@ msgstr "Modo Compatibilidade" # rever! # Mostrar...? # Ver...? -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Deslocações" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Auxiliares" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Invólucro" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Enchimento" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Só Camadas Superiores" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "5 Camadas Superiores Detalhadas" @@ -2010,22 +2153,22 @@ msgstr "5 Camadas Superiores Detalhadas" # rever! # todas as strings com a frase # Topo / Base ?? -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Superior / Inferior" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Parede Interior" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "mín" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "máx" @@ -2040,17 +2183,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "Scripts de pós-processamento" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "Adicionar um script" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "Definições" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "Alterar scripts de pós-processamento ativos" @@ -2146,53 +2289,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Suavização" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Tipo de Objecto" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Modelo normal" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Imprimir como suporte" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Retirar suportes na intercepção com outros modelos" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Alterar as definições dos objetos que intercepta" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Modificar definições do enchimento de outros modelos" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "Selecionar definições" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Selecionar definições a personalizar para este modelo" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtrar..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "Mostrar tudo" @@ -2214,13 +2357,13 @@ msgid "Create new" msgstr "Criar nova" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Resumo – Projeto Cura" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Definições da impressora" @@ -2237,18 +2380,19 @@ msgid "Update" msgstr "Atualizar" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Tipo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "Grupo da Impressora" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Definições do perfil" @@ -2260,13 +2404,14 @@ msgstr "Como deve ser resolvido o conflito no perfil?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Nome" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "Inexistente no perfil" @@ -2274,7 +2419,7 @@ msgstr "Inexistente no perfil" # rever! # contexto?! #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2304,7 +2449,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Como deve ser resolvido o conflito no material?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Visibilidade das definições" @@ -2315,13 +2460,13 @@ msgid "Mode" msgstr "Modo" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Definições visíveis:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 de %2" @@ -2377,37 +2522,6 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "Avançar para Posição Seguinte" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "Atualizar Firmware" - -# rever! -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "O firmware é o software que é executado diretamente na sua impressora 3D. Este firmware controla os motores de passo, regula a temperatura e basicamente assegura o funcionamento da sua impressora." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "O firmware que é expedido com as novas impressoras funciona corretamente, mas as novas versões costumam ter mais funcionalidades e melhorias." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "Atualizar firmware automaticamente" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "Carregar firmware personalizado" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "Selecionar firmware personalizado" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" @@ -2562,27 +2676,11 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Remova a impressão" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Colocar em pausa" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Retomar" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "Cancelar impressão" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Cancelar impressão" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2598,9 +2696,7 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "" -"Alterou algumas das definições do perfil.\n" -"Gostaria de manter ou descartar essas alterações?" +msgstr "Alterou algumas das definições do perfil.\nGostaria de manter ou descartar essas alterações?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2618,19 +2714,17 @@ msgid "Customized" msgstr "Personalizado" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Perguntar sempre isto" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Descartar e não perguntar novamente" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Manter e não perguntar novamente" @@ -2650,101 +2744,179 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Criar novo perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Informações" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Confirmar Alteração de Diâmetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" msgstr "O novo diâmetro do filamento está definido como %1 mm, o que não é compatível com o extrusor actual. Pretende prosseguir?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Nome" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marca" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Tipo de Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Cor" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Propriedades" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Densidade" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Diâmetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Custo do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Peso do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Comprimento do filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Custo por Metro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Este material está associado a %1 e partilha algumas das suas propriedades." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Desassociar Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Descrição" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Informações de Aderência" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "Definições de impressão" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Ativar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Criar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "Duplicar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "Importar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Exportar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "Impressora" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "Confirmar Remoção" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "Tem a certeza de que deseja remover o perfil %1? Não é possível desfazer esta ação!" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Importar material" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "Não foi possível importar o material %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "Material %1 importado com êxito" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Exportar Material" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "Falha ao exportar material para %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Material exportado com êxito para %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2781,293 +2953,291 @@ msgid "Unit" msgstr "Unidade" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "Geral" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "Interface" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "Idioma:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "Moeda:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "Tema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "É necessário reiniciar a aplicação para que estas alterações sejam aplicadas." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Seccionar automaticamente ao alterar as definições." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "Seccionar automaticamente" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "Comportamento da janela" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Realçar, a vermelho, as áreas do modelo sem apoio. Sem suporte, estas áreas podem não ser impressas correctamente." # rever! # consolas? -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "Mostrar Saliências (Overhangs)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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âmara de forma que o modelo fique no centro da visualização quando é selecionado um modelo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Centrar câmara ao selecionar item" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "O comportamento de zoom predefinido do Cura deve ser invertido?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Inverta a direção do zoom da câmera." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "O zoom deve deslocar-se na direção do rato?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Fazer Zoom na direção do rato" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "Os modelos, na plataforma, devem ser movidos para que não se intersectem?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Garantir que os modelos não se interceptam" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "Pousar os modelos na base de construção?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Pousar automaticamente os modelos na base de construção" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "Mostrar mensagem de aviso no leitor de g-code." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "Mensagem de aviso no leitor de g-code" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "A vista por camada deve ser forçada a utilizar o modo de compatibilidade?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Forçar o modo de compatibilidade na visualização por camada (é necessário reiniciar)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "Abrir e guardar ficheiros" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "Os modelos devem ser redimensionados até ao volume de construção se forem demasiado grandes?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "Redimensionar modelos demasiado grandes" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "Um modelo pode parecer extremamente pequeno se, por exemplo, este tiver sido criado em metros e não em milímetros. Estes modelos devem ser redimensionados?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Redimensionar modelos extremamente pequenos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "Selecionar os modelos depois de abertos?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Selecionar os modelos depois de abertos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "Deve um prefixo com base no nome da impressora ser adicionado ao nome do trabalho de impressão automaticamente?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Adicionar prefixo da máquina ao nome do trabalho" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Deve ser apresentado um resumo ao guardar um ficheiro de projeto?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Mostrar caixa de diálogo de resumo ao guardar projeto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Comportamento predefinido ao abrir um ficheiro de projeto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Comportamento predefinido ao abrir um ficheiro de projeto: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Perguntar sempre" +msgid "Always ask me this" +msgstr "Perguntar sempre isto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Abrir sempre como projeto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "Importar sempre modelos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "Quando tiver realizado alterações a um perfil e mudado para outro, será apresentada uma caixa de diálogo a perguntar se pretende manter as alterações. Caso contrário, pode escolher um comportamento predefinido, sendo que a caixa de diálogo nunca mais é apresentada." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "Substituir perfil" +msgid "Profiles" +msgstr "Perfis" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "Comportamento predefinido para valores de definição alterados ao mudar para um perfil diferente: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "Descartar sempre definições alteradas" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "Transferir sempre definições alteradas para o novo perfil" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "Privacidade" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "O Cura deve procurar atualizações quando o programa é iniciado?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Procurar atualizações ao iniciar" # rever! # legal wording -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "Podem alguns dados anónimos sobre a impressão ser enviados para a Ultimaker? Não são enviadas, nem armazenadas, quaisquer informações pessoais, incluindo modelos, endereços IP ou outro tipo de identificação pessoal." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Enviar dados (anónimos) sobre a impressão" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "Mais informação" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "Experimental" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Usar a funcionalidade de múltiplas bases de construção" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Usar a funcionalidade de múltiplas bases de construção (é necessário reiniciar)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Devem os novos modelos abertos ser dispostos na base de construção? Utilizado em conjunto com múltiplas bases de construção (EXPERIMENTAL)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Não dispor os objectos ao abrir" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "Impressoras" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Ativar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3085,7 +3255,7 @@ msgid "Connection:" msgstr "Ligação:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "A impressora não está ligada." @@ -3111,7 +3281,7 @@ msgid "Aborting print..." msgstr "A cancelar impressão..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "Perfis" @@ -3126,18 +3296,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Duplicar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Importar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Exportar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3148,18 +3306,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplicar Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Confirmar Remoção" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "Tem a certeza de que deseja remover o perfil %1? Não é possível desfazer esta ação!" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3180,233 +3326,203 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Impressora: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Perfis protegidos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Perfis personalizados" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Atualizar perfil com as definições/substituições atuais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Descartar alterações atuais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "Este perfil utiliza as predefinições especificadas pela impressora, pelo que não tem quaisquer definições/substituições na lista seguinte." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "As suas definições atuais correspondem ao perfil selecionado." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Definições Globais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Materiais" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Criar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Duplicar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Importar material" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr "Não foi possível importar o material %1: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "Material %1 importado com êxito" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Exportar Material" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "Falha ao exportar material para %1: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Material exportado com êxito para %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Impressora" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "Adicionar Impressora" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "Nome da Impressora:" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "Adicionar Impressora" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "Sem título" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "Sobre o Cura" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "versão: %1" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "A Solução completa para a impressão 3D por filamento fundido." -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "" -"O Cura foi desenvolvido pela Ultimaker B.V. em colaboração com a comunidade.\n" -"O Cura tem o prazer de utilizar os seguintes projetos open source:" +msgstr "O Cura foi desenvolvido pela Ultimaker B.V. em colaboração com a comunidade.\nO Cura tem o prazer de utilizar os seguintes projetos open source:" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "Interface gráfica do utilizador" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "Framework da aplicação" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "Gerador de G-code" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "Biblioteca de comunicação interprocessual" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "Linguagem de programação" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "GUI framework" # rever! # use eng programing terms? -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "Ligações de estrutura da GUI" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "Biblioteca de ligações C/C++" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "Formato de intercâmbio de dados" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "Biblioteca de apoio para computação científica" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "Biblioteca de apoio para cálculos mais rápidos" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "Biblioteca de apoio para processamento de ficheiros STL" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "Biblioteca de apoio para processamento de objetos planos" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "Biblioteca de apoio para processamento de malhas triangulares" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "Biblioteca de apoio para análise de redes complexas" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "Biblioteca de apoio para processamento de ficheiros 3MF" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "Biblioteca de apoio para transmissões de fluxo e metadados de ficheiros" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "Biblioteca de comunicação em série" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "Biblioteca de deteção ZeroConf" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "Biblioteca de recortes de polígonos" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "Biblioteca de HTTP Python" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "Tipo de letra" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "Ícones SVG" # rever! -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "Implementação da aplicação de distribuição cruzada Linux" @@ -3416,59 +3532,56 @@ msgctxt "@label" msgid "Profile:" msgstr "Perfil:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "" -"Alguns valores de definição/substituição são diferentes dos valores armazenados no perfil.\n" -"\n" -"Clique para abrir o gestor de perfis." +msgstr "Alguns valores de definição/substituição são diferentes dos valores armazenados no perfil.\n\nClique para abrir o gestor de perfis." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "Procurar..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Copiar valor para todos os extrusores" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Copiar todos os valores alterados para todos os extrusores" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Esconder esta definição" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Não mostrar esta definição" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Manter esta definição visível" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configurar visibilidade das definições..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Esconder Tudo" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Mostrar Tudo" @@ -3477,16 +3590,13 @@ msgstr "Mostrar Tudo" # ocultas? # escondidas? # valor normal? automatico? -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "" -"Algumas das definições invisíveis têm valores diferentes dos valores normais calculados automaticamente.\n" -"\n" -"Clique para tornar estas definições visíveis." +msgstr "Algumas das definições invisíveis têm valores diferentes dos valores normais calculados automaticamente.\n\nClique para tornar estas definições visíveis." # rever! # Afeta? @@ -3503,7 +3613,7 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Modificado Por" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "Esta definição é sempre partilhada entre todos os extrusores. Ao alterá-la aqui, o valor será alterado em todos os extrusores." @@ -3512,32 +3622,26 @@ msgstr "Esta definição é sempre partilhada entre todos os extrusores. Ao alte # contexto?! # resolvido? # por-extrusor -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "O valor é calculado com base nos valores por-extrusor " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "" -"Esta definição tem um valor que é diferente do perfil.\n" -"\n" -"Clique para restaurar o valor do perfil." +msgstr "Esta definição tem um valor que é diferente do perfil.\n\nClique para restaurar o valor do perfil." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "" -"Normalmente, o valor desta definição é calculado, mas atualmente tem definido um valor diferente.\n" -"\n" -"Clique para restaurar o valor calculado." +msgstr "Normalmente, o valor desta definição é calculado, mas atualmente tem definido um valor diferente.\n\nClique para restaurar o valor calculado." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3581,7 +3685,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "Enviar um comando G-code personalizado para a impressora ligada. Prima \"Enter\" para enviar o comando." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Extrusor" @@ -3634,7 +3738,7 @@ msgid "The nozzle inserted in this extruder." msgstr "O nozzle inserido neste extrusor." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Base de construção" @@ -3659,6 +3763,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Aqueçer a base com antecedência antes de imprimir. Pode continuar a ajustar as definições de impressão durante o aquecimento e não precisará de esperar que a base aqueça quando começar a impressão." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "Material" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "Favoritos" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "Genérico" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3674,12 +3793,12 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "&Visualizar" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "&Posição da câmara" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "&Base de impressão" @@ -3689,12 +3808,12 @@ msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "Definições Visíveis" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "Mostrar Todas as Definições" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Gerir Visibilidade das Definições..." @@ -3755,297 +3874,294 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "" -"Configuração da Impressão desativada\n" -"Os ficheiros G-code não podem ser modificados" +msgstr "Configuração da Impressão desativada\nOs ficheiros G-code não podem ser modificados" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "00h00min" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "Especificação de tempo" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "Especificação de custos" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "%1 m" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "%1 g" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "Total:" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." msgstr "Configuração de Impressão Recomendada

Imprimir com as definições recomendadas para a Impressora, Material e Qualidade selecionadas." -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Configuração de Impressão Personalizada

Imprimir com um controlo detalhado de todas as definições específicas de cada uma das etapas do processo de seccionamento." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Impressão ativa" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Nome do trabalho" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Tempo de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Tempo restante estimado" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "Alternar para e&crã inteiro" +msgid "Toggle Full Screen" +msgstr "Alternar para ecrã inteiro" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&Desfazer" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Refazer" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Sair" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "Vista &3D" +msgid "3D View" +msgstr "Vista 3D" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "Vista &Frente" +msgid "Front View" +msgstr "Vista Frente" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "Vista &Cima" +msgid "Top View" +msgstr "Vista Cima" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "Vista Lado &Esquerdo" +msgid "Left Side View" +msgstr "Vista Lado Esquerdo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "Vista Lado &Direito" +msgid "Right Side View" +msgstr "Vista Lado Direito" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Configurar Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Adicionar Impressora..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Gerir Im&pressoras..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Gerir Materiais..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Atualizar perfil com as definições/substituições atuais" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Descartar alterações atuais" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&Criar perfil a partir das definições/substituições atuais..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Gerir Perfis..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Mostrar &documentação online" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Reportar um &erro" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "&Sobre..." +msgid "About..." +msgstr "Sobre..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "Apagar Modelo &Selecionado" -msgstr[1] "Apagar Modelos &Selecionados" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" +msgstr[0] "Apagar Modelo Selecionado" +msgstr[1] "Apagar Modelos Selecionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Centrar modelo selecionado" msgstr[1] "Centrar modelos selecionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Multiplicar modelo selecionado" msgstr[1] "Multiplicar modelos selecionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Apagar Modelo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Ce&ntrar Modelo na Base" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Agrupar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Desagrupar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Combinar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Multiplicar Modelo..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&Selecionar todos os modelos" +msgid "Select All Models" +msgstr "Selecionar todos os modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Limpar base de construção" +msgid "Clear Build Plate" +msgstr "Limpar base de construção" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 +msgctxt "@action:inmenu menubar:file" +msgid "Reload All Models" +msgstr "Recarregar todos os modelos" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 -msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "Re&carregar todos os modelos" - -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Dispor todos os modelos em todas as bases de construção" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Dispor todos os modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Dispor seleção" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Repor todas as posições de modelos" # rever! # Cancelar todas? -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "Repor Todas as &Transformações do Modelo" +msgid "Reset All Model Transformations" +msgstr "Repor Todas as Transformações do Modelo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Abrir Ficheiro(s)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Novo Projeto..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Mostrar ®isto de motor..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Mostrar pasta de configuração" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Procurar pacotes..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Mostrar/Esconder Barra Lateral" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Por favor abra um Modelo 3D ou Projeto" @@ -4053,12 +4169,12 @@ msgstr "Por favor abra um Modelo 3D ou Projeto" # rever! # Pronto para? # Preparado para? -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Disponível para seccionar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "A Seccionar..." @@ -4067,48 +4183,48 @@ msgstr "A Seccionar..." # Pronto para? # Preparado para? # Disponível para? -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Pronto para %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Não é possível Seccionar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Seccionamento indisponível" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Seccionar o trabalho de impressão atual" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Cancelar o processo de seccionamento" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Preparar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Cancelar" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Selecione o dispositivo de saída" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "Abrir ficheiro(s)" @@ -4128,129 +4244,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&Ficheiro" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "&Guardar..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "&Exportar..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "&Guardar seleção para ficheiro" +msgid "Export Selection..." +msgstr "Exportar seleção..." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Guardar &como..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Guardar &Projeto..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "&Editar" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "&Visualizar" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "&Definições" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Impressora" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "&Material" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Definir como Extrusor Ativo" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Ativar Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Desativar Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Base de construção" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "&Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "E&xtensões" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&Toolbox" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "P&referências" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "&Ajuda" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Este pacote será instalado após reiniciar." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "Abrir ficheiro" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "Definições" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "Novo projeto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Tem a certeza de que deseja iniciar um novo projeto? Isto irá apagar tudo na base de construção assim como quaisquer definições que não tenham sido guardadas." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "Fechar Cura" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "Tem a certeza de que deseja sair do Cura?" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "Instalar Pacote" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "Abrir ficheiro(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." msgstr "Encontrámos um ou mais ficheiros G-code nos ficheiros selecionados. Só é possível abrir um ficheiro G-code de cada vez. Se pretender abrir um ficheiro G-code, selecione apenas um." @@ -4260,87 +4392,82 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Guardar projeto" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Base de construção" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extrusor %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & material" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Não mostrar novamente o resumo do projeto ao guardar" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Guardar" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Espessura da Camada" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Este perfil de qualidade não está disponível para a sua atual configuração de nozzle e material. Por favor altere-a para poder ativar este perfil de qualidade" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "De momento está ativo um perfil personalizado. Para poder ativar o controlo de qualidade, por favor selecione um dos perfis de qualidade predefinidos no modo Personalizado" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Velocidade Impressão" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Mais Lenta" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Mais Rápida" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Algumas definições do perfil foram modificadas. Se pretender alterá-las, aceda ao modo Personalizado." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Enchimento" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "O enchimento gradual irá aumentar progressivamente a densidade do enchimento em direção ao topo." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "Enchimento Gradual" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "Criar Suportes" @@ -4348,7 +4475,7 @@ msgstr "Criar Suportes" # rever! # collapse ? # desmoronar? desabar? -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Criar estruturas para suportar partes do modelo, suspensas ou com saliências. Sem estas estruturas, essas partes do modelo podem desmoronar durante a impressão." @@ -4358,22 +4485,22 @@ msgstr "Criar estruturas para suportar partes do modelo, suspensas ou com saliê # sagging? deformar? # Isto irá construir estruturas de suporte debaixo do modelo para impedir a deformação de partes suspensas do modelo ou que a impressão seja feita no ar. # a utilizar? usado? -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Selecionar qual o extrusor usado para imprimir os suportes. Isto irá construir estruturas de suporte por debaixo do modelo para impedir que as partes suspensas do modelo se deformem ou que sejam impressas no ar." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Aderência à Base" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Permite a impressão de uma Aba (Brim) ou Raft. Isto irá adicionar, respectivamente, uma área plana em torno ou sob a base do seu objeto, que são fáceis de retirar posteriormente." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Precisa de ajuda para melhorar as suas impressões?
Por favor leia os Guias Ultimaker de Resolução de Problemas" @@ -4425,22 +4552,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Tipo de impressora" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Material" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Use folhas de adesão ou cola, com estes materiais" +msgid "Use glue with this material combination" +msgstr "Utilizar cola com esta combinação de materiais" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Compatibilidade entre Materiais" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Clique para verificar a compatibilidade entre os materiais em Ultimaker.com." @@ -4530,16 +4657,6 @@ msgctxt "name" msgid "God Mode" msgstr "Modo God" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Recebe ficheiros G-code e envia-os por Wi-Fi para uma Doodle3D Wi-Fi Box." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D Wi-Fi Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4550,6 +4667,16 @@ msgctxt "name" msgid "Changelog" msgstr "Lista das Alterações" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "Disponibiliza as ações da máquina para atualizar o firmware." + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "Atualizador de firmware" + # rever! # contexto! # flattend - aplanado? nivelado? limpo? basico? @@ -4628,16 +4755,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Fase de preparação" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Fornece uma janela de edição para a edição direta de scripts." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Ferramenta de scripting em direto" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4749,16 +4866,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Leitor de perfis antigos do Cura" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Ajuda a abrir ficheiros do Blender diretamente no Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Integração com o Blender (experimental)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4809,6 +4916,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "Atualização da versão 2.7 para 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "Atualiza as configurações do Cura 3.4 para o Cura 3.5." + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "Atualização da versão 3.4 para 3.5" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4951,6 +5068,298 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Leitor de Perfis Cura" +#~ msgctxt "@warning:status" +#~ msgid "Please generate G-code before saving." +#~ msgstr "Crie um G-code antes de guardar." + +#~ msgctxt "@item:inmenu" +#~ msgid "Profile Assistant" +#~ msgstr "Assistente de perfis" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Profile Assistant" +#~ msgstr "Assistente de perfis" + +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "Atualizar firmware" + +#~ msgctxt "@label unknown material" +#~ msgid "Unknown" +#~ msgstr "Desconhecido" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "No custom profile to import in file {0}" +#~ msgstr "O ficheiro {0} não contém qualquer perfil personalizado para importar" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "This profile {0} contains incorrect data, could not import it." +#~ msgstr "O perfil {0} contém dados incorretos, não foi possível importá-lo." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "A máquina definida no perfil {0} ({1}) não corresponde à sua máquina atual ({2}), e não foi possível importá-la." + +#~ msgctxt "@title:window" +#~ msgid "Confirm uninstall " +#~ msgstr "Confirmar desinstalação " + +#~ msgctxt "@label:status" +#~ msgid "Paused" +#~ msgstr "Em Pausa" + +#~ msgctxt "@action:button" +#~ msgid "Previous" +#~ msgstr "Anterior" + +#~ msgctxt "@action:button" +#~ msgid "Next" +#~ msgstr "Seguinte" + +#~ msgctxt "@label" +#~ msgid "Tip" +#~ msgstr "Sugestão" + +#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +#~ msgid "%1m / ~ %2g / ~ %4 %3" +#~ msgstr "%1 m / ~ %2 g / ~ %4 %3" + +#~ msgctxt "@label Print estimates: m for meters, g for grams" +#~ msgid "%1m / ~ %2g" +#~ msgstr "%1 m / ~ %2 g" + +#~ msgctxt "@label" +#~ msgid "Print experiment" +#~ msgstr "Experimento de impressão" + +#~ msgctxt "@label" +#~ msgid "Checklist" +#~ msgstr "Lista de verificação" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "Atualizar Firmware" + +#~ msgctxt "description" +#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +#~ msgstr "Permite aos fabricantes de materiais criar novos materiais e perfis de qualidade utilizando uma IU de fácil acesso." + +#~ msgctxt "name" +#~ msgid "Print Profile Assistant" +#~ msgstr "Assistente de perfis de impressão" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimir com a Doodle3D WiFi-Box" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Imprimir com a Doodle3D WiFi-Box" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "A ligar ao Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "A enviar dados para o Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Não é possível enviar dados para o Doodle3D Connect. Será que há outro trabalho ainda ativo?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "A guardar dados no Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Ficheiro enviado para o Doodle3D Connect" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Abrir Connect..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Abrir a interface web do Doodle3D Connect" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Ficheiro Blender" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Não foi possível exportar utilizando a qualidade \"{}\"!\n" +#~ "Foi revertido para \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Contacto" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Esta impressora não está configurada para ser Host de um grupo de impressoras Ultimaker 3." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Esta impressora é o Host de um grupo de %1 impressoras Ultimaker 3." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 não está configurada para ser Host de um grupo de impressoras Ultimaker 3 ligadas em rede" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Adicionar / Remover Impressoras" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Abre a página com a lista dos trabalhos de impressão, no seu browser predefinido." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Ver Trabalhos em Impressão" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "A preparar para imprimir" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "A Imprimir" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Disponível" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Perdeu-se a ligação com a impressora" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Indisponível" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Desconhecida" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Desativada" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Reservada" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "A preparar para imprimir" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Impressão cancelada" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Não são aceites trabalhos de impressão" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Termina às: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Limpar base de construção" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "A aguardar pela alteração de configuração" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Trabalhos em Impressão" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Impressoras" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Ver Impressoras" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Colocar em pausa" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Retomar" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Cancelar impressão" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Perguntar sempre" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Substituir perfil" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Devem os novos modelos abertos ser dispostos na base de construção? Utilizado em conjunto com múltiplas bases de construção (EXPERIMENTAL)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Não dispor os objectos ao abrir" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "&Guardar seleção para ficheiro" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Guardar &como..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Guardar &Projeto..." + +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Use folhas de adesão ou cola, com estes materiais" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Recebe ficheiros G-code e envia-os por Wi-Fi para uma Doodle3D Wi-Fi Box." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D Wi-Fi Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Fornece uma janela de edição para a edição direta de scripts." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Ferramenta de scripting em direto" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Ajuda a abrir ficheiros do Blender diretamente no Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Integração com o Blender (experimental)" + # rever! #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" @@ -5223,10 +5632,6 @@ msgstr "Leitor de Perfis Cura" #~ msgid "Browse plugins..." #~ msgstr "Procurar plug-ins..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Base de construção" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "P&lug-ins" diff --git a/resources/i18n/pt_PT/fdmextruder.def.json.po b/resources/i18n/pt_PT/fdmextruder.def.json.po index db86214140..6d0d26b34c 100644 --- a/resources/i18n/pt_PT/fdmextruder.def.json.po +++ b/resources/i18n/pt_PT/fdmextruder.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" -"PO-Revision-Date: 2018-06-21 14:30+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 14:25+0100\n" "Last-Translator: Paulo Miranda \n" "Language-Team: Paulo Miranda , Portuguese \n" "Language: pt_PT\n" @@ -168,6 +168,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "A coordenada Z da posição onde o nozzle é preparado ao iniciar a impressão." +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "Ventoinha de arrefecimento de impressão do Extrusor" + +#: 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 "O número de ventoinhas de arrefecimento de impressão associadas a este extrusor. Apenas alterar o valor predefinido de 0 quando tiver uma ventoinha de arrefecimento de impressão diferente para cada extrusor." + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/pt_PT/fdmprinter.def.json.po b/resources/i18n/pt_PT/fdmprinter.def.json.po index 6b573364cb..4e33fedb36 100644 --- a/resources/i18n/pt_PT/fdmprinter.def.json.po +++ b/resources/i18n/pt_PT/fdmprinter.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" -"PO-Revision-Date: 2018-06-21 14:30+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-10-01 14:15+0100\n" "Last-Translator: Paulo Miranda \n" "Language-Team: Paulo Miranda , Portuguese \n" "Language: pt_PT\n" @@ -58,9 +58,7 @@ msgctxt "machine_start_gcode description" msgid "" "G-code commands to be executed at the very start - separated by \n" "." -msgstr "" -"Comandos G-code a serem executados no início – separados por \n" -"." +msgstr "Comandos G-code a serem executados no início – separados por \n." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -72,9 +70,7 @@ msgctxt "machine_end_gcode description" msgid "" "G-code commands to be executed at the very end - separated by \n" "." -msgstr "" -"Comandos G-code a serem executados no fim – separados por \n" -"." +msgstr "Comandos G-code a serem executados no fim – separados por \n." #: fdmprinter.def.json msgctxt "material_guid label" @@ -86,6 +82,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "GUID do material. Este é definido automaticamente. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Diâmetro" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Ajusta o diâmetro do filamento utilizado. Faça corresponder este valor com o diâmetro do filamento utilizado." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1081,6 +1087,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Ziguezague" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "Ligar polígonos superiores/inferiores" + +#: 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 "Ligar caminhos de revestimento superiores/inferiores quando as trajetórias são paralelas. Para o padrão concêntrico, ativar esta definição reduz consideravelmente o tempo de deslocação mas, uma vez que as ligações podem suceder num ponto intermediário sobre o enchimento, esta funcionalidade pode reduzir a qualidade da superfície superior." + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1170,6 +1186,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Compensar o fluxo em partes de uma parede interior a ser impressa, onde já exista uma parede." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "Fluxo de parede mínimo" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "Fluxo percentual mínimo permitido para uma linha de parede. A compensação de substituição de paredes reduz o fluxo de uma parede quando se situa junto a uma parede existente. As paredes cujo fluxo é inferior a este valor serão substituídas com um movimento de deslocação. Ao utilizar esta definição, deve ativar a compensação de sobreposição de paredes e imprimir a parede exterior antes das paredes interiores." + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "Preferir retração" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "Se ativada, é utilizada retração em vez de combing para movimentos de deslocação que substituem paredes cujo fluxo está abaixo do limiar mínimo de fluxo." + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1516,18 +1552,10 @@ msgctxt "infill_pattern label" msgid "Infill Pattern" msgstr "Padrão de Enchimento" -# of the print -# da impressão? da peça? -# A direção do -# No enchimento com Linha e Ziguezague a direção é invertida em camadas alternadas -# invertido? rodado? -# padrões - ?geometricos?? -# alterados? mudam? movidos? delocados? -# fornecer uma? permitir uma? #: 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "O padrão geométrico do enchimento da impressão. A direção do enchimento com Linhas e Ziguezague é invertida em camadas alternadas, reduzindo os custos em material. Os padrões em Grelha, Triângulo, Tri-Hexágono, Cúbico, Octeto, Quarto Cúbico, Cruz e Concêntrico são totalmente impressos em cada camada. Os enchimentos Cúbico, Quarto Cúbico e Octeto são deslocados em cada camada para permitir uma distribuição mais uniforme da resistência em cada direção." +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 "O padrão do material de enchimento da impressão. A direção de troca de enchimento de linha e ziguezague em camadas alternadas, reduzindo os custos de material. Os padrões de grelha, triângulo, tri-hexágono, cubo, octeto, quarto cúbico, cruz e concêntrico são totalmente impressos em cada camada. Os enchimentos Gyroid, cúbico, quarto cúbico e octeto são alterados a cada camada para fornecer uma distribuição mais uniforme da resistência em cada direção." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1574,11 +1602,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1594,6 +1617,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "Cruz 3D" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "Gyroid" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1604,6 +1632,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Ligar as extremidades onde o padrão de enchimento entra em contacto com a parede interior utilizando uma linha que acompanha a forma da parede interior. Ativar esta definição pode melhorar a adesão do enchimento às paredes e reduzir os efeitos do enchimento na qualidade das superfícies verticais. Desativar esta definição reduz a quantidade de material utilizado." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "Ligar polígonos de enchimento" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "Ligar caminhos de enchimento quando as trajetórias são paralelas. Para padrões de enchimento que consistem em vários polígonos fechados, ativar esta definição reduz consideravelmente o tempo de deslocação." + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1637,6 +1675,28 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "O padrão geométrico de enchimento é deslocado por esta distância ao longo do eixo Y." +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "Multiplicador de linhas de enchimento" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "Converter cada linha de enchimento em determinado número de linhas. As linhas adicionais não se cruzam, mas sim evitam-se. Isto torna o enchimento mais duro, mas também aumenta o tempo de impressão e o gasto de material." + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "Contagem de paredes de enchimento adicionais" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "Adicionar paredes adicionais em torno da área de enchimento. Essas paredes podem fazer com que as linhas de revestimento superiores/inferiores desçam menos, o que significa que são necessárias menos camadas de revestimento superior/inferior para a mesma qualidade à custa de algum material adicional.\nEsta funcionalidade pode ser combinada com a opção Ligar polígonos de enchimento para unir todo o enchimento num único caminho de extrusão sem necessidade de deslocações ou retrações, se configurado corretamente." + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1952,16 +2012,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "A temperatura utilizada para a base de construção aquecida na primeira camada." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Diâmetro" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Ajusta o diâmetro do filamento utilizado. Faça corresponder este valor com o diâmetro do filamento utilizado." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2843,8 +2893,8 @@ msgstr "Modo de Combing" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "\"Combing\" mantém o nozzle dentro das áreas já impressas durante o movimento. Isto resulta em movimentos ligeiramente mais longos, mas reduz a necessidade de retrações. Se o \"Combing\" estiver desativado, o material será retraído e o nozzle irá deslocar-se em linha recta para o próximo ponto. Também é possível evitar o \"Combing\" em áreas de revestimento superiores/inferiores efetuando o \"Combing\" apenas dentro do enchimento." +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "Combing mantém o bocal em áreas já impressas durante a deslocação. Isto resulta em movimentos de deslocação ligeiramente mais longos, mas reduz a necessidade de retrações. Se o combing estiver desativado, o material será retraído e o bocal irá deslocar-se em linha reta para o próximo ponto. Também é possível evitar o combing em áreas de revestimento superiores/inferiores e também apenas efetuar o combing no enchimento. Observe que a opção \"No enchimento\" tem o mesmo comportamento que a opção \"Não no Revestimento\" em versões anteriores do Cura." #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2861,6 +2911,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Não no Revestimento" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "No Enchimento" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3256,11 +3311,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3324,6 +3374,56 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "A distância entre as linhas da estrutura de suporte impressas. Esta definição é calculada através da densidade do suporte." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "Distância da linha de suporte da camada inicial" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "Distância entre as linhas da estrutura de suporte da camada inicial impressas. Esta definição é calculada pela densidade do suporte." + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "Direção da linha de enchimento do suporte" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "Orientação do padrão de enchimento para suportes. O padrão de enchimento do suporte gira no plano horizontal." + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "Ativar borda 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 "Gera uma borda dentro das regiões de enchimento do suporte da primeira camada. Esta borda é impressa na parte por baixo do suporte e não em torno do mesmo. Ativar esta definição aumenta a aderência do suporte à placa de construção." + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "Largura da borda do 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 "A largura da borda para imprimir na parte por baixo do suporte. Uma borda mais larga melhora a aderência à placa de construção à custa de algum material adicional." + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "Contagem de linhas da borda do 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 "O número de linhas utilizado para a borda do suporte. Uma borda com mais linhas melhora a aderência à placa de construção à custa de algum material adicional." + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3614,11 +3714,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3654,11 +3749,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3697,16 +3787,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Concêntrico" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Concêntrico 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Ziguezague" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "Substituir velocidade da 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 ativada, a velocidade da ventoinha de arrefecimento de impressão é alterada para as regiões de revestimento imediatamente acima do suporte." + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "Velocidade da ventoinha de revestimento suportada" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "Velocidade percentual da ventoinha a utilizar ao imprimir as regiões de revestimento imediatamente acima do suporte. A utilização de uma velocidade de ventoinha elevada facilita a remoção do suporte." + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3860,9 +3965,7 @@ msgctxt "skirt_gap description" msgid "" "The horizontal distance between the skirt and the first layer of the print.\n" "This is the minimum distance. Multiple skirt lines will extend outwards from this distance." -msgstr "" -"A distância horizontal entre o contorno e o perímetro exterior da primeira camada da impressão.\n" -"Esta é a distância mínima. Linhas múltiplas de contorno serão impressas para o exterior." +msgstr "A distância horizontal entre o contorno e o perímetro exterior da primeira camada da impressão.\nEsta é a distância mínima. Linhas múltiplas de contorno serão impressas para o exterior." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3894,6 +3997,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "O número de linhas utilizado para uma aba. Um maior número de linhas da aba melhora a aderência à base de construção, mas também reduz a área de impressão efetiva." +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "A borda substitui o 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 "Aplicar a borda para ser impressa em torno do modelo, mesmo se esse espaço fosse ocupado de outra forma pelo suporte. Isto substitui algumas regiões da primeira camada do suporte por regiões de borda." + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -4037,8 +4150,8 @@ msgstr "O diâmetro das linhas na camada inferior (base) do raft. Devem ser linh #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Espaçamento Linhas Base Raft" +msgid "Raft Base Line Spacing" +msgstr "Espaçamento da Linha Base do Raft" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4255,16 +4368,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "O volume mínimo para cada camada da torre de preparação para preparar material suficiente." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Espessura da torre de preparação" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "A espessura da torre de preparação oca. Uma espessura superior a metade do Volume mínimo da torre de preparação irá resultar numa torre de preparação densa." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4305,33 +4408,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Após a impressão da torre de preparação com um nozzle, limpe o material que vazou do nozzle para a torre de preparação." -# rever! -# mudança? -# troca? -# substituição? -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Limpar nozzle após mudança" - -# rever! -# vazou? vazado? -# escorreu? escorrido? -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Após a mudança de extrusor, limpar o material que escorreu do nozzle na primeira \"coisa\" impressa. Isto executa um movimento lento de limpeza num local onde o material que tenha escorrido seja menos prejudicial para a qualidade da superfície da sua impressão." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Volume Purga Torre Preparação" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Quantidade de filamento a ser purgado ao limpar na torre de preparação. A purga é útil para compensar o filamento perdido por escorrimento durante a inatividade do nozzle." - # rever! #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4844,6 +4920,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Os dados que ligam o fluxo de material (em mm3 por segundo) à temperatura (graus Celsius)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "Circunferência Mínima do Polígono" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "Os polígonos em camadas seccionadas que apresentem uma circunferência mais pequena do que este valor serão filtrados. Valores mais reduzidos originam malhas de resolução superior à custa do tempo de seccionamento. Destina-se principalmente a impressoras SLA de alta resolução e a modelos 3D muito pequenos com muitos detalhes." + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5515,6 +5601,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "O limiar em que se deve usar, ou não, uma menor espessura de camada. Este número é comparado com a tangente da inclinação mais acentuada numa camada." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "Ângulo da parede de saliências" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "As paredes que se salientam mais do que este ângulo serão impressas utilizando definições de parede de saliências. Quando o valor é 90, nenhuma parede será tratada como saliente." + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "Velocidade da parede de saliências" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "As paredes de saliências serão impressas a esta percentagem da sua velocidade de impressão normal." + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5545,16 +5651,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Se uma região de revestimento for suportada por menos do que esta percentagem da sua área, imprima-a utilizando as definições de Bridge. Caso contrário, será impressa utilizando as definições de revestimento normais." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Saliências máx. da parede de Bridge" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "A largura máxima permitida para a região de ar sob uma linha de parede, antes de a parede ser impressa utilizando as definições de Bridge. Expressa como uma percentagem da largura da linha de parede. Quando a folga de ar é mais larga do que este valor, a linha de parede é impressa utilizando as definições de Bridge. Caso contrário, a linha de parede é impressa utilizando as definições normais. Quanto mais baixo for o valor, mais provável é que as linhas de parede das saliências sejam impressas utilizando definições de Bridge." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5775,6 +5871,89 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Matriz de transformação a ser aplicada ao modelo quando abrir o ficheiro." +#~ 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 happend midway over infill this feature can reduce the top surface quality." +#~ msgstr "Ligar caminhos de revestimento superiores/inferiores quando as trajetórias são paralelas. Para o padrão concêntrico, ativar esta definição reduz consideravelmente o tempo de deslocação mas, uma vez que as ligações podem suceder num ponto intermediário sobre o enchimento, esta funcionalidade pode reduzir a qualidade da superfície superior." + +# of the print +# da impressão? da peça? +# A direção do +# No enchimento com Linha e Ziguezague a direção é invertida em camadas alternadas +# invertido? rodado? +# padrões - ?geometricos?? +# alterados? mudam? movidos? delocados? +# fornecer uma? permitir uma? +#~ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +#~ msgstr "O padrão geométrico do enchimento da impressão. A direção do enchimento com Linhas e Ziguezague é invertida em camadas alternadas, reduzindo os custos em material. Os padrões em Grelha, Triângulo, Tri-Hexágono, Cúbico, Octeto, Quarto Cúbico, Cruz e Concêntrico são totalmente impressos em cada camada. Os enchimentos Cúbico, Quarto Cúbico e Octeto são deslocados em cada camada para permitir uma distribuição mais uniforme da resistência em cada direção." + +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "\"Combing\" mantém o nozzle dentro das áreas já impressas durante o movimento. Isto resulta em movimentos ligeiramente mais longos, mas reduz a necessidade de retrações. Se o \"Combing\" estiver desativado, o material será retraído e o nozzle irá deslocar-se em linha recta para o próximo ponto. Também é possível evitar o \"Combing\" em áreas de revestimento superiores/inferiores efetuando o \"Combing\" apenas dentro do enchimento." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Concêntrico 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Espaçamento Linhas Base Raft" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Espessura da torre de preparação" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "A espessura da torre de preparação oca. Uma espessura superior a metade do Volume mínimo da torre de preparação irá resultar numa torre de preparação densa." + +# rever! +# mudança? +# troca? +# substituição? +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Limpar nozzle após mudança" + +# rever! +# vazou? vazado? +# escorreu? escorrido? +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Após a mudança de extrusor, limpar o material que escorreu do nozzle na primeira \"coisa\" impressa. Isto executa um movimento lento de limpeza num local onde o material que tenha escorrido seja menos prejudicial para a qualidade da superfície da sua impressão." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Volume Purga Torre Preparação" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Quantidade de filamento a ser purgado ao limpar na torre de preparação. A purga é útil para compensar o filamento perdido por escorrimento durante a inatividade do nozzle." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Saliências máx. da parede de Bridge" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "A largura máxima permitida para a região de ar sob uma linha de parede, antes de a parede ser impressa utilizando as definições de Bridge. Expressa como uma percentagem da largura da linha de parede. Quando a folga de ar é mais larga do que este valor, a linha de parede é impressa utilizando as definições de Bridge. Caso contrário, a linha de parede é impressa utilizando as definições normais. Quanto mais baixo for o valor, mais provável é que as linhas de parede das saliências sejam impressas utilizando definições de Bridge." + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "Otimizar a ordem pela qual as paredes são impressas de forma a reduzir o número de retrações e a distância percorrida. A maioria das peças irá beneficiar com a ativação desta opção, mas algumas podem na realidade demorar mais tempo, portanto, por favor compare as estimativas do tempo de impressão com e sem otimização." diff --git a/resources/i18n/ru_RU/cura.po b/resources/i18n/ru_RU/cura.po index b1e85bec74..c5fe8b331f 100644 --- a/resources/i18n/ru_RU/cura.po +++ b/resources/i18n/ru_RU/cura.po @@ -5,17 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" +"PO-Revision-Date: 2018-11-06 15:29+0100\n" "Last-Translator: Bothof \n" "Language-Team: Ruslan Popov , Russian \n" "Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.4\n" +"X-Generator: Poedit 2.0.6\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:22 @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "Файл G-code" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "Средство записи G-кода (GCodeWriter) не поддерживает нетекстовый режим." + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "Подготовьте G-код перед экспортом." + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -53,104 +64,57 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

Одна или несколько 3D-моделей могут не напечататься оптимальным образом из-за размера модели и конфигурации материала:

\n

{model_names}

\n

Узнайте, как обеспечить максимально возможное качество и высокую надежность печати.

\n

Ознакомиться с руководством по качеству печати

" +msgstr "" +"

Одна или несколько 3D-моделей могут не напечататься оптимальным образом из-за размера модели и конфигурации материала:

\n" +"

{model_names}

\n" +"

Узнайте, как обеспечить максимально возможное качество и высокую надежность печати.

\n" +"

Ознакомиться с руководством по качеству печати

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Печать через Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Печать через Doodle3D WiFi-Box" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Соединение с Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Отмена" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Отправка данных через Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Невозможно отправить данные через Doodle3D Connect. Другое задание активно?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Сохранение данных на Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Файл отправлен через Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Открыть Connect..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Открыть Doodle3D Connect web интерфейс" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Показать журнал изменений" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "Обновить прошивку" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Сбросить текущие параметры к стандартным значениям" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Профиль был нормализован и активирован." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" -msgstr "USB печать" +msgstr "Печать через USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Печатать через USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Печатать через USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "Подключено через USB" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "Выполняется печать через USB, закрытие Cura остановит эту печать. Вы уверены?" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -173,7 +137,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Сжатый файл с G-кодом" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "Средство записи G-кода с расширением GZ (GCodeGzWriter) не поддерживает текстовый режим." + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "Пакет формата Ultimaker" @@ -195,7 +164,7 @@ msgid "Save to Removable Drive {0}" msgstr "Сохранить на внешний носитель {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Ни один из форматов файлов не доступен для записи!" @@ -234,7 +203,7 @@ msgstr "Невозможно сохранить на внешний носите #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "Ошибка" @@ -263,8 +232,8 @@ msgstr "Извлекает внешний носитель {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "Внимание" @@ -291,259 +260,269 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Внешний носитель" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Печать через сеть" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Печать через сеть" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "Подключен по сети." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "Подключен по сети. Пожалуйста, подтвердите запрос на принтере." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "Подключен по сети. Нет доступа к управлению принтером." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "Запрошен доступ к принтеру. Пожалуйста, подтвердите запрос на принтере" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "Состояние аутентификации" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "Состояние аутентификации" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "Повторить" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Послать запрос доступа ещё раз" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Доступ к принтеру получен" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "Нет доступа к использованию этого принтера. Невозможно отправить задачу на печать." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "Запросить доступ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Отправить запрос на доступ к принтеру" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Не удалось начать новое задание печати." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." msgstr "Возникла проблема конфигурации Ultimaker, из-за которой невозможно начать печать. Перед продолжением работы решите возникшую проблему." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Несовпадение конфигурации" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "Вы уверены, что желаете печатать с использованием выбранной конфигурации?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Есть несовпадение между конфигурацией или калибровкой принтера и Cura. Для лучшего результата, всегда производите слайсинг для PrintCore и материала, которые установлены в вашем принтере." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "Отправка новых заданий (временно) заблокирована, идёт отправка предыдущего задания." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Отправка данных на принтер" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "Отправка данных" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Отмена" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "Модуль экструдера PrintCore не загружен в слот {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "Материал не загружен в слот {slot_number}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, python-brace-format msgctxt "@label" msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" msgstr "Другой модуль экструдера PrintCore (Cura: {cura_printcore_name}, принтер: {remote_printcore_name}) выбран для экструдера {extruder_id}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "Разный материал (Cura: {0}, Принтер: {1}) выбран для экструдера {2}" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Синхронизация с вашим принтером" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Желаете использовать текущую конфигурацию принтера в Cura?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Модуль PrintCore и/или материал в вашем принтере отличается от тех, что вы используете в текущем проекте. Для наилучшего результата всегда указывайте правильный модуль PrintCore и материалы, которые вставлены в ваш принтер." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" -msgstr "Подключен по сети." +msgstr "Подключен по сети" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "Задание печати успешно отправлено на принтер." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "Данные отправлены" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "Просмотр на мониторе" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "{printer_name} завершил печать '{job_name}'." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "Задание печати '{job_name}' выполнено." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "Печать завершена" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Подключиться через сеть" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Монитор" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "Не могу получить информацию об обновлениях." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "Для {machine_name} доступны новые функции! Рекомендуется обновить встроенное программное обеспечение принтера." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Доступна новая прошивка %s" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "Порядок обновления" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "Не могу получить информацию об обновлениях." - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Просмотр слоёв" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Cura не аккуратно отображает слои при использовании печати через кабель" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "Вид моделирования" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "Изменить G-код" @@ -557,32 +536,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Создание объема без печати элементов поддержки." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura собирает анонимизированную статистику об использовании." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "Сбор данных" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "Дополнительно" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "Ознакомьтесь с дополнительной информацией о данных, отправляемых Cura." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "Разрешить" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Разрешить Cura отправлять анонимизированную статистику об использовании, чтобы помочь назначить приоритеты будущим улучшениям в Cura. Отправлены некоторые ваши настройки и параметры, включая версию Cura и хэш моделей, разделяемых на слои." @@ -592,18 +571,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Профили Cura 15.04" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Файл Blender" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "Не удалось выполнить экспорт с использованием качества \"{}\"!\nВыполнен возврат к \"{}\"." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -629,49 +596,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF изображение" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Невозможно нарезать модель, используя текущий материал, так как он несовместим с выбранной машиной или конфигурацией." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "Невозможно нарезать" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Не могу выполнить слайсинг на текущих настройках. Проверьте следующие настройки: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Не удалось выполнить слайсинг из-за настроек модели. Следующие настройки ошибочны для одной или нескольких моделей: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "Слайсинг невозможен, так как черновая башня или её позиция неверные." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "Невозможно разделить на слои из-за наличия объектов, связанных с отключенным экструдером %s." + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Нечего нарезать, так как ни одна модель не попадает в объём принтера. Пожалуйста, отмасштабируйте или поверните модель." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "Обработка слоёв" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "Информация" @@ -687,29 +661,40 @@ msgid "Configure Per Model Settings" msgstr "Правка параметров модели" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "Рекомендованная" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "Своя" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Файл 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "Сопло" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "Файл проекта {0} содержит неизвестный тип принтера {1}. Не удалось импортировать принтер. Вместо этого будут импортированы модели." + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "Открыть файл проекта" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -720,18 +705,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Файл G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Обработка G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "Параметры G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Перед отправкой G-code на принтер удостоверьтесь в его соответствии вашему принтеру и его настройкам. Возможны неточности в G-code." @@ -742,27 +727,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Профиль Cura" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF файл" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "3MF файл проекта Cura" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "Ошибка в ходе записи файла 3MF." + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "Выбор обновлений" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "Обновление прошивки" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -773,79 +758,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "Выравнивание стола" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "Внешняя стенка" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "Внутренние стенки" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "Покрытие" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "Заполнение" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "Заполнение поддержек" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "Связующий слой поддержек" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "Поддержки" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "Юбка" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "Перемещение" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "Откаты" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "Другое" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "Неизвестно" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Предообратка файла {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "Вход не выполнен" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Файл уже существует" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -857,23 +842,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Не переопределен" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Выбранный материал несовместим с выбранным принтером или конфигурацией." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Несовместимый материал" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "Настройки изменены в соответствии с текущей доступностью экструдеров: [%s]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "Настройки обновлены" @@ -902,8 +887,6 @@ msgid "Export succeeded" msgstr "Экспорт успешно завершен" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" @@ -911,58 +894,70 @@ msgstr "Невозможно импортировать профиль из or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" msgstr "Отсутствует собственный профиль для импорта в файл {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 "Не удалось импортировать профиль из {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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." msgstr "Данный профиль {0} содержит неверные данные, поэтому его невозможно импортировать." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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 "Принтер, заданный в профиле {0} ({1}), не совпадает с вашим текущим принтером ({2}), поэтому его невозможно импортировать." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "Не удалось импортировать профиль из {0}:" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Успешно импортирован профиль {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "В файле {0} нет подходящих профилей." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "Профиль {0} имеет неизвестный тип файла или повреждён." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "Собственный профиль" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "У профайла отсутствует тип качества." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Невозможно найти тип качества {0} для текущей конфигурации." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -989,42 +984,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Все файлы (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "Собственный материал" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "Своё" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "Высота печатаемого объёма была уменьшена до значения параметра \"Последовательность печати\", чтобы предотвратить касание портала за напечатанные детали." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Объём печати" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Не удалось создать архив из каталога с данными пользователя: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "Резервное копирование" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Попытка восстановить резервную копию Cura при отсутствии необходимых данных или метаданных." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Попытка восстановить резервную копию Cura, не совпадающую с вашей текущей версией." @@ -1035,32 +1030,32 @@ msgid "Multiplying and placing objects" msgstr "Размножение и размещение объектов" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Размещение объекта" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Невозможно разместить все объекты внутри печатаемого объёма" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Поиск места для новых объектов" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Поиск места" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Не могу найти место" @@ -1078,7 +1073,12 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "

В ПО Ultimaker Cura обнаружена ошибка.

\n

Во время запуска обнаружена неустранимая ошибка. Возможно, она вызвана некоторыми файлами конфигурации с неправильными данными. Рекомендуется создать резервную копию конфигурации и сбросить ее.

\n

Резервные копии хранятся в папке конфигурации.

\n

Отправьте нам этот отчет о сбое для устранения проблемы.

\n " +msgstr "" +"

В ПО Ultimaker Cura обнаружена ошибка.

\n" +"

Во время запуска обнаружена неустранимая ошибка. Возможно, она вызвана некоторыми файлами конфигурации с неправильными данными. Рекомендуется создать резервную копию конфигурации и сбросить ее.

\n" +"

Резервные копии хранятся в папке конфигурации.

\n" +"

Отправьте нам этот отчет о сбое для устранения проблемы.

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:102 msgctxt "@action:button" @@ -1111,7 +1111,10 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

Please use the \"Send report\" button to post a bug report automatically to our servers

\n" " " -msgstr "

В Cura возникла критическая ошибка. Отправьте нам этот отчет о сбое для устранения проблемы

\n

Нажмите кнопку «Отправить отчет», чтобы автоматически опубликовать отчет об ошибке на наших серверах

\n " +msgstr "" +"

В Cura возникла критическая ошибка. Отправьте нам этот отчет о сбое для устранения проблемы

\n" +"

Нажмите кнопку «Отправить отчет», чтобы автоматически опубликовать отчет об ошибке на наших серверах

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1191,223 +1194,233 @@ msgctxt "@action:button" msgid "Send report" msgstr "Отправить отчёт" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Загрузка принтеров..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Настройка сцены..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Загрузка интерфейса..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f мм" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "Только один G-code файла может быть загружен в момент времени. Пропускаю импортирование {0}" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "Невозможно открыть любой другой файл, если G-code файл уже загружен. Пропускаю импортирование {0}" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Выбранная модель слишком мала для загрузки." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Параметры принтера" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Принтер" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Параметры принтера" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Ширина)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "мм" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Глубина)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Высота)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Форма стола" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Начало координат в центре" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Нагреваемый стол" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "Вариант G-кода" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Параметры головы" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X минимум" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Расстояние от левого края головы до центра сопла. Используется для предотвращения столкновений с уже напечатанной частью и головой в режиме \"По отдельности\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y минимум" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Расстояние от переднего края головы до центра сопла. Используется для предотвращения столкновений с уже напечатанной частью и головой в режиме \"По отдельности\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X максимум" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Расстояние от правого края головы до центра сопла. Используется для предотвращения столкновений с уже напечатанной частью и головой в режиме \"По отдельности\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y максимум" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Расстояние от заднего края головы до центра сопла. Используется для предотвращения столкновений с уже напечатанной частью и головой в режиме \"По отдельности\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Высота портала" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "Разница в высоте от кончика сопла до портала (по осям X и Y). Используется для предотвращения столкновений с уже напечатанной частью и головой в режиме \"По отдельности\"." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Количество экструдеров" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "Стартовый G-код" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Команды в G-коде, которые будут выполнены в самом начале." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "Завершающий G-код" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Команды в G-коде, которые будут выполнены в самом конце." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Параметры сопла" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Диаметр сопла" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Диаметр совместимого материала" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "Номинальный диаметр материала, поддерживаемый принтером. Точный диаметр будет указан в материале и/или в профиле." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "Смещение сопла по оси X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Смещение сопла по оси Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "Номер охлаждающего вентилятора" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "Стартовый G-код экструдера" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "Завершающий G-код экструдера" @@ -1427,12 +1440,20 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Не удалось подключиться к базе данных пакета Cura. Проверьте свое подключение." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "Плагины" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Материалы" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1448,8 +1469,14 @@ msgctxt "@label" msgid "Author" msgstr "Автор" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "Загрузки" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "Неизвестно" @@ -1464,7 +1491,7 @@ msgstr "Обновить" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:31 msgctxt "@action:button" msgid "Updating" -msgstr "Обновление..." +msgstr "Обновление" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:32 @@ -1482,17 +1509,57 @@ msgctxt "@action:button" msgid "Back" msgstr "Назад" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "Подтвердить удаление" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "Вы удаляете материалы и/или профили, которые все еще используются. Подтверждение приведет к сбросу указанных ниже материалов/профилей к их настройкам по умолчанию." + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "Материалы" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "Профили" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "Подтвердить" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "Вам потребуется перезапустить Cura для активации изменений в пакетах." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Выйти из Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "Вклад в развитие сообщества" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "Плагины сообщества" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "Универсальные материалы" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "Установлено" @@ -1523,7 +1590,10 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "Этот плагин содержит лицензию.\nЧтобы установить этот плагин, необходимо принять условия лицензии.\nПринять приведенные ниже условия?" +msgstr "" +"Этот плагин содержит лицензию.\n" +"Чтобы установить этот плагин, необходимо принять условия лицензии.\n" +"Принять приведенные ниже условия?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1535,12 +1605,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Отклонить" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Рекомендуемые" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Совместимость" @@ -1550,10 +1620,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Выборка пакетов..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "Контакт" +msgid "Website" +msgstr "Веб-сайт" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "Электронная почта" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1566,48 +1641,88 @@ msgid "Changelog" msgstr "Журнал изменений" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "Закрыть" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "Обновить прошивку" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "Прошивка является программным обеспечением, которое работает на плате вашего 3D принтера. Прошивка управляет шаговыми моторами, регулирует температуру и, в конечном счёте, обеспечивает работу вашего принтера." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "Поставляемая с новыми принтерами прошивка работоспособна, но обновления предоставляют больше возможностей и усовершенствований." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "Автоматическое обновление прошивки" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "Залить собственную прошивку" + +#: /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 "Невозможно обновить прошивку, так как нет подключения к принтеру." + +#: /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 "Невозможно обновить прошивку, так как подключение к принтеру не поддерживает функцию обновления прошивки." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "Выбрать собственную прошивку" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "Обновление прошивки" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "Обновление прошивки." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "Обновление прошивки завершено." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "Обновление прошивки не удалось из-за неизвестной ошибки." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "Обновление прошивки не удалось из-за ошибки связи." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "Обновление прошивки не удалось из-за ошибки ввода-вывода." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Обновление прошивки не удалось из-за её отсутствия." @@ -1617,356 +1732,421 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Пользовательское соглашение" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "Текущее подключение" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "Этот принтер/группа уже добавлен (-а) в Cura. Выберите другой (-ую) принтер/группу." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Подключение к сетевому принтеру" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" "\n" "Select your printer from the list below:" -msgstr "Для печати на вашем принтере через сеть, пожалуйста, удостоверьтесь, что ваш принтер подключен к сети с помощью кабеля или через WiFi. Если вы не подключили Cura к вашему принтеру, вы по-прежнему можете использовать USB флешку для переноса G-Code файлов на ваш принтер.\n\nУкажите ваш принтер в списке ниже:" +msgstr "" +"Для печати на вашем принтере через сеть, пожалуйста, удостоверьтесь, что ваш принтер подключен к сети с помощью кабеля или через WiFi. Если вы не подключили Cura к вашему принтеру, вы по-прежнему можете использовать USB флешку для переноса G-Code файлов на ваш принтер.\n" +"\n" +"Укажите ваш принтер в списке ниже:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Добавить" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "Правка" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Удалить" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "Обновить" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Если ваш принтер отсутствует в списке, обратитесь к руководству по решению проблем с сетевой печатью" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "Тип" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "Версия прошивки" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "Адрес" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Данный принтер не настроен для управления группой принтеров Ultimaker 3." +msgid "This printer is not set up to host a group of printers." +msgstr "Данный принтер не настроен для управления группой принтеров." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Данный принтер управляет группой из %1 принтеров Ultimaker 3." +msgid "This printer is the host for a group of %1 printers." +msgstr "Данный принтер управляет группой из %1 принтера (-ов)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "Принтер по этому адресу ещё не отвечал." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "Подключить" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "Адрес принтера" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "Введите IP-адрес принтера или его имя в сети." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "Печать через сеть" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "Выбор принтера" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "Печать" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 не настроен для управления группой подключенных принтеров Ultimaker 3" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "Печать через сеть" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Добавить/удалить принтеры" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" +msgstr "Выбор принтера" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Открытие страницы заданий печати в веб-браузере по умолчанию." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" +msgstr "Недоступно" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Просмотреть задания на печать" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" +msgstr "Недостижимо" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Подготовка к печати" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Печать" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" msgstr "Доступен" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Потеряно соединение с принтером" +msgid "Aborted" +msgstr "Прервано" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Недоступен" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Неизвестно" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Отключено" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Занят" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "Завершено" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Подготовка к печати" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" -msgstr "Необходимое действие" +msgid "Preparing" +msgstr "Подготовка" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" -msgstr "Приостановлено" +msgid "Pausing" +msgstr "Приостановка" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "Возобновляется" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" -msgstr "Печать прервана" +msgid "Action required" +msgstr "Необходимое действие" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Не принимает задания на печать" +msgid "Waiting for: Unavailable printer" +msgstr "Ожидание: недоступный принтер" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "Заканчивается на: " +msgid "Waiting for: First available" +msgstr "Ожидание: первое доступное" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "Очистите стол" +msgid "Waiting for: " +msgstr "Ожидание: " -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Ожидание изменения конфигурации" +msgid "Configuration change" +msgstr "Изменение конфигурации" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Задания на печать" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "Печать" +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "Для назначенного принтера %1 требуются следующие изменения конфигурации:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "Принтер %1 назначен, однако в задании указана неизвестная конфигурация материала." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 +msgctxt "@label" +msgid "Change material %1 from %2 to %3." +msgstr "Изменить материал %1 с %2 на %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 "Загрузите %3 как материал %1 (переопределение этого действия невозможно)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "Изменить экструдер %1 с %2 на %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 "Заменить рабочий стол на %1 (переопределение этого действия невозможно)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "Переопределить" + +#: /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 "Начало задания печати с несовместимой конфигурацией может привести к повреждению 3D-принтера. Действительно переопределить конфигурацию и печатать %1?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:435 +msgctxt "@window:title" +msgid "Override configuration configuration and start print" +msgstr "Переопределить конфигурацию и начать печать" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "Стекло" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "Алюминий" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "Управление очередью" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "Запланировано" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Принтеры" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "Печать" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Просмотреть принтеры" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "Управление принтерами" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "Переместить в начало" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "Удалить" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "Продолжить" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "Пауза" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "Прервать" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "Вы уверены, что хотите переместить %1 в начало очереди?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "Переместить задание печати в начало очереди" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "Вы уверены, что хотите удалить %1?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "Удалить задание печати" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "Вы уверены, что хотите прервать %1?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Прервать печать" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Подключение к принтеру" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "Загрузка конфигурации принтера в Cura" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Активировать конфигурацию" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "Загрузка конфигурации принтера в Cura" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Цветовая схема" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Цвет материала" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Тип линии" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Скорость подачи" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Толщина слоя" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Режим совместимости" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Показать движения" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Показать поддержку" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Показать стенки" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Показать заполнение" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Показать только верхние слои" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "Показать 5 детализированных слоёв сверху" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Дно / крышка" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "Внутренняя стенка" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "мин." -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "макс." @@ -1981,17 +2161,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "Скрипты пост-обработки" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "Добавить скрипт" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "Параметры" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "Изменить активные скрипты пост-обработки" @@ -2086,53 +2266,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "Сглаживание" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Тип объекта" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Нормальная модель" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Печать в качестве поддержки" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Не поддерживать перекрытие с другими моделями" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Изменять настройки для перекрытия с другими моделями" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Изменять настройки для заполнения других моделей" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "Выберите параметры" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Выберите параметр для изменения этой модели" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Фильтр..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "Показать всё" @@ -2154,13 +2334,13 @@ msgid "Create new" msgstr "Создать новый" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Сводка - Проект Cura" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Параметры принтера" @@ -2177,18 +2357,19 @@ msgid "Update" msgstr "Обновить" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Тип" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "Группа принтеров" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Параметры профиля" @@ -2200,19 +2381,20 @@ msgstr "Как следует решать конфликт в профиле?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "Название" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "Вне профиля" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2244,7 +2426,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Как следует решать конфликт в материале?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Видимость параметров" @@ -2255,13 +2437,13 @@ msgid "Mode" msgstr "Режим" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Видимые параметры:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 из %2" @@ -2317,36 +2499,6 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "Перейти к следующей позиции" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "Обновление прошивки" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "Прошивка является программным обеспечением, которое работает на плате вашего 3D принтера. Прошивка управляет шаговыми моторами, регулирует температуру и, в конечном счёте, обеспечивает работу вашего принтера." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "Поставляемая с новыми принтерами прошивка работоспособна, но обновления предоставляют больше возможностей и усовершенствований." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "Автоматическое обновление прошивки" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "Залить собственную прошивку" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "Выбрать собственную прошивку" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" @@ -2494,27 +2646,11 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "Пожалуйста, удалите напечатанное" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Пауза" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Продолжить" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "Прервать печать" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Прекращение печати" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2530,7 +2666,9 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "Вы изменили некоторые параметры профиля.\nЖелаете сохранить их или вернуть к прежним значениям?" +msgstr "" +"Вы изменили некоторые параметры профиля.\n" +"Желаете сохранить их или вернуть к прежним значениям?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2548,19 +2686,17 @@ msgid "Customized" msgstr "Свой" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Всегда спрашивать меня" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "Сбросить и никогда больше не спрашивать" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Сохранить и никогда больше не спрашивать" @@ -2580,105 +2716,183 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Создать новый профиль" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Информация" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Подтвердить изменение диаметра" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" msgstr "Установлен новый диаметр пластиковой нити %1 мм. Это значение несовместимо с текущим экструдером. Продолжить?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Отображаемое имя" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Брэнд" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Тип материала" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Цвет" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Свойства" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Плотность" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Диаметр" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Стоимость материала" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Вес материала" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Длина материала" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Стоимость метра" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Данный материал привязан к %1 и имеет ряд его свойств." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Отвязать материал" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Описание" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Информация об адгезии" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "Параметры печати" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Активировать" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Создать" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "Дублировать" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "Импорт" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Экспорт" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "Принтер" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "Подтвердите удаление" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "Вы уверены, что желаете удалить %1? Это нельзя будет отменить!" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Импортировать материал" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "Не могу импортировать материал %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "Успешно импортированный материал %1" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Экспортировать материал" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "Не могу экспортировать материал %1: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Материал успешно экспортирован в %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" -msgstr "Видимость настроек" +msgstr "Видимость параметров" #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:50 msgctxt "@label:textbox" @@ -2711,289 +2925,287 @@ msgid "Unit" msgstr "Единица" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "Общее" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "Интерфейс" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "Язык:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "Валюта:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "Тема:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "Для применения данных изменений вам потребуется перезапустить приложение." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Нарезать автоматически при изменении настроек." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "Нарезать автоматически" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "Поведение окна" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Подсвечивать красным области модели, требующие поддержек. Без поддержек эти области не будут напечатаны правильно." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "Отобразить нависания" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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 "Перемещать камеру так, чтобы выбранная модель помещалась в центр экрана" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Центрировать камеру на выбранном объекте" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "Следует ли инвертировать стандартный способ увеличения в Cura?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Инвертировать направление увеличения камеры." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "Увеличивать по мере движения мышкой?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Увеличивать по движению мышки" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "Следует ли размещать модели на столе так, чтобы они больше не пересекались?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Удостовериться, что модели размещены рядом" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "Следует ли опустить модели на стол?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Автоматически опускать модели на стол" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "Показывать предупреждающее сообщение в средстве считывания G-кода." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "Предупреждающее сообщение в средстве считывания G-кода" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "Должен ли слой быть переведён в режим совместимости?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Просматривать слои в режиме совместимости (требуется перезапуск)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "Открытие и сохранение файлов" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "Масштабировать ли модели для размещения внутри печатаемого объёма, если они не влезают в него?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "Масштабировать большие модели" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "Модель может показаться очень маленькой, если её размерность задана в метрах, а не миллиметрах. Следует ли масштабировать такие модели?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Масштабировать очень маленькие модели" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "Выбрать модели после их загрузки?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Выбрать модели при загрузке" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "Надо ли автоматически добавлять префикс, основанный на имени принтера, к названию задачи на печать?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Добавить префикс принтера к имени задачи" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Показывать сводку при сохранении файла проекта?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Показывать сводку при сохранении проекта" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Стандартное поведение при открытии файла проекта" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Стандартное поведение при открытии файла проекта: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "Всегда спрашивать" +msgid "Always ask me this" +msgstr "Всегда спрашивать меня" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Всегда открывать как проект" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "Всегда импортировать модели" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "При внесении изменений в профиль и переключении на другой, будет показан диалог, запрашивающий ваше решение о сохранении ваших изменений, или вы можете указать стандартное поведение и не показывать такой диалог." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "Переопределение профиля" +msgid "Profiles" +msgstr "Профили" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "Поведение по умолчанию для измененных значений настройки при переключении на другой профиль: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "Всегда сбрасывать измененные настройки" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "Всегда передавать измененные настройки новому профилю" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "Приватность" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "Должна ли Cura проверять обновления программы при старте?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Проверять обновления при старте" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "Можно ли отправлять анонимную информацию о вашей печати в Ultimaker? Следует отметить, что ни модели, ни IP-адреса и никакая другая персональная информация не будет отправлена или сохранена." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Отправлять (анонимно) информацию о печати" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "Дополнительная информация" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "Экспериментальное" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Использовать функционал нескольких рабочих столов" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Использовать функционал нескольких рабочих столов (требуется перезапуск)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Должны ли новые загруженные модели выравниваться на рабочем столе? Используется в сочетании с несколькими рабочими столами (ЭКСПЕРИМЕНТАЛЬНАЯ ОПЦИЯ)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Не выравнивать объекты под нагрузкой" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "Принтеры" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Активировать" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3011,7 +3223,7 @@ msgid "Connection:" msgstr "Соединение:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "Принтер не подключен." @@ -3037,7 +3249,7 @@ msgid "Aborting print..." msgstr "Прерывание печати…" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "Профили" @@ -3052,18 +3264,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Дублировать" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "Импорт" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Экспорт" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3074,18 +3274,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Скопировать профиль" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Подтвердите удаление" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "Вы уверены, что желаете удалить %1? Это нельзя будет отменить!" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3106,228 +3294,202 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Принтер: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Защищённые профили" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Собственные профили" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Обновить профиль текущими параметрами" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Сбросить текущие параметры" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "Данный профиль использует настройки принтера по умолчанию, поэтому список ниже пуст." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Ваши текущие параметры совпадают с выбранным профилем." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Общие параметры" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Материалы" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Создать" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Дублировать" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Импортировать материал" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr "Не могу импортировать материал %1: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "Успешно импортированный материал %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Экспортировать материал" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "Не могу экспортировать материал %1: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Материал успешно экспортирован в %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Принтер" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "Добавление принтера" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "Имя принтера:" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "Добавить принтер" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "Без имени" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "О Cura" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "версия: %1" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "Полное решение для 3D печати методом наплавления материала." -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "Cura разработана компанией Ultimaker B.V. совместно с сообществом.\nCura использует следующие проекты с открытым исходным кодом:" +msgstr "" +"Cura разработана компанией Ultimaker B.V. совместно с сообществом.\n" +"Cura использует следующие проекты с открытым исходным кодом:" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "Графический интерфейс пользователя" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "Фреймворк приложения" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "Генератор G-кода" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "Библиотека межпроцессного взаимодействия" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "Язык программирования" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "Фреймворк GUI" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "Фреймворк GUI, интерфейс" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "C/C++ библиотека интерфейса" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "Формат обмена данными" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "Вспомогательная библиотека для научных вычислений" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "Вспомогательная библиотека для быстрых расчётов" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "Вспомогательная библиотека для работы с STL файлами" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "Вспомогательная библиотека для работы с плоскими объектами" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "Вспомогательная библиотека для работы с треугольными сетками" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "Вспомогательная библиотека для анализа сложных сетей" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "Вспомогательная библиотека для работы с 3MF файлами" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "Вспомогательная библиотека для метаданных файла и потоковой передачи" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "Библиотека последовательного интерфейса" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "Библиотека ZeroConf" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "Библиотека обрезки полигонов" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "Библиотека Python HTTP" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "Шрифт" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "Иконки SVG" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "Развертывание приложений для различных дистрибутивов Linux" @@ -3337,67 +3499,73 @@ msgctxt "@label" msgid "Profile:" msgstr "Профиль:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "Значения некоторых параметров отличаются от значений профиля.\n\nНажмите для открытия менеджера профилей." +msgstr "" +"Значения некоторых параметров отличаются от значений профиля.\n" +"\n" +"Нажмите для открытия менеджера профилей." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "Поиск..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Скопировать значение для всех экструдеров" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Копировать все измененные значения для всех экструдеров" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Спрятать этот параметр" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Не показывать этот параметр" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Оставить этот параметр видимым" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Видимость параметров…" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Свернуть все" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Развернуть все" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "Некоторые из скрытых параметров используют значения, отличающиеся от их вычисленных значений.\n\nЩёлкните, чтобы сделать эти параметры видимыми." +msgstr "" +"Некоторые из скрытых параметров используют значения, отличающиеся от их вычисленных значений.\n" +"\n" +"Щёлкните, чтобы сделать эти параметры видимыми." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3409,31 +3577,37 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Зависит от" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "Данная настройка всегда используется совместно всеми экструдерами. Изменение данного значения приведет к изменению значения для всех экструдеров." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "Значение получается из параметров каждого экструдера " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "Значение этого параметра отличается от значения в профиле.\n\nЩёлкните для восстановления значения из профиля." +msgstr "" +"Значение этого параметра отличается от значения в профиле.\n" +"\n" +"Щёлкните для восстановления значения из профиля." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "Обычно это значение вычисляется, но в настоящий момент было установлено явно.\n\nЩёлкните для восстановления вычисленного значения." +msgstr "" +"Обычно это значение вычисляется, но в настоящий момент было установлено явно.\n" +"\n" +"Щёлкните для восстановления вычисленного значения." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3471,7 +3645,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "Отправить свою команду в G-коде подключенному принтеру. Нажмите Enter (Ввод) для отправки команды." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Экструдер" @@ -3524,10 +3698,10 @@ msgid "The nozzle inserted in this extruder." msgstr "Сопло, вставленное в данный экструдер." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" -msgstr "Стол" +msgstr "Рабочий стол" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:55 msgctxt "@tooltip" @@ -3549,6 +3723,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Нагрев горячего стола перед печатью. Вы можете продолжать настройки вашей печати, пока стол нагревается, и вам не понадобится ждать нагрева стола для старта печати." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "Материал" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "Избранные" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "Универсальные" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3564,12 +3753,12 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "Вид" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "Положение камеры" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "Рабочий стол" @@ -3579,12 +3768,12 @@ msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "Видимые параметры" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "Показывать все настройки" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Управление видимостью настроек…" @@ -3645,180 +3834,181 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "Настройка принтера отключена\nG-code файлы нельзя изменять" +msgstr "" +"Настройка принтера отключена\n" +"G-code файлы нельзя изменять" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "00 ч 00 мин" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "Настройка расчета времени" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "Настройка расчета стоимости" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "%1 м" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "%1 г" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "Итого:" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." msgstr "Рекомендованные параметры печати

Печатайте с рекомендованными параметрами для выбранных принтера, материала и качества." -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Свои параметры печати

Печатайте с полным контролем над каждой особенностью процесса слайсинга." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Идёт печать" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "Имя задачи" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Время печати" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Осталось примерно" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" +msgid "Toggle Full Screen" msgstr "Полный экран" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "Отмена" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "Возврат" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "Выход" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" +msgid "3D View" msgstr "Трехмерный вид" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" +msgid "Front View" msgstr "Вид спереди" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" +msgid "Top View" msgstr "Вид сверху" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" +msgid "Left Side View" msgstr "Вид слева" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" +msgid "Right Side View" msgstr "Вид справа" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Настроить Cura…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "Добавить принтер..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Управление принтерами..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Управление материалами…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" -msgstr "Обновить профиль, используя текущие параметры" +msgstr "Обновить профиль текущими параметрами" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "Сбросить текущие параметры" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "Создать профиль из текущих параметров…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Управление профилями..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Показать онлайн документацию" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Отправить отчёт об ошибке" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." +msgid "About..." msgstr "О Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" msgstr[0] "Удалить выбранную модель" msgstr[1] "Удалить выбранные модели" msgstr[2] "Удалить выбранные модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" @@ -3826,7 +4016,7 @@ msgstr[0] "Центрировать выбранную модель" msgstr[1] "Центрировать выбранные модели" msgstr[2] "Центрировать выбранные модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" @@ -3834,163 +4024,163 @@ msgstr[0] "Размножить выбранную модель" msgstr[1] "Размножить выбранные модели" msgstr[2] "Размножить выбранные модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Удалить модель" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Поместить модель по центру" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "Сгруппировать модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Разгруппировать модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Объединить модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "Дублировать модель..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" +msgid "Select All Models" msgstr "Выбрать все модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" +msgid "Clear Build Plate" msgstr "Очистить стол" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" +msgid "Reload All Models" msgstr "Перезагрузить все модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Выровнять все модели по всем рабочим столам" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Выровнять все модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Выровнять выбранные" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Сбросить позиции всех моделей" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "Сбросить преобразования всех моделей" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "Открыть файл(ы)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "Новый проект..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Показать журнал движка..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Показать конфигурационный каталог" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Обзор пакетов..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Развернуть/свернуть боковую панель" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Пожалуйста, загрузите 3D модель" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Готов к нарезке" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Нарезка на слои..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "Готов к %1" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Невозможно нарезать" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Нарезка недоступна" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Разделить на слои текущее задание на печать" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Отмена разделения на слои" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Подготовка" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "Отмена" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Выберите активное целевое устройство" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "Открыть файл(ы)" @@ -4010,129 +4200,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "Файл" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "&Сохранить…" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "&Экспорт…" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "Сохранить выделенное в файл" +msgid "Export Selection..." +msgstr "Экспорт выбранного…" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "Сохранить как..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Сохранить проект..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "Правка" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "Вид" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "Параметры" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Принтер" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "Материал" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Установить как активный экструдер" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Включить экструдер" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Отключить экструдер" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "Рабочий стол" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "Профиль" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "Расширения" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&Панель инструментов" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "Настройки" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "Справка" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Этот пакет будет установлен после перезапуска." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "Открыть файл" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "Параметры" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "Новый проект" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Вы действительно желаете начать новый проект? Это действие очистит область печати и сбросит все несохранённые настройки." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "Закрытие Cura" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "Вы уверены, что хотите выйти из Cura?" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "Установить пакет" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "Открыть файл(ы)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." msgstr "Среди выбранных файлов мы нашли несколько файлов с G-кодом. Вы можете открыть только один файл за раз. Измените свой выбор, пожалуйста." @@ -4142,112 +4348,107 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Сохранить проект" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Рабочий стол" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Экструдер %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 и материал" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Больше не показывать сводку по проекту" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Сохранить" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Высота слоя" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Этот профиль качества недоступен для вашей текущей конфигурации материала и сопла. Измените эти настройки для задействования данного профиля качества" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "В настоящее время активен пользовательский профиль. Чтобы включить ползунок качества, на вкладке «Пользовательские» выберите профиль качества по умолчанию" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Скорость печати" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Медленнее" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Быстрее" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "В некоторые настройки профиля были внесены изменения. Если их необходимо изменить, перейдите в пользовательский режим." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Заполнение" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Постепенное заполнение будет постепенно увеличивать объём заполнения по направлению вверх." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "Постепенное" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "Генерация поддержек" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Генерация структур для поддержки нависающих частей модели. Без этих структур такие части будут складываться во время печати." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Выбирает, какой экструдер следует использовать для поддержек. Будут созданы поддерживающие структуры под моделью для предотвращения проседания краёв или печати в воздухе." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Тип прилипания к столу" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Разрешает печать каймы или подложки. Это добавляет плоскую область вокруг или под вашим объектом, которую легко удалить после печати." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Требуется помощь в улучшении вашей печати?
Обратитесь к Руководству Ultimaker по решению проблем" @@ -4295,22 +4496,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Тип принтера" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Материал" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Использовать клейкий лист или клей с этой комбинацией материалов" +msgid "Use glue with this material combination" +msgstr "Использовать клей с этой комбинацией материалов" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Проверить совместимость" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Нажмите для проверки совместимости материала на Ultimaker.com." @@ -4400,16 +4601,6 @@ msgctxt "name" msgid "God Mode" msgstr "Режим бога" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "Принять G-code и отправить его через WiFi на Doodle3D WiFi-Box." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4420,6 +4611,16 @@ msgctxt "name" msgid "Changelog" msgstr "Журнал изменений" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "Обеспечение действий принтера для обновления прошивки." + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "Средство обновления прошивки" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." @@ -4443,7 +4644,7 @@ msgstr "Печать через USB" #: UserAgreement/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license." -msgstr "Запрашивает согласие пользователя с условиями лицензии" +msgstr "Запрашивает согласие пользователя с условиями лицензии." #: UserAgreement/plugin.json msgctxt "name" @@ -4490,16 +4691,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Подготовительный этап" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Открывает окно редактирования для непосредственного редактирования скриптов." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Интерактивный инструмент для работы со скриптами" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4513,7 +4704,7 @@ msgstr "Плагин для работы с внешним носителем" #: UM3NetworkPrinting/plugin.json msgctxt "description" msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Управляет сетевыми соединениями с принтерами Ultimaker 3" +msgstr "Управляет сетевыми соединениями с принтерами Ultimaker 3." #: UM3NetworkPrinting/plugin.json msgctxt "name" @@ -4610,16 +4801,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Чтение устаревших профилей Cura" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Помогает открывать файлы Blender непосредственно в Cura." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Интеграция Blender (экспериментальная опция)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4653,42 +4834,52 @@ msgstr "Обновление версии 3.3 до 3.4" #: VersionUpgrade/VersionUpgrade25to26/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.5 to Cura 2.6." -msgstr "Обновляет конфигурацию Cura 2.5 до Cura 2.6." +msgstr "Обновляет настройки Cura 2.5 до Cura 2.6." #: VersionUpgrade/VersionUpgrade25to26/plugin.json msgctxt "name" msgid "Version Upgrade 2.5 to 2.6" -msgstr "Обновление версии с 2.5 до 2.6" +msgstr "Обновление версии 2.5 до 2.6" #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.7 to Cura 3.0." -msgstr "Обновляет конфигурацию Cura 2.7 до Cura 3.0." +msgstr "Обновляет настройки Cura 2.7 до Cura 3.0." #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" -msgstr "Обновление версии с 2.7 до 3.0" +msgstr "Обновление версии 2.7 до 3.0" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "Обновляет настройки Cura 3.4 до Cura 3.5." + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "Обновление версии 3.4 до 3.5" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." -msgstr "Обновление конфигураций с Cura 3.0 до Cura 3.1." +msgstr "Обновление настроек Cura 3.0 до Cura 3.1." #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" -msgstr "Обновление версии с 3.0 до 3.1" +msgstr "Обновление версии 3.0 до 3.1" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." -msgstr "Обновляет конфигурацию Cura 2.6 до Cura 2.7." +msgstr "Обновляет настройки Cura 2.6 до Cura 2.7." #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "name" msgid "Version Upgrade 2.6 to 2.7" -msgstr "Обновление версии с 2.6 до 2.7" +msgstr "Обновление версии 2.6 до 2.7" #: VersionUpgrade/VersionUpgrade21to22/plugin.json msgctxt "description" @@ -4703,7 +4894,7 @@ msgstr "Обновление версии 2.1 до 2.2" #: VersionUpgrade/VersionUpgrade22to24/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.2 to Cura 2.4." -msgstr "Обновляет конфигурации Cura 2.2 до Cura 2.4." +msgstr "Обновляет настройки Cura 2.2 до Cura 2.4." #: VersionUpgrade/VersionUpgrade22to24/plugin.json msgctxt "name" @@ -4810,6 +5001,298 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Чтение профиля Cura" +#~ msgctxt "@warning:status" +#~ msgid "Please generate G-code before saving." +#~ msgstr "Сгенерируйте G-код перед сохранением." + +#~ msgctxt "@item:inmenu" +#~ msgid "Profile Assistant" +#~ msgstr "Помощник по профилю" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Profile Assistant" +#~ msgstr "Помощник по профилю" + +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "Обновление прошивки" + +#~ msgctxt "@label unknown material" +#~ msgid "Unknown" +#~ msgstr "Неизвестно" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "No custom profile to import in file {0}" +#~ msgstr "Отсутствует собственный профиль для импорта в файл {0}" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "This profile {0} contains incorrect data, could not import it." +#~ msgstr "Данный профиль {0} содержит неверные данные, поэтому его невозможно импортировать." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "Принтер, заданный в профиле {0} ({1}), не совпадает с вашим текущим принтером ({2}), поэтому его невозможно импортировать." + +#~ msgctxt "@title:window" +#~ msgid "Confirm uninstall " +#~ msgstr "Подтвердить удаление " + +#~ msgctxt "@label:status" +#~ msgid "Paused" +#~ msgstr "Приостановлено" + +#~ msgctxt "@action:button" +#~ msgid "Previous" +#~ msgstr "Предыдущий" + +#~ msgctxt "@action:button" +#~ msgid "Next" +#~ msgstr "Следующий" + +#~ msgctxt "@label" +#~ msgid "Tip" +#~ msgstr "Кончик" + +#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +#~ msgid "%1m / ~ %2g / ~ %4 %3" +#~ msgstr "%1 м / ~ %2 г / ~ %4 %3" + +#~ msgctxt "@label Print estimates: m for meters, g for grams" +#~ msgid "%1m / ~ %2g" +#~ msgstr "%1 м / ~ %2 г" + +#~ msgctxt "@label" +#~ msgid "Print experiment" +#~ msgstr "Пробная печать" + +#~ msgctxt "@label" +#~ msgid "Checklist" +#~ msgstr "Контрольный список" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "Обновление прошивки" + +#~ msgctxt "description" +#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +#~ msgstr "Позволяет производителям материалов создавать новые профили материалов и качества с помощью дружественного интерфейса." + +#~ msgctxt "name" +#~ msgid "Print Profile Assistant" +#~ msgstr "Помощник по профилю печати" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Печать через Doodle3D WiFi-Box" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Печать через Doodle3D WiFi-Box" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Соединение с Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Отправка данных через Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Невозможно отправить данные через Doodle3D Connect. Другое задание активно?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Сохранение данных на Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Файл отправлен через Doodle3D Connect" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Открыть Connect..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Открыть Doodle3D Connect web интерфейс" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Файл Blender" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "Не удалось выполнить экспорт с использованием качества \"{}\"!\n" +#~ "Выполнен возврат к \"{}\"." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "Контакт" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Данный принтер не настроен для управления группой принтеров Ultimaker 3." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Данный принтер управляет группой из %1 принтеров Ultimaker 3." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 не настроен для управления группой подключенных принтеров Ultimaker 3" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Добавить/удалить принтеры" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Открытие страницы заданий печати в веб-браузере по умолчанию." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Просмотреть задания на печать" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Подготовка к печати" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Печать" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Доступен" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Потеряно соединение с принтером" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Недоступен" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Неизвестно" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Отключено" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Занят" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Подготовка к печати" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Печать прервана" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Не принимает задания на печать" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Заканчивается на: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Очистите стол" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Ожидание изменения конфигурации" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Задания на печать" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Принтеры" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Просмотреть принтеры" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Пауза" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Продолжить" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Прервать печать" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Всегда спрашивать" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Переопределение профиля" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Должны ли новые загруженные модели выравниваться на рабочем столе? Используется в сочетании с несколькими рабочими столами (ЭКСПЕРИМЕНТАЛЬНАЯ ОПЦИЯ)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Не выравнивать объекты под нагрузкой" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "Сохранить выделенное в файл" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "Сохранить как..." + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Сохранить проект..." + +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Использовать клейкий лист или клей с этой комбинацией материалов" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "Принять G-code и отправить его через WiFi на Doodle3D WiFi-Box." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Открывает окно редактирования для непосредственного редактирования скриптов." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Интерактивный инструмент для работы со скриптами" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Помогает открывать файлы Blender непосредственно в Cura." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Интеграция Blender (экспериментальная опция)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Предупреждение средства проверки моделей" @@ -5077,10 +5560,6 @@ msgstr "Чтение профиля Cura" #~ msgid "Browse plugins..." #~ msgstr "Просмотр плагинов..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "Рабочий стол" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "Плагины" @@ -5306,14 +5785,6 @@ msgstr "Чтение профиля Cura" #~ "\n" #~ "Сожалеем!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Помощник по профилю" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Помощник по профилю" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Материал не загружен" @@ -5444,14 +5915,6 @@ msgstr "Чтение профиля Cura" #~ msgid "Configure setting visiblity..." #~ msgstr "Настроить видимость параметров..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1 м / ~ %2 г / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1 м / ~ %2 г" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Автоматически: %1" @@ -5488,14 +5951,6 @@ msgstr "Чтение профиля Cura" #~ msgid "GCode Profile Reader" #~ msgstr "Чтение профиля из G-Code" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Позволяет производителям материалов создавать новые профили материалов и качества с помощью дружественного интерфейса." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Помощник по профилю печати" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "Возникли ошибки во время открытия файла SolidWorks! Пожалуйста, проверьте может ли SolidWorks открыть этот файл без проблем!" @@ -5691,10 +6146,6 @@ msgstr "Чтение профиля Cura" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Данный принтер управляет группой из {count} подключенных принтеров Ultimaker 3" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Подготовка" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Выполнено на:" diff --git a/resources/i18n/ru_RU/fdmextruder.def.json.po b/resources/i18n/ru_RU/fdmextruder.def.json.po index 26bb958876..65e6698016 100644 --- a/resources/i18n/ru_RU/fdmextruder.def.json.po +++ b/resources/i18n/ru_RU/fdmextruder.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 14:25+0100\n" "Last-Translator: Bothof \n" "Language-Team: Ruslan Popov , Russian \n" "Language: ru_RU\n" @@ -168,6 +168,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "Позиция кончика сопла на оси Z при старте печати." +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "Охлаждающий вентилятор экструдера, используемый во время печати" + +#: 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 "Номер охлаждающего вентилятора, используемого при печати и ассоциированного с этим экструдером. Применяемое по умолчанию значение 0 следует менять только при наличии другого охлаждающего вентилятора, используемого при печати, для каждого экструдера." + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/ru_RU/fdmprinter.def.json.po b/resources/i18n/ru_RU/fdmprinter.def.json.po index c5273561ca..58dde033be 100644 --- a/resources/i18n/ru_RU/fdmprinter.def.json.po +++ b/resources/i18n/ru_RU/fdmprinter.def.json.po @@ -5,17 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-11-06 15:29+0100\n" "Last-Translator: Bothof \n" "Language-Team: Ruslan Popov , Russian \n" "Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.4\n" +"X-Generator: Poedit 2.0.6\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: fdmprinter.def.json @@ -58,7 +58,9 @@ msgctxt "machine_start_gcode description" msgid "" "G-code commands to be executed at the very start - separated by \n" "." -msgstr "Команды в G-коде, которые будут выполнены в самом начале, разделенные с помощью \n." +msgstr "" +"Команды в G-коде, которые будут выполнены в самом начале, разделенные с помощью \n" +"." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -70,7 +72,9 @@ msgctxt "machine_end_gcode description" msgid "" "G-code commands to be executed at the very end - separated by \n" "." -msgstr "Команды в G-коде, которые будут выполнены в самом конце, разделенные с помощью \n." +msgstr "" +"Команды в G-коде, которые будут выполнены в самом конце, разделенные с помощью \n" +"." #: fdmprinter.def.json msgctxt "material_guid label" @@ -82,6 +86,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "Идентификатор материала, устанавливается автоматически. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Диаметр" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Укажите диаметр используемой нити." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1057,6 +1071,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Зигзаг" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "Соединение верхних/нижних полигонов" + +#: 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 "Соединение верхних/нижних путей оболочки на участках, где они проходят рядом. При использовании концентрического шаблона активация данной настройки значительно сокращает время перемещения, но, учитывая возможность наличия соединений на полпути над заполнением, эта функция может ухудшить качество верхней поверхности." + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1137,6 +1161,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Компенсирует поток для печатаемых частей внутренних стен в местах, где уже напечатана стена." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "Минимальный поток для стенки" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "Минимальный разрешенный поток (в процентах) для линии стенки. Компенсация перекрытия стенок снижает поток для стенки при нахождении вблизи от существующей стенки. Стенки с потоком меньше указанного значения будут заменены посредством движения. При использовании этой настройки необходимо активировать компенсацию перекрытия стенок и печатать сначала внешнюю стенку, а затем — внутренние." + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "Предпочтительный откат" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "Если включено, вместо комбинга для движений, заменяющих стенки с потоком меньше минимального установленного порога, используется откат." + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1375,7 +1419,7 @@ msgstr "Границы разглаживания" #: fdmprinter.def.json msgctxt "ironing_inset description" msgid "A distance to keep from the edges of the model. Ironing all the way to the edge of the mesh may result in a jagged edge on your print." -msgstr "Расстояние от краёв модели. Разглаживание от края до края может выразится в загибании краёв при печати." +msgstr "Расстояние от краёв модели. Разглаживание от края до края может выразиться в загибании краёв при печати." #: fdmprinter.def.json msgctxt "speed_ironing label" @@ -1454,8 +1498,8 @@ msgstr "Шаблон заполнения" #: 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "Шаблон заполняющего материала печати. Линейное и зигзагообразное заполнение меняет направление на чередующихся слоях, снижая расходы на материал. Шаблоны «сетка», «треугольник», «шестигранник из треугольников», «куб», «восьмигранник», «четверть куба», «крестовое», «концентрическое» полностью печатаются в каждом слое. Шаблоны заполнения «куб», «четверть куба», «восьмигранник» меняются в каждом слое, чтобы обеспечить более равномерное распределение прочности в каждом направлении." +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 "Шаблон заполняющего материала печати. Линейное и зигзагообразное заполнение меняет направление на чередующихся слоях, снижая расходы на материал. Шаблоны «сетка», «треугольник», «шестигранник из треугольников», «куб», «восьмигранник», «четверть куба», «крестовое», «концентрическое» полностью печатаются в каждом слое. Шаблоны заполнения «гироид», «куб», «четверть куба» и «восьмигранник» меняются в каждом слое, чтобы обеспечить более равномерное распределение прочности в каждом направлении." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1502,11 +1546,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Концентрическое" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Концентрическое 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1522,6 +1561,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "Крестовое 3D" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "Гироид" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1532,6 +1576,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "Соединение мест пересечения шаблона заполнения и внутренних стенок с использованием линии, повторяющей контур внутренней стенки. Использование этой функции улучшает сцепление заполнения со стенками и снижает влияние заполнения на качество вертикальных поверхностей. Отключение этой функции снижает расход материала." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "Соединение полигонов заполнения" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "Соединение путей заполнения на участках, где они проходят рядом. Для шаблонов заполнения, состоящих из нескольких замкнутых полигонов, активация данной настройки значительно сокращает время перемещения." + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1562,6 +1616,30 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Расстояние перемещения шаблона заполнения по оси Y." +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "Множитель для линии заполнения" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "Преобразовывать каждую линию заполнения во множество линий. Дополнительные линии не пересекаются, а уклоняются от столкновения друг с другом. Благодаря этому заполнение становится более плотным, но время печати и расход материалов увеличиваются." + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "Количество дополнительных стенок заполнения" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" +"Добавление дополнительных стенок вокруг области заполнения. Эти стенки могут уменьшить провисание верхних/нижних линий оболочки, что уменьшает необходимое количество верхних/нижних слоев оболочки без ухудшения качества за счет небольшого увеличения количества материала.\n" +"Эта функция может сочетаться с соединением полигонов заполнения для соединения всего участка заполнения в один путь экструзии без необходимости в движениях или откатах в случае правильной настройки." + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1790,7 +1868,7 @@ msgstr "Температура сопла" #: 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 "Стандартная температура сопла, используемая при печати. Значением должна быть \"базовая\" температура для материала. Все другие температуры печати должны быть выражены смещениями от основного значения." +msgstr "Стандартная температура сопла, используемая при печати. Значением должна быть \"базовая\" температура для материала. Все другие температуры печати должны быть выражены смещениями от основного значения" #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1872,16 +1950,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "Температура стола, используемая при печати первого слоя." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Диаметр" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Укажите диаметр используемой нити." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2690,7 +2758,7 @@ msgstr "Рывок перемещения первого слоя" #: fdmprinter.def.json msgctxt "jerk_travel_layer_0 description" msgid "The acceleration for travel moves in the initial layer." -msgstr "Изменение максимальной мгновенной скорости, с которой происходят перемещения на первом слое." +msgstr "Ускорение для перемещения на первом слое." #: fdmprinter.def.json msgctxt "jerk_skirt_brim label" @@ -2719,8 +2787,8 @@ msgstr "Режим комбинга" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "Комбинг удерживает сопло при перемещении внутри уже напечатанных зон. Это выражается в небольшом увеличении пути, но уменьшает необходимость в откатах. При отключенном комбинге выполняется откат и сопло передвигается в следующую точку по прямой. Также есть возможность не применять комбинг над областями поверхностей крышки/дна, разрешив комбинг только над заполнением." +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "Комбинг удерживает сопло внутри напечатанных зон при перемещении. Это выражается в небольшом увеличении пути, но уменьшает необходимость в откатах. При отключенном комбинге выполняется откат материала, а сопло передвигается в следующую точку по прямой. Также можно не применять комбинг над верхними/нижними областями оболочки, разрешив комбинг только в области заполнения. Обратите внимание, что опция «В области заполнения» предполагает те же действия, что и опция «Не в оболочке» более ранних выпусков Cura." #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2737,6 +2805,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Не в оболочке" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "В области заполнения" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -2945,7 +3018,7 @@ msgstr "Обычная скорость вентилятора на слое" #: fdmprinter.def.json msgctxt "cool_fan_full_layer description" msgid "The layer at which the fans spin on regular fan speed. If regular fan speed at height is set, this value is calculated and rounded to a whole number." -msgstr "Слой, на котором вентилятор должен вращаться с обыкновенной скорость. Если определена обычная скорость для вентилятора на высоте, это значение вычисляется и округляется до целого." +msgstr "Слой, на котором вентилятор должен вращаться с обыкновенной скоростью. Если определена обычная скорость для вентилятора на высоте, это значение вычисляется и округляется до целого." #: fdmprinter.def.json msgctxt "cool_min_layer_time label" @@ -3117,11 +3190,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Концентрические" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Концентрические 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3182,6 +3250,56 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Дистанция между напечатанными линями структуры поддержек. Этот параметр вычисляется по плотности поддержек." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "Дистанция между линиями поддержки первого слоя" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "Дистанция между напечатанными линиями структуры поддержек первого слоя. Этот параметр вычисляется по плотности поддержек." + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "Направление линии заполнения поддержек" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "Ориентация шаблона заполнения для поддержек. Шаблон заполнения поддержек вращается в горизонтальной плоскости." + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "Разрешить кайму поддержек" + +#: 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 "Создайте кайму внутри участков заполнения поддержек первого слоя. Эта кайма печатается под поддержкой, а не вокруг нее. Включение этого параметра увеличивает адгезию поддержки к рабочему столу." + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "Ширина каймы поддержки" + +#: 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 "Ширина каймы для печати под поддержкой. При увеличении каймы улучшается адгезия к рабочему столу и увеличивается расход материала." + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "Количество линий каймы поддержки" + +#: 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 "Количество линий, используемых для каймы поддержки. При увеличении линий каймы улучшается адгезия к рабочему столу и увеличивается расход материала." + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3310,7 +3428,7 @@ msgstr "Степень заполнения поддержек" #: fdmprinter.def.json msgctxt "gradual_support_infill_steps description" msgid "Number of times to reduce the support infill density by half when getting further below top surfaces. Areas which are closer to top surfaces get a higher density, up to the Support Infill Density." -msgstr "Количество раз, на которое на половину можно уменьшать плотность заполнения поддержек при прохоже вглубь структуры от поверхности. Области ближе к оболочке имеют большую плотность, вплоть до значения \"Плотность заполнения поддержек\"." +msgstr "Количество раз, на которое на половину можно уменьшать плотность заполнения поддержек при проходе вглубь структуры от поверхности. Области ближе к оболочке имеют большую плотность, вплоть до значения \"Плотность заполнения поддержек\"." #: fdmprinter.def.json msgctxt "gradual_support_infill_step_height label" @@ -3472,11 +3590,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Концентрический" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Концентрический 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3512,11 +3625,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Концентрический" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Концентрический 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3552,16 +3660,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Концентрический" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Концентрический 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Зигзаг" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "Переопределение скорости вентилятора" + +#: 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 "Если включено, скорость охлаждающего вентилятора, используемого во время печати, изменяется для областей оболочки непосредственно над поддержкой." + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "Поддерживаемая скорость вентилятора для оболочки" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "Скорость вентилятора в процентах, с которой печатаются области оболочки непосредственно над поддержкой. Использование высоких значений скорости вентилятора может упростить снятие поддержки." + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3615,7 +3738,7 @@ msgstr "Будет поддерживать всё ниже объекта, ни #: fdmprinter.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" -msgstr "Прилипание к столу" +msgstr "Тип прилипания к столу" #: fdmprinter.def.json msgctxt "platform_adhesion description" @@ -3680,7 +3803,7 @@ msgstr "Подложка" #: fdmprinter.def.json msgctxt "adhesion_type option none" msgid "None" -msgstr "Отсутствует" +msgstr "Нет" #: fdmprinter.def.json msgctxt "adhesion_extruder_nr label" @@ -3712,7 +3835,9 @@ msgctxt "skirt_gap description" msgid "" "The horizontal distance between the skirt and the first layer of the print.\n" "This is the minimum distance. Multiple skirt lines will extend outwards from this distance." -msgstr "Горизонтальное расстояние между юбкой и первым слоем печати.\nМинимальное расстояние. Несколько линий юбки будут расширяться от этого расстояния." +msgstr "" +"Горизонтальное расстояние между юбкой и первым слоем печати.\n" +"Минимальное расстояние. Несколько линий юбки будут расширяться от этого расстояния." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3744,6 +3869,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "Количество линий, используемых для печати каймы. Большее количество линий каймы улучшает прилипание к столу, но уменьшает эффективную область печати." +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "Кайма заменяет поддержку" + +#: 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 "Принудительная печать каймы вокруг модели, даже если пространство в ином случае было бы занято поддержкой. При этом некоторые участки первого слоя поддержки заменяются участками каймы." + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -3886,8 +4021,8 @@ msgstr "Ширина линий нижнего слоя подложки. Она #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Дистанция между линиями подложки" +msgid "Raft Base Line Spacing" +msgstr "Дистанция между линиями нижнего слоя подложки" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4104,16 +4239,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Минимальный объём материала на каждый слой черновой башни, который требуется выдавить." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "Толщина черновой башни" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "Толщина полости черновой башни. Если толщина больше половины минимального объёма черновой башни, то результатом будет увеличение плотности башни." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4154,26 +4279,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "После печати черновой башни одним соплом, вытирает вытекший материал из другого сопла об эту башню." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Очистка сопла после переключения" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "После смены экструдера убираем на первой печатаемой части материал, вытекший из сопла. Выполняется безопасная медленная очистка на месте, где вытекший материал нанесёт наименьший ущерб качеству печатаемой поверхности." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "Объём очистки черновой башни" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "Объём материала, который будет выдавлен при очистке на черновой башне. Очистка полезна для компенсации недостатка материала из-за его вытекания при простое сопла." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4462,7 +4567,7 @@ msgstr "Сглаживает спиральные контуры для умен #: fdmprinter.def.json msgctxt "relative_extrusion label" msgid "Relative Extrusion" -msgstr "Отностительная экструзия" +msgstr "Относительная экструзия" #: fdmprinter.def.json msgctxt "relative_extrusion description" @@ -4659,6 +4764,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "График, объединяющий поток (в мм3 в секунду) с температурой (в градусах Цельсия)." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "Минимальная длина окружности полигона" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "Полигоны в разделенных слоях, длина окружности которых меньше указанной величины, будут отфильтрованы. Пониженные значения приводят к увеличению разрешения объекта за счет времени разделения. Это предназначено главным образом для принтеров SLA с высоким разрешением и миниатюрных 3D-моделей с множеством деталей." + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -4887,7 +5002,7 @@ msgstr "Максимальный угол спагетти заполнения" #: fdmprinter.def.json msgctxt "spaghetti_max_infill_angle description" msgid "The maximum angle w.r.t. the Z axis of the inside of the print for areas which are to be filled with spaghetti infill afterwards. Lowering this value causes more angled parts in your model to be filled on each layer." -msgstr "Максимальный угол по отношению к оси Z внутри печатаемого объёма для заполняемых областей. Уменьшение этого значения приводит к тому, что более наклонённый части вашей модели будут заполнены на каждом слое." +msgstr "Максимальный угол по отношению к оси Z внутри печатаемого объёма для заполняемых областей. Уменьшение этого значения приводит к тому, что более наклонённые части вашей модели будут заполнены на каждом слое." #: fdmprinter.def.json msgctxt "spaghetti_max_height label" @@ -5169,7 +5284,9 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "Расстояние движения вверх, при котором выдавливание идёт на половине скорости.\nЭто может улучшить прилипание к предыдущим слоям, не перегревая материал тех слоёв. Применяется только при каркасной печати." +msgstr "" +"Расстояние движения вверх, при котором выдавливание идёт на половине скорости.\n" +"Это может улучшить прилипание к предыдущим слоям, не перегревая материал тех слоёв. Применяется только при каркасной печати." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -5189,7 +5306,7 @@ msgstr "Падение (КП)" #: fdmprinter.def.json msgctxt "wireframe_fall_down description" msgid "Distance with which the material falls down after an upward extrusion. This distance is compensated for. Only applies to Wire Printing." -msgstr "Расстояние с которой материал падает вниз после восходящего выдавливания. Расстояние компенсируется. Применяется только при каркасной печати." +msgstr "Расстояние, с которого материал падает вниз после восходящего выдавливания. Расстояние компенсируется. Применяется только при каркасной печати." #: fdmprinter.def.json msgctxt "wireframe_drag_along label" @@ -5309,13 +5426,33 @@ msgstr "Разница между высотой следующего слоя #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold label" msgid "Adaptive layers threshold" -msgstr "Порог для адаптивных слове" +msgstr "Порог для адаптивных слоев" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Пороговое значение, при достижении которого будет использоваться меньший слой. Это число сравнивается с тангенсом наиболее крутого наклона в слое." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "Угол нависающей стенки" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "Стенки, нависающие под углом, который больше указанного, будут напечатаны с использованием настроек нависающей стенки. Если значение составляет 90, стенки не считаются нависающими." + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "Скорость печати нависающей стенки" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "Нависающие стенки будут напечатаны с данным процентным значением нормальной скорости печати." + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5346,16 +5483,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Если поддержка области оболочки составляет меньше указанного процентного значения от ее площади, печать должна быть выполнена с использованием настроек мостика. В противном случае печать осуществляется с использованием стандартных настроек оболочки." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Максимальное нависание стенки мостика" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "Максимальная разрешенная ширина области воздушного зазора ниже линии стенки перед печатью стенки с использованием настроек мостика. Выражается в процентах от ширины линии стенки. Если ширина воздушного зазора превышает указанное значение, линия стенки печатается с использованием настроек мостика. В противном случае линия стенки печатается с использованием стандартных настроек. Чем меньше это значение, тем вероятнее, что линии стенки с нависанием будут напечатаны с использованием настроек мостика." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5544,7 +5671,7 @@ msgstr "X позиция объекта" #: fdmprinter.def.json msgctxt "mesh_position_x description" msgid "Offset applied to the object in the x direction." -msgstr "Смещение, применяемое к объект по оси X." +msgstr "Смещение, применяемое к объекту по оси X." #: fdmprinter.def.json msgctxt "mesh_position_y label" @@ -5554,7 +5681,7 @@ msgstr "Y позиция объекта" #: fdmprinter.def.json msgctxt "mesh_position_y description" msgid "Offset applied to the object in the y direction." -msgstr "Смещение, применяемое к объект по оси Y." +msgstr "Смещение, применяемое к объекту по оси Y." #: fdmprinter.def.json msgctxt "mesh_position_z label" @@ -5564,7 +5691,7 @@ msgstr "Z позиция объекта" #: fdmprinter.def.json msgctxt "mesh_position_z description" msgid "Offset applied to the object in the z direction. With this you can perform what was used to be called 'Object Sink'." -msgstr "Смещение, применяемое к объект по оси Z. Это позволяет выполнять операцию, ранее известную как проваливание объекта под поверхность стола." +msgstr "Смещение, применяемое к объекту по оси Z. Это позволяет выполнять операцию, ранее известную как проваливание объекта под поверхность стола." #: fdmprinter.def.json msgctxt "mesh_rotation_matrix label" @@ -5574,7 +5701,75 @@ msgstr "Матрица вращения объекта" #: fdmprinter.def.json msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." -msgstr "Матрица преобразования, применяемая к модели при её загрузки из файла." +msgstr "Матрица преобразования, применяемая к модели при её загрузке из файла." + +#~ 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 happend midway over infill this feature can reduce the top surface quality." +#~ msgstr "Соединение верхних/нижних путей оболочки на участках, где они проходят рядом. При использовании концентрического шаблона активация данной настройки значительно сокращает время перемещения, но, учитывая возможность наличия соединений на полпути над заполнением, эта функция может ухудшить качество верхней оболочки." + +#~ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +#~ msgstr "Шаблон заполняющего материала печати. Линейное и зигзагообразное заполнение меняет направление на чередующихся слоях, снижая расходы на материал. Шаблоны «сетка», «треугольник», «шестигранник из треугольников», «куб», «восьмигранник», «четверть куба», «крестовое», «концентрическое» полностью печатаются в каждом слое. Шаблоны заполнения «куб», «четверть куба», «восьмигранник» меняются в каждом слое, чтобы обеспечить более равномерное распределение прочности в каждом направлении." + +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Концентрическое 3D" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "Комбинг удерживает сопло при перемещении внутри уже напечатанных зон. Это выражается в небольшом увеличении пути, но уменьшает необходимость в откатах. При отключенном комбинге выполняется откат и сопло передвигается в следующую точку по прямой. Также есть возможность не применять комбинг над областями поверхностей крышки/дна, разрешив комбинг только над заполнением." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Концентрические 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Концентрический 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Концентрический 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Концентрический 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Дистанция между линиями подложки" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "Толщина черновой башни" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "Толщина полости черновой башни. Если толщина больше половины минимального объёма черновой башни, то результатом будет увеличение плотности башни." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Очистка сопла после переключения" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "После смены экструдера убираем на первой печатаемой части материал, вытекший из сопла. Выполняется безопасная медленная очистка на месте, где вытекший материал нанесёт наименьший ущерб качеству печатаемой поверхности." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "Объём очистки черновой башни" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "Объём материала, который будет выдавлен при очистке на черновой башне. Очистка полезна для компенсации недостатка материала из-за его вытекания при простое сопла." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Максимальное нависание стенки мостика" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "Максимальная разрешенная ширина области воздушного зазора ниже линии стенки перед печатью стенки с использованием настроек мостика. Выражается в процентах от ширины линии стенки. Если ширина воздушного зазора превышает указанное значение, линия стенки печатается с использованием настроек мостика. В противном случае линия стенки печатается с использованием стандартных настроек. Чем меньше это значение, тем вероятнее, что линии стенки с нависанием будут напечатаны с использованием настроек мостика." #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." diff --git a/resources/i18n/tr_TR/cura.po b/resources/i18n/tr_TR/cura.po index bea45270fa..f801db7f78 100644 --- a/resources/i18n/tr_TR/cura.po +++ b/resources/i18n/tr_TR/cura.po @@ -5,16 +5,18 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" +"PO-Revision-Date: 2018-11-06 15:33+0100\n" "Last-Translator: Bothof \n" "Language-Team: Turkish\n" "Language: tr_TR\n" "MIME-Version: 1.0\n" "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" @@ -38,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "G-code dosyası" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "GCodeWriter metin dışı modu desteklemez." + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "Lütfen dışa aktarmadan önce G-code'u hazırlayın." + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -51,104 +64,57 @@ msgid "" "

{model_names}

\n" "

Find out how to ensure the best possible print quality and reliability.

\n" "

View print quality guide

" -msgstr "

Model boyutu ve model yapılandırması nedeniyle bir veya daha fazla 3D model optimum yazdırılamayabilir:

\n

{model_names}

\n

En iyi kalite ve güvenilirliği nasıl elde edeceğinizi öğrenin.

\n

Yazdırma kalitesi kılavuzunu görüntüleyin

" +msgstr "" +"

Model boyutu ve model yapılandırması nedeniyle bir veya daha fazla 3D model optimum yazdırılamayabilir:

\n" +"

{model_names}

\n" +"

En iyi kalite ve güvenilirliği nasıl elde edeceğinizi öğrenin.

\n" +"

Yazdırma kalitesi kılavuzunu görüntüleyin

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box ile yazdır" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box ile yazdır" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "Doodle3D Connect’e bağlanıyor" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "İptal Et" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "Doodle3D Connect’e veri gönderiliyor" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "Doodle3D Connect’e veri gönderilemiyor. Hala etkin olan başka bir iş var mı?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "Doodle3D Connect üzerinde veri depolanıyor" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "Doodle3D Connect’e dosya gönderildi" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "Connect'i aç.." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "Doodle3D Connect web arayüzünü aç" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "Değişiklik Günlüğünü Göster" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "Aygıt Yazılımını Güncelle" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "Düzleştirme aktif ayarları" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Profil düzleştirilmiş ve aktifleştirilmiştir." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USB yazdırma" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "USB ile yazdır" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "USB ile yazdır" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "USB ile bağlı" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "USB’den yazdırma devam ediyor, Cura’yı kapatmanız bu yazdırma işlemini durduracak. Emin misiniz?" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -171,7 +137,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "Sıkıştırılmış G-code Dosyası" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "GCodeGzWriter yazı modunu desteklemez." + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "Ultimaker Biçim Paketi" @@ -193,7 +164,7 @@ msgid "Save to Removable Drive {0}" msgstr "Çıkarılabilir Sürücüye Kaydediliyor {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Yazılacak dosya biçimleri mevcut değil!" @@ -202,7 +173,7 @@ msgstr "Yazılacak dosya biçimleri mevcut değil!" #, python-brace-format msgctxt "@info:progress Don't translate the XML tags !" msgid "Saving to Removable Drive {0}" -msgstr "Çıkarılabilir Sürücü {0} Üzerine Kaydediliyor " +msgstr "Çıkarılabilir Sürücü {0} Üzerine Kaydediliyor" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:94 msgctxt "@info:title" @@ -232,7 +203,7 @@ msgstr "Çıkarılabilir aygıta {0} kaydedilemedi: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "Hata" @@ -261,8 +232,8 @@ msgstr "Çıkarılabilir aygıtı çıkar {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "Uyarı" @@ -289,259 +260,269 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Çıkarılabilir Sürücü" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "Ağ üzerinden yazdır" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "Ağ üzerinden yazdır" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "Ağ üzerinden bağlandı." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "Ağ üzerinden bağlandı. Lütfen yazıcıya erişim isteğini onaylayın." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "Ağ üzerinden bağlandı. Yazıcıyı kontrol etmek için erişim yok." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "İstenen yazıcıya erişim. Lütfen yazıcı isteğini onaylayın" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "Kimlik doğrulama durumu" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "Kimlik Doğrulama Durumu" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "Yeniden dene" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "Erişim talebini yeniden gönder" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "Kabul edilen yazıcıya erişim" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "Bu yazıcıyla yazdırmaya erişim yok. Yazdırma işi gönderilemedi." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "Erişim Talep Et" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "Yazıcıya erişim talebi gönder" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "Yeni bir yazdırma işi başlatılamıyor." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." msgstr "Ultimaker’ın yapılandırmasında yazdırmayı başlatmayı imkansız kılan bir sorun var. Devam etmeden önce lütfen bu sorunu çözün." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "Uyumsuz yapılandırma" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "Seçilen yapılandırma ile yazdırmak istediğinizden emin misiniz?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Yazıcı yapılandırması veya kalibrasyonu ile Cura arasında eşleşme sorunu var. En iyi sonucu almak istiyorsanız her zaman PrintCore ve yazıcıya eklenen malzemeler için dilimleme yapın." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "Yeni işlerin gönderilmesi (geçici olarak) engellenmiştir, hala bir önceki yazdırma işi gönderiliyor." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "Veriler yazıcıya gönderiliyor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "Veri gönderiliyor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "İptal Et" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "{slot_number} yuvasına Printcore yüklenmedi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "{slot_number} yuvasına malzeme yüklenmedi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, python-brace-format msgctxt "@label" msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" msgstr "Farklı PrintCore (Cura: {cura_printcore_name}, Yazıcı: ekstruder {extruder_id} için {remote_printcore_name}) seçildi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "Farklı malzeme (Cura: {0}, Yazıcı: {1}), ekstrüder {2} için seçildi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "Yazıcınız ile eşitleyin" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "Cura’da geçerli yazıcı yapılandırmanızı kullanmak istiyor musunuz?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "Yazıcınızda bulunan PrintCore’lar ve/veya malzemeler geçerli projenizde bulunandan farklı. En iyi sonucu almak istiyorsanız, her zaman PrintCore ve yazıcıya eklenen malzemeler için dilimleme yapın." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" -msgstr "Ağ üzerinden bağlandı." +msgstr "Ağ üzerinden bağlandı" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "Yazdırma işi yazıcıya başarıyla gönderildi." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "Veri Gönderildi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "Monitörde Görüntüle" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "{printer_name}, '{job_name}' yazdırmayı tamamladı." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "Yazdırma işi '{job_name}' tamamlandı." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "Baskı tamamlandı" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Ağ ile Bağlan" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Görüntüle" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "Güncelleme bilgilerine erişilemedi." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "{machine_name} adlı cihazınız için yeni özellikler var! Yazıcınızın fabrika yazılımını güncellemeniz önerilir." -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "Yeni %s bellenimi mevcut" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "Nasıl güncellenir" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "Güncelleme bilgilerine erişilemedi." - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Katman görünümü" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" -msgstr "Tel Yazma etkinleştirildiğinde, Cura katmanları doğru olarak görüntülemez." +msgstr "Tel Yazma etkinleştirildiğinde, Cura katmanları doğru olarak görüntülemez" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "Simülasyon Görünümü" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "GCode Değiştir" @@ -555,32 +536,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "Desteklerin yazdırılmadığı bir hacim oluşturun." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura anonimleştirilmiş kullanım istatistikleri toplar." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "Veri Toplanıyor" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "Daha fazla bilgi" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." -msgstr "Cura’nın gönderdiği veriler hakkında daha fazla bilgi alın" +msgstr "Cura’nın gönderdiği veriler hakkında daha fazla bilgi alın." -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "İzin Verme" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "Programın gelecek sürümlerinin iyileştirilmesine yardımcı olmak için Cura’ya anonimleştirilmiş kullanım istatistikleri gönderme izni verin. Tercih ve ayarlarınızın bazıları, Cura sürümü ve dilimlere ayırdığınız modellerin sağlaması gönderilir." @@ -590,18 +571,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04 profilleri" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Blender dosyası" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "\"{}\" quality!\nFell back to \"{}\" kullanarak dışarı aktarım yapılamadı." - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -627,49 +596,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF Resmi" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "Mevcut malzeme, seçilen makine veya yapılandırma ile uyumlu olmadığından mevcut malzeme ile dilimlenemedi." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "Dilimlenemedi" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "Geçerli ayarlarla dilimlenemiyor. Şu ayarlarda hata var: {0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "Modele özgü ayarlar nedeniyle dilimlenemedi. Şu ayarlar bir veya daha fazla modelde hataya yol açıyor: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "İlk direk veya ilk konum(lar) geçersiz olduğu için dilimlenemiyor." -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "Etkisizleştirilmiş Extruder %s ile ilgili nesneler olduğundan dilimleme yapılamıyor." + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "Modeller yapı hacmine sığmadığı için dilimlenecek bir şey yok. Lütfen sığdırmak için modelleri ölçeklendirin veya döndürün." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "Katmanlar İşleniyor" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "Bilgi" @@ -677,7 +653,7 @@ msgstr "Bilgi" #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/__init__.py:14 msgctxt "@label" msgid "Per Model Settings" -msgstr "Model Başına Ayarlar " +msgstr "Model Başına Ayarlar" #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/__init__.py:15 msgctxt "@info:tooltip" @@ -685,29 +661,40 @@ msgid "Configure Per Model Settings" msgstr "Model Başına Ayarları Yapılandır" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "Önerilen Ayarlar" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "Özel" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF Dosyası" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "Nozül" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "Proje dosyası {0} bilinmeyen bir makine tipi içeriyor: {1}. Makine alınamıyor. Bunun yerine modeller alınacak." + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "Proje Dosyası Aç" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -718,18 +705,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G Dosyası" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-code ayrıştırma" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "G-code Ayrıntıları" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Dosya göndermeden önce g-code’un yazıcınız ve yazıcı yapılandırmanız için uygun olduğundan emin olun. G-code temsili doğru olmayabilir." @@ -740,27 +727,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Cura Profili" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF dosyası" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Cura Projesi 3MF dosyası" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "3mf dosyasını yazarken hata oluştu." + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "Yükseltmeleri seçin" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "Aygıt Yazılımını Yükselt" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -771,79 +758,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "Yapı levhasını dengele" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "Dış Duvar" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "İç Duvarlar" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "Yüzey Alanı" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "Dolgu" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "Destek Dolgusu" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "Destek Arayüzü" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "Destek" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "Etek" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "Hareket" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "Geri Çekmeler" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "Diğer" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "Bilinmiyor" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "Önceden dilimlenmiş dosya {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "Giriş başarısız" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "Dosya Zaten Mevcut" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -855,23 +842,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "Geçersiz kılınmadı" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "Seçilen malzeme, seçilen makine veya yapılandırma ile uyumlu değil." -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "Uyumsuz Malzeme" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "Ayarlar, ekstruderlerin mevcut kullanılabilirliğine uyacak şekilde değiştirildi: [%s]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "Ayarlar güncellendi" @@ -900,8 +887,6 @@ msgid "Export succeeded" msgstr "Dışa aktarma başarılı" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" @@ -909,58 +894,70 @@ msgstr "{0} dosyasından profil içe aktarımı başarısı #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:190 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" msgstr "{0} dosyasında içe aktarılabilecek özel profil yok" +#: /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 "{0} dosyasından profil içe aktarımı başarısız oldu:" + #: /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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." -msgstr "Bu profil {0} yanlış veri içermekte, içeri aktarılamadı." +msgstr "Bu {0} profili yanlış veri içeriyor, içeri aktarılamadı." #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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 "{0} profilinde tanımlanan makine ({1}), mevcut makinenizle ({2}) eşleşmiyor, içe aktarılamadı." +msgstr "{0} ({1}) profilinde tanımlanan makine, mevcut makineniz ({2}) ile eşleşmiyor, içe aktarılamadı." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "{0} dosyasından profil içe aktarımı başarısız oldu:" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Profil başarıyla içe aktarıldı {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "Dosya {0} geçerli bir profil içermemekte." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "Profil {0} öğesinde bilinmeyen bir dosya türü var veya profil bozuk." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "Özel profil" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Profilde eksik bir kalite tipi var." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "Mevcut yapılandırma için bir kalite tipi {0} bulunamıyor." -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -987,42 +984,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Tüm Dosyalar (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "Özel Malzeme" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "Özel" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "Portalın yazdırılan modeller ile çarpışmasını önlemek için yapı hacmi yüksekliği “Sıralamayı Yazdır” ayarı nedeniyle azaltıldı." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "Yapı Disk Bölümü" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "Kullanıcı veri dizininden arşiv oluşturulamadı: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "Yedekle" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "Uygun veri veya meta veri olmadan Cura yedeği geri yüklenmeye çalışıldı." -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "Geçerli sürümünüzle eşleşmeyen bir Cura yedeği geri yüklenmeye çalışıldı." @@ -1033,32 +1030,32 @@ msgid "Multiplying and placing objects" msgstr "Nesneler çoğaltılıyor ve yerleştiriliyor" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "Nesne Yerleştiriliyor" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Yapılan hacim içinde tüm nesneler için konum bulunamadı" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "Nesneler için yeni konum bulunuyor" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "Konumu Buluyor" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "Konum Bulunamıyor" @@ -1076,7 +1073,12 @@ msgid "" "

Backups can be found in the configuration folder.

\n" "

Please send us this Crash Report to fix the problem.

\n" " " -msgstr "

Ultimaker Cura doğru görünmeyen bir şeyle karşılaştı.

\n

Başlatma esnasında kurtarılamaz bir hata ile karşılaştık. Muhtemelen bazı hatalı yapılandırma dosyalarından kaynaklanıyordu. Yapılandırmanızı yedekleyip sıfırlamanızı öneriyoruz.

\n

Yedekler yapılandırma klasöründe bulunabilir.

\n

Sorunu düzeltmek için lütfen bu Çökme Raporunu bize gönderin.

\n " +msgstr "" +"

Ultimaker Cura doğru görünmeyen bir şeyle karşılaştı.

\n" +"

Başlatma esnasında kurtarılamaz bir hata ile karşılaştık. Muhtemelen bazı hatalı yapılandırma dosyalarından kaynaklanıyordu. Yapılandırmanızı yedekleyip sıfırlamanızı öneriyoruz.

\n" +"

Yedekler yapılandırma klasöründe bulunabilir.

\n" +"

Sorunu düzeltmek için lütfen bu Çökme Raporunu bize gönderin.

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:102 msgctxt "@action:button" @@ -1109,7 +1111,10 @@ msgid "" "

A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem

\n" "

Please use the \"Send report\" button to post a bug report automatically to our servers

\n" " " -msgstr "

Cura’da onarılamaz bir hata oluştu. Lütfen sorunu çözmek için bize Çökme Raporunu gönderin

\n

Sunucularımıza otomatik olarak bir hata raporu yüklemek için lütfen \"Rapor gönder\" düğmesini kullanın

\n " +msgstr "" +"

Cura’da onarılamaz bir hata oluştu. Lütfen sorunu çözmek için bize Çökme Raporunu gönderin

\n" +"

Sunucularımıza otomatik olarak bir hata raporu yüklemek için lütfen \"Rapor gönder\" düğmesini kullanın

\n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:177 msgctxt "@title:groupbox" @@ -1189,223 +1194,233 @@ msgctxt "@action:button" msgid "Send report" msgstr "Rapor gönder" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Makineler yükleniyor..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Görünüm ayarlanıyor..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Arayüz yükleniyor..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f mm" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "Aynı anda yalnızca bir G-code dosyası yüklenebilir. {0} içe aktarma atlandı" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "G-code yüklenirken başka bir dosya açılamaz. {0} içe aktarma atlandı" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Seçilen model yüklenemeyecek kadar küçüktü." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "Makine Ayarları" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "Yazıcı" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "Yazıcı Ayarları" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (Genişlik)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Derinlik)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Yükseklik)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "Yapı levhası şekli" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "Merkez nokta" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "Isıtılmış yatak" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "G-code türü" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "Yazıcı Başlığı Ayarları" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Yazıcı başlığının solundan nozülün ortasına kadar olan mesafe. “Birer birer” çıktı alırken önceki çıktılar ile yazıcı başlığının çakışmasını önlemek için kullanılır." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Yazıcı başlığının ön kısmından nozülün ortasına kadar olan mesafe. “Birer birer” çıktı alırken önceki çıktılar ile yazıcı başlığının çakışmasını önlemek için kullanılır." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X maks" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Yazıcı başlığının sağından nozülün ortasına kadar olan mesafe. “Birer birer” çıktı alırken önceki çıktılar ile yazıcı başlığının çakışmasını önlemek için kullanılır." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y maks" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "Yazıcı başlığının arkasından nozülün ortasına kadar olan mesafe. “Birer birer” çıktı alırken önceki çıktılar ile yazıcı başlığının çakışmasını önlemek için kullanılır." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "Portal yüksekliği" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "Nozül ucu ve portal sistemi (X ve Y aksları) arasındaki yükseklik farkı. “Birer birer” çıktı alırken önceki çıktılar ile portalın çakışmasını önlemek için kullanılır." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "Ekstrüder Sayısı" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "G-code’u Başlat" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "Başlangıçta yürütülecek G-code komutları." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "G-code’u Sonlandır" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "Bitişte yürütülecek G-code komutları." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "Nozül Ayarları" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "Nozzle boyutu" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "Uyumlu malzeme çapı" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "Yazıcı tarafından desteklenen nominal filaman çapı. Tam çap malzeme ve/veya profil tarafından etkisiz kılınacaktır." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "Nozül X ofseti" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Nozül Y ofseti" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "Soğutma Fanı Numarası" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "Ekstruder G-Code'u Başlatma" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "Ekstruder G-Code'u Sonlandırma" @@ -1425,12 +1440,20 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "Cura Paket veri tabanına bağlanılamadı. Lütfen bağlantınızı kontrol edin." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "Eklentiler" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "Malzemeler" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1446,8 +1469,14 @@ msgctxt "@label" msgid "Author" msgstr "Yazar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "İndirmeler" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "Bilinmiyor" @@ -1480,17 +1509,57 @@ msgctxt "@action:button" msgid "Back" msgstr "Geri" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "Kaldırmayı onayla" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "Kullanımda olan materyalleri ve/veya profilleri kaldırıyorsunuz. Onay verirseniz aşağıdaki materyaller/profiller varsayılan değerlerine sıfırlanacaktır." + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "Malzemeler" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "Profiller" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "Onayla" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "Pakette değişikliklerin geçerli olması için Cura’yı yeniden başlatmalısınız." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "Cura’dan Çıkın" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "Topluluk Katkıları" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "Topluluk Eklentileri" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "Genel Materyaller" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "Yüklü" @@ -1521,7 +1590,10 @@ msgid "" "This plugin contains a license.\n" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" -msgstr "Bu eklenti bir lisans içerir.\nBu eklentiyi yüklemek için bu lisansı kabul etmeniz gerekir.\nAşağıdaki koşulları kabul ediyor musunuz?" +msgstr "" +"Bu eklenti bir lisans içerir.\n" +"Bu eklentiyi yüklemek için bu lisansı kabul etmeniz gerekir.\n" +"Aşağıdaki koşulları kabul ediyor musunuz?" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:54 msgctxt "@action:button" @@ -1533,12 +1605,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "Reddet" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "Öne Çıkan" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "Uyumluluk" @@ -1548,10 +1620,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "Paketler alınıyor..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "İletişim" +msgid "Website" +msgstr "Web sitesi" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "E-posta" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1564,48 +1641,88 @@ msgid "Changelog" msgstr "Değişiklik Günlüğü" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "Kapat" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "Aygıt Yazılımını Güncelle" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "Aygıt yazılımı doğrudan 3B yazıcı üzerinden çalışan bir yazılım parçasıdır. Bu aygıt yazılımı adım motorlarını kontrol eder, sıcaklığı düzenler ve sonunda yazıcının çalışmasını sağlar." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "Yeni yazıcıları olan aygıt yazılımı gönderimi yararlı olmaktadır, ancak yeni sürümler daha fazla özellik ve geliştirmeye eğilimlidir." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "Aygıt Yazılımını otomatik olarak yükselt" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "Özel Aygıt Yazılımı Yükle" + +#: /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 "Yazıcı ile bağlantı kurulmadığı için aygıt yazılımı güncellenemiyor." + +#: /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 "Yazıcı bağlantısı aygıt yazılımını yükseltmeyi desteklemediği için aygıt yazılımı güncellenemiyor." + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "Özel aygıt yazılımı seçin" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "Aygıt Yazılımı Güncellemesi" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "Aygıt yazılımı güncelleniyor." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "Aygıt yazılımı güncellemesi tamamlandı." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "Bilinmeyen bir hata nedeniyle aygıt yazılımı güncellemesi başarısız oldu." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "Bir iletişim hatası nedeniyle aygıt yazılımı güncellemesi başarısız oldu." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "Bir girdi/çıktı hatası nedeniyle aygıt yazılımı güncellemesi başarısız oldu." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Eksik aygıt yazılımı nedeniyle aygıt yazılımı güncellemesi başarısız oldu." @@ -1615,356 +1732,421 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "Kullanıcı Anlaşması" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "Mevcut Bağlantı" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "Bu yazıcı/grup Cura’ya zaten eklenmiş. Lütfen başka bir yazıcı/grup seçin." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Ağ Yazıcısına Bağlan" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" "\n" "Select your printer from the list below:" -msgstr "Yazıcınıza ağ üzerinden doğrudan bağlamak için, lütfen yazıcınızın ağ kablosu kullanan bir ağa bağlı olduğundan emin olun veya yazıcınızı WiFi ağına bağlayın. Cura'ya yazıcınız ile bağlanamıyorsanız g-code dosyalarını yazıcınıza aktarmak için USB sürücüsü kullanabilirsiniz.\n\nAşağıdaki listeden yazıcınızı seçin:" +msgstr "" +"Yazıcınıza ağ üzerinden doğrudan bağlamak için, lütfen yazıcınızın ağ kablosu kullanan bir ağa bağlı olduğundan emin olun veya yazıcınızı WiFi ağına bağlayın. Cura'ya yazıcınız ile bağlanamıyorsanız g-code dosyalarını yazıcınıza aktarmak için USB sürücüsü kullanabilirsiniz.\n" +"\n" +"Aşağıdaki listeden yazıcınızı seçin:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "Ekle" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "Düzenle" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "Kaldır" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "Yenile" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Yazıcınız listede yoksa ağ yazdırma sorun giderme kılavuzunu okuyun" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "Tür" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "Üretici yazılımı sürümü" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "Adres" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "Bu yazıcı, Ultimaker 3 yazıcı grubunu barındırmak için ayarlı değildir." +msgid "This printer is not set up to host a group of printers." +msgstr "Bu yazıcı, bir yazıcı grubunu barındırmak için ayarlı değildir." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "Bu yazıcı, %1 Ultimaker 3 yazıcı grubunun ana makinesidir." +msgid "This printer is the host for a group of %1 printers." +msgstr "Bu yazıcı, %1 yazıcı grubunun ana makinesidir." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "Bu adresteki yazıcı henüz yanıt vermedi." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "Bağlan" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "Yazıcı Adresi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "IP adresini veya yazıcınızın ağ üzerindeki ana bilgisayar adını girin." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "Tamam" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "Ağ üzerinden yazdır" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "Yazıcı seçimi" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "Yazdır" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1, bağlı Ultimaker 3 yazıcı grubunu barındırmak için ayarlı değildir" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "Ağ üzerinden yazdır" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "Yazıcı Ekle/Kaldır" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" +msgstr "Yazıcı seçimi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "Yazdırma işlerini varsayılan web tarayıcınızda açar." +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" +msgstr "Mevcut değil" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "Yazdırma işlerini görüntüle" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" +msgstr "Ulaşılamıyor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "Yazdırmaya hazırlanıyor" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "Yazdırma" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" msgstr "Mevcut" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "Yazıcı bağlantısı koptu" +msgid "Aborted" +msgstr "Durduruldu" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "Mevcut değil" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "Bilinmiyor" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "Devre dışı" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "Rezerve edildi" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "Tamamlandı" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "Yazdırmaya hazırlanıyor" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" -msgstr "Eylem gerekli" +msgid "Preparing" +msgstr "Hazırlanıyor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" -msgstr "Duraklatıldı" +msgid "Pausing" +msgstr "Duraklatılıyor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "Devam ediliyor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" -msgstr "Yazdırma durduruldu" +msgid "Action required" +msgstr "Eylem gerekli" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "Yazdırma işleri kabul edilmiyor" +msgid "Waiting for: Unavailable printer" +msgstr "Bekleniyor: Kullanım dışı yazıcı" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "Şu tarihlerde bitirir: " +msgid "Waiting for: First available" +msgstr "Bekleniyor: İlk mevcut olan" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "Yapı levhasını temizle" +msgid "Waiting for: " +msgstr "Bekleniyor: " -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "Yapılandırma değişikliğini bekliyor" +msgid "Configuration change" +msgstr "Yapılandırma değişikliği" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "Yazdırma görevleri" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "Yazdırma" +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "Atanan yazıcı %1, aşağıdaki yapılandırma değişikliklerini gerektiriyor:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "Yazıcı %1 atandı, fakat iş bilinmeyen bir malzeme yapılandırması içeriyor." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 +msgctxt "@label" +msgid "Change material %1 from %2 to %3." +msgstr "%2 olan %1 malzemesini %3 yapın." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:378 +msgctxt "@label" +msgid "Load %3 as material %1 (This cannot be overridden)." +msgstr "%3 malzemesini %1 malzemesi olarak yükleyin (Bu işlem geçersiz kılınamaz)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "%2 olan %1 print core'u %3 yapın." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:384 +msgctxt "@label" +msgid "Change build plate to %1 (This cannot be overridden)." +msgstr "Baskı tablasını %1 olarak değiştirin (Bu işlem geçersiz kılınamaz)." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "Geçersiz kıl" + +#: /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 "Bir yazdırma işini uyumsuz bir yapılandırmayla başlatmak 3D yazıcınıza zarar verebilir. Yapılandırmayı geçersiz kılmak ve %1 öğesini yazdırmak istediğinizden emin misiniz?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:435 +msgctxt "@window:title" +msgid "Override configuration configuration and start print" +msgstr "Yapılandırmayı geçersiz kıl ve yazdırmayı başlat" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "Cam" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "Alüminyum" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "Kuyruğu yönet" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "Kuyrukta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "Yazıcılar" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "Yazdırma" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "Yazıcıları görüntüle" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "Yazıcıları yönet" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "En üste taşı" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "Sil" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "Devam et" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "Duraklat" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "Durdur" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "%1 öğesini kuyruğun en üstüne taşımak ister misiniz?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "Yazdırma işini en üste taşı" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "%1 öğesini silmek istediğinizden emin misiniz?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "Yazdırma işini sil" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "%1 öğesini durdurmak istediğinizden emin misiniz?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "Yazdırmayı durdur" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "Yazıcıya Bağlan" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "Yazıcı yapılandırmasını Cura’ya yükle" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "Yapılandırmayı Etkinleştir" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "Yazıcı yapılandırmasını Cura’ya yükle" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "Renk şeması" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "Malzeme Rengi" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "Çizgi Tipi" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "Besleme hızı" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "Katman kalınlığı" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "Uyumluluk Modu" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "Geçişleri Göster" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "Yardımcıları Göster" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "Kabuğu Göster" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "Dolguyu Göster" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "Yalnızca Üst Katmanları Göster" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "En Üstteki 5 Ayrıntılı Katmanı Göster" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "Üst / Alt" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "İç Duvar" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "min" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "maks" @@ -1979,17 +2161,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "Son İşleme Dosyaları" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "Dosya ekle" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "Ayarlar" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "Etkin son işleme dosyalarını değiştir" @@ -2077,60 +2259,60 @@ msgstr "Daha koyu olan daha yüksek" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:149 msgctxt "@info:tooltip" msgid "The amount of smoothing to apply to the image." -msgstr "Resme uygulanacak düzeltme miktarı" +msgstr "Resme uygulanacak düzeltme miktarı." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:154 msgctxt "@action:label" msgid "Smoothing" msgstr "Düzeltme" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "Ağ Tipi" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "Normal model" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "Destek olarak yazdır" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "Diğer modellerle örtüşmeyi destekleme" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "Diğer modellerle örtüşme ayarlarını değiştir" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "Diğer modellerle doldurma ayarlarını değiştir" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "Ayarları seçin" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "Bu modeli Özelleştirmek için Ayarları seçin" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "Filtrele..." -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "Tümünü göster" @@ -2152,13 +2334,13 @@ msgid "Create new" msgstr "Yeni oluştur" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "Özet - Cura Projesi" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "Yazıcı ayarları" @@ -2175,18 +2357,19 @@ msgid "Update" msgstr "Güncelle" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "Tür" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "Yazıcı Grubu" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "Profil ayarları" @@ -2198,19 +2381,20 @@ msgstr "Profildeki çakışma nasıl çözülmelidir?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "İsim" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "Profilde değil" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2240,7 +2424,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "Malzemedeki çakışma nasıl çözülmelidir?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "Görünürlük ayarı" @@ -2251,13 +2435,13 @@ msgid "Mode" msgstr "Mod" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "Görünür ayarlar:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 / %2" @@ -2313,36 +2497,6 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "Sonraki Konuma Taşı" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "Aygıt Yazılımını Yükselt" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "Aygıt yazılımı doğrudan 3B yazıcı üzerinden çalışan bir yazılım parçasıdır. Bu aygıt yazılımı adım motorlarını kontrol eder, sıcaklığı düzenler ve sonunda yazıcının çalışmasını sağlar." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "Yeni yazıcıları olan aygıt yazılımı gönderimi yararlı olmaktadır, ancak yeni sürümler daha fazla özellik ve geliştirmeye eğilimlidir." - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "Aygıt Yazılımını otomatik olarak yükselt" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "Özel Aygıt Yazılımı Yükle" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "Özel aygıt yazılımı seçin" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" @@ -2488,29 +2642,13 @@ msgstr "Hazırlanıyor..." #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:154 msgctxt "@label:MonitorStatus" msgid "Please remove the print" -msgstr "Lütfen yazıcıyı çıkarın " - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "Durdur" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "Devam et" +msgstr "Lütfen yazıcıyı çıkarın" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "Yazdırmayı Durdur" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "Yazdırmayı durdur" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2526,7 +2664,9 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "Bazı profil ayarlarını özelleştirdiniz.\nBu ayarları kaydetmek veya iptal etmek ister misiniz?" +msgstr "" +"Bazı profil ayarlarını özelleştirdiniz.\n" +"Bu ayarları kaydetmek veya iptal etmek ister misiniz?" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -2544,19 +2684,17 @@ msgid "Customized" msgstr "Özelleştirilmiş" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Her zaman sor" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "İptal et ve bir daha sorma" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "Kaydet ve bir daha sorma" @@ -2576,101 +2714,179 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "Yeni Profil Oluştur" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "Bilgi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "Çap Değişikliğini Onayla" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" msgstr "Yeni filaman çapı %1 mm olarak ayarlandı ve bu değer, geçerli ekstrüder ile uyumlu değil. Devam etmek istiyor musunuz?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "Görünen Ad" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "Marka" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "Malzeme Türü" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "Renk" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "Özellikler" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "Yoğunluk" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "Çap" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "Filaman masrafı" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "Filaman ağırlığı" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "Filaman uzunluğu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "Metre başına maliyet" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Bu malzeme %1’e bağlıdır ve özelliklerinden bazılarını paylaşır." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "Malzemeyi Ayır" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "Tanım" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "Yapışma Bilgileri" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "Yazdırma ayarları" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "Etkinleştir" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "Oluştur" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "Çoğalt" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "İçe Aktar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "Dışa Aktar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "Yazıcı" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "Kaldırmayı Onayla" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "%1’i kaldırmak istediğinizden emin misiniz? Bu eylem geri alınamaz!" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "Malzemeyi İçe Aktar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "Malzeme %1 dosyasına içe aktarılamadı: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "Malzeme %1 dosyasına başarıyla içe aktarıldı" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "Malzemeyi Dışa Aktar" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "Malzemenin %1 dosyasına dışa aktarımı başarısız oldu: %2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "Malzeme %1 dosyasına başarıyla dışa aktarıldı" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2707,289 +2923,287 @@ msgid "Unit" msgstr "Birim" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "Genel" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "Arayüz" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "Dil:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "Para Birimi:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "Tema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "Bu değişikliklerinin geçerli olması için uygulamayı yeniden başlatmanız gerekecektir." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Ayarlar değiştirilirken otomatik olarak dilimle." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "Otomatik olarak dilimle" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "Görünüm şekli" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Modelin desteklenmeyen alanlarını kırmızı ile gösterin. Destek alınmadan bu alanlar düzgün bir şekilde yazdırılmayacaktır." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "Dışarıda kalan alanı göster" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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 "Bir model seçildiğinde bu model görüntünün ortasında kalacak şekilde kamera hareket eder." +msgstr "Bir model seçildiğinde bu model görüntünün ortasında kalacak şekilde kamera hareket eder" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Öğeyi seçince kamerayı ortalayın" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "Cura’nın varsayılan yakınlaştırma davranışı tersine çevrilsin mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Kamera yakınlaştırma yönünü ters çevir." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "Yakınlaştırma farenin hareket yönüne uygun olsun mu?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Farenin hareket yönüne göre yakınlaştır" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "Platformun üzerindeki öğeler kesişmemeleri için hareket ettirilmeli mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Modellerin birbirinden ayrı olduğundan emin olduğundan emin olun" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "Platformun üzerindeki modeller yapı levhasına değmeleri için indirilmeli mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Modelleri otomatik olarak yapı tahtasına indirin" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "G-code okuyucuda uyarı mesajı göster." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "G-code okuyucuda uyarı mesajı" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "Katman, uyumluluk moduna zorlansın mı?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Katman görünümünü uyumluluk moduna zorla (yeniden başlatma gerekir)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "Dosyaların açılması ve kaydedilmesi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "Modeller çok büyükse yapı hacmine göre ölçeklendirilmeli mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "Büyük modelleri ölçeklendirin" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "Bir modelin birimi milimetre değil de metre ise oldukça küçük görünebilir. Bu modeller ölçeklendirilmeli mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Çok küçük modelleri ölçeklendirin" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "Yüklendikten sonra modeller seçilsin mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Yüklendiğinde modelleri seç" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "Yazıcı adına bağlı bir ön ek otomatik olarak yazdırma işinin adına eklenmeli mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Makine ön ekini iş adına ekleyin" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Bir proje dosyasını kaydederken özet gösterilmeli mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Projeyi kaydederken özet iletişim kutusunu göster" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Bir proje dosyası açıldığında varsayılan davranış" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Bir proje dosyası açıldığında varsayılan davranış: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" +msgid "Always ask me this" msgstr "Her zaman sor" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Her zaman proje olarak aç" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "Her zaman modelleri içe aktar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "Bir profil üzerinde değişiklik yapıp farklı bir profile geçtiğinizde, değişikliklerin kaydedilmesini isteyip istemediğinizi soran bir iletişim kutusu açılır. Alternatif olarak bu işleve yönelik varsayılan bir davranış seçebilir ve bu iletişim kutusunun bir daha görüntülenmemesini tercih edebilirsiniz." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "Profilin Üzerine Yaz" +msgid "Profiles" +msgstr "Profiller" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "Farklı bir profile geçerken değişen ayar değerleriyle ilgili varsayılan davranış: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "Değiştirilen ayarları her zaman at" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "Değiştirilen ayarları her zaman yeni profile taşı" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "Gizlilik" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "Cura, program başladığında güncellemeleri kontrol etmeli mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Başlangıçta güncellemeleri kontrol edin" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "Yazdırmanızdaki anonim veriler Ultimaker’a gönderilmeli mi? Unutmayın; hiçbir model, IP adresi veya diğer kişiye özgü bilgiler gönderilmez veya saklanmaz." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(Anonim) yazdırma bilgisi gönder" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "Daha fazla bilgi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "Deneysel" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Çok yapılı levha fonksiyonelliğini kullan" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Çok yapılı levha fonksiyonelliğini kullan (yeniden başlatma gerektirir)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "Yeni yüklenen modeller yapılı levhaya mı yerleştirilsin? Çok yapılı levha ile birlikte kullanılır (DENEYSEL)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "Yüklemenin ardından nesneleri yerleştirme" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "Yazıcılar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "Etkinleştir" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3007,7 +3221,7 @@ msgid "Connection:" msgstr "Bağlantı:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "Yazıcı bağlı değil." @@ -3033,7 +3247,7 @@ msgid "Aborting print..." msgstr "Yazdırma durduruluyor..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "Profiller" @@ -3048,18 +3262,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "Çoğalt" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "İçe Aktar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "Dışa Aktar" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3070,18 +3272,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Profili Çoğalt" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "Kaldırmayı Onayla" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "%1’i kaldırmak istediğinizden emin misiniz? Bu eylem geri alınamaz!" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3102,228 +3292,202 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Yazıcı: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "Korunan profiller" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "Özel profiller" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Profili geçerli ayarlar/geçersiz kılmalar ile güncelle" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "Geçerli değişiklikleri iptal et" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "Bu profil yazıcının belirlediği varsayılan ayarları kullanır; dolayısıyla aşağıdaki listede bulunan ayarları/geçersiz kılmaları içermez." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Geçerli ayarlarınız seçilen profille uyumlu." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "Küresel Ayarlar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "Malzemeler" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "Oluştur" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "Çoğalt" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "Malzemeyi İçe Aktar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr "Malzeme %1 dosyasına içe aktarılamadı: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "Malzeme %1 dosyasına başarıyla içe aktarıldı" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "Malzemeyi Dışa Aktar" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "Malzemenin %1 dosyasına dışa aktarımı başarısız oldu: %2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "Malzeme %1 dosyasına başarıyla dışa aktarıldı" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "Yazıcı" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "Yazıcı Ekle" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "Yazıcı Adı:" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "Yazıcı Ekle" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "Başlıksız" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "Cura hakkında" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "sürüm: %1" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "Kaynaşık filaman 3B yazdırma için kalıcı çözüm." -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" "Cura proudly uses the following open source projects:" -msgstr "Cura, topluluk iş birliği ile Ultimaker B.V. tarafından geliştirilmiştir.\nCura aşağıdaki açık kaynak projelerini gururla kullanmaktadır:" +msgstr "" +"Cura, topluluk iş birliği ile Ultimaker B.V. tarafından geliştirilmiştir.\n" +"Cura aşağıdaki açık kaynak projelerini gururla kullanmaktadır:" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "Grafik kullanıcı arayüzü" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "Uygulama çerçevesi" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "G-code oluşturucu" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "İşlemler arası iletişim kitaplığı" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "Programlama dili" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "GUI çerçevesi" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "GUI çerçeve bağlantıları" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "C/C++ Bağlantı kitaplığı" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "Veri değişim biçimi" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "Bilimsel bilgi işlem için destek kitaplığı" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "Daha hızlı matematik için destek kitaplığı" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "STL dosyalarının işlenmesi için destek kitaplığı" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "Düzlemsel nesnelerin işlenmesi için destek kitaplığı" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "Üçgen birleşimlerin işlenmesi için destek kitaplığı" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "Karmaşık ağların analizi için destek kitaplığı" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "3MF dosyalarının işlenmesi için destek kitaplığı" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "Dosya meta verileri ve akış için destek kitaplığı" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "Seri iletişim kitaplığı" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "ZeroConf keşif kitaplığı" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "Poligon kırpma kitaplığı" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "Python HTTP kitaplığı" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "Yazı tipi" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "SVG simgeleri" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "Linux çapraz-dağıtım uygulama dağıtımı" @@ -3333,67 +3497,73 @@ msgctxt "@label" msgid "Profile:" msgstr "Profil:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" "\n" "Click to open the profile manager." -msgstr "Bazı ayar/geçersiz kılma değerleri profilinizde saklanan değerlerden farklıdır.\n\nProfil yöneticisini açmak için tıklayın." +msgstr "" +"Bazı ayar/geçersiz kılma değerleri profilinizde saklanan değerlerden farklıdır.\n" +"\n" +"Profil yöneticisini açmak için tıklayın." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "Ara..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Değeri tüm ekstruderlere kopyala" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Tüm değiştirilmiş değerleri tüm ekstruderlere kopyala" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Bu ayarı gizle" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Bu ayarı gösterme" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Bu ayarı görünür yap" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Görünürlük ayarını yapılandır..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "Tümünü Daralt" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "Tümünü Genişlet" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "Gizlenen bazı ayarlar normal hesaplanan değerden farklı değerler kullanır.\n\nBu ayarları görmek için tıklayın." +msgstr "" +"Gizlenen bazı ayarlar normal hesaplanan değerden farklı değerler kullanır.\n" +"\n" +"Bu ayarları görmek için tıklayın." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:61 msgctxt "@label Header for list of settings." @@ -3405,31 +3575,37 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr ".........den etkilenir" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "Bu ayar her zaman, tüm ekstrüderler arasında paylaşılır. Buradan değiştirildiğinde tüm ekstrüderler için değer değiştirir." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "Değer, her bir ekstruder değerinden alınır. " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" "\n" "Click to restore the value of the profile." -msgstr "Bu ayarın değeri profilden farklıdır.\n\nProfil değerini yenilemek için tıklayın." +msgstr "" +"Bu ayarın değeri profilden farklıdır.\n" +"\n" +"Profil değerini yenilemek için tıklayın." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" "\n" "Click to restore the calculated value." -msgstr "Bu ayar normal olarak yapılır ama şu anda mutlak değer ayarı var.\n\nHesaplanan değeri yenilemek için tıklayın." +msgstr "" +"Bu ayar normal olarak yapılır ama şu anda mutlak değer ayarı var.\n" +"\n" +"Hesaplanan değeri yenilemek için tıklayın." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:129 msgctxt "@label" @@ -3467,7 +3643,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "Bağlı yazıcıya özel bir G-code komutu gönderin. Komutu göndermek için 'enter' tuşuna basın." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "Ekstrüder" @@ -3520,7 +3696,7 @@ msgid "The nozzle inserted in this extruder." msgstr "Bu ekstrudere takılan nozül." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "Yapı levhası" @@ -3545,6 +3721,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "Yazdırma öncesinde yatağı ısıt. Isıtma sırasında yazdırma işinizi ayarlamaya devam edebilirsiniz. Böylece yazdırmaya hazır olduğunuzda yatağın ısınmasını beklemeniz gerekmez." +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "Malzeme" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "Favoriler" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "Genel" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3560,12 +3751,12 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "&Görünüm" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "&Kamera konumu" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "&Yapı levhası" @@ -3575,12 +3766,12 @@ msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "Görünür ayarlar" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "Tüm Ayarları Göster" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Ayar Görünürlüğünü Yönet..." @@ -3639,349 +3830,350 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "Yazdırma Ayarı devre dışı\nG-code dosyaları üzerinde değişiklik yapılamaz" +msgstr "" +"Yazdırma Ayarı devre dışı\n" +"G-code dosyaları üzerinde değişiklik yapılamaz" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "00sa 00dk" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "Zaman Özellikleri" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "Maliyet koşulları" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "%1 m" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "%1 g" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "Toplam:" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." msgstr "Önerilen Yazıcı Ayarları

Seçilen yazıcı, malzeme ve kalite için önerilen ayarları kullanarak yazdırın." -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "Özel Yazıcı Ayarları

Dilimleme işleminin her bir bölümünü detaylıca kontrol ederek yazdırın." -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "Geçerli yazdırma" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "İşin Adı" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "Yazdırma süresi" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "Kalan tahmini süre" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" +msgid "Toggle Full Screen" msgstr "Tam Ekrana Geç" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&Geri Al" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Yinele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Çıkış" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "&3 Boyutlu Görünüm" +msgid "3D View" +msgstr "3 Boyutlu Görünüm" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "&Önden Görünüm" +msgid "Front View" +msgstr "Önden Görünüm" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "&Yukarıdan Görünüm" +msgid "Top View" +msgstr "Yukarıdan Görünüm" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "&Sol Taraftan Görünüm" +msgid "Left Side View" +msgstr "Sol Taraftan Görünüm" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "&Sağ Taraftan Görünüm" +msgid "Right Side View" +msgstr "Sağ Taraftan Görünüm" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Cura’yı yapılandır..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Yazıcı Ekle..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Yazıcıları Yönet..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Malzemeleri Yönet..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Profili geçerli ayarlar/geçersiz kılmalar ile güncelle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Geçerli değişiklikleri iptal et" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." -msgstr "&Geçerli ayarlardan/geçersiz kılmalardan profil oluştur..." +msgstr "G&eçerli ayarlardan/geçersiz kılmalardan profil oluştur..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Profilleri Yönet..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Çevrimiçi Belgeleri Göster" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Hata Bildir" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "&Hakkında..." +msgid "About..." +msgstr "Hakkında..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "&Seçili Modeli Sil" -msgstr[1] "&Seçili Modelleri Sil" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" +msgstr[0] "Seçili Modeli Sil" +msgstr[1] "Seçili Modelleri Sil" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Seçili Modeli Ortala" msgstr[1] "Seçili Modelleri Ortala" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Seçili Modeli Çoğalt" msgstr[1] "Seçili Modelleri Çoğalt" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Modeli Sil" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Modeli Platformda Ortala" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "Modelleri Gruplandır" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Model Grubunu Çöz" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Modelleri Birleştir" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Modeli Çoğalt..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "&Tüm modelleri Seç" +msgid "Select All Models" +msgstr "Tüm modelleri Seç" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "&Yapı Levhasını Temizle" +msgid "Clear Build Plate" +msgstr "Yapı Levhasını Temizle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" +msgid "Reload All Models" msgstr "Tüm Modelleri Yeniden Yükle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Tüm Modelleri Tüm Yapı Levhalarına Yerleştir" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Tüm Modelleri Düzenle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Seçimi Düzenle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Tüm Model Konumlarını Sıfırla" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" +msgid "Reset All Model Transformations" msgstr "Tüm Model ve Dönüşümleri Sıfırla" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Dosya Aç..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Yeni Proje..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "Motor Günlüğünü Göster..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Yapılandırma Klasörünü Göster" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "Paketlere gözat..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "Kenar Çubuğunu Genişlet/Daralt" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "Lütfen bir 3D model yükleyin" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "Dilimlemeye hazır" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Dilimleniyor..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "%1 Hazır" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "Dilimlenemedi" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "Dilimleme kullanılamıyor" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "Mevcut yazdırma görevini dilimlere ayır" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "Dilimleme sürecini iptal et" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "Hazırla" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "İptal Et" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "Etkin çıkış aygıtını seçin" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "Dosya aç" @@ -4001,129 +4193,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "&Dosya" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "&Kaydet..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "&Dışa Aktar..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "&Seçimi Dosyaya Kaydet" +msgid "Export Selection..." +msgstr "Seçimi Dışa Aktar..." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "&Farklı Kaydet" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "Kaydet&Projelendir..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" -msgstr "&Düzenle" +msgstr "Düz&enle" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "&Görünüm" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "&Ayarlar" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Yazıcı" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "&Malzeme" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Etkin Ekstruder olarak ayarla" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Ekstruderi Etkinleştir" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Ekstruderi Devre Dışı Bırak" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "&Yapı levhası" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "Uzantılar" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&Araç kutusu" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "Tercihler" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "&Yardım" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Bu paket yeniden başlatmanın ardından kurulacak." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "Dosya Aç" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "Ayarlar" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "Yeni proje" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "Yeni bir proje başlatmak istediğinizden emin misiniz? Bu işlem yapı levhasını ve kaydedilmemiş tüm ayarları silecektir." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "Cura Kapatılıyor" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "Cura’dan çıkmak istediğinizden emin misiniz?" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "Paketi Kur" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "Dosya Aç" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." msgstr "Seçtiğiniz dosyalar arasında bir veya daha fazla G-code dosyası bulduk. Tek seferde sadece bir G-code dosyası açabilirsiniz. Bir G-code dosyası açmak istiyorsanız, sadece birini seçiniz." @@ -4133,112 +4341,107 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Projeyi Kaydet" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "Baskı tepsisi" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "Ekstruder %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & malzeme" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Kaydederken proje özetini bir daha gösterme" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "Kaydet" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "Katman Yüksekliği" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "Bu kalite profili mevcut malzemeniz ve nozül yapılandırması için kullanılamaz. Bu kalite profilini etkinleştirmek için lütfen bunları değiştirin" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "Özel bir profil şu anda aktif. Kalite kaydırıcısını etkinleştirmek için Özel sekmesinde varsayılan bir kalite seçin" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "Yazdırma Hızı" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "Daha yavaş" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "Daha Hızlı" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "Bazı profil ayarlarını değiştirdiniz. Bunları değişiklikleri kaydetmek istiyorsanız, özel moda gidin." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "Dolgu" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "Kademeli dolgu, yukarıya doğru dolgu miktarını kademeli olarak yükselecektir." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "Kademeli özelliği etkinleştir" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "Oluşturma Desteği" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Modellerin askıda kalan kısımlarını destekleyen yapılar oluşturun. Bu yapılar olmadan, yazdırma sırasında söz konusu kısımlar düşebilir." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "Destek için kullanacağınız ekstruderi seçin. Bu, modelin havadayken düşmesini veya yazdırılmasını önlemek için modelin altındaki destekleyici yapıları güçlendirir." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "Yapı Levhası Yapıştırması" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "Bir kenar veya radye yazdırın. Bu nesnenizin etrafına veya altına daha sonra kesilmesi kolay olan düz bir alan sağlayacak." -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "Yazıcı çıktılarınızı iyileştirmek için yardıma mı ihtiyacınız var?
Ultimaker Sorun Giderme Kılavuzlarını okuyun" @@ -4285,22 +4488,22 @@ msgctxt "@label" msgid "Printer type" msgstr "Yazıcı türü" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "Malzeme" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "Bu malzeme kombinasyonuyla yapışkanlı kağıt veya yapışkan kullan" +msgid "Use glue with this material combination" +msgstr "Bu malzeme kombinasyonuyla yapışkan kullan" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "Uyumluluğu Kontrol Et" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "Malzemenin uyumluluğunu Ultimaker.com üzerinden kontrol etmek için tıklayın." @@ -4390,16 +4593,6 @@ msgctxt "name" msgid "God Mode" msgstr "Tanrı Modu" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "G-Code’u kabul eder ve WiFi üzerinden Doodle3D WiFi-Box'a gönderir." - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4410,6 +4603,16 @@ msgctxt "name" msgid "Changelog" msgstr "Değişiklik Günlüğü" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "Aygıt yazılımını güncellemeye yönelik makine eylemleri sağlar." + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "Aygıt Yazılımı Güncelleyici" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." @@ -4433,7 +4636,7 @@ msgstr "USB yazdırma" #: UserAgreement/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license." -msgstr "Kullanıcıya bir kez lisansımızı kabul edip etmediğini sorun" +msgstr "Kullanıcıya bir kez lisansımızı kabul edip etmediğini sorun." #: UserAgreement/plugin.json msgctxt "name" @@ -4480,16 +4683,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "Hazırlık Aşaması" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "Doğrudan komut dosyası düzenlemek için düzenleme penceresi sunar." - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "Canlı komut dosyası aracı" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4503,7 +4696,7 @@ msgstr "Çıkarılabilir Sürücü Çıkış Cihazı Eklentisi" #: UM3NetworkPrinting/plugin.json msgctxt "description" msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Ultimaker 3 yazıcıları için ağ bağlantılarını yönetir" +msgstr "Ultimaker 3 yazıcıları için ağ bağlantılarını yönetir." #: UM3NetworkPrinting/plugin.json msgctxt "name" @@ -4600,16 +4793,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "Eski Cura Profil Okuyucu" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "Cura’da Blender dosyalarını doğrudan açmanıza yardımcı olur." - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Blender Entegrasyonu (deneysel)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4660,6 +4843,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "2.7’den 3.0’a Sürüm Yükseltme" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "Yapılandırmaları Cura 3.4’ten Cura 3.5’e yükseltir." + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "3.4’ten 3.5’e Sürüm Yükseltme" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4800,6 +4993,298 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura Profil Okuyucu" +#~ msgctxt "@warning:status" +#~ msgid "Please generate G-code before saving." +#~ msgstr "Lütfen kaydetmeden önce G-code oluşturun." + +#~ msgctxt "@item:inmenu" +#~ msgid "Profile Assistant" +#~ msgstr "Profil Asistanı" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Profile Assistant" +#~ msgstr "Profil Asistanı" + +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "Aygıt Yazılımını Yükselt" + +#~ msgctxt "@label unknown material" +#~ msgid "Unknown" +#~ msgstr "Bilinmiyor" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "No custom profile to import in file {0}" +#~ msgstr "{0} dosyasında içe aktarılabilecek özel profil yok" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "This profile {0} contains incorrect data, could not import it." +#~ msgstr "Bu profil {0} yanlış veri içermekte, içeri aktarılamadı." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "{0} profilinde tanımlanan makine ({1}), mevcut makinenizle ({2}) eşleşmiyor, içe aktarılamadı." + +#~ msgctxt "@title:window" +#~ msgid "Confirm uninstall " +#~ msgstr "Kaldırmayı onayla " + +#~ msgctxt "@label:status" +#~ msgid "Paused" +#~ msgstr "Duraklatıldı" + +#~ msgctxt "@action:button" +#~ msgid "Previous" +#~ msgstr "Önceki" + +#~ msgctxt "@action:button" +#~ msgid "Next" +#~ msgstr "Sonraki" + +#~ msgctxt "@label" +#~ msgid "Tip" +#~ msgstr "İpucu" + +#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +#~ msgid "%1m / ~ %2g / ~ %4 %3" +#~ msgstr "%1 m / ~ %2 g / ~ %4 %3" + +#~ msgctxt "@label Print estimates: m for meters, g for grams" +#~ msgid "%1m / ~ %2g" +#~ msgstr "%1 m / ~ %2 g" + +#~ msgctxt "@label" +#~ msgid "Print experiment" +#~ msgstr "Yazdırma denemesi" + +#~ msgctxt "@label" +#~ msgid "Checklist" +#~ msgstr "Kontrol listesi" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "Aygıt Yazılımını Yükselt" + +#~ msgctxt "description" +#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +#~ msgstr "Malzeme üreticilerine bir drop-in UI kullanarak yeni malzeme ve kalite profili oluşturma imkanı sunar." + +#~ msgctxt "name" +#~ msgid "Print Profile Assistant" +#~ msgstr "Baskı Profili Asistanı" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box ile yazdır" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box ile yazdır" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "Doodle3D Connect’e bağlanıyor" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "Doodle3D Connect’e veri gönderiliyor" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "Doodle3D Connect’e veri gönderilemiyor. Hala etkin olan başka bir iş var mı?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "Doodle3D Connect üzerinde veri depolanıyor" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "Doodle3D Connect’e dosya gönderildi" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "Connect'i aç.." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "Doodle3D Connect web arayüzünü aç" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Blender dosyası" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "\"{}\" quality!\n" +#~ "Fell back to \"{}\" kullanarak dışarı aktarım yapılamadı." + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "İletişim" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "Bu yazıcı, Ultimaker 3 yazıcı grubunu barındırmak için ayarlı değildir." + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "Bu yazıcı, %1 Ultimaker 3 yazıcı grubunun ana makinesidir." + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1, bağlı Ultimaker 3 yazıcı grubunu barındırmak için ayarlı değildir" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "Yazıcı Ekle/Kaldır" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "Yazdırma işlerini varsayılan web tarayıcınızda açar." + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "Yazdırma işlerini görüntüle" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "Yazdırmaya hazırlanıyor" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "Yazdırma" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "Mevcut" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "Yazıcı bağlantısı koptu" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "Mevcut değil" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "Bilinmiyor" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "Devre dışı" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "Rezerve edildi" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "Yazdırmaya hazırlanıyor" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "Yazdırma durduruldu" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "Yazdırma işleri kabul edilmiyor" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "Şu tarihlerde bitirir: " + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "Yapı levhasını temizle" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "Yapılandırma değişikliğini bekliyor" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "Yazdırma görevleri" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "Yazıcılar" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "Yazıcıları görüntüle" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "Durdur" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "Devam et" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "Yazdırmayı Durdur" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "Her zaman sor" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "Profilin Üzerine Yaz" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "Yeni yüklenen modeller yapılı levhaya mı yerleştirilsin? Çok yapılı levha ile birlikte kullanılır (DENEYSEL)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "Yüklemenin ardından nesneleri yerleştirme" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "&Seçimi Dosyaya Kaydet" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "&Farklı Kaydet" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "Kaydet&Projelendir..." + +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "Bu malzeme kombinasyonuyla yapışkanlı kağıt veya yapışkan kullan" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "G-Code’u kabul eder ve WiFi üzerinden Doodle3D WiFi-Box'a gönderir." + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "Doğrudan komut dosyası düzenlemek için düzenleme penceresi sunar." + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "Canlı komut dosyası aracı" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "Cura’da Blender dosyalarını doğrudan açmanıza yardımcı olur." + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Blender Entegrasyonu (deneysel)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "Model Kontrol Edici Uyarısı" @@ -5067,10 +5552,6 @@ msgstr "Cura Profil Okuyucu" #~ msgid "Browse plugins..." #~ msgstr "Eklentilere göz at..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "&Yapı levhası" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "&Eklentiler" @@ -5296,14 +5777,6 @@ msgstr "Cura Profil Okuyucu" #~ "\n" #~ "Üzgünüz!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "Profil Asistanı" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "Profil Asistanı" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "Hiçbir malzeme yüklenmedi" @@ -5434,14 +5907,6 @@ msgstr "Cura Profil Okuyucu" #~ msgid "Configure setting visiblity..." #~ msgstr "Görünürlük ayarını yapılandır..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1 m / ~ %2 g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1 m / ~ %2 g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "Otomatik: %1" @@ -5478,14 +5943,6 @@ msgstr "Cura Profil Okuyucu" #~ msgid "GCode Profile Reader" #~ msgstr "GCode Profil Okuyucu" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "Malzeme üreticilerine bir drop-in UI kullanarak yeni malzeme ve kalite profili oluşturma imkanı sunar." - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "Baskı Profili Asistanı" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "SolidWorks dosyanızı açarken hata meydana geldi! Lütfen dosyanızın SolidWorks’te sorunsuz açılıp açılmadığını kontrol edin!" @@ -5682,10 +6139,6 @@ msgstr "Cura Profil Okuyucu" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "Bu yazıcı, %1 bağlı Ultimaker 3 yazıcı grubunun ana makinesidir" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "Hazırlanıyor" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "Tamamlandığı tarih: " diff --git a/resources/i18n/tr_TR/fdmextruder.def.json.po b/resources/i18n/tr_TR/fdmextruder.def.json.po index d8412d67cb..f9519e7e68 100644 --- a/resources/i18n/tr_TR/fdmextruder.def.json.po +++ b/resources/i18n/tr_TR/fdmextruder.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 14:25+0100\n" "Last-Translator: Bothof \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -166,6 +166,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "Nozül yazdırma işlemini başlatmaya hazırlandığında konumun Z koordinatı." +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "Ekstrüder Yazıcı Soğutma Fanı" + +#: 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 "Bu ekstrüdere bağlı yazıcı soğutma fanı sayısı. Yalnızca her bir ekstrüder için farklı yazıcı soğutma fanınız varsa bunu 0 varsayılan değeri olarak değiştirin." + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/tr_TR/fdmprinter.def.json.po b/resources/i18n/tr_TR/fdmprinter.def.json.po index c7b62f1da3..955eab686a 100644 --- a/resources/i18n/tr_TR/fdmprinter.def.json.po +++ b/resources/i18n/tr_TR/fdmprinter.def.json.po @@ -5,16 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-11-06 15:36+0100\n" "Last-Translator: Bothof \n" "Language-Team: Turkish\n" "Language: tr_TR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.6\n" #: fdmprinter.def.json msgctxt "machine_settings label" @@ -56,7 +57,9 @@ msgctxt "machine_start_gcode description" msgid "" "G-code commands to be executed at the very start - separated by \n" "." -msgstr " \n ile ayrılan, başlangıçta yürütülecek G-code komutları." +msgstr "" +" \n" +" ile ayrılan, başlangıçta yürütülecek G-code komutları." #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -68,7 +71,9 @@ msgctxt "machine_end_gcode description" msgid "" "G-code commands to be executed at the very end - separated by \n" "." -msgstr " \n ile ayrılan, bitişte yürütülecek G-code komutları." +msgstr "" +" \n" +" ile ayrılan, bitişte yürütülecek G-code komutları." #: fdmprinter.def.json msgctxt "material_guid label" @@ -80,6 +85,16 @@ msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " msgstr "Malzemedeki GUID Otomatik olarak ayarlanır. " +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "Çap" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "Kullanılan filamanın çapını ayarlar. Bu değeri kullanılan filaman çapı ile eşitleyin." + #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" @@ -1055,6 +1070,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "Zikzak" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "Üst/Alt Poligonları Bağla" + +#: 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 "Üst/alt yüzey yollarını yan yana ise bağla. Eş merkezli şekil için bu ayarı etkinleştirmek, hareket süresini önemli ölçüde kısaltır ancak bağlantılar dolgunun üzerinde meydana gelebileceğinden bu özellik üst yüzeyin kalitesini düşürebilir." + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1135,6 +1160,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "Halihazırda duvarın olduğu bir yere yazdırılan bir iç duvarın parçaları için akışı telafi eder." +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "Minimum Duvar Akışı" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "Bir duvar hattı için izin verilen en düşük yüzde akımdır. Duvar çakışması, mevcut bir duvara yakın duruyorsa bir duvarın akışını azaltır. Akışları bu değerden düşük olan duvarların yerine hareket hamlesi konacaktır. Bu ayarı kullanırken duvar çakışma telafisini açmanız ve iç duvardan önce dış duvarı yazdırmanız gerekir." + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "Geri Çekmeyi Tercih Et" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "Geri çekme etkinleştirildiğinde, akışları minimum akış eşiğinin altındaki duvarların yerini alacak hareketleri taramak yerine geri çekme kullanılır." + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1452,8 +1497,8 @@ msgstr "Dolgu Şekli" #: 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "Baskının dolgu malzemesinin şeklidir. Hat ve zikzak dolgu, farklı katmanlar üzerinde yön değiştirerek malzeme maliyetini azaltır. Izgara, üçgen, üçlü altıgen, kübik, sekizlik, çeyrek kübik, çapraz ve eşmerkezli şekiller, her katmana tam olarak basılır. Kübik, çeyrek kübik ve sekizlik dolgu, her yönde daha eşit bir kuvvet dağılımı sağlamak için her katmanda değişir." +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 "Baskının dolgu malzemesinin şeklidir. Hat ve zikzak dolgu, farklı katmanlar üzerinde yön değiştirerek malzeme maliyetini azaltır. Izgara, üçgen, üçlü altıgen, kübik, sekizlik, çeyrek kübik, çapraz ve eşmerkezli şekiller, her katmana tam olarak basılır. Gyroid, kübik, çeyrek kübik ve sekizlik dolgu, her yönde daha eşit bir kuvvet dağılımı sağlamak için her katmanda değişir." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1500,11 +1545,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "Eş merkezli" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Eş merkezli 3D" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1520,6 +1560,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "Çapraz 3D" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "Gyroid" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1530,6 +1575,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "İç duvarın şeklini takip eden bir hattı kullanarak dolgu şeklinin iç duvarla buluştuğu noktada uçları bağlar. Bu ayarın etkinleştirilmesi, dolgunun duvarlara daha iyi yapışmasını sağlayabilir ve dolgunun dikey yüzeylerin kalitesinin etkilerini azaltabilir. Bu ayarın devre dışı bırakılması, kullanılan malzemenin miktarını azaltır." +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "Dolgu Poligonlarını Bağla" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "Yan yana giden dolgu yollarını bağla. Birkaç kapalı poligondan oluşan dolgu şekilleri için bu ayarı etkinleştirmek hareket süresini büyük ölçüde kısaltır." + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1560,6 +1615,30 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Dolgu şekli Y ekseni boyunca bu mesafe kadar kaydırılır." +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "Dolgu Hattı Çoğaltıcı" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "Her bir dolgu hattını bu sayıda hatta dönüştür. Ekstra hatlar birbirlerini kesmez, birbirlerinden bağımsız kalırlar. Bu dolguyu sertleştirir, ancak yazdırma süresini uzatırken materyal kullanımını artırır." + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "Ekstra Dolgu Duvar Sayısı" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" +"Dolgu alanının etrafına ekstra duvar ekle. Bu duvarlar üst/alt yüzey hatlarının daha az aşağı düşmesini sağlar. Yani biraz fazla materyal kullanarak, daha az üst/alt yüzey katmanı ile aynı kaliteyi yakalayabilirsiniz.\n" +"Bu özellik, doğru konfigüre edildiğinde, harekete veya geri çekmeye gerek kalmadan Dolgu Poligonlarını Bağlama ile birlikte tüm dolguyu tek bir ekstrüzyon yoluna bağlayabilir." + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1788,7 +1867,7 @@ msgstr "Varsayılan Yazdırma Sıcaklığı" #: 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 "Yazdırma için kullanılan varsayılan sıcaklık. Bu sıcaklık malzemenin “temel” sıcaklığı olmalıdır. Diğer tüm yazıcı sıcaklıkları bu değere dayanan ofsetler kullanmalıdır." +msgstr "Yazdırma için kullanılan varsayılan sıcaklık. Bu sıcaklık malzemenin “temel” sıcaklığı olmalıdır. Diğer tüm yazıcı sıcaklıkları bu değere dayanan ofsetler kullanmalıdır" #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1818,7 +1897,7 @@ msgstr "İlk Yazdırma Sıcaklığı" #: fdmprinter.def.json msgctxt "material_initial_print_temperature description" msgid "The minimal temperature while heating up to the Printing Temperature at which printing can already start." -msgstr "Yazdırmanın başlayacağı Yazdırma Sıcaklığına ulaşırken görülen minimum sıcaklık" +msgstr "Yazdırmanın başlayacağı Yazdırma Sıcaklığına ulaşırken görülen minimum sıcaklık." #: fdmprinter.def.json msgctxt "material_final_print_temperature label" @@ -1848,7 +1927,7 @@ msgstr "Varsayılan Yapı Levhası Sıcaklığı" #: fdmprinter.def.json msgctxt "default_material_bed_temperature description" msgid "The default temperature used for the heated build plate. This should be the \"base\" temperature of a build plate. All other print temperatures should use offsets based on this value" -msgstr "Isınan yapı levhası için kullanılan varsayılan sıcaklık. Bu sıcaklık yapı levhasının “temel” sıcaklığı olmalıdır. Diğer tüm yazıcı sıcaklıkları bu değere dayanan ofsetler kullanmalıdır." +msgstr "Isınan yapı levhası için kullanılan varsayılan sıcaklık. Bu sıcaklık yapı levhasının “temel” sıcaklığı olmalıdır. Diğer tüm yazıcı sıcaklıkları bu değere dayanan ofsetler kullanmalıdır" #: fdmprinter.def.json msgctxt "material_bed_temperature label" @@ -1870,16 +1949,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "İlk katmanda ısınan yapı levhası için kullanılan sıcaklık." -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "Çap" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "Kullanılan filamanın çapını ayarlar. Bu değeri kullanılan filaman çapı ile eşitleyin." - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -1948,7 +2017,7 @@ msgstr "Katman Değişimindeki Geri Çekme" #: fdmprinter.def.json msgctxt "retract_at_layer_change description" msgid "Retract the filament when the nozzle is moving to the next layer." -msgstr "Nozül bir sonraki katmana doğru hareket ettiğinde filamanı geri çekin. " +msgstr "Nozül bir sonraki katmana doğru hareket ettiğinde filamanı geri çekin." #: fdmprinter.def.json msgctxt "retraction_amount label" @@ -2717,8 +2786,8 @@ msgstr "Tarama Modu" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "Tarama, hareket sırasında nozülü halihazırda yazdırılmış bölgelerde tutar. Bu şekilde biraz daha uzun hareket hamleleri sağlarken geri çekme ihtiyacını azaltır. Tarama kapatıldığında, malzeme geri çekilecek ve nozül bir sonraki noktaya kadar düz bir çizgide hareket edecektir. Sadece dolgunun taratılmasıyla üst/alt yüzey bölgelerinde taramanın engellenmesi de mümkündür." +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "Tarama, hareket sırasında nozülü daha önce yazdırılmış alanlarda tutar. Bu durum hareketleri biraz uzatır ancak geri çekme ihtiyacını azaltır. Tarama kapalıysa materyal geri çekilecektir, nozül de bir sonraki noktaya düz bir çizgi üzerinden gider. Üst/alt yüzey alanlarının üzerinde tarama yapmayarak sadece dolgu içerisinde tarama yapılabilir. “Dolgu İçinde” seçeneğinin daha önceki Cura sürümlerinde bulunan “Yüzey Alanında Değil” seçeneğiyle tamamen aynı davranışı gösterdiğini unutmayın." #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2735,6 +2804,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "Yüzey Alanında Değil" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "Dolgu İçinde" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3115,11 +3189,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "Eş merkezli" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Eş merkezli 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3180,6 +3249,56 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "Yazdırılan destek yapısı hatları arasındaki mesafe. Bu ayar, destek yoğunluğu ile hesaplanır." +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "İlk Katman Destek Hattı Mesafesi" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "Yazdırılan ilk katman destek yapı hatları arasındaki mesafedir. Bu ayar destek yoğunluğuna göre hesaplanır." + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "Destek Dolgu Hattı Yönü" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "Destekler için dolgu şeklinin döndürülmesi. Destek dolgu şekli yatay düzlemde döndürülür." + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "Destek Kenarını Etkinleştir" + +#: 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 "İlk katmanın destek dolgu alanı içinde bir kenar oluşturun. Bu kenar, desteğin çevresine değil, altına yazdırılır. Bu ayarı etkinleştirmek, desteğin baskı tablasına yapışma alanını artırır." + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "Destek Kenar Genişliği" + +#: 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 "Desteğin altına yazdırılacak kenarın genişliği. Daha geniş kenar, ekstra malzeme karşılığında baskı tablasına daha fazla alanın yapışacağı anlamına gelir." + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "Destek Kenar Hattı Sayısı" + +#: 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 "Bir destek kenarı için kullanılan hatların sayısı. Daha fazla kenar hattı, ekstra malzeme karşılığında baskı tablasına daha fazla alanın yapışacağı anlamına gelir." + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3358,7 +3477,7 @@ msgstr "Destek Arayüzü Kalınlığı" #: fdmprinter.def.json msgctxt "support_interface_height description" msgid "The thickness of the interface of the support where it touches with the model on the bottom or the top." -msgstr "Alt veya üst kısımdaki modele değdiği yerde destek arayüzü kalınlığı" +msgstr "Alt veya üst kısımdaki modele değdiği yerde destek arayüzü kalınlığı." #: fdmprinter.def.json msgctxt "support_roof_height label" @@ -3470,11 +3589,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "Eş merkezli" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Eş merkezli 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3510,11 +3624,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "Eş Merkezli" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Eş Merkezli 3D" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3550,16 +3659,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "Eş Merkezli" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "Eş Merkezli 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "Zikzak" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "Fan Hızı Geçersiz Kılma" + +#: 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 "Bu ayar etkinleştirildiğinde, yazıcı soğutma fanının hızı desteğin hemen üzerindeki yüzey bölgeleri için değiştirilir." + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "Desteklenen Yüzey Fan Hızı" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "Desteğin hemen üzerindeki yüzey bölgeleri yazdırılırken kullanılacak yüzdelik fan hızıdır. Yüksek fan hızı kullanmak desteğin daha kolay kaldırılmasını sağlayabilir." + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3710,7 +3834,9 @@ msgctxt "skirt_gap description" msgid "" "The horizontal distance between the skirt and the first layer of the print.\n" "This is the minimum distance. Multiple skirt lines will extend outwards from this distance." -msgstr "Baskının eteği ve ilk katmanı arasındaki yatay mesafe.\nMinimum mesafedir. Bu mesafeden çok sayıda etek hattı dışarı doğru uzanır." +msgstr "" +"Baskının eteği ve ilk katmanı arasındaki yatay mesafe.\n" +"Minimum mesafedir. Bu mesafeden çok sayıda etek hattı dışarı doğru uzanır." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3742,6 +3868,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "Bir kenar için kullanılan hatların sayısı Daha fazla kenar hattı yapı levhasına yapışmayı artırmanın yanı sıra etkin yazdırma alanını da azaltır." +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "Kenar, Desteği Değiştirir" + +#: 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 "İlgili alan üzerinde destek olsa bile kenarı modelin çevresine yazdırmaya zorlayın. Desteğin ilk katmanının bazı alanlarını kenar alanları ile değiştirir." + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -3884,8 +4020,8 @@ msgstr "Radyenin taban katmanındaki hatların genişliği. Bunlar, yapı levhas #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Radye Hat Boşluğu" +msgid "Raft Base Line Spacing" +msgstr "Radye Taban Hat Genişliği" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4020,7 +4156,7 @@ msgstr "Radye Fan Hızı" #: fdmprinter.def.json msgctxt "raft_fan_speed description" msgid "The fan speed for the raft." -msgstr "Radye için fan hızı" +msgstr "Radye için fan hızı." #: fdmprinter.def.json msgctxt "raft_surface_fan_speed label" @@ -4030,7 +4166,7 @@ msgstr "Radye Üst Fan Hızı" #: fdmprinter.def.json msgctxt "raft_surface_fan_speed description" msgid "The fan speed for the top raft layers." -msgstr "Üst radye katmanları için fan hızı" +msgstr "Üst radye katmanları için fan hızı." #: fdmprinter.def.json msgctxt "raft_interface_fan_speed label" @@ -4040,7 +4176,7 @@ msgstr "Radyenin Orta Fan Hızı" #: fdmprinter.def.json msgctxt "raft_interface_fan_speed description" msgid "The fan speed for the middle raft layer." -msgstr "Radyenin orta katmanı için fan hızı" +msgstr "Radyenin orta katmanı için fan hızı." #: fdmprinter.def.json msgctxt "raft_base_fan_speed label" @@ -4050,7 +4186,7 @@ msgstr "Radyenin Taban Fan Hızı" #: fdmprinter.def.json msgctxt "raft_base_fan_speed description" msgid "The fan speed for the base raft layer." -msgstr "Radyenin taban katmanı için fan hızı" +msgstr "Radyenin taban katmanı için fan hızı." #: fdmprinter.def.json msgctxt "dual label" @@ -4090,7 +4226,7 @@ msgstr "İlk Direk Boyutu" #: fdmprinter.def.json msgctxt "prime_tower_size description" msgid "The width of the prime tower." -msgstr "İlk Direk Genişliği" +msgstr "İlk Direk Genişliği." #: fdmprinter.def.json msgctxt "prime_tower_min_volume label" @@ -4102,16 +4238,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "Yeterince malzeme temizlemek için ilk direğin her bir katmanı için minimum hacim." -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "İlk Direğin Kalınlığı" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "Boş olan ilk direğin kalınlığı Kalınlığın Minimum İlk Direk Hacminin yarısından fazla olması ilk direğin yoğun olmasına neden olur." - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4152,26 +4278,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "Bir nozül ile ilk direği yazdırdıktan sonra, diğer nozülden ilk direğe sızdırılan malzemeyi silin." -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "Değişimden Sonra Sürme Nozülü" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "Ekstruderi değiştirdikten sonra ilk nesne yazdırıldığında nozülden sızan malzemeyi temizleyin. Bu, sızdırılan malzemenin yazdırmanın yüzey kalitesine en az zarar verdiği yerlerde güvenli ve yavaş bir temizleme hareketi gerçekleştirir." - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "İlk Direk Temizleme Hacmi" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "İlk direk silinirken temizlenecek olan filaman miktarı. Temizleme işlemi, nozül aktif değilken sızarak kaybolan filamanı dengelemeye yarar." - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4657,6 +4763,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "Malzeme akışını (saniye başına mm3 bazında) sıcaklığa (santigrat derece) bağlayan veri." +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "Minimum Poligon Çevre Uzunluğu" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "Bu miktardan daha kısa çevre uzunluğuna sahip dilimlenmiş katmanlardaki poligonlar filtre ile elenecektir. Daha düşük değerler dilimleme süresini uzatacak ancak daha yüksek çözünürlükte bir ağ oluşturacaktır. Genellikle yüksek çözünürlüklü SLA yazıcılarına yöneliktir ve çok fazla detay içeren çok küçük 3D modellerinde kullanılır." + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5167,7 +5283,9 @@ msgctxt "wireframe_up_half_speed description" msgid "" "Distance of an upward move which is extruded with half speed.\n" "This can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing." -msgstr "Yarı hızda sıkıştırılmış yukarı doğru hareket mesafesi.\nBu katmanlarda malzemeyi çok fazla ısıtmayarak önceki katmanlarda daha iyi yapışma sağlayabilir. Sadece kablo yazdırmaya uygulanır." +msgstr "" +"Yarı hızda sıkıştırılmış yukarı doğru hareket mesafesi.\n" +"Bu katmanlarda malzemeyi çok fazla ısıtmayarak önceki katmanlarda daha iyi yapışma sağlayabilir. Sadece kablo yazdırmaya uygulanır." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" @@ -5314,6 +5432,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "Daha küçük bir katmanın kullanılıp kullanılmayacağını belirleyen eşik. Bu rakam bir katmandaki en dik eğimin tanjantına eşittir." +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "Çıkıntılı Duvar Açısı" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "Bu açıdan daha fazla çıkıntı yapan duvarlar çıkıntılı duvar ayarları kullanılarak yazdırılacaktır. Değer 90 ise hiçbir duvar çıkıntılı kabul edilmeyecektir." + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "Çıkıntılı Duvar Hızı" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "Çıkıntılı duvarlar, normal yazdırma hızına göre bu yüzdeye denk bir hızda yazdırılacaktır." + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5344,16 +5482,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "Eğer bir yüzey alanı bölgesi, alanının bu yüzdeden daha azı için destekleniyorsa, köprü ayarlarını kullanarak yazdırın. Aksi halde normal yüzey alanı ayarları kullanılarak yazdırılır." -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "Köprü Duvarı Maksimum Çıkıntısı" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "Bir duvar, köprü ayarları kullanılarak yazdırılmadan önce o duvar çizgisinin altındaki hava bölgesinin maksimum izin verilen genişliği. Duvar çizgisi genişliğinin bir yüzdesi olarak ifade edilir. Hava boşluğu bundan daha geniş olduğunda, duvar çizgisi köprü ayarları kullanılarak yazdırılır. Aksi halde duvar çizgisi normal ayarlar kullanılarak yazdırılır. Değer ne kadar düşük olursa, çıkıntı yapan duvar çizgilerinin köprü ayarları kullanılarak yazdırılması ihtimali o kadar yüksek olur." - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5572,7 +5700,75 @@ msgstr "Bileşim Rotasyon Matrisi" #: fdmprinter.def.json msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." -msgstr "Modeli dosyadan indirirken modele uygulanacak olan dönüşüm matrisi" +msgstr "Modeli dosyadan indirirken modele uygulanacak olan dönüşüm matrisi." + +#~ 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 happend midway over infill this feature can reduce the top surface quality." +#~ msgstr "Üst/alt yüzey yollarını yan yana ise bağla. Eş merkezli şekil için bu ayarı etkinleştirmek hareket süresini önemli ölçüde kısaltır; ancak bağlantılar dolgunun üzerinde meydana gelebileceğinden bu özellik üst yüzeyin kalitesini düşürebilir." + +#~ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +#~ msgstr "Baskının dolgu malzemesinin şeklidir. Hat ve zikzak dolgu, farklı katmanlar üzerinde yön değiştirerek malzeme maliyetini azaltır. Izgara, üçgen, üçlü altıgen, kübik, sekizlik, çeyrek kübik, çapraz ve eşmerkezli şekiller, her katmana tam olarak basılır. Kübik, çeyrek kübik ve sekizlik dolgu, her yönde daha eşit bir kuvvet dağılımı sağlamak için her katmanda değişir." + +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Eş merkezli 3D" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "Tarama, hareket sırasında nozülü halihazırda yazdırılmış bölgelerde tutar. Bu şekilde biraz daha uzun hareket hamleleri sağlarken geri çekme ihtiyacını azaltır. Tarama kapatıldığında, malzeme geri çekilecek ve nozül bir sonraki noktaya kadar düz bir çizgide hareket edecektir. Sadece dolgunun taratılmasıyla üst/alt yüzey bölgelerinde taramanın engellenmesi de mümkündür." + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Eş merkezli 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Eş merkezli 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Eş Merkezli 3D" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "Eş Merkezli 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Radye Hat Boşluğu" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "İlk Direğin Kalınlığı" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "Boş olan ilk direğin kalınlığı Kalınlığın Minimum İlk Direk Hacminin yarısından fazla olması ilk direğin yoğun olmasına neden olur." + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "Değişimden Sonra Sürme Nozülü" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "Ekstruderi değiştirdikten sonra ilk nesne yazdırıldığında nozülden sızan malzemeyi temizleyin. Bu, sızdırılan malzemenin yazdırmanın yüzey kalitesine en az zarar verdiği yerlerde güvenli ve yavaş bir temizleme hareketi gerçekleştirir." + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "İlk Direk Temizleme Hacmi" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "İlk direk silinirken temizlenecek olan filaman miktarı. Temizleme işlemi, nozül aktif değilken sızarak kaybolan filamanı dengelemeye yarar." + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "Köprü Duvarı Maksimum Çıkıntısı" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "Bir duvar, köprü ayarları kullanılarak yazdırılmadan önce o duvar çizgisinin altındaki hava bölgesinin maksimum izin verilen genişliği. Duvar çizgisi genişliğinin bir yüzdesi olarak ifade edilir. Hava boşluğu bundan daha geniş olduğunda, duvar çizgisi köprü ayarları kullanılarak yazdırılır. Aksi halde duvar çizgisi normal ayarlar kullanılarak yazdırılır. Değer ne kadar düşük olursa, çıkıntı yapan duvar çizgilerinin köprü ayarları kullanılarak yazdırılması ihtimali o kadar yüksek olur." #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." diff --git a/resources/i18n/zh_CN/cura.po b/resources/i18n/zh_CN/cura.po index 3cc29bd7b7..cecca58cdd 100644 --- a/resources/i18n/zh_CN/cura.po +++ b/resources/i18n/zh_CN/cura.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" -"PO-Revision-Date: 2018-06-22 11:32+0800\n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" +"PO-Revision-Date: 2018-11-06 15:38+0100\n" "Last-Translator: Bothof \n" "Language-Team: PCDotFan , Bothof \n" "Language: zh_CN\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.8.13\n" +"X-Generator: Poedit 2.0.6\n" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:22 msgctxt "@action" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "GCode 文件" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "GCodeWriter 不支持非文本模式。" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "导出前请先准备 G-code。" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -59,102 +70,51 @@ msgstr "" "

找出如何确保最好的打印质量和可靠性.

\n" "

查看打印质量指南

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "使用 Doodle3D WiFi-Box 打印" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "使用 Doodle3D WiFi-Box 打印" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "连接至 Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "取消" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "发送数据至 Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "无法发送数据至 Doodle3D Connect。 是否有另一项作业仍在进行?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "在 Doodle3D Connect 中存储数据" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "已发送至 Doodle3D Connect 的文件" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "打开 链接..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "打开 Doodle3D Connect Web 界面" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "显示更新日志" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "更新固件" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "合并有效设置" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "配置文件已被合并并激活。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USB 联机打印" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "通过 USB 联机打印" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "通过 USB 联机打印" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "通过 USB 连接" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "正在进行 USB 打印,关闭 Cura 将停止此打印。您确定吗?" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -177,7 +137,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "压缩 G-code 文件" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "GCodeGzWriter 不支持文本模式。" + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "Ultimaker 格式包" @@ -199,7 +164,7 @@ msgid "Save to Removable Drive {0}" msgstr "保存到可移动磁盘 {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "没有可进行写入的文件格式!" @@ -238,7 +203,7 @@ msgstr "无法保存到可移动磁盘 {0}:{1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "错误" @@ -267,8 +232,8 @@ msgstr "弹出可移动设备 {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "警告" @@ -295,259 +260,269 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "可移动磁盘" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "通过网络打印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "通过网络打印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "已通过网络连接。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "已通过网络连接。请在打印机上接受访问请求。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "已通过网络连接,但没有打印机的控制权限。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "已发送打印机访问请求,请在打印机上批准该请求。" +msgstr "已发送打印机访问请求,请在打印机上批准该请求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "身份验证状态" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "身份验证状态" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "重试" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "重新发送访问请求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "打印机接受了访问请求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "无法使用本打印机进行打印,无法发送打印作业。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "请求访问" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "向打印机发送访问请求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." msgstr "无法启动新的打印作业。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." msgstr "Ultimaker 配置存在问题,导致无法开始打印。请解决此问题,然后再继续。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "配置不匹配" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "您确定要使用所选配置进行打印吗?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "打印机的配置或校准与 Cura 之间不匹配。为了获得最佳打印效果,请务必切换打印头和打印机中插入的材料。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "发送新作业(暂时)受阻,仍在发送前一份打印作业。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "向打印机发送数据" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "正在发送数据" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "取消" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "插槽 {slot_number} 中未加载 Printcore" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "插槽 {slot_number} 中未加载材料" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, python-brace-format msgctxt "@label" msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" msgstr "为挤出机 {extruder_id} 选择了不同的 PrintCore(Cura: {cura_printcore_name},打印机:{remote_printcore_name})" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "您为挤出机 {2} 选择了不同的材料(Cura:{0},打印机:{1})" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "与您的打印机同步" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "您想在 Cura 中使用当前的打印机配置吗?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "打印机上的打印头和/或材料与当前项目中的不同。 为获得最佳打印效果,请始终使用已插入打印机的打印头和材料进行切片。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" -msgstr "已通过网络连接。" +msgstr "已通过网络连接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "打印作业已成功发送到打印机。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "数据已发送" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "在监控器中查看" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "打印机 '{printer_name}' 完成了打印任务 '{job_name}'。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "打印作业 '{job_name}' 已完成。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "打印完成" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "通过网络连接" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "监控" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "无法获取更新信息。" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "您的 {machine_name} 有新功能可用! 建议您更新打印机上的固件。" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "新 %s 固件可用" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "如何更新" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "无法获取更新信息。" - #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "分层视图" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "当单线打印(Wire Printing)功能开启时,Cura 将无法准确地显示打印层(Layers)" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "仿真视图" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "修改 G-Code 文件" @@ -561,32 +536,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "创建一个不打印支撑的体积。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura 将收集匿名的使用统计数据。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "正在收集数据" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "详细信息" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "请参阅更多关于Cura发送的数据的信息。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "允许" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "允许 Cura 发送匿名的使用统计数据,以帮助确定将来 Cura 的改进优先顺序。已发送您的一些偏好和设置,Cura 版本和您正在切片的模型的散列值。" @@ -596,20 +571,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04 配置文件" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Blender 文件" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "" -"无法使用 \"{}\" 导出质量!\n" -"返回 \"{}\"。" - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -635,49 +596,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF 图像" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "无法使用当前材料进行切片,因为该材料与所选机器或配置不兼容。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "无法切片" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "无法使用当前设置进行切片。以下设置存在错误:{0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "因部分特定模型设置而无法切片。 以下设置在一个或多个模型上存在错误: {error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "无法切片(原因:主塔或主位置无效)。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "无法切片,因为存在与已禁用挤出机 %s 相关联的对象。" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "无法执行,因为没有一个模型符合成形空间体积。请缩放或旋转模型以适应打印平台。" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "正在处理层" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "信息" @@ -693,29 +661,40 @@ msgid "Configure Per Model Settings" msgstr "设置对每个模型的单独设定" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "推荐" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "自定义" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF 文件" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "喷嘴" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "项目文件 {0} 包含未知机器类型 {1}。无法导入机器。将改为导入模型。" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "打开项目文件" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -726,18 +705,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G 文件" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "解析 G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "G-code 详细信息" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "发送文件之前,请确保 G-code 适用于当前打印机和打印机配置。当前 G-code 文件可能不准确。" @@ -748,27 +727,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Cura 配置文件" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF 文件" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Cura 项目 3MF 文件" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "写入 3mf 文件时出错。" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "选择升级" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "升级固件" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -779,79 +758,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "调平打印平台" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "外壁" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "内壁" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "表层" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "填充" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "支撑填充" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "支撑接触面" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "支撑" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "Skirt" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "移动" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "回抽" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "其它" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "未知" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "预切片文件 {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "登录失败" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "文件已存在" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -863,23 +842,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "未覆盖" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "所选材料与所选机器或配置不兼容。" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "不兼容材料" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "已根据挤出机的当前可用性更改设置:[%s]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "设置已更新" @@ -908,8 +887,6 @@ msgid "Export succeeded" msgstr "导出成功" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" @@ -917,58 +894,70 @@ msgstr "无法从 {0} 导入配置文件: {1}< #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:190 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" -msgstr "没有可供导入文件 {0} 的自定义配置文件" +msgstr "没有可导入文件 {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 "无法从 {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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." -msgstr "此配置文件 {0} 包含错误数据,无法导入。" +msgstr "此配置文件 {0} 包含错误数据,无法导入。" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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 "配置文件 {0} ({1}) 中定义的机器与当前机器 ({2}) 不匹配,无法导入。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "无法从 {0} 导入配置文件:" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "已成功导入配置文件 {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "文件 {0} 不包含任何有效的配置文件。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "配置 {0} 文件类型未知或已损坏。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "自定义配置文件" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "配置文件缺少打印质量类型定义。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "无法为当前配置找到质量类型 {0}。" -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -995,42 +984,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "所有文件 (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "自定义材料" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "自定义" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "由于“打印序列”设置的值,成形空间体积高度已被减少,以防止十字轴与打印模型相冲突。" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "成形空间体积" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "不能从用户数据目录创建存档: {}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "备份" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "试图在没有适当数据或元数据的情况下恢复Cura备份。" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "试图恢复与您当前版本不匹配的Cura备份。" @@ -1041,32 +1030,32 @@ msgid "Multiplying and placing objects" msgstr "复制并放置模型" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "放置模型" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "无法在成形空间体积内放下全部模型" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "正在为模型寻找新位置" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "正在寻找位置" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "找不到位置" @@ -1205,223 +1194,233 @@ msgctxt "@action:button" msgid "Send report" msgstr "发送报告" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "正在载入打印机..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "正在设置场景..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "正在载入界面…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f mm" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "一次只能加载一个 G-code 文件。{0} 已跳过导入" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "如果加载 G-code,则无法打开其他任何文件。{0} 已跳过导入" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "所选模型过小,无法加载。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "打印机设置" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "打印机" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "打印机设置" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (宽度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (深度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (高度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "打印平台形状" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "置中" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "加热床" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "G-code 风格" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "打印头设置" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X 最小值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "打印头左侧至喷嘴中心的距离。 用于防止“排队”打印时之前的打印品与打印头发生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y 最小值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "打印头前端至喷嘴中心的距离。 用于防止“排队”打印时之前的打印品与打印头发生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X 最大值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "打印头右侧至喷嘴中心的距离。 用于防止“排队”打印时之前的打印品与打印头发生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y 最大值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "打印头后部至喷嘴中心的距离。 用于防止“排队”打印时之前的打印品与打印头发生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "十字轴高度" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "喷嘴尖端与十字轴系统(X 轴和 Y 轴)之间的高度差。 用于防止“排队”打印时之前的打印品与十字轴发生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "挤出机数目" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "开始 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "将在开始时执行的 G-code 命令。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "结束 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "将在结束时执行的 G-code 命令。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "喷嘴设置" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "喷嘴孔径" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "兼容的材料直径" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "打印机所支持耗材的公称直径。 材料和/或配置文件将覆盖精确直径。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "喷嘴偏移 X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "喷嘴偏移 Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "冷却风扇数量" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "挤出机的开始 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "挤出机的结束 G-code" @@ -1441,12 +1440,20 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "无法连接到Cura包数据库。请检查您的连接。" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "插件" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "材料" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1462,8 +1469,14 @@ msgctxt "@label" msgid "Author" msgstr "作者" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "下载项" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "未知" @@ -1496,17 +1509,57 @@ msgctxt "@action:button" msgid "Back" msgstr "背部" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "确认卸载" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "您正在卸载仍在使用的材料和/或配置文件。确认会将以下材料/配置文件重置为默认值。" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "材料" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "配置文件" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "确认" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "在包装更改生效之前,您需要重新启动Cura。" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "退出 Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "社区贡献" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "社区插件" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "通用材料" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "安装" @@ -1552,12 +1605,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "拒绝" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "精选" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "兼容性" @@ -1567,10 +1620,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "获取包……" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "联系方式" +msgid "Website" +msgstr "网站" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "电子邮件" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1583,48 +1641,88 @@ msgid "Changelog" msgstr "更新日志" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "关闭" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "更新固件" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "固件是直接在 3D 打印机上运行的一个软件。此固件控制步进电机,调节温度并最终使打印机正常工作。" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "新打印机出厂配备的固件完全可以正常使用,但新版本往往具有更多的新功能和改进。" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "自动升级固件" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "上传自定义固件" + +#: /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 "未连接打印机,无法更新固件。" + +#: /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 "与打印机间的连接不支持固件更新,因此无法更新固件。" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "选择自定义固件" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "固件升级" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "更新固件中..." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "固件更新已完成。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "由于未知错误,固件更新失败。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "由于通信错误,导致固件升级失败。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "由于输入/输出错误,导致固件升级失败。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "由于固件丢失,导致固件升级失败。" @@ -1634,22 +1732,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "用户协议" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "现有连接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "此打印机/打印机组已添加到 Cura。请选择其他打印机/打印机组。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "连接到网络打印机" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" @@ -1660,333 +1758,395 @@ msgstr "" "\n" "从以下列表中选择您的打印机:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "添加" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "编辑" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "删除" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "刷新" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "如果您的打印机未列出,请阅读网络打印故障排除指南" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "类型" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "固件版本" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "地址" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "这台打印机未设置为运行一组连接的 Ultimaker 3 打印机。" +msgid "This printer is not set up to host a group of printers." +msgstr "这台打印机未设置为运行一组打印机。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "这台打印机是一组共 %1 台已连接 Ultimaker 3 打印机的主机。" +msgid "This printer is the host for a group of %1 printers." +msgstr "这台打印机是一组共 %1 台打印机的主机。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "该网络地址的打印机尚未响应。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "连接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "打印机网络地址" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "输入打印机在网络上的 IP 地址或主机名。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "确定" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "通过网络打印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "打印机选择" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "打印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 未设置为运行一组连接的 Ultimaker 3 打印机" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "通过网络打印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "添加/删除打印机" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" +msgstr "打印机选择" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "使用默认 Web 浏览器打开打印作业页面。" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" +msgstr "不可用" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "查看打印作业" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" +msgstr "无法连接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "正在准备打印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "打印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" msgstr "可用" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "与打印机的连接中断" +msgid "Aborted" +msgstr "已中止" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "不可用" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "未知" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "已禁用" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "保留" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "已完成" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "正在准备打印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" -msgstr "需要采取行动" +msgid "Preparing" +msgstr "准备" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" -msgstr "已暂停" +msgid "Pausing" +msgstr "暂停" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "恢复" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" -msgstr "打印已中止" +msgid "Action required" +msgstr "需要采取行动" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "不接受打印作业" +msgid "Waiting for: Unavailable printer" +msgstr "等待:不可用的打印机" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "完成时间:" +msgid "Waiting for: First available" +msgstr "等待:第一个可用的" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "清空打印平台" +msgid "Waiting for: " +msgstr "等待: " -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "正在等待配置更改" +msgid "Configuration change" +msgstr "配置更改" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "打印作业" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "打印" +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "分配的打印机 %1 需要以下配置更改:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "已向打印机 %1 分配作业,但作业包含未知的材料配置。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 +msgctxt "@label" +msgid "Change material %1 from %2 to %3." +msgstr "将材料 %1 从 %2 更改为 %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 "将 %3 作为材料 %1 进行加载(此操作无法覆盖)。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "将 Print Core %1 从 %2 更改为 %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 "将打印平台更改为 %1(此操作无法覆盖)。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "覆盖" + +#: /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 "使用不兼容的配置启动打印作业可能会损坏 3D 打印机。您确定要覆盖配置并打印 %1 吗?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:435 +msgctxt "@window:title" +msgid "Override configuration configuration and start print" +msgstr "覆盖配置并开始打印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "玻璃" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "铝" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "管理队列" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" msgstr "已排队" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "打印机" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "打印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "查看打印机" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "管理打印机" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "移至顶部" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "删除" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "恢复" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "暂停" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "中止" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "您确定要将 %1 移至队列顶部吗?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "将打印作业移至顶部" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "您确定要删除 %1 吗?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "删除打印作业" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "您确定要中止 %1 吗?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "中止打印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "连接到打印机" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "将打印机配置导入 Cura" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "应用配置" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "将打印机配置导入 Cura" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "颜色方案" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "材料颜色" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "走线类型" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "进给速度" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "层厚度" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "兼容模式" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "显示移动轨迹" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "显示打印辅助结构" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "显示外壳" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "显示填充" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "只显示顶层" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "在顶部显示 5 层打印细节" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "顶 / 底层" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "内壁" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "最小" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "最大" @@ -2001,17 +2161,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "后期处理脚本" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "添加一个脚本" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "设置" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "更改目前启用的后期处理脚本" @@ -2044,7 +2204,7 @@ msgstr "转换图像..." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:33 msgctxt "@info:tooltip" msgid "The maximum distance of each pixel from \"Base.\"" -msgstr "每个像素与底板的最大距离。" +msgstr "每个像素与底板的最大距离" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:38 msgctxt "@action:label" @@ -2074,7 +2234,7 @@ msgstr "宽度 (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:103 msgctxt "@info:tooltip" msgid "The depth in millimeters on the build plate" -msgstr "打印平台深度,以毫米为单位。" +msgstr "打印平台深度,以毫米为单位" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:108 msgctxt "@action:label" @@ -2106,53 +2266,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "平滑" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "网格类型" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "正常模式" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "打印为支撑" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "不支持与其他模型重叠" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "修改与其他模型重叠的设置" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "修改其他模型填充物的设置" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "选择设置" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "选择对此模型的自定义设置" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "筛选…" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "显示全部" @@ -2174,13 +2334,13 @@ msgid "Create new" msgstr "新建" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "摘要 - Cura 项目" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "打印机设置" @@ -2197,18 +2357,19 @@ msgid "Update" msgstr "更新" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "类型" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "打印机组" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "配置文件设置" @@ -2220,19 +2381,20 @@ msgstr "配置文件中的冲突如何解决?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "名字" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "不在配置文件中" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2260,7 +2422,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "材料的设置冲突应如何解决?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "设置可见性" @@ -2271,13 +2433,13 @@ msgid "Mode" msgstr "模式" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "可见设置:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 / %2" @@ -2333,36 +2495,6 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "移动到下一个位置" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "升级固件" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "固件是直接在 3D 打印机上运行的一个软件。此固件控制步进电机,调节温度并最终使打印机正常工作。" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "新打印机出厂配备的固件完全可以正常使用,但新版本往往具有更多的新功能和改进。" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "自动升级固件" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "上传自定义固件" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "选择自定义固件" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" @@ -2391,7 +2523,7 @@ msgstr "开始打印机检查" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:80 msgctxt "@label" msgid "Connection: " -msgstr "连接:" +msgstr "连接: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:89 msgctxt "@info:status" @@ -2406,7 +2538,7 @@ msgstr "未连接" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:99 msgctxt "@label" msgid "Min endstop X: " -msgstr "X Min 限位开关:" +msgstr "X Min 限位开关: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:109 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:130 @@ -2427,17 +2559,17 @@ msgstr "未检查" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:120 msgctxt "@label" msgid "Min endstop Y: " -msgstr "Y Min 限位开关:" +msgstr "Y Min 限位开关: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:141 msgctxt "@label" msgid "Min endstop Z: " -msgstr "Z Min 限位开关:" +msgstr "Z Min 限位开关: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:163 msgctxt "@label" msgid "Nozzle temperature check: " -msgstr "检查喷嘴温度:" +msgstr "检查喷嘴温度: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:187 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:248 @@ -2510,27 +2642,11 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "请取出打印件" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "暂停" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "恢复" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "中止打印" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "中止打印" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2566,19 +2682,17 @@ msgid "Customized" msgstr "自定义" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "总是询问" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "舍弃更改,并不再询问此问题" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "保留更改,并不再询问此问题" @@ -2598,101 +2712,179 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "创建新配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "信息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "确认直径更改" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" msgstr "新的灯丝直径被设置为%1毫米,这与当前的挤出机不兼容。你想继续吗?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "显示名称" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "品牌" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "材料类型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "颜色" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "属性" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "密度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "直径" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "耗材成本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "耗材重量" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "耗材长度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "每米成本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "此材料与 %1 相关联,并共享其某些属性。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "解绑材料" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "描述" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "粘附信息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "打印设置" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "激活" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "创建" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "复制" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "导入" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "导出" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "打印机" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "确认删除" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "您确认要删除 %1?该操作无法恢复!" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "导入配置" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "无法导入材料 %1%2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "成功导入材料 %1" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "导出材料" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "无法导出材料至 %1%2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "成功导出材料至: %1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2729,289 +2921,287 @@ msgid "Unit" msgstr "单位" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "基本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "接口" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "语言:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "币种:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "主题:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "需重新启动 Cura,新的设置才能生效。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "当设置被更改时自动进行切片。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "自动切片" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "视区行为" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "以红色突出显示模型需要增加支撑结构的区域。没有支撑,这些区域将无法正确打印。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "显示悬垂(Overhang)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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 "当模型被选中时,视角将自动调整到最合适的观察位置(模型处于正中央)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "当项目被选中时,自动对中视角" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "需要令 Cura 的默认缩放操作反转吗?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "反转视角变焦方向。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "是否跟随鼠标方向进行缩放?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "跟随鼠标方向缩放" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "需要移动平台上的模型,使它们不再相交吗?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "确保每个模型都保持分离" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "需要转动模型,使它们接触打印平台吗?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "自动下降模型到打印平台" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "在 G-code 读取器中显示警告信息。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "G-code 读取器中的警告信息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "层视图要强制进入兼容模式吗?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "强制层视图兼容模式(需要重新启动)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "打开并保存文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "当模型的尺寸过大时,是否将模型自动缩小至成形空间体积?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "缩小过大模型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "当模型以米而不是毫米为单位时,模型可能会在打印平台中显得非常小。在此情况下是否进行放大?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "放大过小模型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "模型是否应该在加载后被选中?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "选择模型时加载" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "打印机名是否自动作为打印作业名称的前缀?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "将机器前缀添加到作业名称中" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "保存项目文件时是否显示摘要?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "保存项目时显示摘要对话框" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "打开项目文件时的默认行为" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " -msgstr "打开项目文件时的默认行为:" +msgstr "打开项目文件时的默认行为: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" +msgid "Always ask me this" msgstr "总是询问" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "始终作为一个项目打开" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "始终导入模型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "当您对配置文件进行更改并切换到其他配置文件时将显示一个对话框,询问您是否要保留修改。您也可以选择一个默认行为并令其不再显示该对话框。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "重写配置文件" +msgid "Profiles" +msgstr "配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "切换到不同配置文件时对设置值更改的默认操作: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "总是舍失更改的设置" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "总是将更改的设置传输至新配置文件" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "隐私" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "当 Cura 启动时,是否自动检查更新?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "启动时检查更新" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "您愿意将关于您的打印数据以匿名形式发送到 Ultimaker 吗?注意:我们不会记录/发送任何模型、IP 地址或其他私人数据。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(匿名)发送打印信息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "详细信息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "实验性" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "使用多打印平台功能" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "使用多打印平台功能(需要重启)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "是否在打印平台上编位新加载的模型?与多打印平台结合使用(实验性)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "不要编位加载的对象" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "打印机" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "激活" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3029,7 +3219,7 @@ msgid "Connection:" msgstr "连接:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "尚未连接到打印机。" @@ -3055,7 +3245,7 @@ msgid "Aborting print..." msgstr "中止打印..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "配置文件" @@ -3070,18 +3260,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "复制" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "导入" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "导出" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3092,18 +3270,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "复制配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "确认删除" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "您确认要删除 %1?该操作无法恢复!" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3124,126 +3290,78 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "打印机:%1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "受保护的配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "自定义配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "使用当前设置 / 重写值更新配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "舍弃当前更改" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "此配置文件使用打印机指定的默认值,因此在下面的列表中没有此设置项。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "您当前的设置与选定的配置文件相匹配。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "全局设置" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "材料" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "创建" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "复制" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "导入配置" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr "无法导入材料 %1%2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "成功导入材料 %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "导出材料" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "无法导出材料至 %1%2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "成功导出材料至: %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "打印机" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "新增打印机" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "打印机名称:" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "新增打印机" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "未命名" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "关于 Cura" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "版本: %1" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "熔丝 3D 打印技术的的端对端解决方案。" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" @@ -3252,102 +3370,122 @@ msgstr "" "Cura 由 Ultimaker B.V. 与社区合作开发。\n" "Cura 使用以下开源项目:" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "图形用户界面" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "应用框架" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "G-code 生成器" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "进程间通信交互使用库" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "编程语言" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "GUI 框架" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "GUI 框架绑定" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "C / C++ 绑定库" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "数据交换格式" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "科学计算支持库" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "高速运算支持库" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "用于处理 STL 文件的支持库" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "用于处理平面对象的支持库" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "用于处理三角网格的支持库" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "用于分析复杂网络的支持库" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "用于处理 3MF 文件的支持库" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "用于文件元数据和流媒体的支持库" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "串口通讯库" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "ZeroConf 发现库" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "多边形剪辑库" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "Python HTTP 库" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "字体" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "SVG 图标" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "Linux 交叉分布应用程序部署" @@ -3357,7 +3495,7 @@ msgctxt "@label" msgid "Profile:" msgstr "配置文件:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" @@ -3368,53 +3506,53 @@ msgstr "" "\n" "点击打开配置文件管理器。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "搜索..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "将值复制到所有挤出机" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "将所有修改值复制到所有挤出机" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "隐藏此设置" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "不再显示此设置" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "保持此设置可见" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "配置设定可见性..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "全部折叠" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "全部展开" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" @@ -3433,19 +3571,19 @@ msgstr "影响" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:66 msgctxt "@label Header for list of settings." msgid "Affected By" -msgstr "受影响项目:" +msgstr "受影响项目" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "此设置始终在所有挤出机之间共享。在此处更改它将改变所有挤出机的值。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " -msgstr "该值将会根据每一个挤出机的设置而确定" +msgstr "该值将会根据每一个挤出机的设置而确定 " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3456,7 +3594,7 @@ msgstr "" "\n" "单击以恢复配置文件的值。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3503,7 +3641,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "向连接的打印机发送自定义 G-code 命令。按“Enter”发送命令。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "挤出机" @@ -3556,7 +3694,7 @@ msgid "The nozzle inserted in this extruder." msgstr "该挤出机所使用的喷嘴。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "打印平台" @@ -3581,6 +3719,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "打印前请预热热床。您可以在热床加热时继续调整相关项,让您在准备打印时不必等待热床加热完毕。" +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "材料" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "收藏" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "通用" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3596,12 +3749,12 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "视图(&V)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "摄像头位置(&C)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "打印平台(&B)" @@ -3609,14 +3762,14 @@ msgstr "打印平台(&B)" #: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:13 msgctxt "@action:inmenu" msgid "Visible Settings" -msgstr "可见设置:" +msgstr "可见设置" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "显示所有设置" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "管理设置可见性..." @@ -3677,344 +3830,343 @@ msgstr "" "打印设置已禁用\n" "G-code 文件无法被修改" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "00 小时 00 分" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "时间规格" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "成本规定" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "%1m" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "%1g" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "总计:" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." msgstr "推荐的打印设置

使用针对所选打印机、材料和质量的推荐设置进行打印。" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "自定义打印设置

对切片过程中的每一个细节进行精细控制。" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "正在打印" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "作业名" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "打印时间" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "预计剩余时间" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "切换完整界面(&F)" +msgid "Toggle Full Screen" +msgstr "切换完整界面" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "撤销(&U)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "重做(&R)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "退出(&Q)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "3D 视图(&3)" +msgid "3D View" +msgstr "3D 视图" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "正视图(&F)" +msgid "Front View" +msgstr "正视图" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "顶视图(&T)" +msgid "Top View" +msgstr "顶视图" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "左视图(&L)" +msgid "Left Side View" +msgstr "左视图" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "右视图(&R)" +msgid "Right Side View" +msgstr "右视图" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "配置 Cura…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "新增打印机(&A)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "管理打印机(&I)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "管理材料…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "使用当前设置 / 重写值更新配置文件(&U)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "舍弃当前更改(&D)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "从当前设置 / 重写值创建配置文件(&C)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "管理配置文件.." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "显示在线文档(&D)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "BUG 反馈(&B)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "关于(&A)…" +msgid "About..." +msgstr "关于…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "删除所选模型(&S)" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" +msgstr[0] "删除所选模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "居中所选模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "复制所选模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "删除模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "使模型居于平台中央(&N)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "绑定模型(&G)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "拆分模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "合并模型(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "复制模型…(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "选择所有模型(&S)" +msgid "Select All Models" +msgstr "选择所有模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "清空打印平台(&C)" +msgid "Clear Build Plate" +msgstr "清空打印平台" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 +msgctxt "@action:inmenu menubar:file" +msgid "Reload All Models" +msgstr "重新载入所有模型" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 -msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "重新载入所有模型(&L)" - -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "将所有模型编位到所有打印平台" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "编位所有的模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "为所选模型编位" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "复位所有模型的位置" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "复位所有模型的变动(&T)" +msgid "Reset All Model Transformations" +msgstr "复位所有模型的变动" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "打开文件(&O)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "新建项目(&N)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "显示引擎日志(&L)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "显示配置文件夹" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "浏览包……" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "展开/折叠侧边栏" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "请载入一个 3D 模型" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "切片已准备就绪" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "正在切片..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "%1 已准备就绪" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "无法切片" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "切片不可用" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "分割当前打印作业" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "取消切片流程" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "准备" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "取消" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "选择活动的输出装置" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "打开文件" @@ -4034,129 +4186,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "文件(&F)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "保存(&S)..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "导出(&E)..." + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "保存到文件(&S)" +msgid "Export Selection..." +msgstr "导出选择..." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "另存为(&A)…" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "保存项目(&P)..." - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "编辑(&E)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "视图(&V)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "设置(&S)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "打印机(&P)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "材料(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "设为主要挤出机" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "启用挤出机" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "禁用挤出机" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "打印平台(&B)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "配置文件(&P)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "扩展(&X)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "&工具箱" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "偏好设置(&R)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "帮助(&H)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "这个包将在重新启动后安装。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "打开文件" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "设置" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "新建项目" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "你确定要开始一个新项目吗?这将清除打印平台及任何未保存的设置。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "关闭 Cura" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "您确定要退出 Cura 吗?" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "安装包" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "打开文件" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." msgstr "我们已经在您选择的文件中找到一个或多个 G-Code 文件。您一次只能打开一个 G-Code 文件。若需打开 G-Code 文件,请仅选择一个。" @@ -4166,112 +4334,107 @@ msgctxt "@title:window" msgid "Save Project" msgstr "保存项目" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "打印平台" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "挤出机 %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & 材料" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "保存时不再显示项目摘要" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "保存" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "层高" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" msgstr "此质量配置文件不适用于当前材料和喷嘴配置。请更改配置以便启用此配置文件" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "自定义配置文件目前处于活动状态。 如要启用质量滑块,请在“自定义”选项卡中选择一个默认质量配置文件" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "打印速度" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "更慢" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "更快" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "您已修改部分配置文件设置。 如果您想对其进行更改,请转至自定义模式。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "填充" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "渐层填充(Gradual infill)将随着打印高度的提升而逐渐加大填充密度。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "启用渐层" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "生成支撑" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "在模型的悬垂(Overhangs)部分生成支撑结构。若不这样做,这些部分在打印时将倒塌。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "选择用于支撑的挤出机。该挤出机将在模型之下建立支撑结构,以防止模型下垂或在空中打印。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "打印平台附着" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "允许打印 Brim 或 Raft。这将在您的对象周围或下方添加一个容易切断的平面区域。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "需要帮助改善您的打印?
阅读 Ultimaker 故障排除指南" @@ -4315,24 +4478,24 @@ msgstr "引擎日志" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:70 msgctxt "@label" msgid "Printer type" -msgstr "打印机类型:" +msgstr "打印机类型" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "材料" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "在此材料组合的情况下,请使用附着垫片或者胶水" +msgid "Use glue with this material combination" +msgstr "用胶粘和此材料组合" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "检查兼容性" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "点击查看 Ultimaker.com 上的材料兼容情况。" @@ -4422,16 +4585,6 @@ msgctxt "name" msgid "God Mode" msgstr "God 模式" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "接受 G-Code 并通过 WiFi 将其发送到 Doodle3D WiFi-Box。" - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D WiFi-Box" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4442,6 +4595,16 @@ msgctxt "name" msgid "Changelog" msgstr "更新日志" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "为固件更新提供操作选项。" + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "固件更新程序" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." @@ -4512,16 +4675,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "准备阶段" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "提供直接脚本编辑的编辑窗口。" - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "实时脚本工具" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4565,7 +4718,7 @@ msgstr "固件更新检查程序" #: SimulationView/plugin.json msgctxt "description" msgid "Provides the Simulation view." -msgstr "提供仿真视图" +msgstr "提供仿真视图。" #: SimulationView/plugin.json msgctxt "name" @@ -4632,16 +4785,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "旧版 Cura 配置文件读取器" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "帮助直接在 Cura 中打开 Blender 文件。" - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Blender 集成(实验性)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4692,6 +4835,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "版本自 2.7 升级到 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "将配置从 Cura 3.4 版本升级至 3.5 版本。" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "版本自 3.4 升级到 3.5" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4832,6 +4985,298 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura 配置文件读取器" +#~ msgctxt "@warning:status" +#~ msgid "Please generate G-code before saving." +#~ msgstr "保存之前,请生成 G-code。" + +#~ msgctxt "@item:inmenu" +#~ msgid "Profile Assistant" +#~ msgstr "配置文件助手" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Profile Assistant" +#~ msgstr "配置文件助手" + +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "升级固件" + +#~ msgctxt "@label unknown material" +#~ msgid "Unknown" +#~ msgstr "未知" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "No custom profile to import in file {0}" +#~ msgstr "没有可供导入文件 {0} 的自定义配置文件" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "This profile {0} contains incorrect data, could not import it." +#~ msgstr "此配置文件 {0} 包含错误数据,无法导入。" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "配置文件 {0} ({1}) 中定义的机器与当前机器 ({2}) 不匹配,无法导入。" + +#~ msgctxt "@title:window" +#~ msgid "Confirm uninstall " +#~ msgstr "确认卸载 " + +#~ msgctxt "@label:status" +#~ msgid "Paused" +#~ msgstr "已暂停" + +#~ msgctxt "@action:button" +#~ msgid "Previous" +#~ msgstr "上一步" + +#~ msgctxt "@action:button" +#~ msgid "Next" +#~ msgstr "下一步" + +#~ msgctxt "@label" +#~ msgid "Tip" +#~ msgstr "提示" + +#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +#~ msgid "%1m / ~ %2g / ~ %4 %3" +#~ msgstr "%1m / ~ %2g / ~ %4 %3" + +#~ msgctxt "@label Print estimates: m for meters, g for grams" +#~ msgid "%1m / ~ %2g" +#~ msgstr "%1m / ~ %2g" + +#~ msgctxt "@label" +#~ msgid "Print experiment" +#~ msgstr "打印试验" + +#~ msgctxt "@label" +#~ msgid "Checklist" +#~ msgstr "检查表" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "升级固件" + +#~ msgctxt "description" +#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +#~ msgstr "允许材料制造商使用下拉式 UI 创建新的材料和质量配置文件。" + +#~ msgctxt "name" +#~ msgid "Print Profile Assistant" +#~ msgstr "打印配置文件助手" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "使用 Doodle3D WiFi-Box 打印" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "使用 Doodle3D WiFi-Box 打印" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "连接至 Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "发送数据至 Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "无法发送数据至 Doodle3D Connect。 是否有另一项作业仍在进行?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "在 Doodle3D Connect 中存储数据" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "已发送至 Doodle3D Connect 的文件" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "打开 链接..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "打开 Doodle3D Connect Web 界面" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Blender 文件" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "无法使用 \"{}\" 导出质量!\n" +#~ "返回 \"{}\"。" + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "联系方式" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "这台打印机未设置为运行一组连接的 Ultimaker 3 打印机。" + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "这台打印机是一组共 %1 台已连接 Ultimaker 3 打印机的主机。" + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 未设置为运行一组连接的 Ultimaker 3 打印机" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "添加/删除打印机" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "使用默认 Web 浏览器打开打印作业页面。" + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "查看打印作业" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "正在准备打印" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "打印" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "可用" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "与打印机的连接中断" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "不可用" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "未知" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "已禁用" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "保留" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "正在准备打印" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "打印已中止" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "不接受打印作业" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "完成时间:" + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "清空打印平台" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "正在等待配置更改" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "打印作业" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "打印机" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "查看打印机" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "暂停" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "恢复" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "中止打印" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "总是询问" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "重写配置文件" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "是否在打印平台上编位新加载的模型?与多打印平台结合使用(实验性)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "不要编位加载的对象" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "保存到文件(&S)" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "另存为(&A)…" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "保存项目(&P)..." + +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "在此材料组合的情况下,请使用附着垫片或者胶水" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "接受 G-Code 并通过 WiFi 将其发送到 Doodle3D WiFi-Box。" + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D WiFi-Box" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "提供直接脚本编辑的编辑窗口。" + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "实时脚本工具" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "帮助直接在 Cura 中打开 Blender 文件。" + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Blender 集成(实验性)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "模型检查器警告" @@ -5099,10 +5544,6 @@ msgstr "Cura 配置文件读取器" #~ msgid "Browse plugins..." #~ msgstr "浏览插件..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "打印平台(&B)" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "插件" @@ -5328,14 +5769,6 @@ msgstr "Cura 配置文件读取器" #~ "\n" #~ "很抱歉!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "配置文件助手" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "配置文件助手" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "未加载材料" @@ -5466,14 +5899,6 @@ msgstr "Cura 配置文件读取器" #~ msgid "Configure setting visiblity..." #~ msgstr "配置设置可见性..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "自动:%1" @@ -5510,14 +5935,6 @@ msgstr "Cura 配置文件读取器" #~ msgid "GCode Profile Reader" #~ msgstr "GCode 配置文件读取器" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "允许材料制造商使用下拉式 UI 创建新的材料和质量配置文件。" - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "打印配置文件助手" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "打开 SolidWorks 文件时发生错误! 请检查能否在 SolidWorks 中正常打开文件而不出现任何问题!" @@ -5713,10 +6130,6 @@ msgstr "Cura 配置文件读取器" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "这台打印机是一组 %1 台已连接 Ultimaker 3 打印机的主机" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "准备" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "完成时间: " diff --git a/resources/i18n/zh_CN/fdmextruder.def.json.po b/resources/i18n/zh_CN/fdmextruder.def.json.po index 0ab1209fae..cddfeae984 100644 --- a/resources/i18n/zh_CN/fdmextruder.def.json.po +++ b/resources/i18n/zh_CN/fdmextruder.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" -"PO-Revision-Date: 2018-04-11 14:40+0100\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-09-28 14:25+0100\n" "Last-Translator: Bothof \n" "Language-Team: PCDotFan , Bothof \n" "Language: zh_CN\n" @@ -168,6 +168,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "打印开始时,喷头在 Z 轴坐标上的起始位置." +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "挤出机打印冷却风扇" + +#: 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 "打印冷却风扇的数量与该挤出机有关。仅在每个挤出机都对应不同的打印冷却风扇时,对默认值 0 进行更改。" + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/zh_CN/fdmprinter.def.json.po b/resources/i18n/zh_CN/fdmprinter.def.json.po index b73600c3ef..3a85b1b454 100644 --- a/resources/i18n/zh_CN/fdmprinter.def.json.po +++ b/resources/i18n/zh_CN/fdmprinter.def.json.po @@ -5,17 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" -"PO-Revision-Date: 2018-06-22 11:44+0800\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-11-06 15:38+0100\n" "Last-Translator: Bothof \n" "Language-Team: PCDotFan , Bothof \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.13\n" +"X-Generator: Poedit 2.0.6\n" "Plural-Forms: nplurals=1; plural=0;\n" #: fdmprinter.def.json @@ -84,7 +84,17 @@ msgstr "材料 GUID" #: fdmprinter.def.json msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " -msgstr "材料 GUID,此项为自动设置。" +msgstr "材料 GUID,此项为自动设置。 " + +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "直径" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "调整所用耗材的直径。 将此值与所用耗材的直径匹配。" #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" @@ -229,7 +239,7 @@ msgstr "挤出机组数目。 挤出机组是指进料装置、鲍登管和喷 #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders that are enabled" -msgstr "已启用的挤出机数目。" +msgstr "已启用的挤出机数目" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -544,7 +554,7 @@ msgstr "X 轴方向电机的最大加速度" #: fdmprinter.def.json msgctxt "machine_max_acceleration_y label" msgid "Maximum Acceleration Y" -msgstr " 轴最大加速度" +msgstr "轴最大加速度" #: fdmprinter.def.json msgctxt "machine_max_acceleration_y description" @@ -844,7 +854,7 @@ msgstr "单一支撑底板走线宽度。" #: fdmprinter.def.json msgctxt "prime_tower_line_width label" msgid "Prime Tower Line Width" -msgstr "装填塔走线宽度。" +msgstr "装填塔走线宽度" #: fdmprinter.def.json msgctxt "prime_tower_line_width description" @@ -1061,6 +1071,16 @@ msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "锯齿状" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "连接顶部/底部多边形" + +#: 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 "在顶部/底部皮肤路径互相紧靠运行的地方连接它们。对于同心图案,启用此设置可大大减少空驶时间,但由于连接可在填充中途发生,此功能可能会降低顶部表面质量。" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1141,6 +1161,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "在内壁已经存在时补偿所打印内壁部分的流量。" +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "最小壁流量" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "壁线允许的最小百分比流量。当某个壁靠近现有壁时,壁重叠补偿可减小其流量。流量小于此值的壁将由空驶替代。在使用此设置时,您必须启用壁重叠补偿并在打印内壁之前打印外壁。" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "首选回抽" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "如启用,会使用回抽而不是梳理取代流量低于最小流量阈值的壁的空驶。" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1458,8 +1498,8 @@ msgstr "填充图案" #: 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "打印填充材料的图案。线条和锯齿形填充在交替层上交换方向,从而降低材料成本。网格、三角形、内六角、立方体、八角形、四面体、交叉和同心图案在每层完整打印。立方体、四面体和八角形填充随每层变化,以在各个方向提供更均衡的强度分布。" +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 "打印填充材料的图案。线条和锯齿形填充在交替层上交换方向,从而降低材料成本。网格、三角形、内六角、立方体、八角形、四面体、交叉和同心图案在每层完整打印。螺旋二十四面体、立方体、四面体和八角形填充随每层变化,以在各个方向提供更均衡的强度分布。" #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1506,11 +1546,6 @@ msgctxt "infill_pattern option concentric" msgid "Concentric" msgstr "同心圆" -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "立体同心圆" - #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" @@ -1526,6 +1561,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "交叉 3D" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "螺旋二十四面体" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1536,6 +1576,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "使用沿内壁形状的走线连接填充图案与内壁相接的各端。启用此设置会使填充更好地粘着在壁上,减少填充物效果对垂直表面质量的影响。禁用此设置可减少使用的材料量。" +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "连接填充多边形" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "在填充路径互相紧靠运行的地方连接它们。对于包含若干闭合多边形的填充图案,启用此设置可大大减少空驶时间。" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1566,6 +1616,30 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "填充图案沿 Y 轴移动此距离。" +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "填充走线乘数" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "将每个填充走线转换成这种多重走线。额外走线互相不交叉,而是互相避开。这使得填充更严格,但会增加打印时间和材料使用。" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "额外填充壁计数" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" +"在填充区域周围添加额外壁。此类壁可减少顶部/底部皮肤走线,这意味着只要付出一些额外的材料就可以使用更少的顶部/底部皮肤层达到相同的质量。\n" +"在适当配置的情况下,此功能可结合连接填充多边形以将所有填充物连接到单一挤出路径而无需空驶或回抽。" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1876,16 +1950,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "用于第一层加热打印平台的温度。" -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "直径" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "调整所用耗材的直径。 将此值与所用耗材的直径匹配。" - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -2723,8 +2787,8 @@ msgstr "梳理模式" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "梳理可在空驶时让喷嘴保持在已打印区域内。 这会使空驶距离稍微延长,但可减少回抽需求。 如果关闭梳理,则材料将回抽,且喷嘴沿着直线移动到下一个点。 也可以通过仅在填充物内进行梳理避免梳理顶部/底部皮肤区域。" +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "梳理可在空驶时让喷嘴保持在已打印区域内。这会使空驶距离稍微延长,但可减少回抽需求。如果关闭梳理,则材料将回抽,且喷嘴沿着直线移动到下一个点。也可以避免顶部/底部皮肤区域的梳理和仅在填充物内进行梳理。请注意,“在填充物内”选项的操作方式与较早 Cura 版本中的“不在皮肤中”选项完全相同。" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2741,6 +2805,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "除了皮肤" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "在填充物内" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3121,11 +3190,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "同心" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "同心 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3186,6 +3250,56 @@ msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." msgstr "已打印支撑结构走线之间的距离。 该设置通过支撑密度计算。" +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "起始层支撑走线距离" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "已打印起始层支撑结构走线之间的距离。该设置通过支撑密度计算。" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "支撑填充走线方向" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "用于支撑的填充图案的方向。支撑填充图案在水平面中旋转。" + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "启用支撑 Brim" + +#: 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 "在第一层的支撑填充区域内生成一个 Brim。此 Brim 在支撑下方打印,而非周围。启用此设置会增强支撑与打印平台的附着。" + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "支撑 Brim 宽度" + +#: 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 "在支撑下方要打印的 Brim 的宽度。较大的 Brim 可增强与打印平台的附着,但也会增加一些额外材料成本。" + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "支撑 Brim 走线次数" + +#: 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 "用于支撑 Brim 的走线数量。更多 Brim 走线可增强与打印平台的附着,但也会增加一些额外材料成本。" + #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" @@ -3476,11 +3590,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "同心" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "同心 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3516,11 +3625,6 @@ msgctxt "support_roof_pattern option concentric" msgid "Concentric" msgstr "同心圆" -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "立体同心圆" - #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" @@ -3556,16 +3660,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "同心" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "同心 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "锯齿形" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "风扇速度覆盖" + +#: 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 "启用时,会为支撑正上方的表面区域更改打印冷却风扇速度。" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "支撑的表面风扇速度" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "打印支撑正上方表面区域时使用的风扇百分比速度。使用高风扇速度可能使支撑更容易移除。" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3750,6 +3869,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "brim 所用走线数量。 更多 brim 走线可增强与打印平台的附着,但也会减少有效打印区域。" +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "Brim 替换支撑" + +#: 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 "强制围绕模型打印 Brim,即使该空间本该由支撑占据。此操作会将第一层的某些支撑区域替换为 Brim 区域。" + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -3892,8 +4021,8 @@ msgstr "基础 Raft 层的走线宽度。 这些走线应该是粗线,以便 #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" -msgstr "Raft 走线间距" +msgid "Raft Base Line Spacing" +msgstr "Raft 基础走线间距" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -4110,16 +4239,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "为了清除足够的材料,装填塔每层的最小体积。" -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "装填塔厚度" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "空装填塔的厚度。 如果厚度大于装填塔最小体积的一半,则将打造一个密集的装填塔。" - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4160,26 +4279,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "在用一个喷嘴打印装填塔后,从装填塔上的另一个喷嘴擦去渗出的材料。" -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "切换后擦拭喷嘴" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "切换挤出机后,在打印的第一个物件上擦去喷嘴上的渗出材料。 这会在渗出材料对打印品表面品质造成最小损害的位置进行缓慢安全的擦拭动作。" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "装填塔清洗量" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "在装填塔上进行擦拭时要清洗的耗材量。 清洗可用于补偿在喷嘴不活动期间由于渗出而损失的耗材。" - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4665,6 +4764,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "数据连接材料流量(mm3/s)到温度(摄氏度)。" +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "最小多边形周长" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "切片层中周长小于此数值的多边形将被滤除。以切片时间为代价,较低的值可实现较高分辨率的网格。它主要用于高分辨率 SLA 打印机和包含大量细节的极小 3D 模型。" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -5324,6 +5433,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "决定是否使用较小图层的阈值。该数字相当于一层中最大坡度的切线。" +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "悬垂壁角度" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "悬垂超过此角度的壁将使用悬垂壁设置打印。该值为 90 时,不会将任何壁视为悬垂。" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "悬垂壁速度" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "悬垂壁将以其正常打印速度的此百分比打印。" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5354,16 +5483,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "如果受支撑的表面区域小于整个区域的这一百分比,则使用连桥设置打印。否则,使用正常表面设置打印。" -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "桥壁最大悬垂" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "在使用连桥设置打印壁之前,壁线下净空区域的最大允许宽度。以壁线宽度的百分比表示。如果间隙大于此宽度,则使用连桥设置打印壁线。否则,将使用正常设置打印壁线。此值越小,使用连桥设置打印悬垂壁线的可能性越大。" - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5584,6 +5703,74 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "在将模型从文件中载入时应用在模型上的转换矩阵。" +#~ 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 happend midway over infill this feature can reduce the top surface quality." +#~ msgstr "在顶部/底部皮肤路径互相紧靠运行的地方连接它们。对于同心图案,启用此设置可大大减少空驶时间,但因为连接可在填充中途发生,此功能可能会降低顶部表面质量。" + +#~ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +#~ msgstr "打印填充材料的图案。线条和锯齿形填充在交替层上交换方向,从而降低材料成本。网格、三角形、内六角、立方体、八角形、四面体、交叉和同心图案在每层完整打印。立方体、四面体和八角形填充随每层变化,以在各个方向提供更均衡的强度分布。" + +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "立体同心圆" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "梳理可在空驶时让喷嘴保持在已打印区域内。 这会使空驶距离稍微延长,但可减少回抽需求。 如果关闭梳理,则材料将回抽,且喷嘴沿着直线移动到下一个点。 也可以通过仅在填充物内进行梳理避免梳理顶部/底部皮肤区域。" + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "同心 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "同心 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "立体同心圆" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "同心 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "Raft 走线间距" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "装填塔厚度" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "空装填塔的厚度。 如果厚度大于装填塔最小体积的一半,则将打造一个密集的装填塔。" + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "切换后擦拭喷嘴" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "切换挤出机后,在打印的第一个物件上擦去喷嘴上的渗出材料。 这会在渗出材料对打印品表面品质造成最小损害的位置进行缓慢安全的擦拭动作。" + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "装填塔清洗量" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "在装填塔上进行擦拭时要清洗的耗材量。 清洗可用于补偿在喷嘴不活动期间由于渗出而损失的耗材。" + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "桥壁最大悬垂" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "在使用连桥设置打印壁之前,壁线下净空区域的最大允许宽度。以壁线宽度的百分比表示。如果间隙大于此宽度,则使用连桥设置打印壁线。否则,将使用正常设置打印壁线。此值越小,使用连桥设置打印悬垂壁线的可能性越大。" + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "优化打印各个壁的顺序,以减少回抽次数和空驶距离。 启用此设置将对大部分零件有益,但有的则会耗费更长时间,因此请将优化和不优化的打印时间估计值进行对比。" diff --git a/resources/i18n/zh_TW/cura.po b/resources/i18n/zh_TW/cura.po index b44f6c3551..c27349ffe3 100644 --- a/resources/i18n/zh_TW/cura.po +++ b/resources/i18n/zh_TW/cura.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0200\n" -"PO-Revision-Date: 2018-06-17 10:40+0800\n" +"POT-Creation-Date: 2018-10-29 15:01+0100\n" +"PO-Revision-Date: 2018-11-06 15:39+0100\n" "Last-Translator: Zhang Heh Ji \n" "Language-Team: Zhang Heh Ji \n" "Language: zh_TW\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 2.0.8\n" +"X-Generator: Poedit 2.0.6\n" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:22 msgctxt "@action" @@ -40,6 +40,17 @@ msgctxt "@item:inlistbox" msgid "G-code File" msgstr "G-code 檔案" +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67 +msgctxt "@error:not supported" +msgid "GCodeWriter does not support non-text mode." +msgstr "G-code 寫入器不支援非文字模式。" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73 +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89 +msgctxt "@warning:status" +msgid "Please prepare G-code before exporting." +msgstr "匯出前請先將 G-code 準備好。" + #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30 msgctxt "@info:title" msgid "3D Model Assistant" @@ -59,102 +70,51 @@ msgstr "" "

了解如何確保最佳的列印品質和可靠性。

\n" "

閱讀列印品質指南

" -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 -msgctxt "@action:button" -msgid "Print with Doodle3D WiFi-Box" -msgstr "使用 Doodle3D 無線網路盒列印" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 -msgctxt "@properties:tooltip" -msgid "Print with Doodle3D WiFi-Box" -msgstr "使用 Doodle3D 無線網路盒列印" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 -msgctxt "@info:status" -msgid "Connecting to Doodle3D Connect" -msgstr "正在連接 Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:87 -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:155 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:258 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:204 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:398 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:88 -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 -#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 -#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 -#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:275 -msgctxt "@action:button" -msgid "Cancel" -msgstr "取消" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 -msgctxt "@info:status" -msgid "Sending data to Doodle3D Connect" -msgstr "正在向 Doodle3D Connect 發送資料" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:161 -msgctxt "@info:status" -msgid "Unable to send data to Doodle3D Connect. Is another job still active?" -msgstr "無法向 Doodle3D Connect 發送資料。請確認是否有另一項列印作業正在進行?" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 -msgctxt "@info:status" -msgid "Storing data on Doodle3D Connect" -msgstr "正在儲存資料到 Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:213 -msgctxt "@info:status" -msgid "File sent to Doodle3D Connect" -msgstr "檔案已被傳送到 Doodle3D Connect" - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@action:button" -msgid "Open Connect..." -msgstr "開啟連線..." - -#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 -msgctxt "@info:tooltip" -msgid "Open the Doodle3D Connect web interface" -msgstr "開啟 Doodle3D Connect 的網路介面" - -#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:33 +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32 msgctxt "@item:inmenu" msgid "Show Changelog" msgstr "顯示更新日誌" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py:25 +msgctxt "@action" +msgid "Update Firmware" +msgstr "更新韌體" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:23 msgctxt "@item:inmenu" msgid "Flatten active settings" msgstr "合併有效設定" -#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "列印參數已被合併並啟用。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:40 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:32 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USB 連線列印" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:41 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:33 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "透過 USB 連線列印" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:34 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "透過 USB 連線列印" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:83 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:69 msgctxt "@info:status" msgid "Connected via USB" msgstr "透過 USB 連接" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:92 +msgctxt "@label" +msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" +msgstr "USB 列印正在進行中,關閉 Cura 將停止此列印工作。你確定要繼續嗎?" + #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 #: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 msgctxt "X3G Writer File Description" @@ -177,7 +137,12 @@ msgctxt "@item:inlistbox" msgid "Compressed G-code File" msgstr "壓縮 G-code 檔案" -#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38 +msgctxt "@error:not supported" +msgid "GCodeGzWriter does not support text mode." +msgstr "G-code GZ 寫入器不支援非文字模式。" + +#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:28 msgctxt "@item:inlistbox" msgid "Ultimaker Format Package" msgstr "Ultimaker 格式的封包" @@ -199,7 +164,7 @@ msgid "Save to Removable Drive {0}" msgstr "儲存到行動裝置 {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:133 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "沒有可供寫入的檔案格式!" @@ -238,7 +203,7 @@ msgstr "無法儲存到行動裝置 {0}:{1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1592 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1607 msgctxt "@info:title" msgid "Error" msgstr "錯誤" @@ -267,8 +232,8 @@ msgstr "卸載行動裝置 {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:151 #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:163 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1582 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1681 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1597 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1695 msgctxt "@info:title" msgid "Warning" msgstr "警告" @@ -295,260 +260,270 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "行動裝置" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:70 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:88 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print over network" msgstr "網路連線列印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:71 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:89 msgctxt "@properties:tooltip" msgid "Print over network" msgstr "網路連線列印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:87 msgctxt "@info:status" msgid "Connected over the network." msgstr "已透過網路連接。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:90 msgctxt "@info:status" msgid "Connected over the network. Please approve the access request on the printer." msgstr "已透過網路連接。請在印表機上接受存取請求。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:92 msgctxt "@info:status" msgid "Connected over the network. No access to control the printer." msgstr "已透過網路連接,但沒有印表機的控制權限。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:94 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:97 msgctxt "@info:status" msgid "Access to the printer requested. Please approve the request on the printer" msgstr "已發送印表機存取請求,請在印表機上批准該請求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:97 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 msgctxt "@info:title" msgid "Authentication status" msgstr "認証狀態" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:99 -msgctxt "@info:status" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:100 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:106 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:110 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 msgctxt "@info:title" msgid "Authentication Status" msgstr "認証狀態" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:103 msgctxt "@action:button" msgid "Retry" msgstr "重試" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:102 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:104 msgctxt "@info:tooltip" msgid "Re-send the access request" msgstr "重新發送存取請求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:105 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:107 msgctxt "@info:status" msgid "Access to the printer accepted" msgstr "印表機接受了存取請求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 msgctxt "@info:status" msgid "No access to print with this printer. Unable to send print job." msgstr "無法使用本印表機進行列印,無法發送列印作業。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:29 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:73 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:113 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:33 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:70 msgctxt "@action:button" msgid "Request Access" msgstr "請求存取" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:113 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:34 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:71 msgctxt "@info:tooltip" msgid "Send access request to the printer" msgstr "向印表機發送存取請求" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:198 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:200 msgctxt "@label" msgid "Unable to start a new print job." -msgstr "無法開始新的列印作業" +msgstr "無法開始新的列印作業。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:200 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:202 msgctxt "@label" msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." msgstr "Ultimaker 的設定有問題導致無法開始列印。請在繼續之前解決這個問題。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:206 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:228 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 msgctxt "@window:title" msgid "Mismatched configuration" msgstr "設定不匹配" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:220 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:222 msgctxt "@label" msgid "Are you sure you wish to print with the selected configuration?" msgstr "你確定要使用所選設定進行列印嗎?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:222 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:224 msgctxt "@label" msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "印表機的設定或校正與 Cura 之間不匹配。為了獲得最佳列印效果,請使用印表機的 PrintCores 和耗材設定進行切片。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:249 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:166 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:251 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:199 msgctxt "@info:status" msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." msgstr "前一列印作業傳送中,暫停傳送新列印作業。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:256 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:202 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:258 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:234 msgctxt "@info:status" msgid "Sending data to printer" msgstr "正在向印表機發送資料" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:257 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:203 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:219 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:235 msgctxt "@info:title" msgid "Sending Data" msgstr "發送資料中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:260 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:236 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:381 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:143 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:279 +msgctxt "@action:button" +msgid "Cancel" +msgstr "取消" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:323 #, python-brace-format msgctxt "@info:status" msgid "No Printcore loaded in slot {slot_number}" msgstr "Slot {slot_number} 中沒有載入 Printcore" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:327 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:329 #, python-brace-format msgctxt "@info:status" msgid "No material loaded in slot {slot_number}" msgstr "Slot {slot_number} 中沒有載入耗材" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:350 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:352 #, python-brace-format msgctxt "@label" msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" msgstr "擠出機 {extruder_id} 選擇了不同的 PrintCore(Cura:{cura_printcore_name},印表機:{remote_printcore_name})" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:359 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:361 #, python-brace-format msgctxt "@label" msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" msgstr "擠出機 {2} 選擇了不同的耗材(Cura:{0},印表機:{1})" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:545 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:547 msgctxt "@window:title" msgid "Sync with your printer" msgstr "與你的印表機同步" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:547 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:549 msgctxt "@label" msgid "Would you like to use your current printer configuration in Cura?" msgstr "你想在 Cura 中使用目前的印表機設定嗎?" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/LegacyUM3OutputDevice.py:549 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:551 msgctxt "@label" msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." msgstr "印表機上的 PrintCores 和/或耗材與目前專案中的不同。為獲得最佳列印效果,請使用目前印表機的 PrintCores 和耗材設定進行切片。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:91 msgctxt "@info:status" msgid "Connected over the network" msgstr "透過網路連接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:262 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:303 msgctxt "@info:status" msgid "Print job was successfully sent to the printer." msgstr "列印作業已成功傳送到印表機。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:264 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:305 msgctxt "@info:title" msgid "Data Sent" msgstr "資料傳送" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:265 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:306 msgctxt "@action:button" msgid "View in Monitor" msgstr "使用監控觀看" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:353 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:422 #, python-brace-format msgctxt "@info:status" msgid "Printer '{printer_name}' has finished printing '{job_name}'." msgstr "印表機 '{printer_name}' 已完成列印 '{job_name}'。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:424 #, python-brace-format msgctxt "@info:status" msgid "The print job '{job_name}' was finished." msgstr "列印作業 '{job_name}' 已完成。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterUM3OutputDevice.py:356 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:425 msgctxt "@info:status" msgid "Print finished" msgstr "列印已完成" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:20 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "透過網路連接" -#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:12 +#: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:13 msgctxt "@item:inmenu" msgid "Monitor" msgstr "監控" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:69 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:119 +msgctxt "@info" +msgid "Could not access update information." +msgstr "無法存取更新資訊。" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:17 #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." msgstr "你的 {machine_name} 有新功能可用!建議更新印表機韌體。" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:73 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:21 #, python-format msgctxt "@info:title The %s gets replaced with the printer name." msgid "New %s firmware available" msgstr "有新 %s 韌體可用" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:76 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py:27 msgctxt "@action:button" msgid "How to update" msgstr "如何更新" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:92 -msgctxt "@info" -msgid "Could not access update information." -msgstr "無法存取更新資訊。" - # Added manually to fix a string that was changed after string freeze. #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Layer view" msgstr "分層檢視" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:103 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:113 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "當鐵絲網列印(Wire Printing)功能開啟時,Cura 將無法準確地顯示列印層(Layers)" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:104 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 msgctxt "@info:title" msgid "Simulation View" msgstr "模擬檢視" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:27 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:35 msgid "Modify G-Code" msgstr "修改 G-Code 檔案" @@ -562,32 +537,32 @@ msgctxt "@info:tooltip" msgid "Create a volume in which supports are not printed." msgstr "建立一塊不列印支撐的空間。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:44 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 msgctxt "@info" msgid "Cura collects anonymized usage statistics." msgstr "Cura 以匿名方式蒐集使用狀況統計資料。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:47 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:55 msgctxt "@info:title" msgid "Collecting Data" msgstr "收集資料中" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:57 msgctxt "@action:button" msgid "More info" msgstr "更多資訊" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:50 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:58 msgctxt "@action:tooltip" msgid "See more information on what data Cura sends." msgstr "檢視更多關於 Cura 傳送資料的資訊。" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:52 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:60 msgctxt "@action:button" msgid "Allow" msgstr "允許" -#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:53 +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:61 msgctxt "@action:tooltip" msgid "Allow Cura to send anonymized usage statistics to help prioritize future improvements to Cura. Some of your preferences and settings are sent, the Cura version and a hash of the models you're slicing." msgstr "允許 Cura 以匿名方式傳送使用狀況統計資料,用來協助 Cura 的未來改善工作。你的部份偏好設定和參數,Cura 的版本及你切片模型的雜湊值會被傳送。" @@ -597,20 +572,6 @@ msgctxt "@item:inlistbox" msgid "Cura 15.04 profiles" msgstr "Cura 15.04 列印參數" -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/__init__.py:15 -msgctxt "@item:inlistbox" -msgid "Blender file" -msgstr "Blender 檔案" - -#: /home/ruben/Projects/Cura/plugins/CuraBlenderPlugin/CadIntegrationUtils/CommonReader.py:199 -msgctxt "@info:status" -msgid "" -"Could not export using \"{}\" quality!\n" -"Felt back to \"{}\"." -msgstr "" -"無法使用 \"{}\" 品質導出!\n" -"覆蓋回 \"{}\"。" - #: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 msgctxt "@item:inlistbox" msgid "JPG Image" @@ -636,49 +597,56 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF 圖片" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." msgstr "無法使用目前耗材切片,因為它與所選機器或設定不相容。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:315 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:344 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:367 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:376 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:332 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:363 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:387 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:396 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:405 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414 msgctxt "@info:title" msgid "Unable to slice" msgstr "無法切片" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:343 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:362 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice with the current settings. The following settings have errors: {0}" msgstr "無法使用目前設定進行切片。以下設定存在錯誤:{0}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:366 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:386 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" msgstr "因部份模型設定問題無法進行切片。部份模型的下列設定有錯誤:{error_labels}" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:375 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:395 msgctxt "@info:status" msgid "Unable to slice because the prime tower or prime position(s) are invalid." msgstr "無法切片(原因:換料塔或主位置無效)。" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:385 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:404 +#, python-format +msgctxt "@info:status" +msgid "Unable to slice because there are objects associated with disabled Extruder %s." +msgstr "有物件使用了被停用的擠出機 %s ,因此無法進行切片。" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:413 msgctxt "@info:status" msgid "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit." msgstr "沒有模型可進行切片,因為模型超出了列印範圍。請縮放或旋轉模型, 讓模型可置入列印範圍。" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:status" msgid "Processing Layers" msgstr "正在處理層" -#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:243 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:255 msgctxt "@info:title" msgid "Information" msgstr "資訊" @@ -694,29 +662,40 @@ msgid "Configure Per Model Settings" msgstr "設定對每個模型的單獨設定" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:175 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:575 msgctxt "@title:tab" msgid "Recommended" msgstr "推薦" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:177 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:580 msgctxt "@title:tab" msgid "Custom" msgstr "自訂選項" -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:32 -#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:28 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:34 msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF 檔案" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:199 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:695 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:714 msgctxt "@label" msgid "Nozzle" msgstr "噴頭" +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:468 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Project file {0} contains an unknown machine type {1}. Cannot import the machine. Models will be imported instead." +msgstr "專案檔案 {0} 包含未知的機器類型 {1}。機器無法被匯入,但模型將被匯入。" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471 +msgctxt "@info:title" +msgid "Open Project File" +msgstr "開啟專案檔案" + #: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 msgctxt "@item:inmenu" msgid "Solid view" @@ -727,18 +706,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G 檔案" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:322 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 msgctxt "@info:status" msgid "Parsing G-code" msgstr "正在解析 G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:324 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:470 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:326 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:474 msgctxt "@info:title" msgid "G-code Details" msgstr "G-code 細項設定" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:468 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:472 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "發送檔案之前,請確保 G-code 適用於目前印表機和印表機設定。目前 G-code 檔案可能不準確。" @@ -749,27 +728,27 @@ msgctxt "@item:inlistbox" msgid "Cura Profile" msgstr "Cura 列印參數" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:26 msgctxt "@item:inlistbox" msgid "3MF file" msgstr "3MF 檔案" -#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:34 msgctxt "@item:inlistbox" msgid "Cura Project 3MF file" msgstr "Cura 專案 3MF 檔案" +#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179 +msgctxt "@error:zip" +msgid "Error writing 3mf file." +msgstr "寫入 3mf 檔案發生錯誤。" + #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 msgctxt "@action" msgid "Select upgrades" msgstr "選擇升級" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 -msgctxt "@action" -msgid "Upgrade Firmware" -msgstr "升級韌體" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 msgctxt "@action" msgid "Checkup" @@ -780,79 +759,79 @@ msgctxt "@action" msgid "Level build plate" msgstr "調平列印平台" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:82 msgctxt "@tooltip" msgid "Outer Wall" msgstr "外壁" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:83 msgctxt "@tooltip" msgid "Inner Walls" msgstr "內壁" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:100 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:84 msgctxt "@tooltip" msgid "Skin" msgstr "表層" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:101 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:85 msgctxt "@tooltip" msgid "Infill" msgstr "填充" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:102 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:86 msgctxt "@tooltip" msgid "Support Infill" msgstr "支撐填充" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:103 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:87 msgctxt "@tooltip" msgid "Support Interface" msgstr "支撐介面" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:88 msgctxt "@tooltip" msgid "Support" msgstr "支撐" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 msgctxt "@tooltip" msgid "Skirt" msgstr "外圍" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:106 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 msgctxt "@tooltip" msgid "Travel" msgstr "移動" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:107 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 msgctxt "@tooltip" msgid "Retractions" msgstr "回抽" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:108 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 msgctxt "@tooltip" msgid "Other" msgstr "其它" -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:229 -msgctxt "@label unknown material" -msgid "Unknown" -msgstr "未知" - -#: /home/ruben/Projects/Cura/cura/PrintInformation.py:313 +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:310 #, python-brace-format msgctxt "@label" msgid "Pre-sliced file {0}" msgstr "預切片檔案 {0}" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:235 +#: /home/ruben/Projects/Cura/cura/API/Account.py:71 +msgctxt "@info:title" +msgid "Login failed" +msgstr "登入失敗" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:201 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 msgctxt "@title:window" msgid "File Already Exists" msgstr "檔案已經存在" -#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:236 +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:202 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 #, python-brace-format msgctxt "@label Don't translate the XML tag !" @@ -864,23 +843,23 @@ msgctxt "@menuitem" msgid "Not overridden" msgstr "不覆寫" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:119 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" msgid "The selected material is incompatible with the selected machine or configuration." msgstr "所選耗材與所選機器或設定不相容。" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:120 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 msgctxt "@info:title" msgid "Incompatible Material" msgstr "不相容的耗材" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:842 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:866 #, python-format msgctxt "@info:generic" msgid "Settings have been changed to match the current availability of extruders: [%s]" msgstr "設定已改為與目前擠出機性能相匹配:[%s]" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:844 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:868 msgctxt "@info:title" msgid "Settings updated" msgstr "設定更新" @@ -909,8 +888,6 @@ msgid "Export succeeded" msgstr "匯出成功" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to import profile from {0}: {1}" @@ -918,58 +895,70 @@ msgstr "無法從 {0} 匯入列印參數:{1} or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" -msgstr "檔案 {0} 內無自訂參數可匯入" +msgstr "檔案 {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 "從 {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 or !" +msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." -msgstr "此列印參數 {0} 含有錯誤的資料,無法導入。" +msgstr "列印參數 {0} 含有不正確的資料,無法匯入。" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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 "參數檔案 {0} ({1}) 中定義的機器與你目前的機器 ({2}) 不匹配,無法匯入。" +msgstr "列印參數 {0} 內定義的機器({1})與你目前的機器({2})不匹配, 無法匯入。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /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 "從 {0} 匯入列印參數失敗:" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:315 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "已成功匯入列印參數 {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:318 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "檔案 {0} 內未含有效的列印參數。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "列印參數 {0} 檔案類型未知或已損壞。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:340 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:339 msgctxt "@label" msgid "Custom profile" msgstr "自訂列印參數" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:356 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:355 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "列印參數缺少列印品質類型定義。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:368 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:369 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." msgstr "無法為目前設定找到品質類型 {0}。" -#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:60 +#: /home/ruben/Projects/Cura/cura/ObjectsModel.py:63 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -996,42 +985,42 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "所有檔案 (*)" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:544 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:636 msgctxt "@label" msgid "Custom Material" msgstr "自訂耗材" -#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:545 +#: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:637 msgctxt "@label" msgid "Custom" msgstr "自訂" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:80 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 msgctxt "@info:status" msgid "The build volume height has been reduced due to the value of the \"Print Sequence\" setting to prevent the gantry from colliding with printed models." msgstr "由於「列印序列」設定的值,成形列印範圍高度已被減少,以防止龍門與列印模型相衝突。" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:82 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 msgctxt "@info:title" msgid "Build Volume" msgstr "列印範圍" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:99 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:98 msgctxt "@info:backup_failed" msgid "Could not create archive from user data directory: {}" msgstr "無法從使用者資料目錄建立備份檔:{}" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:104 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:103 msgctxt "@info:title" msgid "Backup" msgstr "備份" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:116 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:113 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup without having proper data or meta data." msgstr "嘗試復原沒有正確資料或 meta data 的 Cura 備份。" -#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:126 +#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:123 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that does not match your current version." msgstr "嘗試復原版本不符的 Cura 備份。" @@ -1042,32 +1031,32 @@ msgid "Multiplying and placing objects" msgstr "正在複製並放置模型" #: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 msgctxt "@info:title" msgid "Placing Object" msgstr "擺放物件中" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:99 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:96 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "無法在列印範圍內放下全部物件" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:30 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:66 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:67 msgctxt "@info:status" msgid "Finding new location for objects" msgstr "正在為物件尋找新位置" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:34 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:70 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:71 msgctxt "@info:title" msgid "Finding Location" msgstr "尋找位置中" #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:97 -#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:150 +#: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:151 msgctxt "@info:title" msgid "Can't Find Location" msgstr "無法找到位置" @@ -1206,223 +1195,233 @@ msgctxt "@action:button" msgid "Send report" msgstr "送出報告" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:328 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:473 msgctxt "@info:progress" msgid "Loading machines..." msgstr "正在載入印表機..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:756 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:775 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "正在設定場景..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:789 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:811 msgctxt "@info:progress" msgid "Loading interface..." msgstr "正在載入介面…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1023 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1037 #, python-format msgctxt "@info 'width', 'depth' and 'height' are variable names that must NOT be translated; just translate the format of ##x##x## mm." msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "%(width).1f x %(depth).1f x %(height).1f mm" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1581 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1596 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "一次只能載入一個 G-code 檔案。{0} 已跳過匯入" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1591 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1606 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "如果載入 G-code,則無法開啟其他任何檔案。{0} 已跳過匯入" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1680 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1694 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "選擇的模型太小無法載入。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:61 msgctxt "@title" msgid "Machine Settings" msgstr "印表機設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:80 msgctxt "@title:tab" msgid "Printer" msgstr "印表機" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:99 msgctxt "@label" msgid "Printer Settings" msgstr "印表機設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:110 msgctxt "@label" msgid "X (Width)" msgstr "X (寬度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:384 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:418 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:430 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:855 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:111 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:121 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:131 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:237 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:386 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:402 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:428 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:440 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:896 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:120 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (深度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:130 msgctxt "@label" msgid "Z (Height)" msgstr "Z (高度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:142 msgctxt "@label" msgid "Build plate shape" msgstr "列印平台形狀" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:151 msgctxt "@option:check" msgid "Origin at center" msgstr "原點位於中心" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:159 msgctxt "@option:check" msgid "Heated bed" msgstr "熱床" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:170 msgctxt "@label" msgid "G-code flavor" msgstr "G-code 類型" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:183 msgctxt "@label" msgid "Printhead Settings" msgstr "列印頭設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:193 msgctxt "@label" msgid "X min" msgstr "X 最小值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:194 msgctxt "@tooltip" msgid "Distance from the left of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "列印頭左側至噴頭中心的距離。用於防止「排隊列印」時之前的列印品與列印頭發生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:203 msgctxt "@label" msgid "Y min" msgstr "Y 最小值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:204 msgctxt "@tooltip" msgid "Distance from the front of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "列印頭前端至噴頭中心的距離。用於防止「排隊列印」時之前的列印品與列印頭發生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:213 msgctxt "@label" msgid "X max" msgstr "X 最大值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:214 msgctxt "@tooltip" msgid "Distance from the right of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "列印頭右側至噴頭中心的距離。用於防止「排隊列印」時之前的列印品與列印頭發生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:223 msgctxt "@label" msgid "Y max" msgstr "Y 最大值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:224 msgctxt "@tooltip" msgid "Distance from the rear of the printhead to the center of the nozzle. Used to prevent colissions between previous prints and the printhead when printing \"One at a Time\"." msgstr "列印頭後部至噴頭中心的距離。用於防止「排隊列印」時之前的列印品與列印頭發生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 msgctxt "@label" msgid "Gantry height" msgstr "龍門高度" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:238 msgctxt "@tooltip" msgid "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\"." msgstr "噴頭尖端與龍門系統(X 軸和 Y 軸)之間的高度差。用於防止「排隊列印」時之前的列印品與龍門發生碰撞。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:257 msgctxt "@label" msgid "Number of Extruders" msgstr "擠出機數目" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:311 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:313 msgctxt "@label" msgid "Start G-code" msgstr "起始 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:321 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:323 msgctxt "@tooltip" msgid "G-code commands to be executed at the very start." msgstr "開始時最先執行的 G-code 命令。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:330 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:332 msgctxt "@label" msgid "End G-code" msgstr "結束 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:340 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:342 msgctxt "@tooltip" msgid "G-code commands to be executed at the very end." msgstr "結束前最後執行的 G-code 命令。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:371 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:373 msgctxt "@label" msgid "Nozzle Settings" msgstr "噴頭設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:383 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:385 msgctxt "@label" msgid "Nozzle size" msgstr "噴頭孔徑" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:399 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 msgctxt "@label" msgid "Compatible material diameter" msgstr "相容的耗材直徑" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:403 msgctxt "@tooltip" msgid "The nominal diameter of filament supported by the printer. The exact diameter will be overridden by the material and/or the profile." msgstr "印表機所支援的耗材直徑。實際列印的耗材直徑由耗材和/或列印參數提供。" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:417 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:427 msgctxt "@label" msgid "Nozzle offset X" msgstr "噴頭偏移 X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:429 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:439 msgctxt "@label" msgid "Nozzle offset Y" msgstr "噴頭偏移 Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:450 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Cooling Fan Number" +msgstr "冷卻風扇數量" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:452 +msgctxt "@label" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:472 msgctxt "@label" msgid "Extruder Start G-code" msgstr "擠出機起始 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:468 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:490 msgctxt "@label" msgid "Extruder End G-code" msgstr "擠出機結束 G-code" @@ -1442,12 +1441,20 @@ msgctxt "@info" msgid "Could not connect to the Cura Package database. Please check your connection." msgstr "無法連上 Cura 軟體包資料庫。請檢查你的網路連線。" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:35 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:28 msgctxt "@title:tab" msgid "Plugins" msgstr "外掛" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:75 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:66 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:551 +msgctxt "@title:tab" +msgid "Materials" +msgstr "耗材" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:79 msgctxt "@label" msgid "Version" @@ -1463,8 +1470,14 @@ msgctxt "@label" msgid "Author" msgstr "作者" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:109 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:269 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:97 +msgctxt "@label" +msgid "Downloads" +msgstr "下載" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:116 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:258 msgctxt "@label" msgid "Unknown" msgstr "未知" @@ -1497,17 +1510,57 @@ msgctxt "@action:button" msgid "Back" msgstr "返回" +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20 +msgctxt "@title:window" +msgid "Confirm uninstall" +msgstr "移除確認" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50 +msgctxt "@text:window" +msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults." +msgstr "你正在移除仍被使用的耗材/列印設定。確認後會將下列耗材/列印設定重設為預設值。" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51 +msgctxt "@text:window" +msgid "Materials" +msgstr "耗材" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52 +msgctxt "@text:window" +msgid "Profiles" +msgstr "參數" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89 +msgctxt "@action:button" +msgid "Confirm" +msgstr "確定" + #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17 msgctxt "@info" msgid "You will need to restart Cura before changes in packages have effect." msgstr "需重新啟動 Cura,軟體包的更動才能生效。" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:32 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34 msgctxt "@info:button" msgid "Quit Cura" msgstr "結束 Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Contributions" +msgstr "社群貢獻" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +msgctxt "@label" +msgid "Community Plugins" +msgstr "社群外掛" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +msgctxt "@label" +msgid "Generic Materials" +msgstr "通用耗材" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:56 msgctxt "@title:tab" msgid "Installed" msgstr "已安裝" @@ -1553,12 +1606,12 @@ msgctxt "@action:button" msgid "Decline" msgstr "拒絕" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:17 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23 msgctxt "@label" msgid "Featured" msgstr "精選" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:20 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31 msgctxt "@label" msgid "Compatibility" msgstr "相容性" @@ -1568,10 +1621,15 @@ msgctxt "@info" msgid "Fetching packages..." msgstr "取得軟體包..." -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:87 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88 msgctxt "@label" -msgid "Contact" -msgstr "聯繫" +msgid "Website" +msgstr "網站" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94 +msgctxt "@label" +msgid "Email" +msgstr "電子郵件" #: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22 msgctxt "@info:tooltip" @@ -1584,48 +1642,88 @@ msgid "Changelog" msgstr "更新日誌" #: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:84 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:56 -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:464 -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:509 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:53 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:467 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:514 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:166 #: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 msgctxt "@action:button" msgid "Close" msgstr "關閉" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:31 +msgctxt "@title" +msgid "Update Firmware" +msgstr "更新韌體" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:39 +msgctxt "@label" +msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." +msgstr "韌體是直接在 3D 印表機上運行的一個軟體。此韌體控制步進馬達,調節溫度讓印表機正常運作。" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:46 +msgctxt "@label" +msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." +msgstr "新印表機出廠配備的韌體完全可以正常使用,但新版本往往具有更多的新功能和改進。" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:58 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "自動升級韌體" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:69 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "上傳自訂韌體" + +#: /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 "因為沒有與印表機連線,無法更新韌體。" + +#: /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 "因為連線的印表機不支援更新韌體,無法更新韌體。" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:98 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "選擇自訂韌體" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:119 msgctxt "@title:window" msgid "Firmware Update" msgstr "韌體更新" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:143 msgctxt "@label" msgid "Updating firmware." msgstr "更新韌體中..." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:44 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:145 msgctxt "@label" msgid "Firmware update completed." msgstr "韌體更新已完成。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:46 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:147 msgctxt "@label" msgid "Firmware update failed due to an unknown error." msgstr "由於未知錯誤,韌體更新失敗。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:48 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:149 msgctxt "@label" msgid "Firmware update failed due to an communication error." msgstr "由於通訊錯誤,導致韌體更新失敗。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:50 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:151 msgctxt "@label" msgid "Firmware update failed due to an input/output error." msgstr "由於輸入/輸出錯誤,導致韌體更新失敗。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:153 msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "由於韌體遺失,導致韌體更新失敗。" @@ -1635,22 +1733,22 @@ msgctxt "@title:window" msgid "User Agreement" msgstr "使用者授權" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:46 msgctxt "@window:title" msgid "Existing Connection" msgstr "目前連線中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:59 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:48 msgctxt "@message:text" msgid "This printer/group is already added to Cura. Please select another printer/group." msgstr "此印表機/群組已加入 Cura。請選擇另一個印表機/群組。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:76 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:65 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "連接到網路印表機" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:86 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:75 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" @@ -1661,333 +1759,395 @@ msgstr "" "\n" "從以下列表中選擇你的印表機:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:85 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:42 msgctxt "@action:button" msgid "Add" msgstr "增加" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:95 msgctxt "@action:button" msgid "Edit" msgstr "編輯" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:132 msgctxt "@action:button" msgid "Remove" msgstr "移除" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:125 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:114 msgctxt "@action:button" msgid "Refresh" msgstr "刷新" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:218 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:207 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "如果你的印表機未被列出,請閱讀網路列印故障排除指南" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:245 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:234 msgctxt "@label" msgid "Type" msgstr "類型" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:282 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:271 msgctxt "@label" msgid "Firmware version" msgstr "韌體版本" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:294 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 msgctxt "@label" msgid "Address" msgstr "位址" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:316 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:305 msgctxt "@label" -msgid "This printer is not set up to host a group of Ultimaker 3 printers." -msgstr "這台印表機未設定成管理一組 Ultimaker 3 印表機的主機。" +msgid "This printer is not set up to host a group of printers." +msgstr "此印表機未被設定為管理印表機群組。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:320 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:309 msgctxt "@label" -msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -msgstr "這台印表機是 %1 台 Ultimaker 3 印表機群組的主機。" +msgid "This printer is the host for a group of %1 printers." +msgstr "此印表機為 %1 印表機群組的管理者。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:330 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:319 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "該網路位址的印表機尚無回應。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:335 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:324 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:42 msgctxt "@action:button" msgid "Connect" msgstr "連接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:338 msgctxt "@title:window" msgid "Printer Address" msgstr "印表機網路位址" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:377 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:361 msgctxt "@alabel" msgid "Enter the IP address or hostname of your printer on the network." msgstr "輸入印表機在網路上的 IP 位址或主機名。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:407 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:390 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:132 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "確定" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:30 -msgctxt "@title:window" -msgid "Print over network" -msgstr "網路連線列印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:61 -msgctxt "@label" -msgid "Printer selection" -msgstr "印表機選擇" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:100 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:44 msgctxt "@action:button" msgid "Print" msgstr "列印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 -msgctxt "@label: arg 1 is group name" -msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" -msgstr "%1 未設定成管理一組連線的 Ultimaker 3 印表機的主機" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:47 +msgctxt "@title:window" +msgid "Print over network" +msgstr "網路連線列印" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:55 -msgctxt "@label link to connect manager" -msgid "Add/Remove printers" -msgstr "新增/移除印表機" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:79 +msgctxt "@label" +msgid "Printer selection" +msgstr "印表機選擇" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 -msgctxt "@info:tooltip" -msgid "Opens the print jobs page with your default web browser." -msgstr "使用預設瀏覽器開啟列印作業頁面。" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:173 +msgctxt "@label" +msgid "Not available" +msgstr "無法使用" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:130 -msgctxt "@action:button" -msgid "View print jobs" -msgstr "檢視列印作業" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:175 +msgctxt "@label" +msgid "Unreachable" +msgstr "無法連接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 -msgctxt "@label:status" -msgid "Preparing to print" -msgstr "準備列印中" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:263 -msgctxt "@label:status" -msgid "Printing" -msgstr "正在列印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 -msgctxt "@label:status" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml:180 +msgctxt "@label" msgid "Available" msgstr "可用" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:44 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:46 msgctxt "@label:status" -msgid "Lost connection with the printer" -msgstr "與印表機失去連線" +msgid "Aborted" +msgstr "已中斷" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:45 -msgctxt "@label:status" -msgid "Unavailable" -msgstr "無法使用" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 -msgctxt "@label:status" -msgid "Unknown" -msgstr "未知" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:249 -msgctxt "@label:status" -msgid "Disabled" -msgstr "已關閉" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:265 -msgctxt "@label:status" -msgid "Reserved" -msgstr "保留" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:268 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:39 msgctxt "@label:status" msgid "Finished" msgstr "已完成" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:392 -msgctxt "@label" -msgid "Preparing to print" -msgstr "準備列印中" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:42 msgctxt "@label:status" -msgid "Action required" -msgstr "需要採取的動作" +msgid "Preparing" +msgstr "正在準備" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:276 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:48 msgctxt "@label:status" -msgid "Paused" -msgstr "已暫停" +msgid "Pausing" +msgstr "暫停中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:52 msgctxt "@label:status" msgid "Resuming" msgstr "繼續" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:280 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml:54 msgctxt "@label:status" -msgid "Print aborted" -msgstr "列印已取消" +msgid "Action required" +msgstr "需要採取的動作" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:373 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:394 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213 msgctxt "@label" -msgid "Not accepting print jobs" -msgstr "不接受列印作業" +msgid "Waiting for: Unavailable printer" +msgstr "等待:印表機無法使用" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:387 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:215 msgctxt "@label" -msgid "Finishes at: " -msgstr "完成時間:" +msgid "Waiting for: First available" +msgstr "等待:第一可用" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:217 msgctxt "@label" -msgid "Clear build plate" -msgstr "清空列印平台" +msgid "Waiting for: " +msgstr "等待: " -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:396 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:299 msgctxt "@label" -msgid "Waiting for configuration change" -msgstr "等待設定更動" +msgid "Configuration change" +msgstr "設定更動" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:63 -msgctxt "@title" -msgid "Print jobs" -msgstr "列印作業" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:365 msgctxt "@label" -msgid "Printing" -msgstr "已排入佇列" +msgid "The assigned printer, %1, requires the following configuration change(s):" +msgstr "分配的印表機 %1 需要下列的設定更動:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:111 +#: /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 "已分配到印表機 %1,但列印工作含有未知的耗材設定。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:375 +msgctxt "@label" +msgid "Change material %1 from %2 to %3." +msgstr "將耗材 %1 從 %2 改成 %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 "將 %3 做為耗材 %1 載入(無法覆寫)。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:381 +msgctxt "@label" +msgid "Change print core %1 from %2 to %3." +msgstr "將 print core %1 從 %2 改成 %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 "將列印平台改成 %1(無法覆寫)。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:404 +msgctxt "@label" +msgid "Override" +msgstr "覆寫" + +#: /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 "使用不相容的設定啟動列印工作可能會損壞你的 3D 印表機。你確定要覆寫設定並列印 %1 嗎?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:435 +msgctxt "@window:title" +msgid "Override configuration configuration and start print" +msgstr "覆寫設定並開始列印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:466 +msgctxt "@label" +msgid "Glass" +msgstr "玻璃" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:469 +msgctxt "@label" +msgid "Aluminum" +msgstr "鋁" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:39 +msgctxt "@label link to connect manager" +msgid "Manage queue" +msgstr "管理隊列" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:60 msgctxt "@label" msgid "Queued" -msgstr "已排入佇列" +msgstr "已排入隊列" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:170 -msgctxt "@label:title" -msgid "Printers" -msgstr "印表機" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:36 +msgctxt "@label" +msgid "Printing" +msgstr "列印中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:224 -msgctxt "@action:button" -msgid "View printers" -msgstr "檢視印表機" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:49 +msgctxt "@label link to connect manager" +msgid "Manage printers" +msgstr "管理印表機" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:115 +msgctxt "@label" +msgid "Move to top" +msgstr "移至頂端" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:124 +msgctxt "@label" +msgid "Delete" +msgstr "刪除" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 +msgctxt "@label" +msgid "Resume" +msgstr "繼續" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 +msgctxt "@label" +msgid "Pause" +msgstr "暫停" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:146 +msgctxt "@label" +msgid "Abort" +msgstr "中斷" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:178 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to move %1 to the top of the queue?" +msgstr "你確定要將 %1 移至隊列的頂端嗎?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:179 +msgctxt "@window:title" +msgid "Move print job to top" +msgstr "將列印作業移至最頂端" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:188 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to delete %1?" +msgstr "你確定要刪除 %1 嗎?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:189 +msgctxt "@window:title" +msgid "Delete print job" +msgstr "刪除列印作業" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:198 +msgctxt "@label %1 is the name of a print job." +msgid "Are you sure you want to abort %1?" +msgstr "你確定要中斷 %1 嗎?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 +msgctxt "@window:title" +msgid "Abort print" +msgstr "中斷列印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:43 msgctxt "@info:tooltip" msgid "Connect to a printer" msgstr "連接到印表機" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 -msgctxt "@info:tooltip" -msgid "Load the configuration of the printer into Cura" -msgstr "將印表機設定載入 Cura" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:121 msgctxt "@action:button" msgid "Activate Configuration" msgstr "啟用設定" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:117 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:122 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "將印表機設定載入 Cura" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:130 msgctxt "@label" msgid "Color scheme" msgstr "顏色方案" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:132 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:145 msgctxt "@label:listbox" msgid "Material Color" msgstr "耗材顏色" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:136 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:149 msgctxt "@label:listbox" msgid "Line Type" msgstr "線條類型" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:140 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:153 msgctxt "@label:listbox" msgid "Feedrate" msgstr "進給率" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:144 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:157 msgctxt "@label:listbox" msgid "Layer thickness" msgstr "層厚" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:185 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:198 msgctxt "@label" msgid "Compatibility Mode" msgstr "相容模式" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:264 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:284 msgctxt "@label" msgid "Show Travels" msgstr "顯示移動軌跡" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:270 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:290 msgctxt "@label" msgid "Show Helpers" msgstr "顯示輔助結構" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:276 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:296 msgctxt "@label" msgid "Show Shell" msgstr "顯示外殼" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:282 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:302 msgctxt "@label" msgid "Show Infill" msgstr "顯示填充" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:330 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:355 msgctxt "@label" msgid "Only Show Top Layers" msgstr "只顯示頂層" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:339 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:366 msgctxt "@label" msgid "Show 5 Detailed Layers On Top" msgstr "顯示頂端 5 層列印細節" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:350 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:379 msgctxt "@label" msgid "Top / Bottom" msgstr "頂 / 底層" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:354 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:383 msgctxt "@label" msgid "Inner Wall" msgstr "內壁" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:410 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:448 msgctxt "@label" msgid "min" msgstr "最小值" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:452 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:500 msgctxt "@label" msgid "max" msgstr "最大值" @@ -2002,17 +2162,17 @@ msgctxt "@label" msgid "Post Processing Scripts" msgstr "後處理腳本" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:225 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:227 msgctxt "@action" msgid "Add a script" msgstr "添加一個腳本" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:271 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:273 msgctxt "@label" msgid "Settings" msgstr "設定" -#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:474 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:477 msgctxt "@info:tooltip" msgid "Change active post-processing scripts" msgstr "更改目前啟用的後處理腳本" @@ -2107,53 +2267,53 @@ msgctxt "@action:label" msgid "Smoothing" msgstr "平滑" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:38 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:37 msgctxt "@label" msgid "Mesh Type" msgstr "網格類型" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:69 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:68 msgctxt "@label" msgid "Normal model" msgstr "普通模型" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:76 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:75 msgctxt "@label" msgid "Print as support" msgstr "做為支撐" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:84 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:83 msgctxt "@label" msgid "Don't support overlap with other models" msgstr "不支援與其他模型重疊" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:92 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:91 msgctxt "@label" msgid "Modify settings for overlap with other models" msgstr "修改其他模型的重疊設定" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:100 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:99 msgctxt "@label" msgid "Modify settings for infill of other models" msgstr "修改其他模型的填充設定" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:342 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:347 msgctxt "@action:button" msgid "Select settings" msgstr "選擇設定" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:384 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:389 msgctxt "@title:window" msgid "Select Settings to Customize for this model" msgstr "選擇對此模型的自訂設定" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:432 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:437 #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:98 msgctxt "@label:textbox" msgid "Filter..." msgstr "篩選…" -#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:446 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:451 msgctxt "@label:checkbox" msgid "Show all" msgstr "顯示全部" @@ -2175,13 +2335,13 @@ msgid "Create new" msgstr "新建" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 msgctxt "@action:title" msgid "Summary - Cura Project" msgstr "摘要 - Cura 專案" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:96 msgctxt "@action:label" msgid "Printer settings" msgstr "印表機設定" @@ -2198,18 +2358,19 @@ msgid "Update" msgstr "更新" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:143 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:105 msgctxt "@action:label" msgid "Type" msgstr "類型" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 msgctxt "@action:label" msgid "Printer Group" msgstr "印表機群組" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:192 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:196 msgctxt "@action:label" msgid "Profile settings" msgstr "列印參數設定" @@ -2221,19 +2382,20 @@ msgstr "如何解决列印參數中的設定衝突?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:220 msgctxt "@action:label" msgid "Name" msgstr "名稱" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:200 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:204 msgctxt "@action:label" msgid "Not in profile" msgstr "不在列印參數中" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:205 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2261,7 +2423,7 @@ msgid "How should the conflict in the material be resolved?" msgstr "如何解决耗材的設定衝突?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:327 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:233 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:237 msgctxt "@action:label" msgid "Setting visibility" msgstr "參數顯示設定" @@ -2272,13 +2434,13 @@ msgid "Mode" msgstr "模式" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:352 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:246 msgctxt "@action:label" msgid "Visible settings:" msgstr "顯示設定:" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:357 -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:251 msgctxt "@action:label" msgid "%1 out of %2" msgstr "%1 / %2" @@ -2334,36 +2496,6 @@ msgctxt "@action:button" msgid "Move to Next Position" msgstr "移動到下一個位置" -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:30 -msgctxt "@title" -msgid "Upgrade Firmware" -msgstr "升級韌體" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:41 -msgctxt "@label" -msgid "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work." -msgstr "韌體是直接在 3D 印表機上運行的一個軟體。此韌體控制步進馬達,調節溫度讓印表機正常運作。" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:51 -msgctxt "@label" -msgid "The firmware shipping with new printers works, but new versions tend to have more features and improvements." -msgstr "新印表機出廠配備的韌體完全可以正常使用,但新版本往往具有更多的新功能和改進。" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:65 -msgctxt "@action:button" -msgid "Automatically upgrade Firmware" -msgstr "自動升級韌體" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:75 -msgctxt "@action:button" -msgid "Upload custom Firmware" -msgstr "上傳自訂韌體" - -#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:87 -msgctxt "@title:window" -msgid "Select custom firmware" -msgstr "選擇自訂韌體" - #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 msgctxt "@label" msgid "Please select any upgrades made to this Ultimaker Original" @@ -2392,7 +2524,7 @@ msgstr "開始印表機檢查" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:80 msgctxt "@label" msgid "Connection: " -msgstr "連線:" +msgstr "連線: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:89 msgctxt "@info:status" @@ -2407,7 +2539,7 @@ msgstr "未連線" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:99 msgctxt "@label" msgid "Min endstop X: " -msgstr "X Min 限位開關:" +msgstr "X Min 限位開關: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:109 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:130 @@ -2428,17 +2560,17 @@ msgstr "未檢查" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:120 msgctxt "@label" msgid "Min endstop Y: " -msgstr "Y Min 限位開關:" +msgstr "Y Min 限位開關: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:141 msgctxt "@label" msgid "Min endstop Z: " -msgstr "Z Min 限位開關:" +msgstr "Z Min 限位開關: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:163 msgctxt "@label" msgid "Nozzle temperature check: " -msgstr "檢查噴頭溫度:" +msgstr "檢查噴頭溫度: " #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:187 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:248 @@ -2511,27 +2643,11 @@ msgctxt "@label:MonitorStatus" msgid "Please remove the print" msgstr "請取出列印件" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293 -msgctxt "@label:" -msgid "Pause" -msgstr "暫停" - -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289 -msgctxt "@label:" -msgid "Resume" -msgstr "繼續" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325 -msgctxt "@label:" +msgctxt "@label" msgid "Abort Print" msgstr "中斷列印" -#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335 -msgctxt "@window:title" -msgid "Abort print" -msgstr "中斷列印" - #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" @@ -2567,19 +2683,17 @@ msgid "Customized" msgstr "自訂" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:634 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:637 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "總是詢問" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:635 msgctxt "@option:discardOrKeep" msgid "Discard and never ask again" msgstr "捨棄更改,並不再詢問此問題" #: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 msgctxt "@option:discardOrKeep" msgid "Keep and never ask again" msgstr "保留更改,並不再詢問此問題" @@ -2599,101 +2713,179 @@ msgctxt "@action:button" msgid "Create New Profile" msgstr "建立新的列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:65 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" msgid "Information" msgstr "資訊" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:100 msgctxt "@title:window" msgid "Confirm Diameter Change" msgstr "直徑更改確認" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101 msgctxt "@label (%1 is a number)" msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?" msgstr "新的耗材直徑設定為 %1 mm,這與目前的擠出機不相容。你要繼續嗎?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 msgctxt "@label" msgid "Display Name" msgstr "顯示名稱" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 msgctxt "@label" msgid "Brand" msgstr "品牌" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 msgctxt "@label" msgid "Material Type" msgstr "耗材類型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:162 msgctxt "@label" msgid "Color" msgstr "顏色" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:212 msgctxt "@label" msgid "Properties" msgstr "屬性" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:214 msgctxt "@label" msgid "Density" msgstr "密度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:229 msgctxt "@label" msgid "Diameter" msgstr "直徑" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:253 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:263 msgctxt "@label" msgid "Filament Cost" msgstr "耗材成本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:269 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:280 msgctxt "@label" msgid "Filament weight" msgstr "耗材重量" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:298 msgctxt "@label" msgid "Filament length" msgstr "耗材長度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:295 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:307 msgctxt "@label" msgid "Cost per Meter" msgstr "每公尺成本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:309 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "此耗材與 %1 相關聯,並共享其部份屬性。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:328 msgctxt "@label" msgid "Unlink Material" msgstr "解除聯結耗材" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:327 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:339 msgctxt "@label" msgid "Description" msgstr "描述" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:352 msgctxt "@label" msgid "Adhesion Information" msgstr "附著資訊" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:366 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:378 msgctxt "@label" msgid "Print settings" msgstr "列印設定" +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +msgctxt "@action:button" +msgid "Activate" +msgstr "啟用" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +msgctxt "@action:button" +msgid "Create" +msgstr "建立" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "複製" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +msgctxt "@action:button" +msgid "Import" +msgstr "匯入" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +msgctxt "@action:button" +msgid "Export" +msgstr "匯出" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +msgctxt "@action:label" +msgid "Printer" +msgstr "印表機" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 +msgctxt "@title:window" +msgid "Confirm Remove" +msgstr "移除確認" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 +msgctxt "@label (%1 is object name)" +msgid "Are you sure you wish to remove %1? This cannot be undone!" +msgstr "你確定要移除 %1 嗎?這動作無法復原!" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +msgctxt "@title:window" +msgid "Import Material" +msgstr "匯入耗材設定" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +msgctxt "@info:status Don't translate the XML tags or !" +msgid "Could not import material %1: %2" +msgstr "無法匯入耗材 %1%2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully imported material %1" +msgstr "成功匯入耗材 %1" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +msgctxt "@title:window" +msgid "Export Material" +msgstr "匯出耗材設定" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +msgctxt "@info:status Don't translate the XML tags and !" +msgid "Failed to export material to %1: %2" +msgstr "無法匯出耗材至 %1%2" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +msgctxt "@info:status Don't translate the XML tag !" +msgid "Successfully exported material to %1" +msgstr "成功匯出耗材至:%1" + #: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 msgctxt "@title:tab" msgid "Setting Visibility" @@ -2730,289 +2922,287 @@ msgid "Unit" msgstr "單位" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:531 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:544 msgctxt "@title:tab" msgid "General" msgstr "基本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:142 msgctxt "@label" msgid "Interface" msgstr "介面" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:152 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:153 msgctxt "@label" msgid "Language:" msgstr "語言:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Currency:" msgstr "貨幣:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:234 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:235 msgctxt "@label" msgid "Theme:" msgstr "主題:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:292 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "需重新啟動 Cura,新的設定才能生效。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:309 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "當設定變更時自動進行切片。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:319 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:317 msgctxt "@option:check" msgid "Slice automatically" msgstr "自動切片" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:331 msgctxt "@label" msgid "Viewport behavior" msgstr "顯示區設定" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:339 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "以紅色凸顯模型缺少支撐的區域。如果沒有支撐這些區域將無法正常列印。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:348 msgctxt "@option:check" msgid "Display overhang" msgstr "顯示突出部分" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:357 +#: /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 "當模型被選中時,視角將自動調整到最合適的觀察位置(模型處於正中央)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:362 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:360 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "當專案被選中時,自動置中視角" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:369 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "需要讓 Cura 的預設縮放操作反轉嗎?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:374 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "反轉視角縮放方向。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:386 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "是否跟隨滑鼠方向進行縮放?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:391 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "跟隨滑鼠方向縮放" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:401 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "需要移動平台上的模型,使它們不再交錯嗎?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:404 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "確保每個模型都保持分離" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:413 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "要將模型下降到碰觸列印平台嗎?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:418 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "自動下降模型到列印平台" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "在 g-code 讀取器中顯示警告訊息。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:439 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "G-code 讀取器中的警告訊息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:447 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "分層檢視要強制進入相容模式嗎?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:452 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "強制分層檢視相容模式(需要重新啟動)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:470 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:468 msgctxt "@label" msgid "Opening and saving files" msgstr "開啟並儲存檔案" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:477 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:475 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "當模型的尺寸過大時,是否將模型自動縮小至列印範圍嗎?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:482 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:480 msgctxt "@option:check" msgid "Scale large models" msgstr "縮小過大模型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 msgctxt "@info:tooltip" msgid "An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?" msgstr "部份模型採用較大的單位(例如:公尺),導致模型變得非常小,要將這些模型放大嗎?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:495 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "放大過小模型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:505 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "模型載入後要設為被選擇的狀態嗎?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:510 msgctxt "@option:check" msgid "Select models when loaded" msgstr "模型載入後選擇模型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "是否自動將印表機名稱作為列印作業名稱的前綴?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:525 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "將印表機名稱前綴添加到列印作業名稱中" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "儲存專案檔案時是否顯示摘要?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:541 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:539 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "儲存專案時顯示摘要對話框" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:551 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:549 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "開啟專案檔案時的預設行為" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:559 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@window:text" msgid "Default behavior when opening a project file: " -msgstr "開啟專案檔案時的預設行為:" +msgstr "開啟專案檔案時的預設行為: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 msgctxt "@option:openProject" -msgid "Always ask" -msgstr "總是詢問" +msgid "Always ask me this" +msgstr "每次都向我確認" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "總是作為一個專案開啟" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:575 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573 msgctxt "@option:openProject" msgid "Always import models" msgstr "總是匯入模型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:611 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:609 msgctxt "@info:tooltip" msgid "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again." msgstr "當你對列印參數進行更改然後切換到其他列印參數時,將顯示一個對話框詢問你是否要保留修改。你也可以選擇預設不顯示該對話框。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@label" -msgid "Override Profile" -msgstr "覆寫列印參數" +msgid "Profiles" +msgstr "列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:623 +msgctxt "@window:text" +msgid "Default behavior for changed setting values when switching to a different profile: " +msgstr "當切換到另一組列印參數時,對於被修改過的設定的預設行為: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:638 +msgctxt "@option:discardOrKeep" +msgid "Always discard changed settings" +msgstr "總是放棄修改過的設定" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:639 +msgctxt "@option:discardOrKeep" +msgid "Always transfer changed settings to new profile" +msgstr "總是將修改過的設定轉移至新的列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:673 msgctxt "@label" msgid "Privacy" msgstr "隱私權" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:678 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "當 Cura 啟動時,是否自動檢查更新?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:683 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:check" msgid "Check for updates on start" msgstr "啟動時檢查更新" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:694 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:697 msgctxt "@info:tooltip" msgid "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored." msgstr "你願意將關於你的列印資料以匿名形式發送到 Ultimaker 嗎?注意:我們不會記錄或發送任何模型、IP 地址或其他私人資料。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:699 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:702 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(匿名)發送列印資訊" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:711 msgctxt "@action:button" msgid "More information" msgstr "更多資訊" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:726 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:729 msgctxt "@label" msgid "Experimental" msgstr "實驗功能" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:733 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:736 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "使用多列印平台功能" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:738 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:741 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "使用多列印平台功能(需重啟軟體)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:748 -msgctxt "@info:tooltip" -msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" -msgstr "新載入的模型要擺放在列印平台上嗎?必需與多列印平台功能一起使用(實驗功能)" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:753 -msgctxt "@option:check" -msgid "Do not arrange objects on load" -msgstr "載入時不要擺放物件" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:549 msgctxt "@title:tab" msgid "Printers" msgstr "印表機" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:35 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:90 -msgctxt "@action:button" -msgid "Activate" -msgstr "啟用" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:55 #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 msgctxt "@action:button" @@ -3030,7 +3220,7 @@ msgid "Connection:" msgstr "連線:" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:162 -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/OutputDeviceHeader.qml:55 msgctxt "@info:status" msgid "The printer is not connected." msgstr "尚未連線到印表機。" @@ -3056,7 +3246,7 @@ msgid "Aborting print..." msgstr "中斷列印..." #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:553 msgctxt "@title:tab" msgid "Profiles" msgstr "列印參數" @@ -3071,18 +3261,6 @@ msgctxt "@label" msgid "Duplicate" msgstr "複製" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:145 -msgctxt "@action:button" -msgid "Import" -msgstr "匯入" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:158 -msgctxt "@action:button" -msgid "Export" -msgstr "匯出" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 msgctxt "@title:window" msgid "Create Profile" @@ -3093,18 +3271,6 @@ msgctxt "@title:window" msgid "Duplicate Profile" msgstr "複製列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:221 -msgctxt "@title:window" -msgid "Confirm Remove" -msgstr "移除確認" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:240 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:222 -msgctxt "@label (%1 is object name)" -msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "你確定要移除 %1 嗎?這動作無法復原!" - #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:256 msgctxt "@title:window" msgid "Rename Profile" @@ -3125,126 +3291,78 @@ msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "印表機:%1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Protected profiles" msgstr "受保護的列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:403 msgctxt "@label" msgid "Custom profiles" msgstr "自訂列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:468 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:480 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "使用目前設定 / 覆寫值更新列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:475 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:487 msgctxt "@action:button" msgid "Discard current changes" msgstr "捨棄目前更改" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:492 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:504 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "此列印參數使用印表機指定的預設值,因此在下面的列表中沒有此設定項。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:499 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:511 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "你目前的設定與選定的列印參數相匹配。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:518 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:530 msgctxt "@title:tab" msgid "Global Settings" msgstr "全局設定" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:40 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:538 -msgctxt "@title:tab" -msgid "Materials" -msgstr "耗材" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:105 -msgctxt "@action:button" -msgid "Create" -msgstr "建立" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:118 -msgctxt "@action:button" -msgid "Duplicate" -msgstr "複製" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:235 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:243 -msgctxt "@title:window" -msgid "Import Material" -msgstr "匯入耗材設定" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:244 -msgctxt "@info:status Don't translate the XML tags or !" -msgid "Could not import material %1: %2" -msgstr "無法匯入耗材 %1%2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:248 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully imported material %1" -msgstr "成功匯入耗材 %1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:266 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:274 -msgctxt "@title:window" -msgid "Export Material" -msgstr "匯出耗材設定" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:278 -msgctxt "@info:status Don't translate the XML tags and !" -msgid "Failed to export material to %1: %2" -msgstr "無法匯出耗材至 %1%2" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:284 -msgctxt "@info:status Don't translate the XML tag !" -msgid "Successfully exported material to %1" -msgstr "成功匯出耗材至:%1" - -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:337 -msgctxt "@action:label" -msgid "Printer" -msgstr "印表機" - #: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:896 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:953 msgctxt "@title:window" msgid "Add Printer" msgstr "新增印表機" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:195 msgctxt "@label" msgid "Printer Name:" msgstr "印表機名稱:" -#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:219 msgctxt "@action:button" msgid "Add Printer" msgstr "新增印表機" +#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84 +msgctxt "@text Print job name" +msgid "Untitled" +msgstr "無標題" + #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 msgctxt "@title:window" msgid "About Cura" msgstr "關於 Cura" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:55 msgctxt "@label" msgid "version: %1" msgstr "版本:%1" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 msgctxt "@label" msgid "End-to-end solution for fused filament 3D printing." msgstr "熔絲 3D 列印技術的的端對端解決方案。" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:82 msgctxt "@info:credit" msgid "" "Cura is developed by Ultimaker B.V. in cooperation with the community.\n" @@ -3253,102 +3371,122 @@ msgstr "" "Cura 由 Ultimaker B.V. 與社區合作開發。\n" "Cura 使用以下開源專案:" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 msgctxt "@label" msgid "Graphical user interface" msgstr "圖形用戶介面" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 msgctxt "@label" msgid "Application framework" msgstr "應用框架" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 msgctxt "@label" msgid "G-code generator" msgstr "G-code 產生器" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@label" msgid "Interprocess communication library" msgstr "進程間通訊交互使用庫" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" msgid "Programming language" msgstr "編程語言" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 msgctxt "@label" msgid "GUI framework" msgstr "GUI 框架" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 msgctxt "@label" msgid "GUI framework bindings" msgstr "GUI 框架綁定" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:140 msgctxt "@label" msgid "C/C++ Binding library" msgstr "C / C++ 綁定庫" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:141 msgctxt "@label" msgid "Data interchange format" msgstr "資料交換格式" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:142 msgctxt "@label" msgid "Support library for scientific computing" msgstr "科學計算函式庫" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:143 msgctxt "@label" msgid "Support library for faster math" msgstr "高速運算函式庫" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:144 msgctxt "@label" msgid "Support library for handling STL files" msgstr "用於處理 STL 檔案的函式庫" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:145 +msgctxt "@label" +msgid "Support library for handling planar objects" +msgstr "用於處理平面物件的函式庫" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:146 +msgctxt "@label" +msgid "Support library for handling triangular meshes" +msgstr "用於處理三角形網格的函式庫" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +msgctxt "@label" +msgid "Support library for analysis of complex networks" +msgstr "用於分析複雜網路的函式庫" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:148 msgctxt "@label" msgid "Support library for handling 3MF files" msgstr "用於處理 3MF 檔案的函式庫" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:149 +msgctxt "@label" +msgid "Support library for file metadata and streaming" +msgstr "用於檔案 metadata 和串流的函式庫" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:150 msgctxt "@label" msgid "Serial communication library" msgstr "串口通訊函式庫" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:151 msgctxt "@label" msgid "ZeroConf discovery library" msgstr "ZeroConf 發現函式庫" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:152 msgctxt "@label" msgid "Polygon clipping library" msgstr "多邊形剪輯函式庫" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:153 msgctxt "@Label" msgid "Python HTTP library" msgstr "Python HTTP 函式庫" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:155 msgctxt "@label" msgid "Font" msgstr "字體" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:156 msgctxt "@label" msgid "SVG icons" msgstr "SVG 圖標" -#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:157 msgctxt "@label" msgid "Linux cross-distribution application deployment" msgstr "Linux cross-distribution 應用程式部署" @@ -3358,7 +3496,7 @@ msgctxt "@label" msgid "Profile:" msgstr "列印參數:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" msgid "" "Some setting/override values are different from the values stored in the profile.\n" @@ -3369,53 +3507,53 @@ msgstr "" "\n" "點擊開啟列印參數管理器。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:199 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:200 msgctxt "@label:textbox" msgid "Search..." msgstr "搜尋..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:544 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:545 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "將設定值複製到所有擠出機" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:554 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "複製所有改變的設定值到所有擠出機" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:568 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:591 msgctxt "@action:menu" msgid "Hide this setting" msgstr "隱藏此設定" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:586 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:609 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "不再顯示此設定" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:613 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "保持此設定顯示" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:614 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:426 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:637 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:417 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "參數顯示設定..." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:621 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:644 msgctxt "@action:inmenu" msgid "Collapse All" msgstr "全部折疊" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:626 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:649 msgctxt "@action:inmenu" msgid "Expand All" msgstr "全部展開" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:253 msgctxt "@label" msgid "" "Some hidden settings use values different from their normal calculated value.\n" @@ -3436,17 +3574,17 @@ msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "影響因素" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:154 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:155 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "這個設定是所有擠出機共用的。修改它會同時更動到所有擠出機的值。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:158 msgctxt "@label" msgid "The value is resolved from per-extruder values " -msgstr "這個數值是由每個擠出機的設定值解析出來的" +msgstr "這個數值是由每個擠出機的設定值解析出來的 " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:188 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:189 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3457,7 +3595,7 @@ msgstr "" "\n" "單擊以復原列印參數的值。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:281 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3504,7 +3642,7 @@ msgid "Send a custom G-code command to the connected printer. Press 'enter' to s msgstr "傳送一個自訂的 G-code 命令到連接中的印表機。按下 Enter 鍵傳送命令。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:272 msgctxt "@label" msgid "Extruder" msgstr "擠出機" @@ -3522,7 +3660,7 @@ msgstr "此加熱頭的目前溫度。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:172 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." -msgstr "加熱頭預熱溫度" +msgstr "加熱頭預熱溫度。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:336 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:331 @@ -3557,7 +3695,7 @@ msgid "The nozzle inserted in this extruder." msgstr "該擠出機所使用的噴頭。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:25 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:489 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:493 msgctxt "@label" msgid "Build plate" msgstr "列印平台" @@ -3582,6 +3720,21 @@ msgctxt "@tooltip of pre-heat" msgid "Heat the bed in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the bed to heat up when you're ready to print." msgstr "列印前請預熱熱床。你可以在熱床加熱時繼續調整相關物件,讓你在準備列印時不必等待熱床加熱完畢。" +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13 +msgctxt "@label:category menu label" +msgid "Material" +msgstr "耗材" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37 +msgctxt "@label:category menu label" +msgid "Favorites" +msgstr "常用" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61 +msgctxt "@label:category menu label" +msgid "Generic" +msgstr "通用" + #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3597,12 +3750,12 @@ msgctxt "@title:menu menubar:toplevel" msgid "&View" msgstr "檢視(&V)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:39 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:42 msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "視角位置(&C)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:58 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "列印平台(&B)" @@ -3612,12 +3765,12 @@ msgctxt "@action:inmenu" msgid "Visible Settings" msgstr "顯示設定" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:42 msgctxt "@action:inmenu" msgid "Show All Settings" msgstr "顯示所有設定" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:53 msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "管理參數顯示..." @@ -3678,344 +3831,343 @@ msgstr "" "列印設定已關閉\n" "G-code 檔案無法被修改" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:340 msgctxt "@label Hours and minutes" msgid "00h 00min" msgstr "00 小時 00 分" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:359 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:358 msgctxt "@tooltip" msgid "Time specification" msgstr "時間規格" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:441 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:440 msgctxt "@label" msgid "Cost specification" msgstr "成本明細" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:445 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 msgctxt "@label m for meter" msgid "%1m" msgstr "%1m" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:447 -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:446 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:455 msgctxt "@label g for grams" msgid "%1g" msgstr "%1g" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:454 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:453 msgctxt "@label" msgid "Total:" msgstr "總共:" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:577 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:576 msgctxt "@tooltip" msgid "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality." msgstr "推薦的列印設定

使用針對所選印表機、耗材和品質的推薦設定進行列印。" -#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:582 +#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:581 msgctxt "@tooltip" msgid "Custom Print Setup

Print with finegrained control over every last bit of the slicing process." msgstr "自訂列印設定
對切片過程中的每一個細節進行精細控制。" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:107 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:106 msgctxt "@label" msgid "Active print" msgstr "正在列印" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:115 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:114 msgctxt "@label" msgid "Job Name" msgstr "作業名稱" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:122 msgctxt "@label" msgid "Printing Time" msgstr "列印時間" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:131 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:130 msgctxt "@label" msgid "Estimated time left" msgstr "預計剩餘時間" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 msgctxt "@action:inmenu" -msgid "Toggle Fu&ll Screen" -msgstr "切換全螢幕(&F)" +msgid "Toggle Full Screen" +msgstr "切換全螢幕" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:86 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "復原(&U)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "取消復原(&R)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:105 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:106 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "退出(&Q)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu menubar:view" -msgid "&3D View" -msgstr "立體圖(&3)" +msgid "3D View" +msgstr "立體圖" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 msgctxt "@action:inmenu menubar:view" -msgid "&Front View" -msgstr "前視圖(&F)" +msgid "Front View" +msgstr "前視圖" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:128 msgctxt "@action:inmenu menubar:view" -msgid "&Top View" -msgstr "上視圖(&T)" +msgid "Top View" +msgstr "上視圖" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:135 msgctxt "@action:inmenu menubar:view" -msgid "&Left Side View" -msgstr "左視圖(&L)" +msgid "Left Side View" +msgstr "左視圖" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:141 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 msgctxt "@action:inmenu menubar:view" -msgid "&Right Side View" -msgstr "右視圖(&R)" +msgid "Right Side View" +msgstr "右視圖" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:148 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:149 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "設定 Cura…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:155 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:156 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "新增印表機(&A)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "管理印表機(&I)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:169 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "管理耗材…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "使用目前設定 / 覆寫更新列印參數(&U)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:185 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "捨棄目前更改(&D)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:196 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:197 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "從目前設定 / 覆寫值建立列印參數(&C)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:202 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "管理列印參數.." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:209 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:210 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "顯示線上說明文件(&D)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:218 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "BUG 回報(&B)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:225 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu menubar:help" -msgid "&About..." -msgstr "關於(&A)…" +msgid "About..." +msgstr "關於…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:232 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:233 msgctxt "@action:inmenu menubar:edit" -msgid "Delete &Selected Model" -msgid_plural "Delete &Selected Models" -msgstr[0] "刪除所選模型(&S)" +msgid "Delete Selected Model" +msgid_plural "Delete Selected Models" +msgstr[0] "刪除所選模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:243 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "置中所選模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:252 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "複製所選模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:261 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "刪除模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:278 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:269 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "將模型置中(&N)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:284 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:275 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "群組模型(&G)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:295 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "取消模型群組" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:305 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "結合模型(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:324 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:315 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "複製模型…(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:322 msgctxt "@action:inmenu menubar:edit" -msgid "&Select All Models" -msgstr "選擇所有模型(&S)" +msgid "Select All Models" +msgstr "選擇所有模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:332 msgctxt "@action:inmenu menubar:edit" -msgid "&Clear Build Plate" -msgstr "清空列印平台(&C)" +msgid "Clear Build Plate" +msgstr "清空列印平台" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:342 +msgctxt "@action:inmenu menubar:file" +msgid "Reload All Models" +msgstr "重新載入所有模型" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:351 -msgctxt "@action:inmenu menubar:file" -msgid "Re&load All Models" -msgstr "重新載入所有模型(&L)" - -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:360 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "將所有模型排列到所有列印平台上" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "排列所有模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:375 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:366 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "排列所選模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:373 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "重置所有模型位置" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:380 msgctxt "@action:inmenu menubar:edit" -msgid "Reset All Model &Transformations" -msgstr "重置所有模型旋轉(&T)" +msgid "Reset All Model Transformations" +msgstr "重置所有模型旋轉" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:387 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "開啟檔案(&O)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:404 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:395 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "新建專案(&N)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:402 msgctxt "@action:inmenu menubar:help" msgid "Show Engine &Log..." msgstr "顯示切片引擎日誌(&L)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:419 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:410 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "顯示設定資料夾" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:424 msgctxt "@action:menu" msgid "Browse packages..." msgstr "瀏覽軟體包..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:440 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:431 msgctxt "@action:inmenu menubar:view" msgid "Expand/Collapse Sidebar" msgstr "展開/收合側邊欄" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:26 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:27 msgctxt "@label:PrintjobStatus" msgid "Please load a 3D model" msgstr "請載入一個 3D 模型" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:37 msgctxt "@label:PrintjobStatus" msgid "Ready to slice" msgstr "切片已準備就緒" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:39 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "正在切片..." -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:41 msgctxt "@label:PrintjobStatus %1 is target operation" msgid "Ready to %1" msgstr "%1 已準備就緒" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:43 msgctxt "@label:PrintjobStatus" msgid "Unable to Slice" msgstr "無法切片" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:44 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:45 msgctxt "@label:PrintjobStatus" msgid "Slicing unavailable" msgstr "切片無法使用" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Slice current printjob" msgstr "對目前列印工作進行切片" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:171 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:172 msgctxt "@info:tooltip" msgid "Cancel slicing process" msgstr "取消進行中的切片程序" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Prepare" msgstr "準備" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:183 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:184 msgctxt "@label:Printjob" msgid "Cancel" msgstr "取消" -#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:317 +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:320 msgctxt "@info:tooltip" msgid "Select the active output device" msgstr "選擇作用中的輸出裝置" #: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:713 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:767 msgctxt "@title:window" msgid "Open file(s)" msgstr "開啟檔案" @@ -4035,129 +4187,145 @@ msgctxt "@title:window" msgid "Ultimaker Cura" msgstr "Ultimaker Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:103 msgctxt "@title:menu menubar:toplevel" msgid "&File" msgstr "檔案(&F)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:121 +msgctxt "@title:menu menubar:file" +msgid "&Save..." +msgstr "儲存(&S)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:142 +msgctxt "@title:menu menubar:file" +msgid "&Export..." +msgstr "匯出(&E)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:153 msgctxt "@action:inmenu menubar:file" -msgid "&Save Selection to File" -msgstr "儲存到檔案(&S)" +msgid "Export Selection..." +msgstr "匯出選擇…" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:128 -msgctxt "@title:menu menubar:file" -msgid "Save &As..." -msgstr "另存為(&A)…" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:139 -msgctxt "@title:menu menubar:file" -msgid "Save &Project..." -msgstr "儲存專案...(&P)" - -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:174 msgctxt "@title:menu menubar:toplevel" msgid "&Edit" msgstr "編輯(&E)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:179 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:191 msgctxt "@title:menu" msgid "&View" msgstr "檢視(&V)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:196 msgctxt "@title:menu" msgid "&Settings" msgstr "設定(&S)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:186 -msgctxt "@title:menu menubar:toplevel" +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "印表機(&P)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:195 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:207 msgctxt "@title:menu" msgid "&Material" msgstr "耗材(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:216 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "設為主要擠出機" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:210 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:184 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:222 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:188 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "啟用擠出機" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:217 -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:190 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:229 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:194 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "關閉擠出機" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:241 msgctxt "@title:menu" +msgid "&Build plate" +msgstr "列印平台(&B)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:242 +msgctxt "@title:settings" msgid "&Profile" msgstr "列印參數(&P)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:252 msgctxt "@title:menu menubar:toplevel" msgid "E&xtensions" msgstr "擴充功能(&X)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:274 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:286 msgctxt "@title:menu menubar:toplevel" msgid "&Toolbox" msgstr "工具箱(&T)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:294 msgctxt "@title:menu menubar:toplevel" msgid "P&references" msgstr "偏好設定(&R)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:289 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:302 msgctxt "@title:menu menubar:toplevel" msgid "&Help" msgstr "幫助(&H)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:348 msgctxt "@label" msgid "This package will be installed after restarting." msgstr "此軟體包將在重新啟動後安裝。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:377 msgctxt "@action:button" msgid "Open File" msgstr "開啟檔案" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:534 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:547 msgctxt "@title:tab" msgid "Settings" msgstr "設定" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:579 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:593 msgctxt "@title:window" msgid "New project" msgstr "新建專案" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:594 msgctxt "@info:question" msgid "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings." msgstr "你確定要開始一個新專案嗎?這將清除列印平台及任何未儲存的設定。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:814 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:722 +msgctxt "@title:window" +msgid "Closing Cura" +msgstr "關閉 Cura 中" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:723 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:735 +msgctxt "@label" +msgid "Are you sure you want to exit Cura?" +msgstr "你確定要結束 Cura 嗎?" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868 msgctxt "@window:title" msgid "Install Package" msgstr "安裝軟體包" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:821 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:875 msgctxt "@title:window" msgid "Open File(s)" msgstr "開啟檔案" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:824 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:878 msgctxt "@text:window" msgid "We have found one or more G-Code files within the files you have selected. You can only open one G-Code file at a time. If you want to open a G-Code file, please just select only one." msgstr "我們已經在你選擇的檔案中找到一個或多個 G-Code 檔案。你一次只能開啟一個 G-Code 檔案。若需開啟 G-Code 檔案,請僅選擇一個。" @@ -4167,112 +4335,107 @@ msgctxt "@title:window" msgid "Save Project" msgstr "儲存專案" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:116 -msgctxt "@action:label" -msgid "" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:137 msgctxt "@action:label" msgid "Build plate" msgstr "列印平台" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:169 msgctxt "@action:label" msgid "Extruder %1" msgstr "擠出機 %1" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & 耗材" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:268 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "儲存時不再顯示專案摘要" -#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:283 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:287 msgctxt "@action:button" msgid "Save" msgstr "儲存" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:192 msgctxt "@label" msgid "Layer Height" msgstr "層高" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:252 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:277 msgctxt "@tooltip" msgid "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile" -msgstr "品質參數不適用於目前的耗材和噴頭設定。請變更這些設定以啟用此品質參數。" +msgstr "品質參數不適用於目前的耗材和噴頭設定。請變更這些設定以啟用此品質參數" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:450 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" msgstr "目前正使用自訂列印參數。若要使用品質滑動條,在自訂分頁中選擇預設的列印參數" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:467 msgctxt "@label" msgid "Print Speed" msgstr "列印速度" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:444 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:479 msgctxt "@label" msgid "Slower" msgstr "更慢" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:455 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:490 msgctxt "@label" msgid "Faster" msgstr "更快" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:483 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:518 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." msgstr "你修改過部份列印參數設定。如果你想改變這些設定,請切換到自訂模式。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:541 msgctxt "@label" msgid "Infill" msgstr "填充" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:740 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:777 msgctxt "@label" msgid "Gradual infill will gradually increase the amount of infill towards the top." msgstr "漸層填充(Gradual infill)將隨著列印高度的提升而逐漸加大填充密度。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:752 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:791 msgctxt "@label" msgid "Enable gradual" msgstr "啟用漸層" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:819 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:858 msgctxt "@label" msgid "Generate Support" msgstr "產生支撐" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:853 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:892 msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "在模型的突出部分產生支撐結構。若不這樣做,這些部分在列印時將倒塌。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:925 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:964 msgctxt "@label" msgid "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air." msgstr "選擇用於支撐的擠出機。該擠出機將在模型之下建立支撐結構,以防止模型下垂或在空中列印。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:948 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:987 msgctxt "@label" msgid "Build Plate Adhesion" msgstr "列印平台附著" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1003 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1042 msgctxt "@label" msgid "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards." msgstr "允許列印邊緣或木筏。這將在你的物件周圍或下方添加一個容易切斷的平面區域。" -#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1043 +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:1082 msgctxt "@label" msgid "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides" msgstr "需要幫助改善你的列印?閱讀 Ultimaker 故障排除指南" @@ -4318,23 +4481,22 @@ msgctxt "@label" msgid "Printer type" msgstr "印表機類型" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:372 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:376 msgctxt "@label" msgid "Material" msgstr "耗材" -# Added after the string freeze. -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543 msgctxt "@label" -msgid "Use adhesion sheet or glue with this material combination" -msgstr "在此耗材組合下使用膠水或是附著墊片" +msgid "Use glue with this material combination" +msgstr "此耗材使用膠水組合" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:570 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575 msgctxt "@label" msgid "Check compatibility" msgstr "檢查相容性" -#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:588 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:593 msgctxt "@tooltip" msgid "Click to check the material compatibility on Ultimaker.com." msgstr "點擊查看 Ultimaker.com 上的耗材相容性。" @@ -4424,16 +4586,6 @@ msgctxt "name" msgid "God Mode" msgstr "上帝模式" -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "description" -msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." -msgstr "接受 G-Code 並透過 WiFi 將其發送到 Doodle3D 無線網路盒。" - -#: Doodle3D-cura-plugin/Doodle3D/plugin.json -msgctxt "name" -msgid "Doodle3D WiFi-Box" -msgstr "Doodle3D 無線網路盒" - #: ChangeLogPlugin/plugin.json msgctxt "description" msgid "Shows changes since latest checked version." @@ -4444,6 +4596,16 @@ msgctxt "name" msgid "Changelog" msgstr "更新日誌" +#: FirmwareUpdater/plugin.json +msgctxt "description" +msgid "Provides a machine actions for updating firmware." +msgstr "提供升級韌體用的機器操作。" + +#: FirmwareUpdater/plugin.json +msgctxt "name" +msgid "Firmware Updater" +msgstr "韌體更新器" + #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattend quality changes profile." @@ -4514,16 +4676,6 @@ msgctxt "name" msgid "Prepare Stage" msgstr "準備介面" -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "description" -msgid "Provides an edit window for direct script editing." -msgstr "提供一個直接編輯描述檔的編輯視窗。" - -#: CuraLiveScriptingPlugin/plugin.json -msgctxt "name" -msgid "Live scripting tool" -msgstr "即時描述檔工具" - #: RemovableDriveOutputDevice/plugin.json msgctxt "description" msgid "Provides removable drive hotplugging and writing support." @@ -4634,16 +4786,6 @@ msgctxt "name" msgid "Legacy Cura Profile Reader" msgstr "舊版 Cura 列印參數讀取器" -#: CuraBlenderPlugin/plugin.json -msgctxt "description" -msgid "Helps to open Blender files directly in Cura." -msgstr "協助你直接在 Cura 中打開 Blender 檔案。" - -#: CuraBlenderPlugin/plugin.json -msgctxt "name" -msgid "Blender Integration (experimental)" -msgstr "Blender 整合(實驗功能)" - #: GCodeProfileReader/plugin.json msgctxt "description" msgid "Provides support for importing profiles from g-code files." @@ -4694,6 +4836,16 @@ msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" msgstr "升級版本 2.7 到 3.0" +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.4 to Cura 3.5." +msgstr "將設定從 Cura 3.4 版本升級至 3.5 版本。" + +#: VersionUpgrade/VersionUpgrade34to35/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.4 to 3.5" +msgstr "升級版本 3.4 到 3.5" + #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." @@ -4834,6 +4986,299 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura 列印參數讀取器" +#~ msgctxt "@warning:status" +#~ msgid "Please generate G-code before saving." +#~ msgstr "請在儲存前產出 G-code。" + +#~ msgctxt "@item:inmenu" +#~ msgid "Profile Assistant" +#~ msgstr "參數助手" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Profile Assistant" +#~ msgstr "參數助手" + +#~ msgctxt "@action" +#~ msgid "Upgrade Firmware" +#~ msgstr "升級韌體" + +#~ msgctxt "@label unknown material" +#~ msgid "Unknown" +#~ msgstr "未知" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "No custom profile to import in file {0}" +#~ msgstr "檔案 {0} 內無自訂參數可匯入" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "This profile {0} contains incorrect data, could not import it." +#~ msgstr "此列印參數 {0} 含有錯誤的資料,無法導入。" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "參數檔案 {0} ({1}) 中定義的機器與你目前的機器 ({2}) 不匹配,無法匯入。" + +#~ msgctxt "@title:window" +#~ msgid "Confirm uninstall " +#~ msgstr "移除確認 " + +#~ msgctxt "@label:status" +#~ msgid "Paused" +#~ msgstr "已暫停" + +#~ msgctxt "@action:button" +#~ msgid "Previous" +#~ msgstr "前一個" + +#~ msgctxt "@action:button" +#~ msgid "Next" +#~ msgstr "下一個" + +#~ msgctxt "@label" +#~ msgid "Tip" +#~ msgstr "提示" + +#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" +#~ msgid "%1m / ~ %2g / ~ %4 %3" +#~ msgstr "%1m / ~ %2g / ~ %4 %3" + +#~ msgctxt "@label Print estimates: m for meters, g for grams" +#~ msgid "%1m / ~ %2g" +#~ msgstr "%1m / ~ %2g" + +#~ msgctxt "@label" +#~ msgid "Print experiment" +#~ msgstr "列印實驗" + +#~ msgctxt "@label" +#~ msgid "Checklist" +#~ msgstr "檢查清單" + +#~ msgctxt "@title" +#~ msgid "Upgrade Firmware" +#~ msgstr "升級韌體" + +#~ msgctxt "description" +#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +#~ msgstr "允許耗材製造商使用下拉式 UI 建立新的耗材和品質設定參數。" + +#~ msgctxt "name" +#~ msgid "Print Profile Assistant" +#~ msgstr "列印參數設定助手" + +#~ msgctxt "@action:button" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "使用 Doodle3D 無線網路盒列印" + +#~ msgctxt "@properties:tooltip" +#~ msgid "Print with Doodle3D WiFi-Box" +#~ msgstr "使用 Doodle3D 無線網路盒列印" + +#~ msgctxt "@info:status" +#~ msgid "Connecting to Doodle3D Connect" +#~ msgstr "正在連接 Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to Doodle3D Connect" +#~ msgstr "正在向 Doodle3D Connect 發送資料" + +#~ msgctxt "@info:status" +#~ msgid "Unable to send data to Doodle3D Connect. Is another job still active?" +#~ msgstr "無法向 Doodle3D Connect 發送資料。請確認是否有另一項列印作業正在進行?" + +#~ msgctxt "@info:status" +#~ msgid "Storing data on Doodle3D Connect" +#~ msgstr "正在儲存資料到 Doodle3D Connect" + +#~ msgctxt "@info:status" +#~ msgid "File sent to Doodle3D Connect" +#~ msgstr "檔案已被傳送到 Doodle3D Connect" + +#~ msgctxt "@action:button" +#~ msgid "Open Connect..." +#~ msgstr "開啟連線..." + +#~ msgctxt "@info:tooltip" +#~ msgid "Open the Doodle3D Connect web interface" +#~ msgstr "開啟 Doodle3D Connect 的網路介面" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Blender file" +#~ msgstr "Blender 檔案" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Could not export using \"{}\" quality!\n" +#~ "Felt back to \"{}\"." +#~ msgstr "" +#~ "無法使用 \"{}\" 品質導出!\n" +#~ "覆蓋回 \"{}\"。" + +#~ msgctxt "@label" +#~ msgid "Contact" +#~ msgstr "聯繫" + +#~ msgctxt "@label" +#~ msgid "This printer is not set up to host a group of Ultimaker 3 printers." +#~ msgstr "這台印表機未設定成管理一組 Ultimaker 3 印表機的主機。" + +#~ msgctxt "@label" +#~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +#~ msgstr "這台印表機是 %1 台 Ultimaker 3 印表機群組的主機。" + +#~ msgctxt "@label: arg 1 is group name" +#~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +#~ msgstr "%1 未設定成管理一組連線的 Ultimaker 3 印表機的主機" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Add/Remove printers" +#~ msgstr "新增/移除印表機" + +#~ msgctxt "@info:tooltip" +#~ msgid "Opens the print jobs page with your default web browser." +#~ msgstr "使用預設瀏覽器開啟列印作業頁面。" + +#~ msgctxt "@action:button" +#~ msgid "View print jobs" +#~ msgstr "檢視列印作業" + +#~ msgctxt "@label:status" +#~ msgid "Preparing to print" +#~ msgstr "準備列印中" + +#~ msgctxt "@label:status" +#~ msgid "Printing" +#~ msgstr "正在列印" + +#~ msgctxt "@label:status" +#~ msgid "Available" +#~ msgstr "可用" + +#~ msgctxt "@label:status" +#~ msgid "Lost connection with the printer" +#~ msgstr "與印表機失去連線" + +#~ msgctxt "@label:status" +#~ msgid "Unavailable" +#~ msgstr "無法使用" + +#~ msgctxt "@label:status" +#~ msgid "Unknown" +#~ msgstr "未知" + +#~ msgctxt "@label:status" +#~ msgid "Disabled" +#~ msgstr "已關閉" + +#~ msgctxt "@label:status" +#~ msgid "Reserved" +#~ msgstr "保留" + +#~ msgctxt "@label" +#~ msgid "Preparing to print" +#~ msgstr "準備列印中" + +#~ msgctxt "@label:status" +#~ msgid "Print aborted" +#~ msgstr "列印已取消" + +#~ msgctxt "@label" +#~ msgid "Not accepting print jobs" +#~ msgstr "不接受列印作業" + +#~ msgctxt "@label" +#~ msgid "Finishes at: " +#~ msgstr "完成時間:" + +#~ msgctxt "@label" +#~ msgid "Clear build plate" +#~ msgstr "清空列印平台" + +#~ msgctxt "@label" +#~ msgid "Waiting for configuration change" +#~ msgstr "等待設定更動" + +#~ msgctxt "@title" +#~ msgid "Print jobs" +#~ msgstr "列印作業" + +#~ msgctxt "@label:title" +#~ msgid "Printers" +#~ msgstr "印表機" + +#~ msgctxt "@action:button" +#~ msgid "View printers" +#~ msgstr "檢視印表機" + +#~ msgctxt "@label:" +#~ msgid "Pause" +#~ msgstr "暫停" + +#~ msgctxt "@label:" +#~ msgid "Resume" +#~ msgstr "繼續" + +#~ msgctxt "@label:" +#~ msgid "Abort Print" +#~ msgstr "中斷列印" + +#~ msgctxt "@option:openProject" +#~ msgid "Always ask" +#~ msgstr "總是詢問" + +#~ msgctxt "@label" +#~ msgid "Override Profile" +#~ msgstr "覆寫列印參數" + +#~ msgctxt "@info:tooltip" +#~ msgid "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)" +#~ msgstr "新載入的模型要擺放在列印平台上嗎?必需與多列印平台功能一起使用(實驗功能)" + +#~ msgctxt "@option:check" +#~ msgid "Do not arrange objects on load" +#~ msgstr "載入時不要擺放物件" + +#~ msgctxt "@action:inmenu menubar:file" +#~ msgid "&Save Selection to File" +#~ msgstr "儲存到檔案(&S)" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &As..." +#~ msgstr "另存為(&A)…" + +#~ msgctxt "@title:menu menubar:file" +#~ msgid "Save &Project..." +#~ msgstr "儲存專案...(&P)" + +# Added after the string freeze. +#~ msgctxt "@label" +#~ msgid "Use adhesion sheet or glue with this material combination" +#~ msgstr "在此耗材組合下使用膠水或是附著墊片" + +#~ msgctxt "description" +#~ msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +#~ msgstr "接受 G-Code 並透過 WiFi 將其發送到 Doodle3D 無線網路盒。" + +#~ msgctxt "name" +#~ msgid "Doodle3D WiFi-Box" +#~ msgstr "Doodle3D 無線網路盒" + +#~ msgctxt "description" +#~ msgid "Provides an edit window for direct script editing." +#~ msgstr "提供一個直接編輯描述檔的編輯視窗。" + +#~ msgctxt "name" +#~ msgid "Live scripting tool" +#~ msgstr "即時描述檔工具" + +#~ msgctxt "description" +#~ msgid "Helps to open Blender files directly in Cura." +#~ msgstr "協助你直接在 Cura 中打開 Blender 檔案。" + +#~ msgctxt "name" +#~ msgid "Blender Integration (experimental)" +#~ msgstr "Blender 整合(實驗功能)" + #~ msgctxt "@info:title" #~ msgid "Model Checker Warning" #~ msgstr "模型檢查器警告" @@ -5101,10 +5546,6 @@ msgstr "Cura 列印參數讀取器" #~ msgid "Browse plugins..." #~ msgstr "瀏覽外掛..." -#~ msgctxt "@title:menu" -#~ msgid "&Build plate" -#~ msgstr "列印平台(&B)" - #~ msgctxt "@title:menu menubar:toplevel" #~ msgid "P&lugins" #~ msgstr "外掛(&l)" @@ -5330,14 +5771,6 @@ msgstr "Cura 列印參數讀取器" #~ "\n" #~ "抱歉!" -#~ msgctxt "@item:inmenu" -#~ msgid "Profile Assistant" -#~ msgstr "參數助手" - -#~ msgctxt "@item:inlistbox" -#~ msgid "Profile Assistant" -#~ msgstr "參數助手" - #~ msgctxt "@item:material" #~ msgid "No material loaded" #~ msgstr "未載入耗材" @@ -5468,14 +5901,6 @@ msgstr "Cura 列印參數讀取器" #~ msgid "Configure setting visiblity..." #~ msgstr "設定設定可見性..." -#~ msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" -#~ msgid "%1m / ~ %2g / ~ %4 %3" -#~ msgstr "%1m / ~ %2g / ~ %4 %3" - -#~ msgctxt "@label Print estimates: m for meters, g for grams" -#~ msgid "%1m / ~ %2g" -#~ msgstr "%1m / ~ %2g" - #~ msgctxt "@title:menuitem %1 is the automatically selected material" #~ msgid "Automatic: %1" #~ msgstr "自動:%1" @@ -5512,14 +5937,6 @@ msgstr "Cura 列印參數讀取器" #~ msgid "GCode Profile Reader" #~ msgstr "G-code 列印參數讀取器" -#~ msgctxt "description" -#~ msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." -#~ msgstr "允許耗材製造商使用下拉式 UI 建立新的耗材和品質設定參數。" - -#~ msgctxt "name" -#~ msgid "Print Profile Assistant" -#~ msgstr "列印參數設定助手" - #~ msgctxt "@info:status" #~ msgid "Errors appeared while opening your SolidWorks file! Please check, whether it is possible to open your file in SolidWorks itself without any problems as well!" #~ msgstr "開啟 SolidWorks 檔案時發生錯誤! 請檢查能否在 SolidWorks 中正常開啟檔案而不出現任何問題!" @@ -5712,10 +6129,6 @@ msgstr "Cura 列印參數讀取器" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" #~ msgstr "這台印表機是 %1 台 Ultimaker 3 印表機群組的主機" -#~ msgctxt "@label:status" -#~ msgid "Preparing" -#~ msgstr "正在準備" - #~ msgctxt "@label" #~ msgid "Completed on: " #~ msgstr "完成時間:" diff --git a/resources/i18n/zh_TW/fdmextruder.def.json.po b/resources/i18n/zh_TW/fdmextruder.def.json.po index 36a1e6505d..93d62b5155 100644 --- a/resources/i18n/zh_TW/fdmextruder.def.json.po +++ b/resources/i18n/zh_TW/fdmextruder.def.json.po @@ -5,17 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-06-06 16:13+0000\n" -"PO-Revision-Date: 2018-03-31 15:18+0800\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-11-04 13:04+0800\n" "Last-Translator: Zhang Heh Ji \n" -"Language-Team: TEAM\n" +"Language-Team: Zhang Heh Ji \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.6\n" +"X-Generator: Poedit 2.2\n" #: fdmextruder.def.json msgctxt "machine_settings label" @@ -167,6 +167,16 @@ msgctxt "extruder_prime_pos_z description" msgid "The Z coordinate of the position where the nozzle primes at the start of printing." msgstr "列印開始時,噴頭在 Z 軸座標上的起始位置." +#: fdmextruder.def.json +msgctxt "machine_extruder_cooling_fan_number label" +msgid "Extruder Print Cooling Fan" +msgstr "擠出機列印冷卻風扇" + +#: 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 "與此擠出機關聯的列印冷卻風扇的數量。只有當每個擠出機的列印冷卻風扇數量不同時,才需更改此值為正確數量,否則保持預設值 0 即可。" + #: fdmextruder.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" diff --git a/resources/i18n/zh_TW/fdmprinter.def.json.po b/resources/i18n/zh_TW/fdmprinter.def.json.po index 56009ffa00..1571d7648c 100644 --- a/resources/i18n/zh_TW/fdmprinter.def.json.po +++ b/resources/i18n/zh_TW/fdmprinter.def.json.po @@ -5,17 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 3.4\n" +"Project-Id-Version: Cura 3.6\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2018-03-29 08:36+0200\n" -"PO-Revision-Date: 2018-06-14 00:09+0800\n" +"POT-Creation-Date: 2018-10-29 15:01+0000\n" +"PO-Revision-Date: 2018-11-06 16:00+0100\n" "Last-Translator: Zhang Heh Ji \n" "Language-Team: Zhang Heh Ji \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.8\n" +"X-Generator: Poedit 2.0.6\n" #: fdmprinter.def.json msgctxt "machine_settings label" @@ -59,7 +59,7 @@ msgid "" "." msgstr "" "開始時最先執行的 G-code 命令 - 使用 \n" -". 隔開" +"隔開。" #: fdmprinter.def.json msgctxt "machine_end_gcode label" @@ -73,7 +73,7 @@ msgid "" "." msgstr "" "結束前最後執行的 G-code 命令 - 使用 \n" -". 隔開" +" 隔開。" #: fdmprinter.def.json msgctxt "material_guid label" @@ -83,7 +83,17 @@ msgstr "耗材 GUID" #: fdmprinter.def.json msgctxt "material_guid description" msgid "GUID of the material. This is set automatically. " -msgstr "耗材 GUID,此項為自動設定。" +msgstr "耗材 GUID,此項為自動設定。 " + +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "直徑" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." +msgstr "調整所使用耗材的直徑。這個數值要等同於所使用耗材的直徑。" #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" @@ -1028,7 +1038,7 @@ msgstr "直線" #: fdmprinter.def.json msgctxt "top_bottom_pattern option concentric" msgid "Concentric" -msgstr "同心圓" +msgstr "同心" #: fdmprinter.def.json msgctxt "top_bottom_pattern option zigzag" @@ -1053,13 +1063,23 @@ msgstr "直線" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 option concentric" msgid "Concentric" -msgstr "同心圓" +msgstr "同心" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" msgstr "鋸齒狀" +#: fdmprinter.def.json +msgctxt "connect_skin_polygons label" +msgid "Connect Top/Bottom Polygons" +msgstr "連接頂部/底部多邊形" + +#: 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 "將頂部/底部表層路徑相鄰的位置連接。同心模式時啟用此設定,可以大大地減少移動時間。但因連接可能碰巧在途中跨越填充,所以此功能可能會降低頂部表層的品質。" + #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" @@ -1140,6 +1160,26 @@ msgctxt "travel_compensate_overlapping_walls_x_enabled description" msgid "Compensate the flow for parts of an inner wall being printed where there is already a wall in place." msgstr "列印內壁時如果該位置已經有牆壁存在,所進行的的流量補償。" +#: fdmprinter.def.json +msgctxt "wall_min_flow label" +msgid "Minimum Wall Flow" +msgstr "最小牆壁流量" + +#: fdmprinter.def.json +msgctxt "wall_min_flow description" +msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls." +msgstr "牆壁允許的最小流量百分比。當在已列印的牆壁旁列印牆壁時,「補償牆壁重疊」會減少耗材流量。小於此設定流量的牆壁會被空跑取代。當啟用此設定時,必需啟用「補償牆壁重疊」並設定先列印外壁再列印內壁。" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract label" +msgid "Prefer Retract" +msgstr "回抽優先" + +#: fdmprinter.def.json +msgctxt "wall_min_flow_retract description" +msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold." +msgstr "當此功能開啟時,對於低於最小流量門檻值的牆壁,使用回抽取代而非梳理模式空跑。" + #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" @@ -1457,8 +1497,8 @@ msgstr "填充列印樣式" #: 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." -msgstr "填充耗材的樣式。線條和鋸齒狀填充輪流在每一層交換方向,以降低耗材成本。網格、三角形、三-六邊形、立方體、八面體、四分立方體、十字形和同心的列印樣式在每層完整列印。立方體、四分立方體和八面體填充隨每層變化,以在各個方向提供更均衡的强度分布。" +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 "選擇填充耗材的樣式。直線和鋸齒狀填充輪流在每一層交換方向,以降低耗材成本。網格、三角形、三-六邊形、立方體、八面體、四分立方體、十字形和同心的列印樣式在每層完整列印。螺旋形、立方體、四分立方體和八面體填充隨每層變化,以在各個方向提供更均衡的强度分布。" #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1503,12 +1543,7 @@ msgstr "四分立方體" #: fdmprinter.def.json msgctxt "infill_pattern option concentric" msgid "Concentric" -msgstr "同心圓" - -#: fdmprinter.def.json -msgctxt "infill_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "立體同心圓" +msgstr "同心" #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" @@ -1525,6 +1560,11 @@ msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" msgstr "立體十字形" +#: fdmprinter.def.json +msgctxt "infill_pattern option gyroid" +msgid "Gyroid" +msgstr "螺旋形" + #: fdmprinter.def.json msgctxt "zig_zaggify_infill label" msgid "Connect Infill Lines" @@ -1535,6 +1575,16 @@ msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." msgstr "使用一條線沿著內牆的形狀,連接填充線條與內牆交會的末端。啟用此設定可以使填充更好地附著在內牆上,並減少對垂直表面品質的影響。關閉此設定可降低材料的使用量。" +#: fdmprinter.def.json +msgctxt "connect_infill_polygons label" +msgid "Connect Infill Polygons" +msgstr "連接填充多邊形" + +#: fdmprinter.def.json +msgctxt "connect_infill_polygons description" +msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time." +msgstr "連接彼此相鄰的填充路徑。 對於由多個閉合多邊形組成的填充圖案,啟用此設定可大大縮短空跑時間。" + #: fdmprinter.def.json msgctxt "infill_angles label" msgid "Infill Line Directions" @@ -1565,6 +1615,30 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "填充樣式在 Y 軸方向平移此距離。" +#: fdmprinter.def.json +msgctxt "infill_multiplier label" +msgid "Infill Line Multiplier" +msgstr "填充線倍增器" + +#: fdmprinter.def.json +msgctxt "infill_multiplier description" +msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage." +msgstr "將每條填充線轉換為此數量。 額外的線條不會相互交叉,而是相互避開。 這會使填充更硬,但增加了列印時間和耗材使用。" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count label" +msgid "Extra Infill Wall Count" +msgstr "額外填充牆壁數量" + +#: fdmprinter.def.json +msgctxt "infill_wall_line_count description" +msgid "" +"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n" +"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right." +msgstr "" +"在填充區域周圍添加額外的牆壁。這樣的牆壁可以使頂部/底部表層線條較不易下垂,這表示您只要花費一些額外的材料,就可用更少層的頂部/底部表層得到相同的品質。\n" +"此功能可與「連接填充多邊形」結合使用。如果設定正確,可將所有填充連接為單一擠出路徑,不需空跑或回抽。" + #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" @@ -1875,16 +1949,6 @@ msgctxt "material_bed_temperature_layer_0 description" msgid "The temperature used for the heated build plate at the first layer." msgstr "用於第一層加熱列印平台的溫度。" -#: fdmprinter.def.json -msgctxt "material_diameter label" -msgid "Diameter" -msgstr "直徑" - -#: fdmprinter.def.json -msgctxt "material_diameter description" -msgid "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament." -msgstr "調整所使用耗材的直徑。這個數值要等同於所使用耗材的直徑。" - #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" @@ -1943,7 +2007,7 @@ msgstr "啟用回抽" #: fdmprinter.def.json msgctxt "retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area. " -msgstr "當噴頭移動到非列印區域上方時回抽耗材。" +msgstr "當噴頭移動到非列印區域上方時回抽耗材。 " #: fdmprinter.def.json msgctxt "retract_at_layer_change label" @@ -2722,8 +2786,8 @@ msgstr "梳理模式" #: fdmprinter.def.json msgctxt "retraction_combing description" -msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." -msgstr "梳理可在空跑時讓噴頭保持在已列印區域內。這會使空跑距離稍微延長,但可減少回抽需求。如果關閉梳理,則耗材將回抽,且噴頭沿著直線移動到下一個點。也可以通過僅在填充內進行梳理避免梳理頂部/底部表層區域。" +msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases." +msgstr "梳理模式讓噴頭空跑時保持在已列印的區域內。這導致較長的空跑距離但減少回抽的需求。如果關閉梳理模式,噴頭將會回抽耗材,直線移動到下一點。梳理模式可以避開頂部/底部表層,也可以只用在內部填充。注意「內部填充」選項的行為與舊版 Cura 的「表層以外區域」選項是完全相同的。" #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2740,6 +2804,11 @@ msgctxt "retraction_combing option noskin" msgid "Not in Skin" msgstr "表層以外區域" +#: fdmprinter.def.json +msgctxt "retraction_combing option infill" +msgid "Within Infill" +msgstr "內部填充" + #: fdmprinter.def.json msgctxt "retraction_combing_max_distance label" msgid "Max Comb Distance With No Retract" @@ -3120,11 +3189,6 @@ msgctxt "support_pattern option concentric" msgid "Concentric" msgstr "同心" -#: fdmprinter.def.json -msgctxt "support_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "同心 3D" - #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" @@ -3183,7 +3247,57 @@ msgstr "支撐線條間距" #: fdmprinter.def.json msgctxt "support_line_distance description" msgid "Distance between the printed support structure lines. This setting is calculated by the support density." -msgstr "已列印支撐結構線條之間的距離。該設定通過支撐密度計算。" +msgstr "支撐結構線條之間的距離。該設定通過支撐密度計算。" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance label" +msgid "Initial Layer Support Line Distance" +msgstr "支撐起始層線條間距" + +#: fdmprinter.def.json +msgctxt "support_initial_layer_line_distance description" +msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density." +msgstr "支撐結構起始層線條之間的距離。該設定通過支撐密度計算。" + +#: fdmprinter.def.json +msgctxt "support_infill_angle label" +msgid "Support Infill Line Direction" +msgstr "支撐填充線條方向" + +#: fdmprinter.def.json +msgctxt "support_infill_angle description" +msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +msgstr "支撐填充樣式的方向。 支撐填充樣式的旋轉方向是在水平面上旋轉。" + +#: fdmprinter.def.json +msgctxt "support_brim_enable label" +msgid "Enable Support Brim" +msgstr "啟用支撐邊緣" + +#: 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 "在第一層的支撐填充區域內產生邊緣。這些邊緣列印在支撐下面,而不是支撐的周圍。啟用此設定可增加支撐對列印平台的附著力。" + +#: fdmprinter.def.json +msgctxt "support_brim_width label" +msgid "Support Brim Width" +msgstr "支撐邊緣寬度" + +#: 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 "列印在支撐下面邊緣的寬度。較大的邊緣會加強對列印平台的附著力,但會需要一些額外的耗材。" + +#: fdmprinter.def.json +msgctxt "support_brim_line_count label" +msgid "Support Brim Line Count" +msgstr "支撐邊緣線條數量" + +#: 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 "支撐邊緣所使用的線條數量。邊緣使用較多的線條會加強對列印平台的附著力,但會需要一些額外的耗材。" #: fdmprinter.def.json msgctxt "support_z_distance label" @@ -3253,7 +3367,7 @@ msgstr "最小支撐 X/Y 間距" #: fdmprinter.def.json msgctxt "support_xy_distance_overhang description" msgid "Distance of the support structure from the overhang in the X/Y directions. " -msgstr "支撐結構在 X/Y 方向與突出部分的間距。" +msgstr "支撐結構在 X/Y 方向與突出部分的間距。 " #: fdmprinter.def.json msgctxt "support_bottom_stair_step_height label" @@ -3475,11 +3589,6 @@ msgctxt "support_interface_pattern option concentric" msgid "Concentric" msgstr "同心" -#: fdmprinter.def.json -msgctxt "support_interface_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "同心 3D" - #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" @@ -3513,12 +3622,7 @@ msgstr "三角形" #: fdmprinter.def.json msgctxt "support_roof_pattern option concentric" msgid "Concentric" -msgstr "同心圓" - -#: fdmprinter.def.json -msgctxt "support_roof_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "立體同心圓" +msgstr "同心" #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" @@ -3555,16 +3659,31 @@ msgctxt "support_bottom_pattern option concentric" msgid "Concentric" msgstr "同心" -#: fdmprinter.def.json -msgctxt "support_bottom_pattern option concentric_3d" -msgid "Concentric 3D" -msgstr "同心 3D" - #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" msgstr "鋸齒狀" +#: fdmprinter.def.json +msgctxt "support_fan_enable label" +msgid "Fan Speed Override" +msgstr "改變風扇轉速" + +#: 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 "啟用後,列印支撐上方表層的風扇轉速會發生變化。" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed label" +msgid "Supported Skin Fan Speed" +msgstr "受支撐表層風扇轉速" + +#: fdmprinter.def.json +msgctxt "support_supported_skin_fan_speed description" +msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove." +msgstr "在支撐上方列印表層區域時使用的風扇轉速百分比。使用高風扇轉速可以使支撐更容易移除。" + #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" @@ -3749,6 +3868,16 @@ msgctxt "brim_line_count description" msgid "The number of lines used for a brim. More brim lines enhance adhesion to the build plate, but also reduces the effective print area." msgstr "邊緣所用線條數量。更多邊緣線條可增强與列印平台的附著,但也會減少有效列印區域。" +#: fdmprinter.def.json +msgctxt "brim_replaces_support label" +msgid "Brim Replaces Support" +msgstr "邊綠取代支撐" + +#: 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 "強制在模型周圍列印邊緣,即使該空間已被支撐佔用。在第一層的部份區域會以邊綠取代支撐。" + #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" @@ -3891,7 +4020,7 @@ msgstr "木筏底部的線寬。這些線條應該是粗線,以便協助列印 #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" -msgid "Raft Line Spacing" +msgid "Raft Base Line Spacing" msgstr "木筏底部間距" #: fdmprinter.def.json @@ -4109,16 +4238,6 @@ msgctxt "prime_tower_min_volume description" msgid "The minimum volume for each layer of the prime tower in order to purge enough material." msgstr "為了清除足夠的耗材,換料塔每層的最小體積。" -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness label" -msgid "Prime Tower Thickness" -msgstr "換料塔厚度" - -#: fdmprinter.def.json -msgctxt "prime_tower_wall_thickness description" -msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." -msgstr "空心換料塔的厚度。如果厚度大於換料塔最小體積的一半,則將形成一個密集的換料塔。" - #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" @@ -4159,26 +4278,6 @@ msgctxt "prime_tower_wipe_enabled description" msgid "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower." msgstr "在一個噴頭列印換料塔後,在換料塔上擦拭另一個噴頭滲出的耗材。" -#: fdmprinter.def.json -msgctxt "dual_pre_wipe label" -msgid "Wipe Nozzle After Switch" -msgstr "切換後擦拭噴頭" - -#: fdmprinter.def.json -msgctxt "dual_pre_wipe description" -msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." -msgstr "切換擠出機後,在列印的第一個物件上擦拭噴頭上的滲出耗材。這會在滲出耗材對列印品表面品質造成最小損害的位置進行緩慢安全的擦拭動作。" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume label" -msgid "Prime Tower Purge Volume" -msgstr "換料塔清洗量" - -#: fdmprinter.def.json -msgctxt "prime_tower_purge_volume description" -msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." -msgstr "在換料塔上進行擦拭時要清洗的耗材量。清洗可用於補償在噴頭不活動期間由於滲出而損失的耗材。" - #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" @@ -4664,6 +4763,16 @@ msgctxt "material_flow_temp_graph description" msgid "Data linking material flow (in mm3 per second) to temperature (degrees Celsius)." msgstr "數據連接耗材流量(mm3/s)到溫度(攝氏)。" +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference label" +msgid "Minimum Polygon Circumference" +msgstr "最小多邊形周長" + +#: fdmprinter.def.json +msgctxt "minimum_polygon_circumference description" +msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details." +msgstr "切片層中周長小於此值的多邊形將被過濾掉。設定較低的值會花費較多的切片時間,以獲得較高解析度的網格。它主要用於高解析度的 SLA 印表機和具有大量細節的微小 3D 模型。" + #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" @@ -4972,7 +5081,7 @@ msgstr "絨毛皮膚" #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_enabled description" msgid "Randomly jitter while printing the outer wall, so that the surface has a rough and fuzzy look." -msgstr "在列印外牆時隨機抖動,使表面具有粗糙和模糊的外觀。" +msgstr "在列印外牆時隨機抖動,使表面具有粗糙和毛絨絨的外觀。" #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_thickness label" @@ -5323,6 +5432,26 @@ msgctxt "adaptive_layer_height_threshold description" msgid "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer." msgstr "決定是否使用較小層高的門檻值。此值會與一層中最陡坡度的 tan 值做比較。" +#: fdmprinter.def.json +msgctxt "wall_overhang_angle label" +msgid "Overhanging Wall Angle" +msgstr "突出牆壁角度" + +#: fdmprinter.def.json +msgctxt "wall_overhang_angle description" +msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging." +msgstr "牆壁突出的角度大於此值時,將使用突出牆壁的設定列印。當此值設定為 90 時,所有牆壁都不會被當作突出牆壁。" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor label" +msgid "Overhanging Wall Speed" +msgstr "突出牆壁速度" + +#: fdmprinter.def.json +msgctxt "wall_overhang_speed_factor description" +msgid "Overhanging walls will be printed at this percentage of their normal print speed." +msgstr "突出牆壁將會以正常速度的此百分比值列印。" + #: fdmprinter.def.json msgctxt "bridge_settings_enabled label" msgid "Enable Bridge Settings" @@ -5353,16 +5482,6 @@ msgctxt "bridge_skin_support_threshold description" msgid "If a skin region is supported for less than this percentage of its area, print it using the bridge settings. Otherwise it is printed using the normal skin settings." msgstr "假如表層區域受支撐的面積小於此百分比,使用橋樑設定列印。否則用一般的表層設定列印。" -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang label" -msgid "Bridge Wall Max Overhang" -msgstr "最大橋樑牆壁突出" - -#: fdmprinter.def.json -msgctxt "bridge_wall_max_overhang description" -msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." -msgstr "使用一般設定列印牆壁線條允許最大的突出寬度。以牆壁線寬的百分比表示。當間隙比此寬時,使用橋樑設定列印牆壁線條。否則就使用一般設定列印牆壁線條。數值越低,越有可能使用橋樑設定列印牆壁線條。" - #: fdmprinter.def.json msgctxt "bridge_wall_coast label" msgid "Bridge Wall Coasting" @@ -5583,6 +5702,74 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "在將模型從檔案中載入時套用在模型上的轉換矩陣。" +#~ 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 happend midway over infill this feature can reduce the top surface quality." +#~ msgstr "將頂部/底部表層路徑相鄰的位置連接。同心模式時開啟此設定,可以大大地減少空跑時間。但因連接可能發生在填充途中,所以此功能可能降低頂部表層的品質。" + +#~ 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. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction." +#~ msgstr "填充耗材的樣式。線條和鋸齒狀填充輪流在每一層交換方向,以降低耗材成本。網格、三角形、三-六邊形、立方體、八面體、四分立方體、十字形和同心的列印樣式在每層完整列印。立方體、四分立方體和八面體填充隨每層變化,以在各個方向提供更均衡的强度分布。" + +#~ msgctxt "infill_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "立體同心圓" + +#~ msgctxt "retraction_combing description" +#~ msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only." +#~ msgstr "梳理可在空跑時讓噴頭保持在已列印區域內。這會使空跑距離稍微延長,但可減少回抽需求。如果關閉梳理,則耗材將回抽,且噴頭沿著直線移動到下一個點。也可以通過僅在填充內進行梳理避免梳理頂部/底部表層區域。" + +#~ msgctxt "support_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "同心 3D" + +#~ msgctxt "support_interface_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "同心 3D" + +#~ msgctxt "support_roof_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "立體同心圓" + +#~ msgctxt "support_bottom_pattern option concentric_3d" +#~ msgid "Concentric 3D" +#~ msgstr "同心 3D" + +#~ msgctxt "raft_base_line_spacing label" +#~ msgid "Raft Line Spacing" +#~ msgstr "木筏底部間距" + +#~ msgctxt "prime_tower_wall_thickness label" +#~ msgid "Prime Tower Thickness" +#~ msgstr "換料塔厚度" + +#~ msgctxt "prime_tower_wall_thickness description" +#~ msgid "The thickness of the hollow prime tower. A thickness larger than half the Prime Tower Minimum Volume will result in a dense prime tower." +#~ msgstr "空心換料塔的厚度。如果厚度大於換料塔最小體積的一半,則將形成一個密集的換料塔。" + +#~ msgctxt "dual_pre_wipe label" +#~ msgid "Wipe Nozzle After Switch" +#~ msgstr "切換後擦拭噴頭" + +#~ msgctxt "dual_pre_wipe description" +#~ msgid "After switching extruder, wipe the oozed material off of the nozzle on the first thing printed. This performs a safe slow wipe move at a place where the oozed material causes least harm to the surface quality of your print." +#~ msgstr "切換擠出機後,在列印的第一個物件上擦拭噴頭上的滲出耗材。這會在滲出耗材對列印品表面品質造成最小損害的位置進行緩慢安全的擦拭動作。" + +#~ msgctxt "prime_tower_purge_volume label" +#~ msgid "Prime Tower Purge Volume" +#~ msgstr "換料塔清洗量" + +#~ msgctxt "prime_tower_purge_volume description" +#~ msgid "Amount of filament to be purged when wiping on the prime tower. Purging is useful for compensating the filament lost by oozing during inactivity of the nozzle." +#~ msgstr "在換料塔上進行擦拭時要清洗的耗材量。清洗可用於補償在噴頭不活動期間由於滲出而損失的耗材。" + +#~ msgctxt "bridge_wall_max_overhang label" +#~ msgid "Bridge Wall Max Overhang" +#~ msgstr "最大橋樑牆壁突出" + +#~ msgctxt "bridge_wall_max_overhang description" +#~ msgid "The maximum allowed width of the region of air below a wall line before the wall is printed using bridge settings. Expressed as a percentage of the wall line width. When the air gap is wider than this, the wall line is printed using the bridge settings. Otherwise, the wall line is printed using the normal settings. The lower the value, the more likely it is that overhung wall lines will be printed using bridge settings." +#~ msgstr "使用一般設定列印牆壁線條允許最大的突出寬度。以牆壁線寬的百分比表示。當間隙比此寬時,使用橋樑設定列印牆壁線條。否則就使用一般設定列印牆壁線條。數值越低,越有可能使用橋樑設定列印牆壁線條。" + #~ msgctxt "optimize_wall_printing_order description" #~ msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization." #~ msgstr "最佳化牆壁列印順序以減少回抽的次數和空跑的距離。啟用此功能對大多數是有益的,但有的可能會花更多的時間。所以請比較有無最佳化的估算時間進行確認。" diff --git a/resources/images/cubicon_icon.png b/resources/images/cubicon_icon.png new file mode 100644 index 0000000000..b74457992c Binary files /dev/null and b/resources/images/cubicon_icon.png differ diff --git a/resources/images/cubicon_log.png b/resources/images/cubicon_log.png new file mode 100644 index 0000000000..95311636b8 Binary files /dev/null and b/resources/images/cubicon_log.png differ diff --git a/resources/images/moai.jpg b/resources/images/moai.jpg new file mode 100644 index 0000000000..54c6c7561e Binary files /dev/null and b/resources/images/moai.jpg differ diff --git a/resources/meshes/anycubic_4max_platform.stl b/resources/meshes/anycubic_4max_platform.stl new file mode 100644 index 0000000000..cc3651b9f3 Binary files /dev/null and b/resources/meshes/anycubic_4max_platform.stl differ diff --git a/resources/meshes/bq_witbox_platform.stl b/resources/meshes/bq_witbox_platform.stl index 7d83c0f4d8..17b7a3913b 100644 Binary files a/resources/meshes/bq_witbox_platform.stl and b/resources/meshes/bq_witbox_platform.stl differ diff --git a/resources/meshes/builder_premium_platform.stl b/resources/meshes/builder_premium_platform.stl index b315d4b6d4..8003f83f7e 100644 Binary files a/resources/meshes/builder_premium_platform.stl and b/resources/meshes/builder_premium_platform.stl differ diff --git a/resources/meshes/cr-x.stl b/resources/meshes/cr-x.stl new file mode 100644 index 0000000000..4e0668f444 Binary files /dev/null and b/resources/meshes/cr-x.stl differ diff --git a/resources/meshes/creality_ender3_platform.stl b/resources/meshes/creality_ender3_platform.stl new file mode 100644 index 0000000000..4c3699a530 --- /dev/null +++ b/resources/meshes/creality_ender3_platform.stl @@ -0,0 +1,19854 @@ +solid OpenSCAD_Model + facet normal 0 0 -1 + outer loop + vertex -36.5262 -13.4531 -3 + vertex -35.4871 -14.1281 -3 + vertex -35.6081 -14.799 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -35.4871 -14.1281 -3 + vertex -35.9073 -13.512 -3 + vertex -35.5739 -13.718 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -35.4871 -14.1281 -3 + vertex -36.5262 -13.4531 -3 + vertex -35.9073 -13.512 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -37.2393 -13.2576 -3 + vertex -35.6081 -14.799 -3 + vertex -37.0548 -18.7102 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -35.6081 -14.799 -3 + vertex -37.2393 -13.2576 -3 + vertex -36.5262 -13.4531 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -37.0548 -18.7102 -3 + vertex -37.5366 -12.7854 -3 + vertex -37.2393 -13.2576 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -37.3951 -12.1929 -3 + vertex -38.3729 23.836 -3 + vertex -37.6991 23.0789 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -37.3951 -12.1929 -3 + vertex -38.8382 24.6102 -3 + vertex -38.3729 23.836 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -37.3951 -12.1929 -3 + vertex -39.1303 25.4589 -3 + vertex -38.8382 24.6102 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -47.2102 -36.2359 -3 + vertex -37.5366 -12.7854 -3 + vertex -39.9072 -25.4747 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -39.9072 -25.4747 -3 + vertex -37.5366 -12.7854 -3 + vertex -37.0548 -18.7102 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -30.0976 22.0525 -3 + vertex -29.0303 22.3563 -3 + vertex -28.3511 21.9725 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -30.0976 22.0525 -3 + vertex -30.3878 23.2826 -3 + vertex -29.0303 22.3563 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -32.1178 22.3529 -3 + vertex -30.3878 23.2826 -3 + vertex -30.0976 22.0525 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -31.0943 24.213 -3 + vertex -34.2108 23.023 -3 + vertex -31.2773 24.779 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -34.2108 23.023 -3 + vertex -31.0943 24.213 -3 + vertex -32.1178 22.3529 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -30.3878 23.2826 -3 + vertex -32.1178 22.3529 -3 + vertex -31.0943 24.213 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -26.0647 23.8437 -3 + vertex -26.0224 24.2804 -3 + vertex -24.664 24.0122 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -27.3687 23.7586 -3 + vertex -26.0224 24.2804 -3 + vertex -26.0647 23.8437 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -27.3687 23.7586 -3 + vertex -28.1365 24.9019 -3 + vertex -26.0224 24.2804 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -28.4642 23.8513 -3 + vertex -28.1365 24.9019 -3 + vertex -27.3687 23.7586 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -29.3958 24.13 -3 + vertex -28.1365 24.9019 -3 + vertex -28.4642 23.8513 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -29.3958 24.13 -3 + vertex -29.9035 25.8898 -3 + vertex -28.1365 24.9019 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -30.2081 24.6027 -3 + vertex -29.9035 25.8898 -3 + vertex -29.3958 24.13 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -30.8173 24.9813 -3 + vertex -29.9035 25.8898 -3 + vertex -30.2081 24.6027 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -31.1793 25.0376 -3 + vertex -29.9035 25.8898 -3 + vertex -30.8173 24.9813 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -29.9035 25.8898 -3 + vertex -31.1793 25.0376 -3 + vertex -31.116 26.9038 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -31.2912 27.2229 -3 + vertex -31.1793 25.0376 -3 + vertex -31.2773 24.779 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -31.1793 25.0376 -3 + vertex -31.2912 27.2229 -3 + vertex -31.116 26.9038 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -22.4212 26.8695 -3 + vertex -21.4485 26.3569 -3 + vertex -22.0473 26.2369 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -21.4485 26.3569 -3 + vertex -22.4212 26.8695 -3 + vertex -21.2681 26.5576 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -24.8433 26.205 -3 + vertex -22.4212 26.8695 -3 + vertex -22.0473 26.2369 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -27.4214 26.3653 -3 + vertex -24.3225 27.6757 -3 + vertex -24.8433 26.205 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -23.8902 27.3484 -3 + vertex -24.8433 26.205 -3 + vertex -24.3225 27.6757 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -22.4212 26.8695 -3 + vertex -24.8433 26.205 -3 + vertex -23.8902 27.3484 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.168338 -24.355 -3 + vertex -3.89417 -22.8317 -3 + vertex -3.85646 -21.6547 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -6.41168 -29.738 -3 + vertex -3.7659 -32.0301 -3 + vertex -3.99709 -33.5697 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -3.14673 -30.0798 -3 + vertex -4.26405 -24.3543 -3 + vertex -3.89417 -22.8317 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 13.2867 -16.8469 -3 + vertex 12.858 -14.1239 -3 + vertex 14.1246 -14.3424 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 13.2867 -16.8469 -3 + vertex 12.417 -13.7469 -3 + vertex 12.858 -14.1239 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.3474 -19.1774 -3 + vertex 13.2867 -16.8469 -3 + vertex 11.2177 -19.5302 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.2177 -19.5302 -3 + vertex 13.2867 -16.8469 -3 + vertex 12.058 -19.7199 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 12.0544 30.7144 -3 + vertex 5.19939 38.083 -3 + vertex 5.25321 38.4452 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.5971 30.3591 -3 + vertex 4.72188 37.0399 -3 + vertex 5.19939 38.083 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.2319 29.4873 -3 + vertex 3.57109 31.3388 -3 + vertex 11.5971 30.3591 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 4.30515 36.0346 -3 + vertex 11.5971 30.3591 -3 + vertex 3.93589 34.5584 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.5971 30.3591 -3 + vertex 4.30515 36.0346 -3 + vertex 4.72188 37.0399 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 3.57109 31.3388 -3 + vertex 4.3138 28.4461 -3 + vertex 3.67763 29.7129 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.5971 30.3591 -3 + vertex 3.57109 31.3388 -3 + vertex 3.93589 34.5584 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.21237 -5.88439 -3 + vertex 7.03104 -4.97268 -3 + vertex 7.79727 -5.75259 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 5.81183 -5.98051 -3 + vertex 7.03104 -4.97268 -3 + vertex 7.21237 -5.88439 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 7.03104 -4.97268 -3 + vertex 5.81183 -5.98051 -3 + vertex 5.97791 -3.63939 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 3.9592 -5.58648 -3 + vertex 5.97791 -3.63939 -3 + vertex 5.81183 -5.98051 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 5.97791 -3.63939 -3 + vertex 3.9592 -5.58648 -3 + vertex 5.02006 -2.01238 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 5.02006 -2.01238 -3 + vertex 1.09298 -4.60426 -3 + vertex 4.37015 -0.506109 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 1.09298 -4.60426 -3 + vertex 5.02006 -2.01238 -3 + vertex 3.9592 -5.58648 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 24.7931 16.6725 -3 + vertex 24.1542 17.4223 -3 + vertex 24.7174 17.1695 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 23.3802 15.8262 -3 + vertex 24.1542 17.4223 -3 + vertex 24.7931 16.6725 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 23.3802 15.8262 -3 + vertex 22.547 17.5015 -3 + vertex 24.1542 17.4223 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 21.1653 14.8489 -3 + vertex 22.547 17.5015 -3 + vertex 23.3802 15.8262 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 21.1653 14.8489 -3 + vertex 20.2159 17.5562 -3 + vertex 22.547 17.5015 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 20.0668 14.6265 -3 + vertex 20.2159 17.5562 -3 + vertex 21.1653 14.8489 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 18.4164 15.1559 -3 + vertex 20.2159 17.5562 -3 + vertex 20.0668 14.6265 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 20.2159 17.5562 -3 + vertex 18.4164 15.1559 -3 + vertex 19.8437 17.7553 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 16.5954 15.8977 -3 + vertex 19.8437 17.7553 -3 + vertex 18.4164 15.1559 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 19.8437 17.7553 -3 + vertex 16.5954 15.8977 -3 + vertex 19.5351 18.2611 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.2045 16.623 -3 + vertex 19.5351 18.2611 -3 + vertex 16.5954 15.8977 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 19.5351 18.2611 -3 + vertex 15.2045 16.623 -3 + vertex 19.0948 20.2262 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 13.99 17.4864 -3 + vertex 19.0948 20.2262 -3 + vertex 15.2045 16.623 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.0948 20.2262 -3 + vertex 17.155 22.8321 -3 + vertex 18.6529 22.0992 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 19.0948 20.2262 -3 + vertex 13.99 17.4864 -3 + vertex 17.155 22.8321 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 12.6982 18.6425 -3 + vertex 17.155 22.8321 -3 + vertex 13.99 17.4864 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 17.155 22.8321 -3 + vertex 12.6982 18.6425 -3 + vertex 15.5055 23.4995 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.9729 20.5521 -3 + vertex 15.5055 23.4995 -3 + vertex 12.6982 18.6425 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 15.5055 23.4995 -3 + vertex 10.9729 20.5521 -3 + vertex 14.0164 24.1527 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 14.0164 24.1527 -3 + vertex 10.9729 20.5521 -3 + vertex 13.0733 24.7212 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 9.71033 23.0922 -3 + vertex 13.0733 24.7212 -3 + vertex 10.9729 20.5521 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 13.0733 24.7212 -3 + vertex 9.71033 23.0922 -3 + vertex 12.1975 25.5292 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 12.1975 25.5292 -3 + vertex 9.07032 24.476 -3 + vertex 11.5037 26.4501 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 9.07032 24.476 -3 + vertex 12.1975 25.5292 -3 + vertex 9.71033 23.0922 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 25.704 16.8274 -3 + vertex 26.0816 17.5963 -3 + vertex 25.8979 16.7563 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 25.1513 17.7384 -3 + vertex 26.0816 17.5963 -3 + vertex 25.4738 17.2443 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 26.0816 17.5963 -3 + vertex 25.704 16.8274 -3 + vertex 25.4738 17.2443 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 26.0816 17.5963 -3 + vertex 25.1513 17.7384 -3 + vertex 25.9892 18.2943 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 25.9892 18.2943 -3 + vertex 25.1513 17.7384 -3 + vertex 25.7331 18.8483 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 24.5942 18.0475 -3 + vertex 25.7331 18.8483 -3 + vertex 25.1513 17.7384 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 25.7331 18.8483 -3 + vertex 24.5942 18.0475 -3 + vertex 25.3447 19.2137 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 25.3447 19.2137 -3 + vertex 24.5942 18.0475 -3 + vertex 24.8554 19.3454 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 24.5942 18.0475 -3 + vertex 23.3909 19.6849 -3 + vertex 24.8554 19.3454 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 22.335 18.2522 -3 + vertex 23.3909 19.6849 -3 + vertex 24.5942 18.0475 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 23.3909 19.6849 -3 + vertex 22.335 18.2522 -3 + vertex 22.6368 20.047 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 20.9591 18.304 -3 + vertex 22.6368 20.047 -3 + vertex 22.335 18.2522 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 22.6368 20.047 -3 + vertex 20.9591 18.304 -3 + vertex 22.0911 20.5797 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.8405 19.3078 -3 + vertex 22.0911 20.5797 -3 + vertex 20.9591 18.304 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.4421 21.9215 -3 + vertex 21.7245 21.3239 -3 + vertex 19.6596 20.6529 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.6596 20.6529 -3 + vertex 22.0911 20.5797 -3 + vertex 19.8405 19.3078 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 21.7245 21.3239 -3 + vertex 19.4421 21.9215 -3 + vertex 21.508 22.3204 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.8405 19.3078 -3 + vertex 20.9591 18.304 -3 + vertex 20.2006 18.5903 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 21.508 22.3204 -3 + vertex 19.4421 21.9215 -3 + vertex 21.2518 23.2891 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 22.0911 20.5797 -3 + vertex 19.6596 20.6529 -3 + vertex 21.7245 21.3239 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 18.9185 22.6398 -3 + vertex 21.2518 23.2891 -3 + vertex 19.4421 21.9215 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 21.2518 23.2891 -3 + vertex 18.9185 22.6398 -3 + vertex 20.762 24.0784 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 20.762 24.0784 -3 + vertex 18.9185 22.6398 -3 + vertex 20.0338 24.6942 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 20.0338 24.6942 -3 + vertex 18.9185 22.6398 -3 + vertex 19.062 25.1422 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 17.6852 23.4449 -3 + vertex 19.062 25.1422 -3 + vertex 18.9185 22.6398 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 17.6852 23.4449 -3 + vertex 17.2513 25.98 -3 + vertex 19.062 25.1422 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.1211 24.4531 -3 + vertex 17.2513 25.98 -3 + vertex 17.6852 23.4449 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 17.2513 25.98 -3 + vertex 15.1211 24.4531 -3 + vertex 15.7223 27.2873 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 13.4969 25.2416 -3 + vertex 15.7223 27.2873 -3 + vertex 15.1211 24.4531 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 15.7223 27.2873 -3 + vertex 13.4969 25.2416 -3 + vertex 15.122 28.0941 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 12.5486 25.9653 -3 + vertex 15.122 28.0941 -3 + vertex 13.4969 25.2416 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 17.1521 -17.7131 -3 + vertex 20.2954 -22.4759 -3 + vertex 19.0386 -23.7798 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 14.5835 -23.8342 -3 + vertex 19.0386 -23.7798 -3 + vertex 17.855 -25.2923 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 20.2954 -22.4759 -3 + vertex 17.1521 -17.7131 -3 + vertex 19.6777 -11.13 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 14.5835 -23.8342 -3 + vertex 17.855 -25.2923 -3 + vertex 16.4055 -27.6373 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 14.5835 -23.8342 -3 + vertex 16.4055 -27.6373 -3 + vertex 15.3794 -29.9771 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.4887 -31.4602 -3 + vertex 15.3794 -29.9771 -3 + vertex 14.7938 -32.2631 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 19.0386 -23.7798 -3 + vertex 14.5835 -23.8342 -3 + vertex 17.1521 -17.7131 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.871 -34.5351 -3 + vertex 14.7938 -32.2631 -3 + vertex 14.6656 -34.4466 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 26.7235 1.18648 -3 + vertex 20.9081 -2.19366 -3 + vertex 21.0968 -1.15452 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 23.0737 -20.4525 -3 + vertex 19.6777 -11.13 -3 + vertex 20.9081 -2.19366 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.6777 -11.13 -3 + vertex 21.6367 -21.3703 -3 + vertex 20.2954 -22.4759 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 20.9081 -2.19366 -3 + vertex 19.6777 -11.13 -3 + vertex 20.4179 -3.0084 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.5452 -10.7956 -3 + vertex 20.4179 -3.0084 -3 + vertex 19.6777 -11.13 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.5452 -10.7956 -3 + vertex 19.4334 -3.80993 -3 + vertex 20.4179 -3.0084 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 17.7619 -4.80944 -3 + vertex 19.5452 -10.7956 -3 + vertex 19.0845 -10.6988 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.5452 -10.7956 -3 + vertex 17.7619 -4.80944 -3 + vertex 19.4334 -3.80993 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.0012 -6.23992 -3 + vertex 19.0845 -10.6988 -3 + vertex 16.7993 -11.2316 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.0845 -10.6988 -3 + vertex 15.0012 -6.23992 -3 + vertex 17.7619 -4.80944 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 12.6103 -7.15898 -3 + vertex 16.7993 -11.2316 -3 + vertex 13.71 -12.1451 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 12.6103 -7.15898 -3 + vertex 13.71 -12.1451 -3 + vertex 13.1035 -12.4147 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.2421 -7.67101 -3 + vertex 13.1035 -12.4147 -3 + vertex 12.6527 -12.8127 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 16.7993 -11.2316 -3 + vertex 12.6103 -7.15898 -3 + vertex 15.0012 -6.23992 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.2421 -7.67101 -3 + vertex 12.6527 -12.8127 -3 + vertex 12.4073 -13.2773 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 13.2867 -16.8469 -3 + vertex 10.3474 -19.1774 -3 + vertex 12.417 -13.7469 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.2177 -19.5302 -3 + vertex 12.058 -19.7199 -3 + vertex 11.7785 -19.8211 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 8.75581 -19.1712 -3 + vertex 12.417 -13.7469 -3 + vertex 10.3474 -19.1774 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.06268 -19.3694 -3 + vertex 12.417 -13.7469 -3 + vertex 8.75581 -19.1712 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 13.1035 -12.4147 -3 + vertex 10.2421 -7.67101 -3 + vertex 12.6103 -7.15898 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 12.417 -13.7469 -3 + vertex 7.06268 -19.3694 -3 + vertex 12.4073 -13.2773 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 12.4073 -13.2773 -3 + vertex 7.54923 -7.88041 -3 + vertex 10.2421 -7.67101 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 12.4073 -13.2773 -3 + vertex 7.06268 -19.3694 -3 + vertex 7.54923 -7.88041 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 5.03167 -7.88498 -3 + vertex 7.06268 -19.3694 -3 + vertex 5.689 -19.9339 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.06268 -19.3694 -3 + vertex 5.03167 -7.88498 -3 + vertex 7.54923 -7.88041 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 5.689 -19.9339 -3 + vertex 3.854 -7.59505 -3 + vertex 5.03167 -7.88498 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 3.72385 -21.1527 -3 + vertex 3.854 -7.59505 -3 + vertex 5.689 -19.9339 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -4.06681 -20.6308 -3 + vertex 3.72385 -21.1527 -3 + vertex 1.84511 -22.661 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 3.72385 -21.1527 -3 + vertex -4.70045 -19.8327 -3 + vertex 3.854 -7.59505 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -3.85646 -21.6547 -3 + vertex 1.84511 -22.661 -3 + vertex 0.168338 -24.355 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -3.89417 -22.8317 -3 + vertex 0.168338 -24.355 -3 + vertex -1.19093 -26.1306 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 3.72385 -21.1527 -3 + vertex -4.06681 -20.6308 -3 + vertex -4.70045 -19.8327 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -3.89417 -22.8317 -3 + vertex -1.19093 -26.1306 -3 + vertex -2.25121 -28.0146 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -3.89417 -22.8317 -3 + vertex -2.25121 -28.0146 -3 + vertex -3.14673 -30.0798 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 1.84511 -22.661 -3 + vertex -3.85646 -21.6547 -3 + vertex -4.06681 -20.6308 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -5.57075 -19.2012 -3 + vertex 3.854 -7.59505 -3 + vertex -4.70045 -19.8327 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -6.41168 -29.738 -3 + vertex -3.14673 -30.0798 -3 + vertex -3.7659 -32.0301 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 47.2139 -19.2263 -3 + vertex 27.528 9.70386 -3 + vertex 27.6094 12.2412 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 28.989 -19.2301 -3 + vertex 26.953 2.16551 -3 + vertex 27.528 9.70386 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 26.9177 3.98634 -3 + vertex 27.528 9.70386 -3 + vertex 26.953 2.16551 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 28.989 -19.2301 -3 + vertex 26.8464 1.29842 -3 + vertex 26.953 2.16551 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 28.989 -19.2301 -3 + vertex 26.7235 1.18648 -3 + vertex 26.8464 1.29842 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 20.9081 -2.19366 -3 + vertex 26.7235 1.18648 -3 + vertex 27.8281 -19.1444 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 20.9081 -2.19366 -3 + vertex 27.8281 -19.1444 -3 + vertex 26.5413 -19.2026 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 26.7235 1.18648 -3 + vertex 21.0968 -1.15452 -3 + vertex 26.5455 1.2697 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 20.9081 -2.19366 -3 + vertex 26.5413 -19.2026 -3 + vertex 25.4359 -19.4082 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 23.9858 2.16372 -3 + vertex 26.5455 1.2697 -3 + vertex 21.0968 -1.15452 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 26.5455 1.2697 -3 + vertex 23.9858 2.16372 -3 + vertex 25.9977 1.96397 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 25.3153 2.68052 -3 + vertex 24.7523 2.4559 -3 + vertex 25.0347 2.67962 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 25.9977 1.96397 -3 + vertex 24.7523 2.4559 -3 + vertex 25.3153 2.68052 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 25.9977 1.96397 -3 + vertex 23.9858 2.16372 -3 + vertex 24.7523 2.4559 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 20.9081 -2.19366 -3 + vertex 25.4359 -19.4082 -3 + vertex 23.0737 -20.4525 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 23.9858 2.16372 -3 + vertex 21.0968 -1.15452 -3 + vertex 23.1222 1.97635 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 21.0282 0.220415 -3 + vertex 23.1222 1.97635 -3 + vertex 21.0968 -1.15452 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 23.1222 1.97635 -3 + vertex 21.0282 0.220415 -3 + vertex 22.8505 1.9828 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.6777 -11.13 -3 + vertex 23.0737 -20.4525 -3 + vertex 21.6367 -21.3703 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 22.8505 1.9828 -3 + vertex 21.0282 0.220415 -3 + vertex 22.7784 2.30129 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.4865 -0.127098 -3 + vertex 22.7784 2.30129 -3 + vertex 21.0282 0.220415 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 22.7784 2.30129 -3 + vertex 16.0239 2.90744 -3 + vertex 21.7142 8.22365 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 22.7784 2.30129 -3 + vertex 19.4865 -0.127098 -3 + vertex 16.0239 2.90744 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.3368 5.33522 -3 + vertex 21.7142 8.22365 -3 + vertex 16.0239 2.90744 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 16.8564 0.883682 -3 + vertex 19.4865 -0.127098 -3 + vertex 18.2674 -0.466912 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 16.8564 0.883682 -3 + vertex 18.2674 -0.466912 -3 + vertex 17.6745 -0.267811 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.4865 -0.127098 -3 + vertex 16.8564 0.883682 -3 + vertex 16.0239 2.90744 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 21.7142 8.22365 -3 + vertex 15.3368 5.33522 -3 + vertex 19.7157 9.66569 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 14.9551 7.69881 -3 + vertex 19.7157 9.66569 -3 + vertex 15.3368 5.33522 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 19.7157 9.66569 -3 + vertex 14.9551 7.69881 -3 + vertex 18.6847 10.137 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 18.6847 10.137 -3 + vertex 14.9551 7.69881 -3 + vertex 17.337 10.3363 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 14.9426 8.95486 -3 + vertex 17.337 10.3363 -3 + vertex 14.9551 7.69881 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 17.337 10.3363 -3 + vertex 15.3572 9.74689 -3 + vertex 15.9933 10.3315 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.9933 10.3315 -3 + vertex 15.3572 9.74689 -3 + vertex 15.6762 10.1383 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 17.337 10.3363 -3 + vertex 14.9426 8.95486 -3 + vertex 15.3572 9.74689 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 34.7441 -22.7166 -3 + vertex 31.8275 -24.8188 -3 + vertex 32.0255 -23.3848 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 29.8709 -31.8517 -3 + vertex 32.5255 -33.371 -3 + vertex 31.6707 -35.0376 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 33.8444 -30.1753 -3 + vertex 31.4974 -26.3899 -3 + vertex 31.8275 -24.8188 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 33.8444 -30.1753 -3 + vertex 31.2318 -26.857 -3 + vertex 31.4974 -26.3899 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 29.8709 -31.8517 -3 + vertex 31.6707 -35.0376 -3 + vertex 30.8837 -35.7486 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 33.8444 -30.1753 -3 + vertex 30.2029 -31.1764 -3 + vertex 30.1062 -30.7807 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 30.7817 -27.1595 -3 + vertex 33.8444 -30.1753 -3 + vertex 30.1062 -30.7807 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 32.5255 -33.371 -3 + vertex 29.8709 -31.8517 -3 + vertex 30.2029 -31.1764 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 27.8442 -34.1555 -3 + vertex 30.8837 -35.7486 -3 + vertex 29.7686 -36.0779 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 27.8442 -34.1555 -3 + vertex 29.7686 -36.0779 -3 + vertex 29.0223 -36.3831 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 27.8442 -34.1555 -3 + vertex 29.0223 -36.3831 -3 + vertex 28.553 -36.8405 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 25.9895 -35.834 -3 + vertex 28.553 -36.8405 -3 + vertex 28.4102 -37.3704 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 30.8837 -35.7486 -3 + vertex 27.8442 -34.1555 -3 + vertex 29.8709 -31.8517 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 33.8444 -30.1753 -3 + vertex 30.7817 -27.1595 -3 + vertex 31.2318 -26.857 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 29.6885 -30.4984 -3 + vertex 30.7817 -27.1595 -3 + vertex 30.1062 -30.7807 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 28.9763 -27.4135 -3 + vertex 29.6885 -30.4984 -3 + vertex 29.2916 -30.4642 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 29.6885 -30.4984 -3 + vertex 28.9763 -27.4135 -3 + vertex 30.7817 -27.1595 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 28.199 -31.2235 -3 + vertex 28.9763 -27.4135 -3 + vertex 29.2916 -30.4642 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 25.3774 -27.4375 -3 + vertex 28.199 -31.2235 -3 + vertex 26.4192 -32.7448 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 28.199 -31.2235 -3 + vertex 25.3774 -27.4375 -3 + vertex 28.9763 -27.4135 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 24.9271 -33.7368 -3 + vertex 25.3774 -27.4375 -3 + vertex 26.4192 -32.7448 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.5138 -29.5327 -3 + vertex 24.9271 -33.7368 -3 + vertex 23.5816 -34.2758 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.3087 -31.0557 -3 + vertex 23.5816 -34.2758 -3 + vertex 22.2417 -34.4379 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.3087 -31.0557 -3 + vertex 22.2417 -34.4379 -3 + vertex 21.4183 -34.349 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.3085 -32.3556 -3 + vertex 21.4183 -34.349 -3 + vertex 20.6651 -34.0963 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 23.5816 -34.2758 -3 + vertex 19.3087 -31.0557 -3 + vertex 19.5138 -29.5327 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.3085 -32.3556 -3 + vertex 20.6651 -34.0963 -3 + vertex 20.0228 -33.6987 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 25.3774 -27.4375 -3 + vertex 19.9054 -28.0436 -3 + vertex 20.1129 -27.4424 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.3085 -32.3556 -3 + vertex 20.0228 -33.6987 -3 + vertex 19.5322 -33.1754 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 25.3774 -27.4375 -3 + vertex 19.5138 -29.5327 -3 + vertex 19.9054 -28.0436 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 24.9271 -33.7368 -3 + vertex 19.5138 -29.5327 -3 + vertex 25.3774 -27.4375 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 21.4183 -34.349 -3 + vertex 19.3085 -32.3556 -3 + vertex 19.3087 -31.0557 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 27.528 9.70386 -3 + vertex 26.9177 3.98634 -3 + vertex 27.209 8.08714 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 27.209 8.08714 -3 + vertex 26.9177 3.98634 -3 + vertex 26.8985 6.51977 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 23.2082 3.44442 -3 + vertex 23.5966 4.95794 -3 + vertex 23.5377 4.18291 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 23.5966 4.95794 -3 + vertex 23.2082 3.44442 -3 + vertex 23.3811 5.8089 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 23.2082 3.44442 -3 + vertex 22.8875 6.77518 -3 + vertex 23.3811 5.8089 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 21.7142 8.22365 -3 + vertex 23.2082 3.44442 -3 + vertex 22.7784 2.30129 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 23.2082 3.44442 -3 + vertex 21.7142 8.22365 -3 + vertex 22.8875 6.77518 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.0577 29.0611 -3 + vertex 12.0187 29.9363 -3 + vertex 12.2907 30.5214 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.7374 28.4518 -3 + vertex 15.122 28.0941 -3 + vertex 11.8052 27.5343 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 11.8088 29.3224 -3 + vertex 15.0577 29.0611 -3 + vertex 11.7374 28.4518 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.122 28.0941 -3 + vertex 11.7374 28.4518 -3 + vertex 15.0577 29.0611 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.0577 29.0611 -3 + vertex 11.8088 29.3224 -3 + vertex 12.0187 29.9363 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.871 -34.5351 -3 + vertex 14.6656 -34.4466 -3 + vertex 12.1385 -34.7994 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 14.7938 -32.2631 -3 + vertex 11.871 -34.5351 -3 + vertex 11.4887 -31.4602 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 15.3794 -29.9771 -3 + vertex 11.4887 -31.4602 -3 + vertex 14.5835 -23.8342 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.915 -33.0747 -3 + vertex 11.871 -34.5351 -3 + vertex 11.4551 -34.4353 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.871 -34.5351 -3 + vertex 10.915 -33.0747 -3 + vertex 11.4887 -31.4602 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.7197 -33.9677 -3 + vertex 11.4551 -34.4353 -3 + vertex 10.9006 -34.3507 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.4551 -34.4353 -3 + vertex 10.7197 -33.9677 -3 + vertex 10.915 -33.0747 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 14.2516 -3.15818 -3 + vertex 14.2455 -2.23644 -3 + vertex 14.333 -2.7489 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 13.8131 -3.7697 -3 + vertex 14.2455 -2.23644 -3 + vertex 14.2516 -3.15818 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 13.172 -4.2601 -3 + vertex 14.2455 -2.23644 -3 + vertex 13.8131 -3.7697 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 14.2455 -2.23644 -3 + vertex 13.172 -4.2601 -3 + vertex 13.5923 -0.94501 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 12.4032 -4.58609 -3 + vertex 13.5923 -0.94501 -3 + vertex 13.172 -4.2601 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.5814 -4.70438 -3 + vertex 13.5923 -0.94501 -3 + vertex 12.4032 -4.58609 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.2758 -4.53506 -3 + vertex 13.5923 -0.94501 -3 + vertex 11.5814 -4.70438 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 13.5923 -0.94501 -3 + vertex 10.2758 -4.53506 -3 + vertex 12.3489 0.629998 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 9.01294 -4.00814 -3 + vertex 12.3489 0.629998 -3 + vertex 10.2758 -4.53506 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.74282 -3.09522 -3 + vertex 12.3489 0.629998 -3 + vertex 9.01294 -4.00814 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 12.3489 0.629998 -3 + vertex 7.74282 -3.09522 -3 + vertex 10.5724 2.40247 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 6.41545 -1.76788 -3 + vertex 10.5724 2.40247 -3 + vertex 7.74282 -3.09522 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 10.5724 2.40247 -3 + vertex 6.41545 -1.76788 -3 + vertex 9.13441 3.60373 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 4.6091 0.441775 -3 + vertex 9.13441 3.60373 -3 + vertex 6.41545 -1.76788 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 9.13441 3.60373 -3 + vertex 4.6091 0.441775 -3 + vertex 8.18559 4.25764 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 4.39665 0.754678 -3 + vertex 8.18559 4.25764 -3 + vertex 4.6091 0.441775 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 8.18559 4.25764 -3 + vertex 4.39665 0.754678 -3 + vertex 5.26682 5.76024 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 1.66409 7.13679 -3 + vertex 4.39665 0.754678 -3 + vertex 4.24084 0.464987 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 4.39665 0.754678 -3 + vertex 1.66409 7.13679 -3 + vertex 5.26682 5.76024 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -1.72768 -3.30659 -3 + vertex 4.37015 -0.506109 -3 + vertex 1.09298 -4.60426 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 4.37015 -0.506109 -3 + vertex -1.72768 -3.30659 -3 + vertex 4.24084 0.464987 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -3.55278 -2.51803 -3 + vertex 4.24084 0.464987 -3 + vertex -1.72768 -3.30659 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 4.24084 0.464987 -3 + vertex -3.55278 -2.51803 -3 + vertex 1.66409 7.13679 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 1.66409 7.13679 -3 + vertex -3.55278 -2.51803 -3 + vertex -0.248642 7.94666 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -0.248642 7.94666 -3 + vertex -3.55278 -2.51803 -3 + vertex -2.78119 9.30203 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -4.99153 10.6633 -3 + vertex -3.55278 -2.51803 -3 + vertex -3.71458 -2.66291 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 3.854 -7.59505 -3 + vertex -5.57075 -19.2012 -3 + vertex 1.04019 -5.91722 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 1.04019 -5.91722 -3 + vertex -5.57075 -19.2012 -3 + vertex -2.05653 -4.03047 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.1272 -19.1706 -3 + vertex -2.05653 -4.03047 -3 + vertex -5.57075 -19.2012 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -3.55278 -2.51803 -3 + vertex -4.99153 10.6633 -3 + vertex -2.78119 9.30203 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -2.05653 -4.03047 -3 + vertex -7.1272 -19.1706 -3 + vertex -3.45272 -3.03042 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.4385 -11.5861 -3 + vertex -3.45272 -3.03042 -3 + vertex -7.1272 -19.1706 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.7993 -11.4712 -3 + vertex -3.71458 -2.66291 -3 + vertex -17.4385 -11.5861 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -3.45272 -3.03042 -3 + vertex -17.4385 -11.5861 -3 + vertex -3.71458 -2.66291 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 1.41055 11.926 -3 + vertex 1.8467 12.7398 -3 + vertex 1.87173 12.344 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 1.8467 12.7398 -3 + vertex 1.41055 11.926 -3 + vertex 1.50002 13.1874 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 1.41055 11.926 -3 + vertex 0.918757 13.5702 -3 + vertex 1.50002 13.1874 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.535115 11.4454 -3 + vertex 0.918757 13.5702 -3 + vertex 1.41055 11.926 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.394194 11.1972 -3 + vertex 0.918757 13.5702 -3 + vertex 0.535115 11.4454 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.394194 11.1972 -3 + vertex -0.928844 14.138 -3 + vertex 0.918757 13.5702 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -1.46211 11.1697 -3 + vertex -0.928844 14.138 -3 + vertex -0.394194 11.1972 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -2.75335 11.3511 -3 + vertex -0.928844 14.138 -3 + vertex -1.46211 11.1697 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -2.75335 11.3511 -3 + vertex -3.65881 14.4362 -3 + vertex -0.928844 14.138 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -5.07797 11.6776 -3 + vertex -3.65881 14.4362 -3 + vertex -2.75335 11.3511 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.23385 14.4578 -3 + vertex -5.07797 11.6776 -3 + vertex -5.71478 11.6495 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.23385 14.4578 -3 + vertex -5.71478 11.6495 -3 + vertex -5.93765 11.491 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -5.07797 11.6776 -3 + vertex -7.23385 14.4578 -3 + vertex -3.65881 14.4362 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -13.7227 13.3517 -3 + vertex -3.71458 -2.66291 -3 + vertex -17.5299 12.3491 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.4385 -11.5861 -3 + vertex -7.1272 -19.1706 -3 + vertex -8.78621 -19.378 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.7016 -19.4898 -3 + vertex -8.78621 -19.378 -3 + vertex -10.3766 -20.1728 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -3.71458 -2.66291 -3 + vertex -13.7227 13.3517 -3 + vertex -4.99153 10.6633 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.7016 -19.4898 -3 + vertex -10.3766 -20.1728 -3 + vertex -11.6824 -19.9072 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -10.3766 -20.1728 -3 + vertex -11.8627 -20.4599 -3 + vertex -11.6824 -19.9072 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -11.8627 -20.4599 -3 + vertex -10.3766 -20.1728 -3 + vertex -12.0544 -21.102 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -20.6062 -18.108 -3 + vertex -22.6991 -20.0641 -3 + vertex -22.6057 -19.3555 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -23.6767 -35.9691 -3 + vertex -22.458 -35.4568 -3 + vertex -23.007 -35.8619 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -24.4076 -24.3815 -3 + vertex -21.28 -33.2523 -3 + vertex -23.4462 -30.738 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -21.28 -33.2523 -3 + vertex -23.1278 -21.2395 -3 + vertex -22.6991 -20.0641 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -22.458 -35.4568 -3 + vertex -23.6767 -35.9691 -3 + vertex -24.7956 -33.2498 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -21.28 -33.2523 -3 + vertex -23.8149 -31.5911 -3 + vertex -23.4462 -30.738 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -24.7956 -33.2498 -3 + vertex -23.6767 -35.9691 -3 + vertex -24.4194 -36.2501 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -21.28 -33.2523 -3 + vertex -24.7956 -33.2498 -3 + vertex -23.8149 -31.5911 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -27.2791 -36.8782 -3 + vertex -24.4194 -36.2501 -3 + vertex -24.9699 -36.888 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -27.2791 -36.8782 -3 + vertex -24.9699 -36.888 -3 + vertex -25.157 -37.5754 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -24.4194 -36.2501 -3 + vertex -27.2791 -36.8782 -3 + vertex -24.7956 -33.2498 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.299 -23.335 -3 + vertex -17.8179 -22.6324 -3 + vertex -17.2695 -22.7276 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.299 -23.335 -3 + vertex -18.3659 -22.5704 -3 + vertex -17.8179 -22.6324 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -18.5428 -26.6889 -3 + vertex -18.3659 -22.5704 -3 + vertex -17.299 -23.335 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -18.5428 -26.6889 -3 + vertex -18.6886 -22.3738 -3 + vertex -18.3659 -22.5704 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -22.6991 -20.0641 -3 + vertex -18.6886 -22.3738 -3 + vertex -18.5428 -26.6889 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -22.6991 -20.0641 -3 + vertex -18.7986 -22.0269 -3 + vertex -18.6886 -22.3738 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -18.7986 -22.0269 -3 + vertex -19.683 -17.584 -3 + vertex -19.3785 -17.1305 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -18.7986 -22.0269 -3 + vertex -20.1126 -17.9213 -3 + vertex -19.683 -17.584 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -18.7986 -22.0269 -3 + vertex -20.6062 -18.108 -3 + vertex -20.1126 -17.9213 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -22.6991 -20.0641 -3 + vertex -20.6062 -18.108 -3 + vertex -18.7986 -22.0269 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -22.6991 -20.0641 -3 + vertex -18.5428 -26.6889 -3 + vertex -21.28 -33.2523 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -20.6062 -18.108 -3 + vertex -22.6057 -19.3555 -3 + vertex -21.1029 -18.1093 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -21.1029 -18.1093 -3 + vertex -22.6057 -19.3555 -3 + vertex -21.3898 -18.0171 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -22.8641 -19.008 -3 + vertex -21.3898 -18.0171 -3 + vertex -22.6057 -19.3555 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -21.3898 -18.0171 -3 + vertex -22.8641 -19.008 -3 + vertex -21.538 -17.8042 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -23.4908 -18.9156 -3 + vertex -21.538 -17.8042 -3 + vertex -22.8641 -19.008 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -24.7956 -33.2498 -3 + vertex -21.9191 -34.6287 -3 + vertex -22.458 -35.4568 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -21.538 -17.8042 -3 + vertex -23.4908 -18.9156 -3 + vertex -21.5846 -16.4428 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -21.9191 -34.6287 -3 + vertex -24.7956 -33.2498 -3 + vertex -21.28 -33.2523 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -23.3419 -14.2877 -3 + vertex -21.5846 -16.4428 -3 + vertex -23.4908 -18.9156 -3 + endloop + endfacet + facet normal -0 -0 -1 + outer loop + vertex -22.1413 -14.5577 -3 + vertex -21.5846 -16.4428 -3 + vertex -23.3419 -14.2877 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -21.6401 -15.0493 -3 + vertex -22.1413 -14.5577 -3 + vertex -21.8106 -14.7733 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -21.5846 -16.4428 -3 + vertex -22.1413 -14.5577 -3 + vertex -21.6401 -15.0493 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -24.1111 -19.1062 -3 + vertex -23.3419 -14.2877 -3 + vertex -23.4908 -18.9156 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -26.1195 -14.1654 -3 + vertex -24.1111 -19.1062 -3 + vertex -24.7225 -19.9745 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -30.8809 -15.6487 -3 + vertex -24.7225 -19.9745 -3 + vertex -25.7001 -21.2849 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -24.1111 -19.1062 -3 + vertex -26.1195 -14.1654 -3 + vertex -23.3419 -14.2877 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -32.1593 -18.5412 -3 + vertex -25.7001 -21.2849 -3 + vertex -26.9351 -22.1109 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -32.1593 -18.5412 -3 + vertex -26.9351 -22.1109 -3 + vertex -28.6031 -22.5277 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -24.7225 -19.9745 -3 + vertex -30.8809 -15.6487 -3 + vertex -26.1195 -14.1654 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -26.1195 -14.1654 -3 + vertex -30.8809 -15.6487 -3 + vertex -29.5608 -14.1906 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -30.3887 -14.5514 -3 + vertex -29.5608 -14.1906 -3 + vertex -30.8809 -15.6487 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -32.1593 -18.5412 -3 + vertex -28.6031 -22.5277 -3 + vertex -30.8797 -22.6102 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -29.5608 -14.1906 -3 + vertex -30.3887 -14.5514 -3 + vertex -30.2116 -14.321 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -25.7001 -21.2849 -3 + vertex -32.1593 -18.5412 -3 + vertex -30.8809 -15.6487 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -33.3019 -21.4299 -3 + vertex -30.8797 -22.6102 -3 + vertex -32.5249 -22.5543 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -30.8797 -22.6102 -3 + vertex -33.3019 -21.4299 -3 + vertex -32.1593 -18.5412 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -33.3295 -22.4108 -3 + vertex -33.3019 -21.4299 -3 + vertex -32.5249 -22.5543 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -33.3019 -21.4299 -3 + vertex -33.3295 -22.4108 -3 + vertex -33.5147 -22.0719 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -8.78621 -19.378 -3 + vertex -17.4456 -12.0833 -3 + vertex -17.4385 -11.5861 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -19.3785 -17.1305 -3 + vertex -15.1553 -19.8912 -3 + vertex -17.9982 -20.7653 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -19.3785 -17.1305 -3 + vertex -17.9982 -20.7653 -3 + vertex -18.4336 -21.0091 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -19.3785 -17.1305 -3 + vertex -18.4336 -21.0091 -3 + vertex -18.7084 -21.5139 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -19.3785 -17.1305 -3 + vertex -18.7084 -21.5139 -3 + vertex -18.7986 -22.0269 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -15.1553 -19.8912 -3 + vertex -19.3785 -17.1305 -3 + vertex -17.4456 -12.0833 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -8.33648 -34.384 -3 + vertex -3.99709 -33.5697 -3 + vertex -7.51249 -36.3769 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -8.33648 -34.384 -3 + vertex -7.51249 -36.3769 -3 + vertex -7.98605 -36.0592 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -3.99709 -33.5697 -3 + vertex -8.33648 -34.384 -3 + vertex -6.41168 -29.738 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -8.56822 -35.3052 -3 + vertex -7.98605 -36.0592 -3 + vertex -8.51129 -35.7129 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.98605 -36.0592 -3 + vertex -8.56822 -35.3052 -3 + vertex -8.33648 -34.384 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -8.78621 -19.378 -3 + vertex -11.7016 -19.4898 -3 + vertex -11.9141 -19.2259 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.4456 -12.0833 -3 + vertex -8.78621 -19.378 -3 + vertex -11.9141 -19.2259 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.4456 -12.0833 -3 + vertex -11.9141 -19.2259 -3 + vertex -12.3137 -19.1333 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -5.93765 11.491 -3 + vertex -10.6367 14.238 -3 + vertex -7.23385 14.4578 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.4456 -12.0833 -3 + vertex -12.3137 -19.1333 -3 + vertex -15.1553 -19.8912 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -5.93765 11.491 -3 + vertex -13.7227 13.3517 -3 + vertex -10.6367 14.238 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -4.99153 10.6633 -3 + vertex -13.7227 13.3517 -3 + vertex -5.93765 11.491 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -3.71458 -2.66291 -3 + vertex -17.7993 -11.4712 -3 + vertex -17.5299 12.3491 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.7993 -11.4712 -3 + vertex -20.0298 12.0063 -3 + vertex -17.5299 12.3491 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.7993 -11.4712 -3 + vertex -22.4428 11.7593 -3 + vertex -20.0298 12.0063 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -27.1868 -11.3523 -3 + vertex -22.4428 11.7593 -3 + vertex -17.7993 -11.4712 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -22.4428 11.7593 -3 + vertex -27.1868 -11.3523 -3 + vertex -25.7097 11.6586 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -27.1868 -11.3523 -3 + vertex -28.6588 11.7129 -3 + vertex -25.7097 11.6586 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -34.87 -11.3196 -3 + vertex -28.6588 11.7129 -3 + vertex -27.1868 -11.3523 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -28.6588 11.7129 -3 + vertex -34.87 -11.3196 -3 + vertex -30.1182 11.9311 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -36.1936 -11.4238 -3 + vertex -30.1182 11.9311 -3 + vertex -34.87 -11.3196 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -36.792 -11.6364 -3 + vertex -30.1182 11.9311 -3 + vertex -36.1936 -11.4238 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -30.1182 11.9311 -3 + vertex -36.792 -11.6364 -3 + vertex -30.3887 12.6783 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -30.3887 12.6783 -3 + vertex -35.7552 21.6337 -3 + vertex -33.0651 20.3093 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -37.6991 23.0789 -3 + vertex -30.3887 12.6783 -3 + vertex -36.792 -11.6364 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -37.6991 23.0789 -3 + vertex -36.792 -11.6364 -3 + vertex -37.3951 -12.1929 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -39.1303 25.4589 -3 + vertex -37.3951 -12.1929 -3 + vertex -37.5366 -12.7854 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -30.3887 12.6783 -3 + vertex -37.6991 23.0789 -3 + vertex -35.7552 21.6337 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -9.69161 -22.56 -3 + vertex -8.46819 -23.4267 -3 + vertex -8.72405 -24.8218 -3 + endloop + endfacet + facet normal -0 -0 -1 + outer loop + vertex -8.78909 -22.7249 -3 + vertex -8.46819 -23.4267 -3 + vertex -9.69161 -22.56 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -12.4124 -23.7203 -3 + vertex -8.72405 -24.8218 -3 + vertex -9.55184 -27.0667 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -8.46819 -23.4267 -3 + vertex -8.78909 -22.7249 -3 + vertex -8.55624 -22.9989 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -8.72405 -24.8218 -3 + vertex -10.5461 -22.7271 -3 + vertex -9.69161 -22.56 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -8.72405 -24.8218 -3 + vertex -11.3967 -23.0769 -3 + vertex -10.5461 -22.7271 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -15.3894 -29.1914 -3 + vertex -9.55184 -27.0667 -3 + vertex -11.5932 -32.143 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -16.8281 -32.7116 -3 + vertex -11.5932 -32.143 -3 + vertex -12.3385 -33.8339 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -9.55184 -27.0667 -3 + vertex -14.2216 -26.3227 -3 + vertex -13.7062 -25.2068 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -16.8281 -32.7116 -3 + vertex -12.3385 -33.8339 -3 + vertex -13.0448 -35.0276 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -8.72405 -24.8218 -3 + vertex -12.4124 -23.7203 -3 + vertex -11.3967 -23.0769 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -13.1427 -24.3848 -3 + vertex -9.55184 -27.0667 -3 + vertex -13.7062 -25.2068 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -14.3732 -35.9691 -3 + vertex -13.0448 -35.0276 -3 + vertex -13.7203 -35.7356 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -9.55184 -27.0667 -3 + vertex -13.1427 -24.3848 -3 + vertex -12.4124 -23.7203 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -13.0448 -35.0276 -3 + vertex -14.3732 -35.9691 -3 + vertex -16.8281 -32.7116 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -16.8281 -32.7116 -3 + vertex -14.3732 -35.9691 -3 + vertex -14.8949 -36.1495 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -9.55184 -27.0667 -3 + vertex -15.3894 -29.1914 -3 + vertex -14.2216 -26.3227 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -16.5846 -36.2152 -3 + vertex -14.8949 -36.1495 -3 + vertex -15.4682 -36.5832 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -16.2226 -36.752 -3 + vertex -15.4682 -36.5832 -3 + vertex -15.9213 -37.1689 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -16.6989 -37.6188 -3 + vertex -15.9213 -37.1689 -3 + vertex -15.9433 -37.6764 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -16.5846 -36.2152 -3 + vertex -15.4682 -36.5832 -3 + vertex -16.2226 -36.752 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -14.8949 -36.1495 -3 + vertex -16.5846 -36.2152 -3 + vertex -16.8281 -32.7116 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -11.5932 -32.143 -3 + vertex -16.8281 -32.7116 -3 + vertex -15.3894 -29.1914 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.7285 -35.3062 -3 + vertex -16.5846 -36.2152 -3 + vertex -17.3742 -35.9691 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.7285 -35.3062 -3 + vertex -17.3742 -35.9691 -3 + vertex -17.6987 -35.8223 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -16.5846 -36.2152 -3 + vertex -17.7285 -35.3062 -3 + vertex -16.8281 -32.7116 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -24.4076 -24.3815 -3 + vertex -23.4462 -30.738 -3 + vertex -23.655 -30.4649 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -25.4741 -26.9141 -3 + vertex -23.655 -30.4649 -3 + vertex -24.0819 -30.2475 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -21.28 -33.2523 -3 + vertex -24.4076 -24.3815 -3 + vertex -23.1278 -21.2395 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -25.4741 -26.9141 -3 + vertex -24.0819 -30.2475 -3 + vertex -24.4667 -30.1541 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -26.2338 -28.3696 -3 + vertex -24.4667 -30.1541 -3 + vertex -24.8569 -30.2998 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -23.655 -30.4649 -3 + vertex -25.4741 -26.9141 -3 + vertex -24.4076 -24.3815 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -24.4667 -30.1541 -3 + vertex -26.2338 -28.3696 -3 + vertex -25.4741 -26.9141 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -26.8752 -29.0336 -3 + vertex -24.8569 -30.2998 -3 + vertex -26.8283 -32.1012 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -24.8569 -30.2998 -3 + vertex -26.8752 -29.0336 -3 + vertex -26.2338 -28.3696 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -26.8283 -32.1012 -3 + vertex -27.5872 -29.1914 -3 + vertex -26.8752 -29.0336 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -26.8283 -32.1012 -3 + vertex -28.1878 -29.097 -3 + vertex -27.5872 -29.1914 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -29.0969 -33.8499 -3 + vertex -28.1878 -29.097 -3 + vertex -26.8283 -32.1012 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -30.2578 -34.4631 -3 + vertex -28.1878 -29.097 -3 + vertex -29.0969 -33.8499 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -31.3644 -34.8586 -3 + vertex -28.1878 -29.097 -3 + vertex -30.2578 -34.4631 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -35.4824 -26.6225 -3 + vertex -28.1878 -29.097 -3 + vertex -31.3644 -34.8586 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -28.1878 -29.097 -3 + vertex -32.142 -25.4759 -3 + vertex -28.5713 -25.7117 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -28.1878 -29.097 -3 + vertex -35.4824 -26.6225 -3 + vertex -32.142 -25.4759 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -35.4824 -26.6225 -3 + vertex -31.3644 -34.8586 -3 + vertex -35.0529 -35.0835 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -32.142 -25.4759 -3 + vertex -35.4824 -26.6225 -3 + vertex -34.9626 -25.4747 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -38.7331 -34.5543 -3 + vertex -35.0529 -35.0835 -3 + vertex -38.4261 -34.9619 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -35.0529 -35.0835 -3 + vertex -38.7331 -34.5543 -3 + vertex -35.4824 -26.6225 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -28.5713 -25.7117 -3 + vertex -27.9105 -26.2055 -3 + vertex -28.1838 -28.4809 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -27.9105 -26.2055 -3 + vertex -28.5713 -25.7117 -3 + vertex -28.1036 -25.8829 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -28.5713 -25.7117 -3 + vertex -28.1838 -28.4809 -3 + vertex -28.1878 -29.097 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.1208 19.5935 -3 + vertex -11.5389 20.1801 -3 + vertex -10.9412 20.0018 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -12.0133 18.8648 -3 + vertex -11.5389 20.1801 -3 + vertex -11.1208 19.5935 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -12.0133 18.8648 -3 + vertex -12.9783 20.2187 -3 + vertex -11.5389 20.1801 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -15.009 16.7116 -3 + vertex -12.9783 20.2187 -3 + vertex -12.0133 18.8648 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -15.009 16.7116 -3 + vertex -16.3196 19.9968 -3 + vertex -12.9783 20.2187 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.0754 15.711 -3 + vertex -16.3196 19.9968 -3 + vertex -15.009 16.7116 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -20.1789 19.4139 -3 + vertex -17.0754 15.711 -3 + vertex -19.733 14.7364 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.0754 15.711 -3 + vertex -20.1789 19.4139 -3 + vertex -16.3196 19.9968 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -22.3118 14.0374 -3 + vertex -20.1789 19.4139 -3 + vertex -19.733 14.7364 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -22.3118 14.0374 -3 + vertex -24.1572 19.0472 -3 + vertex -20.1789 19.4139 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -24.873 13.6003 -3 + vertex -24.1572 19.0472 -3 + vertex -22.3118 14.0374 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -27.5587 18.9414 -3 + vertex -24.873 13.6003 -3 + vertex -27.4778 13.4117 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -24.873 13.6003 -3 + vertex -27.5587 18.9414 -3 + vertex -24.1572 19.0472 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -27.4778 13.4117 -3 + vertex -29.687 19.1409 -3 + vertex -27.5587 18.9414 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -29.9412 13.2465 -3 + vertex -29.687 19.1409 -3 + vertex -27.4778 13.4117 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -30.3118 13.0393 -3 + vertex -29.687 19.1409 -3 + vertex -29.9412 13.2465 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -33.0651 20.3093 -3 + vertex -30.3118 13.0393 -3 + vertex -30.3887 12.6783 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -30.3118 13.0393 -3 + vertex -33.0651 20.3093 -3 + vertex -29.687 19.1409 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 36.2859 -23.7121 -3 + vertex 36.104 -22.9178 -3 + vertex 36.3422 -23.0402 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 35.2001 -22.9271 -3 + vertex 36.2859 -23.7121 -3 + vertex 35.3305 -26.5156 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 36.2859 -23.7121 -3 + vertex 35.2001 -22.9271 -3 + vertex 36.104 -22.9178 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 35.3305 -26.5156 -3 + vertex 34.7441 -22.7166 -3 + vertex 35.2001 -22.9271 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 31.8275 -24.8188 -3 + vertex 34.7441 -22.7166 -3 + vertex 35.3305 -26.5156 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 31.8275 -24.8188 -3 + vertex 35.3305 -26.5156 -3 + vertex 33.8444 -30.1753 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 42.943 -20.2657 -3 + vertex 42.0238 -20.3507 -3 + vertex 42.1032 -19.4743 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 41.971 -20.8453 -3 + vertex 42.0238 -20.3507 -3 + vertex 42.943 -20.2657 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 42.0238 -20.3507 -3 + vertex 41.971 -20.8453 -3 + vertex 41.8981 -20.7296 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 117.5 -117.5 -3 + vertex 47.9875 -20.1225 -3 + vertex 117.5 117.5 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 117.5 -117.5 -3 + vertex 47.8425 -21.0531 -3 + vertex 47.9875 -20.1225 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 117.5 -117.5 -3 + vertex 47.5305 -21.9981 -3 + vertex 47.8425 -21.0531 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 117.5 -117.5 -3 + vertex 47.0957 -22.796 -3 + vertex 47.5305 -21.9981 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 117.5 -117.5 -3 + vertex 46.5684 -23.4293 -3 + vertex 47.0957 -22.796 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 37.9939 -37.5705 -3 + vertex 46.5684 -23.4293 -3 + vertex 117.5 -117.5 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 46.5684 -23.4293 -3 + vertex 37.9939 -37.5705 -3 + vertex 45.9792 -23.8802 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 38.113 -36.8464 -3 + vertex 45.9792 -23.8802 -3 + vertex 37.9939 -37.5705 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 45.9792 -23.8802 -3 + vertex 38.113 -36.8464 -3 + vertex 45.3585 -24.1311 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 37.9618 -36.3241 -3 + vertex 45.3585 -24.1311 -3 + vertex 38.113 -36.8464 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 38.2188 -29.6614 -3 + vertex 45.3585 -24.1311 -3 + vertex 37.9618 -36.3241 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 45.3585 -24.1311 -3 + vertex 38.2188 -29.6614 -3 + vertex 44.7368 -24.1643 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 40.5923 -24.6171 -3 + vertex 44.1445 -23.9621 -3 + vertex 40.0289 -25.46 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 41.2986 -23.9223 -3 + vertex 44.1445 -23.9621 -3 + vertex 40.5923 -24.6171 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 44.1445 -23.9621 -3 + vertex 41.2986 -23.9223 -3 + vertex 43.6122 -23.5069 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 43.6122 -23.5069 -3 + vertex 41.2986 -23.9223 -3 + vertex 42.7682 -22.851 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 44.7368 -24.1643 -3 + vertex 40.0289 -25.46 -3 + vertex 44.1445 -23.9621 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 117.5 -117.5 -3 + vertex 37.381 -37.9628 -3 + vertex 37.9939 -37.5705 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 117.5 -117.5 -3 + vertex 35.8907 -38.1241 -3 + vertex 37.381 -37.9628 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 117.5 -117.5 -3 + vertex 33.1396 -38.1555 -3 + vertex 35.8907 -38.1241 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 117.5 -117.5 -3 + vertex 29.8074 -38.0948 -3 + vertex 33.1396 -38.1555 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 20.3084 -38.5182 -3 + vertex 29.8074 -38.0948 -3 + vertex 117.5 -117.5 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 28.553 -36.8405 -3 + vertex 25.9895 -35.834 -3 + vertex 27.8442 -34.1555 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 24.0601 -37.0678 -3 + vertex 28.4102 -37.3704 -3 + vertex 28.6431 -37.8931 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 21.4079 -38.2833 -3 + vertex 29.8074 -38.0948 -3 + vertex 20.3084 -38.5182 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 28.4102 -37.3704 -3 + vertex 24.0601 -37.0678 -3 + vertex 25.9895 -35.834 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 28.6431 -37.8931 -3 + vertex 21.4079 -38.2833 -3 + vertex 24.0601 -37.0678 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 29.8074 -38.0948 -3 + vertex 21.4079 -38.2833 -3 + vertex 28.6431 -37.8931 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 117.5 -117.5 -3 + vertex 19.0956 -38.5852 -3 + vertex 20.3084 -38.5182 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 5.33583 -38.4712 -3 + vertex 19.0956 -38.5852 -3 + vertex 117.5 -117.5 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 19.0956 -38.5852 -3 + vertex 5.33583 -38.4712 -3 + vertex 17.8945 -38.4707 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 17.8945 -38.4707 -3 + vertex 5.33583 -38.4712 -3 + vertex 16.8412 -38.0675 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 12.1385 -34.7994 -3 + vertex 14.6656 -34.4466 -3 + vertex 12.2351 -35.1874 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 14.8379 -35.6738 -3 + vertex 12.2351 -35.1874 -3 + vertex 14.6656 -34.4466 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 12.1379 -35.6584 -3 + vertex 14.8379 -35.6738 -3 + vertex 15.2376 -36.6526 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.1962 -36.5595 -3 + vertex 15.2376 -36.6526 -3 + vertex 15.8953 -37.4336 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 8.47177 -37.477 -3 + vertex 16.8412 -38.0675 -3 + vertex 5.33583 -38.4712 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 14.8379 -35.6738 -3 + vertex 12.1379 -35.6584 -3 + vertex 12.2351 -35.1874 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.2376 -36.6526 -3 + vertex 11.7916 -36.1064 -3 + vertex 12.1379 -35.6584 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.2376 -36.6526 -3 + vertex 11.1962 -36.5595 -3 + vertex 11.7916 -36.1064 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.8953 -37.4336 -3 + vertex 10.519 -36.9119 -3 + vertex 11.1962 -36.5595 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 10.519 -36.9119 -3 + vertex 16.8412 -38.0675 -3 + vertex 9.92719 -37.0575 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 16.8412 -38.0675 -3 + vertex 10.519 -36.9119 -3 + vertex 15.8953 -37.4336 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 9.92719 -37.0575 -3 + vertex 16.8412 -38.0675 -3 + vertex 8.47177 -37.477 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.962702 -38.4962 -3 + vertex 5.33583 -38.4712 -3 + vertex 117.5 -117.5 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 4.73542 -37.8041 -3 + vertex 3.43985 -37.8545 -3 + vertex 4.64415 -37.2809 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 4.84381 -38.3343 -3 + vertex 3.43985 -37.8545 -3 + vertex 4.73542 -37.8041 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 2.31266 -38.26 -3 + vertex 5.33583 -38.4712 -3 + vertex 0.962702 -38.4962 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 4.84381 -38.3343 -3 + vertex 2.31266 -38.26 -3 + vertex 3.43985 -37.8545 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 5.33583 -38.4712 -3 + vertex 2.31266 -38.26 -3 + vertex 4.84381 -38.3343 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 117.5 -117.5 -3 + vertex -0.366978 -38.538 -3 + vertex 0.962702 -38.4962 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -117.5 -117.5 -3 + vertex -0.366978 -38.538 -3 + vertex 117.5 -117.5 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -12.0013 -38.1555 -3 + vertex -0.366978 -38.538 -3 + vertex -117.5 -117.5 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -3.14673 -30.0798 -3 + vertex -6.41168 -29.738 -3 + vertex -4.26405 -24.3543 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.51249 -36.3769 -3 + vertex -3.80393 -35.193 -3 + vertex -7.31439 -36.7536 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.31439 -36.7536 -3 + vertex -3.80393 -35.193 -3 + vertex -3.26834 -36.6145 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -3.80393 -35.193 -3 + vertex -7.51249 -36.3769 -3 + vertex -3.99709 -33.5697 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.3919 -37.1883 -3 + vertex -3.26834 -36.6145 -3 + vertex -2.45619 -37.7112 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -8.07933 -37.9462 -3 + vertex -1.43333 -38.36 -3 + vertex -8.66873 -38.0883 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -3.26834 -36.6145 -3 + vertex -7.3919 -37.1883 -3 + vertex -7.31439 -36.7536 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -2.45619 -37.7112 -3 + vertex -7.74517 -37.6801 -3 + vertex -7.3919 -37.1883 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -2.45619 -37.7112 -3 + vertex -8.07933 -37.9462 -3 + vertex -7.74517 -37.6801 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -1.43333 -38.36 -3 + vertex -8.07933 -37.9462 -3 + vertex -2.45619 -37.7112 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -8.66873 -38.0883 -3 + vertex -0.366978 -38.538 -3 + vertex -12.0013 -38.1555 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.366978 -38.538 -3 + vertex -8.66873 -38.0883 -3 + vertex -1.43333 -38.36 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -12.0013 -38.1555 -3 + vertex -117.5 -117.5 -3 + vertex -15.3277 -38.0928 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -15.9213 -37.1689 -3 + vertex -16.6989 -37.6188 -3 + vertex -16.2226 -36.752 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -15.7983 -37.9502 -3 + vertex -16.6989 -37.6188 -3 + vertex -15.9433 -37.6764 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -17.5781 -38.0841 -3 + vertex -15.3277 -38.0928 -3 + vertex -117.5 -117.5 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -15.7983 -37.9502 -3 + vertex -17.033 -37.9274 -3 + vertex -16.6989 -37.6188 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -15.7983 -37.9502 -3 + vertex -17.5781 -38.0841 -3 + vertex -17.033 -37.9274 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -15.3277 -38.0928 -3 + vertex -17.5781 -38.0841 -3 + vertex -15.7983 -37.9502 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -17.5781 -38.0841 -3 + vertex -117.5 -117.5 -3 + vertex -20.8226 -38.1301 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -25.0608 -37.8416 -3 + vertex -27.2791 -36.8782 -3 + vertex -25.157 -37.5754 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -28.2835 -38.1638 -3 + vertex -25.0608 -37.8416 -3 + vertex -24.8096 -38.0047 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -28.2835 -38.1638 -3 + vertex -20.8226 -38.1301 -3 + vertex -117.5 -117.5 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -25.0608 -37.8416 -3 + vertex -28.2835 -38.1638 -3 + vertex -27.2791 -36.8782 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -20.8226 -38.1301 -3 + vertex -28.2835 -38.1638 -3 + vertex -24.8096 -38.0047 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -28.2835 -38.1638 -3 + vertex -117.5 -117.5 -3 + vertex -37.632 -38.1325 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -47.8161 -37.7712 -3 + vertex -117.5 -117.5 -3 + vertex -47.9875 -37.5097 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -47.4646 -37.9547 -3 + vertex -117.5 -117.5 -3 + vertex -47.8161 -37.7712 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -37.632 -38.1325 -3 + vertex -117.5 -117.5 -3 + vertex -47.4646 -37.9547 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 47.7267 -19.5813 -3 + vertex 117.5 117.5 -3 + vertex 47.9875 -20.1225 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 27.5422 14.7505 -3 + vertex 47.7267 -19.5813 -3 + vertex 47.2139 -19.2263 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 27.528 9.70386 -3 + vertex 47.2139 -19.2263 -3 + vertex 46.2623 -19.1343 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 41.5319 -19.1343 -3 + vertex 46.2623 -19.1343 -3 + vertex 44.5909 -19.3768 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 42.1032 -19.4743 -3 + vertex 44.5909 -19.3768 -3 + vertex 42.943 -20.2657 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 44.5909 -19.3768 -3 + vertex 42.1032 -19.4743 -3 + vertex 41.8934 -19.2238 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 41.5319 -19.1343 -3 + vertex 44.5909 -19.3768 -3 + vertex 41.8934 -19.2238 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 27.528 9.70386 -3 + vertex 46.2623 -19.1343 -3 + vertex 41.5319 -19.1343 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 29.9429 -19.4981 -3 + vertex 41.5319 -19.1343 -3 + vertex 38.4798 -20.1181 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 30.7248 -19.9631 -3 + vertex 38.4798 -20.1181 -3 + vertex 35.5661 -21.102 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 30.7248 -19.9631 -3 + vertex 35.5661 -21.102 -3 + vertex 35.2187 -21.2043 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 31.3699 -20.64 -3 + vertex 35.2187 -21.2043 -3 + vertex 34.9156 -21.474 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 30.2029 -31.1764 -3 + vertex 33.8444 -30.1753 -3 + vertex 32.5255 -33.371 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 34.7441 -22.7166 -3 + vertex 32.0255 -23.3848 -3 + vertex 34.62 -22.2927 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 32.0232 -22.2828 -3 + vertex 34.62 -22.2927 -3 + vertex 32.0255 -23.3848 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 31.8086 -21.404 -3 + vertex 34.62 -22.2927 -3 + vertex 32.0232 -22.2828 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 34.62 -22.2927 -3 + vertex 31.8086 -21.404 -3 + vertex 34.9156 -21.474 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 31.3699 -20.64 -3 + vertex 34.9156 -21.474 -3 + vertex 31.8086 -21.404 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 35.2187 -21.2043 -3 + vertex 31.3699 -20.64 -3 + vertex 30.7248 -19.9631 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 38.4798 -20.1181 -3 + vertex 30.7248 -19.9631 -3 + vertex 29.9429 -19.4981 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 27.528 9.70386 -3 + vertex 41.5319 -19.1343 -3 + vertex 29.9429 -19.4981 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 27.528 9.70386 -3 + vertex 29.9429 -19.4981 -3 + vertex 28.989 -19.2301 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 26.7235 1.18648 -3 + vertex 28.989 -19.2301 -3 + vertex 27.8281 -19.1444 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 47.2139 -19.2263 -3 + vertex 27.6094 12.2412 -3 + vertex 27.5422 14.7505 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 47.7267 -19.5813 -3 + vertex 27.5422 14.7505 -3 + vertex 117.5 117.5 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 26.4742 18.624 -3 + vertex 27.5422 14.7505 -3 + vertex 27.1755 15.8473 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 26.4742 18.624 -3 + vertex 27.1755 15.8473 -3 + vertex 26.6933 17.4601 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 27.5422 14.7505 -3 + vertex 26.4742 18.624 -3 + vertex 117.5 117.5 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 25.9424 19.4837 -3 + vertex 117.5 117.5 -3 + vertex 26.4742 18.624 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 21.8319 23.6658 -3 + vertex 25.9424 19.4837 -3 + vertex 25.0752 20.0627 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 22.0827 22.427 -3 + vertex 25.0752 20.0627 -3 + vertex 23.8499 20.3844 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 22.2698 21.5943 -3 + vertex 23.8499 20.3844 -3 + vertex 23.1387 20.59 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 22.2698 21.5943 -3 + vertex 23.1387 20.59 -3 + vertex 22.6169 20.9877 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 23.8499 20.3844 -3 + vertex 22.2698 21.5943 -3 + vertex 22.0827 22.427 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 25.0752 20.0627 -3 + vertex 22.0827 22.427 -3 + vertex 21.8319 23.6658 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 25.9424 19.4837 -3 + vertex 21.8319 23.6658 -3 + vertex 21.2755 24.568 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 25.9424 19.4837 -3 + vertex 21.2755 24.568 -3 + vertex 117.5 117.5 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.3134 30.0845 -3 + vertex 21.2755 24.568 -3 + vertex 20.1819 25.3734 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.4783 29.8698 -3 + vertex 20.1819 25.3734 -3 + vertex 18.3193 26.3216 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.4783 29.8698 -3 + vertex 18.3193 26.3216 -3 + vertex 17.0772 26.9817 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.6084 29.1601 -3 + vertex 17.0772 26.9817 -3 + vertex 16.2688 27.6146 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.6084 29.1601 -3 + vertex 16.2688 27.6146 -3 + vertex 15.808 28.3106 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 17.0772 26.9817 -3 + vertex 15.6084 29.1601 -3 + vertex 15.4783 29.8698 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.3134 30.0845 -3 + vertex 20.1819 25.3734 -3 + vertex 15.4783 29.8698 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 21.2755 24.568 -3 + vertex 15.3134 30.0845 -3 + vertex 117.5 117.5 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 12.0123 26.7794 -3 + vertex 15.122 28.0941 -3 + vertex 12.5486 25.9653 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.8052 27.5343 -3 + vertex 15.122 28.0941 -3 + vertex 12.0123 26.7794 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.0577 29.0611 -3 + vertex 12.2907 30.5214 -3 + vertex 15.1584 29.8123 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.1584 29.8123 -3 + vertex 12.2907 30.5214 -3 + vertex 15.3134 30.0845 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 12.0544 30.7144 -3 + vertex 15.3134 30.0845 -3 + vertex 12.2907 30.5214 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.3134 30.0845 -3 + vertex 12.0544 30.7144 -3 + vertex 5.25321 38.4452 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 5.19939 38.083 -3 + vertex 12.0544 30.7144 -3 + vertex 11.5971 30.3591 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 8.51885 25.3107 -3 + vertex 11.5037 26.4501 -3 + vertex 9.07032 24.476 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 11.5037 26.4501 -3 + vertex 8.51885 25.3107 -3 + vertex 11.1066 27.3577 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.91411 25.7528 -3 + vertex 11.1066 27.3577 -3 + vertex 8.51885 25.3107 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 11.1066 27.3577 -3 + vertex 7.91411 25.7528 -3 + vertex 11.0411 28.3898 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.11433 25.9588 -3 + vertex 11.0411 28.3898 -3 + vertex 7.91411 25.7528 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 5.72413 26.6445 -3 + vertex 11.0411 28.3898 -3 + vertex 7.11433 25.9588 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 11.0411 28.3898 -3 + vertex 5.72413 26.6445 -3 + vertex 11.2319 29.4873 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 5.72413 26.6445 -3 + vertex 7.11433 25.9588 -3 + vertex 6.4022 26.1795 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 4.3138 28.4461 -3 + vertex 11.2319 29.4873 -3 + vertex 5.72413 26.6445 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 3.57109 31.3388 -3 + vertex 11.2319 29.4873 -3 + vertex 4.3138 28.4461 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.3134 30.0845 -3 + vertex 5.25321 38.4452 -3 + vertex 5.15152 38.5852 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 15.3134 30.0845 -3 + vertex 5.15152 38.5852 -3 + vertex 117.5 117.5 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.115935 27.2162 -3 + vertex 1.04836 28.6106 -3 + vertex 0.858783 27.1101 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.786632 27.5359 -3 + vertex 1.04836 28.6106 -3 + vertex -0.115935 27.2162 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -1.46161 28.0795 -3 + vertex 1.04836 28.6106 -3 + vertex -0.786632 27.5359 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 1.04836 28.6106 -3 + vertex -1.46161 28.0795 -3 + vertex 1.1273 29.8907 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -2.77953 29.7664 -3 + vertex 1.1273 29.8907 -3 + vertex -1.46161 28.0795 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 1.1273 29.8907 -3 + vertex -2.77953 29.7664 -3 + vertex 1.37489 31.173 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -3.97987 32.1322 -3 + vertex 1.37489 31.173 -3 + vertex -2.77953 29.7664 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 1.37489 31.173 -3 + vertex -3.97987 32.1322 -3 + vertex 2.44067 33.9939 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -4.97284 35.0324 -3 + vertex 2.44067 33.9939 -3 + vertex -3.97987 32.1322 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -5.55994 36.5001 -3 + vertex 2.44067 33.9939 -3 + vertex -4.97284 35.0324 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 2.44067 33.9939 -3 + vertex -5.55994 36.5001 -3 + vertex 4.08079 37.0842 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 4.08079 37.0842 -3 + vertex -5.55994 36.5001 -3 + vertex 5.15152 38.5852 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -5.8163 36.5812 -3 + vertex 5.15152 38.5852 -3 + vertex -5.55994 36.5001 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -117.5 117.5 -3 + vertex 5.15152 38.5852 -3 + vertex -5.8163 36.5812 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.25507 27.2437 -3 + vertex -6.28322 28.2565 -3 + vertex -6.38329 27.6173 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -6.28322 28.2565 -3 + vertex -8.80952 27.3973 -3 + vertex -6.22131 31.7226 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.25507 27.2437 -3 + vertex -6.38329 27.6173 -3 + vertex -6.55612 27.3597 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -6.28322 28.2565 -3 + vertex -7.25507 27.2437 -3 + vertex -8.80952 27.3973 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.546 27.7352 -3 + vertex -6.22131 31.7226 -3 + vertex -8.80952 27.3973 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -6.22131 31.7226 -3 + vertex -11.546 27.7352 -3 + vertex -6.055 36.2349 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -13.5562 27.8374 -3 + vertex -6.055 36.2349 -3 + vertex -11.546 27.7352 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -15.2376 27.7001 -3 + vertex -6.055 36.2349 -3 + vertex -13.5562 27.8374 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -20.8096 27.6578 -3 + vertex -6.055 36.2349 -3 + vertex -15.2376 27.7001 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -20.8096 27.6578 -3 + vertex -15.2376 27.7001 -3 + vertex -16.9875 27.3196 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -19.9485 27.2141 -3 + vertex -16.9875 27.3196 -3 + vertex -19.335 26.703 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -20.8096 27.6578 -3 + vertex -16.9875 27.3196 -3 + vertex -19.9485 27.2141 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -22.4093 27.9007 -3 + vertex -6.055 36.2349 -3 + vertex -20.8096 27.6578 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -6.055 36.2349 -3 + vertex -22.4093 27.9007 -3 + vertex -5.8163 36.5812 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -24.3632 27.9554 -3 + vertex -5.8163 36.5812 -3 + vertex -22.4093 27.9007 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -30.666 27.4912 -3 + vertex -5.8163 36.5812 -3 + vertex -24.3632 27.9554 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -24.3225 27.6757 -3 + vertex -27.4214 26.3653 -3 + vertex -24.3632 27.9554 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -29.2879 26.9865 -3 + vertex -24.3632 27.9554 -3 + vertex -27.4214 26.3653 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -24.3632 27.9554 -3 + vertex -29.2879 26.9865 -3 + vertex -30.666 27.4912 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -31.2177 27.4629 -3 + vertex -5.8163 36.5812 -3 + vertex -30.666 27.4912 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -5.8163 36.5812 -3 + vertex -31.2177 27.4629 -3 + vertex -117.5 117.5 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -31.2773 24.779 -3 + vertex -34.2108 23.023 -3 + vertex -31.2912 27.2229 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -36.1697 23.9798 -3 + vertex -31.2912 27.2229 -3 + vertex -34.2108 23.023 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -37.7877 25.1404 -3 + vertex -31.2912 27.2229 -3 + vertex -36.1697 23.9798 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -31.2912 27.2229 -3 + vertex -37.7877 25.1404 -3 + vertex -31.2177 27.4629 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -38.5782 25.7376 -3 + vertex -31.2177 27.4629 -3 + vertex -37.7877 25.1404 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -39.0347 25.8392 -3 + vertex -31.2177 27.4629 -3 + vertex -38.5782 25.7376 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -31.2177 27.4629 -3 + vertex -39.0347 25.8392 -3 + vertex -117.5 117.5 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -47.2102 -36.2359 -3 + vertex -39.9072 -25.4747 -3 + vertex -42.237 -30.9405 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -47.2102 -36.2359 -3 + vertex -42.237 -30.9405 -3 + vertex -43.2543 -33.2915 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -46.1801 -35.8499 -3 + vertex -43.2543 -33.2915 -3 + vertex -44.1198 -34.7306 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -46.1801 -35.8499 -3 + vertex -44.1198 -34.7306 -3 + vertex -45.0296 -35.5019 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -43.2543 -33.2915 -3 + vertex -46.1801 -35.8499 -3 + vertex -47.2102 -36.2359 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -37.5366 -12.7854 -3 + vertex -47.2102 -36.2359 -3 + vertex -47.8577 -36.863 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -37.5366 -12.7854 -3 + vertex -47.8577 -36.863 -3 + vertex -39.1303 25.4589 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -117.5 -117.5 -3 + vertex -47.8577 -36.863 -3 + vertex -47.9875 -37.5097 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -47.8577 -36.863 -3 + vertex -117.5 -117.5 -3 + vertex -117.5 117.5 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -47.8577 -36.863 -3 + vertex -117.5 117.5 -3 + vertex -39.1303 25.4589 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 5.15152 38.5852 -3 + vertex -117.5 117.5 -3 + vertex 117.5 117.5 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -39.1303 25.4589 -3 + vertex -117.5 117.5 -3 + vertex -39.0347 25.8392 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 40.0289 -25.46 -3 + vertex 44.7368 -24.1643 -3 + vertex 38.2188 -29.6614 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 36.8272 -33.2656 -3 + vertex 37.9618 -36.3241 -3 + vertex 37.1913 -36.0604 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 37.9618 -36.3241 -3 + vertex 36.8272 -33.2656 -3 + vertex 38.2188 -29.6614 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 36.2918 -35.0946 -3 + vertex 37.1913 -36.0604 -3 + vertex 36.3972 -35.7834 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 37.1913 -36.0604 -3 + vertex 36.2918 -35.0946 -3 + vertex 36.8272 -33.2656 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 9.72145 16.1788 -3 + vertex 9.76373 17.1908 -3 + vertex 10.4258 16.5104 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 8.86535 15.8492 -3 + vertex 9.76373 17.1908 -3 + vertex 9.72145 16.1788 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 8.028 17.0592 -3 + vertex 9.76373 17.1908 -3 + vertex 8.86535 15.8492 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 9.76373 17.1908 -3 + vertex 8.028 17.0592 -3 + vertex 8.30319 18.4459 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.15178 18.7442 -3 + vertex 8.30319 18.4459 -3 + vertex 8.028 17.0592 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 8.30319 18.4459 -3 + vertex 7.15178 18.7442 -3 + vertex 7.1994 19.1268 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -10.5829 24.4 -3 + vertex -11.2742 24.7069 -3 + vertex -10.6709 24.5009 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -14.1729 23.8467 -3 + vertex -11.2742 24.7069 -3 + vertex -10.5829 24.4 -3 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -11.2742 24.7069 -3 + vertex -14.1729 23.8467 -3 + vertex -13.9393 24.99 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -14.1729 23.8467 -3 + vertex -16.6107 24.7853 -3 + vertex -13.9393 24.99 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -19.3275 23.0662 -3 + vertex -16.6107 24.7853 -3 + vertex -14.1729 23.8467 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -19.3275 23.0662 -3 + vertex -20.4324 24.2101 -3 + vertex -16.6107 24.7853 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -21.5591 22.7309 -3 + vertex -20.4324 24.2101 -3 + vertex -19.3275 23.0662 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -22.0432 22.8497 -3 + vertex -20.4324 24.2101 -3 + vertex -21.5591 22.7309 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -22.6641 23.2546 -3 + vertex -20.4324 24.2101 -3 + vertex -22.0432 22.8497 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -20.4324 24.2101 -3 + vertex -22.6641 23.2546 -3 + vertex -23.3809 23.8604 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 24.4233 -24.8188 -3 + vertex 27.3613 -24.0204 -3 + vertex 27.2283 -24.8188 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 26.0804 -21.8157 -3 + vertex 27.3613 -24.0204 -3 + vertex 24.4233 -24.8188 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 27.3668 -22.8574 -3 + vertex 26.0804 -21.8157 -3 + vertex 26.9354 -22.1189 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 27.3613 -24.0204 -3 + vertex 26.0804 -21.8157 -3 + vertex 27.3668 -22.8574 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 26.0804 -21.8157 -3 + vertex 24.4233 -24.8188 -3 + vertex 24.8153 -21.9586 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 24.4233 -24.8188 -3 + vertex 23.7526 -22.3987 -3 + vertex 24.8153 -21.9586 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 24.4233 -24.8188 -3 + vertex 22.6861 -23.3258 -3 + vertex 23.7526 -22.3987 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 22.6861 -23.3258 -3 + vertex 24.4233 -24.8188 -3 + vertex 21.6183 -24.6221 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.70773 -21.5983 -3 + vertex 10.169 -23.3758 -3 + vertex 10.0775 -24.2416 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 6.85097 -21.9079 -3 + vertex 10.0775 -24.2416 -3 + vertex 9.7411 -25.4359 -3 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 8.49325 -21.5121 -3 + vertex 10.169 -23.3758 -3 + vertex 7.70773 -21.5983 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.169 -23.3758 -3 + vertex 8.49325 -21.5121 -3 + vertex 10.0454 -22.5812 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.0454 -22.5812 -3 + vertex 9.16984 -21.6481 -3 + vertex 9.69979 -22.0048 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 3.84714 -24.6213 -3 + vertex 9.7411 -25.4359 -3 + vertex 7.96204 -29.9101 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.0775 -24.2416 -3 + vertex 6.85097 -21.9079 -3 + vertex 7.70773 -21.5983 -3 + endloop + endfacet + facet normal -0 -0 -1 + outer loop + vertex 9.16984 -21.6481 -3 + vertex 10.0454 -22.5812 -3 + vertex 8.49325 -21.5121 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 1.3456 -29.5107 -3 + vertex 7.96204 -29.9101 -3 + vertex 6.30534 -33.4759 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 9.7411 -25.4359 -3 + vertex 5.96068 -22.4422 -3 + vertex 6.85097 -21.9079 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.901133 -32.5034 -3 + vertex 6.30534 -33.4759 -3 + vertex 5.71313 -34.2297 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 9.7411 -25.4359 -3 + vertex 5.07455 -23.2024 -3 + vertex 5.96068 -22.4422 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.901133 -32.5034 -3 + vertex 5.71313 -34.2297 -3 + vertex 5.04571 -34.678 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.901133 -32.5034 -3 + vertex 5.04571 -34.678 -3 + vertex 4.11511 -35.011 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 9.7411 -25.4359 -3 + vertex 3.84714 -24.6213 -3 + vertex 5.07455 -23.2024 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.901133 -32.5034 -3 + vertex 4.11511 -35.011 -3 + vertex 3.17687 -35.0966 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.96204 -29.9101 -3 + vertex 2.80055 -26.1986 -3 + vertex 3.84714 -24.6213 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 1.11766 -33.6813 -3 + vertex 3.17687 -35.0966 -3 + vertex 2.32628 -34.9386 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.96204 -29.9101 -3 + vertex 1.95873 -27.8549 -3 + vertex 2.80055 -26.1986 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 1.11766 -33.6813 -3 + vertex 2.32628 -34.9386 -3 + vertex 1.65861 -34.5411 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.96204 -29.9101 -3 + vertex 1.3456 -29.5107 -3 + vertex 1.95873 -27.8549 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 3.17687 -35.0966 -3 + vertex 1.11766 -33.6813 -3 + vertex 0.901133 -32.5034 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 6.30534 -33.4759 -3 + vertex 0.985088 -31.0867 -3 + vertex 1.3456 -29.5107 -3 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 6.30534 -33.4759 -3 + vertex 0.901133 -32.5034 -3 + vertex 0.985088 -31.0867 -3 + endloop + endfacet + facet normal -0.929682 -0.368364 0 + outer loop + vertex 19.6777 -11.13 -3 + vertex 19.5452 -10.7956 0 + vertex 19.5452 -10.7956 -3 + endloop + endfacet + facet normal -0.929682 -0.368364 0 + outer loop + vertex 19.5452 -10.7956 0 + vertex 19.6777 -11.13 -3 + vertex 19.6777 -11.13 0 + endloop + endfacet + facet normal -0.933646 0.358197 0 + outer loop + vertex 17.1521 -17.7131 -3 + vertex 19.6777 -11.13 0 + vertex 19.6777 -11.13 -3 + endloop + endfacet + facet normal -0.933646 0.358197 0 + outer loop + vertex 19.6777 -11.13 0 + vertex 17.1521 -17.7131 -3 + vertex 17.1521 -17.7131 0 + endloop + endfacet + facet normal -0.922106 0.386938 0 + outer loop + vertex 14.5835 -23.8342 -3 + vertex 17.1521 -17.7131 0 + vertex 17.1521 -17.7131 -3 + endloop + endfacet + facet normal -0.922106 0.386938 0 + outer loop + vertex 17.1521 -17.7131 0 + vertex 14.5835 -23.8342 -3 + vertex 14.5835 -23.8342 0 + endloop + endfacet + facet normal -0.926605 0.376035 0 + outer loop + vertex 11.4887 -31.4602 -3 + vertex 14.5835 -23.8342 0 + vertex 14.5835 -23.8342 -3 + endloop + endfacet + facet normal -0.926605 0.376035 0 + outer loop + vertex 14.5835 -23.8342 0 + vertex 11.4887 -31.4602 -3 + vertex 11.4887 -31.4602 0 + endloop + endfacet + facet normal -0.942271 0.334852 0 + outer loop + vertex 10.915 -33.0747 -3 + vertex 11.4887 -31.4602 0 + vertex 11.4887 -31.4602 -3 + endloop + endfacet + facet normal -0.942271 0.334852 0 + outer loop + vertex 11.4887 -31.4602 0 + vertex 10.915 -33.0747 -3 + vertex 10.915 -33.0747 0 + endloop + endfacet + facet normal -0.976917 0.213621 0 + outer loop + vertex 10.7197 -33.9677 -3 + vertex 10.915 -33.0747 0 + vertex 10.915 -33.0747 -3 + endloop + endfacet + facet normal -0.976917 0.213621 0 + outer loop + vertex 10.915 -33.0747 0 + vertex 10.7197 -33.9677 -3 + vertex 10.7197 -33.9677 0 + endloop + endfacet + facet normal -0.904266 -0.42697 0 + outer loop + vertex 10.9006 -34.3507 -3 + vertex 10.7197 -33.9677 0 + vertex 10.7197 -33.9677 -3 + endloop + endfacet + facet normal -0.904266 -0.42697 0 + outer loop + vertex 10.7197 -33.9677 0 + vertex 10.9006 -34.3507 -3 + vertex 10.9006 -34.3507 0 + endloop + endfacet + facet normal -0.15089 -0.988551 0 + outer loop + vertex 10.9006 -34.3507 -3 + vertex 11.4551 -34.4353 0 + vertex 10.9006 -34.3507 0 + endloop + endfacet + facet normal -0.15089 -0.988551 -0 + outer loop + vertex 11.4551 -34.4353 0 + vertex 10.9006 -34.3507 -3 + vertex 11.4551 -34.4353 -3 + endloop + endfacet + facet normal -0.233297 -0.972406 0 + outer loop + vertex 11.4551 -34.4353 -3 + vertex 11.871 -34.5351 0 + vertex 11.4551 -34.4353 0 + endloop + endfacet + facet normal -0.233297 -0.972406 -0 + outer loop + vertex 11.871 -34.5351 0 + vertex 11.4551 -34.4353 -3 + vertex 11.871 -34.5351 -3 + endloop + endfacet + facet normal -0.702731 -0.711456 0 + outer loop + vertex 11.871 -34.5351 -3 + vertex 12.1385 -34.7994 0 + vertex 11.871 -34.5351 0 + endloop + endfacet + facet normal -0.702731 -0.711456 -0 + outer loop + vertex 12.1385 -34.7994 0 + vertex 11.871 -34.5351 -3 + vertex 12.1385 -34.7994 -3 + endloop + endfacet + facet normal -0.970405 -0.241485 0 + outer loop + vertex 12.2351 -35.1874 -3 + vertex 12.1385 -34.7994 0 + vertex 12.1385 -34.7994 -3 + endloop + endfacet + facet normal -0.970405 -0.241485 0 + outer loop + vertex 12.1385 -34.7994 0 + vertex 12.2351 -35.1874 -3 + vertex 12.2351 -35.1874 0 + endloop + endfacet + facet normal -0.979345 0.202199 0 + outer loop + vertex 12.1379 -35.6584 -3 + vertex 12.2351 -35.1874 0 + vertex 12.2351 -35.1874 -3 + endloop + endfacet + facet normal -0.979345 0.202199 0 + outer loop + vertex 12.2351 -35.1874 0 + vertex 12.1379 -35.6584 -3 + vertex 12.1379 -35.6584 0 + endloop + endfacet + facet normal -0.791253 0.611489 0 + outer loop + vertex 11.7916 -36.1064 -3 + vertex 12.1379 -35.6584 0 + vertex 12.1379 -35.6584 -3 + endloop + endfacet + facet normal -0.791253 0.611489 0 + outer loop + vertex 12.1379 -35.6584 0 + vertex 11.7916 -36.1064 -3 + vertex 11.7916 -36.1064 0 + endloop + endfacet + facet normal -0.605591 0.795776 0 + outer loop + vertex 11.7916 -36.1064 -3 + vertex 11.1962 -36.5595 0 + vertex 11.7916 -36.1064 0 + endloop + endfacet + facet normal -0.605591 0.795776 0 + outer loop + vertex 11.1962 -36.5595 0 + vertex 11.7916 -36.1064 -3 + vertex 11.1962 -36.5595 -3 + endloop + endfacet + facet normal -0.461492 0.887144 0 + outer loop + vertex 11.1962 -36.5595 -3 + vertex 10.519 -36.9119 0 + vertex 11.1962 -36.5595 0 + endloop + endfacet + facet normal -0.461492 0.887144 0 + outer loop + vertex 10.519 -36.9119 0 + vertex 11.1962 -36.5595 -3 + vertex 10.519 -36.9119 -3 + endloop + endfacet + facet normal -0.238946 0.971033 0 + outer loop + vertex 10.519 -36.9119 -3 + vertex 9.92719 -37.0575 0 + vertex 10.519 -36.9119 0 + endloop + endfacet + facet normal -0.238946 0.971033 0 + outer loop + vertex 9.92719 -37.0575 0 + vertex 10.519 -36.9119 -3 + vertex 9.92719 -37.0575 -3 + endloop + endfacet + facet normal -0.276943 0.960886 0 + outer loop + vertex 9.92719 -37.0575 -3 + vertex 8.47177 -37.477 0 + vertex 9.92719 -37.0575 0 + endloop + endfacet + facet normal -0.276943 0.960886 0 + outer loop + vertex 8.47177 -37.477 0 + vertex 9.92719 -37.0575 -3 + vertex 8.47177 -37.477 -3 + endloop + endfacet + facet normal -0.302213 0.95324 0 + outer loop + vertex 8.47177 -37.477 -3 + vertex 5.33583 -38.4712 0 + vertex 8.47177 -37.477 0 + endloop + endfacet + facet normal -0.302213 0.95324 0 + outer loop + vertex 5.33583 -38.4712 0 + vertex 8.47177 -37.477 -3 + vertex 5.33583 -38.4712 -3 + endloop + endfacet + facet normal 0.267926 0.96344 -0 + outer loop + vertex 5.33583 -38.4712 -3 + vertex 4.84381 -38.3343 0 + vertex 5.33583 -38.4712 0 + endloop + endfacet + facet normal 0.267926 0.96344 0 + outer loop + vertex 4.84381 -38.3343 0 + vertex 5.33583 -38.4712 -3 + vertex 4.84381 -38.3343 -3 + endloop + endfacet + facet normal 0.979739 0.200279 0 + outer loop + vertex 4.84381 -38.3343 0 + vertex 4.73542 -37.8041 -3 + vertex 4.73542 -37.8041 0 + endloop + endfacet + facet normal 0.979739 0.200279 0 + outer loop + vertex 4.73542 -37.8041 -3 + vertex 4.84381 -38.3343 0 + vertex 4.84381 -38.3343 -3 + endloop + endfacet + facet normal 0.985121 0.171864 0 + outer loop + vertex 4.73542 -37.8041 0 + vertex 4.64415 -37.2809 -3 + vertex 4.64415 -37.2809 0 + endloop + endfacet + facet normal 0.985121 0.171864 0 + outer loop + vertex 4.64415 -37.2809 -3 + vertex 4.73542 -37.8041 0 + vertex 4.73542 -37.8041 -3 + endloop + endfacet + facet normal -0.43 0.902829 0 + outer loop + vertex 4.64415 -37.2809 -3 + vertex 3.43985 -37.8545 0 + vertex 4.64415 -37.2809 0 + endloop + endfacet + facet normal -0.43 0.902829 0 + outer loop + vertex 3.43985 -37.8545 0 + vertex 4.64415 -37.2809 -3 + vertex 3.43985 -37.8545 -3 + endloop + endfacet + facet normal -0.338512 0.940962 0 + outer loop + vertex 3.43985 -37.8545 -3 + vertex 2.31266 -38.26 0 + vertex 3.43985 -37.8545 0 + endloop + endfacet + facet normal -0.338512 0.940962 0 + outer loop + vertex 2.31266 -38.26 0 + vertex 3.43985 -37.8545 -3 + vertex 2.31266 -38.26 -3 + endloop + endfacet + facet normal -0.172368 0.985033 0 + outer loop + vertex 2.31266 -38.26 -3 + vertex 0.962702 -38.4962 0 + vertex 2.31266 -38.26 0 + endloop + endfacet + facet normal -0.172368 0.985033 0 + outer loop + vertex 0.962702 -38.4962 0 + vertex 2.31266 -38.26 -3 + vertex 0.962702 -38.4962 -3 + endloop + endfacet + facet normal -0.0313759 0.999508 0 + outer loop + vertex 0.962702 -38.4962 -3 + vertex -0.366978 -38.538 0 + vertex 0.962702 -38.4962 0 + endloop + endfacet + facet normal -0.0313759 0.999508 0 + outer loop + vertex -0.366978 -38.538 0 + vertex 0.962702 -38.4962 -3 + vertex -0.366978 -38.538 -3 + endloop + endfacet + facet normal 0.16461 0.986359 -0 + outer loop + vertex -0.366978 -38.538 -3 + vertex -1.43333 -38.36 0 + vertex -0.366978 -38.538 0 + endloop + endfacet + facet normal 0.16461 0.986359 0 + outer loop + vertex -1.43333 -38.36 0 + vertex -0.366978 -38.538 -3 + vertex -1.43333 -38.36 -3 + endloop + endfacet + facet normal 0.535641 0.844446 -0 + outer loop + vertex -1.43333 -38.36 -3 + vertex -2.45619 -37.7112 0 + vertex -1.43333 -38.36 0 + endloop + endfacet + facet normal 0.535641 0.844446 0 + outer loop + vertex -2.45619 -37.7112 0 + vertex -1.43333 -38.36 -3 + vertex -2.45619 -37.7112 -3 + endloop + endfacet + facet normal 0.80363 0.595129 0 + outer loop + vertex -2.45619 -37.7112 0 + vertex -3.26834 -36.6145 -3 + vertex -3.26834 -36.6145 0 + endloop + endfacet + facet normal 0.80363 0.595129 0 + outer loop + vertex -3.26834 -36.6145 -3 + vertex -2.45619 -37.7112 0 + vertex -2.45619 -37.7112 -3 + endloop + endfacet + facet normal 0.935783 0.352578 0 + outer loop + vertex -3.26834 -36.6145 0 + vertex -3.80393 -35.193 -3 + vertex -3.80393 -35.193 0 + endloop + endfacet + facet normal 0.935783 0.352578 0 + outer loop + vertex -3.80393 -35.193 -3 + vertex -3.26834 -36.6145 0 + vertex -3.26834 -36.6145 -3 + endloop + endfacet + facet normal 0.992994 0.118162 0 + outer loop + vertex -3.80393 -35.193 0 + vertex -3.99709 -33.5697 -3 + vertex -3.99709 -33.5697 0 + endloop + endfacet + facet normal 0.992994 0.118162 0 + outer loop + vertex -3.99709 -33.5697 -3 + vertex -3.80393 -35.193 0 + vertex -3.80393 -35.193 -3 + endloop + endfacet + facet normal 0.988913 -0.148494 0 + outer loop + vertex -3.99709 -33.5697 0 + vertex -3.7659 -32.0301 -3 + vertex -3.7659 -32.0301 0 + endloop + endfacet + facet normal 0.988913 -0.148494 0 + outer loop + vertex -3.7659 -32.0301 -3 + vertex -3.99709 -33.5697 0 + vertex -3.99709 -33.5697 -3 + endloop + endfacet + facet normal 0.953123 -0.302584 0 + outer loop + vertex -3.7659 -32.0301 0 + vertex -3.14673 -30.0798 -3 + vertex -3.14673 -30.0798 0 + endloop + endfacet + facet normal 0.953123 -0.302584 0 + outer loop + vertex -3.14673 -30.0798 -3 + vertex -3.7659 -32.0301 0 + vertex -3.7659 -32.0301 -3 + endloop + endfacet + facet normal 0.917453 -0.397844 0 + outer loop + vertex -3.14673 -30.0798 0 + vertex -2.25121 -28.0146 -3 + vertex -2.25121 -28.0146 0 + endloop + endfacet + facet normal 0.917453 -0.397844 0 + outer loop + vertex -2.25121 -28.0146 -3 + vertex -3.14673 -30.0798 0 + vertex -3.14673 -30.0798 -3 + endloop + endfacet + facet normal 0.871478 -0.490435 0 + outer loop + vertex -2.25121 -28.0146 0 + vertex -1.19093 -26.1306 -3 + vertex -1.19093 -26.1306 0 + endloop + endfacet + facet normal 0.871478 -0.490435 0 + outer loop + vertex -1.19093 -26.1306 -3 + vertex -2.25121 -28.0146 0 + vertex -2.25121 -28.0146 -3 + endloop + endfacet + facet normal 0.794031 -0.607877 0 + outer loop + vertex -1.19093 -26.1306 0 + vertex 0.168338 -24.355 -3 + vertex 0.168338 -24.355 0 + endloop + endfacet + facet normal 0.794031 -0.607877 0 + outer loop + vertex 0.168338 -24.355 -3 + vertex -1.19093 -26.1306 0 + vertex -1.19093 -26.1306 -3 + endloop + endfacet + facet normal 0.710709 -0.703486 0 + outer loop + vertex 0.168338 -24.355 0 + vertex 1.84511 -22.661 -3 + vertex 1.84511 -22.661 0 + endloop + endfacet + facet normal 0.710709 -0.703486 0 + outer loop + vertex 1.84511 -22.661 -3 + vertex 0.168338 -24.355 0 + vertex 0.168338 -24.355 -3 + endloop + endfacet + facet normal 0.626061 -0.779774 0 + outer loop + vertex 1.84511 -22.661 -3 + vertex 3.72385 -21.1527 0 + vertex 1.84511 -22.661 0 + endloop + endfacet + facet normal 0.626061 -0.779774 0 + outer loop + vertex 3.72385 -21.1527 0 + vertex 1.84511 -22.661 -3 + vertex 3.72385 -21.1527 -3 + endloop + endfacet + facet normal 0.527042 -0.849839 0 + outer loop + vertex 3.72385 -21.1527 -3 + vertex 5.689 -19.9339 0 + vertex 3.72385 -21.1527 0 + endloop + endfacet + facet normal 0.527042 -0.849839 0 + outer loop + vertex 5.689 -19.9339 0 + vertex 3.72385 -21.1527 -3 + vertex 5.689 -19.9339 -3 + endloop + endfacet + facet normal 0.380142 -0.924928 0 + outer loop + vertex 5.689 -19.9339 -3 + vertex 7.06268 -19.3694 0 + vertex 5.689 -19.9339 0 + endloop + endfacet + facet normal 0.380142 -0.924928 0 + outer loop + vertex 7.06268 -19.3694 0 + vertex 5.689 -19.9339 -3 + vertex 7.06268 -19.3694 -3 + endloop + endfacet + facet normal 0.11624 -0.993221 0 + outer loop + vertex 7.06268 -19.3694 -3 + vertex 8.75581 -19.1712 0 + vertex 7.06268 -19.3694 0 + endloop + endfacet + facet normal 0.11624 -0.993221 0 + outer loop + vertex 8.75581 -19.1712 0 + vertex 7.06268 -19.3694 -3 + vertex 8.75581 -19.1712 -3 + endloop + endfacet + facet normal -0.00391511 -0.999992 0 + outer loop + vertex 8.75581 -19.1712 -3 + vertex 10.3474 -19.1774 0 + vertex 8.75581 -19.1712 0 + endloop + endfacet + facet normal -0.00391511 -0.999992 -0 + outer loop + vertex 10.3474 -19.1774 0 + vertex 8.75581 -19.1712 -3 + vertex 10.3474 -19.1774 -3 + endloop + endfacet + facet normal -0.375648 -0.926763 0 + outer loop + vertex 10.3474 -19.1774 -3 + vertex 11.2177 -19.5302 0 + vertex 10.3474 -19.1774 0 + endloop + endfacet + facet normal -0.375648 -0.926763 -0 + outer loop + vertex 11.2177 -19.5302 0 + vertex 10.3474 -19.1774 -3 + vertex 11.2177 -19.5302 -3 + endloop + endfacet + facet normal -0.460444 -0.887689 0 + outer loop + vertex 11.2177 -19.5302 -3 + vertex 11.7785 -19.8211 0 + vertex 11.2177 -19.5302 0 + endloop + endfacet + facet normal -0.460444 -0.887689 -0 + outer loop + vertex 11.7785 -19.8211 0 + vertex 11.2177 -19.5302 -3 + vertex 11.7785 -19.8211 -3 + endloop + endfacet + facet normal 0.340288 -0.940321 0 + outer loop + vertex 11.7785 -19.8211 -3 + vertex 12.058 -19.7199 0 + vertex 11.7785 -19.8211 0 + endloop + endfacet + facet normal 0.340288 -0.940321 0 + outer loop + vertex 12.058 -19.7199 0 + vertex 11.7785 -19.8211 -3 + vertex 12.058 -19.7199 -3 + endloop + endfacet + facet normal 0.919444 -0.393221 0 + outer loop + vertex 12.058 -19.7199 0 + vertex 13.2867 -16.8469 -3 + vertex 13.2867 -16.8469 0 + endloop + endfacet + facet normal 0.919444 -0.393221 0 + outer loop + vertex 13.2867 -16.8469 -3 + vertex 12.058 -19.7199 0 + vertex 12.058 -19.7199 -3 + endloop + endfacet + facet normal 0.948333 -0.317278 0 + outer loop + vertex 13.2867 -16.8469 0 + vertex 14.1246 -14.3424 -3 + vertex 14.1246 -14.3424 0 + endloop + endfacet + facet normal 0.948333 -0.317278 0 + outer loop + vertex 14.1246 -14.3424 -3 + vertex 13.2867 -16.8469 0 + vertex 13.2867 -16.8469 -3 + endloop + endfacet + facet normal 0.170025 0.98544 -0 + outer loop + vertex 14.1246 -14.3424 -3 + vertex 12.858 -14.1239 0 + vertex 14.1246 -14.3424 0 + endloop + endfacet + facet normal 0.170025 0.98544 0 + outer loop + vertex 12.858 -14.1239 0 + vertex 14.1246 -14.3424 -3 + vertex 12.858 -14.1239 -3 + endloop + endfacet + facet normal 0.649749 0.760149 -0 + outer loop + vertex 12.858 -14.1239 -3 + vertex 12.417 -13.7469 0 + vertex 12.858 -14.1239 0 + endloop + endfacet + facet normal 0.649749 0.760149 0 + outer loop + vertex 12.417 -13.7469 0 + vertex 12.858 -14.1239 -3 + vertex 12.417 -13.7469 -3 + endloop + endfacet + facet normal 0.999788 0.0206018 0 + outer loop + vertex 12.417 -13.7469 0 + vertex 12.4073 -13.2773 -3 + vertex 12.4073 -13.2773 0 + endloop + endfacet + facet normal 0.999788 0.0206018 0 + outer loop + vertex 12.4073 -13.2773 -3 + vertex 12.417 -13.7469 0 + vertex 12.417 -13.7469 -3 + endloop + endfacet + facet normal 0.884204 -0.467101 0 + outer loop + vertex 12.4073 -13.2773 0 + vertex 12.6527 -12.8127 -3 + vertex 12.6527 -12.8127 0 + endloop + endfacet + facet normal 0.884204 -0.467101 0 + outer loop + vertex 12.6527 -12.8127 -3 + vertex 12.4073 -13.2773 0 + vertex 12.4073 -13.2773 -3 + endloop + endfacet + facet normal 0.661795 -0.749685 0 + outer loop + vertex 12.6527 -12.8127 -3 + vertex 13.1035 -12.4147 0 + vertex 12.6527 -12.8127 0 + endloop + endfacet + facet normal 0.661795 -0.749685 0 + outer loop + vertex 13.1035 -12.4147 0 + vertex 12.6527 -12.8127 -3 + vertex 13.1035 -12.4147 -3 + endloop + endfacet + facet normal 0.406349 -0.913718 0 + outer loop + vertex 13.1035 -12.4147 -3 + vertex 13.71 -12.1451 0 + vertex 13.1035 -12.4147 0 + endloop + endfacet + facet normal 0.406349 -0.913718 0 + outer loop + vertex 13.71 -12.1451 0 + vertex 13.1035 -12.4147 -3 + vertex 13.71 -12.1451 -3 + endloop + endfacet + facet normal 0.283559 -0.958955 0 + outer loop + vertex 13.71 -12.1451 -3 + vertex 16.7993 -11.2316 0 + vertex 13.71 -12.1451 0 + endloop + endfacet + facet normal 0.283559 -0.958955 0 + outer loop + vertex 16.7993 -11.2316 0 + vertex 13.71 -12.1451 -3 + vertex 16.7993 -11.2316 -3 + endloop + endfacet + facet normal 0.227026 -0.973889 0 + outer loop + vertex 16.7993 -11.2316 -3 + vertex 19.0845 -10.6988 0 + vertex 16.7993 -11.2316 0 + endloop + endfacet + facet normal 0.227026 -0.973889 0 + outer loop + vertex 19.0845 -10.6988 0 + vertex 16.7993 -11.2316 -3 + vertex 19.0845 -10.6988 -3 + endloop + endfacet + facet normal -0.20555 -0.978647 0 + outer loop + vertex 19.0845 -10.6988 -3 + vertex 19.5452 -10.7956 0 + vertex 19.0845 -10.6988 0 + endloop + endfacet + facet normal -0.20555 -0.978647 -0 + outer loop + vertex 19.5452 -10.7956 0 + vertex 19.0845 -10.6988 -3 + vertex 19.5452 -10.7956 -3 + endloop + endfacet + facet normal -0.339851 0.940479 0 + outer loop + vertex 7.70773 -21.5983 -3 + vertex 6.85097 -21.9079 0 + vertex 7.70773 -21.5983 0 + endloop + endfacet + facet normal -0.339851 0.940479 0 + outer loop + vertex 6.85097 -21.9079 0 + vertex 7.70773 -21.5983 -3 + vertex 6.85097 -21.9079 -3 + endloop + endfacet + facet normal -0.514575 0.857445 0 + outer loop + vertex 6.85097 -21.9079 -3 + vertex 5.96068 -22.4422 0 + vertex 6.85097 -21.9079 0 + endloop + endfacet + facet normal -0.514575 0.857445 0 + outer loop + vertex 5.96068 -22.4422 0 + vertex 6.85097 -21.9079 -3 + vertex 5.96068 -22.4422 -3 + endloop + endfacet + facet normal -0.651148 0.758951 0 + outer loop + vertex 5.96068 -22.4422 -3 + vertex 5.07455 -23.2024 0 + vertex 5.96068 -22.4422 0 + endloop + endfacet + facet normal -0.651148 0.758951 0 + outer loop + vertex 5.07455 -23.2024 0 + vertex 5.96068 -22.4422 -3 + vertex 5.07455 -23.2024 -3 + endloop + endfacet + facet normal -0.756285 0.654243 0 + outer loop + vertex 3.84714 -24.6213 -3 + vertex 5.07455 -23.2024 0 + vertex 5.07455 -23.2024 -3 + endloop + endfacet + facet normal -0.756285 0.654243 0 + outer loop + vertex 5.07455 -23.2024 0 + vertex 3.84714 -24.6213 -3 + vertex 3.84714 -24.6213 0 + endloop + endfacet + facet normal -0.833253 0.552891 0 + outer loop + vertex 2.80055 -26.1986 -3 + vertex 3.84714 -24.6213 0 + vertex 3.84714 -24.6213 -3 + endloop + endfacet + facet normal -0.833253 0.552891 0 + outer loop + vertex 3.84714 -24.6213 0 + vertex 2.80055 -26.1986 -3 + vertex 2.80055 -26.1986 0 + endloop + endfacet + facet normal -0.891463 0.453094 0 + outer loop + vertex 1.95873 -27.8549 -3 + vertex 2.80055 -26.1986 0 + vertex 2.80055 -26.1986 -3 + endloop + endfacet + facet normal -0.891463 0.453094 0 + outer loop + vertex 2.80055 -26.1986 0 + vertex 1.95873 -27.8549 -3 + vertex 1.95873 -27.8549 0 + endloop + endfacet + facet normal -0.937776 0.347241 0 + outer loop + vertex 1.3456 -29.5107 -3 + vertex 1.95873 -27.8549 0 + vertex 1.95873 -27.8549 -3 + endloop + endfacet + facet normal -0.937776 0.347241 0 + outer loop + vertex 1.95873 -27.8549 0 + vertex 1.3456 -29.5107 -3 + vertex 1.3456 -29.5107 0 + endloop + endfacet + facet normal -0.97482 0.222992 0 + outer loop + vertex 0.985088 -31.0867 -3 + vertex 1.3456 -29.5107 0 + vertex 1.3456 -29.5107 -3 + endloop + endfacet + facet normal -0.97482 0.222992 0 + outer loop + vertex 1.3456 -29.5107 0 + vertex 0.985088 -31.0867 -3 + vertex 0.985088 -31.0867 0 + endloop + endfacet + facet normal -0.998249 0.0591584 0 + outer loop + vertex 0.901133 -32.5034 -3 + vertex 0.985088 -31.0867 0 + vertex 0.985088 -31.0867 -3 + endloop + endfacet + facet normal -0.998249 0.0591584 0 + outer loop + vertex 0.985088 -31.0867 0 + vertex 0.901133 -32.5034 -3 + vertex 0.901133 -32.5034 0 + endloop + endfacet + facet normal -0.983521 -0.180795 0 + outer loop + vertex 1.11766 -33.6813 -3 + vertex 0.901133 -32.5034 0 + vertex 0.901133 -32.5034 -3 + endloop + endfacet + facet normal -0.983521 -0.180795 0 + outer loop + vertex 0.901133 -32.5034 0 + vertex 1.11766 -33.6813 -3 + vertex 1.11766 -33.6813 0 + endloop + endfacet + facet normal -0.846397 -0.532553 0 + outer loop + vertex 1.65861 -34.5411 -3 + vertex 1.11766 -33.6813 0 + vertex 1.11766 -33.6813 -3 + endloop + endfacet + facet normal -0.846397 -0.532553 0 + outer loop + vertex 1.11766 -33.6813 0 + vertex 1.65861 -34.5411 -3 + vertex 1.65861 -34.5411 0 + endloop + endfacet + facet normal -0.511641 -0.859199 0 + outer loop + vertex 1.65861 -34.5411 -3 + vertex 2.32628 -34.9386 0 + vertex 1.65861 -34.5411 0 + endloop + endfacet + facet normal -0.511641 -0.859199 -0 + outer loop + vertex 2.32628 -34.9386 0 + vertex 1.65861 -34.5411 -3 + vertex 2.32628 -34.9386 -3 + endloop + endfacet + facet normal -0.182531 -0.9832 0 + outer loop + vertex 2.32628 -34.9386 -3 + vertex 3.17687 -35.0966 0 + vertex 2.32628 -34.9386 0 + endloop + endfacet + facet normal -0.182531 -0.9832 -0 + outer loop + vertex 3.17687 -35.0966 0 + vertex 2.32628 -34.9386 -3 + vertex 3.17687 -35.0966 -3 + endloop + endfacet + facet normal 0.0908592 -0.995864 0 + outer loop + vertex 3.17687 -35.0966 -3 + vertex 4.11511 -35.011 0 + vertex 3.17687 -35.0966 0 + endloop + endfacet + facet normal 0.0908592 -0.995864 0 + outer loop + vertex 4.11511 -35.011 0 + vertex 3.17687 -35.0966 -3 + vertex 4.11511 -35.011 -3 + endloop + endfacet + facet normal 0.336892 -0.941543 0 + outer loop + vertex 4.11511 -35.011 -3 + vertex 5.04571 -34.678 0 + vertex 4.11511 -35.011 0 + endloop + endfacet + facet normal 0.336892 -0.941543 0 + outer loop + vertex 5.04571 -34.678 0 + vertex 4.11511 -35.011 -3 + vertex 5.04571 -34.678 -3 + endloop + endfacet + facet normal 0.557528 -0.830158 0 + outer loop + vertex 5.04571 -34.678 -3 + vertex 5.71313 -34.2297 0 + vertex 5.04571 -34.678 0 + endloop + endfacet + facet normal 0.557528 -0.830158 0 + outer loop + vertex 5.71313 -34.2297 0 + vertex 5.04571 -34.678 -3 + vertex 5.71313 -34.2297 -3 + endloop + endfacet + facet normal 0.786383 -0.61774 0 + outer loop + vertex 5.71313 -34.2297 0 + vertex 6.30534 -33.4759 -3 + vertex 6.30534 -33.4759 0 + endloop + endfacet + facet normal 0.786383 -0.61774 0 + outer loop + vertex 6.30534 -33.4759 -3 + vertex 5.71313 -34.2297 0 + vertex 5.71313 -34.2297 -3 + endloop + endfacet + facet normal 0.906895 -0.421357 0 + outer loop + vertex 6.30534 -33.4759 0 + vertex 7.96204 -29.9101 -3 + vertex 7.96204 -29.9101 0 + endloop + endfacet + facet normal 0.906895 -0.421357 0 + outer loop + vertex 7.96204 -29.9101 -3 + vertex 6.30534 -33.4759 0 + vertex 6.30534 -33.4759 -3 + endloop + endfacet + facet normal 0.929235 -0.36949 0 + outer loop + vertex 7.96204 -29.9101 0 + vertex 9.7411 -25.4359 -3 + vertex 9.7411 -25.4359 0 + endloop + endfacet + facet normal 0.929235 -0.36949 0 + outer loop + vertex 9.7411 -25.4359 -3 + vertex 7.96204 -29.9101 0 + vertex 7.96204 -29.9101 -3 + endloop + endfacet + facet normal 0.962546 -0.271117 0 + outer loop + vertex 9.7411 -25.4359 0 + vertex 10.0775 -24.2416 -3 + vertex 10.0775 -24.2416 0 + endloop + endfacet + facet normal 0.962546 -0.271117 0 + outer loop + vertex 10.0775 -24.2416 -3 + vertex 9.7411 -25.4359 0 + vertex 9.7411 -25.4359 -3 + endloop + endfacet + facet normal 0.994463 -0.105087 0 + outer loop + vertex 10.0775 -24.2416 0 + vertex 10.169 -23.3758 -3 + vertex 10.169 -23.3758 0 + endloop + endfacet + facet normal 0.994463 -0.105087 0 + outer loop + vertex 10.169 -23.3758 -3 + vertex 10.0775 -24.2416 0 + vertex 10.0775 -24.2416 -3 + endloop + endfacet + facet normal 0.988121 0.153677 0 + outer loop + vertex 10.169 -23.3758 0 + vertex 10.0454 -22.5812 -3 + vertex 10.0454 -22.5812 0 + endloop + endfacet + facet normal 0.988121 0.153677 0 + outer loop + vertex 10.0454 -22.5812 -3 + vertex 10.169 -23.3758 0 + vertex 10.169 -23.3758 -3 + endloop + endfacet + facet normal 0.857617 0.514289 0 + outer loop + vertex 10.0454 -22.5812 0 + vertex 9.69979 -22.0048 -3 + vertex 9.69979 -22.0048 0 + endloop + endfacet + facet normal 0.857617 0.514289 0 + outer loop + vertex 9.69979 -22.0048 -3 + vertex 10.0454 -22.5812 0 + vertex 10.0454 -22.5812 -3 + endloop + endfacet + facet normal 0.558467 0.829527 -0 + outer loop + vertex 9.69979 -22.0048 -3 + vertex 9.16984 -21.6481 0 + vertex 9.69979 -22.0048 0 + endloop + endfacet + facet normal 0.558467 0.829527 0 + outer loop + vertex 9.16984 -21.6481 0 + vertex 9.69979 -22.0048 -3 + vertex 9.16984 -21.6481 -3 + endloop + endfacet + facet normal 0.196985 0.980407 -0 + outer loop + vertex 9.16984 -21.6481 -3 + vertex 8.49325 -21.5121 0 + vertex 9.16984 -21.6481 0 + endloop + endfacet + facet normal 0.196985 0.980407 0 + outer loop + vertex 8.49325 -21.5121 0 + vertex 9.16984 -21.6481 -3 + vertex 8.49325 -21.5121 -3 + endloop + endfacet + facet normal -0.109065 0.994035 0 + outer loop + vertex 8.49325 -21.5121 -3 + vertex 7.70773 -21.5983 0 + vertex 8.49325 -21.5121 0 + endloop + endfacet + facet normal -0.109065 0.994035 0 + outer loop + vertex 7.70773 -21.5983 0 + vertex 8.49325 -21.5121 -3 + vertex 7.70773 -21.5983 -3 + endloop + endfacet + facet normal -0.270451 -0.962734 0 + outer loop + vertex 28.989 -19.2301 -3 + vertex 29.9429 -19.4981 0 + vertex 28.989 -19.2301 0 + endloop + endfacet + facet normal -0.270451 -0.962734 -0 + outer loop + vertex 29.9429 -19.4981 0 + vertex 28.989 -19.2301 -3 + vertex 29.9429 -19.4981 -3 + endloop + endfacet + facet normal -0.511153 -0.85949 0 + outer loop + vertex 29.9429 -19.4981 -3 + vertex 30.7248 -19.9631 0 + vertex 29.9429 -19.4981 0 + endloop + endfacet + facet normal -0.511153 -0.85949 -0 + outer loop + vertex 30.7248 -19.9631 0 + vertex 29.9429 -19.4981 -3 + vertex 30.7248 -19.9631 -3 + endloop + endfacet + facet normal -0.723919 -0.689885 0 + outer loop + vertex 31.3699 -20.64 -3 + vertex 30.7248 -19.9631 0 + vertex 30.7248 -19.9631 -3 + endloop + endfacet + facet normal -0.723919 -0.689885 0 + outer loop + vertex 30.7248 -19.9631 0 + vertex 31.3699 -20.64 -3 + vertex 31.3699 -20.64 0 + endloop + endfacet + facet normal -0.867187 -0.497983 0 + outer loop + vertex 31.8086 -21.404 -3 + vertex 31.3699 -20.64 0 + vertex 31.3699 -20.64 -3 + endloop + endfacet + facet normal -0.867187 -0.497983 0 + outer loop + vertex 31.3699 -20.64 0 + vertex 31.8086 -21.404 -3 + vertex 31.8086 -21.404 0 + endloop + endfacet + facet normal -0.971458 -0.237212 0 + outer loop + vertex 32.0232 -22.2828 -3 + vertex 31.8086 -21.404 0 + vertex 31.8086 -21.404 -3 + endloop + endfacet + facet normal -0.971458 -0.237212 0 + outer loop + vertex 31.8086 -21.404 0 + vertex 32.0232 -22.2828 -3 + vertex 32.0232 -22.2828 0 + endloop + endfacet + facet normal -0.999998 -0.00210454 0 + outer loop + vertex 32.0255 -23.3848 -3 + vertex 32.0232 -22.2828 0 + vertex 32.0232 -22.2828 -3 + endloop + endfacet + facet normal -0.999998 -0.00210454 0 + outer loop + vertex 32.0232 -22.2828 0 + vertex 32.0255 -23.3848 -3 + vertex 32.0255 -23.3848 0 + endloop + endfacet + facet normal -0.990595 0.136824 0 + outer loop + vertex 31.8275 -24.8188 -3 + vertex 32.0255 -23.3848 0 + vertex 32.0255 -23.3848 -3 + endloop + endfacet + facet normal -0.990595 0.136824 0 + outer loop + vertex 32.0255 -23.3848 0 + vertex 31.8275 -24.8188 -3 + vertex 31.8275 -24.8188 0 + endloop + endfacet + facet normal -0.978641 0.205575 0 + outer loop + vertex 31.4974 -26.3899 -3 + vertex 31.8275 -24.8188 0 + vertex 31.8275 -24.8188 -3 + endloop + endfacet + facet normal -0.978641 0.205575 0 + outer loop + vertex 31.8275 -24.8188 0 + vertex 31.4974 -26.3899 -3 + vertex 31.4974 -26.3899 0 + endloop + endfacet + facet normal -0.869264 0.494348 0 + outer loop + vertex 31.2318 -26.857 -3 + vertex 31.4974 -26.3899 0 + vertex 31.4974 -26.3899 -3 + endloop + endfacet + facet normal -0.869264 0.494348 0 + outer loop + vertex 31.4974 -26.3899 0 + vertex 31.2318 -26.857 -3 + vertex 31.2318 -26.857 0 + endloop + endfacet + facet normal -0.557816 0.829965 0 + outer loop + vertex 31.2318 -26.857 -3 + vertex 30.7817 -27.1595 0 + vertex 31.2318 -26.857 0 + endloop + endfacet + facet normal -0.557816 0.829965 0 + outer loop + vertex 30.7817 -27.1595 0 + vertex 31.2318 -26.857 -3 + vertex 30.7817 -27.1595 -3 + endloop + endfacet + facet normal -0.13929 0.990252 0 + outer loop + vertex 30.7817 -27.1595 -3 + vertex 28.9763 -27.4135 0 + vertex 30.7817 -27.1595 0 + endloop + endfacet + facet normal -0.13929 0.990252 0 + outer loop + vertex 28.9763 -27.4135 0 + vertex 30.7817 -27.1595 -3 + vertex 28.9763 -27.4135 -3 + endloop + endfacet + facet normal -0.00668289 0.999978 0 + outer loop + vertex 28.9763 -27.4135 -3 + vertex 25.3774 -27.4375 0 + vertex 28.9763 -27.4135 0 + endloop + endfacet + facet normal -0.00668289 0.999978 0 + outer loop + vertex 25.3774 -27.4375 0 + vertex 28.9763 -27.4135 -3 + vertex 25.3774 -27.4375 -3 + endloop + endfacet + facet normal -0.00092424 1 0 + outer loop + vertex 25.3774 -27.4375 -3 + vertex 20.1129 -27.4424 0 + vertex 25.3774 -27.4375 0 + endloop + endfacet + facet normal -0.00092424 1 0 + outer loop + vertex 20.1129 -27.4424 0 + vertex 25.3774 -27.4375 -3 + vertex 20.1129 -27.4424 -3 + endloop + endfacet + facet normal -0.945282 0.326255 0 + outer loop + vertex 19.9054 -28.0436 -3 + vertex 20.1129 -27.4424 0 + vertex 20.1129 -27.4424 -3 + endloop + endfacet + facet normal -0.945282 0.326255 0 + outer loop + vertex 20.1129 -27.4424 0 + vertex 19.9054 -28.0436 -3 + vertex 19.9054 -28.0436 0 + endloop + endfacet + facet normal -0.967122 0.254313 0 + outer loop + vertex 19.5138 -29.5327 -3 + vertex 19.9054 -28.0436 0 + vertex 19.9054 -28.0436 -3 + endloop + endfacet + facet normal -0.967122 0.254313 0 + outer loop + vertex 19.9054 -28.0436 0 + vertex 19.5138 -29.5327 -3 + vertex 19.5138 -29.5327 0 + endloop + endfacet + facet normal -0.991046 0.133521 0 + outer loop + vertex 19.3087 -31.0557 -3 + vertex 19.5138 -29.5327 0 + vertex 19.5138 -29.5327 -3 + endloop + endfacet + facet normal -0.991046 0.133521 0 + outer loop + vertex 19.5138 -29.5327 0 + vertex 19.3087 -31.0557 -3 + vertex 19.3087 -31.0557 0 + endloop + endfacet + facet normal -1 8.95066e-05 0 + outer loop + vertex 19.3085 -32.3556 -3 + vertex 19.3087 -31.0557 0 + vertex 19.3087 -31.0557 -3 + endloop + endfacet + facet normal -1 8.95066e-05 0 + outer loop + vertex 19.3087 -31.0557 0 + vertex 19.3085 -32.3556 -3 + vertex 19.3085 -32.3556 0 + endloop + endfacet + facet normal -0.964746 -0.263183 0 + outer loop + vertex 19.5322 -33.1754 -3 + vertex 19.3085 -32.3556 0 + vertex 19.3085 -32.3556 -3 + endloop + endfacet + facet normal -0.964746 -0.263183 0 + outer loop + vertex 19.3085 -32.3556 0 + vertex 19.5322 -33.1754 -3 + vertex 19.5322 -33.1754 0 + endloop + endfacet + facet normal -0.729596 -0.683879 0 + outer loop + vertex 20.0228 -33.6987 -3 + vertex 19.5322 -33.1754 0 + vertex 19.5322 -33.1754 -3 + endloop + endfacet + facet normal -0.729596 -0.683879 0 + outer loop + vertex 19.5322 -33.1754 0 + vertex 20.0228 -33.6987 -3 + vertex 20.0228 -33.6987 0 + endloop + endfacet + facet normal -0.526282 -0.85031 0 + outer loop + vertex 20.0228 -33.6987 -3 + vertex 20.6651 -34.0963 0 + vertex 20.0228 -33.6987 0 + endloop + endfacet + facet normal -0.526282 -0.85031 -0 + outer loop + vertex 20.6651 -34.0963 0 + vertex 20.0228 -33.6987 -3 + vertex 20.6651 -34.0963 -3 + endloop + endfacet + facet normal -0.318074 -0.948066 0 + outer loop + vertex 20.6651 -34.0963 -3 + vertex 21.4183 -34.349 0 + vertex 20.6651 -34.0963 0 + endloop + endfacet + facet normal -0.318074 -0.948066 -0 + outer loop + vertex 21.4183 -34.349 0 + vertex 20.6651 -34.0963 -3 + vertex 21.4183 -34.349 -3 + endloop + endfacet + facet normal -0.107309 -0.994226 0 + outer loop + vertex 21.4183 -34.349 -3 + vertex 22.2417 -34.4379 0 + vertex 21.4183 -34.349 0 + endloop + endfacet + facet normal -0.107309 -0.994226 -0 + outer loop + vertex 22.2417 -34.4379 0 + vertex 21.4183 -34.349 -3 + vertex 22.2417 -34.4379 -3 + endloop + endfacet + facet normal 0.120086 -0.992763 0 + outer loop + vertex 22.2417 -34.4379 -3 + vertex 23.5816 -34.2758 0 + vertex 22.2417 -34.4379 0 + endloop + endfacet + facet normal 0.120086 -0.992763 0 + outer loop + vertex 23.5816 -34.2758 0 + vertex 22.2417 -34.4379 -3 + vertex 23.5816 -34.2758 -3 + endloop + endfacet + facet normal 0.371865 -0.928287 0 + outer loop + vertex 23.5816 -34.2758 -3 + vertex 24.9271 -33.7368 0 + vertex 23.5816 -34.2758 0 + endloop + endfacet + facet normal 0.371865 -0.928287 0 + outer loop + vertex 24.9271 -33.7368 0 + vertex 23.5816 -34.2758 -3 + vertex 24.9271 -33.7368 -3 + endloop + endfacet + facet normal 0.553658 -0.832744 0 + outer loop + vertex 24.9271 -33.7368 -3 + vertex 26.4192 -32.7448 0 + vertex 24.9271 -33.7368 0 + endloop + endfacet + facet normal 0.553658 -0.832744 0 + outer loop + vertex 26.4192 -32.7448 0 + vertex 24.9271 -33.7368 -3 + vertex 26.4192 -32.7448 -3 + endloop + endfacet + facet normal 0.649717 -0.760176 0 + outer loop + vertex 26.4192 -32.7448 -3 + vertex 28.199 -31.2235 0 + vertex 26.4192 -32.7448 0 + endloop + endfacet + facet normal 0.649717 -0.760176 0 + outer loop + vertex 28.199 -31.2235 0 + vertex 26.4192 -32.7448 -3 + vertex 28.199 -31.2235 -3 + endloop + endfacet + facet normal 0.570708 -0.821153 0 + outer loop + vertex 28.199 -31.2235 -3 + vertex 29.2916 -30.4642 0 + vertex 28.199 -31.2235 0 + endloop + endfacet + facet normal 0.570708 -0.821153 0 + outer loop + vertex 29.2916 -30.4642 0 + vertex 28.199 -31.2235 -3 + vertex 29.2916 -30.4642 -3 + endloop + endfacet + facet normal -0.0859885 -0.996296 0 + outer loop + vertex 29.2916 -30.4642 -3 + vertex 29.6885 -30.4984 0 + vertex 29.2916 -30.4642 0 + endloop + endfacet + facet normal -0.0859885 -0.996296 -0 + outer loop + vertex 29.6885 -30.4984 0 + vertex 29.2916 -30.4642 -3 + vertex 29.6885 -30.4984 -3 + endloop + endfacet + facet normal -0.559844 -0.828598 0 + outer loop + vertex 29.6885 -30.4984 -3 + vertex 30.1062 -30.7807 0 + vertex 29.6885 -30.4984 0 + endloop + endfacet + facet normal -0.559844 -0.828598 -0 + outer loop + vertex 30.1062 -30.7807 0 + vertex 29.6885 -30.4984 -3 + vertex 30.1062 -30.7807 -3 + endloop + endfacet + facet normal -0.971403 -0.237438 0 + outer loop + vertex 30.2029 -31.1764 -3 + vertex 30.1062 -30.7807 0 + vertex 30.1062 -30.7807 -3 + endloop + endfacet + facet normal -0.971403 -0.237438 0 + outer loop + vertex 30.1062 -30.7807 0 + vertex 30.2029 -31.1764 -3 + vertex 30.2029 -31.1764 0 + endloop + endfacet + facet normal -0.897428 0.441162 0 + outer loop + vertex 29.8709 -31.8517 -3 + vertex 30.2029 -31.1764 0 + vertex 30.2029 -31.1764 -3 + endloop + endfacet + facet normal -0.897428 0.441162 0 + outer loop + vertex 30.2029 -31.1764 0 + vertex 29.8709 -31.8517 -3 + vertex 29.8709 -31.8517 0 + endloop + endfacet + facet normal -0.750818 0.660509 0 + outer loop + vertex 27.8442 -34.1555 -3 + vertex 29.8709 -31.8517 0 + vertex 29.8709 -31.8517 -3 + endloop + endfacet + facet normal -0.750818 0.660509 0 + outer loop + vertex 29.8709 -31.8517 0 + vertex 27.8442 -34.1555 -3 + vertex 27.8442 -34.1555 0 + endloop + endfacet + facet normal -0.671006 0.741452 0 + outer loop + vertex 27.8442 -34.1555 -3 + vertex 25.9895 -35.834 0 + vertex 27.8442 -34.1555 0 + endloop + endfacet + facet normal -0.671006 0.741452 0 + outer loop + vertex 25.9895 -35.834 0 + vertex 27.8442 -34.1555 -3 + vertex 25.9895 -35.834 -3 + endloop + endfacet + facet normal -0.538751 0.842465 0 + outer loop + vertex 25.9895 -35.834 -3 + vertex 24.0601 -37.0678 0 + vertex 25.9895 -35.834 0 + endloop + endfacet + facet normal -0.538751 0.842465 0 + outer loop + vertex 24.0601 -37.0678 0 + vertex 25.9895 -35.834 -3 + vertex 24.0601 -37.0678 -3 + endloop + endfacet + facet normal -0.416623 0.909079 0 + outer loop + vertex 24.0601 -37.0678 -3 + vertex 21.4079 -38.2833 0 + vertex 24.0601 -37.0678 0 + endloop + endfacet + facet normal -0.416623 0.909079 0 + outer loop + vertex 21.4079 -38.2833 0 + vertex 24.0601 -37.0678 -3 + vertex 21.4079 -38.2833 -3 + endloop + endfacet + facet normal -0.208885 0.97794 0 + outer loop + vertex 21.4079 -38.2833 -3 + vertex 20.3084 -38.5182 0 + vertex 21.4079 -38.2833 0 + endloop + endfacet + facet normal -0.208885 0.97794 0 + outer loop + vertex 20.3084 -38.5182 0 + vertex 21.4079 -38.2833 -3 + vertex 20.3084 -38.5182 -3 + endloop + endfacet + facet normal -0.0552232 0.998474 0 + outer loop + vertex 20.3084 -38.5182 -3 + vertex 19.0956 -38.5852 0 + vertex 20.3084 -38.5182 0 + endloop + endfacet + facet normal -0.0552232 0.998474 0 + outer loop + vertex 19.0956 -38.5852 0 + vertex 20.3084 -38.5182 -3 + vertex 19.0956 -38.5852 -3 + endloop + endfacet + facet normal 0.0949344 0.995484 -0 + outer loop + vertex 19.0956 -38.5852 -3 + vertex 17.8945 -38.4707 0 + vertex 19.0956 -38.5852 0 + endloop + endfacet + facet normal 0.0949344 0.995484 0 + outer loop + vertex 17.8945 -38.4707 0 + vertex 19.0956 -38.5852 -3 + vertex 17.8945 -38.4707 -3 + endloop + endfacet + facet normal 0.357488 0.933918 -0 + outer loop + vertex 17.8945 -38.4707 -3 + vertex 16.8412 -38.0675 0 + vertex 17.8945 -38.4707 0 + endloop + endfacet + facet normal 0.357488 0.933918 0 + outer loop + vertex 16.8412 -38.0675 0 + vertex 17.8945 -38.4707 -3 + vertex 16.8412 -38.0675 -3 + endloop + endfacet + facet normal 0.556683 0.830725 -0 + outer loop + vertex 16.8412 -38.0675 -3 + vertex 15.8953 -37.4336 0 + vertex 16.8412 -38.0675 0 + endloop + endfacet + facet normal 0.556683 0.830725 0 + outer loop + vertex 15.8953 -37.4336 0 + vertex 16.8412 -38.0675 -3 + vertex 15.8953 -37.4336 -3 + endloop + endfacet + facet normal 0.764952 0.644087 0 + outer loop + vertex 15.8953 -37.4336 0 + vertex 15.2376 -36.6526 -3 + vertex 15.2376 -36.6526 0 + endloop + endfacet + facet normal 0.764952 0.644087 0 + outer loop + vertex 15.2376 -36.6526 -3 + vertex 15.8953 -37.4336 0 + vertex 15.8953 -37.4336 -3 + endloop + endfacet + facet normal 0.925772 0.378082 0 + outer loop + vertex 15.2376 -36.6526 0 + vertex 14.8379 -35.6738 -3 + vertex 14.8379 -35.6738 0 + endloop + endfacet + facet normal 0.925772 0.378082 0 + outer loop + vertex 14.8379 -35.6738 -3 + vertex 15.2376 -36.6526 0 + vertex 15.2376 -36.6526 -3 + endloop + endfacet + facet normal 0.990293 0.138993 0 + outer loop + vertex 14.8379 -35.6738 0 + vertex 14.6656 -34.4466 -3 + vertex 14.6656 -34.4466 0 + endloop + endfacet + facet normal 0.990293 0.138993 0 + outer loop + vertex 14.6656 -34.4466 -3 + vertex 14.8379 -35.6738 0 + vertex 14.8379 -35.6738 -3 + endloop + endfacet + facet normal 0.99828 -0.0586187 0 + outer loop + vertex 14.6656 -34.4466 0 + vertex 14.7938 -32.2631 -3 + vertex 14.7938 -32.2631 0 + endloop + endfacet + facet normal 0.99828 -0.0586187 0 + outer loop + vertex 14.7938 -32.2631 -3 + vertex 14.6656 -34.4466 0 + vertex 14.6656 -34.4466 -3 + endloop + endfacet + facet normal 0.96872 -0.248157 0 + outer loop + vertex 14.7938 -32.2631 0 + vertex 15.3794 -29.9771 -3 + vertex 15.3794 -29.9771 0 + endloop + endfacet + facet normal 0.96872 -0.248157 0 + outer loop + vertex 15.3794 -29.9771 -3 + vertex 14.7938 -32.2631 0 + vertex 14.7938 -32.2631 -3 + endloop + endfacet + facet normal 0.915816 -0.401597 0 + outer loop + vertex 15.3794 -29.9771 0 + vertex 16.4055 -27.6373 -3 + vertex 16.4055 -27.6373 0 + endloop + endfacet + facet normal 0.915816 -0.401597 0 + outer loop + vertex 16.4055 -27.6373 -3 + vertex 15.3794 -29.9771 0 + vertex 15.3794 -29.9771 -3 + endloop + endfacet + facet normal 0.850611 -0.525795 0 + outer loop + vertex 16.4055 -27.6373 0 + vertex 17.855 -25.2923 -3 + vertex 17.855 -25.2923 0 + endloop + endfacet + facet normal 0.850611 -0.525795 0 + outer loop + vertex 17.855 -25.2923 -3 + vertex 16.4055 -27.6373 0 + vertex 16.4055 -27.6373 -3 + endloop + endfacet + facet normal 0.787541 -0.616262 0 + outer loop + vertex 17.855 -25.2923 0 + vertex 19.0386 -23.7798 -3 + vertex 19.0386 -23.7798 0 + endloop + endfacet + facet normal 0.787541 -0.616262 0 + outer loop + vertex 19.0386 -23.7798 -3 + vertex 17.855 -25.2923 0 + vertex 17.855 -25.2923 -3 + endloop + endfacet + facet normal 0.719973 -0.694002 0 + outer loop + vertex 19.0386 -23.7798 0 + vertex 20.2954 -22.4759 -3 + vertex 20.2954 -22.4759 0 + endloop + endfacet + facet normal 0.719973 -0.694002 0 + outer loop + vertex 20.2954 -22.4759 -3 + vertex 19.0386 -23.7798 0 + vertex 19.0386 -23.7798 -3 + endloop + endfacet + facet normal 0.636055 -0.771644 0 + outer loop + vertex 20.2954 -22.4759 -3 + vertex 21.6367 -21.3703 0 + vertex 20.2954 -22.4759 0 + endloop + endfacet + facet normal 0.636055 -0.771644 0 + outer loop + vertex 21.6367 -21.3703 0 + vertex 20.2954 -22.4759 -3 + vertex 21.6367 -21.3703 -3 + endloop + endfacet + facet normal 0.538257 -0.842781 0 + outer loop + vertex 21.6367 -21.3703 -3 + vertex 23.0737 -20.4525 0 + vertex 21.6367 -21.3703 0 + endloop + endfacet + facet normal 0.538257 -0.842781 0 + outer loop + vertex 23.0737 -20.4525 0 + vertex 21.6367 -21.3703 -3 + vertex 23.0737 -20.4525 -3 + endloop + endfacet + facet normal 0.404347 -0.914606 0 + outer loop + vertex 23.0737 -20.4525 -3 + vertex 25.4359 -19.4082 0 + vertex 23.0737 -20.4525 0 + endloop + endfacet + facet normal 0.404347 -0.914606 0 + outer loop + vertex 25.4359 -19.4082 0 + vertex 23.0737 -20.4525 -3 + vertex 25.4359 -19.4082 -3 + endloop + endfacet + facet normal 0.182814 -0.983148 0 + outer loop + vertex 25.4359 -19.4082 -3 + vertex 26.5413 -19.2026 0 + vertex 25.4359 -19.4082 0 + endloop + endfacet + facet normal 0.182814 -0.983148 0 + outer loop + vertex 26.5413 -19.2026 0 + vertex 25.4359 -19.4082 -3 + vertex 26.5413 -19.2026 -3 + endloop + endfacet + facet normal 0.0452162 -0.998977 0 + outer loop + vertex 26.5413 -19.2026 -3 + vertex 27.8281 -19.1444 0 + vertex 26.5413 -19.2026 0 + endloop + endfacet + facet normal 0.0452162 -0.998977 0 + outer loop + vertex 27.8281 -19.1444 0 + vertex 26.5413 -19.2026 -3 + vertex 27.8281 -19.1444 -3 + endloop + endfacet + facet normal -0.0736221 -0.997286 0 + outer loop + vertex 27.8281 -19.1444 -3 + vertex 28.989 -19.2301 0 + vertex 27.8281 -19.1444 0 + endloop + endfacet + facet normal -0.0736221 -0.997286 -0 + outer loop + vertex 28.989 -19.2301 0 + vertex 27.8281 -19.1444 -3 + vertex 28.989 -19.2301 -3 + endloop + endfacet + facet normal -0.382628 0.923903 0 + outer loop + vertex 24.8153 -21.9586 -3 + vertex 23.7526 -22.3987 0 + vertex 24.8153 -21.9586 0 + endloop + endfacet + facet normal -0.382628 0.923903 0 + outer loop + vertex 23.7526 -22.3987 0 + vertex 24.8153 -21.9586 -3 + vertex 23.7526 -22.3987 -3 + endloop + endfacet + facet normal -0.656055 0.754713 0 + outer loop + vertex 23.7526 -22.3987 -3 + vertex 22.6861 -23.3258 0 + vertex 23.7526 -22.3987 0 + endloop + endfacet + facet normal -0.656055 0.754713 0 + outer loop + vertex 22.6861 -23.3258 0 + vertex 23.7526 -22.3987 -3 + vertex 22.6861 -23.3258 -3 + endloop + endfacet + facet normal -0.77183 0.635829 0 + outer loop + vertex 21.6183 -24.6221 -3 + vertex 22.6861 -23.3258 0 + vertex 22.6861 -23.3258 -3 + endloop + endfacet + facet normal -0.77183 0.635829 0 + outer loop + vertex 22.6861 -23.3258 0 + vertex 21.6183 -24.6221 -3 + vertex 21.6183 -24.6221 0 + endloop + endfacet + facet normal -0.0699516 -0.99755 0 + outer loop + vertex 21.6183 -24.6221 -3 + vertex 24.4233 -24.8188 0 + vertex 21.6183 -24.6221 0 + endloop + endfacet + facet normal -0.0699516 -0.99755 -0 + outer loop + vertex 24.4233 -24.8188 0 + vertex 21.6183 -24.6221 -3 + vertex 24.4233 -24.8188 -3 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 24.4233 -24.8188 -3 + vertex 27.2283 -24.8188 0 + vertex 24.4233 -24.8188 0 + endloop + endfacet + facet normal 0 -1 -0 + outer loop + vertex 27.2283 -24.8188 0 + vertex 24.4233 -24.8188 -3 + vertex 27.2283 -24.8188 -3 + endloop + endfacet + facet normal 0.986418 -0.164252 0 + outer loop + vertex 27.2283 -24.8188 0 + vertex 27.3613 -24.0204 -3 + vertex 27.3613 -24.0204 0 + endloop + endfacet + facet normal 0.986418 -0.164252 0 + outer loop + vertex 27.3613 -24.0204 -3 + vertex 27.2283 -24.8188 0 + vertex 27.2283 -24.8188 -3 + endloop + endfacet + facet normal 0.999989 -0.00473466 0 + outer loop + vertex 27.3613 -24.0204 0 + vertex 27.3668 -22.8574 -3 + vertex 27.3668 -22.8574 0 + endloop + endfacet + facet normal 0.999989 -0.00473466 0 + outer loop + vertex 27.3668 -22.8574 -3 + vertex 27.3613 -24.0204 0 + vertex 27.3613 -24.0204 -3 + endloop + endfacet + facet normal 0.863473 0.504395 0 + outer loop + vertex 27.3668 -22.8574 0 + vertex 26.9354 -22.1189 -3 + vertex 26.9354 -22.1189 0 + endloop + endfacet + facet normal 0.863473 0.504395 0 + outer loop + vertex 26.9354 -22.1189 -3 + vertex 27.3668 -22.8574 0 + vertex 27.3668 -22.8574 -3 + endloop + endfacet + facet normal 0.334224 0.942494 -0 + outer loop + vertex 26.9354 -22.1189 -3 + vertex 26.0804 -21.8157 0 + vertex 26.9354 -22.1189 0 + endloop + endfacet + facet normal 0.334224 0.942494 0 + outer loop + vertex 26.0804 -21.8157 0 + vertex 26.9354 -22.1189 -3 + vertex 26.0804 -21.8157 -3 + endloop + endfacet + facet normal -0.112261 0.993679 0 + outer loop + vertex 26.0804 -21.8157 -3 + vertex 24.8153 -21.9586 0 + vertex 26.0804 -21.8157 0 + endloop + endfacet + facet normal -0.112261 0.993679 0 + outer loop + vertex 24.8153 -21.9586 0 + vertex 26.0804 -21.8157 -3 + vertex 24.8153 -21.9586 -3 + endloop + endfacet + facet normal -0.0126654 -0.99992 0 + outer loop + vertex -27.1868 -11.3523 -3 + vertex -17.7993 -11.4712 0 + vertex -27.1868 -11.3523 0 + endloop + endfacet + facet normal -0.0126654 -0.99992 -0 + outer loop + vertex -17.7993 -11.4712 0 + vertex -27.1868 -11.3523 -3 + vertex -17.7993 -11.4712 -3 + endloop + endfacet + facet normal -0.303355 -0.952878 0 + outer loop + vertex -17.7993 -11.4712 -3 + vertex -17.4385 -11.5861 0 + vertex -17.7993 -11.4712 0 + endloop + endfacet + facet normal -0.303355 -0.952878 -0 + outer loop + vertex -17.4385 -11.5861 0 + vertex -17.7993 -11.4712 -3 + vertex -17.4385 -11.5861 -3 + endloop + endfacet + facet normal -0.999899 0.0142188 0 + outer loop + vertex -17.4456 -12.0833 -3 + vertex -17.4385 -11.5861 0 + vertex -17.4385 -11.5861 -3 + endloop + endfacet + facet normal -0.999899 0.0142188 0 + outer loop + vertex -17.4385 -11.5861 0 + vertex -17.4456 -12.0833 -3 + vertex -17.4456 -12.0833 0 + endloop + endfacet + facet normal -0.933863 0.35763 0 + outer loop + vertex -19.3785 -17.1305 -3 + vertex -17.4456 -12.0833 0 + vertex -17.4456 -12.0833 -3 + endloop + endfacet + facet normal -0.933863 0.35763 0 + outer loop + vertex -17.4456 -12.0833 0 + vertex -19.3785 -17.1305 -3 + vertex -19.3785 -17.1305 0 + endloop + endfacet + facet normal -0.830148 0.557543 0 + outer loop + vertex -19.683 -17.584 -3 + vertex -19.3785 -17.1305 0 + vertex -19.3785 -17.1305 -3 + endloop + endfacet + facet normal -0.830148 0.557543 0 + outer loop + vertex -19.3785 -17.1305 0 + vertex -19.683 -17.584 -3 + vertex -19.683 -17.584 0 + endloop + endfacet + facet normal -0.617609 0.786485 0 + outer loop + vertex -19.683 -17.584 -3 + vertex -20.1126 -17.9213 0 + vertex -19.683 -17.584 0 + endloop + endfacet + facet normal -0.617609 0.786485 0 + outer loop + vertex -20.1126 -17.9213 0 + vertex -19.683 -17.584 -3 + vertex -20.1126 -17.9213 -3 + endloop + endfacet + facet normal -0.353642 0.935381 0 + outer loop + vertex -20.1126 -17.9213 -3 + vertex -20.6062 -18.108 0 + vertex -20.1126 -17.9213 0 + endloop + endfacet + facet normal -0.353642 0.935381 0 + outer loop + vertex -20.6062 -18.108 0 + vertex -20.1126 -17.9213 -3 + vertex -20.6062 -18.108 -3 + endloop + endfacet + facet normal -0.00259595 0.999997 0 + outer loop + vertex -20.6062 -18.108 -3 + vertex -21.1029 -18.1093 0 + vertex -20.6062 -18.108 0 + endloop + endfacet + facet normal -0.00259595 0.999997 0 + outer loop + vertex -21.1029 -18.1093 0 + vertex -20.6062 -18.108 -3 + vertex -21.1029 -18.1093 -3 + endloop + endfacet + facet normal 0.306009 0.952029 -0 + outer loop + vertex -21.1029 -18.1093 -3 + vertex -21.3898 -18.0171 0 + vertex -21.1029 -18.1093 0 + endloop + endfacet + facet normal 0.306009 0.952029 0 + outer loop + vertex -21.3898 -18.0171 0 + vertex -21.1029 -18.1093 -3 + vertex -21.3898 -18.0171 -3 + endloop + endfacet + facet normal 0.820593 0.571513 0 + outer loop + vertex -21.3898 -18.0171 0 + vertex -21.538 -17.8042 -3 + vertex -21.538 -17.8042 0 + endloop + endfacet + facet normal 0.820593 0.571513 0 + outer loop + vertex -21.538 -17.8042 -3 + vertex -21.3898 -18.0171 0 + vertex -21.3898 -18.0171 -3 + endloop + endfacet + facet normal 0.999415 0.0341969 0 + outer loop + vertex -21.538 -17.8042 0 + vertex -21.5846 -16.4428 -3 + vertex -21.5846 -16.4428 0 + endloop + endfacet + facet normal 0.999415 0.0341969 0 + outer loop + vertex -21.5846 -16.4428 -3 + vertex -21.538 -17.8042 0 + vertex -21.538 -17.8042 -3 + endloop + endfacet + facet normal 0.999208 0.039804 0 + outer loop + vertex -21.5846 -16.4428 0 + vertex -21.6401 -15.0493 -3 + vertex -21.6401 -15.0493 0 + endloop + endfacet + facet normal 0.999208 0.039804 0 + outer loop + vertex -21.6401 -15.0493 -3 + vertex -21.5846 -16.4428 0 + vertex -21.5846 -16.4428 -3 + endloop + endfacet + facet normal 0.85074 0.525587 0 + outer loop + vertex -21.6401 -15.0493 0 + vertex -21.8106 -14.7733 -3 + vertex -21.8106 -14.7733 0 + endloop + endfacet + facet normal 0.85074 0.525587 0 + outer loop + vertex -21.8106 -14.7733 -3 + vertex -21.6401 -15.0493 0 + vertex -21.6401 -15.0493 -3 + endloop + endfacet + facet normal 0.546243 0.837626 -0 + outer loop + vertex -21.8106 -14.7733 -3 + vertex -22.1413 -14.5577 0 + vertex -21.8106 -14.7733 0 + endloop + endfacet + facet normal 0.546243 0.837626 0 + outer loop + vertex -22.1413 -14.5577 0 + vertex -21.8106 -14.7733 -3 + vertex -22.1413 -14.5577 -3 + endloop + endfacet + facet normal 0.21941 0.975633 -0 + outer loop + vertex -22.1413 -14.5577 -3 + vertex -23.3419 -14.2877 0 + vertex -22.1413 -14.5577 0 + endloop + endfacet + facet normal 0.21941 0.975633 0 + outer loop + vertex -23.3419 -14.2877 0 + vertex -22.1413 -14.5577 -3 + vertex -23.3419 -14.2877 -3 + endloop + endfacet + facet normal 0.0439983 0.999032 -0 + outer loop + vertex -23.3419 -14.2877 -3 + vertex -26.1195 -14.1654 0 + vertex -23.3419 -14.2877 0 + endloop + endfacet + facet normal 0.0439983 0.999032 0 + outer loop + vertex -26.1195 -14.1654 0 + vertex -23.3419 -14.2877 -3 + vertex -26.1195 -14.1654 -3 + endloop + endfacet + facet normal -0.00734919 0.999973 0 + outer loop + vertex -26.1195 -14.1654 -3 + vertex -29.5608 -14.1906 0 + vertex -26.1195 -14.1654 0 + endloop + endfacet + facet normal -0.00734919 0.999973 0 + outer loop + vertex -29.5608 -14.1906 0 + vertex -26.1195 -14.1654 -3 + vertex -29.5608 -14.1906 -3 + endloop + endfacet + facet normal -0.196359 0.980532 0 + outer loop + vertex -29.5608 -14.1906 -3 + vertex -30.2116 -14.321 0 + vertex -29.5608 -14.1906 0 + endloop + endfacet + facet normal -0.196359 0.980532 0 + outer loop + vertex -30.2116 -14.321 0 + vertex -29.5608 -14.1906 -3 + vertex -30.2116 -14.321 -3 + endloop + endfacet + facet normal -0.792981 0.609246 0 + outer loop + vertex -30.3887 -14.5514 -3 + vertex -30.2116 -14.321 0 + vertex -30.2116 -14.321 -3 + endloop + endfacet + facet normal -0.792981 0.609246 0 + outer loop + vertex -30.2116 -14.321 0 + vertex -30.3887 -14.5514 -3 + vertex -30.3887 -14.5514 0 + endloop + endfacet + facet normal -0.912409 0.409279 0 + outer loop + vertex -30.8809 -15.6487 -3 + vertex -30.3887 -14.5514 0 + vertex -30.3887 -14.5514 -3 + endloop + endfacet + facet normal -0.912409 0.409279 0 + outer loop + vertex -30.3887 -14.5514 0 + vertex -30.8809 -15.6487 -3 + vertex -30.8809 -15.6487 0 + endloop + endfacet + facet normal -0.91465 0.404247 0 + outer loop + vertex -32.1593 -18.5412 -3 + vertex -30.8809 -15.6487 0 + vertex -30.8809 -15.6487 -3 + endloop + endfacet + facet normal -0.91465 0.404247 0 + outer loop + vertex -30.8809 -15.6487 0 + vertex -32.1593 -18.5412 -3 + vertex -32.1593 -18.5412 0 + endloop + endfacet + facet normal -0.929897 0.36782 0 + outer loop + vertex -33.3019 -21.4299 -3 + vertex -32.1593 -18.5412 0 + vertex -32.1593 -18.5412 -3 + endloop + endfacet + facet normal -0.929897 0.36782 0 + outer loop + vertex -32.1593 -18.5412 0 + vertex -33.3019 -21.4299 -3 + vertex -33.3019 -21.4299 0 + endloop + endfacet + facet normal -0.949218 0.314618 0 + outer loop + vertex -33.5147 -22.0719 -3 + vertex -33.3019 -21.4299 0 + vertex -33.3019 -21.4299 -3 + endloop + endfacet + facet normal -0.949218 0.314618 0 + outer loop + vertex -33.3019 -21.4299 0 + vertex -33.5147 -22.0719 -3 + vertex -33.5147 -22.0719 0 + endloop + endfacet + facet normal -0.877443 -0.47968 0 + outer loop + vertex -33.3295 -22.4108 -3 + vertex -33.5147 -22.0719 0 + vertex -33.5147 -22.0719 -3 + endloop + endfacet + facet normal -0.877443 -0.47968 0 + outer loop + vertex -33.5147 -22.0719 0 + vertex -33.3295 -22.4108 -3 + vertex -33.3295 -22.4108 0 + endloop + endfacet + facet normal -0.175573 -0.984466 0 + outer loop + vertex -33.3295 -22.4108 -3 + vertex -32.5249 -22.5543 0 + vertex -33.3295 -22.4108 0 + endloop + endfacet + facet normal -0.175573 -0.984466 -0 + outer loop + vertex -32.5249 -22.5543 0 + vertex -33.3295 -22.4108 -3 + vertex -32.5249 -22.5543 -3 + endloop + endfacet + facet normal -0.0340039 -0.999422 0 + outer loop + vertex -32.5249 -22.5543 -3 + vertex -30.8797 -22.6102 0 + vertex -32.5249 -22.5543 0 + endloop + endfacet + facet normal -0.0340039 -0.999422 -0 + outer loop + vertex -30.8797 -22.6102 0 + vertex -32.5249 -22.5543 -3 + vertex -30.8797 -22.6102 -3 + endloop + endfacet + facet normal 0.0362533 -0.999343 0 + outer loop + vertex -30.8797 -22.6102 -3 + vertex -28.6031 -22.5277 0 + vertex -30.8797 -22.6102 0 + endloop + endfacet + facet normal 0.0362533 -0.999343 0 + outer loop + vertex -28.6031 -22.5277 0 + vertex -30.8797 -22.6102 -3 + vertex -28.6031 -22.5277 -3 + endloop + endfacet + facet normal 0.242378 -0.970182 0 + outer loop + vertex -28.6031 -22.5277 -3 + vertex -26.9351 -22.1109 0 + vertex -28.6031 -22.5277 0 + endloop + endfacet + facet normal 0.242378 -0.970182 0 + outer loop + vertex -26.9351 -22.1109 0 + vertex -28.6031 -22.5277 -3 + vertex -26.9351 -22.1109 -3 + endloop + endfacet + facet normal 0.555939 -0.831223 0 + outer loop + vertex -26.9351 -22.1109 -3 + vertex -25.7001 -21.2849 0 + vertex -26.9351 -22.1109 0 + endloop + endfacet + facet normal 0.555939 -0.831223 0 + outer loop + vertex -25.7001 -21.2849 0 + vertex -26.9351 -22.1109 -3 + vertex -25.7001 -21.2849 -3 + endloop + endfacet + facet normal 0.801538 -0.597944 0 + outer loop + vertex -25.7001 -21.2849 0 + vertex -24.7225 -19.9745 -3 + vertex -24.7225 -19.9745 0 + endloop + endfacet + facet normal 0.801538 -0.597944 0 + outer loop + vertex -24.7225 -19.9745 -3 + vertex -25.7001 -21.2849 0 + vertex -25.7001 -21.2849 -3 + endloop + endfacet + facet normal 0.817601 -0.575785 0 + outer loop + vertex -24.7225 -19.9745 0 + vertex -24.1111 -19.1062 -3 + vertex -24.1111 -19.1062 0 + endloop + endfacet + facet normal 0.817601 -0.575785 0 + outer loop + vertex -24.1111 -19.1062 -3 + vertex -24.7225 -19.9745 0 + vertex -24.7225 -19.9745 -3 + endloop + endfacet + facet normal 0.293726 -0.95589 0 + outer loop + vertex -24.1111 -19.1062 -3 + vertex -23.4908 -18.9156 0 + vertex -24.1111 -19.1062 0 + endloop + endfacet + facet normal 0.293726 -0.95589 0 + outer loop + vertex -23.4908 -18.9156 0 + vertex -24.1111 -19.1062 -3 + vertex -23.4908 -18.9156 -3 + endloop + endfacet + facet normal -0.145773 -0.989318 0 + outer loop + vertex -23.4908 -18.9156 -3 + vertex -22.8641 -19.008 0 + vertex -23.4908 -18.9156 0 + endloop + endfacet + facet normal -0.145773 -0.989318 -0 + outer loop + vertex -22.8641 -19.008 0 + vertex -23.4908 -18.9156 -3 + vertex -22.8641 -19.008 -3 + endloop + endfacet + facet normal -0.802531 -0.59661 0 + outer loop + vertex -22.6057 -19.3555 -3 + vertex -22.8641 -19.008 0 + vertex -22.8641 -19.008 -3 + endloop + endfacet + facet normal -0.802531 -0.59661 0 + outer loop + vertex -22.8641 -19.008 0 + vertex -22.6057 -19.3555 -3 + vertex -22.6057 -19.3555 0 + endloop + endfacet + facet normal -0.991425 0.130676 0 + outer loop + vertex -22.6991 -20.0641 -3 + vertex -22.6057 -19.3555 0 + vertex -22.6057 -19.3555 -3 + endloop + endfacet + facet normal -0.991425 0.130676 0 + outer loop + vertex -22.6057 -19.3555 0 + vertex -22.6991 -20.0641 -3 + vertex -22.6991 -20.0641 0 + endloop + endfacet + facet normal -0.939482 0.342598 0 + outer loop + vertex -23.1278 -21.2395 -3 + vertex -22.6991 -20.0641 0 + vertex -22.6991 -20.0641 -3 + endloop + endfacet + facet normal -0.939482 0.342598 0 + outer loop + vertex -22.6991 -20.0641 0 + vertex -23.1278 -21.2395 -3 + vertex -23.1278 -21.2395 0 + endloop + endfacet + facet normal -0.926121 0.377226 0 + outer loop + vertex -24.4076 -24.3815 -3 + vertex -23.1278 -21.2395 0 + vertex -23.1278 -21.2395 -3 + endloop + endfacet + facet normal -0.926121 0.377226 0 + outer loop + vertex -23.1278 -21.2395 0 + vertex -24.4076 -24.3815 -3 + vertex -24.4076 -24.3815 0 + endloop + endfacet + facet normal -0.921607 0.388125 0 + outer loop + vertex -25.4741 -26.9141 -3 + vertex -24.4076 -24.3815 0 + vertex -24.4076 -24.3815 -3 + endloop + endfacet + facet normal -0.921607 0.388125 0 + outer loop + vertex -24.4076 -24.3815 0 + vertex -25.4741 -26.9141 -3 + vertex -25.4741 -26.9141 0 + endloop + endfacet + facet normal -0.886525 0.462682 0 + outer loop + vertex -26.2338 -28.3696 -3 + vertex -25.4741 -26.9141 0 + vertex -25.4741 -26.9141 -3 + endloop + endfacet + facet normal -0.886525 0.462682 0 + outer loop + vertex -25.4741 -26.9141 0 + vertex -26.2338 -28.3696 -3 + vertex -26.2338 -28.3696 0 + endloop + endfacet + facet normal -0.719187 0.694816 0 + outer loop + vertex -26.8752 -29.0336 -3 + vertex -26.2338 -28.3696 0 + vertex -26.2338 -28.3696 -3 + endloop + endfacet + facet normal -0.719187 0.694816 0 + outer loop + vertex -26.2338 -28.3696 0 + vertex -26.8752 -29.0336 -3 + vertex -26.8752 -29.0336 0 + endloop + endfacet + facet normal -0.216473 0.976289 0 + outer loop + vertex -26.8752 -29.0336 -3 + vertex -27.5872 -29.1914 0 + vertex -26.8752 -29.0336 0 + endloop + endfacet + facet normal -0.216473 0.976289 0 + outer loop + vertex -27.5872 -29.1914 0 + vertex -26.8752 -29.0336 -3 + vertex -27.5872 -29.1914 -3 + endloop + endfacet + facet normal 0.155401 0.987851 -0 + outer loop + vertex -27.5872 -29.1914 -3 + vertex -28.1878 -29.097 0 + vertex -27.5872 -29.1914 0 + endloop + endfacet + facet normal 0.155401 0.987851 0 + outer loop + vertex -28.1878 -29.097 0 + vertex -27.5872 -29.1914 -3 + vertex -28.1878 -29.097 -3 + endloop + endfacet + facet normal 0.99998 -0.00638056 0 + outer loop + vertex -28.1878 -29.097 0 + vertex -28.1838 -28.4809 -3 + vertex -28.1838 -28.4809 0 + endloop + endfacet + facet normal 0.99998 -0.00638056 0 + outer loop + vertex -28.1838 -28.4809 -3 + vertex -28.1878 -29.097 0 + vertex -28.1878 -29.097 -3 + endloop + endfacet + facet normal 0.992864 -0.119255 0 + outer loop + vertex -28.1838 -28.4809 0 + vertex -27.9105 -26.2055 -3 + vertex -27.9105 -26.2055 0 + endloop + endfacet + facet normal 0.992864 -0.119255 0 + outer loop + vertex -27.9105 -26.2055 -3 + vertex -28.1838 -28.4809 0 + vertex -28.1838 -28.4809 -3 + endloop + endfacet + facet normal 0.858031 0.513598 0 + outer loop + vertex -27.9105 -26.2055 0 + vertex -28.1036 -25.8829 -3 + vertex -28.1036 -25.8829 0 + endloop + endfacet + facet normal 0.858031 0.513598 0 + outer loop + vertex -28.1036 -25.8829 -3 + vertex -27.9105 -26.2055 0 + vertex -27.9105 -26.2055 -3 + endloop + endfacet + facet normal 0.343726 0.93907 -0 + outer loop + vertex -28.1036 -25.8829 -3 + vertex -28.5713 -25.7117 0 + vertex -28.1036 -25.8829 0 + endloop + endfacet + facet normal 0.343726 0.93907 0 + outer loop + vertex -28.5713 -25.7117 0 + vertex -28.1036 -25.8829 -3 + vertex -28.5713 -25.7117 -3 + endloop + endfacet + facet normal 0.0659122 0.997825 -0 + outer loop + vertex -28.5713 -25.7117 -3 + vertex -32.142 -25.4759 0 + vertex -28.5713 -25.7117 0 + endloop + endfacet + facet normal 0.0659122 0.997825 0 + outer loop + vertex -32.142 -25.4759 0 + vertex -28.5713 -25.7117 -3 + vertex -32.142 -25.4759 -3 + endloop + endfacet + facet normal 0.000432103 1 -0 + outer loop + vertex -32.142 -25.4759 -3 + vertex -34.9626 -25.4747 0 + vertex -32.142 -25.4759 0 + endloop + endfacet + facet normal 0.000432103 1 0 + outer loop + vertex -34.9626 -25.4747 0 + vertex -32.142 -25.4759 -3 + vertex -34.9626 -25.4747 -3 + endloop + endfacet + facet normal -0.910935 0.41255 0 + outer loop + vertex -35.4824 -26.6225 -3 + vertex -34.9626 -25.4747 0 + vertex -34.9626 -25.4747 -3 + endloop + endfacet + facet normal -0.910935 0.41255 0 + outer loop + vertex -34.9626 -25.4747 0 + vertex -35.4824 -26.6225 -3 + vertex -35.4824 -26.6225 0 + endloop + endfacet + facet normal -0.92531 0.379212 0 + outer loop + vertex -38.7331 -34.5543 -3 + vertex -35.4824 -26.6225 0 + vertex -35.4824 -26.6225 -3 + endloop + endfacet + facet normal -0.92531 0.379212 0 + outer loop + vertex -35.4824 -26.6225 0 + vertex -38.7331 -34.5543 -3 + vertex -38.7331 -34.5543 0 + endloop + endfacet + facet normal -0.798774 -0.601632 0 + outer loop + vertex -38.4261 -34.9619 -3 + vertex -38.7331 -34.5543 0 + vertex -38.7331 -34.5543 -3 + endloop + endfacet + facet normal -0.798774 -0.601632 0 + outer loop + vertex -38.7331 -34.5543 0 + vertex -38.4261 -34.9619 -3 + vertex -38.4261 -34.9619 0 + endloop + endfacet + facet normal -0.0360382 -0.99935 0 + outer loop + vertex -38.4261 -34.9619 -3 + vertex -35.0529 -35.0835 0 + vertex -38.4261 -34.9619 0 + endloop + endfacet + facet normal -0.0360382 -0.99935 -0 + outer loop + vertex -35.0529 -35.0835 0 + vertex -38.4261 -34.9619 -3 + vertex -35.0529 -35.0835 -3 + endloop + endfacet + facet normal 0.0608671 -0.998146 0 + outer loop + vertex -35.0529 -35.0835 -3 + vertex -31.3644 -34.8586 0 + vertex -35.0529 -35.0835 0 + endloop + endfacet + facet normal 0.0608671 -0.998146 0 + outer loop + vertex -31.3644 -34.8586 0 + vertex -35.0529 -35.0835 -3 + vertex -31.3644 -34.8586 -3 + endloop + endfacet + facet normal 0.33651 -0.94168 0 + outer loop + vertex -31.3644 -34.8586 -3 + vertex -30.2578 -34.4631 0 + vertex -31.3644 -34.8586 0 + endloop + endfacet + facet normal 0.33651 -0.94168 0 + outer loop + vertex -30.2578 -34.4631 0 + vertex -31.3644 -34.8586 -3 + vertex -30.2578 -34.4631 -3 + endloop + endfacet + facet normal 0.467106 -0.884201 0 + outer loop + vertex -30.2578 -34.4631 -3 + vertex -29.0969 -33.8499 0 + vertex -30.2578 -34.4631 0 + endloop + endfacet + facet normal 0.467106 -0.884201 0 + outer loop + vertex -29.0969 -33.8499 0 + vertex -30.2578 -34.4631 -3 + vertex -29.0969 -33.8499 -3 + endloop + endfacet + facet normal 0.610499 -0.792017 0 + outer loop + vertex -29.0969 -33.8499 -3 + vertex -26.8283 -32.1012 0 + vertex -29.0969 -33.8499 0 + endloop + endfacet + facet normal 0.610499 -0.792017 0 + outer loop + vertex -26.8283 -32.1012 0 + vertex -29.0969 -33.8499 -3 + vertex -26.8283 -32.1012 -3 + endloop + endfacet + facet normal 0.674561 -0.738219 0 + outer loop + vertex -26.8283 -32.1012 -3 + vertex -24.8569 -30.2998 0 + vertex -26.8283 -32.1012 0 + endloop + endfacet + facet normal 0.674561 -0.738219 0 + outer loop + vertex -24.8569 -30.2998 0 + vertex -26.8283 -32.1012 -3 + vertex -24.8569 -30.2998 -3 + endloop + endfacet + facet normal 0.349743 -0.936846 0 + outer loop + vertex -24.8569 -30.2998 -3 + vertex -24.4667 -30.1541 0 + vertex -24.8569 -30.2998 0 + endloop + endfacet + facet normal 0.349743 -0.936846 0 + outer loop + vertex -24.4667 -30.1541 0 + vertex -24.8569 -30.2998 -3 + vertex -24.4667 -30.1541 -3 + endloop + endfacet + facet normal -0.235678 -0.971831 0 + outer loop + vertex -24.4667 -30.1541 -3 + vertex -24.0819 -30.2475 0 + vertex -24.4667 -30.1541 0 + endloop + endfacet + facet normal -0.235678 -0.971831 -0 + outer loop + vertex -24.0819 -30.2475 0 + vertex -24.4667 -30.1541 -3 + vertex -24.0819 -30.2475 -3 + endloop + endfacet + facet normal -0.453986 -0.891009 0 + outer loop + vertex -24.0819 -30.2475 -3 + vertex -23.655 -30.4649 0 + vertex -24.0819 -30.2475 0 + endloop + endfacet + facet normal -0.453986 -0.891009 -0 + outer loop + vertex -23.655 -30.4649 0 + vertex -24.0819 -30.2475 -3 + vertex -23.655 -30.4649 -3 + endloop + endfacet + facet normal -0.79441 -0.607382 0 + outer loop + vertex -23.4462 -30.738 -3 + vertex -23.655 -30.4649 0 + vertex -23.655 -30.4649 -3 + endloop + endfacet + facet normal -0.79441 -0.607382 0 + outer loop + vertex -23.655 -30.4649 0 + vertex -23.4462 -30.738 -3 + vertex -23.4462 -30.738 0 + endloop + endfacet + facet normal -0.917968 0.396655 0 + outer loop + vertex -23.8149 -31.5911 -3 + vertex -23.4462 -30.738 0 + vertex -23.4462 -30.738 -3 + endloop + endfacet + facet normal -0.917968 0.396655 0 + outer loop + vertex -23.4462 -30.738 0 + vertex -23.8149 -31.5911 -3 + vertex -23.8149 -31.5911 0 + endloop + endfacet + facet normal -0.860785 0.508968 0 + outer loop + vertex -24.7956 -33.2498 -3 + vertex -23.8149 -31.5911 0 + vertex -23.8149 -31.5911 -3 + endloop + endfacet + facet normal -0.860785 0.508968 0 + outer loop + vertex -23.8149 -31.5911 0 + vertex -24.7956 -33.2498 -3 + vertex -24.7956 -33.2498 0 + endloop + endfacet + facet normal -0.825216 0.564817 0 + outer loop + vertex -27.2791 -36.8782 -3 + vertex -24.7956 -33.2498 0 + vertex -24.7956 -33.2498 -3 + endloop + endfacet + facet normal -0.825216 0.564817 0 + outer loop + vertex -24.7956 -33.2498 0 + vertex -27.2791 -36.8782 -3 + vertex -27.2791 -36.8782 0 + endloop + endfacet + facet normal -0.788011 0.615661 0 + outer loop + vertex -28.2835 -38.1638 -3 + vertex -27.2791 -36.8782 0 + vertex -27.2791 -36.8782 -3 + endloop + endfacet + facet normal -0.788011 0.615661 0 + outer loop + vertex -27.2791 -36.8782 0 + vertex -28.2835 -38.1638 -3 + vertex -28.2835 -38.1638 0 + endloop + endfacet + facet normal 0.0033546 0.999994 -0 + outer loop + vertex -28.2835 -38.1638 -3 + vertex -37.632 -38.1325 0 + vertex -28.2835 -38.1638 0 + endloop + endfacet + facet normal 0.0033546 0.999994 0 + outer loop + vertex -37.632 -38.1325 0 + vertex -28.2835 -38.1638 -3 + vertex -37.632 -38.1325 -3 + endloop + endfacet + facet normal 0.018075 0.999837 -0 + outer loop + vertex -37.632 -38.1325 -3 + vertex -47.4646 -37.9547 0 + vertex -37.632 -38.1325 0 + endloop + endfacet + facet normal 0.018075 0.999837 0 + outer loop + vertex -47.4646 -37.9547 0 + vertex -37.632 -38.1325 -3 + vertex -47.4646 -37.9547 -3 + endloop + endfacet + facet normal 0.462743 0.886493 -0 + outer loop + vertex -47.4646 -37.9547 -3 + vertex -47.8161 -37.7712 0 + vertex -47.4646 -37.9547 0 + endloop + endfacet + facet normal 0.462743 0.886493 0 + outer loop + vertex -47.8161 -37.7712 0 + vertex -47.4646 -37.9547 -3 + vertex -47.8161 -37.7712 -3 + endloop + endfacet + facet normal 0.836367 0.54817 0 + outer loop + vertex -47.8161 -37.7712 0 + vertex -47.9875 -37.5097 -3 + vertex -47.9875 -37.5097 0 + endloop + endfacet + facet normal 0.836367 0.54817 0 + outer loop + vertex -47.9875 -37.5097 -3 + vertex -47.8161 -37.7712 0 + vertex -47.8161 -37.7712 -3 + endloop + endfacet + facet normal 0.980441 -0.196811 0 + outer loop + vertex -47.9875 -37.5097 0 + vertex -47.8577 -36.863 -3 + vertex -47.8577 -36.863 0 + endloop + endfacet + facet normal 0.980441 -0.196811 0 + outer loop + vertex -47.8577 -36.863 -3 + vertex -47.9875 -37.5097 0 + vertex -47.9875 -37.5097 -3 + endloop + endfacet + facet normal 0.695658 -0.718373 0 + outer loop + vertex -47.8577 -36.863 -3 + vertex -47.2102 -36.2359 0 + vertex -47.8577 -36.863 0 + endloop + endfacet + facet normal 0.695658 -0.718373 0 + outer loop + vertex -47.2102 -36.2359 0 + vertex -47.8577 -36.863 -3 + vertex -47.2102 -36.2359 -3 + endloop + endfacet + facet normal 0.350904 -0.936412 0 + outer loop + vertex -47.2102 -36.2359 -3 + vertex -46.1801 -35.8499 0 + vertex -47.2102 -36.2359 0 + endloop + endfacet + facet normal 0.350904 -0.936412 0 + outer loop + vertex -46.1801 -35.8499 0 + vertex -47.2102 -36.2359 -3 + vertex -46.1801 -35.8499 -3 + endloop + endfacet + facet normal 0.289535 -0.957168 0 + outer loop + vertex -46.1801 -35.8499 -3 + vertex -45.0296 -35.5019 0 + vertex -46.1801 -35.8499 0 + endloop + endfacet + facet normal 0.289535 -0.957168 0 + outer loop + vertex -45.0296 -35.5019 0 + vertex -46.1801 -35.8499 -3 + vertex -45.0296 -35.5019 -3 + endloop + endfacet + facet normal 0.646662 -0.762777 0 + outer loop + vertex -45.0296 -35.5019 -3 + vertex -44.1198 -34.7306 0 + vertex -45.0296 -35.5019 0 + endloop + endfacet + facet normal 0.646662 -0.762777 0 + outer loop + vertex -44.1198 -34.7306 0 + vertex -45.0296 -35.5019 -3 + vertex -44.1198 -34.7306 -3 + endloop + endfacet + facet normal 0.856952 -0.515395 0 + outer loop + vertex -44.1198 -34.7306 0 + vertex -43.2543 -33.2915 -3 + vertex -43.2543 -33.2915 0 + endloop + endfacet + facet normal 0.856952 -0.515395 0 + outer loop + vertex -43.2543 -33.2915 -3 + vertex -44.1198 -34.7306 0 + vertex -44.1198 -34.7306 -3 + endloop + endfacet + facet normal 0.917761 -0.397133 0 + outer loop + vertex -43.2543 -33.2915 0 + vertex -42.237 -30.9405 -3 + vertex -42.237 -30.9405 0 + endloop + endfacet + facet normal 0.917761 -0.397133 0 + outer loop + vertex -42.237 -30.9405 -3 + vertex -43.2543 -33.2915 0 + vertex -43.2543 -33.2915 -3 + endloop + endfacet + facet normal 0.919921 -0.392104 0 + outer loop + vertex -42.237 -30.9405 0 + vertex -39.9072 -25.4747 -3 + vertex -39.9072 -25.4747 0 + endloop + endfacet + facet normal 0.919921 -0.392104 0 + outer loop + vertex -39.9072 -25.4747 -3 + vertex -42.237 -30.9405 0 + vertex -42.237 -30.9405 -3 + endloop + endfacet + facet normal 0.92143 -0.388544 0 + outer loop + vertex -39.9072 -25.4747 0 + vertex -37.0548 -18.7102 -3 + vertex -37.0548 -18.7102 0 + endloop + endfacet + facet normal 0.92143 -0.388544 0 + outer loop + vertex -37.0548 -18.7102 -3 + vertex -39.9072 -25.4747 0 + vertex -39.9072 -25.4747 -3 + endloop + endfacet + facet normal 0.937894 -0.346922 0 + outer loop + vertex -37.0548 -18.7102 0 + vertex -35.6081 -14.799 -3 + vertex -35.6081 -14.799 0 + endloop + endfacet + facet normal 0.937894 -0.346922 0 + outer loop + vertex -35.6081 -14.799 -3 + vertex -37.0548 -18.7102 0 + vertex -37.0548 -18.7102 -3 + endloop + endfacet + facet normal 0.984127 -0.177463 0 + outer loop + vertex -35.6081 -14.799 0 + vertex -35.4871 -14.1281 -3 + vertex -35.4871 -14.1281 0 + endloop + endfacet + facet normal 0.984127 -0.177463 0 + outer loop + vertex -35.4871 -14.1281 -3 + vertex -35.6081 -14.799 0 + vertex -35.6081 -14.799 -3 + endloop + endfacet + facet normal 0.978316 0.207116 0 + outer loop + vertex -35.4871 -14.1281 0 + vertex -35.5739 -13.718 -3 + vertex -35.5739 -13.718 0 + endloop + endfacet + facet normal 0.978316 0.207116 0 + outer loop + vertex -35.5739 -13.718 -3 + vertex -35.4871 -14.1281 0 + vertex -35.4871 -14.1281 -3 + endloop + endfacet + facet normal 0.525627 0.850715 -0 + outer loop + vertex -35.5739 -13.718 -3 + vertex -35.9073 -13.512 0 + vertex -35.5739 -13.718 0 + endloop + endfacet + facet normal 0.525627 0.850715 0 + outer loop + vertex -35.9073 -13.512 0 + vertex -35.5739 -13.718 -3 + vertex -35.9073 -13.512 -3 + endloop + endfacet + facet normal 0.0947129 0.995505 -0 + outer loop + vertex -35.9073 -13.512 -3 + vertex -36.5262 -13.4531 0 + vertex -35.9073 -13.512 0 + endloop + endfacet + facet normal 0.0947129 0.995505 0 + outer loop + vertex -36.5262 -13.4531 0 + vertex -35.9073 -13.512 -3 + vertex -36.5262 -13.4531 -3 + endloop + endfacet + facet normal 0.264376 0.96442 -0 + outer loop + vertex -36.5262 -13.4531 -3 + vertex -37.2393 -13.2576 0 + vertex -36.5262 -13.4531 0 + endloop + endfacet + facet normal 0.264376 0.96442 0 + outer loop + vertex -37.2393 -13.2576 0 + vertex -36.5262 -13.4531 -3 + vertex -37.2393 -13.2576 -3 + endloop + endfacet + facet normal 0.846268 0.532757 0 + outer loop + vertex -37.2393 -13.2576 0 + vertex -37.5366 -12.7854 -3 + vertex -37.5366 -12.7854 0 + endloop + endfacet + facet normal 0.846268 0.532757 0 + outer loop + vertex -37.5366 -12.7854 -3 + vertex -37.2393 -13.2576 0 + vertex -37.2393 -13.2576 -3 + endloop + endfacet + facet normal 0.972647 -0.232287 0 + outer loop + vertex -37.5366 -12.7854 0 + vertex -37.3951 -12.1929 -3 + vertex -37.3951 -12.1929 0 + endloop + endfacet + facet normal 0.972647 -0.232287 0 + outer loop + vertex -37.3951 -12.1929 -3 + vertex -37.5366 -12.7854 0 + vertex -37.5366 -12.7854 -3 + endloop + endfacet + facet normal 0.678121 -0.73495 0 + outer loop + vertex -37.3951 -12.1929 -3 + vertex -36.792 -11.6364 0 + vertex -37.3951 -12.1929 0 + endloop + endfacet + facet normal 0.678121 -0.73495 0 + outer loop + vertex -36.792 -11.6364 0 + vertex -37.3951 -12.1929 -3 + vertex -36.792 -11.6364 -3 + endloop + endfacet + facet normal 0.33489 -0.942257 0 + outer loop + vertex -36.792 -11.6364 -3 + vertex -36.1936 -11.4238 0 + vertex -36.792 -11.6364 0 + endloop + endfacet + facet normal 0.33489 -0.942257 0 + outer loop + vertex -36.1936 -11.4238 0 + vertex -36.792 -11.6364 -3 + vertex -36.1936 -11.4238 -3 + endloop + endfacet + facet normal 0.0784345 -0.996919 0 + outer loop + vertex -36.1936 -11.4238 -3 + vertex -34.87 -11.3196 0 + vertex -36.1936 -11.4238 0 + endloop + endfacet + facet normal 0.0784345 -0.996919 0 + outer loop + vertex -34.87 -11.3196 0 + vertex -36.1936 -11.4238 -3 + vertex -34.87 -11.3196 -3 + endloop + endfacet + facet normal -0.00425069 -0.999991 0 + outer loop + vertex -34.87 -11.3196 -3 + vertex -27.1868 -11.3523 0 + vertex -34.87 -11.3196 0 + endloop + endfacet + facet normal -0.00425069 -0.999991 -0 + outer loop + vertex -27.1868 -11.3523 0 + vertex -34.87 -11.3196 -3 + vertex -27.1868 -11.3523 -3 + endloop + endfacet + facet normal -0.778969 -0.627062 0 + outer loop + vertex -11.7016 -19.4898 -3 + vertex -11.9141 -19.2259 0 + vertex -11.9141 -19.2259 -3 + endloop + endfacet + facet normal -0.778969 -0.627062 0 + outer loop + vertex -11.9141 -19.2259 0 + vertex -11.7016 -19.4898 -3 + vertex -11.7016 -19.4898 0 + endloop + endfacet + facet normal -0.998948 -0.0458637 0 + outer loop + vertex -11.6824 -19.9072 -3 + vertex -11.7016 -19.4898 0 + vertex -11.7016 -19.4898 -3 + endloop + endfacet + facet normal -0.998948 -0.0458637 0 + outer loop + vertex -11.7016 -19.4898 0 + vertex -11.6824 -19.9072 -3 + vertex -11.6824 -19.9072 0 + endloop + endfacet + facet normal -0.950718 0.310058 0 + outer loop + vertex -11.8627 -20.4599 -3 + vertex -11.6824 -19.9072 0 + vertex -11.6824 -19.9072 -3 + endloop + endfacet + facet normal -0.950718 0.310058 0 + outer loop + vertex -11.6824 -19.9072 0 + vertex -11.8627 -20.4599 -3 + vertex -11.8627 -20.4599 0 + endloop + endfacet + facet normal -0.958208 0.286074 0 + outer loop + vertex -12.0544 -21.102 -3 + vertex -11.8627 -20.4599 0 + vertex -11.8627 -20.4599 -3 + endloop + endfacet + facet normal -0.958208 0.286074 0 + outer loop + vertex -11.8627 -20.4599 0 + vertex -12.0544 -21.102 -3 + vertex -12.0544 -21.102 0 + endloop + endfacet + facet normal 0.484491 -0.874796 0 + outer loop + vertex -12.0544 -21.102 -3 + vertex -10.3766 -20.1728 0 + vertex -12.0544 -21.102 0 + endloop + endfacet + facet normal 0.484491 -0.874796 0 + outer loop + vertex -10.3766 -20.1728 0 + vertex -12.0544 -21.102 -3 + vertex -10.3766 -20.1728 -3 + endloop + endfacet + facet normal 0.447022 -0.894523 0 + outer loop + vertex -10.3766 -20.1728 -3 + vertex -8.78621 -19.378 0 + vertex -10.3766 -20.1728 0 + endloop + endfacet + facet normal 0.447022 -0.894523 0 + outer loop + vertex -8.78621 -19.378 0 + vertex -10.3766 -20.1728 -3 + vertex -8.78621 -19.378 -3 + endloop + endfacet + facet normal 0.124012 -0.992281 0 + outer loop + vertex -8.78621 -19.378 -3 + vertex -7.1272 -19.1706 0 + vertex -8.78621 -19.378 0 + endloop + endfacet + facet normal 0.124012 -0.992281 0 + outer loop + vertex -7.1272 -19.1706 0 + vertex -8.78621 -19.378 -3 + vertex -7.1272 -19.1706 -3 + endloop + endfacet + facet normal -0.019656 -0.999807 0 + outer loop + vertex -7.1272 -19.1706 -3 + vertex -5.57075 -19.2012 0 + vertex -7.1272 -19.1706 0 + endloop + endfacet + facet normal -0.019656 -0.999807 -0 + outer loop + vertex -5.57075 -19.2012 0 + vertex -7.1272 -19.1706 -3 + vertex -5.57075 -19.2012 -3 + endloop + endfacet + facet normal -0.587249 -0.809407 0 + outer loop + vertex -5.57075 -19.2012 -3 + vertex -4.70045 -19.8327 0 + vertex -5.57075 -19.2012 0 + endloop + endfacet + facet normal -0.587249 -0.809407 -0 + outer loop + vertex -4.70045 -19.8327 0 + vertex -5.57075 -19.2012 -3 + vertex -4.70045 -19.8327 -3 + endloop + endfacet + facet normal -0.783181 -0.621793 0 + outer loop + vertex -4.06681 -20.6308 -3 + vertex -4.70045 -19.8327 0 + vertex -4.70045 -19.8327 -3 + endloop + endfacet + facet normal -0.783181 -0.621793 0 + outer loop + vertex -4.70045 -19.8327 0 + vertex -4.06681 -20.6308 -3 + vertex -4.06681 -20.6308 0 + endloop + endfacet + facet normal -0.979543 -0.201235 0 + outer loop + vertex -3.85646 -21.6547 -3 + vertex -4.06681 -20.6308 0 + vertex -4.06681 -20.6308 -3 + endloop + endfacet + facet normal -0.979543 -0.201235 0 + outer loop + vertex -4.06681 -20.6308 0 + vertex -3.85646 -21.6547 -3 + vertex -3.85646 -21.6547 0 + endloop + endfacet + facet normal -0.999487 0.0320236 0 + outer loop + vertex -3.89417 -22.8317 -3 + vertex -3.85646 -21.6547 0 + vertex -3.85646 -21.6547 -3 + endloop + endfacet + facet normal -0.999487 0.0320236 0 + outer loop + vertex -3.85646 -21.6547 0 + vertex -3.89417 -22.8317 -3 + vertex -3.89417 -22.8317 0 + endloop + endfacet + facet normal -0.971741 0.236051 0 + outer loop + vertex -4.26405 -24.3543 -3 + vertex -3.89417 -22.8317 0 + vertex -3.89417 -22.8317 -3 + endloop + endfacet + facet normal -0.971741 0.236051 0 + outer loop + vertex -3.89417 -22.8317 0 + vertex -4.26405 -24.3543 -3 + vertex -4.26405 -24.3543 0 + endloop + endfacet + facet normal -0.928824 0.370521 0 + outer loop + vertex -6.41168 -29.738 -3 + vertex -4.26405 -24.3543 0 + vertex -4.26405 -24.3543 -3 + endloop + endfacet + facet normal -0.928824 0.370521 0 + outer loop + vertex -4.26405 -24.3543 0 + vertex -6.41168 -29.738 -3 + vertex -6.41168 -29.738 0 + endloop + endfacet + facet normal -0.923854 0.382746 0 + outer loop + vertex -8.33648 -34.384 -3 + vertex -6.41168 -29.738 0 + vertex -6.41168 -29.738 -3 + endloop + endfacet + facet normal -0.923854 0.382746 0 + outer loop + vertex -6.41168 -29.738 0 + vertex -8.33648 -34.384 -3 + vertex -8.33648 -34.384 0 + endloop + endfacet + facet normal -0.969782 0.243973 0 + outer loop + vertex -8.56822 -35.3052 -3 + vertex -8.33648 -34.384 0 + vertex -8.33648 -34.384 -3 + endloop + endfacet + facet normal -0.969782 0.243973 0 + outer loop + vertex -8.33648 -34.384 0 + vertex -8.56822 -35.3052 -3 + vertex -8.56822 -35.3052 0 + endloop + endfacet + facet normal -0.990389 -0.138307 0 + outer loop + vertex -8.51129 -35.7129 -3 + vertex -8.56822 -35.3052 0 + vertex -8.56822 -35.3052 -3 + endloop + endfacet + facet normal -0.990389 -0.138307 0 + outer loop + vertex -8.56822 -35.3052 0 + vertex -8.51129 -35.7129 -3 + vertex -8.51129 -35.7129 0 + endloop + endfacet + facet normal -0.550548 -0.834803 0 + outer loop + vertex -8.51129 -35.7129 -3 + vertex -7.98605 -36.0592 0 + vertex -8.51129 -35.7129 0 + endloop + endfacet + facet normal -0.550548 -0.834803 -0 + outer loop + vertex -7.98605 -36.0592 0 + vertex -8.51129 -35.7129 -3 + vertex -7.98605 -36.0592 -3 + endloop + endfacet + facet normal -0.557022 -0.830498 0 + outer loop + vertex -7.98605 -36.0592 -3 + vertex -7.51249 -36.3769 0 + vertex -7.98605 -36.0592 0 + endloop + endfacet + facet normal -0.557022 -0.830498 -0 + outer loop + vertex -7.51249 -36.3769 0 + vertex -7.98605 -36.0592 -3 + vertex -7.51249 -36.3769 -3 + endloop + endfacet + facet normal -0.885076 -0.465446 0 + outer loop + vertex -7.31439 -36.7536 -3 + vertex -7.51249 -36.3769 0 + vertex -7.51249 -36.3769 -3 + endloop + endfacet + facet normal -0.885076 -0.465446 0 + outer loop + vertex -7.51249 -36.3769 0 + vertex -7.31439 -36.7536 -3 + vertex -7.31439 -36.7536 0 + endloop + endfacet + facet normal -0.984477 0.175514 0 + outer loop + vertex -7.3919 -37.1883 -3 + vertex -7.31439 -36.7536 0 + vertex -7.31439 -36.7536 -3 + endloop + endfacet + facet normal -0.984477 0.175514 0 + outer loop + vertex -7.31439 -36.7536 0 + vertex -7.3919 -37.1883 -3 + vertex -7.3919 -37.1883 0 + endloop + endfacet + facet normal -0.812154 0.583443 0 + outer loop + vertex -7.74517 -37.6801 -3 + vertex -7.3919 -37.1883 0 + vertex -7.3919 -37.1883 -3 + endloop + endfacet + facet normal -0.812154 0.583443 0 + outer loop + vertex -7.3919 -37.1883 0 + vertex -7.74517 -37.6801 -3 + vertex -7.74517 -37.6801 0 + endloop + endfacet + facet normal -0.622963 0.782251 0 + outer loop + vertex -7.74517 -37.6801 -3 + vertex -8.07933 -37.9462 0 + vertex -7.74517 -37.6801 0 + endloop + endfacet + facet normal -0.622963 0.782251 0 + outer loop + vertex -8.07933 -37.9462 0 + vertex -7.74517 -37.6801 -3 + vertex -8.07933 -37.9462 -3 + endloop + endfacet + facet normal -0.234375 0.972146 0 + outer loop + vertex -8.07933 -37.9462 -3 + vertex -8.66873 -38.0883 0 + vertex -8.07933 -37.9462 0 + endloop + endfacet + facet normal -0.234375 0.972146 0 + outer loop + vertex -8.66873 -38.0883 0 + vertex -8.07933 -37.9462 -3 + vertex -8.66873 -38.0883 -3 + endloop + endfacet + facet normal -0.02015 0.999797 0 + outer loop + vertex -8.66873 -38.0883 -3 + vertex -12.0013 -38.1555 0 + vertex -8.66873 -38.0883 0 + endloop + endfacet + facet normal -0.02015 0.999797 0 + outer loop + vertex -12.0013 -38.1555 0 + vertex -8.66873 -38.0883 -3 + vertex -12.0013 -38.1555 -3 + endloop + endfacet + facet normal 0.0188466 0.999822 -0 + outer loop + vertex -12.0013 -38.1555 -3 + vertex -15.3277 -38.0928 0 + vertex -12.0013 -38.1555 0 + endloop + endfacet + facet normal 0.0188466 0.999822 0 + outer loop + vertex -15.3277 -38.0928 0 + vertex -12.0013 -38.1555 -3 + vertex -15.3277 -38.0928 -3 + endloop + endfacet + facet normal 0.289952 0.957041 -0 + outer loop + vertex -15.3277 -38.0928 -3 + vertex -15.7983 -37.9502 0 + vertex -15.3277 -38.0928 0 + endloop + endfacet + facet normal 0.289952 0.957041 0 + outer loop + vertex -15.7983 -37.9502 0 + vertex -15.3277 -38.0928 -3 + vertex -15.7983 -37.9502 -3 + endloop + endfacet + facet normal 0.88368 0.468092 0 + outer loop + vertex -15.7983 -37.9502 0 + vertex -15.9433 -37.6764 -3 + vertex -15.9433 -37.6764 0 + endloop + endfacet + facet normal 0.88368 0.468092 0 + outer loop + vertex -15.9433 -37.6764 -3 + vertex -15.7983 -37.9502 0 + vertex -15.7983 -37.9502 -3 + endloop + endfacet + facet normal 0.999065 -0.0432335 0 + outer loop + vertex -15.9433 -37.6764 0 + vertex -15.9213 -37.1689 -3 + vertex -15.9213 -37.1689 0 + endloop + endfacet + facet normal 0.999065 -0.0432335 0 + outer loop + vertex -15.9213 -37.1689 -3 + vertex -15.9433 -37.6764 0 + vertex -15.9433 -37.6764 -3 + endloop + endfacet + facet normal 0.790901 -0.611944 0 + outer loop + vertex -15.9213 -37.1689 0 + vertex -15.4682 -36.5832 -3 + vertex -15.4682 -36.5832 0 + endloop + endfacet + facet normal 0.790901 -0.611944 0 + outer loop + vertex -15.4682 -36.5832 -3 + vertex -15.9213 -37.1689 0 + vertex -15.9213 -37.1689 -3 + endloop + endfacet + facet normal 0.603331 -0.797491 0 + outer loop + vertex -15.4682 -36.5832 -3 + vertex -14.8949 -36.1495 0 + vertex -15.4682 -36.5832 0 + endloop + endfacet + facet normal 0.603331 -0.797491 0 + outer loop + vertex -14.8949 -36.1495 0 + vertex -15.4682 -36.5832 -3 + vertex -14.8949 -36.1495 -3 + endloop + endfacet + facet normal 0.32682 -0.945087 0 + outer loop + vertex -14.8949 -36.1495 -3 + vertex -14.3732 -35.9691 0 + vertex -14.8949 -36.1495 0 + endloop + endfacet + facet normal 0.32682 -0.945087 0 + outer loop + vertex -14.3732 -35.9691 0 + vertex -14.8949 -36.1495 -3 + vertex -14.3732 -35.9691 -3 + endloop + endfacet + facet normal 0.336732 -0.941601 0 + outer loop + vertex -14.3732 -35.9691 -3 + vertex -13.7203 -35.7356 0 + vertex -14.3732 -35.9691 0 + endloop + endfacet + facet normal 0.336732 -0.941601 0 + outer loop + vertex -13.7203 -35.7356 0 + vertex -14.3732 -35.9691 -3 + vertex -13.7203 -35.7356 -3 + endloop + endfacet + facet normal 0.723518 -0.690305 0 + outer loop + vertex -13.7203 -35.7356 0 + vertex -13.0448 -35.0276 -3 + vertex -13.0448 -35.0276 0 + endloop + endfacet + facet normal 0.723518 -0.690305 0 + outer loop + vertex -13.0448 -35.0276 -3 + vertex -13.7203 -35.7356 0 + vertex -13.7203 -35.7356 -3 + endloop + endfacet + facet normal 0.860653 -0.509193 0 + outer loop + vertex -13.0448 -35.0276 0 + vertex -12.3385 -33.8339 -3 + vertex -12.3385 -33.8339 0 + endloop + endfacet + facet normal 0.860653 -0.509193 0 + outer loop + vertex -12.3385 -33.8339 -3 + vertex -13.0448 -35.0276 0 + vertex -13.0448 -35.0276 -3 + endloop + endfacet + facet normal 0.915054 -0.403331 0 + outer loop + vertex -12.3385 -33.8339 0 + vertex -11.5932 -32.143 -3 + vertex -11.5932 -32.143 0 + endloop + endfacet + facet normal 0.915054 -0.403331 0 + outer loop + vertex -11.5932 -32.143 -3 + vertex -12.3385 -33.8339 0 + vertex -12.3385 -33.8339 -3 + endloop + endfacet + facet normal 0.927789 -0.373105 0 + outer loop + vertex -11.5932 -32.143 0 + vertex -9.55184 -27.0667 -3 + vertex -9.55184 -27.0667 0 + endloop + endfacet + facet normal 0.927789 -0.373105 0 + outer loop + vertex -9.55184 -27.0667 -3 + vertex -11.5932 -32.143 0 + vertex -11.5932 -32.143 -3 + endloop + endfacet + facet normal 0.938245 -0.345971 0 + outer loop + vertex -9.55184 -27.0667 0 + vertex -8.72405 -24.8218 -3 + vertex -8.72405 -24.8218 0 + endloop + endfacet + facet normal 0.938245 -0.345971 0 + outer loop + vertex -8.72405 -24.8218 -3 + vertex -9.55184 -27.0667 0 + vertex -9.55184 -27.0667 -3 + endloop + endfacet + facet normal 0.983596 -0.180388 0 + outer loop + vertex -8.72405 -24.8218 0 + vertex -8.46819 -23.4267 -3 + vertex -8.46819 -23.4267 0 + endloop + endfacet + facet normal 0.983596 -0.180388 0 + outer loop + vertex -8.46819 -23.4267 -3 + vertex -8.72405 -24.8218 0 + vertex -8.72405 -24.8218 -3 + endloop + endfacet + facet normal 0.979467 0.201603 0 + outer loop + vertex -8.46819 -23.4267 0 + vertex -8.55624 -22.9989 -3 + vertex -8.55624 -22.9989 0 + endloop + endfacet + facet normal 0.979467 0.201603 0 + outer loop + vertex -8.55624 -22.9989 -3 + vertex -8.46819 -23.4267 0 + vertex -8.46819 -23.4267 -3 + endloop + endfacet + facet normal 0.762012 0.647563 0 + outer loop + vertex -8.55624 -22.9989 0 + vertex -8.78909 -22.7249 -3 + vertex -8.78909 -22.7249 0 + endloop + endfacet + facet normal 0.762012 0.647563 0 + outer loop + vertex -8.78909 -22.7249 -3 + vertex -8.55624 -22.9989 0 + vertex -8.55624 -22.9989 -3 + endloop + endfacet + facet normal 0.179668 0.983727 -0 + outer loop + vertex -8.78909 -22.7249 -3 + vertex -9.69161 -22.56 0 + vertex -8.78909 -22.7249 0 + endloop + endfacet + facet normal 0.179668 0.983727 0 + outer loop + vertex -9.69161 -22.56 0 + vertex -8.78909 -22.7249 -3 + vertex -9.69161 -22.56 -3 + endloop + endfacet + facet normal -0.191908 0.981413 0 + outer loop + vertex -9.69161 -22.56 -3 + vertex -10.5461 -22.7271 0 + vertex -9.69161 -22.56 0 + endloop + endfacet + facet normal -0.191908 0.981413 0 + outer loop + vertex -10.5461 -22.7271 0 + vertex -9.69161 -22.56 -3 + vertex -10.5461 -22.7271 -3 + endloop + endfacet + facet normal -0.380356 0.92484 0 + outer loop + vertex -10.5461 -22.7271 -3 + vertex -11.3967 -23.0769 0 + vertex -10.5461 -22.7271 0 + endloop + endfacet + facet normal -0.380356 0.92484 0 + outer loop + vertex -11.3967 -23.0769 0 + vertex -10.5461 -22.7271 -3 + vertex -11.3967 -23.0769 -3 + endloop + endfacet + facet normal -0.535069 0.844808 0 + outer loop + vertex -11.3967 -23.0769 -3 + vertex -12.4124 -23.7203 0 + vertex -11.3967 -23.0769 0 + endloop + endfacet + facet normal -0.535069 0.844808 0 + outer loop + vertex -12.4124 -23.7203 0 + vertex -11.3967 -23.0769 -3 + vertex -12.4124 -23.7203 -3 + endloop + endfacet + facet normal -0.673005 0.739638 0 + outer loop + vertex -12.4124 -23.7203 -3 + vertex -13.1427 -24.3848 0 + vertex -12.4124 -23.7203 0 + endloop + endfacet + facet normal -0.673005 0.739638 0 + outer loop + vertex -13.1427 -24.3848 0 + vertex -12.4124 -23.7203 -3 + vertex -13.1427 -24.3848 -3 + endloop + endfacet + facet normal -0.824808 0.565412 0 + outer loop + vertex -13.7062 -25.2068 -3 + vertex -13.1427 -24.3848 0 + vertex -13.1427 -24.3848 -3 + endloop + endfacet + facet normal -0.824808 0.565412 0 + outer loop + vertex -13.1427 -24.3848 0 + vertex -13.7062 -25.2068 -3 + vertex -13.7062 -25.2068 0 + endloop + endfacet + facet normal -0.907849 0.419297 0 + outer loop + vertex -14.2216 -26.3227 -3 + vertex -13.7062 -25.2068 0 + vertex -13.7062 -25.2068 -3 + endloop + endfacet + facet normal -0.907849 0.419297 0 + outer loop + vertex -13.7062 -25.2068 0 + vertex -14.2216 -26.3227 -3 + vertex -14.2216 -26.3227 0 + endloop + endfacet + facet normal -0.926196 0.377043 0 + outer loop + vertex -15.3894 -29.1914 -3 + vertex -14.2216 -26.3227 0 + vertex -14.2216 -26.3227 -3 + endloop + endfacet + facet normal -0.926196 0.377043 0 + outer loop + vertex -14.2216 -26.3227 0 + vertex -15.3894 -29.1914 -3 + vertex -15.3894 -29.1914 0 + endloop + endfacet + facet normal -0.925675 0.37832 0 + outer loop + vertex -16.8281 -32.7116 -3 + vertex -15.3894 -29.1914 0 + vertex -15.3894 -29.1914 -3 + endloop + endfacet + facet normal -0.925675 0.37832 0 + outer loop + vertex -15.3894 -29.1914 0 + vertex -16.8281 -32.7116 -3 + vertex -16.8281 -32.7116 0 + endloop + endfacet + facet normal -0.944728 0.327855 0 + outer loop + vertex -17.7285 -35.3062 -3 + vertex -16.8281 -32.7116 0 + vertex -16.8281 -32.7116 -3 + endloop + endfacet + facet normal -0.944728 0.327855 0 + outer loop + vertex -16.8281 -32.7116 0 + vertex -17.7285 -35.3062 -3 + vertex -17.7285 -35.3062 0 + endloop + endfacet + facet normal -0.998333 -0.0577213 0 + outer loop + vertex -17.6987 -35.8223 -3 + vertex -17.7285 -35.3062 0 + vertex -17.7285 -35.3062 -3 + endloop + endfacet + facet normal -0.998333 -0.0577213 0 + outer loop + vertex -17.7285 -35.3062 0 + vertex -17.6987 -35.8223 -3 + vertex -17.6987 -35.8223 0 + endloop + endfacet + facet normal -0.412173 -0.911106 0 + outer loop + vertex -17.6987 -35.8223 -3 + vertex -17.3742 -35.9691 0 + vertex -17.6987 -35.8223 0 + endloop + endfacet + facet normal -0.412173 -0.911106 -0 + outer loop + vertex -17.3742 -35.9691 0 + vertex -17.6987 -35.8223 -3 + vertex -17.3742 -35.9691 -3 + endloop + endfacet + facet normal -0.297585 -0.954695 0 + outer loop + vertex -17.3742 -35.9691 -3 + vertex -16.5846 -36.2152 0 + vertex -17.3742 -35.9691 0 + endloop + endfacet + facet normal -0.297585 -0.954695 -0 + outer loop + vertex -16.5846 -36.2152 0 + vertex -17.3742 -35.9691 -3 + vertex -16.5846 -36.2152 -3 + endloop + endfacet + facet normal -0.829044 -0.559183 0 + outer loop + vertex -16.2226 -36.752 -3 + vertex -16.5846 -36.2152 0 + vertex -16.5846 -36.2152 -3 + endloop + endfacet + facet normal -0.829044 -0.559183 0 + outer loop + vertex -16.5846 -36.2152 0 + vertex -16.2226 -36.752 -3 + vertex -16.2226 -36.752 0 + endloop + endfacet + facet normal -0.876406 0.481572 0 + outer loop + vertex -16.6989 -37.6188 -3 + vertex -16.2226 -36.752 0 + vertex -16.2226 -36.752 -3 + endloop + endfacet + facet normal -0.876406 0.481572 0 + outer loop + vertex -16.2226 -36.752 0 + vertex -16.6989 -37.6188 -3 + vertex -16.6989 -37.6188 0 + endloop + endfacet + facet normal -0.678562 0.734543 0 + outer loop + vertex -16.6989 -37.6188 -3 + vertex -17.033 -37.9274 0 + vertex -16.6989 -37.6188 0 + endloop + endfacet + facet normal -0.678562 0.734543 0 + outer loop + vertex -17.033 -37.9274 0 + vertex -16.6989 -37.6188 -3 + vertex -17.033 -37.9274 -3 + endloop + endfacet + facet normal -0.276188 0.961104 0 + outer loop + vertex -17.033 -37.9274 -3 + vertex -17.5781 -38.0841 0 + vertex -17.033 -37.9274 0 + endloop + endfacet + facet normal -0.276188 0.961104 0 + outer loop + vertex -17.5781 -38.0841 0 + vertex -17.033 -37.9274 -3 + vertex -17.5781 -38.0841 -3 + endloop + endfacet + facet normal -0.0141874 0.999899 0 + outer loop + vertex -17.5781 -38.0841 -3 + vertex -20.8226 -38.1301 0 + vertex -17.5781 -38.0841 0 + endloop + endfacet + facet normal -0.0141874 0.999899 0 + outer loop + vertex -20.8226 -38.1301 0 + vertex -17.5781 -38.0841 -3 + vertex -20.8226 -38.1301 -3 + endloop + endfacet + facet normal 0.0314237 0.999506 -0 + outer loop + vertex -20.8226 -38.1301 -3 + vertex -24.8096 -38.0047 0 + vertex -20.8226 -38.1301 0 + endloop + endfacet + facet normal 0.0314237 0.999506 0 + outer loop + vertex -24.8096 -38.0047 0 + vertex -20.8226 -38.1301 -3 + vertex -24.8096 -38.0047 -3 + endloop + endfacet + facet normal 0.544713 0.838623 -0 + outer loop + vertex -24.8096 -38.0047 -3 + vertex -25.0608 -37.8416 0 + vertex -24.8096 -38.0047 0 + endloop + endfacet + facet normal 0.544713 0.838623 0 + outer loop + vertex -25.0608 -37.8416 0 + vertex -24.8096 -38.0047 -3 + vertex -25.0608 -37.8416 -3 + endloop + endfacet + facet normal 0.940452 0.339927 0 + outer loop + vertex -25.0608 -37.8416 0 + vertex -25.157 -37.5754 -3 + vertex -25.157 -37.5754 0 + endloop + endfacet + facet normal 0.940452 0.339927 0 + outer loop + vertex -25.157 -37.5754 -3 + vertex -25.0608 -37.8416 0 + vertex -25.0608 -37.8416 -3 + endloop + endfacet + facet normal 0.964896 -0.262631 0 + outer loop + vertex -25.157 -37.5754 0 + vertex -24.9699 -36.888 -3 + vertex -24.9699 -36.888 0 + endloop + endfacet + facet normal 0.964896 -0.262631 0 + outer loop + vertex -24.9699 -36.888 -3 + vertex -25.157 -37.5754 0 + vertex -25.157 -37.5754 -3 + endloop + endfacet + facet normal 0.757107 -0.653291 0 + outer loop + vertex -24.9699 -36.888 0 + vertex -24.4194 -36.2501 -3 + vertex -24.4194 -36.2501 0 + endloop + endfacet + facet normal 0.757107 -0.653291 0 + outer loop + vertex -24.4194 -36.2501 -3 + vertex -24.9699 -36.888 0 + vertex -24.9699 -36.888 -3 + endloop + endfacet + facet normal 0.353851 -0.935302 0 + outer loop + vertex -24.4194 -36.2501 -3 + vertex -23.6767 -35.9691 0 + vertex -24.4194 -36.2501 0 + endloop + endfacet + facet normal 0.353851 -0.935302 0 + outer loop + vertex -23.6767 -35.9691 0 + vertex -24.4194 -36.2501 -3 + vertex -23.6767 -35.9691 -3 + endloop + endfacet + facet normal 0.158077 -0.987427 0 + outer loop + vertex -23.6767 -35.9691 -3 + vertex -23.007 -35.8619 0 + vertex -23.6767 -35.9691 0 + endloop + endfacet + facet normal 0.158077 -0.987427 0 + outer loop + vertex -23.007 -35.8619 0 + vertex -23.6767 -35.9691 -3 + vertex -23.007 -35.8619 -3 + endloop + endfacet + facet normal 0.593681 -0.8047 0 + outer loop + vertex -23.007 -35.8619 -3 + vertex -22.458 -35.4568 0 + vertex -23.007 -35.8619 0 + endloop + endfacet + facet normal 0.593681 -0.8047 0 + outer loop + vertex -22.458 -35.4568 0 + vertex -23.007 -35.8619 -3 + vertex -22.458 -35.4568 -3 + endloop + endfacet + facet normal 0.83817 -0.545409 0 + outer loop + vertex -22.458 -35.4568 0 + vertex -21.9191 -34.6287 -3 + vertex -21.9191 -34.6287 0 + endloop + endfacet + facet normal 0.83817 -0.545409 0 + outer loop + vertex -21.9191 -34.6287 -3 + vertex -22.458 -35.4568 0 + vertex -22.458 -35.4568 -3 + endloop + endfacet + facet normal 0.906982 -0.42117 0 + outer loop + vertex -21.9191 -34.6287 0 + vertex -21.28 -33.2523 -3 + vertex -21.28 -33.2523 0 + endloop + endfacet + facet normal 0.906982 -0.42117 0 + outer loop + vertex -21.28 -33.2523 -3 + vertex -21.9191 -34.6287 0 + vertex -21.9191 -34.6287 -3 + endloop + endfacet + facet normal 0.922958 -0.384901 0 + outer loop + vertex -21.28 -33.2523 0 + vertex -18.5428 -26.6889 -3 + vertex -18.5428 -26.6889 0 + endloop + endfacet + facet normal 0.922958 -0.384901 0 + outer loop + vertex -18.5428 -26.6889 -3 + vertex -21.28 -33.2523 0 + vertex -21.28 -33.2523 -3 + endloop + endfacet + facet normal 0.9376 -0.347716 0 + outer loop + vertex -18.5428 -26.6889 0 + vertex -17.299 -23.335 -3 + vertex -17.299 -23.335 0 + endloop + endfacet + facet normal 0.9376 -0.347716 0 + outer loop + vertex -17.299 -23.335 -3 + vertex -18.5428 -26.6889 0 + vertex -18.5428 -26.6889 -3 + endloop + endfacet + facet normal 0.99882 -0.0485627 0 + outer loop + vertex -17.299 -23.335 0 + vertex -17.2695 -22.7276 -3 + vertex -17.2695 -22.7276 0 + endloop + endfacet + facet normal 0.99882 -0.0485627 0 + outer loop + vertex -17.2695 -22.7276 -3 + vertex -17.299 -23.335 0 + vertex -17.299 -23.335 -3 + endloop + endfacet + facet normal 0.171081 0.985257 -0 + outer loop + vertex -17.2695 -22.7276 -3 + vertex -17.8179 -22.6324 0 + vertex -17.2695 -22.7276 0 + endloop + endfacet + facet normal 0.171081 0.985257 0 + outer loop + vertex -17.8179 -22.6324 0 + vertex -17.2695 -22.7276 -3 + vertex -17.8179 -22.6324 -3 + endloop + endfacet + facet normal 0.112446 0.993658 -0 + outer loop + vertex -17.8179 -22.6324 -3 + vertex -18.3659 -22.5704 0 + vertex -17.8179 -22.6324 0 + endloop + endfacet + facet normal 0.112446 0.993658 0 + outer loop + vertex -18.3659 -22.5704 0 + vertex -17.8179 -22.6324 -3 + vertex -18.3659 -22.5704 -3 + endloop + endfacet + facet normal 0.520189 0.854051 -0 + outer loop + vertex -18.3659 -22.5704 -3 + vertex -18.6886 -22.3738 0 + vertex -18.3659 -22.5704 0 + endloop + endfacet + facet normal 0.520189 0.854051 0 + outer loop + vertex -18.6886 -22.3738 0 + vertex -18.3659 -22.5704 -3 + vertex -18.6886 -22.3738 -3 + endloop + endfacet + facet normal 0.953226 0.302258 0 + outer loop + vertex -18.6886 -22.3738 0 + vertex -18.7986 -22.0269 -3 + vertex -18.7986 -22.0269 0 + endloop + endfacet + facet normal 0.953226 0.302258 0 + outer loop + vertex -18.7986 -22.0269 -3 + vertex -18.6886 -22.3738 0 + vertex -18.6886 -22.3738 -3 + endloop + endfacet + facet normal 0.984904 -0.1731 0 + outer loop + vertex -18.7986 -22.0269 0 + vertex -18.7084 -21.5139 -3 + vertex -18.7084 -21.5139 0 + endloop + endfacet + facet normal 0.984904 -0.1731 0 + outer loop + vertex -18.7084 -21.5139 -3 + vertex -18.7986 -22.0269 0 + vertex -18.7986 -22.0269 -3 + endloop + endfacet + facet normal 0.878265 -0.478174 0 + outer loop + vertex -18.7084 -21.5139 0 + vertex -18.4336 -21.0091 -3 + vertex -18.4336 -21.0091 0 + endloop + endfacet + facet normal 0.878265 -0.478174 0 + outer loop + vertex -18.4336 -21.0091 -3 + vertex -18.7084 -21.5139 0 + vertex -18.7084 -21.5139 -3 + endloop + endfacet + facet normal 0.488581 -0.872518 0 + outer loop + vertex -18.4336 -21.0091 -3 + vertex -17.9982 -20.7653 0 + vertex -18.4336 -21.0091 0 + endloop + endfacet + facet normal 0.488581 -0.872518 0 + outer loop + vertex -17.9982 -20.7653 0 + vertex -18.4336 -21.0091 -3 + vertex -17.9982 -20.7653 -3 + endloop + endfacet + facet normal 0.293895 -0.955838 0 + outer loop + vertex -17.9982 -20.7653 -3 + vertex -15.1553 -19.8912 0 + vertex -17.9982 -20.7653 0 + endloop + endfacet + facet normal 0.293895 -0.955838 0 + outer loop + vertex -15.1553 -19.8912 0 + vertex -17.9982 -20.7653 -3 + vertex -15.1553 -19.8912 -3 + endloop + endfacet + facet normal 0.257693 -0.966227 0 + outer loop + vertex -15.1553 -19.8912 -3 + vertex -12.3137 -19.1333 0 + vertex -15.1553 -19.8912 0 + endloop + endfacet + facet normal 0.257693 -0.966227 0 + outer loop + vertex -12.3137 -19.1333 0 + vertex -15.1553 -19.8912 -3 + vertex -12.3137 -19.1333 -3 + endloop + endfacet + facet normal -0.225556 -0.97423 0 + outer loop + vertex -12.3137 -19.1333 -3 + vertex -11.9141 -19.2259 0 + vertex -12.3137 -19.1333 0 + endloop + endfacet + facet normal -0.225556 -0.97423 -0 + outer loop + vertex -11.9141 -19.2259 0 + vertex -12.3137 -19.1333 -3 + vertex -11.9141 -19.2259 -3 + endloop + endfacet + facet normal -0.569265 -0.822154 0 + outer loop + vertex 47.2139 -19.2263 -3 + vertex 47.7267 -19.5813 0 + vertex 47.2139 -19.2263 0 + endloop + endfacet + facet normal -0.569265 -0.822154 -0 + outer loop + vertex 47.7267 -19.5813 0 + vertex 47.2139 -19.2263 -3 + vertex 47.7267 -19.5813 -3 + endloop + endfacet + facet normal -0.900824 -0.434184 0 + outer loop + vertex 47.9875 -20.1225 -3 + vertex 47.7267 -19.5813 0 + vertex 47.7267 -19.5813 -3 + endloop + endfacet + facet normal -0.900824 -0.434184 0 + outer loop + vertex 47.7267 -19.5813 0 + vertex 47.9875 -20.1225 -3 + vertex 47.9875 -20.1225 0 + endloop + endfacet + facet normal -0.988067 0.154023 0 + outer loop + vertex 47.8425 -21.0531 -3 + vertex 47.9875 -20.1225 0 + vertex 47.9875 -20.1225 -3 + endloop + endfacet + facet normal -0.988067 0.154023 0 + outer loop + vertex 47.9875 -20.1225 0 + vertex 47.8425 -21.0531 -3 + vertex 47.8425 -21.0531 0 + endloop + endfacet + facet normal -0.94959 0.313495 0 + outer loop + vertex 47.5305 -21.9981 -3 + vertex 47.8425 -21.0531 0 + vertex 47.8425 -21.0531 -3 + endloop + endfacet + facet normal -0.94959 0.313495 0 + outer loop + vertex 47.8425 -21.0531 0 + vertex 47.5305 -21.9981 -3 + vertex 47.5305 -21.9981 0 + endloop + endfacet + facet normal -0.87808 0.478513 0 + outer loop + vertex 47.0957 -22.796 -3 + vertex 47.5305 -21.9981 0 + vertex 47.5305 -21.9981 -3 + endloop + endfacet + facet normal -0.87808 0.478513 0 + outer loop + vertex 47.5305 -21.9981 0 + vertex 47.0957 -22.796 -3 + vertex 47.0957 -22.796 0 + endloop + endfacet + facet normal -0.768497 0.639853 0 + outer loop + vertex 46.5684 -23.4293 -3 + vertex 47.0957 -22.796 0 + vertex 47.0957 -22.796 -3 + endloop + endfacet + facet normal -0.768497 0.639853 0 + outer loop + vertex 47.0957 -22.796 0 + vertex 46.5684 -23.4293 -3 + vertex 46.5684 -23.4293 0 + endloop + endfacet + facet normal -0.607748 0.79413 0 + outer loop + vertex 46.5684 -23.4293 -3 + vertex 45.9792 -23.8802 0 + vertex 46.5684 -23.4293 0 + endloop + endfacet + facet normal -0.607748 0.79413 0 + outer loop + vertex 45.9792 -23.8802 0 + vertex 46.5684 -23.4293 -3 + vertex 45.9792 -23.8802 -3 + endloop + endfacet + facet normal -0.374765 0.92712 0 + outer loop + vertex 45.9792 -23.8802 -3 + vertex 45.3585 -24.1311 0 + vertex 45.9792 -23.8802 0 + endloop + endfacet + facet normal -0.374765 0.92712 0 + outer loop + vertex 45.3585 -24.1311 0 + vertex 45.9792 -23.8802 -3 + vertex 45.3585 -24.1311 -3 + endloop + endfacet + facet normal -0.0533306 0.998577 0 + outer loop + vertex 45.3585 -24.1311 -3 + vertex 44.7368 -24.1643 0 + vertex 45.3585 -24.1311 0 + endloop + endfacet + facet normal -0.0533306 0.998577 0 + outer loop + vertex 44.7368 -24.1643 0 + vertex 45.3585 -24.1311 -3 + vertex 44.7368 -24.1643 -3 + endloop + endfacet + facet normal 0.323025 0.94639 -0 + outer loop + vertex 44.7368 -24.1643 -3 + vertex 44.1445 -23.9621 0 + vertex 44.7368 -24.1643 0 + endloop + endfacet + facet normal 0.323025 0.94639 0 + outer loop + vertex 44.1445 -23.9621 0 + vertex 44.7368 -24.1643 -3 + vertex 44.1445 -23.9621 -3 + endloop + endfacet + facet normal 0.649875 0.760041 -0 + outer loop + vertex 44.1445 -23.9621 -3 + vertex 43.6122 -23.5069 0 + vertex 44.1445 -23.9621 0 + endloop + endfacet + facet normal 0.649875 0.760041 0 + outer loop + vertex 43.6122 -23.5069 0 + vertex 44.1445 -23.9621 -3 + vertex 43.6122 -23.5069 -3 + endloop + endfacet + facet normal 0.613628 0.789596 -0 + outer loop + vertex 43.6122 -23.5069 -3 + vertex 42.7682 -22.851 0 + vertex 43.6122 -23.5069 0 + endloop + endfacet + facet normal 0.613628 0.789596 0 + outer loop + vertex 42.7682 -22.851 0 + vertex 43.6122 -23.5069 -3 + vertex 42.7682 -22.851 -3 + endloop + endfacet + facet normal -0.589043 0.808102 0 + outer loop + vertex 42.7682 -22.851 -3 + vertex 41.2986 -23.9223 0 + vertex 42.7682 -22.851 0 + endloop + endfacet + facet normal -0.589043 0.808102 0 + outer loop + vertex 41.2986 -23.9223 0 + vertex 42.7682 -22.851 -3 + vertex 41.2986 -23.9223 -3 + endloop + endfacet + facet normal -0.701303 0.712864 0 + outer loop + vertex 41.2986 -23.9223 -3 + vertex 40.5923 -24.6171 0 + vertex 41.2986 -23.9223 0 + endloop + endfacet + facet normal -0.701303 0.712864 0 + outer loop + vertex 40.5923 -24.6171 0 + vertex 41.2986 -23.9223 -3 + vertex 40.5923 -24.6171 -3 + endloop + endfacet + facet normal -0.831353 0.555744 0 + outer loop + vertex 40.0289 -25.46 -3 + vertex 40.5923 -24.6171 0 + vertex 40.5923 -24.6171 -3 + endloop + endfacet + facet normal -0.831353 0.555744 0 + outer loop + vertex 40.5923 -24.6171 0 + vertex 40.0289 -25.46 -3 + vertex 40.0289 -25.46 0 + endloop + endfacet + facet normal -0.918395 0.395664 0 + outer loop + vertex 38.2188 -29.6614 -3 + vertex 40.0289 -25.46 0 + vertex 40.0289 -25.46 -3 + endloop + endfacet + facet normal -0.918395 0.395664 0 + outer loop + vertex 40.0289 -25.46 0 + vertex 38.2188 -29.6614 -3 + vertex 38.2188 -29.6614 0 + endloop + endfacet + facet normal -0.932877 0.360196 0 + outer loop + vertex 36.8272 -33.2656 -3 + vertex 38.2188 -29.6614 0 + vertex 38.2188 -29.6614 -3 + endloop + endfacet + facet normal -0.932877 0.360196 0 + outer loop + vertex 38.2188 -29.6614 0 + vertex 36.8272 -33.2656 -3 + vertex 36.8272 -33.2656 0 + endloop + endfacet + facet normal -0.959728 0.28093 0 + outer loop + vertex 36.2918 -35.0946 -3 + vertex 36.8272 -33.2656 0 + vertex 36.8272 -33.2656 -3 + endloop + endfacet + facet normal -0.959728 0.28093 0 + outer loop + vertex 36.8272 -33.2656 0 + vertex 36.2918 -35.0946 -3 + vertex 36.2918 -35.0946 0 + endloop + endfacet + facet normal -0.988492 -0.151276 0 + outer loop + vertex 36.3972 -35.7834 -3 + vertex 36.2918 -35.0946 0 + vertex 36.2918 -35.0946 -3 + endloop + endfacet + facet normal -0.988492 -0.151276 0 + outer loop + vertex 36.2918 -35.0946 0 + vertex 36.3972 -35.7834 -3 + vertex 36.3972 -35.7834 0 + endloop + endfacet + facet normal -0.329373 -0.9442 0 + outer loop + vertex 36.3972 -35.7834 -3 + vertex 37.1913 -36.0604 0 + vertex 36.3972 -35.7834 0 + endloop + endfacet + facet normal -0.329373 -0.9442 -0 + outer loop + vertex 37.1913 -36.0604 0 + vertex 36.3972 -35.7834 -3 + vertex 37.1913 -36.0604 -3 + endloop + endfacet + facet normal -0.323821 -0.946118 0 + outer loop + vertex 37.1913 -36.0604 -3 + vertex 37.9618 -36.3241 0 + vertex 37.1913 -36.0604 0 + endloop + endfacet + facet normal -0.323821 -0.946118 -0 + outer loop + vertex 37.9618 -36.3241 0 + vertex 37.1913 -36.0604 -3 + vertex 37.9618 -36.3241 -3 + endloop + endfacet + facet normal -0.960551 -0.278105 0 + outer loop + vertex 38.113 -36.8464 -3 + vertex 37.9618 -36.3241 0 + vertex 37.9618 -36.3241 -3 + endloop + endfacet + facet normal -0.960551 -0.278105 0 + outer loop + vertex 37.9618 -36.3241 0 + vertex 38.113 -36.8464 -3 + vertex 38.113 -36.8464 0 + endloop + endfacet + facet normal -0.986742 0.162295 0 + outer loop + vertex 37.9939 -37.5705 -3 + vertex 38.113 -36.8464 0 + vertex 38.113 -36.8464 -3 + endloop + endfacet + facet normal -0.986742 0.162295 0 + outer loop + vertex 38.113 -36.8464 0 + vertex 37.9939 -37.5705 -3 + vertex 37.9939 -37.5705 0 + endloop + endfacet + facet normal -0.539022 0.842292 0 + outer loop + vertex 37.9939 -37.5705 -3 + vertex 37.381 -37.9628 0 + vertex 37.9939 -37.5705 0 + endloop + endfacet + facet normal -0.539022 0.842292 0 + outer loop + vertex 37.381 -37.9628 0 + vertex 37.9939 -37.5705 -3 + vertex 37.381 -37.9628 -3 + endloop + endfacet + facet normal -0.10763 0.994191 0 + outer loop + vertex 37.381 -37.9628 -3 + vertex 35.8907 -38.1241 0 + vertex 37.381 -37.9628 0 + endloop + endfacet + facet normal -0.10763 0.994191 0 + outer loop + vertex 35.8907 -38.1241 0 + vertex 37.381 -37.9628 -3 + vertex 35.8907 -38.1241 -3 + endloop + endfacet + facet normal -0.0113945 0.999935 0 + outer loop + vertex 35.8907 -38.1241 -3 + vertex 33.1396 -38.1555 0 + vertex 35.8907 -38.1241 0 + endloop + endfacet + facet normal -0.0113945 0.999935 0 + outer loop + vertex 33.1396 -38.1555 0 + vertex 35.8907 -38.1241 -3 + vertex 33.1396 -38.1555 -3 + endloop + endfacet + facet normal 0.0181925 0.999835 -0 + outer loop + vertex 33.1396 -38.1555 -3 + vertex 29.8074 -38.0948 0 + vertex 33.1396 -38.1555 0 + endloop + endfacet + facet normal 0.0181925 0.999835 0 + outer loop + vertex 29.8074 -38.0948 0 + vertex 33.1396 -38.1555 -3 + vertex 29.8074 -38.0948 -3 + endloop + endfacet + facet normal 0.170719 0.98532 -0 + outer loop + vertex 29.8074 -38.0948 -3 + vertex 28.6431 -37.8931 0 + vertex 29.8074 -38.0948 0 + endloop + endfacet + facet normal 0.170719 0.98532 0 + outer loop + vertex 28.6431 -37.8931 0 + vertex 29.8074 -38.0948 -3 + vertex 28.6431 -37.8931 -3 + endloop + endfacet + facet normal 0.913427 0.407002 0 + outer loop + vertex 28.6431 -37.8931 0 + vertex 28.4102 -37.3704 -3 + vertex 28.4102 -37.3704 0 + endloop + endfacet + facet normal 0.913427 0.407002 0 + outer loop + vertex 28.4102 -37.3704 -3 + vertex 28.6431 -37.8931 0 + vertex 28.6431 -37.8931 -3 + endloop + endfacet + facet normal 0.965523 -0.260316 0 + outer loop + vertex 28.4102 -37.3704 0 + vertex 28.553 -36.8405 -3 + vertex 28.553 -36.8405 0 + endloop + endfacet + facet normal 0.965523 -0.260316 0 + outer loop + vertex 28.553 -36.8405 -3 + vertex 28.4102 -37.3704 0 + vertex 28.4102 -37.3704 -3 + endloop + endfacet + facet normal 0.697974 -0.716123 0 + outer loop + vertex 28.553 -36.8405 -3 + vertex 29.0223 -36.3831 0 + vertex 28.553 -36.8405 0 + endloop + endfacet + facet normal 0.697974 -0.716123 0 + outer loop + vertex 29.0223 -36.3831 0 + vertex 28.553 -36.8405 -3 + vertex 29.0223 -36.3831 -3 + endloop + endfacet + facet normal 0.378617 -0.925554 0 + outer loop + vertex 29.0223 -36.3831 -3 + vertex 29.7686 -36.0779 0 + vertex 29.0223 -36.3831 0 + endloop + endfacet + facet normal 0.378617 -0.925554 0 + outer loop + vertex 29.7686 -36.0779 0 + vertex 29.0223 -36.3831 -3 + vertex 29.7686 -36.0779 -3 + endloop + endfacet + facet normal 0.28314 -0.959079 0 + outer loop + vertex 29.7686 -36.0779 -3 + vertex 30.8837 -35.7486 0 + vertex 29.7686 -36.0779 0 + endloop + endfacet + facet normal 0.28314 -0.959079 0 + outer loop + vertex 30.8837 -35.7486 0 + vertex 29.7686 -36.0779 -3 + vertex 30.8837 -35.7486 -3 + endloop + endfacet + facet normal 0.670445 -0.741959 0 + outer loop + vertex 30.8837 -35.7486 -3 + vertex 31.6707 -35.0376 0 + vertex 30.8837 -35.7486 0 + endloop + endfacet + facet normal 0.670445 -0.741959 0 + outer loop + vertex 31.6707 -35.0376 0 + vertex 30.8837 -35.7486 -3 + vertex 31.6707 -35.0376 -3 + endloop + endfacet + facet normal 0.889774 -0.456402 0 + outer loop + vertex 31.6707 -35.0376 0 + vertex 32.5255 -33.371 -3 + vertex 32.5255 -33.371 0 + endloop + endfacet + facet normal 0.889774 -0.456402 0 + outer loop + vertex 32.5255 -33.371 -3 + vertex 31.6707 -35.0376 0 + vertex 31.6707 -35.0376 -3 + endloop + endfacet + facet normal 0.924374 -0.381489 0 + outer loop + vertex 32.5255 -33.371 0 + vertex 33.8444 -30.1753 -3 + vertex 33.8444 -30.1753 0 + endloop + endfacet + facet normal 0.924374 -0.381489 0 + outer loop + vertex 33.8444 -30.1753 -3 + vertex 32.5255 -33.371 0 + vertex 32.5255 -33.371 -3 + endloop + endfacet + facet normal 0.926524 -0.376236 0 + outer loop + vertex 33.8444 -30.1753 0 + vertex 35.3305 -26.5156 -3 + vertex 35.3305 -26.5156 0 + endloop + endfacet + facet normal 0.926524 -0.376236 0 + outer loop + vertex 35.3305 -26.5156 -3 + vertex 33.8444 -30.1753 0 + vertex 33.8444 -30.1753 -3 + endloop + endfacet + facet normal 0.946541 -0.322585 0 + outer loop + vertex 35.3305 -26.5156 0 + vertex 36.2859 -23.7121 -3 + vertex 36.2859 -23.7121 0 + endloop + endfacet + facet normal 0.946541 -0.322585 0 + outer loop + vertex 36.2859 -23.7121 -3 + vertex 35.3305 -26.5156 0 + vertex 35.3305 -26.5156 -3 + endloop + endfacet + facet normal 0.99651 -0.0834774 0 + outer loop + vertex 36.2859 -23.7121 0 + vertex 36.3422 -23.0402 -3 + vertex 36.3422 -23.0402 0 + endloop + endfacet + facet normal 0.99651 -0.0834774 0 + outer loop + vertex 36.3422 -23.0402 -3 + vertex 36.2859 -23.7121 0 + vertex 36.2859 -23.7121 -3 + endloop + endfacet + facet normal 0.457043 0.889445 -0 + outer loop + vertex 36.3422 -23.0402 -3 + vertex 36.104 -22.9178 0 + vertex 36.3422 -23.0402 0 + endloop + endfacet + facet normal 0.457043 0.889445 0 + outer loop + vertex 36.104 -22.9178 0 + vertex 36.3422 -23.0402 -3 + vertex 36.104 -22.9178 -3 + endloop + endfacet + facet normal -0.010303 0.999947 0 + outer loop + vertex 36.104 -22.9178 -3 + vertex 35.2001 -22.9271 0 + vertex 36.104 -22.9178 0 + endloop + endfacet + facet normal -0.010303 0.999947 0 + outer loop + vertex 35.2001 -22.9271 0 + vertex 36.104 -22.9178 -3 + vertex 35.2001 -22.9271 -3 + endloop + endfacet + facet normal 0.419058 0.907959 -0 + outer loop + vertex 35.2001 -22.9271 -3 + vertex 34.7441 -22.7166 0 + vertex 35.2001 -22.9271 0 + endloop + endfacet + facet normal 0.419058 0.907959 0 + outer loop + vertex 34.7441 -22.7166 0 + vertex 35.2001 -22.9271 -3 + vertex 34.7441 -22.7166 -3 + endloop + endfacet + facet normal 0.959742 0.280882 0 + outer loop + vertex 34.7441 -22.7166 0 + vertex 34.62 -22.2927 -3 + vertex 34.62 -22.2927 0 + endloop + endfacet + facet normal 0.959742 0.280882 0 + outer loop + vertex 34.62 -22.2927 -3 + vertex 34.7441 -22.7166 0 + vertex 34.7441 -22.7166 -3 + endloop + endfacet + facet normal 0.94057 -0.3396 0 + outer loop + vertex 34.62 -22.2927 0 + vertex 34.9156 -21.474 -3 + vertex 34.9156 -21.474 0 + endloop + endfacet + facet normal 0.94057 -0.3396 0 + outer loop + vertex 34.9156 -21.474 -3 + vertex 34.62 -22.2927 0 + vertex 34.62 -22.2927 -3 + endloop + endfacet + facet normal 0.664894 -0.746938 0 + outer loop + vertex 34.9156 -21.474 -3 + vertex 35.2187 -21.2043 0 + vertex 34.9156 -21.474 0 + endloop + endfacet + facet normal 0.664894 -0.746938 0 + outer loop + vertex 35.2187 -21.2043 0 + vertex 34.9156 -21.474 -3 + vertex 35.2187 -21.2043 -3 + endloop + endfacet + facet normal 0.282474 -0.959275 0 + outer loop + vertex 35.2187 -21.2043 -3 + vertex 35.5661 -21.102 0 + vertex 35.2187 -21.2043 0 + endloop + endfacet + facet normal 0.282474 -0.959275 0 + outer loop + vertex 35.5661 -21.102 0 + vertex 35.2187 -21.2043 -3 + vertex 35.5661 -21.102 -3 + endloop + endfacet + facet normal 0.319916 -0.947446 0 + outer loop + vertex 35.5661 -21.102 -3 + vertex 38.4798 -20.1181 0 + vertex 35.5661 -21.102 0 + endloop + endfacet + facet normal 0.319916 -0.947446 0 + outer loop + vertex 38.4798 -20.1181 0 + vertex 35.5661 -21.102 -3 + vertex 38.4798 -20.1181 -3 + endloop + endfacet + facet normal 0.306814 -0.951769 0 + outer loop + vertex 38.4798 -20.1181 -3 + vertex 41.5319 -19.1343 0 + vertex 38.4798 -20.1181 0 + endloop + endfacet + facet normal 0.306814 -0.951769 0 + outer loop + vertex 41.5319 -19.1343 0 + vertex 38.4798 -20.1181 -3 + vertex 41.5319 -19.1343 -3 + endloop + endfacet + facet normal -0.240332 -0.970691 0 + outer loop + vertex 41.5319 -19.1343 -3 + vertex 41.8934 -19.2238 0 + vertex 41.5319 -19.1343 0 + endloop + endfacet + facet normal -0.240332 -0.970691 -0 + outer loop + vertex 41.8934 -19.2238 0 + vertex 41.5319 -19.1343 -3 + vertex 41.8934 -19.2238 -3 + endloop + endfacet + facet normal -0.766739 -0.641959 0 + outer loop + vertex 42.1032 -19.4743 -3 + vertex 41.8934 -19.2238 0 + vertex 41.8934 -19.2238 -3 + endloop + endfacet + facet normal -0.766739 -0.641959 0 + outer loop + vertex 41.8934 -19.2238 0 + vertex 42.1032 -19.4743 -3 + vertex 42.1032 -19.4743 0 + endloop + endfacet + facet normal -0.995926 0.090175 0 + outer loop + vertex 42.0238 -20.3507 -3 + vertex 42.1032 -19.4743 0 + vertex 42.1032 -19.4743 -3 + endloop + endfacet + facet normal -0.995926 0.090175 0 + outer loop + vertex 42.1032 -19.4743 0 + vertex 42.0238 -20.3507 -3 + vertex 42.0238 -20.3507 0 + endloop + endfacet + facet normal -0.949137 0.314864 0 + outer loop + vertex 41.8981 -20.7296 -3 + vertex 42.0238 -20.3507 0 + vertex 42.0238 -20.3507 -3 + endloop + endfacet + facet normal -0.949137 0.314864 0 + outer loop + vertex 42.0238 -20.3507 0 + vertex 41.8981 -20.7296 -3 + vertex 41.8981 -20.7296 0 + endloop + endfacet + facet normal -0.846258 -0.532773 0 + outer loop + vertex 41.971 -20.8453 -3 + vertex 41.8981 -20.7296 0 + vertex 41.8981 -20.7296 -3 + endloop + endfacet + facet normal -0.846258 -0.532773 0 + outer loop + vertex 41.8981 -20.7296 0 + vertex 41.971 -20.8453 -3 + vertex 41.971 -20.8453 0 + endloop + endfacet + facet normal 0.512131 -0.858907 0 + outer loop + vertex 41.971 -20.8453 -3 + vertex 42.943 -20.2657 0 + vertex 41.971 -20.8453 0 + endloop + endfacet + facet normal 0.512131 -0.858907 0 + outer loop + vertex 42.943 -20.2657 0 + vertex 41.971 -20.8453 -3 + vertex 42.943 -20.2657 -3 + endloop + endfacet + facet normal 0.474768 -0.880111 0 + outer loop + vertex 42.943 -20.2657 -3 + vertex 44.5909 -19.3768 0 + vertex 42.943 -20.2657 0 + endloop + endfacet + facet normal 0.474768 -0.880111 0 + outer loop + vertex 44.5909 -19.3768 0 + vertex 42.943 -20.2657 -3 + vertex 44.5909 -19.3768 -3 + endloop + endfacet + facet normal 0.143592 -0.989637 0 + outer loop + vertex 44.5909 -19.3768 -3 + vertex 46.2623 -19.1343 0 + vertex 44.5909 -19.3768 0 + endloop + endfacet + facet normal 0.143592 -0.989637 0 + outer loop + vertex 46.2623 -19.1343 0 + vertex 44.5909 -19.3768 -3 + vertex 46.2623 -19.1343 -3 + endloop + endfacet + facet normal -0.096262 -0.995356 0 + outer loop + vertex 46.2623 -19.1343 -3 + vertex 47.2139 -19.2263 0 + vertex 46.2623 -19.1343 0 + endloop + endfacet + facet normal -0.096262 -0.995356 -0 + outer loop + vertex 47.2139 -19.2263 0 + vertex 46.2623 -19.1343 -3 + vertex 47.2139 -19.2263 -3 + endloop + endfacet + facet normal -0.989139 0.146981 0 + outer loop + vertex 5.19939 38.083 -3 + vertex 5.25321 38.4452 0 + vertex 5.25321 38.4452 -3 + endloop + endfacet + facet normal -0.989139 0.146981 0 + outer loop + vertex 5.25321 38.4452 0 + vertex 5.19939 38.083 -3 + vertex 5.19939 38.083 0 + endloop + endfacet + facet normal -0.909259 0.41623 0 + outer loop + vertex 4.72188 37.0399 -3 + vertex 5.19939 38.083 0 + vertex 5.19939 38.083 -3 + endloop + endfacet + facet normal -0.909259 0.41623 0 + outer loop + vertex 5.19939 38.083 0 + vertex 4.72188 37.0399 -3 + vertex 4.72188 37.0399 0 + endloop + endfacet + facet normal -0.923768 0.382952 0 + outer loop + vertex 4.30515 36.0346 -3 + vertex 4.72188 37.0399 0 + vertex 4.72188 37.0399 -3 + endloop + endfacet + facet normal -0.923768 0.382952 0 + outer loop + vertex 4.72188 37.0399 0 + vertex 4.30515 36.0346 -3 + vertex 4.30515 36.0346 0 + endloop + endfacet + facet normal -0.970112 0.242658 0 + outer loop + vertex 3.93589 34.5584 -3 + vertex 4.30515 36.0346 0 + vertex 4.30515 36.0346 -3 + endloop + endfacet + facet normal -0.970112 0.242658 0 + outer loop + vertex 4.30515 36.0346 0 + vertex 3.93589 34.5584 -3 + vertex 3.93589 34.5584 0 + endloop + endfacet + facet normal -0.993642 0.112587 0 + outer loop + vertex 3.57109 31.3388 -3 + vertex 3.93589 34.5584 0 + vertex 3.93589 34.5584 -3 + endloop + endfacet + facet normal -0.993642 0.112587 0 + outer loop + vertex 3.93589 34.5584 0 + vertex 3.57109 31.3388 -3 + vertex 3.57109 31.3388 0 + endloop + endfacet + facet normal -0.99786 -0.0653884 0 + outer loop + vertex 3.67763 29.7129 -3 + vertex 3.57109 31.3388 0 + vertex 3.57109 31.3388 -3 + endloop + endfacet + facet normal -0.99786 -0.0653884 0 + outer loop + vertex 3.57109 31.3388 0 + vertex 3.67763 29.7129 -3 + vertex 3.67763 29.7129 0 + endloop + endfacet + facet normal -0.893644 -0.448776 0 + outer loop + vertex 4.3138 28.4461 -3 + vertex 3.67763 29.7129 0 + vertex 3.67763 29.7129 -3 + endloop + endfacet + facet normal -0.893644 -0.448776 0 + outer loop + vertex 3.67763 29.7129 0 + vertex 4.3138 28.4461 -3 + vertex 4.3138 28.4461 0 + endloop + endfacet + facet normal -0.787428 -0.616407 0 + outer loop + vertex 5.72413 26.6445 -3 + vertex 4.3138 28.4461 0 + vertex 4.3138 28.4461 -3 + endloop + endfacet + facet normal -0.787428 -0.616407 0 + outer loop + vertex 4.3138 28.4461 0 + vertex 5.72413 26.6445 -3 + vertex 5.72413 26.6445 0 + endloop + endfacet + facet normal -0.565537 -0.824723 0 + outer loop + vertex 5.72413 26.6445 -3 + vertex 6.4022 26.1795 0 + vertex 5.72413 26.6445 0 + endloop + endfacet + facet normal -0.565537 -0.824723 -0 + outer loop + vertex 6.4022 26.1795 0 + vertex 5.72413 26.6445 -3 + vertex 6.4022 26.1795 -3 + endloop + endfacet + facet normal -0.296038 -0.955176 0 + outer loop + vertex 6.4022 26.1795 -3 + vertex 7.11433 25.9588 0 + vertex 6.4022 26.1795 0 + endloop + endfacet + facet normal -0.296038 -0.955176 -0 + outer loop + vertex 7.11433 25.9588 0 + vertex 6.4022 26.1795 -3 + vertex 7.11433 25.9588 -3 + endloop + endfacet + facet normal -0.249452 -0.968387 0 + outer loop + vertex 7.11433 25.9588 -3 + vertex 7.91411 25.7528 0 + vertex 7.11433 25.9588 0 + endloop + endfacet + facet normal -0.249452 -0.968387 -0 + outer loop + vertex 7.91411 25.7528 0 + vertex 7.11433 25.9588 -3 + vertex 7.91411 25.7528 -3 + endloop + endfacet + facet normal -0.590139 -0.807301 0 + outer loop + vertex 7.91411 25.7528 -3 + vertex 8.51885 25.3107 0 + vertex 7.91411 25.7528 0 + endloop + endfacet + facet normal -0.590139 -0.807301 -0 + outer loop + vertex 8.51885 25.3107 0 + vertex 7.91411 25.7528 -3 + vertex 8.51885 25.3107 -3 + endloop + endfacet + facet normal -0.834337 -0.551255 0 + outer loop + vertex 9.07032 24.476 -3 + vertex 8.51885 25.3107 0 + vertex 8.51885 25.3107 -3 + endloop + endfacet + facet normal -0.834337 -0.551255 0 + outer loop + vertex 8.51885 25.3107 0 + vertex 9.07032 24.476 -3 + vertex 9.07032 24.476 0 + endloop + endfacet + facet normal -0.907633 -0.419764 0 + outer loop + vertex 9.71033 23.0922 -3 + vertex 9.07032 24.476 0 + vertex 9.07032 24.476 -3 + endloop + endfacet + facet normal -0.907633 -0.419764 0 + outer loop + vertex 9.07032 24.476 0 + vertex 9.71033 23.0922 -3 + vertex 9.71033 23.0922 0 + endloop + endfacet + facet normal -0.895482 -0.445097 0 + outer loop + vertex 10.9729 20.5521 -3 + vertex 9.71033 23.0922 0 + vertex 9.71033 23.0922 -3 + endloop + endfacet + facet normal -0.895482 -0.445097 0 + outer loop + vertex 9.71033 23.0922 0 + vertex 10.9729 20.5521 -3 + vertex 10.9729 20.5521 0 + endloop + endfacet + facet normal -0.741992 -0.670408 0 + outer loop + vertex 12.6982 18.6425 -3 + vertex 10.9729 20.5521 0 + vertex 10.9729 20.5521 -3 + endloop + endfacet + facet normal -0.741992 -0.670408 0 + outer loop + vertex 10.9729 20.5521 0 + vertex 12.6982 18.6425 -3 + vertex 12.6982 18.6425 0 + endloop + endfacet + facet normal -0.66692 -0.745129 0 + outer loop + vertex 12.6982 18.6425 -3 + vertex 13.99 17.4864 0 + vertex 12.6982 18.6425 0 + endloop + endfacet + facet normal -0.66692 -0.745129 -0 + outer loop + vertex 13.99 17.4864 0 + vertex 12.6982 18.6425 -3 + vertex 13.99 17.4864 -3 + endloop + endfacet + facet normal -0.579406 -0.815039 0 + outer loop + vertex 13.99 17.4864 -3 + vertex 15.2045 16.623 0 + vertex 13.99 17.4864 0 + endloop + endfacet + facet normal -0.579406 -0.815039 -0 + outer loop + vertex 15.2045 16.623 0 + vertex 13.99 17.4864 -3 + vertex 15.2045 16.623 -3 + endloop + endfacet + facet normal -0.462357 -0.886694 0 + outer loop + vertex 15.2045 16.623 -3 + vertex 16.5954 15.8977 0 + vertex 15.2045 16.623 0 + endloop + endfacet + facet normal -0.462357 -0.886694 -0 + outer loop + vertex 16.5954 15.8977 0 + vertex 15.2045 16.623 -3 + vertex 16.5954 15.8977 -3 + endloop + endfacet + facet normal -0.377272 -0.926103 0 + outer loop + vertex 16.5954 15.8977 -3 + vertex 18.4164 15.1559 0 + vertex 16.5954 15.8977 0 + endloop + endfacet + facet normal -0.377272 -0.926103 -0 + outer loop + vertex 18.4164 15.1559 0 + vertex 16.5954 15.8977 -3 + vertex 18.4164 15.1559 -3 + endloop + endfacet + facet normal -0.305414 -0.95222 0 + outer loop + vertex 18.4164 15.1559 -3 + vertex 20.0668 14.6265 0 + vertex 18.4164 15.1559 0 + endloop + endfacet + facet normal -0.305414 -0.95222 -0 + outer loop + vertex 20.0668 14.6265 0 + vertex 18.4164 15.1559 -3 + vertex 20.0668 14.6265 -3 + endloop + endfacet + facet normal 0.198377 -0.980126 0 + outer loop + vertex 20.0668 14.6265 -3 + vertex 21.1653 14.8489 0 + vertex 20.0668 14.6265 0 + endloop + endfacet + facet normal 0.198377 -0.980126 0 + outer loop + vertex 21.1653 14.8489 0 + vertex 20.0668 14.6265 -3 + vertex 21.1653 14.8489 -3 + endloop + endfacet + facet normal 0.403705 -0.914889 0 + outer loop + vertex 21.1653 14.8489 -3 + vertex 23.3802 15.8262 0 + vertex 21.1653 14.8489 0 + endloop + endfacet + facet normal 0.403705 -0.914889 0 + outer loop + vertex 23.3802 15.8262 0 + vertex 21.1653 14.8489 -3 + vertex 23.3802 15.8262 -3 + endloop + endfacet + facet normal 0.513821 -0.857898 0 + outer loop + vertex 23.3802 15.8262 -3 + vertex 24.7931 16.6725 0 + vertex 23.3802 15.8262 0 + endloop + endfacet + facet normal 0.513821 -0.857898 0 + outer loop + vertex 24.7931 16.6725 0 + vertex 23.3802 15.8262 -3 + vertex 24.7931 16.6725 -3 + endloop + endfacet + facet normal 0.988574 0.150735 0 + outer loop + vertex 24.7931 16.6725 0 + vertex 24.7174 17.1695 -3 + vertex 24.7174 17.1695 0 + endloop + endfacet + facet normal 0.988574 0.150735 0 + outer loop + vertex 24.7174 17.1695 -3 + vertex 24.7931 16.6725 0 + vertex 24.7931 16.6725 -3 + endloop + endfacet + facet normal 0.409608 0.912261 -0 + outer loop + vertex 24.7174 17.1695 -3 + vertex 24.1542 17.4223 0 + vertex 24.7174 17.1695 0 + endloop + endfacet + facet normal 0.409608 0.912261 0 + outer loop + vertex 24.1542 17.4223 0 + vertex 24.7174 17.1695 -3 + vertex 24.1542 17.4223 -3 + endloop + endfacet + facet normal 0.049214 0.998788 -0 + outer loop + vertex 24.1542 17.4223 -3 + vertex 22.547 17.5015 0 + vertex 24.1542 17.4223 0 + endloop + endfacet + facet normal 0.049214 0.998788 0 + outer loop + vertex 22.547 17.5015 0 + vertex 24.1542 17.4223 -3 + vertex 22.547 17.5015 -3 + endloop + endfacet + facet normal 0.0234404 0.999725 -0 + outer loop + vertex 22.547 17.5015 -3 + vertex 20.2159 17.5562 0 + vertex 22.547 17.5015 0 + endloop + endfacet + facet normal 0.0234404 0.999725 0 + outer loop + vertex 20.2159 17.5562 0 + vertex 22.547 17.5015 -3 + vertex 20.2159 17.5562 -3 + endloop + endfacet + facet normal 0.471751 0.881732 -0 + outer loop + vertex 20.2159 17.5562 -3 + vertex 19.8437 17.7553 0 + vertex 20.2159 17.5562 0 + endloop + endfacet + facet normal 0.471751 0.881732 0 + outer loop + vertex 19.8437 17.7553 0 + vertex 20.2159 17.5562 -3 + vertex 19.8437 17.7553 -3 + endloop + endfacet + facet normal 0.853692 0.520778 0 + outer loop + vertex 19.8437 17.7553 0 + vertex 19.5351 18.2611 -3 + vertex 19.5351 18.2611 0 + endloop + endfacet + facet normal 0.853692 0.520778 0 + outer loop + vertex 19.5351 18.2611 -3 + vertex 19.8437 17.7553 0 + vertex 19.8437 17.7553 -3 + endloop + endfacet + facet normal 0.975799 0.21867 0 + outer loop + vertex 19.5351 18.2611 0 + vertex 19.0948 20.2262 -3 + vertex 19.0948 20.2262 0 + endloop + endfacet + facet normal 0.975799 0.21867 0 + outer loop + vertex 19.0948 20.2262 -3 + vertex 19.5351 18.2611 0 + vertex 19.5351 18.2611 -3 + endloop + endfacet + facet normal 0.973279 0.229626 0 + outer loop + vertex 19.0948 20.2262 0 + vertex 18.6529 22.0992 -3 + vertex 18.6529 22.0992 0 + endloop + endfacet + facet normal 0.973279 0.229626 0 + outer loop + vertex 18.6529 22.0992 -3 + vertex 19.0948 20.2262 0 + vertex 19.0948 20.2262 -3 + endloop + endfacet + facet normal 0.439505 0.89824 -0 + outer loop + vertex 18.6529 22.0992 -3 + vertex 17.155 22.8321 0 + vertex 18.6529 22.0992 0 + endloop + endfacet + facet normal 0.439505 0.89824 0 + outer loop + vertex 17.155 22.8321 0 + vertex 18.6529 22.0992 -3 + vertex 17.155 22.8321 -3 + endloop + endfacet + facet normal 0.375086 0.92699 -0 + outer loop + vertex 17.155 22.8321 -3 + vertex 15.5055 23.4995 0 + vertex 17.155 22.8321 0 + endloop + endfacet + facet normal 0.375086 0.92699 0 + outer loop + vertex 15.5055 23.4995 0 + vertex 17.155 22.8321 -3 + vertex 15.5055 23.4995 -3 + endloop + endfacet + facet normal 0.401684 0.915778 -0 + outer loop + vertex 15.5055 23.4995 -3 + vertex 14.0164 24.1527 0 + vertex 15.5055 23.4995 0 + endloop + endfacet + facet normal 0.401684 0.915778 0 + outer loop + vertex 14.0164 24.1527 0 + vertex 15.5055 23.4995 -3 + vertex 14.0164 24.1527 -3 + endloop + endfacet + facet normal 0.516309 0.856402 -0 + outer loop + vertex 14.0164 24.1527 -3 + vertex 13.0733 24.7212 0 + vertex 14.0164 24.1527 0 + endloop + endfacet + facet normal 0.516309 0.856402 0 + outer loop + vertex 13.0733 24.7212 0 + vertex 14.0164 24.1527 -3 + vertex 13.0733 24.7212 -3 + endloop + endfacet + facet normal 0.678054 0.735012 -0 + outer loop + vertex 13.0733 24.7212 -3 + vertex 12.1975 25.5292 0 + vertex 13.0733 24.7212 0 + endloop + endfacet + facet normal 0.678054 0.735012 0 + outer loop + vertex 12.1975 25.5292 0 + vertex 13.0733 24.7212 -3 + vertex 12.1975 25.5292 -3 + endloop + endfacet + facet normal 0.798708 0.601719 0 + outer loop + vertex 12.1975 25.5292 0 + vertex 11.5037 26.4501 -3 + vertex 11.5037 26.4501 0 + endloop + endfacet + facet normal 0.798708 0.601719 0 + outer loop + vertex 11.5037 26.4501 -3 + vertex 12.1975 25.5292 0 + vertex 12.1975 25.5292 -3 + endloop + endfacet + facet normal 0.916155 0.400824 0 + outer loop + vertex 11.5037 26.4501 0 + vertex 11.1066 27.3577 -3 + vertex 11.1066 27.3577 0 + endloop + endfacet + facet normal 0.916155 0.400824 0 + outer loop + vertex 11.1066 27.3577 -3 + vertex 11.5037 26.4501 0 + vertex 11.5037 26.4501 -3 + endloop + endfacet + facet normal 0.997988 0.0634007 0 + outer loop + vertex 11.1066 27.3577 0 + vertex 11.0411 28.3898 -3 + vertex 11.0411 28.3898 0 + endloop + endfacet + facet normal 0.997988 0.0634007 0 + outer loop + vertex 11.0411 28.3898 -3 + vertex 11.1066 27.3577 0 + vertex 11.1066 27.3577 -3 + endloop + endfacet + facet normal 0.985212 -0.171342 0 + outer loop + vertex 11.0411 28.3898 0 + vertex 11.2319 29.4873 -3 + vertex 11.2319 29.4873 0 + endloop + endfacet + facet normal 0.985212 -0.171342 0 + outer loop + vertex 11.2319 29.4873 -3 + vertex 11.0411 28.3898 0 + vertex 11.0411 28.3898 -3 + endloop + endfacet + facet normal 0.92237 -0.386308 0 + outer loop + vertex 11.2319 29.4873 0 + vertex 11.5971 30.3591 -3 + vertex 11.5971 30.3591 0 + endloop + endfacet + facet normal 0.92237 -0.386308 0 + outer loop + vertex 11.5971 30.3591 -3 + vertex 11.2319 29.4873 0 + vertex 11.2319 29.4873 -3 + endloop + endfacet + facet normal 0.613523 -0.789677 0 + outer loop + vertex 11.5971 30.3591 -3 + vertex 12.0544 30.7144 0 + vertex 11.5971 30.3591 0 + endloop + endfacet + facet normal 0.613523 -0.789677 0 + outer loop + vertex 12.0544 30.7144 0 + vertex 11.5971 30.3591 -3 + vertex 12.0544 30.7144 -3 + endloop + endfacet + facet normal -0.632498 -0.774562 0 + outer loop + vertex 12.0544 30.7144 -3 + vertex 12.2907 30.5214 0 + vertex 12.0544 30.7144 0 + endloop + endfacet + facet normal -0.632498 -0.774562 -0 + outer loop + vertex 12.2907 30.5214 0 + vertex 12.0544 30.7144 -3 + vertex 12.2907 30.5214 -3 + endloop + endfacet + facet normal -0.906769 0.421628 0 + outer loop + vertex 12.0187 29.9363 -3 + vertex 12.2907 30.5214 0 + vertex 12.2907 30.5214 -3 + endloop + endfacet + facet normal -0.906769 0.421628 0 + outer loop + vertex 12.2907 30.5214 0 + vertex 12.0187 29.9363 -3 + vertex 12.0187 29.9363 0 + endloop + endfacet + facet normal -0.946212 0.323547 0 + outer loop + vertex 11.8088 29.3224 -3 + vertex 12.0187 29.9363 0 + vertex 12.0187 29.9363 -3 + endloop + endfacet + facet normal -0.946212 0.323547 0 + outer loop + vertex 12.0187 29.9363 0 + vertex 11.8088 29.3224 -3 + vertex 11.8088 29.3224 0 + endloop + endfacet + facet normal -0.996661 0.0816499 0 + outer loop + vertex 11.7374 28.4518 -3 + vertex 11.8088 29.3224 0 + vertex 11.8088 29.3224 -3 + endloop + endfacet + facet normal -0.996661 0.0816499 0 + outer loop + vertex 11.8088 29.3224 0 + vertex 11.7374 28.4518 -3 + vertex 11.7374 28.4518 0 + endloop + endfacet + facet normal -0.997288 -0.0735994 0 + outer loop + vertex 11.8052 27.5343 -3 + vertex 11.7374 28.4518 0 + vertex 11.7374 28.4518 -3 + endloop + endfacet + facet normal -0.997288 -0.0735994 0 + outer loop + vertex 11.7374 28.4518 0 + vertex 11.8052 27.5343 -3 + vertex 11.8052 27.5343 0 + endloop + endfacet + facet normal -0.964338 -0.264675 0 + outer loop + vertex 12.0123 26.7794 -3 + vertex 11.8052 27.5343 0 + vertex 11.8052 27.5343 -3 + endloop + endfacet + facet normal -0.964338 -0.264675 0 + outer loop + vertex 11.8052 27.5343 0 + vertex 12.0123 26.7794 -3 + vertex 12.0123 26.7794 0 + endloop + endfacet + facet normal -0.835126 -0.550059 0 + outer loop + vertex 12.5486 25.9653 -3 + vertex 12.0123 26.7794 0 + vertex 12.0123 26.7794 -3 + endloop + endfacet + facet normal -0.835126 -0.550059 0 + outer loop + vertex 12.0123 26.7794 0 + vertex 12.5486 25.9653 -3 + vertex 12.5486 25.9653 0 + endloop + endfacet + facet normal -0.606684 -0.794943 0 + outer loop + vertex 12.5486 25.9653 -3 + vertex 13.4969 25.2416 0 + vertex 12.5486 25.9653 0 + endloop + endfacet + facet normal -0.606684 -0.794943 -0 + outer loop + vertex 13.4969 25.2416 0 + vertex 12.5486 25.9653 -3 + vertex 13.4969 25.2416 -3 + endloop + endfacet + facet normal -0.436683 -0.899615 0 + outer loop + vertex 13.4969 25.2416 -3 + vertex 15.1211 24.4531 0 + vertex 13.4969 25.2416 0 + endloop + endfacet + facet normal -0.436683 -0.899615 -0 + outer loop + vertex 15.1211 24.4531 0 + vertex 13.4969 25.2416 -3 + vertex 15.1211 24.4531 -3 + endloop + endfacet + facet normal -0.365946 -0.930636 0 + outer loop + vertex 15.1211 24.4531 -3 + vertex 17.6852 23.4449 0 + vertex 15.1211 24.4531 0 + endloop + endfacet + facet normal -0.365946 -0.930636 -0 + outer loop + vertex 17.6852 23.4449 0 + vertex 15.1211 24.4531 -3 + vertex 17.6852 23.4449 -3 + endloop + endfacet + facet normal -0.54663 -0.837374 0 + outer loop + vertex 17.6852 23.4449 -3 + vertex 18.9185 22.6398 0 + vertex 17.6852 23.4449 0 + endloop + endfacet + facet normal -0.54663 -0.837374 -0 + outer loop + vertex 18.9185 22.6398 0 + vertex 17.6852 23.4449 -3 + vertex 18.9185 22.6398 -3 + endloop + endfacet + facet normal -0.808126 -0.58901 0 + outer loop + vertex 19.4421 21.9215 -3 + vertex 18.9185 22.6398 0 + vertex 18.9185 22.6398 -3 + endloop + endfacet + facet normal -0.808126 -0.58901 0 + outer loop + vertex 18.9185 22.6398 0 + vertex 19.4421 21.9215 -3 + vertex 19.4421 21.9215 0 + endloop + endfacet + facet normal -0.985617 -0.168992 0 + outer loop + vertex 19.6596 20.6529 -3 + vertex 19.4421 21.9215 0 + vertex 19.4421 21.9215 -3 + endloop + endfacet + facet normal -0.985617 -0.168992 0 + outer loop + vertex 19.4421 21.9215 0 + vertex 19.6596 20.6529 -3 + vertex 19.6596 20.6529 0 + endloop + endfacet + facet normal -0.991076 -0.133297 0 + outer loop + vertex 19.8405 19.3078 -3 + vertex 19.6596 20.6529 0 + vertex 19.6596 20.6529 -3 + endloop + endfacet + facet normal -0.991076 -0.133297 0 + outer loop + vertex 19.6596 20.6529 0 + vertex 19.8405 19.3078 -3 + vertex 19.8405 19.3078 0 + endloop + endfacet + facet normal -0.89371 -0.448645 0 + outer loop + vertex 20.2006 18.5903 -3 + vertex 19.8405 19.3078 0 + vertex 19.8405 19.3078 -3 + endloop + endfacet + facet normal -0.89371 -0.448645 0 + outer loop + vertex 19.8405 19.3078 0 + vertex 20.2006 18.5903 -3 + vertex 20.2006 18.5903 0 + endloop + endfacet + facet normal -0.353154 -0.935565 0 + outer loop + vertex 20.2006 18.5903 -3 + vertex 20.9591 18.304 0 + vertex 20.2006 18.5903 0 + endloop + endfacet + facet normal -0.353154 -0.935565 -0 + outer loop + vertex 20.9591 18.304 0 + vertex 20.2006 18.5903 -3 + vertex 20.9591 18.304 -3 + endloop + endfacet + facet normal -0.0375868 -0.999293 0 + outer loop + vertex 20.9591 18.304 -3 + vertex 22.335 18.2522 0 + vertex 20.9591 18.304 0 + endloop + endfacet + facet normal -0.0375868 -0.999293 -0 + outer loop + vertex 22.335 18.2522 0 + vertex 20.9591 18.304 -3 + vertex 22.335 18.2522 -3 + endloop + endfacet + facet normal -0.0902677 -0.995918 0 + outer loop + vertex 22.335 18.2522 -3 + vertex 24.5942 18.0475 0 + vertex 22.335 18.2522 0 + endloop + endfacet + facet normal -0.0902677 -0.995918 -0 + outer loop + vertex 24.5942 18.0475 0 + vertex 22.335 18.2522 -3 + vertex 24.5942 18.0475 -3 + endloop + endfacet + facet normal -0.485131 -0.874442 0 + outer loop + vertex 24.5942 18.0475 -3 + vertex 25.1513 17.7384 0 + vertex 24.5942 18.0475 0 + endloop + endfacet + facet normal -0.485131 -0.874442 -0 + outer loop + vertex 25.1513 17.7384 0 + vertex 24.5942 18.0475 -3 + vertex 25.1513 17.7384 -3 + endloop + endfacet + facet normal -0.837387 -0.54661 0 + outer loop + vertex 25.4738 17.2443 -3 + vertex 25.1513 17.7384 0 + vertex 25.1513 17.7384 -3 + endloop + endfacet + facet normal -0.837387 -0.54661 0 + outer loop + vertex 25.1513 17.7384 0 + vertex 25.4738 17.2443 -3 + vertex 25.4738 17.2443 0 + endloop + endfacet + facet normal -0.875441 -0.483325 0 + outer loop + vertex 25.704 16.8274 -3 + vertex 25.4738 17.2443 0 + vertex 25.4738 17.2443 -3 + endloop + endfacet + facet normal -0.875441 -0.483325 0 + outer loop + vertex 25.4738 17.2443 0 + vertex 25.704 16.8274 -3 + vertex 25.704 16.8274 0 + endloop + endfacet + facet normal -0.34429 -0.938863 0 + outer loop + vertex 25.704 16.8274 -3 + vertex 25.8979 16.7563 0 + vertex 25.704 16.8274 0 + endloop + endfacet + facet normal -0.34429 -0.938863 -0 + outer loop + vertex 25.8979 16.7563 0 + vertex 25.704 16.8274 -3 + vertex 25.8979 16.7563 -3 + endloop + endfacet + facet normal 0.976922 -0.213594 0 + outer loop + vertex 25.8979 16.7563 0 + vertex 26.0816 17.5963 -3 + vertex 26.0816 17.5963 0 + endloop + endfacet + facet normal 0.976922 -0.213594 0 + outer loop + vertex 26.0816 17.5963 -3 + vertex 25.8979 16.7563 0 + vertex 25.8979 16.7563 -3 + endloop + endfacet + facet normal 0.991357 0.131195 0 + outer loop + vertex 26.0816 17.5963 0 + vertex 25.9892 18.2943 -3 + vertex 25.9892 18.2943 0 + endloop + endfacet + facet normal 0.991357 0.131195 0 + outer loop + vertex 25.9892 18.2943 -3 + vertex 26.0816 17.5963 0 + vertex 26.0816 17.5963 -3 + endloop + endfacet + facet normal 0.907716 0.419585 0 + outer loop + vertex 25.9892 18.2943 0 + vertex 25.7331 18.8483 -3 + vertex 25.7331 18.8483 0 + endloop + endfacet + facet normal 0.907716 0.419585 0 + outer loop + vertex 25.7331 18.8483 -3 + vertex 25.9892 18.2943 0 + vertex 25.9892 18.2943 -3 + endloop + endfacet + facet normal 0.685144 0.728407 -0 + outer loop + vertex 25.7331 18.8483 -3 + vertex 25.3447 19.2137 0 + vertex 25.7331 18.8483 0 + endloop + endfacet + facet normal 0.685144 0.728407 0 + outer loop + vertex 25.3447 19.2137 0 + vertex 25.7331 18.8483 -3 + vertex 25.3447 19.2137 -3 + endloop + endfacet + facet normal 0.260028 0.965601 -0 + outer loop + vertex 25.3447 19.2137 -3 + vertex 24.8554 19.3454 0 + vertex 25.3447 19.2137 0 + endloop + endfacet + facet normal 0.260028 0.965601 0 + outer loop + vertex 24.8554 19.3454 0 + vertex 25.3447 19.2137 -3 + vertex 24.8554 19.3454 -3 + endloop + endfacet + facet normal 0.225805 0.974172 -0 + outer loop + vertex 24.8554 19.3454 -3 + vertex 23.3909 19.6849 0 + vertex 24.8554 19.3454 0 + endloop + endfacet + facet normal 0.225805 0.974172 0 + outer loop + vertex 23.3909 19.6849 0 + vertex 24.8554 19.3454 -3 + vertex 23.3909 19.6849 -3 + endloop + endfacet + facet normal 0.432873 0.901455 -0 + outer loop + vertex 23.3909 19.6849 -3 + vertex 22.6368 20.047 0 + vertex 23.3909 19.6849 0 + endloop + endfacet + facet normal 0.432873 0.901455 0 + outer loop + vertex 22.6368 20.047 0 + vertex 23.3909 19.6849 -3 + vertex 22.6368 20.047 -3 + endloop + endfacet + facet normal 0.698531 0.71558 -0 + outer loop + vertex 22.6368 20.047 -3 + vertex 22.0911 20.5797 0 + vertex 22.6368 20.047 0 + endloop + endfacet + facet normal 0.698531 0.71558 0 + outer loop + vertex 22.0911 20.5797 0 + vertex 22.6368 20.047 -3 + vertex 22.0911 20.5797 -3 + endloop + endfacet + facet normal 0.897086 0.441856 0 + outer loop + vertex 22.0911 20.5797 0 + vertex 21.7245 21.3239 -3 + vertex 21.7245 21.3239 0 + endloop + endfacet + facet normal 0.897086 0.441856 0 + outer loop + vertex 21.7245 21.3239 -3 + vertex 22.0911 20.5797 0 + vertex 22.0911 20.5797 -3 + endloop + endfacet + facet normal 0.977198 0.212332 0 + outer loop + vertex 21.7245 21.3239 0 + vertex 21.508 22.3204 -3 + vertex 21.508 22.3204 0 + endloop + endfacet + facet normal 0.977198 0.212332 0 + outer loop + vertex 21.508 22.3204 -3 + vertex 21.7245 21.3239 0 + vertex 21.7245 21.3239 -3 + endloop + endfacet + facet normal 0.966755 0.255705 0 + outer loop + vertex 21.508 22.3204 0 + vertex 21.2518 23.2891 -3 + vertex 21.2518 23.2891 0 + endloop + endfacet + facet normal 0.966755 0.255705 0 + outer loop + vertex 21.2518 23.2891 -3 + vertex 21.508 22.3204 0 + vertex 21.508 22.3204 -3 + endloop + endfacet + facet normal 0.849732 0.527214 0 + outer loop + vertex 21.2518 23.2891 0 + vertex 20.762 24.0784 -3 + vertex 20.762 24.0784 0 + endloop + endfacet + facet normal 0.849732 0.527214 0 + outer loop + vertex 20.762 24.0784 -3 + vertex 21.2518 23.2891 0 + vertex 21.2518 23.2891 -3 + endloop + endfacet + facet normal 0.645661 0.763624 -0 + outer loop + vertex 20.762 24.0784 -3 + vertex 20.0338 24.6942 0 + vertex 20.762 24.0784 0 + endloop + endfacet + facet normal 0.645661 0.763624 0 + outer loop + vertex 20.0338 24.6942 0 + vertex 20.762 24.0784 -3 + vertex 20.0338 24.6942 -3 + endloop + endfacet + facet normal 0.418642 0.908151 -0 + outer loop + vertex 20.0338 24.6942 -3 + vertex 19.062 25.1422 0 + vertex 20.0338 24.6942 0 + endloop + endfacet + facet normal 0.418642 0.908151 0 + outer loop + vertex 19.062 25.1422 0 + vertex 20.0338 24.6942 -3 + vertex 19.062 25.1422 -3 + endloop + endfacet + facet normal 0.419948 0.907548 -0 + outer loop + vertex 19.062 25.1422 -3 + vertex 17.2513 25.98 0 + vertex 19.062 25.1422 0 + endloop + endfacet + facet normal 0.419948 0.907548 0 + outer loop + vertex 17.2513 25.98 0 + vertex 19.062 25.1422 -3 + vertex 17.2513 25.98 -3 + endloop + endfacet + facet normal 0.649834 0.760076 -0 + outer loop + vertex 17.2513 25.98 -3 + vertex 15.7223 27.2873 0 + vertex 17.2513 25.98 0 + endloop + endfacet + facet normal 0.649834 0.760076 0 + outer loop + vertex 15.7223 27.2873 0 + vertex 17.2513 25.98 -3 + vertex 15.7223 27.2873 -3 + endloop + endfacet + facet normal 0.802285 0.596942 0 + outer loop + vertex 15.7223 27.2873 0 + vertex 15.122 28.0941 -3 + vertex 15.122 28.0941 0 + endloop + endfacet + facet normal 0.802285 0.596942 0 + outer loop + vertex 15.122 28.0941 -3 + vertex 15.7223 27.2873 0 + vertex 15.7223 27.2873 -3 + endloop + endfacet + facet normal 0.997794 0.066389 0 + outer loop + vertex 15.122 28.0941 0 + vertex 15.0577 29.0611 -3 + vertex 15.0577 29.0611 0 + endloop + endfacet + facet normal 0.997794 0.066389 0 + outer loop + vertex 15.0577 29.0611 -3 + vertex 15.122 28.0941 0 + vertex 15.122 28.0941 -3 + endloop + endfacet + facet normal 0.991125 -0.132935 0 + outer loop + vertex 15.0577 29.0611 0 + vertex 15.1584 29.8123 -3 + vertex 15.1584 29.8123 0 + endloop + endfacet + facet normal 0.991125 -0.132935 0 + outer loop + vertex 15.1584 29.8123 -3 + vertex 15.0577 29.0611 0 + vertex 15.0577 29.0611 -3 + endloop + endfacet + facet normal 0.868998 -0.494816 0 + outer loop + vertex 15.1584 29.8123 0 + vertex 15.3134 30.0845 -3 + vertex 15.3134 30.0845 0 + endloop + endfacet + facet normal 0.868998 -0.494816 0 + outer loop + vertex 15.3134 30.0845 -3 + vertex 15.1584 29.8123 0 + vertex 15.1584 29.8123 -3 + endloop + endfacet + facet normal -0.793235 -0.608916 0 + outer loop + vertex 15.4783 29.8698 -3 + vertex 15.3134 30.0845 0 + vertex 15.3134 30.0845 -3 + endloop + endfacet + facet normal -0.793235 -0.608916 0 + outer loop + vertex 15.3134 30.0845 0 + vertex 15.4783 29.8698 -3 + vertex 15.4783 29.8698 0 + endloop + endfacet + facet normal -0.983592 -0.18041 0 + outer loop + vertex 15.6084 29.1601 -3 + vertex 15.4783 29.8698 0 + vertex 15.4783 29.8698 -3 + endloop + endfacet + facet normal -0.983592 -0.18041 0 + outer loop + vertex 15.4783 29.8698 0 + vertex 15.6084 29.1601 -3 + vertex 15.6084 29.1601 0 + endloop + endfacet + facet normal -0.973498 -0.228694 0 + outer loop + vertex 15.808 28.3106 -3 + vertex 15.6084 29.1601 0 + vertex 15.6084 29.1601 -3 + endloop + endfacet + facet normal -0.973498 -0.228694 0 + outer loop + vertex 15.6084 29.1601 0 + vertex 15.808 28.3106 -3 + vertex 15.808 28.3106 0 + endloop + endfacet + facet normal -0.833811 -0.55205 0 + outer loop + vertex 16.2688 27.6146 -3 + vertex 15.808 28.3106 0 + vertex 15.808 28.3106 -3 + endloop + endfacet + facet normal -0.833811 -0.55205 0 + outer loop + vertex 15.808 28.3106 0 + vertex 16.2688 27.6146 -3 + vertex 16.2688 27.6146 0 + endloop + endfacet + facet normal -0.616484 -0.787368 0 + outer loop + vertex 16.2688 27.6146 -3 + vertex 17.0772 26.9817 0 + vertex 16.2688 27.6146 0 + endloop + endfacet + facet normal -0.616484 -0.787368 -0 + outer loop + vertex 17.0772 26.9817 0 + vertex 16.2688 27.6146 -3 + vertex 17.0772 26.9817 -3 + endloop + endfacet + facet normal -0.469274 -0.883053 0 + outer loop + vertex 17.0772 26.9817 -3 + vertex 18.3193 26.3216 0 + vertex 17.0772 26.9817 0 + endloop + endfacet + facet normal -0.469274 -0.883053 -0 + outer loop + vertex 18.3193 26.3216 0 + vertex 17.0772 26.9817 -3 + vertex 18.3193 26.3216 -3 + endloop + endfacet + facet normal -0.453671 -0.891169 0 + outer loop + vertex 18.3193 26.3216 -3 + vertex 20.1819 25.3734 0 + vertex 18.3193 26.3216 0 + endloop + endfacet + facet normal -0.453671 -0.891169 -0 + outer loop + vertex 20.1819 25.3734 0 + vertex 18.3193 26.3216 -3 + vertex 20.1819 25.3734 -3 + endloop + endfacet + facet normal -0.592966 -0.805227 0 + outer loop + vertex 20.1819 25.3734 -3 + vertex 21.2755 24.568 0 + vertex 20.1819 25.3734 0 + endloop + endfacet + facet normal -0.592966 -0.805227 -0 + outer loop + vertex 21.2755 24.568 0 + vertex 20.1819 25.3734 -3 + vertex 21.2755 24.568 -3 + endloop + endfacet + facet normal -0.85116 -0.524906 0 + outer loop + vertex 21.8319 23.6658 -3 + vertex 21.2755 24.568 0 + vertex 21.2755 24.568 -3 + endloop + endfacet + facet normal -0.85116 -0.524906 0 + outer loop + vertex 21.2755 24.568 0 + vertex 21.8319 23.6658 -3 + vertex 21.8319 23.6658 0 + endloop + endfacet + facet normal -0.980126 -0.198375 0 + outer loop + vertex 22.0827 22.427 -3 + vertex 21.8319 23.6658 0 + vertex 21.8319 23.6658 -3 + endloop + endfacet + facet normal -0.980126 -0.198375 0 + outer loop + vertex 21.8319 23.6658 0 + vertex 22.0827 22.427 -3 + vertex 22.0827 22.427 0 + endloop + endfacet + facet normal -0.975671 -0.219241 0 + outer loop + vertex 22.2698 21.5943 -3 + vertex 22.0827 22.427 0 + vertex 22.0827 22.427 -3 + endloop + endfacet + facet normal -0.975671 -0.219241 0 + outer loop + vertex 22.0827 22.427 0 + vertex 22.2698 21.5943 -3 + vertex 22.2698 21.5943 0 + endloop + endfacet + facet normal -0.867972 -0.496613 0 + outer loop + vertex 22.6169 20.9877 -3 + vertex 22.2698 21.5943 0 + vertex 22.2698 21.5943 -3 + endloop + endfacet + facet normal -0.867972 -0.496613 0 + outer loop + vertex 22.2698 21.5943 0 + vertex 22.6169 20.9877 -3 + vertex 22.6169 20.9877 0 + endloop + endfacet + facet normal -0.60611 -0.795381 0 + outer loop + vertex 22.6169 20.9877 -3 + vertex 23.1387 20.59 0 + vertex 22.6169 20.9877 0 + endloop + endfacet + facet normal -0.60611 -0.795381 -0 + outer loop + vertex 23.1387 20.59 0 + vertex 22.6169 20.9877 -3 + vertex 23.1387 20.59 -3 + endloop + endfacet + facet normal -0.277742 -0.960656 0 + outer loop + vertex 23.1387 20.59 -3 + vertex 23.8499 20.3844 0 + vertex 23.1387 20.59 0 + endloop + endfacet + facet normal -0.277742 -0.960656 -0 + outer loop + vertex 23.8499 20.3844 0 + vertex 23.1387 20.59 -3 + vertex 23.8499 20.3844 -3 + endloop + endfacet + facet normal -0.253903 -0.96723 0 + outer loop + vertex 23.8499 20.3844 -3 + vertex 25.0752 20.0627 0 + vertex 23.8499 20.3844 0 + endloop + endfacet + facet normal -0.253903 -0.96723 -0 + outer loop + vertex 25.0752 20.0627 0 + vertex 23.8499 20.3844 -3 + vertex 25.0752 20.0627 -3 + endloop + endfacet + facet normal -0.555295 -0.831654 0 + outer loop + vertex 25.0752 20.0627 -3 + vertex 25.9424 19.4837 0 + vertex 25.0752 20.0627 0 + endloop + endfacet + facet normal -0.555295 -0.831654 -0 + outer loop + vertex 25.9424 19.4837 0 + vertex 25.0752 20.0627 -3 + vertex 25.9424 19.4837 -3 + endloop + endfacet + facet normal -0.850459 -0.526041 0 + outer loop + vertex 26.4742 18.624 -3 + vertex 25.9424 19.4837 0 + vertex 25.9424 19.4837 -3 + endloop + endfacet + facet normal -0.850459 -0.526041 0 + outer loop + vertex 25.9424 19.4837 0 + vertex 26.4742 18.624 -3 + vertex 26.4742 18.624 0 + endloop + endfacet + facet normal -0.982731 -0.185042 0 + outer loop + vertex 26.6933 17.4601 -3 + vertex 26.4742 18.624 0 + vertex 26.4742 18.624 -3 + endloop + endfacet + facet normal -0.982731 -0.185042 0 + outer loop + vertex 26.4742 18.624 0 + vertex 26.6933 17.4601 -3 + vertex 26.6933 17.4601 0 + endloop + endfacet + facet normal -0.95811 -0.286401 0 + outer loop + vertex 27.1755 15.8473 -3 + vertex 26.6933 17.4601 0 + vertex 26.6933 17.4601 -3 + endloop + endfacet + facet normal -0.95811 -0.286401 0 + outer loop + vertex 26.6933 17.4601 0 + vertex 27.1755 15.8473 -3 + vertex 27.1755 15.8473 0 + endloop + endfacet + facet normal -0.948381 -0.317134 0 + outer loop + vertex 27.5422 14.7505 -3 + vertex 27.1755 15.8473 0 + vertex 27.1755 15.8473 -3 + endloop + endfacet + facet normal -0.948381 -0.317134 0 + outer loop + vertex 27.1755 15.8473 0 + vertex 27.5422 14.7505 -3 + vertex 27.5422 14.7505 0 + endloop + endfacet + facet normal -0.999642 -0.0267694 0 + outer loop + vertex 27.6094 12.2412 -3 + vertex 27.5422 14.7505 0 + vertex 27.5422 14.7505 -3 + endloop + endfacet + facet normal -0.999642 -0.0267694 0 + outer loop + vertex 27.5422 14.7505 0 + vertex 27.6094 12.2412 -3 + vertex 27.6094 12.2412 0 + endloop + endfacet + facet normal -0.999486 0.0320667 0 + outer loop + vertex 27.528 9.70386 -3 + vertex 27.6094 12.2412 0 + vertex 27.6094 12.2412 -3 + endloop + endfacet + facet normal -0.999486 0.0320667 0 + outer loop + vertex 27.6094 12.2412 0 + vertex 27.528 9.70386 -3 + vertex 27.528 9.70386 0 + endloop + endfacet + facet normal -0.981091 0.193547 0 + outer loop + vertex 27.209 8.08714 -3 + vertex 27.528 9.70386 0 + vertex 27.528 9.70386 -3 + endloop + endfacet + facet normal -0.981091 0.193547 0 + outer loop + vertex 27.528 9.70386 0 + vertex 27.209 8.08714 -3 + vertex 27.209 8.08714 0 + endloop + endfacet + facet normal -0.980935 0.194337 0 + outer loop + vertex 26.8985 6.51977 -3 + vertex 27.209 8.08714 0 + vertex 27.209 8.08714 -3 + endloop + endfacet + facet normal -0.980935 0.194337 0 + outer loop + vertex 27.209 8.08714 0 + vertex 26.8985 6.51977 -3 + vertex 26.8985 6.51977 0 + endloop + endfacet + facet normal -0.999971 -0.00756314 0 + outer loop + vertex 26.9177 3.98634 -3 + vertex 26.8985 6.51977 0 + vertex 26.8985 6.51977 -3 + endloop + endfacet + facet normal -0.999971 -0.00756314 0 + outer loop + vertex 26.8985 6.51977 0 + vertex 26.9177 3.98634 -3 + vertex 26.9177 3.98634 0 + endloop + endfacet + facet normal -0.999812 -0.0193848 0 + outer loop + vertex 26.953 2.16551 -3 + vertex 26.9177 3.98634 0 + vertex 26.9177 3.98634 -3 + endloop + endfacet + facet normal -0.999812 -0.0193848 0 + outer loop + vertex 26.9177 3.98634 0 + vertex 26.953 2.16551 -3 + vertex 26.953 2.16551 0 + endloop + endfacet + facet normal -0.99253 0.121998 0 + outer loop + vertex 26.8464 1.29842 -3 + vertex 26.953 2.16551 0 + vertex 26.953 2.16551 -3 + endloop + endfacet + facet normal -0.99253 0.121998 0 + outer loop + vertex 26.953 2.16551 0 + vertex 26.8464 1.29842 -3 + vertex 26.8464 1.29842 0 + endloop + endfacet + facet normal -0.673406 0.739273 0 + outer loop + vertex 26.8464 1.29842 -3 + vertex 26.7235 1.18648 0 + vertex 26.8464 1.29842 0 + endloop + endfacet + facet normal -0.673406 0.739273 0 + outer loop + vertex 26.7235 1.18648 0 + vertex 26.8464 1.29842 -3 + vertex 26.7235 1.18648 -3 + endloop + endfacet + facet normal 0.423462 0.905914 -0 + outer loop + vertex 26.7235 1.18648 -3 + vertex 26.5455 1.2697 0 + vertex 26.7235 1.18648 0 + endloop + endfacet + facet normal 0.423462 0.905914 0 + outer loop + vertex 26.5455 1.2697 0 + vertex 26.7235 1.18648 -3 + vertex 26.5455 1.2697 -3 + endloop + endfacet + facet normal 0.785068 0.61941 0 + outer loop + vertex 26.5455 1.2697 0 + vertex 25.9977 1.96397 -3 + vertex 25.9977 1.96397 0 + endloop + endfacet + facet normal 0.785068 0.61941 0 + outer loop + vertex 25.9977 1.96397 -3 + vertex 26.5455 1.2697 0 + vertex 26.5455 1.2697 -3 + endloop + endfacet + facet normal 0.724168 0.689624 0 + outer loop + vertex 25.9977 1.96397 0 + vertex 25.3153 2.68052 -3 + vertex 25.3153 2.68052 0 + endloop + endfacet + facet normal 0.724168 0.689624 0 + outer loop + vertex 25.3153 2.68052 -3 + vertex 25.9977 1.96397 0 + vertex 25.9977 1.96397 -3 + endloop + endfacet + facet normal -0.00319409 0.999995 0 + outer loop + vertex 25.3153 2.68052 -3 + vertex 25.0347 2.67962 0 + vertex 25.3153 2.68052 0 + endloop + endfacet + facet normal -0.00319409 0.999995 0 + outer loop + vertex 25.0347 2.67962 0 + vertex 25.3153 2.68052 -3 + vertex 25.0347 2.67962 -3 + endloop + endfacet + facet normal -0.620982 0.783825 0 + outer loop + vertex 25.0347 2.67962 -3 + vertex 24.7523 2.4559 0 + vertex 25.0347 2.67962 0 + endloop + endfacet + facet normal -0.620982 0.783825 0 + outer loop + vertex 24.7523 2.4559 0 + vertex 25.0347 2.67962 -3 + vertex 24.7523 2.4559 -3 + endloop + endfacet + facet normal -0.356176 0.934419 0 + outer loop + vertex 24.7523 2.4559 -3 + vertex 23.9858 2.16372 0 + vertex 24.7523 2.4559 0 + endloop + endfacet + facet normal -0.356176 0.934419 0 + outer loop + vertex 23.9858 2.16372 0 + vertex 24.7523 2.4559 -3 + vertex 23.9858 2.16372 -3 + endloop + endfacet + facet normal -0.21204 0.977261 0 + outer loop + vertex 23.9858 2.16372 -3 + vertex 23.1222 1.97635 0 + vertex 23.9858 2.16372 0 + endloop + endfacet + facet normal -0.21204 0.977261 0 + outer loop + vertex 23.1222 1.97635 0 + vertex 23.9858 2.16372 -3 + vertex 23.1222 1.97635 -3 + endloop + endfacet + facet normal 0.0237086 0.999719 -0 + outer loop + vertex 23.1222 1.97635 -3 + vertex 22.8505 1.9828 0 + vertex 23.1222 1.97635 0 + endloop + endfacet + facet normal 0.0237086 0.999719 0 + outer loop + vertex 22.8505 1.9828 0 + vertex 23.1222 1.97635 -3 + vertex 22.8505 1.9828 -3 + endloop + endfacet + facet normal 0.97535 0.220664 0 + outer loop + vertex 22.8505 1.9828 0 + vertex 22.7784 2.30129 -3 + vertex 22.7784 2.30129 0 + endloop + endfacet + facet normal 0.97535 0.220664 0 + outer loop + vertex 22.7784 2.30129 -3 + vertex 22.8505 1.9828 0 + vertex 22.8505 1.9828 -3 + endloop + endfacet + facet normal 0.936019 -0.35195 0 + outer loop + vertex 22.7784 2.30129 0 + vertex 23.2082 3.44442 -3 + vertex 23.2082 3.44442 0 + endloop + endfacet + facet normal 0.936019 -0.35195 0 + outer loop + vertex 23.2082 3.44442 -3 + vertex 22.7784 2.30129 0 + vertex 22.7784 2.30129 -3 + endloop + endfacet + facet normal 0.913236 -0.40743 0 + outer loop + vertex 23.2082 3.44442 0 + vertex 23.5377 4.18291 -3 + vertex 23.5377 4.18291 0 + endloop + endfacet + facet normal 0.913236 -0.40743 0 + outer loop + vertex 23.5377 4.18291 -3 + vertex 23.2082 3.44442 0 + vertex 23.2082 3.44442 -3 + endloop + endfacet + facet normal 0.997125 -0.0757773 0 + outer loop + vertex 23.5377 4.18291 0 + vertex 23.5966 4.95794 -3 + vertex 23.5966 4.95794 0 + endloop + endfacet + facet normal 0.997125 -0.0757773 0 + outer loop + vertex 23.5966 4.95794 -3 + vertex 23.5377 4.18291 0 + vertex 23.5377 4.18291 -3 + endloop + endfacet + facet normal 0.969407 0.245457 0 + outer loop + vertex 23.5966 4.95794 0 + vertex 23.3811 5.8089 -3 + vertex 23.3811 5.8089 0 + endloop + endfacet + facet normal 0.969407 0.245457 0 + outer loop + vertex 23.3811 5.8089 -3 + vertex 23.5966 4.95794 0 + vertex 23.5966 4.95794 -3 + endloop + endfacet + facet normal 0.890531 0.454923 0 + outer loop + vertex 23.3811 5.8089 0 + vertex 22.8875 6.77518 -3 + vertex 22.8875 6.77518 0 + endloop + endfacet + facet normal 0.890531 0.454923 0 + outer loop + vertex 22.8875 6.77518 -3 + vertex 23.3811 5.8089 0 + vertex 23.3811 5.8089 -3 + endloop + endfacet + facet normal 0.77704 0.629451 0 + outer loop + vertex 22.8875 6.77518 0 + vertex 21.7142 8.22365 -3 + vertex 21.7142 8.22365 0 + endloop + endfacet + facet normal 0.77704 0.629451 0 + outer loop + vertex 21.7142 8.22365 -3 + vertex 22.8875 6.77518 0 + vertex 22.8875 6.77518 -3 + endloop + endfacet + facet normal 0.585146 0.810928 -0 + outer loop + vertex 21.7142 8.22365 -3 + vertex 19.7157 9.66569 0 + vertex 21.7142 8.22365 0 + endloop + endfacet + facet normal 0.585146 0.810928 0 + outer loop + vertex 19.7157 9.66569 0 + vertex 21.7142 8.22365 -3 + vertex 19.7157 9.66569 -3 + endloop + endfacet + facet normal 0.415721 0.909492 -0 + outer loop + vertex 19.7157 9.66569 -3 + vertex 18.6847 10.137 0 + vertex 19.7157 9.66569 0 + endloop + endfacet + facet normal 0.415721 0.909492 0 + outer loop + vertex 18.6847 10.137 0 + vertex 19.7157 9.66569 -3 + vertex 18.6847 10.137 -3 + endloop + endfacet + facet normal 0.146348 0.989233 -0 + outer loop + vertex 18.6847 10.137 -3 + vertex 17.337 10.3363 0 + vertex 18.6847 10.137 0 + endloop + endfacet + facet normal 0.146348 0.989233 0 + outer loop + vertex 17.337 10.3363 0 + vertex 18.6847 10.137 -3 + vertex 17.337 10.3363 -3 + endloop + endfacet + facet normal -0.00363232 0.999993 0 + outer loop + vertex 17.337 10.3363 -3 + vertex 15.9933 10.3315 0 + vertex 17.337 10.3363 0 + endloop + endfacet + facet normal -0.00363232 0.999993 0 + outer loop + vertex 15.9933 10.3315 0 + vertex 17.337 10.3363 -3 + vertex 15.9933 10.3315 -3 + endloop + endfacet + facet normal -0.520358 0.853948 0 + outer loop + vertex 15.9933 10.3315 -3 + vertex 15.6762 10.1383 0 + vertex 15.9933 10.3315 0 + endloop + endfacet + facet normal -0.520358 0.853948 0 + outer loop + vertex 15.6762 10.1383 0 + vertex 15.9933 10.3315 -3 + vertex 15.6762 10.1383 -3 + endloop + endfacet + facet normal -0.775154 0.631772 0 + outer loop + vertex 15.3572 9.74689 -3 + vertex 15.6762 10.1383 0 + vertex 15.6762 10.1383 -3 + endloop + endfacet + facet normal -0.775154 0.631772 0 + outer loop + vertex 15.6762 10.1383 0 + vertex 15.3572 9.74689 -3 + vertex 15.3572 9.74689 0 + endloop + endfacet + facet normal -0.885944 0.463791 0 + outer loop + vertex 14.9426 8.95486 -3 + vertex 15.3572 9.74689 0 + vertex 15.3572 9.74689 -3 + endloop + endfacet + facet normal -0.885944 0.463791 0 + outer loop + vertex 15.3572 9.74689 0 + vertex 14.9426 8.95486 -3 + vertex 14.9426 8.95486 0 + endloop + endfacet + facet normal -0.999951 -0.00991933 0 + outer loop + vertex 14.9551 7.69881 -3 + vertex 14.9426 8.95486 0 + vertex 14.9426 8.95486 -3 + endloop + endfacet + facet normal -0.999951 -0.00991933 0 + outer loop + vertex 14.9426 8.95486 0 + vertex 14.9551 7.69881 -3 + vertex 14.9551 7.69881 0 + endloop + endfacet + facet normal -0.987205 -0.159458 0 + outer loop + vertex 15.3368 5.33522 -3 + vertex 14.9551 7.69881 0 + vertex 14.9551 7.69881 -3 + endloop + endfacet + facet normal -0.987205 -0.159458 0 + outer loop + vertex 14.9551 7.69881 0 + vertex 15.3368 5.33522 -3 + vertex 15.3368 5.33522 0 + endloop + endfacet + facet normal -0.962213 -0.272299 0 + outer loop + vertex 16.0239 2.90744 -3 + vertex 15.3368 5.33522 0 + vertex 15.3368 5.33522 -3 + endloop + endfacet + facet normal -0.962213 -0.272299 0 + outer loop + vertex 15.3368 5.33522 0 + vertex 16.0239 2.90744 -3 + vertex 16.0239 2.90744 0 + endloop + endfacet + facet normal -0.924811 -0.380427 0 + outer loop + vertex 16.8564 0.883682 -3 + vertex 16.0239 2.90744 0 + vertex 16.0239 2.90744 -3 + endloop + endfacet + facet normal -0.924811 -0.380427 0 + outer loop + vertex 16.0239 2.90744 0 + vertex 16.8564 0.883682 -3 + vertex 16.8564 0.883682 0 + endloop + endfacet + facet normal -0.815204 -0.579174 0 + outer loop + vertex 17.6745 -0.267811 -3 + vertex 16.8564 0.883682 0 + vertex 16.8564 0.883682 -3 + endloop + endfacet + facet normal -0.815204 -0.579174 0 + outer loop + vertex 16.8564 0.883682 0 + vertex 17.6745 -0.267811 -3 + vertex 17.6745 -0.267811 0 + endloop + endfacet + facet normal -0.318326 -0.947981 0 + outer loop + vertex 17.6745 -0.267811 -3 + vertex 18.2674 -0.466912 0 + vertex 17.6745 -0.267811 0 + endloop + endfacet + facet normal -0.318326 -0.947981 -0 + outer loop + vertex 18.2674 -0.466912 0 + vertex 17.6745 -0.267811 -3 + vertex 18.2674 -0.466912 -3 + endloop + endfacet + facet normal 0.268508 -0.963277 0 + outer loop + vertex 18.2674 -0.466912 -3 + vertex 19.4865 -0.127098 0 + vertex 18.2674 -0.466912 0 + endloop + endfacet + facet normal 0.268508 -0.963277 0 + outer loop + vertex 19.4865 -0.127098 0 + vertex 18.2674 -0.466912 -3 + vertex 19.4865 -0.127098 -3 + endloop + endfacet + facet normal 0.219889 -0.975525 0 + outer loop + vertex 19.4865 -0.127098 -3 + vertex 21.0282 0.220415 0 + vertex 19.4865 -0.127098 0 + endloop + endfacet + facet normal 0.219889 -0.975525 0 + outer loop + vertex 21.0282 0.220415 0 + vertex 19.4865 -0.127098 -3 + vertex 21.0282 0.220415 -3 + endloop + endfacet + facet normal -0.998758 -0.0498338 0 + outer loop + vertex 21.0968 -1.15452 -3 + vertex 21.0282 0.220415 0 + vertex 21.0282 0.220415 -3 + endloop + endfacet + facet normal -0.998758 -0.0498338 0 + outer loop + vertex 21.0282 0.220415 0 + vertex 21.0968 -1.15452 -3 + vertex 21.0968 -1.15452 0 + endloop + endfacet + facet normal -0.983918 0.178619 0 + outer loop + vertex 20.9081 -2.19366 -3 + vertex 21.0968 -1.15452 0 + vertex 21.0968 -1.15452 -3 + endloop + endfacet + facet normal -0.983918 0.178619 0 + outer loop + vertex 21.0968 -1.15452 0 + vertex 20.9081 -2.19366 -3 + vertex 20.9081 -2.19366 0 + endloop + endfacet + facet normal -0.856849 0.515568 0 + outer loop + vertex 20.4179 -3.0084 -3 + vertex 20.9081 -2.19366 0 + vertex 20.9081 -2.19366 -3 + endloop + endfacet + facet normal -0.856849 0.515568 0 + outer loop + vertex 20.9081 -2.19366 0 + vertex 20.4179 -3.0084 -3 + vertex 20.4179 -3.0084 0 + endloop + endfacet + facet normal -0.631353 0.775495 0 + outer loop + vertex 20.4179 -3.0084 -3 + vertex 19.4334 -3.80993 0 + vertex 20.4179 -3.0084 0 + endloop + endfacet + facet normal -0.631353 0.775495 0 + outer loop + vertex 19.4334 -3.80993 0 + vertex 20.4179 -3.0084 -3 + vertex 19.4334 -3.80993 -3 + endloop + endfacet + facet normal -0.513213 0.858261 0 + outer loop + vertex 19.4334 -3.80993 -3 + vertex 17.7619 -4.80944 0 + vertex 19.4334 -3.80993 0 + endloop + endfacet + facet normal -0.513213 0.858261 0 + outer loop + vertex 17.7619 -4.80944 0 + vertex 19.4334 -3.80993 -3 + vertex 17.7619 -4.80944 -3 + endloop + endfacet + facet normal -0.460069 0.887883 0 + outer loop + vertex 17.7619 -4.80944 -3 + vertex 15.0012 -6.23992 0 + vertex 17.7619 -4.80944 0 + endloop + endfacet + facet normal -0.460069 0.887883 0 + outer loop + vertex 15.0012 -6.23992 0 + vertex 17.7619 -4.80944 -3 + vertex 15.0012 -6.23992 -3 + endloop + endfacet + facet normal -0.358805 0.933413 0 + outer loop + vertex 15.0012 -6.23992 -3 + vertex 12.6103 -7.15898 0 + vertex 15.0012 -6.23992 0 + endloop + endfacet + facet normal -0.358805 0.933413 0 + outer loop + vertex 12.6103 -7.15898 0 + vertex 15.0012 -6.23992 -3 + vertex 12.6103 -7.15898 -3 + endloop + endfacet + facet normal -0.211321 0.977417 0 + outer loop + vertex 12.6103 -7.15898 -3 + vertex 10.2421 -7.67101 0 + vertex 12.6103 -7.15898 0 + endloop + endfacet + facet normal -0.211321 0.977417 0 + outer loop + vertex 10.2421 -7.67101 0 + vertex 12.6103 -7.15898 -3 + vertex 10.2421 -7.67101 -3 + endloop + endfacet + facet normal -0.0775281 0.99699 0 + outer loop + vertex 10.2421 -7.67101 -3 + vertex 7.54923 -7.88041 0 + vertex 10.2421 -7.67101 0 + endloop + endfacet + facet normal -0.0775281 0.99699 0 + outer loop + vertex 7.54923 -7.88041 0 + vertex 10.2421 -7.67101 -3 + vertex 7.54923 -7.88041 -3 + endloop + endfacet + facet normal -0.00181695 0.999998 0 + outer loop + vertex 7.54923 -7.88041 -3 + vertex 5.03167 -7.88498 0 + vertex 7.54923 -7.88041 0 + endloop + endfacet + facet normal -0.00181695 0.999998 0 + outer loop + vertex 5.03167 -7.88498 0 + vertex 7.54923 -7.88041 -3 + vertex 5.03167 -7.88498 -3 + endloop + endfacet + facet normal 0.239055 0.971006 -0 + outer loop + vertex 5.03167 -7.88498 -3 + vertex 3.854 -7.59505 0 + vertex 5.03167 -7.88498 0 + endloop + endfacet + facet normal 0.239055 0.971006 0 + outer loop + vertex 3.854 -7.59505 0 + vertex 5.03167 -7.88498 -3 + vertex 3.854 -7.59505 -3 + endloop + endfacet + facet normal 0.512147 0.858898 -0 + outer loop + vertex 3.854 -7.59505 -3 + vertex 1.04019 -5.91722 0 + vertex 3.854 -7.59505 0 + endloop + endfacet + facet normal 0.512147 0.858898 0 + outer loop + vertex 1.04019 -5.91722 0 + vertex 3.854 -7.59505 -3 + vertex 1.04019 -5.91722 -3 + endloop + endfacet + facet normal 0.520307 0.85398 -0 + outer loop + vertex 1.04019 -5.91722 -3 + vertex -2.05653 -4.03047 0 + vertex 1.04019 -5.91722 0 + endloop + endfacet + facet normal 0.520307 0.85398 0 + outer loop + vertex -2.05653 -4.03047 0 + vertex 1.04019 -5.91722 -3 + vertex -2.05653 -4.03047 -3 + endloop + endfacet + facet normal 0.582306 0.812969 -0 + outer loop + vertex -2.05653 -4.03047 -3 + vertex -3.45272 -3.03042 0 + vertex -2.05653 -4.03047 0 + endloop + endfacet + facet normal 0.582306 0.812969 0 + outer loop + vertex -3.45272 -3.03042 0 + vertex -2.05653 -4.03047 -3 + vertex -3.45272 -3.03042 -3 + endloop + endfacet + facet normal 0.814407 0.580294 0 + outer loop + vertex -3.45272 -3.03042 0 + vertex -3.71458 -2.66291 -3 + vertex -3.71458 -2.66291 0 + endloop + endfacet + facet normal 0.814407 0.580294 0 + outer loop + vertex -3.71458 -2.66291 -3 + vertex -3.45272 -3.03042 0 + vertex -3.45272 -3.03042 -3 + endloop + endfacet + facet normal 0.667074 -0.744991 0 + outer loop + vertex -3.71458 -2.66291 -3 + vertex -3.55278 -2.51803 0 + vertex -3.71458 -2.66291 0 + endloop + endfacet + facet normal 0.667074 -0.744991 0 + outer loop + vertex -3.55278 -2.51803 0 + vertex -3.71458 -2.66291 -3 + vertex -3.55278 -2.51803 -3 + endloop + endfacet + facet normal -0.396625 -0.917981 0 + outer loop + vertex -3.55278 -2.51803 -3 + vertex -1.72768 -3.30659 0 + vertex -3.55278 -2.51803 0 + endloop + endfacet + facet normal -0.396625 -0.917981 -0 + outer loop + vertex -1.72768 -3.30659 0 + vertex -3.55278 -2.51803 -3 + vertex -1.72768 -3.30659 -3 + endloop + endfacet + facet normal -0.417951 -0.90847 0 + outer loop + vertex -1.72768 -3.30659 -3 + vertex 1.09298 -4.60426 0 + vertex -1.72768 -3.30659 0 + endloop + endfacet + facet normal -0.417951 -0.90847 -0 + outer loop + vertex 1.09298 -4.60426 0 + vertex -1.72768 -3.30659 -3 + vertex 1.09298 -4.60426 -3 + endloop + endfacet + facet normal -0.324179 -0.945996 0 + outer loop + vertex 1.09298 -4.60426 -3 + vertex 3.9592 -5.58648 0 + vertex 1.09298 -4.60426 0 + endloop + endfacet + facet normal -0.324179 -0.945996 -0 + outer loop + vertex 3.9592 -5.58648 0 + vertex 1.09298 -4.60426 -3 + vertex 3.9592 -5.58648 -3 + endloop + endfacet + facet normal -0.208038 -0.978121 0 + outer loop + vertex 3.9592 -5.58648 -3 + vertex 5.81183 -5.98051 0 + vertex 3.9592 -5.58648 0 + endloop + endfacet + facet normal -0.208038 -0.978121 -0 + outer loop + vertex 5.81183 -5.98051 0 + vertex 3.9592 -5.58648 -3 + vertex 5.81183 -5.98051 -3 + endloop + endfacet + facet normal 0.0684734 -0.997653 0 + outer loop + vertex 5.81183 -5.98051 -3 + vertex 7.21237 -5.88439 0 + vertex 5.81183 -5.98051 0 + endloop + endfacet + facet normal 0.0684734 -0.997653 0 + outer loop + vertex 7.21237 -5.88439 0 + vertex 5.81183 -5.98051 -3 + vertex 7.21237 -5.88439 -3 + endloop + endfacet + facet normal 0.219818 -0.975541 0 + outer loop + vertex 7.21237 -5.88439 -3 + vertex 7.79727 -5.75259 0 + vertex 7.21237 -5.88439 0 + endloop + endfacet + facet normal 0.219818 -0.975541 0 + outer loop + vertex 7.79727 -5.75259 0 + vertex 7.21237 -5.88439 -3 + vertex 7.79727 -5.75259 -3 + endloop + endfacet + facet normal 0.71334 0.700818 0 + outer loop + vertex 7.79727 -5.75259 0 + vertex 7.03104 -4.97268 -3 + vertex 7.03104 -4.97268 0 + endloop + endfacet + facet normal 0.71334 0.700818 0 + outer loop + vertex 7.03104 -4.97268 -3 + vertex 7.79727 -5.75259 0 + vertex 7.79727 -5.75259 -3 + endloop + endfacet + facet normal 0.78473 0.619838 0 + outer loop + vertex 7.03104 -4.97268 0 + vertex 5.97791 -3.63939 -3 + vertex 5.97791 -3.63939 0 + endloop + endfacet + facet normal 0.78473 0.619838 0 + outer loop + vertex 5.97791 -3.63939 -3 + vertex 7.03104 -4.97268 0 + vertex 7.03104 -4.97268 -3 + endloop + endfacet + facet normal 0.861751 0.507331 0 + outer loop + vertex 5.97791 -3.63939 0 + vertex 5.02006 -2.01238 -3 + vertex 5.02006 -2.01238 0 + endloop + endfacet + facet normal 0.861751 0.507331 0 + outer loop + vertex 5.02006 -2.01238 -3 + vertex 5.97791 -3.63939 0 + vertex 5.97791 -3.63939 -3 + endloop + endfacet + facet normal 0.918179 0.396167 0 + outer loop + vertex 5.02006 -2.01238 0 + vertex 4.37015 -0.506109 -3 + vertex 4.37015 -0.506109 0 + endloop + endfacet + facet normal 0.918179 0.396167 0 + outer loop + vertex 4.37015 -0.506109 -3 + vertex 5.02006 -2.01238 0 + vertex 5.02006 -2.01238 -3 + endloop + endfacet + facet normal 0.99125 0.131995 0 + outer loop + vertex 4.37015 -0.506109 0 + vertex 4.24084 0.464987 -3 + vertex 4.24084 0.464987 0 + endloop + endfacet + facet normal 0.99125 0.131995 0 + outer loop + vertex 4.24084 0.464987 -3 + vertex 4.37015 -0.506109 0 + vertex 4.37015 -0.506109 -3 + endloop + endfacet + facet normal 0.880686 -0.473701 0 + outer loop + vertex 4.24084 0.464987 0 + vertex 4.39665 0.754678 -3 + vertex 4.39665 0.754678 0 + endloop + endfacet + facet normal 0.880686 -0.473701 0 + outer loop + vertex 4.39665 0.754678 -3 + vertex 4.24084 0.464987 0 + vertex 4.24084 0.464987 -3 + endloop + endfacet + facet normal -0.827333 -0.561712 0 + outer loop + vertex 4.6091 0.441775 -3 + vertex 4.39665 0.754678 0 + vertex 4.39665 0.754678 -3 + endloop + endfacet + facet normal -0.827333 -0.561712 0 + outer loop + vertex 4.39665 0.754678 0 + vertex 4.6091 0.441775 -3 + vertex 4.6091 0.441775 0 + endloop + endfacet + facet normal -0.774222 -0.632914 0 + outer loop + vertex 6.41545 -1.76788 -3 + vertex 4.6091 0.441775 0 + vertex 4.6091 0.441775 -3 + endloop + endfacet + facet normal -0.774222 -0.632914 0 + outer loop + vertex 4.6091 0.441775 0 + vertex 6.41545 -1.76788 -3 + vertex 6.41545 -1.76788 0 + endloop + endfacet + facet normal -0.707099 -0.707114 0 + outer loop + vertex 6.41545 -1.76788 -3 + vertex 7.74282 -3.09522 0 + vertex 6.41545 -1.76788 0 + endloop + endfacet + facet normal -0.707099 -0.707114 -0 + outer loop + vertex 7.74282 -3.09522 0 + vertex 6.41545 -1.76788 -3 + vertex 7.74282 -3.09522 -3 + endloop + endfacet + facet normal -0.583644 -0.812009 0 + outer loop + vertex 7.74282 -3.09522 -3 + vertex 9.01294 -4.00814 0 + vertex 7.74282 -3.09522 0 + endloop + endfacet + facet normal -0.583644 -0.812009 -0 + outer loop + vertex 9.01294 -4.00814 0 + vertex 7.74282 -3.09522 -3 + vertex 9.01294 -4.00814 -3 + endloop + endfacet + facet normal -0.385065 -0.92289 0 + outer loop + vertex 9.01294 -4.00814 -3 + vertex 10.2758 -4.53506 0 + vertex 9.01294 -4.00814 0 + endloop + endfacet + facet normal -0.385065 -0.92289 -0 + outer loop + vertex 10.2758 -4.53506 0 + vertex 9.01294 -4.00814 -3 + vertex 10.2758 -4.53506 -3 + endloop + endfacet + facet normal -0.128613 -0.991695 0 + outer loop + vertex 10.2758 -4.53506 -3 + vertex 11.5814 -4.70438 0 + vertex 10.2758 -4.53506 0 + endloop + endfacet + facet normal -0.128613 -0.991695 -0 + outer loop + vertex 11.5814 -4.70438 0 + vertex 10.2758 -4.53506 -3 + vertex 11.5814 -4.70438 -3 + endloop + endfacet + facet normal 0.142467 -0.9898 0 + outer loop + vertex 11.5814 -4.70438 -3 + vertex 12.4032 -4.58609 0 + vertex 11.5814 -4.70438 0 + endloop + endfacet + facet normal 0.142467 -0.9898 0 + outer loop + vertex 12.4032 -4.58609 0 + vertex 11.5814 -4.70438 -3 + vertex 12.4032 -4.58609 -3 + endloop + endfacet + facet normal 0.390375 -0.920656 0 + outer loop + vertex 12.4032 -4.58609 -3 + vertex 13.172 -4.2601 0 + vertex 12.4032 -4.58609 0 + endloop + endfacet + facet normal 0.390375 -0.920656 0 + outer loop + vertex 13.172 -4.2601 0 + vertex 12.4032 -4.58609 -3 + vertex 13.172 -4.2601 -3 + endloop + endfacet + facet normal 0.607582 -0.794257 0 + outer loop + vertex 13.172 -4.2601 -3 + vertex 13.8131 -3.7697 0 + vertex 13.172 -4.2601 0 + endloop + endfacet + facet normal 0.607582 -0.794257 0 + outer loop + vertex 13.8131 -3.7697 0 + vertex 13.172 -4.2601 -3 + vertex 13.8131 -3.7697 -3 + endloop + endfacet + facet normal 0.812619 -0.582795 0 + outer loop + vertex 13.8131 -3.7697 0 + vertex 14.2516 -3.15818 -3 + vertex 14.2516 -3.15818 0 + endloop + endfacet + facet normal 0.812619 -0.582795 0 + outer loop + vertex 14.2516 -3.15818 -3 + vertex 13.8131 -3.7697 0 + vertex 13.8131 -3.7697 -3 + endloop + endfacet + facet normal 0.980799 -0.195021 0 + outer loop + vertex 14.2516 -3.15818 0 + vertex 14.333 -2.7489 -3 + vertex 14.333 -2.7489 0 + endloop + endfacet + facet normal 0.980799 -0.195021 0 + outer loop + vertex 14.333 -2.7489 -3 + vertex 14.2516 -3.15818 0 + vertex 14.2516 -3.15818 -3 + endloop + endfacet + facet normal 0.98573 0.168336 0 + outer loop + vertex 14.333 -2.7489 0 + vertex 14.2455 -2.23644 -3 + vertex 14.2455 -2.23644 0 + endloop + endfacet + facet normal 0.98573 0.168336 0 + outer loop + vertex 14.2455 -2.23644 -3 + vertex 14.333 -2.7489 0 + vertex 14.333 -2.7489 -3 + endloop + endfacet + facet normal 0.892341 0.451362 0 + outer loop + vertex 14.2455 -2.23644 0 + vertex 13.5923 -0.94501 -3 + vertex 13.5923 -0.94501 0 + endloop + endfacet + facet normal 0.892341 0.451362 0 + outer loop + vertex 13.5923 -0.94501 -3 + vertex 14.2455 -2.23644 0 + vertex 14.2455 -2.23644 -3 + endloop + endfacet + facet normal 0.784902 0.61962 0 + outer loop + vertex 13.5923 -0.94501 0 + vertex 12.3489 0.629998 -3 + vertex 12.3489 0.629998 0 + endloop + endfacet + facet normal 0.784902 0.61962 0 + outer loop + vertex 12.3489 0.629998 -3 + vertex 13.5923 -0.94501 0 + vertex 13.5923 -0.94501 -3 + endloop + endfacet + facet normal 0.706306 0.707906 -0 + outer loop + vertex 12.3489 0.629998 -3 + vertex 10.5724 2.40247 0 + vertex 12.3489 0.629998 0 + endloop + endfacet + facet normal 0.706306 0.707906 0 + outer loop + vertex 10.5724 2.40247 0 + vertex 12.3489 0.629998 -3 + vertex 10.5724 2.40247 -3 + endloop + endfacet + facet normal 0.641095 0.767462 -0 + outer loop + vertex 10.5724 2.40247 -3 + vertex 9.13441 3.60373 0 + vertex 10.5724 2.40247 0 + endloop + endfacet + facet normal 0.641095 0.767462 0 + outer loop + vertex 9.13441 3.60373 0 + vertex 10.5724 2.40247 -3 + vertex 9.13441 3.60373 -3 + endloop + endfacet + facet normal 0.56747 0.823394 -0 + outer loop + vertex 9.13441 3.60373 -3 + vertex 8.18559 4.25764 0 + vertex 9.13441 3.60373 0 + endloop + endfacet + facet normal 0.56747 0.823394 0 + outer loop + vertex 8.18559 4.25764 0 + vertex 9.13441 3.60373 -3 + vertex 8.18559 4.25764 -3 + endloop + endfacet + facet normal 0.457713 0.8891 -0 + outer loop + vertex 8.18559 4.25764 -3 + vertex 5.26682 5.76024 0 + vertex 8.18559 4.25764 0 + endloop + endfacet + facet normal 0.457713 0.8891 0 + outer loop + vertex 5.26682 5.76024 0 + vertex 8.18559 4.25764 -3 + vertex 5.26682 5.76024 -3 + endloop + endfacet + facet normal 0.356921 0.934135 -0 + outer loop + vertex 5.26682 5.76024 -3 + vertex 1.66409 7.13679 0 + vertex 5.26682 5.76024 0 + endloop + endfacet + facet normal 0.356921 0.934135 0 + outer loop + vertex 1.66409 7.13679 0 + vertex 5.26682 5.76024 -3 + vertex 1.66409 7.13679 -3 + endloop + endfacet + facet normal 0.389896 0.920859 -0 + outer loop + vertex 1.66409 7.13679 -3 + vertex -0.248642 7.94666 0 + vertex 1.66409 7.13679 0 + endloop + endfacet + facet normal 0.389896 0.920859 0 + outer loop + vertex -0.248642 7.94666 0 + vertex 1.66409 7.13679 -3 + vertex -0.248642 7.94666 -3 + endloop + endfacet + facet normal 0.471857 0.881675 -0 + outer loop + vertex -0.248642 7.94666 -3 + vertex -2.78119 9.30203 0 + vertex -0.248642 7.94666 0 + endloop + endfacet + facet normal 0.471857 0.881675 0 + outer loop + vertex -2.78119 9.30203 0 + vertex -0.248642 7.94666 -3 + vertex -2.78119 9.30203 -3 + endloop + endfacet + facet normal 0.524404 0.851469 -0 + outer loop + vertex -2.78119 9.30203 -3 + vertex -4.99153 10.6633 0 + vertex -2.78119 9.30203 0 + endloop + endfacet + facet normal 0.524404 0.851469 0 + outer loop + vertex -4.99153 10.6633 0 + vertex -2.78119 9.30203 -3 + vertex -4.99153 10.6633 -3 + endloop + endfacet + facet normal 0.658419 0.752652 -0 + outer loop + vertex -4.99153 10.6633 -3 + vertex -5.93765 11.491 0 + vertex -4.99153 10.6633 0 + endloop + endfacet + facet normal 0.658419 0.752652 0 + outer loop + vertex -5.93765 11.491 0 + vertex -4.99153 10.6633 -3 + vertex -5.93765 11.491 -3 + endloop + endfacet + facet normal 0.579458 -0.815002 0 + outer loop + vertex -5.93765 11.491 -3 + vertex -5.71478 11.6495 0 + vertex -5.93765 11.491 0 + endloop + endfacet + facet normal 0.579458 -0.815002 0 + outer loop + vertex -5.71478 11.6495 0 + vertex -5.93765 11.491 -3 + vertex -5.71478 11.6495 -3 + endloop + endfacet + facet normal 0.0440908 -0.999028 0 + outer loop + vertex -5.71478 11.6495 -3 + vertex -5.07797 11.6776 0 + vertex -5.71478 11.6495 0 + endloop + endfacet + facet normal 0.0440908 -0.999028 0 + outer loop + vertex -5.07797 11.6776 0 + vertex -5.71478 11.6495 -3 + vertex -5.07797 11.6776 -3 + endloop + endfacet + facet normal -0.139075 -0.990282 0 + outer loop + vertex -5.07797 11.6776 -3 + vertex -2.75335 11.3511 0 + vertex -5.07797 11.6776 0 + endloop + endfacet + facet normal -0.139075 -0.990282 -0 + outer loop + vertex -2.75335 11.3511 0 + vertex -5.07797 11.6776 -3 + vertex -2.75335 11.3511 -3 + endloop + endfacet + facet normal -0.139152 -0.990271 0 + outer loop + vertex -2.75335 11.3511 -3 + vertex -1.46211 11.1697 0 + vertex -2.75335 11.3511 0 + endloop + endfacet + facet normal -0.139152 -0.990271 -0 + outer loop + vertex -1.46211 11.1697 0 + vertex -2.75335 11.3511 -3 + vertex -1.46211 11.1697 -3 + endloop + endfacet + facet normal 0.0257838 -0.999668 0 + outer loop + vertex -1.46211 11.1697 -3 + vertex -0.394194 11.1972 0 + vertex -1.46211 11.1697 0 + endloop + endfacet + facet normal 0.0257838 -0.999668 0 + outer loop + vertex -0.394194 11.1972 0 + vertex -1.46211 11.1697 -3 + vertex -0.394194 11.1972 -3 + endloop + endfacet + facet normal 0.258065 -0.966128 0 + outer loop + vertex -0.394194 11.1972 -3 + vertex 0.535115 11.4454 0 + vertex -0.394194 11.1972 0 + endloop + endfacet + facet normal 0.258065 -0.966128 0 + outer loop + vertex 0.535115 11.4454 0 + vertex -0.394194 11.1972 -3 + vertex 0.535115 11.4454 -3 + endloop + endfacet + facet normal 0.481248 -0.876585 0 + outer loop + vertex 0.535115 11.4454 -3 + vertex 1.41055 11.926 0 + vertex 0.535115 11.4454 0 + endloop + endfacet + facet normal 0.481248 -0.876585 0 + outer loop + vertex 1.41055 11.926 0 + vertex 0.535115 11.4454 -3 + vertex 1.41055 11.926 -3 + endloop + endfacet + facet normal 0.671564 -0.740947 0 + outer loop + vertex 1.41055 11.926 -3 + vertex 1.87173 12.344 0 + vertex 1.41055 11.926 0 + endloop + endfacet + facet normal 0.671564 -0.740947 0 + outer loop + vertex 1.87173 12.344 0 + vertex 1.41055 11.926 -3 + vertex 1.87173 12.344 -3 + endloop + endfacet + facet normal 0.998006 0.0631228 0 + outer loop + vertex 1.87173 12.344 0 + vertex 1.8467 12.7398 -3 + vertex 1.8467 12.7398 0 + endloop + endfacet + facet normal 0.998006 0.0631228 0 + outer loop + vertex 1.8467 12.7398 -3 + vertex 1.87173 12.344 0 + vertex 1.87173 12.344 -3 + endloop + endfacet + facet normal 0.790564 0.612379 0 + outer loop + vertex 1.8467 12.7398 0 + vertex 1.50002 13.1874 -3 + vertex 1.50002 13.1874 0 + endloop + endfacet + facet normal 0.790564 0.612379 0 + outer loop + vertex 1.50002 13.1874 -3 + vertex 1.8467 12.7398 0 + vertex 1.8467 12.7398 -3 + endloop + endfacet + facet normal 0.55001 0.835158 -0 + outer loop + vertex 1.50002 13.1874 -3 + vertex 0.918757 13.5702 0 + vertex 1.50002 13.1874 0 + endloop + endfacet + facet normal 0.55001 0.835158 0 + outer loop + vertex 0.918757 13.5702 0 + vertex 1.50002 13.1874 -3 + vertex 0.918757 13.5702 -3 + endloop + endfacet + facet normal 0.293762 0.955879 -0 + outer loop + vertex 0.918757 13.5702 -3 + vertex -0.928844 14.138 0 + vertex 0.918757 13.5702 0 + endloop + endfacet + facet normal 0.293762 0.955879 0 + outer loop + vertex -0.928844 14.138 0 + vertex 0.918757 13.5702 -3 + vertex -0.928844 14.138 -3 + endloop + endfacet + facet normal 0.108589 0.994087 -0 + outer loop + vertex -0.928844 14.138 -3 + vertex -3.65881 14.4362 0 + vertex -0.928844 14.138 0 + endloop + endfacet + facet normal 0.108589 0.994087 0 + outer loop + vertex -3.65881 14.4362 0 + vertex -0.928844 14.138 -3 + vertex -3.65881 14.4362 -3 + endloop + endfacet + facet normal 0.00602839 0.999982 -0 + outer loop + vertex -3.65881 14.4362 -3 + vertex -7.23385 14.4578 0 + vertex -3.65881 14.4362 0 + endloop + endfacet + facet normal 0.00602839 0.999982 0 + outer loop + vertex -7.23385 14.4578 0 + vertex -3.65881 14.4362 -3 + vertex -7.23385 14.4578 -3 + endloop + endfacet + facet normal -0.0644585 0.99792 0 + outer loop + vertex -7.23385 14.4578 -3 + vertex -10.6367 14.238 0 + vertex -7.23385 14.4578 0 + endloop + endfacet + facet normal -0.0644585 0.99792 0 + outer loop + vertex -10.6367 14.238 0 + vertex -7.23385 14.4578 -3 + vertex -10.6367 14.238 -3 + endloop + endfacet + facet normal -0.276015 0.961153 0 + outer loop + vertex -10.6367 14.238 -3 + vertex -13.7227 13.3517 0 + vertex -10.6367 14.238 0 + endloop + endfacet + facet normal -0.276015 0.961153 0 + outer loop + vertex -13.7227 13.3517 0 + vertex -10.6367 14.238 -3 + vertex -13.7227 13.3517 -3 + endloop + endfacet + facet normal -0.25467 0.967028 0 + outer loop + vertex -13.7227 13.3517 -3 + vertex -17.5299 12.3491 0 + vertex -13.7227 13.3517 0 + endloop + endfacet + facet normal -0.25467 0.967028 0 + outer loop + vertex -17.5299 12.3491 0 + vertex -13.7227 13.3517 -3 + vertex -17.5299 12.3491 -3 + endloop + endfacet + facet normal -0.135841 0.990731 0 + outer loop + vertex -17.5299 12.3491 -3 + vertex -20.0298 12.0063 0 + vertex -17.5299 12.3491 0 + endloop + endfacet + facet normal -0.135841 0.990731 0 + outer loop + vertex -20.0298 12.0063 0 + vertex -17.5299 12.3491 -3 + vertex -20.0298 12.0063 -3 + endloop + endfacet + facet normal -0.101855 0.994799 0 + outer loop + vertex -20.0298 12.0063 -3 + vertex -22.4428 11.7593 0 + vertex -20.0298 12.0063 0 + endloop + endfacet + facet normal -0.101855 0.994799 0 + outer loop + vertex -22.4428 11.7593 0 + vertex -20.0298 12.0063 -3 + vertex -22.4428 11.7593 -3 + endloop + endfacet + facet normal -0.0308153 0.999525 0 + outer loop + vertex -22.4428 11.7593 -3 + vertex -25.7097 11.6586 0 + vertex -22.4428 11.7593 0 + endloop + endfacet + facet normal -0.0308153 0.999525 0 + outer loop + vertex -25.7097 11.6586 0 + vertex -22.4428 11.7593 -3 + vertex -25.7097 11.6586 -3 + endloop + endfacet + facet normal 0.0184303 0.99983 -0 + outer loop + vertex -25.7097 11.6586 -3 + vertex -28.6588 11.7129 0 + vertex -25.7097 11.6586 0 + endloop + endfacet + facet normal 0.0184303 0.99983 0 + outer loop + vertex -28.6588 11.7129 0 + vertex -25.7097 11.6586 -3 + vertex -28.6588 11.7129 -3 + endloop + endfacet + facet normal 0.147852 0.989009 -0 + outer loop + vertex -28.6588 11.7129 -3 + vertex -30.1182 11.9311 0 + vertex -28.6588 11.7129 0 + endloop + endfacet + facet normal 0.147852 0.989009 0 + outer loop + vertex -30.1182 11.9311 0 + vertex -28.6588 11.7129 -3 + vertex -30.1182 11.9311 -3 + endloop + endfacet + facet normal 0.940295 0.34036 0 + outer loop + vertex -30.1182 11.9311 0 + vertex -30.3887 12.6783 -3 + vertex -30.3887 12.6783 0 + endloop + endfacet + facet normal 0.940295 0.34036 0 + outer loop + vertex -30.3887 12.6783 -3 + vertex -30.1182 11.9311 0 + vertex -30.1182 11.9311 -3 + endloop + endfacet + facet normal 0.978074 -0.208259 0 + outer loop + vertex -30.3887 12.6783 0 + vertex -30.3118 13.0393 -3 + vertex -30.3118 13.0393 0 + endloop + endfacet + facet normal 0.978074 -0.208259 0 + outer loop + vertex -30.3118 13.0393 -3 + vertex -30.3887 12.6783 0 + vertex -30.3887 12.6783 -3 + endloop + endfacet + facet normal 0.488021 -0.872832 0 + outer loop + vertex -30.3118 13.0393 -3 + vertex -29.9412 13.2465 0 + vertex -30.3118 13.0393 0 + endloop + endfacet + facet normal 0.488021 -0.872832 0 + outer loop + vertex -29.9412 13.2465 0 + vertex -30.3118 13.0393 -3 + vertex -29.9412 13.2465 -3 + endloop + endfacet + facet normal 0.0669219 -0.997758 0 + outer loop + vertex -29.9412 13.2465 -3 + vertex -27.4778 13.4117 0 + vertex -29.9412 13.2465 0 + endloop + endfacet + facet normal 0.0669219 -0.997758 0 + outer loop + vertex -27.4778 13.4117 0 + vertex -29.9412 13.2465 -3 + vertex -27.4778 13.4117 -3 + endloop + endfacet + facet normal 0.0722192 -0.997389 0 + outer loop + vertex -27.4778 13.4117 -3 + vertex -24.873 13.6003 0 + vertex -27.4778 13.4117 0 + endloop + endfacet + facet normal 0.0722192 -0.997389 0 + outer loop + vertex -24.873 13.6003 0 + vertex -27.4778 13.4117 -3 + vertex -24.873 13.6003 -3 + endloop + endfacet + facet normal 0.168213 -0.985751 0 + outer loop + vertex -24.873 13.6003 -3 + vertex -22.3118 14.0374 0 + vertex -24.873 13.6003 0 + endloop + endfacet + facet normal 0.168213 -0.985751 0 + outer loop + vertex -22.3118 14.0374 0 + vertex -24.873 13.6003 -3 + vertex -22.3118 14.0374 -3 + endloop + endfacet + facet normal 0.261629 -0.965169 0 + outer loop + vertex -22.3118 14.0374 -3 + vertex -19.733 14.7364 0 + vertex -22.3118 14.0374 0 + endloop + endfacet + facet normal 0.261629 -0.965169 0 + outer loop + vertex -19.733 14.7364 0 + vertex -22.3118 14.0374 -3 + vertex -19.733 14.7364 -3 + endloop + endfacet + facet normal 0.344283 -0.938866 0 + outer loop + vertex -19.733 14.7364 -3 + vertex -17.0754 15.711 0 + vertex -19.733 14.7364 0 + endloop + endfacet + facet normal 0.344283 -0.938866 0 + outer loop + vertex -17.0754 15.711 0 + vertex -19.733 14.7364 -3 + vertex -17.0754 15.711 -3 + endloop + endfacet + facet normal 0.435809 -0.900039 0 + outer loop + vertex -17.0754 15.711 -3 + vertex -15.009 16.7116 0 + vertex -17.0754 15.711 0 + endloop + endfacet + facet normal 0.435809 -0.900039 0 + outer loop + vertex -15.009 16.7116 0 + vertex -17.0754 15.711 -3 + vertex -15.009 16.7116 -3 + endloop + endfacet + facet normal 0.583649 -0.812006 0 + outer loop + vertex -15.009 16.7116 -3 + vertex -12.0133 18.8648 0 + vertex -15.009 16.7116 0 + endloop + endfacet + facet normal 0.583649 -0.812006 0 + outer loop + vertex -12.0133 18.8648 0 + vertex -15.009 16.7116 -3 + vertex -12.0133 18.8648 -3 + endloop + endfacet + facet normal 0.632447 -0.774604 0 + outer loop + vertex -12.0133 18.8648 -3 + vertex -11.1208 19.5935 0 + vertex -12.0133 18.8648 0 + endloop + endfacet + facet normal 0.632447 -0.774604 0 + outer loop + vertex -11.1208 19.5935 0 + vertex -12.0133 18.8648 -3 + vertex -11.1208 19.5935 -3 + endloop + endfacet + facet normal 0.915349 -0.40266 0 + outer loop + vertex -11.1208 19.5935 0 + vertex -10.9412 20.0018 -3 + vertex -10.9412 20.0018 0 + endloop + endfacet + facet normal 0.915349 -0.40266 0 + outer loop + vertex -10.9412 20.0018 -3 + vertex -11.1208 19.5935 0 + vertex -11.1208 19.5935 -3 + endloop + endfacet + facet normal 0.285826 0.958281 -0 + outer loop + vertex -10.9412 20.0018 -3 + vertex -11.5389 20.1801 0 + vertex -10.9412 20.0018 0 + endloop + endfacet + facet normal 0.285826 0.958281 0 + outer loop + vertex -11.5389 20.1801 0 + vertex -10.9412 20.0018 -3 + vertex -11.5389 20.1801 -3 + endloop + endfacet + facet normal 0.0268157 0.99964 -0 + outer loop + vertex -11.5389 20.1801 -3 + vertex -12.9783 20.2187 0 + vertex -11.5389 20.1801 0 + endloop + endfacet + facet normal 0.0268157 0.99964 0 + outer loop + vertex -12.9783 20.2187 0 + vertex -11.5389 20.1801 -3 + vertex -12.9783 20.2187 -3 + endloop + endfacet + facet normal -0.0662732 0.997802 0 + outer loop + vertex -12.9783 20.2187 -3 + vertex -16.3196 19.9968 0 + vertex -12.9783 20.2187 0 + endloop + endfacet + facet normal -0.0662732 0.997802 0 + outer loop + vertex -16.3196 19.9968 0 + vertex -12.9783 20.2187 -3 + vertex -16.3196 19.9968 -3 + endloop + endfacet + facet normal -0.149342 0.988786 0 + outer loop + vertex -16.3196 19.9968 -3 + vertex -20.1789 19.4139 0 + vertex -16.3196 19.9968 0 + endloop + endfacet + facet normal -0.149342 0.988786 0 + outer loop + vertex -20.1789 19.4139 0 + vertex -16.3196 19.9968 -3 + vertex -20.1789 19.4139 -3 + endloop + endfacet + facet normal -0.0917718 0.99578 0 + outer loop + vertex -20.1789 19.4139 -3 + vertex -24.1572 19.0472 0 + vertex -20.1789 19.4139 0 + endloop + endfacet + facet normal -0.0917718 0.99578 0 + outer loop + vertex -24.1572 19.0472 0 + vertex -20.1789 19.4139 -3 + vertex -24.1572 19.0472 -3 + endloop + endfacet + facet normal -0.0311054 0.999516 0 + outer loop + vertex -24.1572 19.0472 -3 + vertex -27.5587 18.9414 0 + vertex -24.1572 19.0472 0 + endloop + endfacet + facet normal -0.0311054 0.999516 0 + outer loop + vertex -27.5587 18.9414 0 + vertex -24.1572 19.0472 -3 + vertex -27.5587 18.9414 -3 + endloop + endfacet + facet normal 0.0933351 0.995635 -0 + outer loop + vertex -27.5587 18.9414 -3 + vertex -29.687 19.1409 0 + vertex -27.5587 18.9414 0 + endloop + endfacet + facet normal 0.0933351 0.995635 0 + outer loop + vertex -29.687 19.1409 0 + vertex -27.5587 18.9414 -3 + vertex -29.687 19.1409 -3 + endloop + endfacet + facet normal 0.326889 0.945063 -0 + outer loop + vertex -29.687 19.1409 -3 + vertex -33.0651 20.3093 0 + vertex -29.687 19.1409 0 + endloop + endfacet + facet normal 0.326889 0.945063 0 + outer loop + vertex -33.0651 20.3093 0 + vertex -29.687 19.1409 -3 + vertex -33.0651 20.3093 -3 + endloop + endfacet + facet normal 0.441663 0.897181 -0 + outer loop + vertex -33.0651 20.3093 -3 + vertex -35.7552 21.6337 0 + vertex -33.0651 20.3093 0 + endloop + endfacet + facet normal 0.441663 0.897181 0 + outer loop + vertex -35.7552 21.6337 0 + vertex -33.0651 20.3093 -3 + vertex -35.7552 21.6337 -3 + endloop + endfacet + facet normal 0.596659 0.802495 -0 + outer loop + vertex -35.7552 21.6337 -3 + vertex -37.6991 23.0789 0 + vertex -35.7552 21.6337 0 + endloop + endfacet + facet normal 0.596659 0.802495 0 + outer loop + vertex -37.6991 23.0789 0 + vertex -35.7552 21.6337 -3 + vertex -37.6991 23.0789 -3 + endloop + endfacet + facet normal 0.746999 0.664825 0 + outer loop + vertex -37.6991 23.0789 0 + vertex -38.3729 23.836 -3 + vertex -38.3729 23.836 0 + endloop + endfacet + facet normal 0.746999 0.664825 0 + outer loop + vertex -38.3729 23.836 -3 + vertex -37.6991 23.0789 0 + vertex -37.6991 23.0789 -3 + endloop + endfacet + facet normal 0.857117 0.515122 0 + outer loop + vertex -38.3729 23.836 0 + vertex -38.8382 24.6102 -3 + vertex -38.8382 24.6102 0 + endloop + endfacet + facet normal 0.857117 0.515122 0 + outer loop + vertex -38.8382 24.6102 -3 + vertex -38.3729 23.836 0 + vertex -38.3729 23.836 -3 + endloop + endfacet + facet normal 0.945559 0.32545 0 + outer loop + vertex -38.8382 24.6102 0 + vertex -39.1303 25.4589 -3 + vertex -39.1303 25.4589 0 + endloop + endfacet + facet normal 0.945559 0.32545 0 + outer loop + vertex -39.1303 25.4589 -3 + vertex -38.8382 24.6102 0 + vertex -38.8382 24.6102 -3 + endloop + endfacet + facet normal 0.969805 -0.24388 0 + outer loop + vertex -39.1303 25.4589 0 + vertex -39.0347 25.8392 -3 + vertex -39.0347 25.8392 0 + endloop + endfacet + facet normal 0.969805 -0.24388 0 + outer loop + vertex -39.0347 25.8392 -3 + vertex -39.1303 25.4589 0 + vertex -39.1303 25.4589 -3 + endloop + endfacet + facet normal -0.217347 -0.976094 0 + outer loop + vertex -39.0347 25.8392 -3 + vertex -38.5782 25.7376 0 + vertex -39.0347 25.8392 0 + endloop + endfacet + facet normal -0.217347 -0.976094 -0 + outer loop + vertex -38.5782 25.7376 0 + vertex -39.0347 25.8392 -3 + vertex -38.5782 25.7376 -3 + endloop + endfacet + facet normal -0.602798 -0.797894 0 + outer loop + vertex -38.5782 25.7376 -3 + vertex -37.7877 25.1404 0 + vertex -38.5782 25.7376 0 + endloop + endfacet + facet normal -0.602798 -0.797894 -0 + outer loop + vertex -37.7877 25.1404 0 + vertex -38.5782 25.7376 -3 + vertex -37.7877 25.1404 -3 + endloop + endfacet + facet normal -0.582847 -0.812582 0 + outer loop + vertex -37.7877 25.1404 -3 + vertex -36.1697 23.9798 0 + vertex -37.7877 25.1404 0 + endloop + endfacet + facet normal -0.582847 -0.812582 -0 + outer loop + vertex -36.1697 23.9798 0 + vertex -37.7877 25.1404 -3 + vertex -36.1697 23.9798 -3 + endloop + endfacet + facet normal -0.438905 -0.898534 0 + outer loop + vertex -36.1697 23.9798 -3 + vertex -34.2108 23.023 0 + vertex -36.1697 23.9798 0 + endloop + endfacet + facet normal -0.438905 -0.898534 -0 + outer loop + vertex -34.2108 23.023 0 + vertex -36.1697 23.9798 -3 + vertex -34.2108 23.023 -3 + endloop + endfacet + facet normal -0.304923 -0.952377 0 + outer loop + vertex -34.2108 23.023 -3 + vertex -32.1178 22.3529 0 + vertex -34.2108 23.023 0 + endloop + endfacet + facet normal -0.304923 -0.952377 -0 + outer loop + vertex -32.1178 22.3529 0 + vertex -34.2108 23.023 -3 + vertex -32.1178 22.3529 -3 + endloop + endfacet + facet normal -0.147036 -0.989131 0 + outer loop + vertex -32.1178 22.3529 -3 + vertex -30.0976 22.0525 0 + vertex -32.1178 22.3529 0 + endloop + endfacet + facet normal -0.147036 -0.989131 -0 + outer loop + vertex -30.0976 22.0525 0 + vertex -32.1178 22.3529 -3 + vertex -30.0976 22.0525 -3 + endloop + endfacet + facet normal -0.0457632 -0.998952 0 + outer loop + vertex -30.0976 22.0525 -3 + vertex -28.3511 21.9725 0 + vertex -30.0976 22.0525 0 + endloop + endfacet + facet normal -0.0457632 -0.998952 -0 + outer loop + vertex -28.3511 21.9725 0 + vertex -30.0976 22.0525 -3 + vertex -28.3511 21.9725 -3 + endloop + endfacet + facet normal 0.491954 0.870621 -0 + outer loop + vertex -28.3511 21.9725 -3 + vertex -29.0303 22.3563 0 + vertex -28.3511 21.9725 0 + endloop + endfacet + facet normal 0.491954 0.870621 0 + outer loop + vertex -29.0303 22.3563 0 + vertex -28.3511 21.9725 -3 + vertex -29.0303 22.3563 -3 + endloop + endfacet + facet normal 0.563624 0.826031 -0 + outer loop + vertex -29.0303 22.3563 -3 + vertex -30.3878 23.2826 0 + vertex -29.0303 22.3563 0 + endloop + endfacet + facet normal 0.563624 0.826031 0 + outer loop + vertex -30.3878 23.2826 0 + vertex -29.0303 22.3563 -3 + vertex -30.3878 23.2826 -3 + endloop + endfacet + facet normal 0.796403 0.604766 0 + outer loop + vertex -30.3878 23.2826 0 + vertex -31.0943 24.213 -3 + vertex -31.0943 24.213 0 + endloop + endfacet + facet normal 0.796403 0.604766 0 + outer loop + vertex -31.0943 24.213 -3 + vertex -30.3878 23.2826 0 + vertex -30.3878 23.2826 -3 + endloop + endfacet + facet normal 0.951494 0.307667 0 + outer loop + vertex -31.0943 24.213 0 + vertex -31.2773 24.779 -3 + vertex -31.2773 24.779 0 + endloop + endfacet + facet normal 0.951494 0.307667 0 + outer loop + vertex -31.2773 24.779 -3 + vertex -31.0943 24.213 0 + vertex -31.0943 24.213 -3 + endloop + endfacet + facet normal 0.935098 -0.35439 0 + outer loop + vertex -31.2773 24.779 0 + vertex -31.1793 25.0376 -3 + vertex -31.1793 25.0376 0 + endloop + endfacet + facet normal 0.935098 -0.35439 0 + outer loop + vertex -31.1793 25.0376 -3 + vertex -31.2773 24.779 0 + vertex -31.2773 24.779 -3 + endloop + endfacet + facet normal -0.153546 -0.988142 0 + outer loop + vertex -31.1793 25.0376 -3 + vertex -30.8173 24.9813 0 + vertex -31.1793 25.0376 0 + endloop + endfacet + facet normal -0.153546 -0.988142 -0 + outer loop + vertex -30.8173 24.9813 0 + vertex -31.1793 25.0376 -3 + vertex -30.8173 24.9813 -3 + endloop + endfacet + facet normal -0.527885 -0.849316 0 + outer loop + vertex -30.8173 24.9813 -3 + vertex -30.2081 24.6027 0 + vertex -30.8173 24.9813 0 + endloop + endfacet + facet normal -0.527885 -0.849316 -0 + outer loop + vertex -30.2081 24.6027 0 + vertex -30.8173 24.9813 -3 + vertex -30.2081 24.6027 -3 + endloop + endfacet + facet normal -0.502983 -0.864296 0 + outer loop + vertex -30.2081 24.6027 -3 + vertex -29.3958 24.13 0 + vertex -30.2081 24.6027 0 + endloop + endfacet + facet normal -0.502983 -0.864296 -0 + outer loop + vertex -29.3958 24.13 0 + vertex -30.2081 24.6027 -3 + vertex -29.3958 24.13 -3 + endloop + endfacet + facet normal -0.286557 -0.958063 0 + outer loop + vertex -29.3958 24.13 -3 + vertex -28.4642 23.8513 0 + vertex -29.3958 24.13 0 + endloop + endfacet + facet normal -0.286557 -0.958063 -0 + outer loop + vertex -28.4642 23.8513 0 + vertex -29.3958 24.13 -3 + vertex -28.4642 23.8513 -3 + endloop + endfacet + facet normal -0.0843211 -0.996439 0 + outer loop + vertex -28.4642 23.8513 -3 + vertex -27.3687 23.7586 0 + vertex -28.4642 23.8513 0 + endloop + endfacet + facet normal -0.0843211 -0.996439 -0 + outer loop + vertex -27.3687 23.7586 0 + vertex -28.4642 23.8513 -3 + vertex -27.3687 23.7586 -3 + endloop + endfacet + facet normal 0.065101 -0.997879 0 + outer loop + vertex -27.3687 23.7586 -3 + vertex -26.0647 23.8437 0 + vertex -27.3687 23.7586 0 + endloop + endfacet + facet normal 0.065101 -0.997879 0 + outer loop + vertex -26.0647 23.8437 0 + vertex -27.3687 23.7586 -3 + vertex -26.0647 23.8437 -3 + endloop + endfacet + facet normal 0.119464 -0.992839 0 + outer loop + vertex -26.0647 23.8437 -3 + vertex -24.664 24.0122 0 + vertex -26.0647 23.8437 0 + endloop + endfacet + facet normal 0.119464 -0.992839 0 + outer loop + vertex -24.664 24.0122 0 + vertex -26.0647 23.8437 -3 + vertex -24.664 24.0122 -3 + endloop + endfacet + facet normal 0.193693 0.981062 -0 + outer loop + vertex -24.664 24.0122 -3 + vertex -26.0224 24.2804 0 + vertex -24.664 24.0122 0 + endloop + endfacet + facet normal 0.193693 0.981062 0 + outer loop + vertex -26.0224 24.2804 0 + vertex -24.664 24.0122 -3 + vertex -26.0224 24.2804 -3 + endloop + endfacet + facet normal 0.282043 0.959402 -0 + outer loop + vertex -26.0224 24.2804 -3 + vertex -28.1365 24.9019 0 + vertex -26.0224 24.2804 0 + endloop + endfacet + facet normal 0.282043 0.959402 0 + outer loop + vertex -28.1365 24.9019 0 + vertex -26.0224 24.2804 -3 + vertex -28.1365 24.9019 -3 + endloop + endfacet + facet normal 0.487989 0.87285 -0 + outer loop + vertex -28.1365 24.9019 -3 + vertex -29.9035 25.8898 0 + vertex -28.1365 24.9019 0 + endloop + endfacet + facet normal 0.487989 0.87285 0 + outer loop + vertex -29.9035 25.8898 0 + vertex -28.1365 24.9019 -3 + vertex -29.9035 25.8898 -3 + endloop + endfacet + facet normal 0.641558 0.767075 -0 + outer loop + vertex -29.9035 25.8898 -3 + vertex -31.116 26.9038 0 + vertex -29.9035 25.8898 0 + endloop + endfacet + facet normal 0.641558 0.767075 0 + outer loop + vertex -31.116 26.9038 0 + vertex -29.9035 25.8898 -3 + vertex -31.116 26.9038 -3 + endloop + endfacet + facet normal 0.876545 0.48132 0 + outer loop + vertex -31.116 26.9038 0 + vertex -31.2912 27.2229 -3 + vertex -31.2912 27.2229 0 + endloop + endfacet + facet normal 0.876545 0.48132 0 + outer loop + vertex -31.2912 27.2229 -3 + vertex -31.116 26.9038 0 + vertex -31.116 26.9038 -3 + endloop + endfacet + facet normal 0.956151 -0.292876 0 + outer loop + vertex -31.2912 27.2229 0 + vertex -31.2177 27.4629 -3 + vertex -31.2177 27.4629 0 + endloop + endfacet + facet normal 0.956151 -0.292876 0 + outer loop + vertex -31.2177 27.4629 -3 + vertex -31.2912 27.2229 0 + vertex -31.2912 27.2229 -3 + endloop + endfacet + facet normal 0.0512406 -0.998686 0 + outer loop + vertex -31.2177 27.4629 -3 + vertex -30.666 27.4912 0 + vertex -31.2177 27.4629 0 + endloop + endfacet + facet normal 0.0512406 -0.998686 0 + outer loop + vertex -30.666 27.4912 0 + vertex -31.2177 27.4629 -3 + vertex -30.666 27.4912 -3 + endloop + endfacet + facet normal -0.343857 -0.939022 0 + outer loop + vertex -30.666 27.4912 -3 + vertex -29.2879 26.9865 0 + vertex -30.666 27.4912 0 + endloop + endfacet + facet normal -0.343857 -0.939022 -0 + outer loop + vertex -29.2879 26.9865 0 + vertex -30.666 27.4912 -3 + vertex -29.2879 26.9865 -3 + endloop + endfacet + facet normal -0.315787 -0.94883 0 + outer loop + vertex -29.2879 26.9865 -3 + vertex -27.4214 26.3653 0 + vertex -29.2879 26.9865 0 + endloop + endfacet + facet normal -0.315787 -0.94883 -0 + outer loop + vertex -27.4214 26.3653 0 + vertex -29.2879 26.9865 -3 + vertex -27.4214 26.3653 -3 + endloop + endfacet + facet normal -0.0620611 -0.998072 0 + outer loop + vertex -27.4214 26.3653 -3 + vertex -24.8433 26.205 0 + vertex -27.4214 26.3653 0 + endloop + endfacet + facet normal -0.0620611 -0.998072 -0 + outer loop + vertex -24.8433 26.205 0 + vertex -27.4214 26.3653 -3 + vertex -24.8433 26.205 -3 + endloop + endfacet + facet normal 0.0113967 -0.999935 0 + outer loop + vertex -24.8433 26.205 -3 + vertex -22.0473 26.2369 0 + vertex -24.8433 26.205 0 + endloop + endfacet + facet normal 0.0113967 -0.999935 0 + outer loop + vertex -22.0473 26.2369 0 + vertex -24.8433 26.205 -3 + vertex -22.0473 26.2369 -3 + endloop + endfacet + facet normal 0.196528 -0.980498 0 + outer loop + vertex -22.0473 26.2369 -3 + vertex -21.4485 26.3569 0 + vertex -22.0473 26.2369 0 + endloop + endfacet + facet normal 0.196528 -0.980498 0 + outer loop + vertex -21.4485 26.3569 0 + vertex -22.0473 26.2369 -3 + vertex -21.4485 26.3569 -3 + endloop + endfacet + facet normal 0.743557 -0.668673 0 + outer loop + vertex -21.4485 26.3569 0 + vertex -21.2681 26.5576 -3 + vertex -21.2681 26.5576 0 + endloop + endfacet + facet normal 0.743557 -0.668673 0 + outer loop + vertex -21.2681 26.5576 -3 + vertex -21.4485 26.3569 0 + vertex -21.4485 26.3569 -3 + endloop + endfacet + facet normal 0.261077 0.965318 -0 + outer loop + vertex -21.2681 26.5576 -3 + vertex -22.4212 26.8695 0 + vertex -21.2681 26.5576 0 + endloop + endfacet + facet normal 0.261077 0.965318 0 + outer loop + vertex -22.4212 26.8695 0 + vertex -21.2681 26.5576 -3 + vertex -22.4212 26.8695 -3 + endloop + endfacet + facet normal 0.309949 0.950753 -0 + outer loop + vertex -22.4212 26.8695 -3 + vertex -23.8902 27.3484 0 + vertex -22.4212 26.8695 0 + endloop + endfacet + facet normal 0.309949 0.950753 0 + outer loop + vertex -23.8902 27.3484 0 + vertex -22.4212 26.8695 -3 + vertex -23.8902 27.3484 -3 + endloop + endfacet + facet normal 0.603717 0.797199 -0 + outer loop + vertex -23.8902 27.3484 -3 + vertex -24.3225 27.6757 0 + vertex -23.8902 27.3484 0 + endloop + endfacet + facet normal 0.603717 0.797199 0 + outer loop + vertex -24.3225 27.6757 0 + vertex -23.8902 27.3484 -3 + vertex -24.3225 27.6757 -3 + endloop + endfacet + facet normal 0.98955 0.144189 0 + outer loop + vertex -24.3225 27.6757 0 + vertex -24.3632 27.9554 -3 + vertex -24.3632 27.9554 0 + endloop + endfacet + facet normal 0.98955 0.144189 0 + outer loop + vertex -24.3632 27.9554 -3 + vertex -24.3225 27.6757 0 + vertex -24.3225 27.6757 -3 + endloop + endfacet + facet normal -0.0279773 -0.999609 0 + outer loop + vertex -24.3632 27.9554 -3 + vertex -22.4093 27.9007 0 + vertex -24.3632 27.9554 0 + endloop + endfacet + facet normal -0.0279773 -0.999609 -0 + outer loop + vertex -22.4093 27.9007 0 + vertex -24.3632 27.9554 -3 + vertex -22.4093 27.9007 -3 + endloop + endfacet + facet normal -0.150133 -0.988666 0 + outer loop + vertex -22.4093 27.9007 -3 + vertex -20.8096 27.6578 0 + vertex -22.4093 27.9007 0 + endloop + endfacet + facet normal -0.150133 -0.988666 -0 + outer loop + vertex -20.8096 27.6578 0 + vertex -22.4093 27.9007 -3 + vertex -20.8096 27.6578 -3 + endloop + endfacet + facet normal -0.458094 -0.888904 0 + outer loop + vertex -20.8096 27.6578 -3 + vertex -19.9485 27.2141 0 + vertex -20.8096 27.6578 0 + endloop + endfacet + facet normal -0.458094 -0.888904 -0 + outer loop + vertex -19.9485 27.2141 0 + vertex -20.8096 27.6578 -3 + vertex -19.9485 27.2141 -3 + endloop + endfacet + facet normal -0.64002 -0.768358 0 + outer loop + vertex -19.9485 27.2141 -3 + vertex -19.335 26.703 0 + vertex -19.9485 27.2141 0 + endloop + endfacet + facet normal -0.64002 -0.768358 -0 + outer loop + vertex -19.335 26.703 0 + vertex -19.9485 27.2141 -3 + vertex -19.335 26.703 -3 + endloop + endfacet + facet normal 0.254037 -0.967194 0 + outer loop + vertex -19.335 26.703 -3 + vertex -16.9875 27.3196 0 + vertex -19.335 26.703 0 + endloop + endfacet + facet normal 0.254037 -0.967194 0 + outer loop + vertex -16.9875 27.3196 0 + vertex -19.335 26.703 -3 + vertex -16.9875 27.3196 -3 + endloop + endfacet + facet normal 0.212489 -0.977163 0 + outer loop + vertex -16.9875 27.3196 -3 + vertex -15.2376 27.7001 0 + vertex -16.9875 27.3196 0 + endloop + endfacet + facet normal 0.212489 -0.977163 0 + outer loop + vertex -15.2376 27.7001 0 + vertex -16.9875 27.3196 -3 + vertex -15.2376 27.7001 -3 + endloop + endfacet + facet normal 0.0813778 -0.996683 0 + outer loop + vertex -15.2376 27.7001 -3 + vertex -13.5562 27.8374 0 + vertex -15.2376 27.7001 0 + endloop + endfacet + facet normal 0.0813778 -0.996683 0 + outer loop + vertex -13.5562 27.8374 0 + vertex -15.2376 27.7001 -3 + vertex -13.5562 27.8374 -3 + endloop + endfacet + facet normal -0.0507625 -0.998711 0 + outer loop + vertex -13.5562 27.8374 -3 + vertex -11.546 27.7352 0 + vertex -13.5562 27.8374 0 + endloop + endfacet + facet normal -0.0507625 -0.998711 -0 + outer loop + vertex -11.546 27.7352 0 + vertex -13.5562 27.8374 -3 + vertex -11.546 27.7352 -3 + endloop + endfacet + facet normal -0.122536 -0.992464 0 + outer loop + vertex -11.546 27.7352 -3 + vertex -8.80952 27.3973 0 + vertex -11.546 27.7352 0 + endloop + endfacet + facet normal -0.122536 -0.992464 -0 + outer loop + vertex -8.80952 27.3973 0 + vertex -11.546 27.7352 -3 + vertex -8.80952 27.3973 -3 + endloop + endfacet + facet normal -0.0983783 -0.995149 0 + outer loop + vertex -8.80952 27.3973 -3 + vertex -7.25507 27.2437 0 + vertex -8.80952 27.3973 0 + endloop + endfacet + facet normal -0.0983783 -0.995149 -0 + outer loop + vertex -7.25507 27.2437 0 + vertex -8.80952 27.3973 -3 + vertex -7.25507 27.2437 -3 + endloop + endfacet + facet normal 0.163792 -0.986495 0 + outer loop + vertex -7.25507 27.2437 -3 + vertex -6.55612 27.3597 0 + vertex -7.25507 27.2437 0 + endloop + endfacet + facet normal 0.163792 -0.986495 0 + outer loop + vertex -6.55612 27.3597 0 + vertex -7.25507 27.2437 -3 + vertex -6.55612 27.3597 -3 + endloop + endfacet + facet normal 0.830428 -0.557126 0 + outer loop + vertex -6.55612 27.3597 0 + vertex -6.38329 27.6173 -3 + vertex -6.38329 27.6173 0 + endloop + endfacet + facet normal 0.830428 -0.557126 0 + outer loop + vertex -6.38329 27.6173 -3 + vertex -6.55612 27.3597 0 + vertex -6.55612 27.3597 -3 + endloop + endfacet + facet normal 0.987965 -0.154679 0 + outer loop + vertex -6.38329 27.6173 0 + vertex -6.28322 28.2565 -3 + vertex -6.28322 28.2565 0 + endloop + endfacet + facet normal 0.987965 -0.154679 0 + outer loop + vertex -6.28322 28.2565 -3 + vertex -6.38329 27.6173 0 + vertex -6.38329 27.6173 -3 + endloop + endfacet + facet normal 0.99984 -0.0178603 0 + outer loop + vertex -6.28322 28.2565 0 + vertex -6.22131 31.7226 -3 + vertex -6.22131 31.7226 0 + endloop + endfacet + facet normal 0.99984 -0.0178603 0 + outer loop + vertex -6.22131 31.7226 -3 + vertex -6.28322 28.2565 0 + vertex -6.28322 28.2565 -3 + endloop + endfacet + facet normal 0.999322 -0.0368307 0 + outer loop + vertex -6.22131 31.7226 0 + vertex -6.055 36.2349 -3 + vertex -6.055 36.2349 0 + endloop + endfacet + facet normal 0.999322 -0.0368307 0 + outer loop + vertex -6.055 36.2349 -3 + vertex -6.22131 31.7226 0 + vertex -6.22131 31.7226 -3 + endloop + endfacet + facet normal 0.823305 -0.5676 0 + outer loop + vertex -6.055 36.2349 0 + vertex -5.8163 36.5812 -3 + vertex -5.8163 36.5812 0 + endloop + endfacet + facet normal 0.823305 -0.5676 0 + outer loop + vertex -5.8163 36.5812 -3 + vertex -6.055 36.2349 0 + vertex -6.055 36.2349 -3 + endloop + endfacet + facet normal -0.301391 -0.953501 0 + outer loop + vertex -5.8163 36.5812 -3 + vertex -5.55994 36.5001 0 + vertex -5.8163 36.5812 0 + endloop + endfacet + facet normal -0.301391 -0.953501 -0 + outer loop + vertex -5.55994 36.5001 0 + vertex -5.8163 36.5812 -3 + vertex -5.55994 36.5001 -3 + endloop + endfacet + facet normal -0.928472 -0.371402 0 + outer loop + vertex -4.97284 35.0324 -3 + vertex -5.55994 36.5001 0 + vertex -5.55994 36.5001 -3 + endloop + endfacet + facet normal -0.928472 -0.371402 0 + outer loop + vertex -5.55994 36.5001 0 + vertex -4.97284 35.0324 -3 + vertex -4.97284 35.0324 0 + endloop + endfacet + facet normal -0.946087 -0.323913 0 + outer loop + vertex -3.97987 32.1322 -3 + vertex -4.97284 35.0324 0 + vertex -4.97284 35.0324 -3 + endloop + endfacet + facet normal -0.946087 -0.323913 0 + outer loop + vertex -4.97284 35.0324 0 + vertex -3.97987 32.1322 -3 + vertex -3.97987 32.1322 0 + endloop + endfacet + facet normal -0.891782 -0.452466 0 + outer loop + vertex -2.77953 29.7664 -3 + vertex -3.97987 32.1322 0 + vertex -3.97987 32.1322 -3 + endloop + endfacet + facet normal -0.891782 -0.452466 0 + outer loop + vertex -3.97987 32.1322 0 + vertex -2.77953 29.7664 -3 + vertex -2.77953 29.7664 0 + endloop + endfacet + facet normal -0.788004 -0.61567 0 + outer loop + vertex -1.46161 28.0795 -3 + vertex -2.77953 29.7664 0 + vertex -2.77953 29.7664 -3 + endloop + endfacet + facet normal -0.788004 -0.61567 0 + outer loop + vertex -2.77953 29.7664 0 + vertex -1.46161 28.0795 -3 + vertex -1.46161 28.0795 0 + endloop + endfacet + facet normal -0.627252 -0.778816 0 + outer loop + vertex -1.46161 28.0795 -3 + vertex -0.786632 27.5359 0 + vertex -1.46161 28.0795 0 + endloop + endfacet + facet normal -0.627252 -0.778816 -0 + outer loop + vertex -0.786632 27.5359 0 + vertex -1.46161 28.0795 -3 + vertex -0.786632 27.5359 -3 + endloop + endfacet + facet normal -0.430266 -0.902702 0 + outer loop + vertex -0.786632 27.5359 -3 + vertex -0.115935 27.2162 0 + vertex -0.786632 27.5359 0 + endloop + endfacet + facet normal -0.430266 -0.902702 -0 + outer loop + vertex -0.115935 27.2162 0 + vertex -0.786632 27.5359 -3 + vertex -0.115935 27.2162 -3 + endloop + endfacet + facet normal -0.108301 -0.994118 0 + outer loop + vertex -0.115935 27.2162 -3 + vertex 0.858783 27.1101 0 + vertex -0.115935 27.2162 0 + endloop + endfacet + facet normal -0.108301 -0.994118 -0 + outer loop + vertex 0.858783 27.1101 0 + vertex -0.115935 27.2162 -3 + vertex 0.858783 27.1101 -3 + endloop + endfacet + facet normal 0.992113 -0.125344 0 + outer loop + vertex 0.858783 27.1101 0 + vertex 1.04836 28.6106 -3 + vertex 1.04836 28.6106 0 + endloop + endfacet + facet normal 0.992113 -0.125344 0 + outer loop + vertex 1.04836 28.6106 -3 + vertex 0.858783 27.1101 0 + vertex 0.858783 27.1101 -3 + endloop + endfacet + facet normal 0.998104 -0.0615481 0 + outer loop + vertex 1.04836 28.6106 0 + vertex 1.1273 29.8907 -3 + vertex 1.1273 29.8907 0 + endloop + endfacet + facet normal 0.998104 -0.0615481 0 + outer loop + vertex 1.1273 29.8907 -3 + vertex 1.04836 28.6106 0 + vertex 1.04836 28.6106 -3 + endloop + endfacet + facet normal 0.981864 -0.189585 0 + outer loop + vertex 1.1273 29.8907 0 + vertex 1.37489 31.173 -3 + vertex 1.37489 31.173 0 + endloop + endfacet + facet normal 0.981864 -0.189585 0 + outer loop + vertex 1.37489 31.173 -3 + vertex 1.1273 29.8907 0 + vertex 1.1273 29.8907 -3 + endloop + endfacet + facet normal 0.935462 -0.353427 0 + outer loop + vertex 1.37489 31.173 0 + vertex 2.44067 33.9939 -3 + vertex 2.44067 33.9939 0 + endloop + endfacet + facet normal 0.935462 -0.353427 0 + outer loop + vertex 2.44067 33.9939 -3 + vertex 1.37489 31.173 0 + vertex 1.37489 31.173 -3 + endloop + endfacet + facet normal 0.883303 -0.468802 0 + outer loop + vertex 2.44067 33.9939 0 + vertex 4.08079 37.0842 -3 + vertex 4.08079 37.0842 0 + endloop + endfacet + facet normal 0.883303 -0.468802 0 + outer loop + vertex 4.08079 37.0842 -3 + vertex 2.44067 33.9939 0 + vertex 2.44067 33.9939 -3 + endloop + endfacet + facet normal 0.814108 -0.580714 0 + outer loop + vertex 4.08079 37.0842 0 + vertex 5.15152 38.5852 -3 + vertex 5.15152 38.5852 0 + endloop + endfacet + facet normal 0.814108 -0.580714 0 + outer loop + vertex 5.15152 38.5852 -3 + vertex 4.08079 37.0842 0 + vertex 4.08079 37.0842 -3 + endloop + endfacet + facet normal -0.809167 -0.587578 0 + outer loop + vertex 5.25321 38.4452 -3 + vertex 5.15152 38.5852 0 + vertex 5.15152 38.5852 -3 + endloop + endfacet + facet normal -0.809167 -0.587578 0 + outer loop + vertex 5.15152 38.5852 0 + vertex 5.25321 38.4452 -3 + vertex 5.25321 38.4452 0 + endloop + endfacet + facet normal -0.887211 -0.461365 0 + outer loop + vertex 8.028 17.0592 -3 + vertex 7.15178 18.7442 0 + vertex 7.15178 18.7442 -3 + endloop + endfacet + facet normal -0.887211 -0.461365 0 + outer loop + vertex 7.15178 18.7442 0 + vertex 8.028 17.0592 -3 + vertex 8.028 17.0592 0 + endloop + endfacet + facet normal -0.822305 -0.569047 0 + outer loop + vertex 8.86535 15.8492 -3 + vertex 8.028 17.0592 0 + vertex 8.028 17.0592 -3 + endloop + endfacet + facet normal -0.822305 -0.569047 0 + outer loop + vertex 8.028 17.0592 0 + vertex 8.86535 15.8492 -3 + vertex 8.86535 15.8492 0 + endloop + endfacet + facet normal 0.359337 -0.933208 0 + outer loop + vertex 8.86535 15.8492 -3 + vertex 9.72145 16.1788 0 + vertex 8.86535 15.8492 0 + endloop + endfacet + facet normal 0.359337 -0.933208 0 + outer loop + vertex 9.72145 16.1788 0 + vertex 8.86535 15.8492 -3 + vertex 9.72145 16.1788 -3 + endloop + endfacet + facet normal 0.425917 -0.904762 0 + outer loop + vertex 9.72145 16.1788 -3 + vertex 10.4258 16.5104 0 + vertex 9.72145 16.1788 0 + endloop + endfacet + facet normal 0.425917 -0.904762 0 + outer loop + vertex 10.4258 16.5104 0 + vertex 9.72145 16.1788 -3 + vertex 10.4258 16.5104 -3 + endloop + endfacet + facet normal 0.716732 0.697349 0 + outer loop + vertex 10.4258 16.5104 0 + vertex 9.76373 17.1908 -3 + vertex 9.76373 17.1908 0 + endloop + endfacet + facet normal 0.716732 0.697349 0 + outer loop + vertex 9.76373 17.1908 -3 + vertex 10.4258 16.5104 0 + vertex 10.4258 16.5104 -3 + endloop + endfacet + facet normal 0.65174 0.758443 -0 + outer loop + vertex 9.76373 17.1908 -3 + vertex 8.30319 18.4459 0 + vertex 9.76373 17.1908 0 + endloop + endfacet + facet normal 0.65174 0.758443 0 + outer loop + vertex 8.30319 18.4459 0 + vertex 9.76373 17.1908 -3 + vertex 8.30319 18.4459 -3 + endloop + endfacet + facet normal 0.52501 0.851096 -0 + outer loop + vertex 8.30319 18.4459 -3 + vertex 7.1994 19.1268 0 + vertex 8.30319 18.4459 0 + endloop + endfacet + facet normal 0.52501 0.851096 0 + outer loop + vertex 7.1994 19.1268 0 + vertex 8.30319 18.4459 -3 + vertex 7.1994 19.1268 -3 + endloop + endfacet + facet normal -0.992345 0.123496 0 + outer loop + vertex 7.15178 18.7442 -3 + vertex 7.1994 19.1268 0 + vertex 7.1994 19.1268 -3 + endloop + endfacet + facet normal -0.992345 0.123496 0 + outer loop + vertex 7.1994 19.1268 0 + vertex 7.15178 18.7442 -3 + vertex 7.15178 18.7442 0 + endloop + endfacet + facet normal -0.148843 0.988861 0 + outer loop + vertex -16.6107 24.7853 -3 + vertex -20.4324 24.2101 0 + vertex -16.6107 24.7853 0 + endloop + endfacet + facet normal -0.148843 0.988861 0 + outer loop + vertex -20.4324 24.2101 0 + vertex -16.6107 24.7853 -3 + vertex -20.4324 24.2101 -3 + endloop + endfacet + facet normal -0.117787 0.993039 0 + outer loop + vertex -20.4324 24.2101 -3 + vertex -23.3809 23.8604 0 + vertex -20.4324 24.2101 0 + endloop + endfacet + facet normal -0.117787 0.993039 0 + outer loop + vertex -23.3809 23.8604 0 + vertex -20.4324 24.2101 -3 + vertex -23.3809 23.8604 -3 + endloop + endfacet + facet normal -0.645441 -0.76381 0 + outer loop + vertex -23.3809 23.8604 -3 + vertex -22.6641 23.2546 0 + vertex -23.3809 23.8604 0 + endloop + endfacet + facet normal -0.645441 -0.76381 -0 + outer loop + vertex -22.6641 23.2546 0 + vertex -23.3809 23.8604 -3 + vertex -22.6641 23.2546 -3 + endloop + endfacet + facet normal -0.546303 -0.837588 0 + outer loop + vertex -22.6641 23.2546 -3 + vertex -22.0432 22.8497 0 + vertex -22.6641 23.2546 0 + endloop + endfacet + facet normal -0.546303 -0.837588 -0 + outer loop + vertex -22.0432 22.8497 0 + vertex -22.6641 23.2546 -3 + vertex -22.0432 22.8497 -3 + endloop + endfacet + facet normal -0.238224 -0.97121 0 + outer loop + vertex -22.0432 22.8497 -3 + vertex -21.5591 22.7309 0 + vertex -22.0432 22.8497 0 + endloop + endfacet + facet normal -0.238224 -0.97121 -0 + outer loop + vertex -21.5591 22.7309 0 + vertex -22.0432 22.8497 -3 + vertex -21.5591 22.7309 -3 + endloop + endfacet + facet normal 0.148545 -0.988906 0 + outer loop + vertex -21.5591 22.7309 -3 + vertex -19.3275 23.0662 0 + vertex -21.5591 22.7309 0 + endloop + endfacet + facet normal 0.148545 -0.988906 0 + outer loop + vertex -19.3275 23.0662 0 + vertex -21.5591 22.7309 -3 + vertex -19.3275 23.0662 -3 + endloop + endfacet + facet normal 0.149712 -0.98873 0 + outer loop + vertex -19.3275 23.0662 -3 + vertex -14.1729 23.8467 0 + vertex -19.3275 23.0662 0 + endloop + endfacet + facet normal 0.149712 -0.98873 0 + outer loop + vertex -14.1729 23.8467 0 + vertex -19.3275 23.0662 -3 + vertex -14.1729 23.8467 -3 + endloop + endfacet + facet normal 0.152324 -0.988331 0 + outer loop + vertex -14.1729 23.8467 -3 + vertex -10.5829 24.4 0 + vertex -14.1729 23.8467 0 + endloop + endfacet + facet normal 0.152324 -0.988331 0 + outer loop + vertex -10.5829 24.4 0 + vertex -14.1729 23.8467 -3 + vertex -10.5829 24.4 -3 + endloop + endfacet + facet normal 0.753595 0.657339 0 + outer loop + vertex -10.5829 24.4 0 + vertex -10.6709 24.5009 -3 + vertex -10.6709 24.5009 0 + endloop + endfacet + facet normal 0.753595 0.657339 0 + outer loop + vertex -10.6709 24.5009 -3 + vertex -10.5829 24.4 0 + vertex -10.5829 24.4 -3 + endloop + endfacet + facet normal 0.323243 0.946316 -0 + outer loop + vertex -10.6709 24.5009 -3 + vertex -11.2742 24.7069 0 + vertex -10.6709 24.5009 0 + endloop + endfacet + facet normal 0.323243 0.946316 0 + outer loop + vertex -11.2742 24.7069 0 + vertex -10.6709 24.5009 -3 + vertex -11.2742 24.7069 -3 + endloop + endfacet + facet normal 0.105601 0.994409 -0 + outer loop + vertex -11.2742 24.7069 -3 + vertex -13.9393 24.99 0 + vertex -11.2742 24.7069 0 + endloop + endfacet + facet normal 0.105601 0.994409 0 + outer loop + vertex -13.9393 24.99 0 + vertex -11.2742 24.7069 -3 + vertex -13.9393 24.99 -3 + endloop + endfacet + facet normal -0.0763677 0.99708 0 + outer loop + vertex -13.9393 24.99 -3 + vertex -16.6107 24.7853 0 + vertex -13.9393 24.99 0 + endloop + endfacet + facet normal -0.0763677 0.99708 0 + outer loop + vertex -16.6107 24.7853 0 + vertex -13.9393 24.99 -3 + vertex -16.6107 24.7853 -3 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -117.5 -117.5 -3 + vertex -117.5 117.5 0 + vertex -117.5 117.5 -3 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex -117.5 117.5 0 + vertex -117.5 -117.5 -3 + vertex -117.5 -117.5 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.5713 -25.7117 0 + vertex -27.9105 -26.2055 0 + vertex -28.1036 -25.8829 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.142 -25.4759 0 + vertex -28.1838 -28.4809 0 + vertex -28.5713 -25.7117 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.9105 -26.2055 0 + vertex -28.5713 -25.7117 0 + vertex -28.1838 -28.4809 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.9073 -13.512 0 + vertex -35.4871 -14.1281 0 + vertex -35.5739 -13.718 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.5262 -13.4531 0 + vertex -35.4871 -14.1281 0 + vertex -35.9073 -13.512 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.4871 -14.1281 0 + vertex -36.5262 -13.4531 0 + vertex -35.6081 -14.799 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.2393 -13.2576 0 + vertex -35.6081 -14.799 0 + vertex -36.5262 -13.4531 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.6081 -14.799 0 + vertex -37.2393 -13.2576 0 + vertex -37.0548 -18.7102 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.5366 -12.7854 0 + vertex -37.0548 -18.7102 0 + vertex -37.2393 -13.2576 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.8382 24.6102 0 + vertex -37.3951 -12.1929 0 + vertex -38.3729 23.836 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.1303 25.4589 0 + vertex -37.3951 -12.1929 0 + vertex -38.8382 24.6102 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.3951 -12.1929 0 + vertex -39.1303 25.4589 0 + vertex -37.5366 -12.7854 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.5366 -12.7854 0 + vertex -39.9072 -25.4747 0 + vertex -37.0548 -18.7102 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.8577 -36.863 0 + vertex -37.5366 -12.7854 0 + vertex -39.1303 25.4589 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.0224 24.2804 0 + vertex -26.0647 23.8437 0 + vertex -24.664 24.0122 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.0224 24.2804 0 + vertex -27.3687 23.7586 0 + vertex -26.0647 23.8437 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1365 24.9019 0 + vertex -27.3687 23.7586 0 + vertex -26.0224 24.2804 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1365 24.9019 0 + vertex -28.4642 23.8513 0 + vertex -27.3687 23.7586 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1365 24.9019 0 + vertex -29.3958 24.13 0 + vertex -28.4642 23.8513 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.9035 25.8898 0 + vertex -29.3958 24.13 0 + vertex -28.1365 24.9019 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.9035 25.8898 0 + vertex -30.2081 24.6027 0 + vertex -29.3958 24.13 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.9035 25.8898 0 + vertex -30.8173 24.9813 0 + vertex -30.2081 24.6027 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.1793 25.0376 0 + vertex -29.9035 25.8898 0 + vertex -31.116 26.9038 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.9035 25.8898 0 + vertex -31.1793 25.0376 0 + vertex -30.8173 24.9813 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2912 27.2229 0 + vertex -31.1793 25.0376 0 + vertex -31.116 26.9038 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.2108 23.023 0 + vertex -31.1793 25.0376 0 + vertex -31.2912 27.2229 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.5389 20.1801 0 + vertex -11.1208 19.5935 0 + vertex -10.9412 20.0018 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.5389 20.1801 0 + vertex -12.0133 18.8648 0 + vertex -11.1208 19.5935 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.9783 20.2187 0 + vertex -12.0133 18.8648 0 + vertex -11.5389 20.1801 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.9783 20.2187 0 + vertex -15.009 16.7116 0 + vertex -12.0133 18.8648 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -16.3196 19.9968 0 + vertex -15.009 16.7116 0 + vertex -12.9783 20.2187 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.3196 19.9968 0 + vertex -17.0754 15.711 0 + vertex -15.009 16.7116 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -20.1789 19.4139 0 + vertex -17.0754 15.711 0 + vertex -16.3196 19.9968 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.0754 15.711 0 + vertex -20.1789 19.4139 0 + vertex -19.733 14.7364 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.1789 19.4139 0 + vertex -22.3118 14.0374 0 + vertex -19.733 14.7364 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.1572 19.0472 0 + vertex -22.3118 14.0374 0 + vertex -20.1789 19.4139 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.1572 19.0472 0 + vertex -24.873 13.6003 0 + vertex -22.3118 14.0374 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -27.5587 18.9414 0 + vertex -24.873 13.6003 0 + vertex -24.1572 19.0472 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.873 13.6003 0 + vertex -27.5587 18.9414 0 + vertex -27.4778 13.4117 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.687 19.1409 0 + vertex -27.4778 13.4117 0 + vertex -27.5587 18.9414 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.687 19.1409 0 + vertex -29.9412 13.2465 0 + vertex -27.4778 13.4117 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.687 19.1409 0 + vertex -30.3118 13.0393 0 + vertex -29.9412 13.2465 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.0651 20.3093 0 + vertex -30.3118 13.0393 0 + vertex -29.687 19.1409 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3118 13.0393 0 + vertex -33.0651 20.3093 0 + vertex -30.3887 12.6783 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.2082 3.44442 0 + vertex 23.5966 4.95794 0 + vertex 23.3811 5.8089 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.5966 4.95794 0 + vertex 23.2082 3.44442 0 + vertex 23.5377 4.18291 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.8875 6.77518 0 + vertex 23.2082 3.44442 0 + vertex 23.3811 5.8089 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.0239 2.90744 0 + vertex 23.2082 3.44442 0 + vertex 22.8875 6.77518 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.0239 2.90744 0 + vertex 22.8875 6.77518 0 + vertex 21.7142 8.22365 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.2139 -19.2263 0 + vertex 26.9177 3.98634 0 + vertex 26.953 2.16551 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 26.9177 3.98634 0 + vertex 27.209 8.08714 0 + vertex 26.8985 6.51977 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.7235 1.18648 0 + vertex 38.4798 -20.1181 0 + vertex 26.8464 1.29842 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.9177 3.98634 0 + vertex 27.528 9.70386 0 + vertex 27.209 8.08714 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.4798 -20.1181 0 + vertex 26.7235 1.18648 0 + vertex 29.9429 -19.4981 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.9429 -19.4981 0 + vertex 26.7235 1.18648 0 + vertex 28.989 -19.2301 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.6777 -11.13 0 + vertex 28.989 -19.2301 0 + vertex 26.7235 1.18648 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.9081 -2.19366 0 + vertex 26.7235 1.18648 0 + vertex 26.5455 1.2697 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.989 -19.2301 0 + vertex 19.6777 -11.13 0 + vertex 27.8281 -19.1444 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.9858 2.16372 0 + vertex 26.5455 1.2697 0 + vertex 25.9977 1.96397 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.8281 -19.1444 0 + vertex 19.6777 -11.13 0 + vertex 26.5413 -19.2026 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.7523 2.4559 0 + vertex 25.9977 1.96397 0 + vertex 25.3153 2.68052 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.7523 2.4559 0 + vertex 25.3153 2.68052 0 + vertex 25.0347 2.67962 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.9858 2.16372 0 + vertex 25.9977 1.96397 0 + vertex 24.7523 2.4559 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.5455 1.2697 0 + vertex 23.9858 2.16372 0 + vertex 21.0968 -1.15452 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0968 -1.15452 0 + vertex 23.9858 2.16372 0 + vertex 23.1222 1.97635 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.7235 1.18648 0 + vertex 20.9081 -2.19366 0 + vertex 20.4179 -3.0084 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0282 0.220415 0 + vertex 23.1222 1.97635 0 + vertex 22.8505 1.9828 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.0282 0.220415 0 + vertex 22.8505 1.9828 0 + vertex 22.7784 2.30129 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.2082 3.44442 0 + vertex 16.0239 2.90744 0 + vertex 22.7784 2.30129 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.5455 1.2697 0 + vertex 21.0968 -1.15452 0 + vertex 20.9081 -2.19366 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.5413 -19.2026 0 + vertex 19.6777 -11.13 0 + vertex 25.4359 -19.4082 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.1222 1.97635 0 + vertex 21.0282 0.220415 0 + vertex 21.0968 -1.15452 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.3368 5.33522 0 + vertex 21.7142 8.22365 0 + vertex 19.7157 9.66569 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 19.4865 -0.127098 0 + vertex 22.7784 2.30129 0 + vertex 16.0239 2.90744 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9551 7.69881 0 + vertex 19.7157 9.66569 0 + vertex 18.6847 10.137 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.7784 2.30129 0 + vertex 19.4865 -0.127098 0 + vertex 21.0282 0.220415 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 16.8564 0.883682 0 + vertex 19.4865 -0.127098 0 + vertex 16.0239 2.90744 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9551 7.69881 0 + vertex 18.6847 10.137 0 + vertex 17.337 10.3363 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4865 -0.127098 0 + vertex 16.8564 0.883682 0 + vertex 18.2674 -0.466912 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.2674 -0.466912 0 + vertex 16.8564 0.883682 0 + vertex 17.6745 -0.267811 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.3572 9.74689 0 + vertex 17.337 10.3363 0 + vertex 15.9933 10.3315 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.3572 9.74689 0 + vertex 15.9933 10.3315 0 + vertex 15.6762 10.1383 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.9426 8.95486 0 + vertex 17.337 10.3363 0 + vertex 15.3572 9.74689 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.7142 8.22365 0 + vertex 15.3368 5.33522 0 + vertex 16.0239 2.90744 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.7157 9.66569 0 + vertex 14.9551 7.69881 0 + vertex 15.3368 5.33522 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.337 10.3363 0 + vertex 14.9426 8.95486 0 + vertex 14.9551 7.69881 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.4359 -19.4082 0 + vertex 19.6777 -11.13 0 + vertex 23.0737 -20.4525 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.7235 1.18648 0 + vertex 20.4179 -3.0084 0 + vertex 19.6777 -11.13 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 17.1521 -17.7131 0 + vertex 23.0737 -20.4525 0 + vertex 19.6777 -11.13 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.0737 -20.4525 0 + vertex 17.1521 -17.7131 0 + vertex 21.6367 -21.3703 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.4179 -3.0084 0 + vertex 19.5452 -10.7956 0 + vertex 19.6777 -11.13 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.4334 -3.80993 0 + vertex 19.5452 -10.7956 0 + vertex 20.4179 -3.0084 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 17.7619 -4.80944 0 + vertex 19.5452 -10.7956 0 + vertex 19.4334 -3.80993 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.5452 -10.7956 0 + vertex 17.7619 -4.80944 0 + vertex 19.0845 -10.6988 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.0012 -6.23992 0 + vertex 19.0845 -10.6988 0 + vertex 17.7619 -4.80944 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.0845 -10.6988 0 + vertex 15.0012 -6.23992 0 + vertex 16.7993 -11.2316 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.6103 -7.15898 0 + vertex 16.7993 -11.2316 0 + vertex 15.0012 -6.23992 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.7993 -11.2316 0 + vertex 12.6103 -7.15898 0 + vertex 13.71 -12.1451 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.71 -12.1451 0 + vertex 12.6103 -7.15898 0 + vertex 13.1035 -12.4147 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.2421 -7.67101 0 + vertex 13.1035 -12.4147 0 + vertex 12.6103 -7.15898 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.1035 -12.4147 0 + vertex 10.2421 -7.67101 0 + vertex 12.6527 -12.8127 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.6527 -12.8127 0 + vertex 10.2421 -7.67101 0 + vertex 12.4073 -13.2773 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 11.2177 -19.5302 0 + vertex 12.4073 -13.2773 0 + vertex 10.3474 -19.1774 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.058 -19.7199 0 + vertex 11.2177 -19.5302 0 + vertex 11.7785 -19.8211 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.4073 -13.2773 0 + vertex 11.2177 -19.5302 0 + vertex 12.058 -19.7199 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 7.54923 -7.88041 0 + vertex 12.4073 -13.2773 0 + vertex 10.2421 -7.67101 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.4073 -13.2773 0 + vertex 8.75581 -19.1712 0 + vertex 10.3474 -19.1774 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.06268 -19.3694 0 + vertex 12.4073 -13.2773 0 + vertex 7.54923 -7.88041 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.4073 -13.2773 0 + vertex 7.06268 -19.3694 0 + vertex 8.75581 -19.1712 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.03167 -7.88498 0 + vertex 7.06268 -19.3694 0 + vertex 7.54923 -7.88041 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.06268 -19.3694 0 + vertex 5.03167 -7.88498 0 + vertex 5.689 -19.9339 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.854 -7.59505 0 + vertex 5.689 -19.9339 0 + vertex 5.03167 -7.88498 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.854 -7.59505 0 + vertex 3.72385 -21.1527 0 + vertex 5.689 -19.9339 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.70045 -19.8327 0 + vertex 3.72385 -21.1527 0 + vertex 3.854 -7.59505 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.57075 -19.2012 0 + vertex 3.854 -7.59505 0 + vertex 1.04019 -5.91722 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -4.06681 -20.6308 0 + vertex 3.72385 -21.1527 0 + vertex -4.70045 -19.8327 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex -3.85646 -21.6547 0 + vertex 1.84511 -22.661 0 + vertex -4.06681 -20.6308 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.57075 -19.2012 0 + vertex 1.04019 -5.91722 0 + vertex -2.05653 -4.03047 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.84511 -22.661 0 + vertex -3.85646 -21.6547 0 + vertex 0.168338 -24.355 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.168338 -24.355 0 + vertex -3.89417 -22.8317 0 + vertex -1.19093 -26.1306 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.1272 -19.1706 0 + vertex -2.05653 -4.03047 0 + vertex -3.45272 -3.03042 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.4385 -11.5861 0 + vertex -3.45272 -3.03042 0 + vertex -3.71458 -2.66291 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.26405 -24.3543 0 + vertex -1.19093 -26.1306 0 + vertex -3.89417 -22.8317 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.6367 -21.3703 0 + vertex 17.1521 -17.7131 0 + vertex 20.2954 -22.4759 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.2954 -22.4759 0 + vertex 17.1521 -17.7131 0 + vertex 19.0386 -23.7798 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.5835 -23.8342 0 + vertex 19.0386 -23.7798 0 + vertex 17.1521 -17.7131 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.0386 -23.7798 0 + vertex 14.5835 -23.8342 0 + vertex 17.855 -25.2923 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.855 -25.2923 0 + vertex 14.5835 -23.8342 0 + vertex 16.4055 -27.6373 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.4055 -27.6373 0 + vertex 14.5835 -23.8342 0 + vertex 15.3794 -29.9771 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.3794 -29.9771 0 + vertex 11.4887 -31.4602 0 + vertex 14.7938 -32.2631 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.4887 -31.4602 0 + vertex 15.3794 -29.9771 0 + vertex 14.5835 -23.8342 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 25.1513 17.7384 0 + vertex 26.0816 17.5963 0 + vertex 25.9892 18.2943 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.1513 17.7384 0 + vertex 25.9892 18.2943 0 + vertex 25.7331 18.8483 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 25.704 16.8274 0 + vertex 26.0816 17.5963 0 + vertex 25.4738 17.2443 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0816 17.5963 0 + vertex 25.704 16.8274 0 + vertex 25.8979 16.7563 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.5942 18.0475 0 + vertex 25.7331 18.8483 0 + vertex 25.3447 19.2137 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0816 17.5963 0 + vertex 25.1513 17.7384 0 + vertex 25.4738 17.2443 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.5942 18.0475 0 + vertex 25.3447 19.2137 0 + vertex 24.8554 19.3454 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.7331 18.8483 0 + vertex 24.5942 18.0475 0 + vertex 25.1513 17.7384 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.3909 19.6849 0 + vertex 24.5942 18.0475 0 + vertex 24.8554 19.3454 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.335 18.2522 0 + vertex 23.3909 19.6849 0 + vertex 22.6368 20.047 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.3909 19.6849 0 + vertex 22.335 18.2522 0 + vertex 24.5942 18.0475 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.9591 18.304 0 + vertex 22.6368 20.047 0 + vertex 22.0911 20.5797 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.6596 20.6529 0 + vertex 22.0911 20.5797 0 + vertex 21.7245 21.3239 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.4421 21.9215 0 + vertex 21.7245 21.3239 0 + vertex 21.508 22.3204 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.4421 21.9215 0 + vertex 21.508 22.3204 0 + vertex 21.2518 23.2891 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.0911 20.5797 0 + vertex 19.6596 20.6529 0 + vertex 19.8405 19.3078 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.9185 22.6398 0 + vertex 21.2518 23.2891 0 + vertex 20.762 24.0784 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.6368 20.047 0 + vertex 20.9591 18.304 0 + vertex 22.335 18.2522 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.9185 22.6398 0 + vertex 20.762 24.0784 0 + vertex 20.0338 24.6942 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.0911 20.5797 0 + vertex 19.8405 19.3078 0 + vertex 20.9591 18.304 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.9591 18.304 0 + vertex 19.8405 19.3078 0 + vertex 20.2006 18.5903 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.7245 21.3239 0 + vertex 19.4421 21.9215 0 + vertex 19.6596 20.6529 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.9185 22.6398 0 + vertex 20.0338 24.6942 0 + vertex 19.062 25.1422 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.2518 23.2891 0 + vertex 18.9185 22.6398 0 + vertex 19.4421 21.9215 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.062 25.1422 0 + vertex 17.6852 23.4449 0 + vertex 18.9185 22.6398 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.2513 25.98 0 + vertex 17.6852 23.4449 0 + vertex 19.062 25.1422 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.1211 24.4531 0 + vertex 17.2513 25.98 0 + vertex 15.7223 27.2873 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.4969 25.2416 0 + vertex 15.7223 27.2873 0 + vertex 15.122 28.0941 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.2513 25.98 0 + vertex 15.1211 24.4531 0 + vertex 17.6852 23.4449 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.7374 28.4518 0 + vertex 15.122 28.0941 0 + vertex 15.0577 29.0611 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.7223 27.2873 0 + vertex 13.4969 25.2416 0 + vertex 15.1211 24.4531 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.0303 22.3563 0 + vertex -30.0976 22.0525 0 + vertex -28.3511 21.9725 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3878 23.2826 0 + vertex -30.0976 22.0525 0 + vertex -29.0303 22.3563 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -32.1178 22.3529 0 + vertex -30.3878 23.2826 0 + vertex -31.0943 24.213 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3878 23.2826 0 + vertex -32.1178 22.3529 0 + vertex -30.0976 22.0525 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.2108 23.023 0 + vertex -31.0943 24.213 0 + vertex -31.2773 24.779 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.1793 25.0376 0 + vertex -34.2108 23.023 0 + vertex -31.2773 24.779 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5428 -26.6889 0 + vertex -23.655 -30.4649 0 + vertex -23.4462 -30.738 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.4741 -26.9141 0 + vertex -18.5428 -26.6889 0 + vertex -24.4076 -24.3815 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5428 -26.6889 0 + vertex -25.4741 -26.9141 0 + vertex -23.655 -30.4649 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.655 -30.4649 0 + vertex -25.4741 -26.9141 0 + vertex -24.0819 -30.2475 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.0819 -30.2475 0 + vertex -25.4741 -26.9141 0 + vertex -24.4667 -30.1541 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.2338 -28.3696 0 + vertex -24.4667 -30.1541 0 + vertex -25.4741 -26.9141 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.4667 -30.1541 0 + vertex -26.2338 -28.3696 0 + vertex -24.8569 -30.2998 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -26.8752 -29.0336 0 + vertex -24.8569 -30.2998 0 + vertex -26.2338 -28.3696 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.8569 -30.2998 0 + vertex -26.8752 -29.0336 0 + vertex -26.8283 -32.1012 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -27.5872 -29.1914 0 + vertex -26.8283 -32.1012 0 + vertex -26.8752 -29.0336 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1878 -29.097 0 + vertex -26.8283 -32.1012 0 + vertex -27.5872 -29.1914 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1878 -29.097 0 + vertex -29.0969 -33.8499 0 + vertex -26.8283 -32.1012 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1838 -28.4809 0 + vertex -32.142 -25.4759 0 + vertex -28.1878 -29.097 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -35.4824 -26.6225 0 + vertex -28.1878 -29.097 0 + vertex -32.142 -25.4759 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1878 -29.097 0 + vertex -30.2578 -34.4631 0 + vertex -29.0969 -33.8499 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1878 -29.097 0 + vertex -31.3644 -34.8586 0 + vertex -30.2578 -34.4631 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.4824 -26.6225 0 + vertex -32.142 -25.4759 0 + vertex -34.9626 -25.4747 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.1878 -29.097 0 + vertex -35.4824 -26.6225 0 + vertex -31.3644 -34.8586 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.3644 -34.8586 0 + vertex -35.4824 -26.6225 0 + vertex -35.0529 -35.0835 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -38.7331 -34.5543 0 + vertex -35.0529 -35.0835 0 + vertex -35.4824 -26.6225 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.0529 -35.0835 0 + vertex -38.7331 -34.5543 0 + vertex -38.4261 -34.9619 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.6886 -22.3738 0 + vertex -24.4076 -24.3815 0 + vertex -18.5428 -26.6889 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -23.8149 -31.5911 0 + vertex -21.28 -33.2523 0 + vertex -23.4462 -30.738 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.5428 -26.6889 0 + vertex -23.4462 -30.738 0 + vertex -21.28 -33.2523 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -24.7956 -33.2498 0 + vertex -21.28 -33.2523 0 + vertex -23.8149 -31.5911 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.28 -33.2523 0 + vertex -24.7956 -33.2498 0 + vertex -22.458 -35.4568 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -23.6767 -35.9691 0 + vertex -22.458 -35.4568 0 + vertex -24.7956 -33.2498 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.458 -35.4568 0 + vertex -23.6767 -35.9691 0 + vertex -23.007 -35.8619 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.6767 -35.9691 0 + vertex -24.7956 -33.2498 0 + vertex -24.4194 -36.2501 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.2791 -36.8782 0 + vertex -24.4194 -36.2501 0 + vertex -24.7956 -33.2498 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.4194 -36.2501 0 + vertex -27.2791 -36.8782 0 + vertex -24.9699 -36.888 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.9699 -36.888 0 + vertex -27.2791 -36.8782 0 + vertex -25.157 -37.5754 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.4212 26.8695 0 + vertex -21.4485 26.3569 0 + vertex -21.2681 26.5576 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.4485 26.3569 0 + vertex -22.4212 26.8695 0 + vertex -22.0473 26.2369 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.8433 26.205 0 + vertex -22.4212 26.8695 0 + vertex -23.8902 27.3484 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.4212 26.8695 0 + vertex -24.8433 26.205 0 + vertex -22.0473 26.2369 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3225 27.6757 0 + vertex -24.8433 26.205 0 + vertex -23.8902 27.3484 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.4214 26.3653 0 + vertex -24.3225 27.6757 0 + vertex -24.3632 27.9554 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.78909 -22.7249 0 + vertex -8.46819 -23.4267 0 + vertex -8.55624 -22.9989 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.46819 -23.4267 0 + vertex -8.78909 -22.7249 0 + vertex -9.69161 -22.56 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.46819 -23.4267 0 + vertex -9.69161 -22.56 0 + vertex -8.72405 -24.8218 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -10.5461 -22.7271 0 + vertex -8.72405 -24.8218 0 + vertex -9.69161 -22.56 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.3967 -23.0769 0 + vertex -8.72405 -24.8218 0 + vertex -10.5461 -22.7271 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -12.4124 -23.7203 0 + vertex -8.72405 -24.8218 0 + vertex -11.3967 -23.0769 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.72405 -24.8218 0 + vertex -12.4124 -23.7203 0 + vertex -9.55184 -27.0667 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -13.1427 -24.3848 0 + vertex -9.55184 -27.0667 0 + vertex -12.4124 -23.7203 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -14.2216 -26.3227 0 + vertex -9.55184 -27.0667 0 + vertex -13.7062 -25.2068 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.55184 -27.0667 0 + vertex -15.3894 -29.1914 0 + vertex -11.5932 -32.143 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.55184 -27.0667 0 + vertex -13.1427 -24.3848 0 + vertex -13.7062 -25.2068 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.3894 -29.1914 0 + vertex -9.55184 -27.0667 0 + vertex -14.2216 -26.3227 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.8281 -32.7116 0 + vertex -11.5932 -32.143 0 + vertex -15.3894 -29.1914 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.5932 -32.143 0 + vertex -16.8281 -32.7116 0 + vertex -12.3385 -33.8339 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.3385 -33.8339 0 + vertex -16.8281 -32.7116 0 + vertex -13.0448 -35.0276 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -14.3732 -35.9691 0 + vertex -13.0448 -35.0276 0 + vertex -16.8281 -32.7116 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.0448 -35.0276 0 + vertex -14.3732 -35.9691 0 + vertex -13.7203 -35.7356 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.3732 -35.9691 0 + vertex -16.8281 -32.7116 0 + vertex -14.8949 -36.1495 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -16.5846 -36.2152 0 + vertex -14.8949 -36.1495 0 + vertex -16.8281 -32.7116 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.6989 -37.6188 0 + vertex -15.9213 -37.1689 0 + vertex -16.2226 -36.752 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.8949 -36.1495 0 + vertex -16.5846 -36.2152 0 + vertex -15.4682 -36.5832 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.4682 -36.5832 0 + vertex -16.2226 -36.752 0 + vertex -15.9213 -37.1689 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.4682 -36.5832 0 + vertex -16.5846 -36.2152 0 + vertex -16.2226 -36.752 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.7285 -35.3062 0 + vertex -16.5846 -36.2152 0 + vertex -16.8281 -32.7116 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.5846 -36.2152 0 + vertex -17.7285 -35.3062 0 + vertex -17.3742 -35.9691 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.3742 -35.9691 0 + vertex -17.7285 -35.3062 0 + vertex -17.6987 -35.8223 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.3766 -20.1728 0 + vertex -11.7016 -19.4898 0 + vertex -11.6824 -19.9072 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.45272 -3.03042 0 + vertex -11.9141 -19.2259 0 + vertex -11.7016 -19.4898 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.45272 -3.03042 0 + vertex -17.4385 -11.5861 0 + vertex -11.9141 -19.2259 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.5299 12.3491 0 + vertex -3.71458 -2.66291 0 + vertex -13.7227 13.3517 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.4456 -12.0833 0 + vertex -11.9141 -19.2259 0 + vertex -17.4385 -11.5861 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.9141 -19.2259 0 + vertex -17.4456 -12.0833 0 + vertex -12.3137 -19.1333 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.7993 -11.4712 0 + vertex -3.71458 -2.66291 0 + vertex -17.5299 12.3491 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.71458 -2.66291 0 + vertex -17.7993 -11.4712 0 + vertex -17.4385 -11.5861 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -20.0298 12.0063 0 + vertex -17.7993 -11.4712 0 + vertex -17.5299 12.3491 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -22.4428 11.7593 0 + vertex -17.7993 -11.4712 0 + vertex -20.0298 12.0063 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.1868 -11.3523 0 + vertex -22.4428 11.7593 0 + vertex -25.7097 11.6586 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.4428 11.7593 0 + vertex -27.1868 -11.3523 0 + vertex -17.7993 -11.4712 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.6588 11.7129 0 + vertex -27.1868 -11.3523 0 + vertex -25.7097 11.6586 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -34.87 -11.3196 0 + vertex -28.6588 11.7129 0 + vertex -30.1182 11.9311 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.792 -11.6364 0 + vertex -30.1182 11.9311 0 + vertex -30.3887 12.6783 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -35.7552 21.6337 0 + vertex -30.3887 12.6783 0 + vertex -33.0651 20.3093 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.6588 11.7129 0 + vertex -34.87 -11.3196 0 + vertex -27.1868 -11.3523 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.6991 23.0789 0 + vertex -30.3887 12.6783 0 + vertex -35.7552 21.6337 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.1182 11.9311 0 + vertex -36.1936 -11.4238 0 + vertex -34.87 -11.3196 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.1182 11.9311 0 + vertex -36.792 -11.6364 0 + vertex -36.1936 -11.4238 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3887 12.6783 0 + vertex -37.6991 23.0789 0 + vertex -36.792 -11.6364 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -36.792 -11.6364 0 + vertex -37.6991 23.0789 0 + vertex -37.3951 -12.1929 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -38.3729 23.836 0 + vertex -37.3951 -12.1929 0 + vertex -37.6991 23.0789 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.80393 -35.193 0 + vertex -7.51249 -36.3769 0 + vertex -7.31439 -36.7536 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.99709 -33.5697 0 + vertex -8.33648 -34.384 0 + vertex -7.51249 -36.3769 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.51249 -36.3769 0 + vertex -8.33648 -34.384 0 + vertex -7.98605 -36.0592 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.56822 -35.3052 0 + vertex -7.98605 -36.0592 0 + vertex -8.33648 -34.384 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.98605 -36.0592 0 + vertex -8.56822 -35.3052 0 + vertex -8.51129 -35.7129 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.41055 11.926 0 + vertex 1.8467 12.7398 0 + vertex 1.50002 13.1874 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.8467 12.7398 0 + vertex 1.41055 11.926 0 + vertex 1.87173 12.344 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.918757 13.5702 0 + vertex 1.41055 11.926 0 + vertex 1.50002 13.1874 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.918757 13.5702 0 + vertex 0.535115 11.4454 0 + vertex 1.41055 11.926 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.918757 13.5702 0 + vertex -0.394194 11.1972 0 + vertex 0.535115 11.4454 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.928844 14.138 0 + vertex -0.394194 11.1972 0 + vertex 0.918757 13.5702 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.928844 14.138 0 + vertex -1.46211 11.1697 0 + vertex -0.394194 11.1972 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.928844 14.138 0 + vertex -2.75335 11.3511 0 + vertex -1.46211 11.1697 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.65881 14.4362 0 + vertex -2.75335 11.3511 0 + vertex -0.928844 14.138 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.65881 14.4362 0 + vertex -5.07797 11.6776 0 + vertex -2.75335 11.3511 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.23385 14.4578 0 + vertex -5.07797 11.6776 0 + vertex -3.65881 14.4362 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.07797 11.6776 0 + vertex -7.23385 14.4578 0 + vertex -5.71478 11.6495 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.71478 11.6495 0 + vertex -7.23385 14.4578 0 + vertex -5.93765 11.491 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -13.7227 13.3517 0 + vertex -5.93765 11.491 0 + vertex -10.6367 14.238 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.99153 10.6633 0 + vertex -13.7227 13.3517 0 + vertex -3.71458 -2.66291 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.45272 -3.03042 0 + vertex -8.78621 -19.378 0 + vertex -7.1272 -19.1706 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.45272 -3.03042 0 + vertex -11.7016 -19.4898 0 + vertex -8.78621 -19.378 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.7016 -19.4898 0 + vertex -10.3766 -20.1728 0 + vertex -8.78621 -19.378 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.8627 -20.4599 0 + vertex -10.3766 -20.1728 0 + vertex -11.6824 -19.9072 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.3766 -20.1728 0 + vertex -11.8627 -20.4599 0 + vertex -12.0544 -21.102 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -12.3137 -19.1333 0 + vertex -17.4456 -12.0833 0 + vertex -15.1553 -19.8912 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -19.3785 -17.1305 0 + vertex -15.1553 -19.8912 0 + vertex -17.4456 -12.0833 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.1553 -19.8912 0 + vertex -19.3785 -17.1305 0 + vertex -17.9982 -20.7653 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -19.683 -17.584 0 + vertex -17.9982 -20.7653 0 + vertex -19.3785 -17.1305 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -20.1126 -17.9213 0 + vertex -17.9982 -20.7653 0 + vertex -19.683 -17.584 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.9982 -20.7653 0 + vertex -20.1126 -17.9213 0 + vertex -18.4336 -21.0091 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.8179 -22.6324 0 + vertex -17.299 -23.335 0 + vertex -17.2695 -22.7276 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.3659 -22.5704 0 + vertex -17.299 -23.335 0 + vertex -17.8179 -22.6324 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.3659 -22.5704 0 + vertex -18.5428 -26.6889 0 + vertex -17.299 -23.335 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.6886 -22.3738 0 + vertex -18.5428 -26.6889 0 + vertex -18.3659 -22.5704 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.7084 -21.5139 0 + vertex -22.6991 -20.0641 0 + vertex -18.7986 -22.0269 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -20.6062 -18.108 0 + vertex -18.4336 -21.0091 0 + vertex -20.1126 -17.9213 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.4336 -21.0091 0 + vertex -20.6062 -18.108 0 + vertex -18.7084 -21.5139 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.6991 -20.0641 0 + vertex -20.6062 -18.108 0 + vertex -22.6057 -19.3555 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.6062 -18.108 0 + vertex -22.6991 -20.0641 0 + vertex -18.7084 -21.5139 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.6057 -19.3555 0 + vertex -20.6062 -18.108 0 + vertex -21.1029 -18.1093 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -23.1278 -21.2395 0 + vertex -18.7986 -22.0269 0 + vertex -22.6991 -20.0641 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.6057 -19.3555 0 + vertex -21.1029 -18.1093 0 + vertex -21.3898 -18.0171 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.8641 -19.008 0 + vertex -21.3898 -18.0171 0 + vertex -21.538 -17.8042 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.4908 -18.9156 0 + vertex -21.538 -17.8042 0 + vertex -21.5846 -16.4428 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.1413 -14.5577 0 + vertex -21.5846 -16.4428 0 + vertex -21.6401 -15.0493 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.1413 -14.5577 0 + vertex -21.6401 -15.0493 0 + vertex -21.8106 -14.7733 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -18.7986 -22.0269 0 + vertex -23.1278 -21.2395 0 + vertex -18.6886 -22.3738 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5846 -16.4428 0 + vertex -22.1413 -14.5577 0 + vertex -23.3419 -14.2877 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.4076 -24.3815 0 + vertex -18.6886 -22.3738 0 + vertex -23.1278 -21.2395 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.28 -33.2523 0 + vertex -22.458 -35.4568 0 + vertex -21.9191 -34.6287 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.3898 -18.0171 0 + vertex -22.8641 -19.008 0 + vertex -22.6057 -19.3555 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.5846 -16.4428 0 + vertex -23.3419 -14.2877 0 + vertex -23.4908 -18.9156 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -21.538 -17.8042 0 + vertex -23.4908 -18.9156 0 + vertex -22.8641 -19.008 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -23.3419 -14.2877 0 + vertex -24.1111 -19.1062 0 + vertex -23.4908 -18.9156 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.1195 -14.1654 0 + vertex -24.1111 -19.1062 0 + vertex -23.3419 -14.2877 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.1111 -19.1062 0 + vertex -26.1195 -14.1654 0 + vertex -24.7225 -19.9745 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -30.8809 -15.6487 0 + vertex -24.7225 -19.9745 0 + vertex -26.1195 -14.1654 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.7225 -19.9745 0 + vertex -30.8809 -15.6487 0 + vertex -25.7001 -21.2849 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -32.1593 -18.5412 0 + vertex -25.7001 -21.2849 0 + vertex -30.8809 -15.6487 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.8809 -15.6487 0 + vertex -26.1195 -14.1654 0 + vertex -29.5608 -14.1906 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.3887 -14.5514 0 + vertex -29.5608 -14.1906 0 + vertex -30.2116 -14.321 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -29.5608 -14.1906 0 + vertex -30.3887 -14.5514 0 + vertex -30.8809 -15.6487 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.7001 -21.2849 0 + vertex -32.1593 -18.5412 0 + vertex -26.9351 -22.1109 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -26.9351 -22.1109 0 + vertex -32.1593 -18.5412 0 + vertex -28.6031 -22.5277 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.6031 -22.5277 0 + vertex -32.1593 -18.5412 0 + vertex -30.8797 -22.6102 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -33.3019 -21.4299 0 + vertex -30.8797 -22.6102 0 + vertex -32.1593 -18.5412 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -30.8797 -22.6102 0 + vertex -33.3019 -21.4299 0 + vertex -32.5249 -22.5543 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -33.3019 -21.4299 0 + vertex -33.3295 -22.4108 0 + vertex -32.5249 -22.5543 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -33.3295 -22.4108 0 + vertex -33.3019 -21.4299 0 + vertex -33.5147 -22.0719 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.2455 -2.23644 0 + vertex 14.2516 -3.15818 0 + vertex 14.333 -2.7489 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.2455 -2.23644 0 + vertex 13.8131 -3.7697 0 + vertex 14.2516 -3.15818 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.172 -4.2601 0 + vertex 14.2455 -2.23644 0 + vertex 13.5923 -0.94501 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.2455 -2.23644 0 + vertex 13.172 -4.2601 0 + vertex 13.8131 -3.7697 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.5923 -0.94501 0 + vertex 12.4032 -4.58609 0 + vertex 13.172 -4.2601 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.2758 -4.53506 0 + vertex 13.5923 -0.94501 0 + vertex 12.3489 0.629998 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.5923 -0.94501 0 + vertex 11.5814 -4.70438 0 + vertex 12.4032 -4.58609 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.74282 -3.09522 0 + vertex 12.3489 0.629998 0 + vertex 10.5724 2.40247 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.5923 -0.94501 0 + vertex 10.2758 -4.53506 0 + vertex 11.5814 -4.70438 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.41545 -1.76788 0 + vertex 10.5724 2.40247 0 + vertex 9.13441 3.60373 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.3489 0.629998 0 + vertex 9.01294 -4.00814 0 + vertex 10.2758 -4.53506 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.6091 0.441775 0 + vertex 9.13441 3.60373 0 + vertex 8.18559 4.25764 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.3489 0.629998 0 + vertex 7.74282 -3.09522 0 + vertex 9.01294 -4.00814 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.5724 2.40247 0 + vertex 6.41545 -1.76788 0 + vertex 7.74282 -3.09522 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.39665 0.754678 0 + vertex 8.18559 4.25764 0 + vertex 5.26682 5.76024 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.13441 3.60373 0 + vertex 4.6091 0.441775 0 + vertex 6.41545 -1.76788 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.18559 4.25764 0 + vertex 4.39665 0.754678 0 + vertex 4.6091 0.441775 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.66409 7.13679 0 + vertex 4.39665 0.754678 0 + vertex 5.26682 5.76024 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.39665 0.754678 0 + vertex 1.66409 7.13679 0 + vertex 4.24084 0.464987 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.55278 -2.51803 0 + vertex 4.24084 0.464987 0 + vertex 1.66409 7.13679 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.24084 0.464987 0 + vertex 1.09298 -4.60426 0 + vertex 3.9592 -5.58648 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.55278 -2.51803 0 + vertex 1.66409 7.13679 0 + vertex -0.248642 7.94666 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.24084 0.464987 0 + vertex -1.72768 -3.30659 0 + vertex 1.09298 -4.60426 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.55278 -2.51803 0 + vertex -0.248642 7.94666 0 + vertex -2.78119 9.30203 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.24084 0.464987 0 + vertex -3.55278 -2.51803 0 + vertex -1.72768 -3.30659 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.99153 10.6633 0 + vertex -3.55278 -2.51803 0 + vertex -2.78119 9.30203 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.19093 -26.1306 0 + vertex -4.26405 -24.3543 0 + vertex -2.25121 -28.0146 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.89417 -22.8317 0 + vertex 0.168338 -24.355 0 + vertex -3.85646 -21.6547 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.72385 -21.1527 0 + vertex -4.06681 -20.6308 0 + vertex 1.84511 -22.661 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.55278 -2.51803 0 + vertex -4.99153 10.6633 0 + vertex -3.71458 -2.66291 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -13.7227 13.3517 0 + vertex -4.99153 10.6633 0 + vertex -5.93765 11.491 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.854 -7.59505 0 + vertex -5.57075 -19.2012 0 + vertex -4.70045 -19.8327 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -10.6367 14.238 0 + vertex -5.93765 11.491 0 + vertex -7.23385 14.4578 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.05653 -4.03047 0 + vertex -7.1272 -19.1706 0 + vertex -5.57075 -19.2012 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.03104 -4.97268 0 + vertex 7.21237 -5.88439 0 + vertex 7.79727 -5.75259 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.81183 -5.98051 0 + vertex 7.03104 -4.97268 0 + vertex 5.97791 -3.63939 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.03104 -4.97268 0 + vertex 5.81183 -5.98051 0 + vertex 7.21237 -5.88439 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.9592 -5.58648 0 + vertex 5.97791 -3.63939 0 + vertex 5.02006 -2.01238 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.9592 -5.58648 0 + vertex 5.02006 -2.01238 0 + vertex 4.37015 -0.506109 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.97791 -3.63939 0 + vertex 3.9592 -5.58648 0 + vertex 5.81183 -5.98051 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.9592 -5.58648 0 + vertex 4.37015 -0.506109 0 + vertex 4.24084 0.464987 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.6656 -34.4466 0 + vertex 12.1385 -34.7994 0 + vertex 12.2351 -35.1874 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.7938 -32.2631 0 + vertex 11.871 -34.5351 0 + vertex 14.6656 -34.4466 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.6656 -34.4466 0 + vertex 11.871 -34.5351 0 + vertex 12.1385 -34.7994 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.915 -33.0747 0 + vertex 11.871 -34.5351 0 + vertex 11.4887 -31.4602 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.871 -34.5351 0 + vertex 10.915 -33.0747 0 + vertex 11.4551 -34.4353 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.7197 -33.9677 0 + vertex 11.4551 -34.4353 0 + vertex 10.915 -33.0747 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.4551 -34.4353 0 + vertex 10.7197 -33.9677 0 + vertex 10.9006 -34.3507 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.858 -14.1239 0 + vertex 13.2867 -16.8469 0 + vertex 14.1246 -14.3424 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.417 -13.7469 0 + vertex 13.2867 -16.8469 0 + vertex 12.858 -14.1239 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.417 -13.7469 0 + vertex 12.058 -19.7199 0 + vertex 13.2867 -16.8469 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.058 -19.7199 0 + vertex 12.417 -13.7469 0 + vertex 12.4073 -13.2773 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.8088 29.3224 0 + vertex 15.0577 29.0611 0 + vertex 12.0187 29.9363 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.122 28.0941 0 + vertex 11.7374 28.4518 0 + vertex 11.8052 27.5343 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.0577 29.0611 0 + vertex 11.8088 29.3224 0 + vertex 11.7374 28.4518 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.122 28.0941 0 + vertex 11.8052 27.5343 0 + vertex 12.0123 26.7794 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.122 28.0941 0 + vertex 12.0123 26.7794 0 + vertex 12.5486 25.9653 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.1542 17.4223 0 + vertex 24.7931 16.6725 0 + vertex 24.7174 17.1695 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.1542 17.4223 0 + vertex 23.3802 15.8262 0 + vertex 24.7931 16.6725 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.547 17.5015 0 + vertex 23.3802 15.8262 0 + vertex 24.1542 17.4223 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.547 17.5015 0 + vertex 21.1653 14.8489 0 + vertex 23.3802 15.8262 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.2159 17.5562 0 + vertex 21.1653 14.8489 0 + vertex 22.547 17.5015 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.2159 17.5562 0 + vertex 20.0668 14.6265 0 + vertex 21.1653 14.8489 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.4164 15.1559 0 + vertex 20.2159 17.5562 0 + vertex 19.8437 17.7553 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.5954 15.8977 0 + vertex 19.8437 17.7553 0 + vertex 19.5351 18.2611 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2045 16.623 0 + vertex 19.5351 18.2611 0 + vertex 19.0948 20.2262 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.155 22.8321 0 + vertex 19.0948 20.2262 0 + vertex 18.6529 22.0992 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.2159 17.5562 0 + vertex 18.4164 15.1559 0 + vertex 20.0668 14.6265 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.99 17.4864 0 + vertex 19.0948 20.2262 0 + vertex 17.155 22.8321 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.8437 17.7553 0 + vertex 16.5954 15.8977 0 + vertex 18.4164 15.1559 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.6982 18.6425 0 + vertex 17.155 22.8321 0 + vertex 15.5055 23.4995 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.5351 18.2611 0 + vertex 15.2045 16.623 0 + vertex 16.5954 15.8977 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.9729 20.5521 0 + vertex 15.5055 23.4995 0 + vertex 14.0164 24.1527 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.0948 20.2262 0 + vertex 13.99 17.4864 0 + vertex 15.2045 16.623 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.9729 20.5521 0 + vertex 14.0164 24.1527 0 + vertex 13.0733 24.7212 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.155 22.8321 0 + vertex 12.6982 18.6425 0 + vertex 13.99 17.4864 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.71033 23.0922 0 + vertex 13.0733 24.7212 0 + vertex 12.1975 25.5292 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.07032 24.476 0 + vertex 12.1975 25.5292 0 + vertex 11.5037 26.4501 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.51885 25.3107 0 + vertex 11.5037 26.4501 0 + vertex 11.1066 27.3577 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.5055 23.4995 0 + vertex 10.9729 20.5521 0 + vertex 12.6982 18.6425 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.91411 25.7528 0 + vertex 11.1066 27.3577 0 + vertex 11.0411 28.3898 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.30515 36.0346 0 + vertex 12.0544 30.7144 0 + vertex 4.72188 37.0399 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.0544 30.7144 0 + vertex 4.30515 36.0346 0 + vertex 11.5971 30.3591 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.57109 31.3388 0 + vertex 11.5971 30.3591 0 + vertex 3.93589 34.5584 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5971 30.3591 0 + vertex 4.30515 36.0346 0 + vertex 3.93589 34.5584 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 4.3138 28.4461 0 + vertex 11.5971 30.3591 0 + vertex 3.57109 31.3388 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5971 30.3591 0 + vertex 4.3138 28.4461 0 + vertex 5.72413 26.6445 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.3138 28.4461 0 + vertex 3.57109 31.3388 0 + vertex 3.67763 29.7129 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.41168 -29.738 0 + vertex -2.25121 -28.0146 0 + vertex -4.26405 -24.3543 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.25121 -28.0146 0 + vertex -6.41168 -29.738 0 + vertex -3.14673 -30.0798 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.14673 -30.0798 0 + vertex -6.41168 -29.738 0 + vertex -3.7659 -32.0301 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 33.8444 -30.1753 0 + vertex 30.1062 -30.7807 0 + vertex 30.2029 -31.1764 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.7817 -27.1595 0 + vertex 29.6885 -30.4984 0 + vertex 30.1062 -30.7807 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 28.9763 -27.4135 0 + vertex 29.6885 -30.4984 0 + vertex 30.7817 -27.1595 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.6885 -30.4984 0 + vertex 28.9763 -27.4135 0 + vertex 29.2916 -30.4642 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.9763 -27.4135 0 + vertex 28.199 -31.2235 0 + vertex 29.2916 -30.4642 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 25.3774 -27.4375 0 + vertex 28.199 -31.2235 0 + vertex 28.9763 -27.4135 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.199 -31.2235 0 + vertex 25.3774 -27.4375 0 + vertex 26.4192 -32.7448 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.3774 -27.4375 0 + vertex 24.9271 -33.7368 0 + vertex 26.4192 -32.7448 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.5138 -29.5327 0 + vertex 24.9271 -33.7368 0 + vertex 25.3774 -27.4375 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.9271 -33.7368 0 + vertex 19.5138 -29.5327 0 + vertex 23.5816 -34.2758 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.3087 -31.0557 0 + vertex 23.5816 -34.2758 0 + vertex 19.5138 -29.5327 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 22.2417 -34.4379 0 + vertex 19.3087 -31.0557 0 + vertex 21.4183 -34.349 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.9054 -28.0436 0 + vertex 25.3774 -27.4375 0 + vertex 20.1129 -27.4424 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.5138 -29.5327 0 + vertex 25.3774 -27.4375 0 + vertex 19.9054 -28.0436 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.5816 -34.2758 0 + vertex 19.3087 -31.0557 0 + vertex 22.2417 -34.4379 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.3085 -32.3556 0 + vertex 21.4183 -34.349 0 + vertex 19.3087 -31.0557 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.4183 -34.349 0 + vertex 19.3085 -32.3556 0 + vertex 20.6651 -34.0963 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.6651 -34.0963 0 + vertex 19.3085 -32.3556 0 + vertex 20.0228 -33.6987 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.0228 -33.6987 0 + vertex 19.3085 -32.3556 0 + vertex 19.5322 -33.1754 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 45.3585 -24.1311 0 + vertex 37.9618 -36.3241 0 + vertex 38.113 -36.8464 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 36.8272 -33.2656 0 + vertex 37.9618 -36.3241 0 + vertex 38.2188 -29.6614 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.9618 -36.3241 0 + vertex 36.8272 -33.2656 0 + vertex 37.1913 -36.0604 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 36.2918 -35.0946 0 + vertex 37.1913 -36.0604 0 + vertex 36.8272 -33.2656 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.1913 -36.0604 0 + vertex 36.2918 -35.0946 0 + vertex 36.3972 -35.7834 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 117.5 117.5 0 + vertex 47.9875 -20.1225 0 + vertex 117.5 -117.5 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 117.5 117.5 0 + vertex 47.7267 -19.5813 0 + vertex 47.9875 -20.1225 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 27.5422 14.7505 0 + vertex 47.7267 -19.5813 0 + vertex 117.5 117.5 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.7267 -19.5813 0 + vertex 27.5422 14.7505 0 + vertex 47.2139 -19.2263 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 27.6094 12.2412 0 + vertex 47.2139 -19.2263 0 + vertex 27.5422 14.7505 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 27.528 9.70386 0 + vertex 47.2139 -19.2263 0 + vertex 27.6094 12.2412 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.9177 3.98634 0 + vertex 47.2139 -19.2263 0 + vertex 27.528 9.70386 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 42.1032 -19.4743 0 + vertex 44.5909 -19.3768 0 + vertex 41.8934 -19.2238 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.5909 -19.3768 0 + vertex 42.1032 -19.4743 0 + vertex 42.943 -20.2657 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 46.2623 -19.1343 0 + vertex 41.5319 -19.1343 0 + vertex 44.5909 -19.3768 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.5909 -19.3768 0 + vertex 41.5319 -19.1343 0 + vertex 41.8934 -19.2238 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 47.2139 -19.2263 0 + vertex 26.953 2.16551 0 + vertex 46.2623 -19.1343 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 46.2623 -19.1343 0 + vertex 26.8464 1.29842 0 + vertex 41.5319 -19.1343 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 31.4974 -26.3899 0 + vertex 35.3305 -26.5156 0 + vertex 31.8275 -24.8188 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.8275 -24.8188 0 + vertex 34.62 -22.2927 0 + vertex 32.0255 -23.3848 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.8086 -21.404 0 + vertex 34.62 -22.2927 0 + vertex 34.9156 -21.474 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.4798 -20.1181 0 + vertex 30.7248 -19.9631 0 + vertex 35.5661 -21.102 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.62 -22.2927 0 + vertex 32.0232 -22.2828 0 + vertex 32.0255 -23.3848 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.62 -22.2927 0 + vertex 31.8086 -21.404 0 + vertex 32.0232 -22.2828 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.5661 -21.102 0 + vertex 30.7248 -19.9631 0 + vertex 35.2187 -21.2043 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.9156 -21.474 0 + vertex 31.3699 -20.64 0 + vertex 31.8086 -21.404 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.2187 -21.2043 0 + vertex 31.3699 -20.64 0 + vertex 34.9156 -21.474 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 31.3699 -20.64 0 + vertex 35.2187 -21.2043 0 + vertex 30.7248 -19.9631 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.8464 1.29842 0 + vertex 46.2623 -19.1343 0 + vertex 26.953 2.16551 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.5319 -19.1343 0 + vertex 26.8464 1.29842 0 + vertex 38.4798 -20.1181 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 30.7248 -19.9631 0 + vertex 38.4798 -20.1181 0 + vertex 29.9429 -19.4981 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 26.4742 18.624 0 + vertex 27.5422 14.7505 0 + vertex 117.5 117.5 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.5422 14.7505 0 + vertex 26.4742 18.624 0 + vertex 27.1755 15.8473 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.1755 15.8473 0 + vertex 26.4742 18.624 0 + vertex 26.6933 17.4601 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 117.5 117.5 0 + vertex 25.9424 19.4837 0 + vertex 26.4742 18.624 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 21.2755 24.568 0 + vertex 25.9424 19.4837 0 + vertex 117.5 117.5 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 21.8319 23.6658 0 + vertex 25.9424 19.4837 0 + vertex 21.2755 24.568 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 22.0827 22.427 0 + vertex 25.0752 20.0627 0 + vertex 21.8319 23.6658 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.0752 20.0627 0 + vertex 22.0827 22.427 0 + vertex 23.8499 20.3844 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 22.2698 21.5943 0 + vertex 23.8499 20.3844 0 + vertex 22.0827 22.427 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.1387 20.59 0 + vertex 22.2698 21.5943 0 + vertex 22.6169 20.9877 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 23.8499 20.3844 0 + vertex 22.2698 21.5943 0 + vertex 23.1387 20.59 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 25.9424 19.4837 0 + vertex 21.8319 23.6658 0 + vertex 25.0752 20.0627 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 15.3134 30.0845 0 + vertex 21.2755 24.568 0 + vertex 117.5 117.5 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.2755 24.568 0 + vertex 15.3134 30.0845 0 + vertex 20.1819 25.3734 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.1819 25.3734 0 + vertex 15.4783 29.8698 0 + vertex 18.3193 26.3216 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 18.3193 26.3216 0 + vertex 15.4783 29.8698 0 + vertex 17.0772 26.9817 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 15.6084 29.1601 0 + vertex 17.0772 26.9817 0 + vertex 15.4783 29.8698 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 17.0772 26.9817 0 + vertex 15.6084 29.1601 0 + vertex 16.2688 27.6146 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.2688 27.6146 0 + vertex 15.6084 29.1601 0 + vertex 15.808 28.3106 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 20.1819 25.3734 0 + vertex 15.3134 30.0845 0 + vertex 15.4783 29.8698 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.2907 30.5214 0 + vertex 15.0577 29.0611 0 + vertex 15.1584 29.8123 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.122 28.0941 0 + vertex 12.5486 25.9653 0 + vertex 13.4969 25.2416 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.2907 30.5214 0 + vertex 15.1584 29.8123 0 + vertex 15.3134 30.0845 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.0187 29.9363 0 + vertex 15.0577 29.0611 0 + vertex 12.2907 30.5214 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.15152 38.5852 0 + vertex 15.3134 30.0845 0 + vertex 117.5 117.5 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 5.25321 38.4452 0 + vertex 15.3134 30.0845 0 + vertex 5.15152 38.5852 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 12.0544 30.7144 0 + vertex 15.3134 30.0845 0 + vertex 5.25321 38.4452 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 13.0733 24.7212 0 + vertex 9.71033 23.0922 0 + vertex 10.9729 20.5521 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.72413 26.6445 0 + vertex 11.0411 28.3898 0 + vertex 11.2319 29.4873 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 12.1975 25.5292 0 + vertex 9.07032 24.476 0 + vertex 9.71033 23.0922 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.72413 26.6445 0 + vertex 11.2319 29.4873 0 + vertex 11.5971 30.3591 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.5037 26.4501 0 + vertex 8.51885 25.3107 0 + vertex 9.07032 24.476 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.1066 27.3577 0 + vertex 7.91411 25.7528 0 + vertex 8.51885 25.3107 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.0411 28.3898 0 + vertex 7.11433 25.9588 0 + vertex 7.91411 25.7528 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.0411 28.3898 0 + vertex 5.72413 26.6445 0 + vertex 7.11433 25.9588 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.19939 38.083 0 + vertex 12.0544 30.7144 0 + vertex 5.25321 38.4452 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.72188 37.0399 0 + vertex 12.0544 30.7144 0 + vertex 5.19939 38.083 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.11433 25.9588 0 + vertex 5.72413 26.6445 0 + vertex 6.4022 26.1795 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.3134 30.0845 0 + vertex 12.0544 30.7144 0 + vertex 12.2907 30.5214 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.46161 28.0795 0 + vertex 1.04836 28.6106 0 + vertex 1.1273 29.8907 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.04836 28.6106 0 + vertex -0.115935 27.2162 0 + vertex 0.858783 27.1101 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.77953 29.7664 0 + vertex 1.1273 29.8907 0 + vertex 1.37489 31.173 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.04836 28.6106 0 + vertex -0.786632 27.5359 0 + vertex -0.115935 27.2162 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.97987 32.1322 0 + vertex 1.37489 31.173 0 + vertex 2.44067 33.9939 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.04836 28.6106 0 + vertex -1.46161 28.0795 0 + vertex -0.786632 27.5359 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.55994 36.5001 0 + vertex 2.44067 33.9939 0 + vertex 4.08079 37.0842 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.1273 29.8907 0 + vertex -2.77953 29.7664 0 + vertex -1.46161 28.0795 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.55994 36.5001 0 + vertex 4.08079 37.0842 0 + vertex 5.15152 38.5852 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.37489 31.173 0 + vertex -3.97987 32.1322 0 + vertex -2.77953 29.7664 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.44067 33.9939 0 + vertex -4.97284 35.0324 0 + vertex -3.97987 32.1322 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -117.5 117.5 0 + vertex 5.15152 38.5852 0 + vertex 117.5 117.5 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.44067 33.9939 0 + vertex -5.55994 36.5001 0 + vertex -4.97284 35.0324 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.15152 38.5852 0 + vertex -5.8163 36.5812 0 + vertex -5.55994 36.5001 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.80952 27.3973 0 + vertex -6.28322 28.2565 0 + vertex -6.22131 31.7226 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.546 27.7352 0 + vertex -6.22131 31.7226 0 + vertex -6.055 36.2349 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -7.25507 27.2437 0 + vertex -6.28322 28.2565 0 + vertex -8.80952 27.3973 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.28322 28.2565 0 + vertex -7.25507 27.2437 0 + vertex -6.38329 27.6173 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.38329 27.6173 0 + vertex -7.25507 27.2437 0 + vertex -6.55612 27.3597 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.22131 31.7226 0 + vertex -11.546 27.7352 0 + vertex -8.80952 27.3973 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.055 36.2349 0 + vertex -13.5562 27.8374 0 + vertex -11.546 27.7352 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -22.4093 27.9007 0 + vertex -6.055 36.2349 0 + vertex -5.8163 36.5812 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.055 36.2349 0 + vertex -15.2376 27.7001 0 + vertex -13.5562 27.8374 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.055 36.2349 0 + vertex -20.8096 27.6578 0 + vertex -15.2376 27.7001 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.2376 27.7001 0 + vertex -20.8096 27.6578 0 + vertex -16.9875 27.3196 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9875 27.3196 0 + vertex -19.9485 27.2141 0 + vertex -19.335 26.703 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.9875 27.3196 0 + vertex -20.8096 27.6578 0 + vertex -19.9485 27.2141 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.15152 38.5852 0 + vertex -117.5 117.5 0 + vertex -5.8163 36.5812 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -31.2177 27.4629 0 + vertex -5.8163 36.5812 0 + vertex -117.5 117.5 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.055 36.2349 0 + vertex -22.4093 27.9007 0 + vertex -20.8096 27.6578 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3225 27.6757 0 + vertex -27.4214 26.3653 0 + vertex -24.8433 26.205 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.8163 36.5812 0 + vertex -24.3632 27.9554 0 + vertex -22.4093 27.9007 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -29.2879 26.9865 0 + vertex -24.3632 27.9554 0 + vertex -30.666 27.4912 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -24.3632 27.9554 0 + vertex -29.2879 26.9865 0 + vertex -27.4214 26.3653 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.8163 36.5812 0 + vertex -30.666 27.4912 0 + vertex -24.3632 27.9554 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.0943 24.213 0 + vertex -34.2108 23.023 0 + vertex -32.1178 22.3529 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.7877 25.1404 0 + vertex -31.2912 27.2229 0 + vertex -31.2177 27.4629 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2912 27.2229 0 + vertex -36.1697 23.9798 0 + vertex -34.2108 23.023 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2912 27.2229 0 + vertex -37.7877 25.1404 0 + vertex -36.1697 23.9798 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.8163 36.5812 0 + vertex -31.2177 27.4629 0 + vertex -30.666 27.4912 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2177 27.4629 0 + vertex -38.5782 25.7376 0 + vertex -37.7877 25.1404 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -39.0347 25.8392 0 + vertex -31.2177 27.4629 0 + vertex -117.5 117.5 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -47.2102 -36.2359 0 + vertex -37.5366 -12.7854 0 + vertex -47.8577 -36.863 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.9072 -25.4747 0 + vertex -47.2102 -36.2359 0 + vertex -42.237 -30.9405 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -42.237 -30.9405 0 + vertex -47.2102 -36.2359 0 + vertex -43.2543 -33.2915 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -46.1801 -35.8499 0 + vertex -43.2543 -33.2915 0 + vertex -47.2102 -36.2359 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -44.1198 -34.7306 0 + vertex -46.1801 -35.8499 0 + vertex -45.0296 -35.5019 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -43.2543 -33.2915 0 + vertex -46.1801 -35.8499 0 + vertex -44.1198 -34.7306 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -37.5366 -12.7854 0 + vertex -47.2102 -36.2359 0 + vertex -39.9072 -25.4747 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -117.5 117.5 0 + vertex -47.8577 -36.863 0 + vertex -39.1303 25.4589 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -117.5 -117.5 0 + vertex -47.8577 -36.863 0 + vertex -117.5 117.5 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -39.0347 25.8392 0 + vertex -117.5 117.5 0 + vertex -39.1303 25.4589 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -31.2177 27.4629 0 + vertex -39.0347 25.8392 0 + vertex -38.5782 25.7376 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 47.8425 -21.0531 0 + vertex 117.5 -117.5 0 + vertex 47.9875 -20.1225 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 47.5305 -21.9981 0 + vertex 117.5 -117.5 0 + vertex 47.8425 -21.0531 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 47.0957 -22.796 0 + vertex 117.5 -117.5 0 + vertex 47.5305 -21.9981 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 46.5684 -23.4293 0 + vertex 117.5 -117.5 0 + vertex 47.0957 -22.796 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.9939 -37.5705 0 + vertex 46.5684 -23.4293 0 + vertex 45.9792 -23.8802 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.113 -36.8464 0 + vertex 45.9792 -23.8802 0 + vertex 45.3585 -24.1311 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 38.2188 -29.6614 0 + vertex 45.3585 -24.1311 0 + vertex 44.7368 -24.1643 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 40.0289 -25.46 0 + vertex 44.7368 -24.1643 0 + vertex 44.1445 -23.9621 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 41.2986 -23.9223 0 + vertex 44.1445 -23.9621 0 + vertex 43.6122 -23.5069 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 41.2986 -23.9223 0 + vertex 43.6122 -23.5069 0 + vertex 42.7682 -22.851 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.1445 -23.9621 0 + vertex 41.2986 -23.9223 0 + vertex 40.5923 -24.6171 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.1445 -23.9621 0 + vertex 40.5923 -24.6171 0 + vertex 40.0289 -25.46 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 44.7368 -24.1643 0 + vertex 40.0289 -25.46 0 + vertex 38.2188 -29.6614 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 37.9618 -36.3241 0 + vertex 45.3585 -24.1311 0 + vertex 38.2188 -29.6614 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 45.9792 -23.8802 0 + vertex 38.113 -36.8464 0 + vertex 37.9939 -37.5705 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 46.5684 -23.4293 0 + vertex 37.9939 -37.5705 0 + vertex 117.5 -117.5 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 37.381 -37.9628 0 + vertex 117.5 -117.5 0 + vertex 37.9939 -37.5705 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 35.8907 -38.1241 0 + vertex 117.5 -117.5 0 + vertex 37.381 -37.9628 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 33.1396 -38.1555 0 + vertex 117.5 -117.5 0 + vertex 35.8907 -38.1241 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.8074 -38.0948 0 + vertex 117.5 -117.5 0 + vertex 33.1396 -38.1555 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.4079 -38.2833 0 + vertex 29.8074 -38.0948 0 + vertex 28.6431 -37.8931 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.553 -36.8405 0 + vertex 25.9895 -35.834 0 + vertex 28.4102 -37.3704 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 24.0601 -37.0678 0 + vertex 28.4102 -37.3704 0 + vertex 25.9895 -35.834 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 28.4102 -37.3704 0 + vertex 24.0601 -37.0678 0 + vertex 28.6431 -37.8931 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 21.4079 -38.2833 0 + vertex 28.6431 -37.8931 0 + vertex 24.0601 -37.0678 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.8074 -38.0948 0 + vertex 21.4079 -38.2833 0 + vertex 20.3084 -38.5182 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.8074 -38.0948 0 + vertex 20.3084 -38.5182 0 + vertex 117.5 -117.5 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 19.0956 -38.5852 0 + vertex 117.5 -117.5 0 + vertex 20.3084 -38.5182 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.33583 -38.4712 0 + vertex 19.0956 -38.5852 0 + vertex 17.8945 -38.4707 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.33583 -38.4712 0 + vertex 17.8945 -38.4707 0 + vertex 16.8412 -38.0675 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.519 -36.9119 0 + vertex 16.8412 -38.0675 0 + vertex 15.8953 -37.4336 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 11.871 -34.5351 0 + vertex 14.7938 -32.2631 0 + vertex 11.4887 -31.4602 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.2351 -35.1874 0 + vertex 14.8379 -35.6738 0 + vertex 14.6656 -34.4466 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 12.1379 -35.6584 0 + vertex 14.8379 -35.6738 0 + vertex 12.2351 -35.1874 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 14.8379 -35.6738 0 + vertex 12.1379 -35.6584 0 + vertex 15.2376 -36.6526 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.7916 -36.1064 0 + vertex 15.2376 -36.6526 0 + vertex 12.1379 -35.6584 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 11.1962 -36.5595 0 + vertex 15.2376 -36.6526 0 + vertex 11.7916 -36.1064 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15.2376 -36.6526 0 + vertex 11.1962 -36.5595 0 + vertex 15.8953 -37.4336 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 10.519 -36.9119 0 + vertex 15.8953 -37.4336 0 + vertex 11.1962 -36.5595 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.8412 -38.0675 0 + vertex 10.519 -36.9119 0 + vertex 9.92719 -37.0575 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.8412 -38.0675 0 + vertex 9.92719 -37.0575 0 + vertex 8.47177 -37.477 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 16.8412 -38.0675 0 + vertex 8.47177 -37.477 0 + vertex 5.33583 -38.4712 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 19.0956 -38.5852 0 + vertex 5.33583 -38.4712 0 + vertex 117.5 -117.5 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.31266 -38.26 0 + vertex 5.33583 -38.4712 0 + vertex 4.84381 -38.3343 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.43985 -37.8545 0 + vertex 4.73542 -37.8041 0 + vertex 4.64415 -37.2809 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.43985 -37.8545 0 + vertex 4.84381 -38.3343 0 + vertex 4.73542 -37.8041 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.31266 -38.26 0 + vertex 4.84381 -38.3343 0 + vertex 3.43985 -37.8545 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.33583 -38.4712 0 + vertex 2.31266 -38.26 0 + vertex 0.962702 -38.4962 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.33583 -38.4712 0 + vertex 0.962702 -38.4962 0 + vertex 117.5 -117.5 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.366978 -38.538 0 + vertex 117.5 -117.5 0 + vertex 0.962702 -38.4962 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.66873 -38.0883 0 + vertex -0.366978 -38.538 0 + vertex -1.43333 -38.36 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.07933 -37.9462 0 + vertex -1.43333 -38.36 0 + vertex -2.45619 -37.7112 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.7659 -32.0301 0 + vertex -6.41168 -29.738 0 + vertex -3.99709 -33.5697 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.33648 -34.384 0 + vertex -3.99709 -33.5697 0 + vertex -6.41168 -29.738 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.51249 -36.3769 0 + vertex -3.80393 -35.193 0 + vertex -3.99709 -33.5697 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.80393 -35.193 0 + vertex -7.31439 -36.7536 0 + vertex -3.26834 -36.6145 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.3919 -37.1883 0 + vertex -3.26834 -36.6145 0 + vertex -7.31439 -36.7536 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.26834 -36.6145 0 + vertex -7.3919 -37.1883 0 + vertex -2.45619 -37.7112 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -7.74517 -37.6801 0 + vertex -2.45619 -37.7112 0 + vertex -7.3919 -37.1883 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.07933 -37.9462 0 + vertex -2.45619 -37.7112 0 + vertex -7.74517 -37.6801 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.43333 -38.36 0 + vertex -8.07933 -37.9462 0 + vertex -8.66873 -38.0883 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.366978 -38.538 0 + vertex -8.66873 -38.0883 0 + vertex -12.0013 -38.1555 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.366978 -38.538 0 + vertex -12.0013 -38.1555 0 + vertex -117.5 -117.5 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -117.5 -117.5 0 + vertex -12.0013 -38.1555 0 + vertex -15.3277 -38.0928 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.5781 -38.0841 0 + vertex -15.3277 -38.0928 0 + vertex -15.7983 -37.9502 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.9213 -37.1689 0 + vertex -16.6989 -37.6188 0 + vertex -15.9433 -37.6764 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.6989 -37.6188 0 + vertex -15.7983 -37.9502 0 + vertex -15.9433 -37.6764 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -17.033 -37.9274 0 + vertex -15.7983 -37.9502 0 + vertex -16.6989 -37.6188 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -17.5781 -38.0841 0 + vertex -15.7983 -37.9502 0 + vertex -17.033 -37.9274 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15.3277 -38.0928 0 + vertex -17.5781 -38.0841 0 + vertex -117.5 -117.5 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -117.5 -117.5 0 + vertex -17.5781 -38.0841 0 + vertex -20.8226 -38.1301 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2835 -38.1638 0 + vertex -20.8226 -38.1301 0 + vertex -24.8096 -38.0047 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -27.2791 -36.8782 0 + vertex -25.0608 -37.8416 0 + vertex -25.157 -37.5754 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -28.2835 -38.1638 0 + vertex -25.0608 -37.8416 0 + vertex -27.2791 -36.8782 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -25.0608 -37.8416 0 + vertex -28.2835 -38.1638 0 + vertex -24.8096 -38.0047 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.8226 -38.1301 0 + vertex -28.2835 -38.1638 0 + vertex -117.5 -117.5 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -117.5 -117.5 0 + vertex -28.2835 -38.1638 0 + vertex -37.632 -38.1325 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -117.5 -117.5 0 + vertex -37.632 -38.1325 0 + vertex -47.4646 -37.9547 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.366978 -38.538 0 + vertex -117.5 -117.5 0 + vertex 117.5 -117.5 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.8161 -37.7712 0 + vertex -117.5 -117.5 0 + vertex -47.4646 -37.9547 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.9875 -37.5097 0 + vertex -117.5 -117.5 0 + vertex -47.8161 -37.7712 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -47.8577 -36.863 0 + vertex -117.5 -117.5 0 + vertex -47.9875 -37.5097 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 42.0238 -20.3507 0 + vertex 42.943 -20.2657 0 + vertex 42.1032 -19.4743 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 42.0238 -20.3507 0 + vertex 41.971 -20.8453 0 + vertex 42.943 -20.2657 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 41.971 -20.8453 0 + vertex 42.0238 -20.3507 0 + vertex 41.8981 -20.7296 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.104 -22.9178 0 + vertex 36.2859 -23.7121 0 + vertex 36.3422 -23.0402 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 35.2001 -22.9271 0 + vertex 36.2859 -23.7121 0 + vertex 36.104 -22.9178 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 36.2859 -23.7121 0 + vertex 35.2001 -22.9271 0 + vertex 35.3305 -26.5156 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 34.7441 -22.7166 0 + vertex 35.3305 -26.5156 0 + vertex 35.2001 -22.9271 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.8275 -24.8188 0 + vertex 34.7441 -22.7166 0 + vertex 34.62 -22.2927 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 31.8275 -24.8188 0 + vertex 35.3305 -26.5156 0 + vertex 34.7441 -22.7166 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.2318 -26.857 0 + vertex 35.3305 -26.5156 0 + vertex 31.4974 -26.3899 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 35.3305 -26.5156 0 + vertex 31.2318 -26.857 0 + vertex 33.8444 -30.1753 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 30.7817 -27.1595 0 + vertex 33.8444 -30.1753 0 + vertex 31.2318 -26.857 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 33.8444 -30.1753 0 + vertex 30.2029 -31.1764 0 + vertex 32.5255 -33.371 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 29.8709 -31.8517 0 + vertex 32.5255 -33.371 0 + vertex 30.2029 -31.1764 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.1062 -30.7807 0 + vertex 33.8444 -30.1753 0 + vertex 30.7817 -27.1595 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 32.5255 -33.371 0 + vertex 29.8709 -31.8517 0 + vertex 31.6707 -35.0376 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 31.6707 -35.0376 0 + vertex 29.8709 -31.8517 0 + vertex 30.8837 -35.7486 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 27.8442 -34.1555 0 + vertex 30.8837 -35.7486 0 + vertex 29.8709 -31.8517 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 30.8837 -35.7486 0 + vertex 27.8442 -34.1555 0 + vertex 29.7686 -36.0779 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.7686 -36.0779 0 + vertex 27.8442 -34.1555 0 + vertex 29.0223 -36.3831 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 29.0223 -36.3831 0 + vertex 27.8442 -34.1555 0 + vertex 28.553 -36.8405 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 25.9895 -35.834 0 + vertex 28.553 -36.8405 0 + vertex 27.8442 -34.1555 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.2742 24.7069 0 + vertex -10.5829 24.4 0 + vertex -10.6709 24.5009 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -14.1729 23.8467 0 + vertex -11.2742 24.7069 0 + vertex -13.9393 24.99 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.2742 24.7069 0 + vertex -14.1729 23.8467 0 + vertex -10.5829 24.4 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -16.6107 24.7853 0 + vertex -14.1729 23.8467 0 + vertex -13.9393 24.99 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -16.6107 24.7853 0 + vertex -19.3275 23.0662 0 + vertex -14.1729 23.8467 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -20.4324 24.2101 0 + vertex -19.3275 23.0662 0 + vertex -16.6107 24.7853 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.4324 24.2101 0 + vertex -21.5591 22.7309 0 + vertex -19.3275 23.0662 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.4324 24.2101 0 + vertex -22.0432 22.8497 0 + vertex -21.5591 22.7309 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -20.4324 24.2101 0 + vertex -22.6641 23.2546 0 + vertex -22.0432 22.8497 0 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -22.6641 23.2546 0 + vertex -20.4324 24.2101 0 + vertex -23.3809 23.8604 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.49325 -21.5121 0 + vertex 10.169 -23.3758 0 + vertex 10.0454 -22.5812 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.169 -23.3758 0 + vertex 7.70773 -21.5983 0 + vertex 10.0775 -24.2416 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.16984 -21.6481 0 + vertex 10.0454 -22.5812 0 + vertex 9.69979 -22.0048 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.0454 -22.5812 0 + vertex 9.16984 -21.6481 0 + vertex 8.49325 -21.5121 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.169 -23.3758 0 + vertex 8.49325 -21.5121 0 + vertex 7.70773 -21.5983 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 6.85097 -21.9079 0 + vertex 10.0775 -24.2416 0 + vertex 7.70773 -21.5983 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.0775 -24.2416 0 + vertex 6.85097 -21.9079 0 + vertex 9.7411 -25.4359 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.96068 -22.4422 0 + vertex 9.7411 -25.4359 0 + vertex 6.85097 -21.9079 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.07455 -23.2024 0 + vertex 9.7411 -25.4359 0 + vertex 5.96068 -22.4422 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.84714 -24.6213 0 + vertex 9.7411 -25.4359 0 + vertex 5.07455 -23.2024 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.7411 -25.4359 0 + vertex 3.84714 -24.6213 0 + vertex 7.96204 -29.9101 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.80055 -26.1986 0 + vertex 7.96204 -29.9101 0 + vertex 3.84714 -24.6213 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.95873 -27.8549 0 + vertex 7.96204 -29.9101 0 + vertex 2.80055 -26.1986 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.3456 -29.5107 0 + vertex 7.96204 -29.9101 0 + vertex 1.95873 -27.8549 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.96204 -29.9101 0 + vertex 1.3456 -29.5107 0 + vertex 6.30534 -33.4759 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.985088 -31.0867 0 + vertex 6.30534 -33.4759 0 + vertex 1.3456 -29.5107 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.901133 -32.5034 0 + vertex 6.30534 -33.4759 0 + vertex 0.985088 -31.0867 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.30534 -33.4759 0 + vertex 0.901133 -32.5034 0 + vertex 5.71313 -34.2297 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.71313 -34.2297 0 + vertex 0.901133 -32.5034 0 + vertex 5.04571 -34.678 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.04571 -34.678 0 + vertex 0.901133 -32.5034 0 + vertex 4.11511 -35.011 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.11511 -35.011 0 + vertex 0.901133 -32.5034 0 + vertex 3.17687 -35.0966 0 + endloop + endfacet + facet normal -0 -0 1 + outer loop + vertex 1.11766 -33.6813 0 + vertex 3.17687 -35.0966 0 + vertex 0.901133 -32.5034 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.17687 -35.0966 0 + vertex 1.11766 -33.6813 0 + vertex 2.32628 -34.9386 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.32628 -34.9386 0 + vertex 1.11766 -33.6813 0 + vertex 1.65861 -34.5411 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.76373 17.1908 0 + vertex 9.72145 16.1788 0 + vertex 10.4258 16.5104 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.76373 17.1908 0 + vertex 8.86535 15.8492 0 + vertex 9.72145 16.1788 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.028 17.0592 0 + vertex 9.76373 17.1908 0 + vertex 8.30319 18.4459 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.76373 17.1908 0 + vertex 8.028 17.0592 0 + vertex 8.86535 15.8492 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 7.15178 18.7442 0 + vertex 8.30319 18.4459 0 + vertex 7.1994 19.1268 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.30319 18.4459 0 + vertex 7.15178 18.7442 0 + vertex 8.028 17.0592 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0804 -21.8157 0 + vertex 27.3613 -24.0204 0 + vertex 27.3668 -22.8574 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 26.0804 -21.8157 0 + vertex 27.3668 -22.8574 0 + vertex 26.9354 -22.1189 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3613 -24.0204 0 + vertex 26.0804 -21.8157 0 + vertex 24.4233 -24.8188 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.4233 -24.8188 0 + vertex 26.0804 -21.8157 0 + vertex 24.8153 -21.9586 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 27.3613 -24.0204 0 + vertex 24.4233 -24.8188 0 + vertex 27.2283 -24.8188 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 23.7526 -22.3987 0 + vertex 24.4233 -24.8188 0 + vertex 24.8153 -21.9586 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 22.6861 -23.3258 0 + vertex 24.4233 -24.8188 0 + vertex 23.7526 -22.3987 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 24.4233 -24.8188 0 + vertex 22.6861 -23.3258 0 + vertex 21.6183 -24.6221 0 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 117.5 -117.5 0 + vertex 117.5 117.5 -3 + vertex 117.5 117.5 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 117.5 117.5 -3 + vertex 117.5 -117.5 0 + vertex 117.5 -117.5 -3 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 117.5 117.5 -3 + vertex -117.5 117.5 0 + vertex 117.5 117.5 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -117.5 117.5 0 + vertex 117.5 117.5 -3 + vertex -117.5 117.5 -3 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -117.5 -117.5 -3 + vertex 117.5 -117.5 0 + vertex -117.5 -117.5 0 + endloop + endfacet + facet normal 0 -1 -0 + outer loop + vertex 117.5 -117.5 0 + vertex -117.5 -117.5 -3 + vertex 117.5 -117.5 -3 + endloop + endfacet +endsolid OpenSCAD_Model diff --git a/resources/meshes/deltacomb.stl b/resources/meshes/deltacomb.stl index 7be5c33fd7..b3faa873fe 100644 Binary files a/resources/meshes/deltacomb.stl and b/resources/meshes/deltacomb.stl differ diff --git a/resources/meshes/discoeasy200.stl b/resources/meshes/discoeasy200.stl index f230512303..381df45b24 100644 Binary files a/resources/meshes/discoeasy200.stl and b/resources/meshes/discoeasy200.stl differ diff --git a/resources/meshes/jgaurora_a5.stl b/resources/meshes/jgaurora_a5.stl new file mode 100644 index 0000000000..c525b03649 Binary files /dev/null and b/resources/meshes/jgaurora_a5.stl differ diff --git a/resources/meshes/moai.obj b/resources/meshes/moai.obj new file mode 100644 index 0000000000..f13f30d6f4 --- /dev/null +++ b/resources/meshes/moai.obj @@ -0,0 +1,32 @@ +# OBJ written from C:\Users\Flo\Desktop\Cura_FILES\moai.obj +mtllib moai.mtl +# Units millimeters + +g Mesh +v 65 -65 0 +v -65 -65 0 +v -65 65 0 +v 65 65 0 +v 65 -65 0 +v -65 -65 0 +v -65 65 0 +v 65 65 0 +v -65 65 18.8383 +v 65 65 18.8383 +vn 0 0 1 +vn 1 0 0 +vn -1 0 0 +vt 0.0975501 1 +vt 1 1 +vt 1 0.0977239 +vt 0.0975501 0.0977239 +vt 0.0186426 0.870052 +vt 0.0736426 0.870052 +vt 0.0186426 0.815052 +vt 0.0214764 0.912057 +vt 0.0764764 0.967057 +vt 0.0214764 0.967057 +usemtl red +f 1/1/1 4/2/1 3/3/1 2/4/1 +f 7/5/2 9/6/2 6/7/2 +f 5/8/3 10/9/3 8/10/3 diff --git a/resources/meshes/wanhao_300_300_platform.obj b/resources/meshes/wanhao_300_300_platform.obj new file mode 100644 index 0000000000..d36fa4027d --- /dev/null +++ b/resources/meshes/wanhao_300_300_platform.obj @@ -0,0 +1,40925 @@ +#### +# +# OBJ File Generated by Meshlab +# +#### +# Object Wanhao_300_300.obj +# +# Vertices: 10222 +# Faces: 20456 +# +#### +mtllib ./Wanhao_300_300.obj.mtl + +vn -0.393291 -0.630494 -0.669178 +v -130.035583 215.793518 15.199996 0.749020 0.749020 0.749020 +vn -0.051719 -0.728959 -0.682601 +v -129.391830 215.606537 15.199996 0.749020 0.749020 0.749020 +vn -0.207049 -0.715068 -0.667689 +v -129.725296 215.653976 15.199996 0.749020 0.749020 0.749020 +vn -0.544071 -0.503412 -0.671240 +v -130.302078 216.015366 15.199996 0.749020 0.749020 0.749020 +vn -0.580426 0.569359 -0.582183 +v -130.679321 218.494888 15.199996 0.749020 0.749020 0.749020 +vn 0.053255 -0.729269 -0.682151 +v 129.391830 215.606537 15.199996 0.749020 0.749020 0.749020 +vn -0.729738 -0.090231 -0.677747 +v -130.679321 217.003281 15.199996 0.749020 0.749020 0.749020 +vn -0.680964 -0.312870 -0.662118 +v -130.506790 216.305603 15.199996 0.749020 0.749020 0.749020 +vn 0.580429 0.569355 -0.582183 +v 130.679321 218.494888 15.199996 0.749020 0.749020 0.749020 +vn 0.680964 -0.312870 -0.662118 +v 130.506790 216.305603 15.199996 0.749020 0.749020 0.749020 +vn 0.544071 -0.503412 -0.671240 +v 130.302078 216.015366 15.199996 0.749020 0.749020 0.749020 +vn -0.726515 0.683644 -0.069329 +v -130.126984 220.890671 113.548996 0.749020 0.749020 0.749020 +vn 0.726471 0.683697 -0.069274 +v 130.126984 220.892075 113.548996 0.749020 0.749020 0.749020 +vn 0.729739 -0.090229 -0.677746 +v 130.679321 217.003281 15.199996 0.749020 0.749020 0.749020 +vn 0.992475 -0.122036 0.010024 +v 130.125702 219.401840 113.636200 0.749020 0.749020 0.749020 +vn 0.649937 0.730775 -0.208683 +v 130.081924 223.917160 121.446198 0.749020 0.749020 0.749020 +vn 0.748066 0.661094 0.057892 +v 130.069046 223.917160 123.872597 0.749020 0.749020 0.749020 +vn 0.751737 0.614921 -0.238251 +v 130.101242 221.748810 118.013794 0.749020 0.749020 0.749020 +vn 0.788179 0.584583 0.192449 +v 130.005966 223.917160 124.540398 0.749020 0.749020 0.749020 +vn 0.882308 -0.417950 0.216448 +v 129.913269 220.543243 121.067398 0.749020 0.749020 0.749020 +vn 0.991714 -0.114562 0.058125 +v 130.088364 221.097168 120.467400 0.749020 0.749020 0.749020 +vn 0.991549 -0.126987 0.026564 +v 130.120560 219.461838 114.714798 0.749020 0.749020 0.749020 +vn -0.751844 0.614714 -0.238449 +v -130.101242 221.748810 118.013794 0.749020 0.749020 0.749020 +vn -0.649959 0.730757 -0.208681 +v -130.081924 223.917160 121.446198 0.749020 0.749020 0.749020 +vn -0.043265 0.347512 0.936677 +v -128.778992 223.917160 126.066002 0.749020 0.749020 0.749020 +vn -0.152839 -0.739284 0.655819 +v -128.794449 221.041367 122.842796 0.749020 0.749020 0.749020 +vn 0.116109 0.334526 0.935206 +v 128.778992 223.917160 126.066002 0.749020 0.749020 0.749020 +vn 0.160321 -0.736734 0.656902 +v 128.794449 221.041367 122.842796 0.749020 0.749020 0.749020 +vn 0.152749 -0.862867 0.481796 +v 128.800888 219.985092 121.658401 0.749020 0.749020 0.749020 +vn -0.240252 0.330881 0.912577 +v -128.924484 223.917160 126.052200 0.749020 0.749020 0.749020 +vn -0.152750 -0.862868 0.481796 +v -128.800888 219.985092 121.658401 0.749020 0.749020 0.749020 +vn 0.141015 -0.952070 0.271437 +v 128.815048 219.122787 118.625000 0.749020 0.749020 0.749020 +vn -0.140808 -0.952119 0.271372 +v -128.815048 219.122787 118.625000 0.749020 0.749020 0.749020 +vn 0.139042 -0.976592 0.164119 +v 128.833069 218.077667 114.946999 0.749020 0.749020 0.749020 +vn 0.139953 -0.989294 0.041351 +v 128.839508 218.006516 113.688599 0.749020 0.749020 0.749020 +vn -0.140384 -0.976322 0.164586 +v -128.833069 218.076279 114.946999 0.749020 0.749020 0.749020 +vn -0.140747 -0.989226 0.040289 +v -128.839508 218.006516 113.688599 0.749020 0.749020 0.749020 +vn 0.519482 -0.842140 0.144702 +v 129.475525 218.263260 114.922195 0.749020 0.749020 0.749020 +vn 0.542742 -0.735115 0.406248 +v 129.442047 220.135788 121.502998 0.749020 0.749020 0.749020 +vn 0.525233 -0.850133 0.037484 +v 129.481964 218.193497 113.688004 0.749020 0.749020 0.749020 +vn 0.873925 -0.478520 0.085282 +v 129.946747 218.769760 114.837204 0.749020 0.749020 0.749020 +vn 0.879593 -0.475122 0.024002 +v 129.953171 218.704178 113.668800 0.749020 0.749020 0.749020 +vn 0.665525 0.408507 0.624659 +v 129.533463 223.917160 125.652802 0.749020 0.749020 0.749020 +vn 0.587814 0.409034 0.697973 +v 129.413727 223.917160 125.755798 0.749020 0.749020 0.749020 +vn 0.783587 0.572843 0.240504 +v 129.878494 223.917160 124.967400 0.749020 0.749020 0.749020 +vn 0.780364 0.490775 0.387521 +v 129.816711 223.917160 125.175201 0.749020 0.749020 0.749020 +vn 0.413693 0.336027 0.846135 +v 129.179398 223.917160 125.958397 0.749020 0.749020 0.749020 +vn 0.392286 -0.631539 -0.668783 +v 130.035583 215.793518 15.199996 0.749020 0.749020 0.749020 +vn 0.206974 -0.714327 -0.668505 +v 129.725296 215.655380 15.199996 0.749020 0.749020 0.749020 +vn -0.749441 0.658736 0.066375 +v -130.069046 223.917160 123.872597 0.749020 0.749020 0.749020 +vn -0.991794 -0.114456 0.056967 +v -130.088364 221.097168 120.467400 0.749020 0.749020 0.749020 +vn -0.991550 -0.126993 0.026486 +v -130.120560 219.461838 114.714798 0.749020 0.749020 0.749020 +vn -0.793714 0.558733 0.240491 +v -129.978928 223.917160 124.673798 0.749020 0.749020 0.749020 +vn -0.881932 -0.419880 0.214236 +v -129.913269 220.541840 121.067398 0.749020 0.749020 0.749020 +vn -0.992431 -0.122381 0.010204 +v -130.125702 219.400467 113.636200 0.749020 0.749020 0.749020 +vn -0.873962 -0.478489 0.085077 +v -129.946747 218.769760 114.837204 0.749020 0.749020 0.749020 +vn -0.879536 -0.475220 0.024147 +v -129.953171 218.704178 113.668800 0.749020 0.749020 0.749020 +vn -0.520263 -0.841666 0.144654 +v -129.475525 218.263260 114.922195 0.749020 0.749020 0.749020 +vn -0.525377 -0.850052 0.037302 +v -129.481964 218.193497 113.688004 0.749020 0.749020 0.749020 +vn -0.540978 -0.737047 0.405098 +v -129.442047 220.135788 121.502998 0.749020 0.749020 0.749020 +vn -0.744458 0.452776 0.490689 +v -129.716278 223.917160 125.380196 0.749020 0.749020 0.749020 +vn -0.774052 0.563892 0.287871 +v -129.873352 223.917160 124.958000 0.749020 0.749020 0.749020 +vn -0.690487 0.461347 0.557124 +v -129.412430 223.917160 125.758202 0.749020 0.749020 0.749020 +vn -0.535741 0.359825 0.763877 +v -129.339050 223.917160 125.848999 0.749020 0.749020 0.749020 +vn -0.317177 0.586780 0.745043 +v -1.949426 168.818207 18.567398 1.000000 1.000000 1.000000 +vn -0.481548 0.703595 0.522557 +v -2.745052 168.705185 18.162399 1.000000 1.000000 1.000000 +vn -0.515217 0.361340 0.777164 +v -3.835522 167.520538 18.371597 1.000000 1.000000 1.000000 +vn -0.193702 0.239788 0.951305 +v -1.870144 168.592148 18.707798 1.000000 1.000000 1.000000 +vn -0.132051 0.611438 0.780197 +v -0.458452 169.186569 18.709599 1.000000 1.000000 1.000000 +vn -0.306161 0.284964 0.908329 +v -3.128578 167.852631 18.575798 1.000000 1.000000 1.000000 +vn -0.250685 0.831658 0.495482 +v -1.277980 169.306564 18.299000 1.000000 1.000000 1.000000 +vn -0.371458 0.803421 0.465332 +v -2.033358 169.058197 18.229597 1.000000 1.000000 1.000000 +vn -0.550038 0.650807 0.523362 +v -3.401654 168.254486 18.097397 1.000000 1.000000 1.000000 +vn -0.679893 0.576501 0.453202 +v -4.000666 167.704727 18.033798 1.000000 1.000000 1.000000 +vn -0.652215 0.228506 0.722773 +v -4.930602 165.889404 18.222397 1.000000 1.000000 1.000000 +vn -0.511068 0.845446 0.155019 +v -2.817562 168.848907 17.694199 1.000000 1.000000 1.000000 +vn -0.621257 0.767112 0.159932 +v -3.491532 168.385651 17.629200 1.000000 1.000000 1.000000 +vn -0.725101 0.440044 0.529707 +v -4.751256 166.732178 17.942799 1.000000 1.000000 1.000000 +vn -0.766304 0.611678 0.196540 +v -4.383680 167.509384 17.534599 1.000000 1.000000 1.000000 +vn -0.601353 0.775598 -0.191892 +v -3.483910 168.374481 16.813599 1.000000 1.000000 1.000000 +vn -0.722364 0.691498 -0.004449 +v -4.130548 167.848450 17.155399 1.000000 1.000000 1.000000 +vn -0.838124 0.507294 0.200499 +v -4.876798 166.824265 17.474598 1.000000 1.000000 1.000000 +vn -0.843550 0.530938 -0.080796 +v -4.905496 166.845200 17.064598 1.000000 1.000000 1.000000 +vn -0.830792 0.314286 0.459357 +v -5.142908 166.002426 17.884598 1.000000 1.000000 1.000000 +vn -0.903895 0.400742 0.149600 +v -5.278788 166.074982 17.416397 1.000000 1.000000 1.000000 +vn -0.695815 0.674249 -0.247447 +v -4.097420 167.812164 16.750000 1.000000 1.000000 1.000000 +vn -0.634381 0.277877 -0.721349 +v -5.325858 165.833588 16.327400 1.000000 1.000000 1.000000 +vn -0.486937 0.392306 -0.780377 +v -4.275068 167.403336 16.326797 1.000000 1.000000 1.000000 +vn -0.328254 0.504471 -0.798598 +v -3.104632 168.441467 16.326797 1.000000 1.000000 1.000000 +vn -0.459126 0.866936 -0.193972 +v -2.811420 168.837738 16.878597 1.000000 1.000000 1.000000 +vn -0.177473 0.573042 -0.800079 +v -1.746108 169.060989 16.330997 1.000000 1.000000 1.000000 +vn -0.386429 0.911794 0.138941 +v -2.087058 169.211685 17.761398 1.000000 1.000000 1.000000 +vn -0.234592 0.950266 -0.204843 +v -1.308866 169.453079 17.015198 1.000000 1.000000 1.000000 +vn -0.042781 0.863410 -0.502686 +v -0.478650 169.448898 16.695000 1.000000 1.000000 1.000000 +vn 0.033255 0.419414 -0.907186 +v -0.029486 169.132156 16.326797 1.000000 1.000000 1.000000 +vn -0.075452 0.980416 -0.181910 +v -0.489720 169.592621 17.087997 1.000000 1.000000 1.000000 +vn -0.250643 0.955283 0.156883 +v -1.311724 169.465637 17.830597 1.000000 1.000000 1.000000 +vn 0.116437 0.867663 -0.483325 +v 0.308926 169.462845 16.767998 1.000000 1.000000 1.000000 +vn 0.100318 0.976827 -0.189067 +v 0.316086 169.606567 17.161198 1.000000 1.000000 1.000000 +vn 0.042064 0.986439 0.158650 +v 0.316784 169.620514 17.976597 1.000000 1.000000 1.000000 +vn -0.105670 0.981706 0.158390 +v -0.490790 169.606567 17.903599 1.000000 1.000000 1.000000 +vn -0.123464 0.874056 0.469875 +v -0.478168 169.441910 18.371799 1.000000 1.000000 1.000000 +vn 0.015800 0.845241 0.534152 +v 0.308612 169.455872 18.445000 1.000000 1.000000 1.000000 +vn 0.188353 0.971973 0.140681 +v 1.105114 169.515869 18.050598 1.000000 1.000000 1.000000 +vn 0.107402 0.839901 0.532006 +v 1.076648 169.354019 18.518997 1.000000 1.000000 1.000000 +vn 0.331975 0.924163 -0.188983 +v 1.876916 169.280060 17.312000 1.000000 1.000000 1.000000 +vn 0.327167 0.931847 0.156917 +v 1.881022 169.292618 18.127399 1.000000 1.000000 1.000000 +vn 0.133052 0.610384 0.780851 +v 1.756896 168.893555 18.933399 1.000000 1.000000 1.000000 +vn 0.262205 0.843801 0.468240 +v 1.832574 169.137741 18.595798 1.000000 1.000000 1.000000 +vn -0.048745 0.407678 0.911824 +v 0.283790 168.957733 18.923199 1.000000 1.000000 1.000000 +vn 0.128764 0.397690 0.908440 +v 2.370858 168.353561 19.154999 1.000000 1.000000 1.000000 +vn 0.194000 0.283968 0.939003 +v 4.064848 166.891251 19.404400 1.000000 1.000000 1.000000 +vn 0.373988 0.511537 0.773604 +v 3.720394 167.636353 19.179199 1.000000 1.000000 1.000000 +vn -0.257852 -0.062115 0.964186 +v 3.880918 166.726593 19.407997 1.000000 1.000000 1.000000 +vn -0.207463 -0.146310 0.967240 +v 2.263558 168.121933 19.158798 1.000000 1.000000 1.000000 +vn 0.451769 0.719611 0.527318 +v 3.260366 168.360535 18.758198 1.000000 1.000000 1.000000 +vn 0.536646 0.395121 0.745581 +v 4.673594 166.386139 19.349998 1.000000 1.000000 1.000000 +vn 0.665670 0.568889 0.482958 +v 4.419754 167.209381 18.925999 1.000000 1.000000 1.000000 +vn 0.592077 0.662217 0.459254 +v 3.880636 167.826126 18.841400 1.000000 1.000000 1.000000 +vn 0.237716 0.217631 0.946640 +v 4.822388 165.561493 19.579597 1.000000 1.000000 1.000000 +vn 0.609308 0.280344 0.741722 +v 5.167368 165.282425 19.483797 1.000000 1.000000 1.000000 +vn 0.294572 0.132647 0.946379 +v 5.261394 163.652679 19.811199 1.000000 1.000000 1.000000 +vn -0.253228 0.103357 0.961869 +v 5.023300 163.634537 19.814999 1.000000 1.000000 1.000000 +vn -0.275747 0.019058 0.961041 +v 4.604174 165.456848 19.583397 1.000000 1.000000 1.000000 +vn 0.676737 0.127106 0.725169 +v 5.484528 163.669418 19.670597 1.000000 1.000000 1.000000 +vn 0.852887 0.218907 0.473987 +v 5.611048 164.534531 19.238998 1.000000 1.000000 1.000000 +vn -0.214046 0.172974 0.961387 +v 4.930486 162.142929 20.007797 1.000000 1.000000 1.000000 +vn -0.698655 0.040713 0.714299 +v 4.777442 163.615005 19.660397 1.000000 1.000000 1.000000 +vn -0.658679 0.228392 0.716923 +v 4.689160 162.197342 19.853201 1.000000 1.000000 1.000000 +vn -0.141620 0.231524 0.962466 +v 4.457826 160.709915 20.211998 1.000000 1.000000 1.000000 +vn 0.323453 0.058858 0.944412 +v 5.164164 162.089905 20.003998 1.000000 1.000000 1.000000 +vn -0.909714 0.125339 0.395868 +v 4.542980 162.922913 19.407799 1.000000 1.000000 1.000000 +vn -0.914010 -0.018316 0.405277 +v 4.542156 163.596863 19.312798 1.000000 1.000000 1.000000 +vn -0.887700 0.221701 0.403531 +v 4.458224 162.248978 19.505600 1.000000 1.000000 1.000000 +vn -0.567676 0.403002 0.717867 +v 4.239636 160.834106 20.057400 1.000000 1.000000 1.000000 +vn -0.844463 0.355960 0.400219 +v 4.284582 161.577805 19.607597 1.000000 1.000000 1.000000 +vn -0.041728 0.196538 0.979608 +v 3.137128 158.979706 20.529198 1.000000 1.000000 1.000000 +vn 0.332181 -0.021430 0.942972 +v 4.669102 160.589920 20.208199 1.000000 1.000000 1.000000 +vn -0.572654 0.569500 0.589692 +v 3.473624 159.675980 20.266197 1.000000 1.000000 1.000000 +vn -0.718940 0.561436 0.409775 +v 3.702912 160.377838 19.812798 1.000000 1.000000 1.000000 +vn -0.774477 0.457569 0.436825 +v 4.030832 160.952698 19.709797 1.000000 1.000000 1.000000 +vn -0.180530 0.632799 0.752977 +v 2.228346 158.653198 20.524799 1.000000 1.000000 1.000000 +vn -0.527741 0.742417 0.412682 +v 2.836630 159.388535 20.026997 1.000000 1.000000 1.000000 +vn -0.576211 0.636796 0.512319 +v 3.302544 159.851776 19.918598 1.000000 1.000000 1.000000 +vn -0.897119 0.434727 0.078680 +v 3.874262 161.042007 18.885399 1.000000 1.000000 1.000000 +vn -0.952431 0.304687 -0.006353 +v 4.118150 161.643402 18.783199 1.000000 1.000000 1.000000 +vn -0.344814 0.813093 0.469024 +v 2.118588 158.879242 20.177200 1.000000 1.000000 1.000000 +vn -0.547195 0.801518 0.241137 +v 2.755016 159.498764 19.633198 1.000000 1.000000 1.000000 +vn -0.784392 0.619209 -0.036182 +v 3.174258 159.984344 19.094398 1.000000 1.000000 1.000000 +vn -0.454697 0.872550 0.178628 +v 2.057640 159.004822 19.783398 1.000000 1.000000 1.000000 +vn -0.095418 0.878101 0.468865 +v 0.930262 158.417374 20.403999 1.000000 1.000000 1.000000 +vn -0.017281 0.662290 0.749049 +v 0.978472 158.166214 20.751598 1.000000 1.000000 1.000000 +vn -0.651527 0.758624 -0.001641 +v 2.726434 159.537842 19.202599 1.000000 1.000000 1.000000 +vn -0.333700 0.942193 0.030276 +v 1.482006 158.784348 19.465199 1.000000 1.000000 1.000000 +vn -0.504657 0.841482 -0.192948 +v 2.060136 159.000626 18.897999 1.000000 1.000000 1.000000 +vn 0.123251 0.881452 0.455908 +v -0.291722 158.323898 20.625198 1.000000 1.000000 1.000000 +vn 0.168921 0.648260 0.742446 +v -0.306798 158.068542 20.972797 1.000000 1.000000 1.000000 +vn 0.105997 0.253898 0.961405 +v 1.028852 157.905304 20.906197 1.000000 1.000000 1.000000 +vn 0.175164 0.217975 0.960106 +v -0.322564 157.802048 21.127399 1.000000 1.000000 1.000000 +vn 0.279419 0.861366 0.424232 +v -0.926454 158.417374 20.740597 1.000000 1.000000 1.000000 +vn 0.361103 0.578066 0.731741 +v -1.629050 158.367157 21.204597 1.000000 1.000000 1.000000 +vn 0.231976 0.163609 0.958863 +v -1.712852 158.115997 21.359200 1.000000 1.000000 1.000000 +vn -0.123491 0.992334 0.004830 +v 0.340036 158.519241 19.684599 1.000000 1.000000 1.000000 +vn 0.092286 0.995607 0.015821 +v -0.280416 158.515060 19.800800 1.000000 1.000000 1.000000 +vn 0.391255 0.817163 0.423277 +v -1.548866 158.607147 20.856998 1.000000 1.000000 1.000000 +vn -0.255271 0.935065 -0.245949 +v 0.904586 158.549942 19.124798 1.000000 1.000000 1.000000 +vn 0.039166 0.971820 -0.232447 +v -0.283696 158.459244 19.345997 1.000000 1.000000 1.000000 +vn 0.344229 0.937542 0.050208 +v -1.488728 158.787140 20.032597 1.000000 1.000000 1.000000 +vn 0.527719 0.741742 0.413922 +v -2.138494 158.890411 20.973198 1.000000 1.000000 1.000000 +vn 0.650761 0.613409 0.447480 +v -2.680330 159.258774 21.088398 1.000000 1.000000 1.000000 +vn 0.511005 0.858908 0.033932 +v -2.055464 159.060638 20.148800 1.000000 1.000000 1.000000 +vn 0.305821 0.923563 -0.231313 +v -1.506160 158.735519 19.577797 1.000000 1.000000 1.000000 +vn 0.533863 0.430592 0.727723 +v -2.819120 159.052261 21.435999 1.000000 1.000000 1.000000 +vn 0.764870 0.564480 0.310381 +v -3.550808 160.157364 21.305199 1.000000 1.000000 1.000000 +vn 0.664160 0.231693 0.710782 +v -4.120144 160.599686 21.768799 1.000000 1.000000 1.000000 +vn 0.283875 -0.016840 0.958713 +v -4.332130 160.464340 21.923397 1.000000 1.000000 1.000000 +vn 0.274203 0.088989 0.957546 +v -2.964154 158.835983 21.590599 1.000000 1.000000 1.000000 +vn 0.828829 0.383818 0.407096 +v -3.917290 160.730850 21.421200 1.000000 1.000000 1.000000 +vn 0.904822 0.248492 0.345758 +v -4.203650 161.350372 21.536400 1.000000 1.000000 1.000000 +vn 0.680222 0.731875 -0.040706 +v -2.989300 159.783417 20.364397 1.000000 1.000000 1.000000 +vn 0.887260 0.459898 0.035550 +v -3.765174 160.828522 20.596798 1.000000 1.000000 1.000000 +vn 0.926600 0.195071 0.321496 +v -4.409300 162.013168 21.652599 1.000000 1.000000 1.000000 +vn 0.964196 0.261356 0.044927 +v -4.238090 162.060593 20.828197 1.000000 1.000000 1.000000 +vn 0.880803 0.424414 -0.209900 +v -3.809270 160.800613 20.141998 1.000000 1.000000 1.000000 +vn 0.680619 0.610710 -0.404712 +v -3.561288 160.149002 19.628799 1.000000 1.000000 1.000000 +vn 0.558493 0.794785 -0.237491 +v -2.606416 159.369003 19.809200 1.000000 1.000000 1.000000 +vn 0.472238 0.743187 -0.473988 +v -2.688234 159.247604 19.411797 1.000000 1.000000 1.000000 +vn 0.203788 0.803051 -0.559981 +v -1.553436 158.593185 19.180399 1.000000 1.000000 1.000000 +vn -0.024675 0.374040 -0.927084 +v -1.708834 158.127151 18.709797 1.000000 1.000000 1.000000 +vn 0.448197 0.572690 -0.686401 +v -3.281802 159.444351 19.177399 1.000000 1.000000 1.000000 +vn -0.027597 0.880999 -0.472312 +v -0.292586 158.308548 18.948595 1.000000 1.000000 1.000000 +vn -0.222662 0.602170 -0.766690 +v 0.373374 158.056000 18.497597 1.000000 1.000000 1.000000 +vn -0.298727 0.850798 -0.432326 +v 0.933012 158.403442 18.727398 1.000000 1.000000 1.000000 +vn -0.488484 0.725988 -0.484072 +v 2.124846 158.866684 18.500599 1.000000 1.000000 1.000000 +vn -0.387262 0.419062 -0.821228 +v 2.235634 158.637848 18.165798 1.000000 1.000000 1.000000 +vn -0.612955 0.746919 -0.257678 +v 2.758376 159.494583 18.747799 1.000000 1.000000 1.000000 +vn -0.634339 0.648626 -0.420592 +v 2.845010 159.377380 18.350401 1.000000 1.000000 1.000000 +vn -0.715324 0.493296 -0.494945 +v 3.484980 159.664810 17.907200 1.000000 1.000000 1.000000 +vn -0.831960 0.507839 -0.223478 +v 3.600750 160.455978 18.533798 1.000000 1.000000 1.000000 +vn -0.685001 0.497325 -0.532393 +v 3.312302 159.842026 18.241997 1.000000 1.000000 1.000000 +vn -0.984478 0.169180 0.046709 +v 4.285058 162.288040 18.681400 1.000000 1.000000 1.000000 +vn -0.967373 0.135091 -0.214334 +v 4.335244 162.276886 18.226597 1.000000 1.000000 1.000000 +vn -0.806286 0.345209 -0.480347 +v 4.042742 160.945724 18.033199 1.000000 1.000000 1.000000 +vn -0.842273 0.012762 -0.538899 +v 4.471396 162.246185 17.828999 1.000000 1.000000 1.000000 +vn -0.968676 -0.075383 -0.236611 +v 4.416858 163.587097 18.033600 1.000000 1.000000 1.000000 +vn -0.996617 -0.061199 0.054856 +v 4.365732 163.582916 18.488400 1.000000 1.000000 1.000000 +vn -0.882851 -0.091202 -0.460713 +v 4.555584 163.598267 17.636200 1.000000 1.000000 1.000000 +vn -0.553718 -0.617100 -0.559092 +v 4.704506 162.193161 17.494198 1.000000 1.000000 1.000000 +vn -0.670334 -0.135479 -0.729588 +v 4.793072 163.616409 17.301399 1.000000 1.000000 1.000000 +vn -0.672583 0.366675 -0.642792 +v 3.907454 160.218750 17.801598 1.000000 1.000000 1.000000 +vn 0.064210 -0.185756 -0.980496 +v 5.147336 162.094086 17.353397 1.000000 1.000000 1.000000 +vn -0.293523 0.009908 -0.955901 +v 4.447346 160.715500 17.562599 1.000000 1.000000 1.000000 +vn 0.188918 -0.240646 -0.952050 +v 4.653896 160.598297 17.557400 1.000000 1.000000 1.000000 +vn -0.022482 -0.252477 -0.967342 +v 2.446110 158.203888 18.024799 1.000000 1.000000 1.000000 +vn 0.093668 -0.286432 -0.953511 +v 3.275120 158.791336 17.874599 1.000000 1.000000 1.000000 +vn -0.102140 -0.227132 -0.968493 +v 1.074124 157.670883 18.251598 1.000000 1.000000 1.000000 +vn 0.749113 0.466257 -0.470568 +v -3.928852 160.723862 19.744598 1.000000 1.000000 1.000000 +vn 0.529094 0.419344 -0.737706 +v -4.133626 160.591324 19.409798 1.000000 1.000000 1.000000 +vn 0.722739 0.277869 -0.632802 +v -4.422330 162.008972 19.975998 1.000000 1.000000 1.000000 +vn 0.706158 0.300263 -0.641236 +v -4.652814 161.944778 19.641197 1.000000 1.000000 1.000000 +vn 0.917922 0.128133 -0.375500 +v -4.539722 162.695480 20.091599 1.000000 1.000000 1.000000 +vn 0.195102 0.162752 -0.967185 +v -4.993932 162.639664 19.620998 1.000000 1.000000 1.000000 +vn 0.143683 0.253390 -0.956634 +v -4.321944 160.469925 19.273998 1.000000 1.000000 1.000000 +vn 0.279207 0.073643 -0.957403 +v -4.783160 164.918243 19.967999 1.000000 1.000000 1.000000 +vn 0.773657 0.012960 -0.633473 +v -4.736758 164.127090 19.987400 1.000000 1.000000 1.000000 +vn -0.021392 0.245635 -0.969126 +v -2.957190 158.847153 18.941200 1.000000 1.000000 1.000000 +vn -0.326958 -0.000835 -0.945039 +v -4.522624 160.341553 19.268997 1.000000 1.000000 1.000000 +vn -0.298863 -0.129521 -0.945466 +v -3.094474 158.642029 18.935999 1.000000 1.000000 1.000000 +vn -0.548263 -0.311556 -0.776106 +v -4.291560 159.512726 19.303999 1.000000 1.000000 1.000000 +vn -0.509861 -0.452172 -0.731835 +v -3.239456 158.425766 19.086998 1.000000 1.000000 1.000000 +vn -0.297504 0.122331 -0.946851 +v -5.225808 162.611755 19.615799 1.000000 1.000000 1.000000 +vn -0.652401 -0.220895 -0.724968 +v -4.734518 160.204819 19.419998 1.000000 1.000000 1.000000 +vn -0.689764 0.046529 -0.722537 +v -5.470662 162.582458 19.766800 1.000000 1.000000 1.000000 +vn -0.218661 0.213430 -0.952174 +v -5.005250 164.996384 19.962997 1.000000 1.000000 1.000000 +vn -0.626314 -0.064027 -0.776937 +v -5.329180 161.755020 19.651199 1.000000 1.000000 1.000000 +vn -0.600826 0.179131 -0.779051 +v -5.425342 164.255463 19.997597 1.000000 1.000000 1.000000 +vn -0.153348 0.269514 -0.950708 +v -4.357660 166.437759 20.194395 1.000000 1.000000 1.000000 +vn -0.620021 0.300498 -0.724758 +v -5.239752 165.077316 20.113998 1.000000 1.000000 1.000000 +vn -0.875872 0.085277 -0.474949 +v -5.739280 163.428024 20.226801 1.000000 1.000000 1.000000 +vn -0.895097 -0.035006 -0.444496 +v -5.706282 162.553162 20.111397 1.000000 1.000000 1.000000 +vn -0.872759 0.197656 -0.446345 +v -5.659032 164.298721 20.341999 1.000000 1.000000 1.000000 +vn -0.838260 0.310134 -0.448484 +v -5.465446 165.156845 20.458599 1.000000 1.000000 1.000000 +vn -0.771242 0.415981 -0.481815 +v -5.162078 165.974503 20.574799 1.000000 1.000000 1.000000 +vn -0.504606 0.455666 -0.733308 +v -4.561816 166.587067 20.345398 1.000000 1.000000 1.000000 +vn -0.884439 0.434708 -0.169696 +v -5.281570 166.037308 20.967800 1.000000 1.000000 1.000000 +vn -0.726812 0.541864 -0.422052 +v -4.758310 166.730774 20.689800 1.000000 1.000000 1.000000 +vn -0.938002 0.301675 -0.170720 +v -5.591968 165.201492 20.851597 1.000000 1.000000 1.000000 +vn -0.363330 0.501937 -0.784889 +v -3.588094 167.773102 20.564198 1.000000 1.000000 1.000000 +vn -0.017462 0.306129 -0.951830 +v -2.831146 168.050766 20.528999 1.000000 1.000000 1.000000 +vn -0.564855 0.678829 -0.469181 +v -3.742616 167.968445 20.908600 1.000000 1.000000 1.000000 +vn -0.267375 0.612258 -0.744077 +v -2.963782 168.275421 20.680000 1.000000 1.000000 1.000000 +vn 0.120483 0.285844 -0.950672 +v -0.766560 168.886581 20.875000 1.000000 1.000000 1.000000 +vn 0.254974 -0.079436 -0.963679 +v -2.705538 167.837280 20.533997 1.000000 1.000000 1.000000 +vn 0.291393 -0.007035 -0.956577 +v -4.164292 166.295441 20.199398 1.000000 1.000000 1.000000 +vn 0.620139 -0.396088 -0.677157 +v -3.617384 166.677765 20.437399 1.000000 1.000000 1.000000 +vn 0.676571 -0.178134 -0.714507 +v -4.320812 165.530792 20.220200 1.000000 1.000000 1.000000 +vn 0.197498 -0.218224 -0.955705 +v -0.732564 168.636810 20.880199 1.000000 1.000000 1.000000 +vn -0.096558 0.599682 -0.794391 +v -1.554080 168.971695 20.911400 1.000000 1.000000 1.000000 +vn 0.026722 0.663957 -0.747293 +v -0.802452 169.151688 21.025997 1.000000 1.000000 1.000000 +vn -0.321027 0.805724 -0.497746 +v -2.382972 168.908905 21.139797 1.000000 1.000000 1.000000 +vn -0.205242 0.857579 -0.471630 +v -1.621002 169.217270 21.255798 1.000000 1.000000 1.000000 +vn 0.065670 0.863306 -0.500390 +v -0.031842 169.471222 21.486000 1.000000 1.000000 1.000000 +vn 0.179059 0.580962 -0.793990 +v 0.741950 169.158676 21.256798 1.000000 1.000000 1.000000 +vn -0.073179 0.878830 -0.471490 +v -0.836988 169.405640 21.370598 1.000000 1.000000 1.000000 +vn -0.276039 0.943783 -0.181868 +v -1.658520 169.356796 21.648998 1.000000 1.000000 1.000000 +vn -0.412511 0.892959 -0.180162 +v -2.438128 169.040070 21.532799 1.000000 1.000000 1.000000 +vn -0.129360 0.974846 -0.181496 +v -0.856360 169.547958 21.763599 1.000000 1.000000 1.000000 +vn 0.020016 0.983211 -0.181374 +v -0.032570 169.614944 21.878998 1.000000 1.000000 1.000000 +vn 0.194676 0.860388 -0.470992 +v 0.773934 169.414017 21.601200 1.000000 1.000000 1.000000 +vn -0.026944 0.986979 0.158576 +v -0.032638 169.628891 22.694599 1.000000 1.000000 1.000000 +vn -0.176409 0.971519 0.158211 +v -0.858226 169.561905 22.579197 1.000000 1.000000 1.000000 +vn 0.168278 0.968967 -0.181067 +v 0.791870 169.556335 21.994400 1.000000 1.000000 1.000000 +vn 0.122572 0.979701 0.158624 +v 0.793598 169.570297 22.809799 1.000000 1.000000 1.000000 +vn 0.321379 0.822728 -0.468866 +v 1.572066 169.232620 21.717800 1.000000 1.000000 1.000000 +vn 0.310861 0.597804 -0.738915 +v 1.507112 168.985641 21.373199 1.000000 1.000000 1.000000 +vn 0.225323 0.212583 -0.950809 +v 1.439636 168.728897 21.222198 1.000000 1.000000 1.000000 +vn 0.438353 0.750665 -0.494317 +v 2.336560 168.932617 21.834000 1.000000 1.000000 1.000000 +vn 0.475996 0.484625 -0.733871 +v 2.921796 168.303314 21.604597 1.000000 1.000000 1.000000 +vn 0.289271 0.149450 -0.945509 +v 2.790988 168.077286 21.453598 1.000000 1.000000 1.000000 +vn 0.312523 0.932545 -0.180802 +v 1.608476 169.372162 22.110798 1.000000 1.000000 1.000000 +vn 0.409402 0.898857 0.156349 +v 2.395900 169.076340 23.042599 1.000000 1.000000 1.000000 +vn 0.459913 0.870337 -0.176053 +v 2.390660 169.063782 22.226997 1.000000 1.000000 1.000000 +vn 0.269523 0.949942 0.158009 +v 1.611990 169.384705 22.926399 1.000000 1.000000 1.000000 +vn 0.569034 0.702157 -0.427991 +v 3.047686 168.520996 21.948997 1.000000 1.000000 1.000000 +vn 0.658624 0.721552 -0.213490 +v 3.713288 168.180527 22.444395 1.000000 1.000000 1.000000 +vn 0.530331 0.830666 0.169536 +v 3.125076 168.654953 23.157799 1.000000 1.000000 1.000000 +vn 0.337964 0.813823 0.472729 +v 2.334190 168.927048 23.510799 1.000000 1.000000 1.000000 +vn 0.188174 0.846550 0.497939 +v 1.570470 169.227036 23.394600 1.000000 1.000000 1.000000 +vn 0.063572 0.880714 0.469362 +v 0.773158 169.407028 23.278198 1.000000 1.000000 1.000000 +vn 0.193096 0.625539 0.755920 +v 2.237810 168.692627 23.848598 1.000000 1.000000 1.000000 +vn -0.032566 0.624453 0.780383 +v 0.741214 169.153076 23.615999 1.000000 1.000000 1.000000 +vn 0.521430 0.713723 0.467665 +v 3.625572 168.064728 23.728201 1.000000 1.000000 1.000000 +vn 0.641356 0.751690 0.153704 +v 3.721400 168.191696 23.259998 1.000000 1.000000 1.000000 +vn 0.739240 0.655931 0.152576 +v 4.331008 167.570786 23.376400 1.000000 1.000000 1.000000 +vn 0.342486 0.540841 0.768241 +v 3.475864 167.865189 24.065998 1.000000 1.000000 1.000000 +vn 0.611862 0.589490 0.527377 +v 4.219500 167.459152 23.844801 1.000000 1.000000 1.000000 +vn 0.764337 0.620914 -0.173942 +v 4.321558 167.561005 22.560999 1.000000 1.000000 1.000000 +vn 0.823534 0.546839 0.150860 +v 4.849554 166.864731 23.492397 1.000000 1.000000 1.000000 +vn 0.670770 0.527285 0.521573 +v 4.724682 166.772644 23.960598 1.000000 1.000000 1.000000 +vn 0.890029 0.430579 0.149833 +v 5.268514 166.093109 23.607599 1.000000 1.000000 1.000000 +vn 0.843245 0.509156 -0.172330 +v 4.838958 166.857758 22.676800 1.000000 1.000000 1.000000 +vn 0.704532 0.538090 -0.462703 +v 4.223762 167.463333 22.167797 1.000000 1.000000 1.000000 +vn 0.784001 0.426686 -0.450867 +v 4.729458 166.775436 22.283798 1.000000 1.000000 1.000000 +vn 0.636152 0.261593 -0.725865 +v 4.534122 166.630325 21.939198 1.000000 1.000000 1.000000 +vn 0.525460 0.346096 -0.777245 +v 4.049294 167.288910 21.823399 1.000000 1.000000 1.000000 +vn 0.822739 0.308396 -0.477485 +v 5.138040 166.021957 22.398998 1.000000 1.000000 1.000000 +vn 0.904283 0.391188 -0.171010 +v 5.257016 166.086136 22.792000 1.000000 1.000000 1.000000 +vn 0.870847 0.206334 -0.446152 +v 5.448516 165.208481 22.515198 1.000000 1.000000 1.000000 +vn 0.948107 0.268901 -0.169661 +v 5.574664 165.253128 22.908199 1.000000 1.000000 1.000000 +vn 0.891056 0.091272 -0.444622 +v 5.647986 164.365692 22.629799 1.000000 1.000000 1.000000 +vn 0.975303 0.142102 -0.169087 +v 5.778756 164.390808 23.022999 1.000000 1.000000 1.000000 +vn 0.971984 0.182910 0.147619 +v 5.791398 164.393600 23.838398 1.000000 1.000000 1.000000 +vn 0.939331 0.309150 0.148605 +v 5.586856 165.257309 23.723799 1.000000 1.000000 1.000000 +vn 0.879673 -0.029907 -0.474637 +v 5.735946 163.494995 22.745197 1.000000 1.000000 1.000000 +vn 0.985509 0.013830 -0.169060 +v 5.868762 163.500595 23.138199 1.000000 1.000000 1.000000 +vn 0.987595 0.054471 0.147272 +v 5.881598 163.501984 23.953798 1.000000 1.000000 1.000000 +vn 0.876012 0.092834 0.473270 +v 5.730152 163.494995 24.421997 1.000000 1.000000 1.000000 +vn 0.872122 0.205456 0.444062 +v 5.642282 164.364288 24.306799 1.000000 1.000000 1.000000 +vn 0.654855 0.210456 0.725860 +v 5.409312 164.318253 24.644398 1.000000 1.000000 1.000000 +vn 0.819816 0.317137 0.476787 +v 5.443006 165.205688 24.191998 1.000000 1.000000 1.000000 +vn 0.533075 0.357750 0.766711 +v 4.920920 165.904755 24.413601 1.000000 1.000000 1.000000 +vn 0.785357 0.425796 0.449345 +v 5.132864 166.019165 24.075798 1.000000 1.000000 1.000000 +vn 0.271789 0.357472 0.893502 +v 4.345300 166.489395 24.438999 1.000000 1.000000 1.000000 +vn 0.059235 0.339575 0.938712 +v 2.800104 168.092636 24.104198 1.000000 1.000000 1.000000 +vn -0.045572 0.352322 0.934769 +v 1.444334 168.747040 23.872999 1.000000 1.000000 1.000000 +vn -0.189850 0.263695 0.945739 +v -0.769066 168.904724 23.525799 1.000000 1.000000 1.000000 +vn -0.074309 0.863614 0.498647 +v -0.031814 169.464233 23.162800 1.000000 1.000000 1.000000 +vn -0.210833 0.631946 0.745784 +v -0.801648 169.144714 23.385197 1.000000 1.000000 1.000000 +vn -0.369781 0.514741 0.773501 +v -2.282292 168.670288 23.154400 1.000000 1.000000 1.000000 +vn -0.309889 0.198997 0.929715 +v -2.840390 168.066116 23.179798 1.000000 1.000000 1.000000 +vn -0.203177 0.859721 0.468615 +v -0.836144 169.398666 23.047600 1.000000 1.000000 1.000000 +vn -0.329817 0.803963 0.494837 +v -1.619368 169.211685 22.932800 1.000000 1.000000 1.000000 +vn -0.448391 0.765049 0.462218 +v -2.380566 168.903320 22.816595 1.000000 1.000000 1.000000 +vn -0.549760 0.677698 0.488353 +v -3.088306 168.487503 22.701397 1.000000 1.000000 1.000000 +vn -0.514861 0.388822 0.764026 +v -3.584502 167.768906 22.923397 1.000000 1.000000 1.000000 +vn -0.572469 0.318311 0.755617 +v -4.139084 167.171707 22.806799 1.000000 1.000000 1.000000 +vn -0.650823 0.607417 0.455493 +v -3.738844 167.964264 22.585598 1.000000 1.000000 1.000000 +vn -0.455514 0.876513 0.155669 +v -2.443446 169.052612 22.348400 1.000000 1.000000 1.000000 +vn -0.578130 0.801270 0.154055 +v -3.169906 168.625641 22.233200 1.000000 1.000000 1.000000 +vn -0.321444 0.933771 0.157304 +v -1.662138 169.369370 22.464600 1.000000 1.000000 1.000000 +vn -0.539066 0.823187 -0.178245 +v -3.162980 168.614487 21.417599 1.000000 1.000000 1.000000 +vn -0.687960 0.709645 0.152035 +v -3.837634 168.088440 22.117199 1.000000 1.000000 1.000000 +vn -0.653207 0.736318 -0.176510 +v -3.829252 168.077286 21.301800 1.000000 1.000000 1.000000 +vn -0.448797 0.762449 -0.466104 +v -3.091434 168.493088 21.024597 1.000000 1.000000 1.000000 +vn -0.778756 0.608847 0.151143 +v -4.431380 167.449371 22.000797 1.000000 1.000000 1.000000 +vn -0.749574 0.626658 -0.213161 +v -4.421712 167.439621 21.185200 1.000000 1.000000 1.000000 +vn -0.738027 0.496082 0.457405 +v -4.317310 167.340546 22.468998 1.000000 1.000000 1.000000 +vn -0.850359 0.500106 0.163659 +v -4.879090 166.818695 21.898598 1.000000 1.000000 1.000000 +vn -0.909248 0.388798 0.148673 +v -5.293118 166.044281 21.783398 1.000000 1.000000 1.000000 +vn -0.829859 0.325411 0.453257 +v -5.156864 165.971725 22.251598 1.000000 1.000000 1.000000 +vn -0.953257 0.263430 0.148003 +v -5.604198 165.205688 21.667198 1.000000 1.000000 1.000000 +vn -0.859360 0.190168 0.474697 +v -5.459936 165.154053 22.135399 1.000000 1.000000 1.000000 +vn -0.969777 0.175528 -0.169476 +v -5.790034 164.322433 20.735197 1.000000 1.000000 1.000000 +vn -0.979716 0.135989 0.147188 +v -5.802690 164.325226 21.550598 1.000000 1.000000 1.000000 +vn -0.892930 0.082980 0.442483 +v -5.653316 164.297318 22.018997 1.000000 1.000000 1.000000 +vn -0.648702 0.190563 0.736799 +v -4.943978 165.858704 22.589397 1.000000 1.000000 1.000000 +vn -0.984407 0.048408 -0.169113 +v -5.872136 163.432220 20.619797 1.000000 1.000000 1.000000 +vn -0.989076 0.007994 0.147190 +v -5.884986 163.432220 21.435398 1.000000 1.000000 1.000000 +vn 0.272637 0.182316 0.944685 +v 5.189218 164.274994 24.784998 1.000000 1.000000 1.000000 +vn 0.621363 0.103194 -0.776697 +v 5.223478 165.127548 22.170597 1.000000 1.000000 1.000000 +vn 0.305731 -0.103550 -0.946470 +v 5.172312 164.270813 22.134197 1.000000 1.000000 1.000000 +vn 0.325998 0.021026 -0.945137 +v 4.331138 166.478226 21.788200 1.000000 1.000000 1.000000 +vn 0.691472 -0.003085 -0.722397 +v 5.414708 164.318253 22.285198 1.000000 1.000000 1.000000 +vn -0.230087 -0.190547 -0.954333 +v 4.942756 164.226166 22.139397 1.000000 1.000000 1.000000 +vn -0.076939 -0.239289 -0.967895 +v 4.138904 166.335907 21.793400 1.000000 1.000000 1.000000 +vn 0.002214 -0.271473 -0.962444 +v 2.667106 167.862396 21.458599 1.000000 1.000000 1.000000 +vn 0.089522 -0.257918 -0.962011 +v 1.375712 168.486115 21.227200 1.000000 1.000000 1.000000 +vn -0.237586 -0.203635 -0.949782 +v -1.788144 157.889954 18.704800 1.000000 1.000000 1.000000 +vn -0.070805 0.148284 -0.986407 +v -0.321808 157.814590 18.477997 1.000000 1.000000 1.000000 +vn -0.146965 -0.237599 -0.960181 +v -0.336718 157.562042 18.473000 1.000000 1.000000 1.000000 +vn 0.904388 0.009911 0.426595 +v -4.526358 162.696869 21.768200 1.000000 1.000000 1.000000 +vn 0.930899 -0.111678 0.347787 +v -4.552520 163.390350 21.883400 1.000000 1.000000 1.000000 +vn 0.996252 0.085288 0.014399 +v -4.350592 162.717804 20.943798 1.000000 1.000000 1.000000 +vn 0.967414 0.063608 -0.245081 +v -4.401524 162.712219 20.488998 1.000000 1.000000 1.000000 +vn 0.990483 -0.137342 0.008950 +v -4.314554 164.048950 21.174599 1.000000 1.000000 1.000000 +vn 0.905401 -0.042662 -0.422409 +v -4.502114 164.083832 20.322195 1.000000 1.000000 1.000000 +vn 0.875571 -0.201557 -0.439034 +v -4.348120 164.766159 20.438795 1.000000 1.000000 1.000000 +vn 0.706146 -0.041120 0.706871 +v -4.760756 162.668976 22.115799 1.000000 1.000000 1.000000 +vn 0.306107 -0.189601 0.932926 +v 3.285832 158.777374 20.525398 1.000000 1.000000 1.000000 +vn 0.776584 0.611428 0.151898 +v 4.536568 167.314026 18.457798 1.000000 1.000000 1.000000 +vn 0.685149 0.712090 0.153290 +v 3.983208 167.947510 18.373199 1.000000 1.000000 1.000000 +vn 0.859399 0.498291 0.114627 +v 5.003730 166.606598 18.543999 1.000000 1.000000 1.000000 +vn 0.804912 0.568494 -0.170091 +v 4.526654 167.305664 17.642197 1.000000 1.000000 1.000000 +vn 0.705723 0.686392 -0.175560 +v 3.974518 167.936356 17.557598 1.000000 1.000000 1.000000 +vn 0.577897 0.801271 0.154919 +v 3.346536 168.495880 18.289799 1.000000 1.000000 1.000000 +vn 0.601807 0.778778 -0.177009 +v 3.339236 168.484726 17.474400 1.000000 1.000000 1.000000 +vn 0.374319 0.759957 0.531366 +v 2.577872 168.798676 18.676800 1.000000 1.000000 1.000000 +vn 0.458568 0.874898 0.155787 +v 2.646006 168.945175 18.208599 1.000000 1.000000 1.000000 +vn 0.485120 0.856076 -0.178306 +v 2.640224 168.932617 17.392998 1.000000 1.000000 1.000000 +vn 0.658652 0.597297 -0.457618 +v 3.884574 167.830307 17.164600 1.000000 1.000000 1.000000 +vn 0.559756 0.668430 -0.489770 +v 3.263662 168.366119 17.081200 1.000000 1.000000 1.000000 +vn 0.462662 0.755013 -0.464650 +v 2.580486 168.804245 16.999798 1.000000 1.000000 1.000000 +vn 0.323618 0.809821 -0.489348 +v 1.834442 169.143311 16.918800 1.000000 1.000000 1.000000 +vn 0.389400 0.540270 -0.745973 +v 2.473882 168.575424 16.655399 1.000000 1.000000 1.000000 +vn 0.221652 0.661668 -0.716286 +v 1.033202 169.108429 16.497597 1.000000 1.000000 1.000000 +vn 0.237448 0.191796 -0.952278 +v 2.363120 168.336807 16.504398 1.000000 1.000000 1.000000 +vn 0.137683 0.227346 -0.964032 +v 0.986928 168.846115 16.346600 1.000000 1.000000 1.000000 +vn 0.475909 0.394828 -0.785890 +v 3.724116 167.641937 16.820000 1.000000 1.000000 1.000000 +vn 0.290798 0.078990 -0.953518 +v 4.051600 166.880081 16.753597 1.000000 1.000000 1.000000 +vn -0.017231 -0.265940 -0.963836 +v 2.258228 168.110779 16.509399 1.000000 1.000000 1.000000 +vn 0.029533 -0.239926 -0.970342 +v 0.943100 168.597748 16.351597 1.000000 1.000000 1.000000 +vn -0.112412 -0.231354 -0.966353 +v 3.871778 166.718231 16.758598 1.000000 1.000000 1.000000 +vn 0.595388 0.340432 -0.727749 +v 4.241490 167.050323 16.904598 1.000000 1.000000 1.000000 +vn 0.314471 0.002798 -0.949263 +v 4.806682 165.553131 16.928799 1.000000 1.000000 1.000000 +vn 0.664180 0.178088 -0.726051 +v 5.031926 165.661957 17.079800 1.000000 1.000000 1.000000 +vn 0.735616 0.502825 -0.453912 +v 4.424236 167.213562 17.249199 1.000000 1.000000 1.000000 +vn 0.821095 0.404618 -0.402601 +v 4.879810 166.524277 17.335400 1.000000 1.000000 1.000000 +vn 0.272374 -0.091776 -0.957805 +v 5.244244 163.651276 17.160397 1.000000 1.000000 1.000000 +vn 0.636207 0.060210 -0.769166 +v 5.384734 164.482895 17.217598 1.000000 1.000000 1.000000 +vn -0.243491 -0.115623 -0.962987 +v 5.011494 163.633148 17.165600 1.000000 1.000000 1.000000 +vn -0.720414 -0.355654 -0.595410 +v 4.515892 165.025681 17.114597 1.000000 1.000000 1.000000 +vn 0.690837 -0.049798 -0.721294 +v 5.490012 163.669418 17.311398 1.000000 1.000000 1.000000 +vn 0.853650 0.306710 -0.420964 +v 5.248712 165.765213 17.424400 1.000000 1.000000 1.000000 +vn 0.883268 0.132347 -0.449801 +v 5.616726 164.535919 17.562199 1.000000 1.000000 1.000000 +vn 0.921649 0.317475 -0.223097 +v 5.520294 165.420563 17.862198 1.000000 1.000000 1.000000 +vn 0.895545 0.009540 -0.444869 +v 5.726534 163.687561 17.655998 1.000000 1.000000 1.000000 +vn 0.942191 0.334799 -0.013652 +v 5.564944 165.438705 18.267799 1.000000 1.000000 1.000000 +vn 0.970781 0.162447 -0.176624 +v 5.746762 164.566620 17.955200 1.000000 1.000000 1.000000 +vn 0.966907 0.203291 0.154151 +v 5.759340 164.569412 18.770798 1.000000 1.000000 1.000000 +vn 0.897890 0.402658 0.177930 +v 5.382006 165.829407 18.632999 1.000000 1.000000 1.000000 +vn 0.753683 0.474852 0.454397 +v 4.874880 166.521484 19.012398 1.000000 1.000000 1.000000 +vn 0.834132 0.335484 0.437806 +v 5.389924 165.368942 19.146000 1.000000 1.000000 1.000000 +vn 0.985870 0.080011 0.147170 +v 5.871930 163.698730 18.864597 1.000000 1.000000 1.000000 +vn 0.890102 0.106536 0.443134 +v 5.720742 163.687561 19.333000 1.000000 1.000000 1.000000 +vn 0.985748 0.028183 -0.165854 +v 5.859120 163.698730 18.049198 1.000000 1.000000 1.000000 +vn -0.952898 0.297756 -0.057686 +v -5.615360 165.289398 16.950199 1.000000 1.000000 1.000000 +vn -0.702814 0.002025 -0.711371 +v -5.872432 163.388962 16.326797 1.000000 1.000000 1.000000 +vn -0.978329 0.185786 -0.091416 +v -5.818152 164.449417 16.896000 1.000000 1.000000 1.000000 +vn -0.933967 0.274802 0.228451 +v -5.582504 165.278244 17.360197 1.000000 1.000000 1.000000 +vn -0.830103 0.148289 0.537531 +v -5.635202 164.411743 17.774399 1.000000 1.000000 1.000000 +vn -0.968693 0.151444 0.196719 +v -5.784112 164.442429 17.306000 1.000000 1.000000 1.000000 +vn -0.999296 0.036580 0.008296 +v -5.914894 163.580124 16.843399 1.000000 1.000000 1.000000 +vn -0.630848 -0.049880 0.774302 +v -5.492394 163.556396 18.059399 1.000000 1.000000 1.000000 +vn -0.307964 0.077118 0.948268 +v -4.730038 165.781952 18.362997 1.000000 1.000000 1.000000 +vn -0.420786 0.026360 0.906777 +v -5.182806 164.318253 18.252598 1.000000 1.000000 1.000000 +vn 0.630173 0.261474 -0.731105 +v -4.658672 161.967117 24.793598 1.000000 1.000000 1.000000 +vn 0.814808 0.396415 -0.423017 +v -4.227354 161.374100 25.013599 1.000000 1.000000 1.000000 +vn 0.605822 0.435415 -0.665879 +v -4.145482 160.615036 24.562798 1.000000 1.000000 1.000000 +vn 0.765682 0.107373 -0.634194 +v -4.803026 163.419647 25.024199 1.000000 1.000000 1.000000 +vn 0.849984 0.248707 -0.464405 +v -4.427904 162.031296 25.128399 1.000000 1.000000 1.000000 +vn 0.695692 0.600929 -0.393569 +v -3.578102 160.171326 24.782398 1.000000 1.000000 1.000000 +vn 0.368213 0.622140 -0.690913 +v -2.777676 158.999237 24.214998 1.000000 1.000000 1.000000 +vn 0.215776 0.204872 -0.954708 +v -4.870926 161.908508 24.657799 1.000000 1.000000 1.000000 +vn 0.059137 0.243609 -0.968069 +v -3.936100 159.862946 24.311798 1.000000 1.000000 1.000000 +vn -0.022170 0.270678 -0.962415 +v -2.371552 158.448090 23.976999 1.000000 1.000000 1.000000 +vn 0.126031 0.661686 -0.739113 +v -1.652700 158.357376 23.997799 1.000000 1.000000 1.000000 +vn -0.108523 0.251541 -0.961743 +v -1.043924 157.922043 23.745598 1.000000 1.000000 1.000000 +vn -0.324165 -0.041811 -0.945076 +v -4.118844 159.706680 24.306599 1.000000 1.000000 1.000000 +vn -0.277508 -0.167307 -0.946043 +v -2.481646 158.226227 23.971998 1.000000 1.000000 1.000000 +vn -0.094103 0.740043 -0.665943 +v -0.322476 158.053207 23.764999 1.000000 1.000000 1.000000 +vn -0.209124 -0.226898 -0.951202 +v -1.092380 157.675064 23.740599 1.000000 1.000000 1.000000 +vn -0.212778 0.205070 -0.955339 +v 1.068920 157.927628 23.398598 1.000000 1.000000 1.000000 +vn -0.098915 -0.293460 -0.950840 +v 1.118582 157.680649 23.393398 1.000000 1.000000 1.000000 +vn -0.135538 -0.592051 -0.794421 +v -0.369272 157.298325 23.775198 1.000000 1.000000 1.000000 +vn 0.022017 -0.664441 -0.747016 +v 1.171026 157.419724 23.544399 1.000000 1.000000 1.000000 +vn -0.268616 0.605837 -0.748870 +v 1.022310 158.159241 23.534397 1.000000 1.000000 1.000000 +vn -0.455402 0.580288 -0.675185 +v 2.287146 158.669937 23.303600 1.000000 1.000000 1.000000 +vn -0.260243 0.063151 -0.963476 +v 2.986982 158.870865 23.052599 1.000000 1.000000 1.000000 +vn -0.253239 0.834428 -0.489490 +v 0.971624 158.411804 23.869198 1.000000 1.000000 1.000000 +vn -0.417955 0.794095 -0.441278 +v 1.584490 158.607147 23.754398 1.000000 1.000000 1.000000 +vn -0.629057 0.667877 -0.397778 +v 2.715220 159.268539 23.523197 1.000000 1.000000 1.000000 +vn -0.646144 0.354692 -0.675790 +v 3.823626 160.095978 22.955799 1.000000 1.000000 1.000000 +vn -0.290902 -0.011596 -0.956682 +v 4.345286 160.517365 22.717800 1.000000 1.000000 1.000000 +vn -0.820718 0.345484 -0.455042 +v 3.949966 160.765732 23.188400 1.000000 1.000000 1.000000 +vn -0.687218 0.134847 -0.713827 +v 4.453204 161.293167 22.738598 1.000000 1.000000 1.000000 +vn -0.644439 0.517507 -0.562925 +v 3.205802 159.723419 23.407200 1.000000 1.000000 1.000000 +vn -0.873741 0.426475 -0.233870 +v 3.829690 160.841080 23.585999 1.000000 1.000000 1.000000 +vn -0.951542 0.216701 -0.218195 +v 4.297406 162.092697 23.354597 1.000000 1.000000 1.000000 +vn -0.887028 0.145758 -0.438105 +v 4.432372 162.056412 22.957199 1.000000 1.000000 1.000000 +vn -0.771332 -0.058646 -0.633725 +v 4.779850 162.723389 22.505798 1.000000 1.000000 1.000000 +vn -0.906298 -0.014444 -0.422392 +v 4.543018 162.748505 22.840599 1.000000 1.000000 1.000000 +vn -0.931921 0.361198 0.032552 +v 4.056158 161.467590 23.925598 1.000000 1.000000 1.000000 +vn -0.976274 0.216468 0.005543 +v 4.247658 162.106644 23.809399 1.000000 1.000000 1.000000 +vn -0.997169 0.074662 0.008924 +v 4.353694 162.769424 23.692999 1.000000 1.000000 1.000000 +vn -0.864687 -0.194038 -0.463320 +v 4.493102 164.136856 22.609997 1.000000 1.000000 1.000000 +vn -0.959457 -0.171356 -0.223786 +v 4.356282 164.110352 23.007397 1.000000 1.000000 1.000000 +vn -0.647020 -0.220621 -0.729857 +v 4.727334 164.182907 22.275200 1.000000 1.000000 1.000000 +vn -0.272757 -0.091120 -0.957758 +v 4.875960 161.936417 22.486397 1.000000 1.000000 1.000000 +vn -0.987241 -0.152168 0.046903 +v 4.305850 164.099182 23.462200 1.000000 1.000000 1.000000 +vn -0.940400 0.114429 0.320240 +v 4.529642 162.749893 24.517199 1.000000 1.000000 1.000000 +vn -0.827088 0.390217 0.404544 +v 4.220092 161.395020 24.749798 1.000000 1.000000 1.000000 +vn -0.721806 0.529739 0.445390 +v 3.938340 160.772705 24.864998 1.000000 1.000000 1.000000 +vn -0.838157 0.545391 0.006467 +v 3.482714 160.376434 24.142998 1.000000 1.000000 1.000000 +vn -0.690909 0.652000 0.312316 +v 3.196364 159.733185 25.083799 1.000000 1.000000 1.000000 +vn -0.857464 0.282696 0.429929 +v 4.419316 162.059204 24.633598 1.000000 1.000000 1.000000 +vn -0.518597 0.446987 0.728876 +v 4.142342 160.644333 25.212599 1.000000 1.000000 1.000000 +vn -0.651487 0.252066 0.715561 +v 4.648232 161.997803 24.981398 1.000000 1.000000 1.000000 +vn -0.937266 0.057581 0.343827 +v 4.549636 163.444778 24.401798 1.000000 1.000000 1.000000 +vn -0.707381 -0.003500 0.706824 +v 4.711922 164.180115 24.634199 1.000000 1.000000 1.000000 +vn -0.198142 0.191759 0.961233 +v 4.887444 161.933624 25.135998 1.000000 1.000000 1.000000 +vn -0.124777 0.247623 0.960788 +v 4.355536 160.510376 25.367199 1.000000 1.000000 1.000000 +vn -0.260268 0.107566 0.959526 +v 4.954406 164.227554 24.788799 1.000000 1.000000 1.000000 +vn -0.007053 0.265995 0.963949 +v 2.994024 158.859711 25.701998 1.000000 1.000000 1.000000 +vn 0.363757 -0.040586 0.930609 +v 4.561956 160.380615 25.363598 1.000000 1.000000 1.000000 +vn -0.325790 0.601876 0.729113 +v 2.847458 159.074585 25.547398 1.000000 1.000000 1.000000 +vn 0.110325 0.243089 0.963710 +v 1.071436 157.915054 26.047998 1.000000 1.000000 1.000000 +vn -0.407693 0.847192 0.340664 +v 2.167396 158.908539 25.314798 1.000000 1.000000 1.000000 +vn -0.029675 0.679615 0.732968 +v 1.018970 158.175995 25.893398 1.000000 1.000000 1.000000 +vn -0.489022 0.747052 0.450300 +v 2.707224 159.281097 25.199799 1.000000 1.000000 1.000000 +vn -0.726881 0.686712 -0.008417 +v 3.072200 159.869919 24.259598 1.000000 1.000000 1.000000 +vn -0.524021 0.850123 0.051887 +v 2.083196 159.077377 24.490599 1.000000 1.000000 1.000000 +vn -0.290966 0.881378 0.372173 +v 1.579816 158.621109 25.430998 1.000000 1.000000 1.000000 +vn -0.140573 0.892564 0.428450 +v 0.968766 158.425766 25.545799 1.000000 1.000000 1.000000 +vn -0.213643 0.975605 0.050508 +v 0.931116 158.614136 24.721399 1.000000 1.000000 1.000000 +vn -0.350266 0.890227 -0.291220 +v 1.536222 158.748077 24.151999 1.000000 1.000000 1.000000 +vn -0.234108 0.942028 -0.240369 +v 0.942030 158.559708 24.266598 1.000000 1.000000 1.000000 +vn 0.031914 0.928138 0.370865 +v 0.334888 158.326691 25.660999 1.000000 1.000000 1.000000 +vn 0.100917 0.932555 0.346636 +v -0.305630 158.325302 25.776398 1.000000 1.000000 1.000000 +vn 0.050394 0.998680 0.009953 +v -0.293784 158.516449 24.952198 1.000000 1.000000 1.000000 +vn 0.257551 0.627756 0.734568 +v -0.995204 158.170410 26.240599 1.000000 1.000000 1.000000 +vn 0.290755 0.843396 0.451825 +v -0.946228 158.421570 25.892799 1.000000 1.000000 1.000000 +vn 0.409403 0.809019 0.421754 +v -1.566220 158.614136 26.008999 1.000000 1.000000 1.000000 +vn 0.467536 0.496615 0.731289 +v -2.260830 158.672729 26.471798 1.000000 1.000000 1.000000 +vn 0.258875 0.122812 0.958071 +v -2.377140 158.436920 26.626398 1.000000 1.000000 1.000000 +vn 0.198899 0.187582 0.961900 +v -1.046390 157.909485 26.395199 1.000000 1.000000 1.000000 +vn 0.216847 0.976188 0.005832 +v -0.909502 158.608536 25.068598 1.000000 1.000000 1.000000 +vn 0.558359 0.696109 0.451296 +v -2.149540 158.897385 26.124199 1.000000 1.000000 1.000000 +vn 0.626633 0.313853 0.713322 +v -3.752312 160.022018 26.806599 1.000000 1.000000 1.000000 +vn 0.283156 0.018798 0.958890 +v -3.945370 159.855972 26.961199 1.000000 1.000000 1.000000 +vn 0.381379 0.923817 0.033354 +v -1.505426 158.794128 25.184799 1.000000 1.000000 1.000000 +vn 0.681637 0.661761 0.312161 +v -3.133060 159.666214 26.342999 1.000000 1.000000 1.000000 +vn 0.217667 0.947503 -0.234220 +v -0.920148 158.554123 24.613798 1.000000 1.000000 1.000000 +vn 0.578674 0.815537 0.005998 +v -2.530118 159.377380 25.402199 1.000000 1.000000 1.000000 +vn 0.452024 0.858089 -0.243635 +v -2.090264 159.017380 24.845198 1.000000 1.000000 1.000000 +vn 0.771144 0.462615 0.437406 +v -3.567584 160.181076 26.458998 1.000000 1.000000 1.000000 +vn 0.719689 0.694242 -0.008668 +v -3.011392 159.805740 25.518799 1.000000 1.000000 1.000000 +vn 0.544895 0.618046 -0.566665 +v -3.142304 159.655045 24.666401 1.000000 1.000000 1.000000 +vn 0.358627 0.803000 -0.476002 +v -2.155874 158.884811 24.447599 1.000000 1.000000 1.000000 +vn 0.862666 0.388412 0.323951 +v -3.928530 160.753174 26.573999 1.000000 1.000000 1.000000 +vn 0.867692 0.494570 0.050118 +v -3.775976 160.849457 25.749798 1.000000 1.000000 1.000000 +vn 0.705686 0.048021 0.706895 +v -4.643494 161.971298 27.152599 1.000000 1.000000 1.000000 +vn 0.892861 0.283361 0.350007 +v -4.214916 161.379669 26.690199 1.000000 1.000000 1.000000 +vn 0.902904 0.150373 0.402681 +v -4.414862 162.034088 26.804998 1.000000 1.000000 1.000000 +vn 0.975565 0.214593 0.047143 +v -4.243422 162.081528 25.980598 1.000000 1.000000 1.000000 +vn 0.939087 0.001516 0.343676 +v -4.527916 162.717804 26.920198 1.000000 1.000000 1.000000 +vn 0.945779 -0.054909 0.320136 +v -4.551644 163.411285 27.035599 1.000000 1.000000 1.000000 +vn 0.999894 -0.011535 0.008887 +v -4.374898 163.404312 26.211399 1.000000 1.000000 1.000000 +vn 0.903523 0.071709 -0.422497 +v -4.565098 163.411285 25.358999 1.000000 1.000000 1.000000 +vn 0.946546 0.232113 -0.223997 +v -4.293118 162.067581 25.525799 1.000000 1.000000 1.000000 +vn 0.894791 -0.089230 -0.437478 +v -4.498316 164.110352 25.475599 1.000000 1.000000 1.000000 +vn 0.963511 -0.155893 -0.217589 +v -4.361380 164.085236 25.872999 1.000000 1.000000 1.000000 +vn 0.900916 0.335406 -0.275416 +v -4.098670 161.431305 25.411198 1.000000 1.000000 1.000000 +vn 0.695057 -0.091101 -0.713159 +v -4.567210 164.870804 25.256998 1.000000 1.000000 1.000000 +vn 0.841945 -0.292159 -0.453621 +v -4.098322 165.434509 25.706799 1.000000 1.000000 1.000000 +vn 0.265992 0.108094 -0.957896 +v -4.948382 164.196869 25.004799 1.000000 1.000000 1.000000 +vn 0.289170 0.029973 -0.956809 +v -4.508372 165.653595 25.236198 1.000000 1.000000 1.000000 +vn 0.133941 0.873704 -0.467655 +v -0.949018 158.406219 24.216398 1.000000 1.000000 1.000000 +vn -0.050552 0.891332 -0.450524 +v -0.306524 158.309952 24.099798 1.000000 1.000000 1.000000 +vn 0.039530 -0.303313 -0.952071 +v 3.125720 158.667145 23.047398 1.000000 1.000000 1.000000 +vn 0.172374 -0.258972 -0.950379 +v 4.547086 160.390381 22.712799 1.000000 1.000000 1.000000 +vn 0.140427 -0.591890 -0.793692 +v 1.909578 157.654144 23.429798 1.000000 1.000000 1.000000 +vn 0.311719 -0.592936 -0.742467 +v 3.272210 158.452271 23.198399 1.000000 1.000000 1.000000 +vn -0.312713 0.084197 -0.946109 +v -5.097086 161.847107 24.652599 1.000000 1.000000 1.000000 +vn -0.616486 -0.301616 -0.727306 +v -4.311826 159.540619 24.457598 1.000000 1.000000 1.000000 +vn -0.500526 -0.379850 -0.777938 +v -3.786648 158.918304 24.341799 1.000000 1.000000 1.000000 +vn -0.439740 -0.514380 -0.736235 +v -2.597904 157.990402 24.122999 1.000000 1.000000 1.000000 +vn -0.247102 0.183925 -0.951374 +v -5.178146 164.241516 24.999798 1.000000 1.000000 1.000000 +vn -0.656030 0.218792 -0.722326 +v -5.420758 164.287552 25.150799 1.000000 1.000000 1.000000 +vn -0.620272 0.101843 -0.777748 +v -5.501226 163.444778 25.034401 1.000000 1.000000 1.000000 +vn -0.190843 0.247580 -0.949886 +v -4.717704 165.765213 25.231199 1.000000 1.000000 1.000000 +vn -0.690257 -0.040673 -0.722420 +v -5.335900 161.781540 24.803598 1.000000 1.000000 1.000000 +vn -0.061439 0.299660 -0.952066 +v -3.408104 167.588913 25.565798 1.000000 1.000000 1.000000 +vn -0.564317 0.386070 -0.729723 +v -4.938726 165.882431 25.382198 1.000000 1.000000 1.000000 +vn 0.668973 -0.312080 -0.674597 +v -4.014442 166.111252 25.474199 1.000000 1.000000 1.000000 +vn 0.264234 -0.046461 -0.963339 +v -3.256902 167.396362 25.570999 1.000000 1.000000 1.000000 +vn -0.353667 0.570674 -0.741115 +v -3.567778 167.792633 25.716799 1.000000 1.000000 1.000000 +vn 0.076620 0.299819 -0.950914 +v -1.467768 168.721924 25.911798 1.000000 1.000000 1.000000 +vn -0.431497 0.448877 -0.782508 +v -4.123120 167.202408 25.600998 1.000000 1.000000 1.000000 +vn -0.793371 0.441548 -0.419044 +v -5.151444 165.995438 25.726599 1.000000 1.000000 1.000000 +vn -0.820002 0.313313 -0.478990 +v -5.456460 165.187546 25.611597 1.000000 1.000000 1.000000 +vn -0.654209 0.596517 -0.464949 +v -4.300702 167.372635 25.945398 1.000000 1.000000 1.000000 +vn -0.933438 0.316743 -0.168425 +v -5.582762 165.232193 26.004599 1.000000 1.000000 1.000000 +vn -0.826607 0.521517 -0.211523 +v -4.907080 166.748917 26.221998 1.000000 1.000000 1.000000 +vn -0.747582 0.640817 -0.174570 +v -4.400262 167.467514 26.338598 1.000000 1.000000 1.000000 +vn -0.553395 0.693686 -0.461035 +v -3.721438 167.987976 26.061398 1.000000 1.000000 1.000000 +vn -0.648865 0.740201 -0.176286 +v -3.807584 168.096817 26.454399 1.000000 1.000000 1.000000 +vn -0.433885 0.752885 -0.494882 +v -3.071942 168.505646 26.176598 1.000000 1.000000 1.000000 +vn -0.183262 0.580479 -0.793384 +v -2.258564 168.688431 25.948198 1.000000 1.000000 1.000000 +vn -0.535641 0.825485 -0.177943 +v -3.143050 168.627045 26.569599 1.000000 1.000000 1.000000 +vn -0.327325 0.820374 -0.468876 +v -2.355846 168.922852 26.292797 1.000000 1.000000 1.000000 +vn -0.575292 0.803365 0.153768 +v -3.149924 168.638214 27.385199 1.000000 1.000000 1.000000 +vn -0.683582 0.713739 0.152621 +v -3.815914 168.107971 27.269999 1.000000 1.000000 1.000000 +vn -0.409115 0.894531 -0.180109 +v -2.410370 169.054016 26.685799 1.000000 1.000000 1.000000 +vn -0.201483 0.859055 -0.470563 +v -1.602682 169.224243 26.407398 1.000000 1.000000 1.000000 +vn -0.071172 0.661463 -0.746594 +v -1.536518 168.977264 26.062798 1.000000 1.000000 1.000000 +vn 0.227245 -0.191470 -0.954829 +v -1.402660 168.477737 25.916998 1.000000 1.000000 1.000000 +vn 0.191799 0.240129 -0.951604 +v 0.737648 168.890762 26.258999 1.000000 1.000000 1.000000 +vn 0.091437 0.599099 -0.795437 +v -0.007522 169.213074 26.293598 1.000000 1.000000 1.000000 +vn -0.062791 0.863212 -0.500922 +v -0.813288 169.408432 26.522799 1.000000 1.000000 1.000000 +vn -0.271086 0.945377 -0.181037 +v -1.639774 169.362381 26.800598 1.000000 1.000000 1.000000 +vn -0.125371 0.975379 -0.181433 +v -0.832098 169.550751 26.915798 1.000000 1.000000 1.000000 +vn 0.065833 0.878745 -0.472729 +v -0.007816 169.471222 26.637999 1.000000 1.000000 1.000000 +vn 0.220826 0.633448 -0.741606 +v 0.772234 169.154480 26.409998 1.000000 1.000000 1.000000 +vn 0.023865 0.983139 -0.181297 +v -0.007984 169.614944 27.031199 1.000000 1.000000 1.000000 +vn 0.198614 0.859600 -0.470786 +v 0.805534 169.409836 26.754599 1.000000 1.000000 1.000000 +vn -0.023093 0.987083 0.158539 +v -0.008002 169.628891 27.846798 1.000000 1.000000 1.000000 +vn -0.171783 0.972376 0.158036 +v -0.833914 169.564713 27.731398 1.000000 1.000000 1.000000 +vn -0.316237 0.935692 0.156444 +v -1.643366 169.376343 27.615999 1.000000 1.000000 1.000000 +vn -0.200466 0.843967 0.497527 +v -0.812462 169.401459 28.199598 1.000000 1.000000 1.000000 +vn -0.326448 0.822234 0.466223 +v -1.601060 169.218674 28.084398 1.000000 1.000000 1.000000 +vn -0.442228 0.749526 0.492590 +v -2.353464 168.917267 27.969599 1.000000 1.000000 1.000000 +vn -0.452070 0.878337 0.155426 +v -2.415636 169.067963 27.501398 1.000000 1.000000 1.000000 +vn -0.552762 0.695304 0.459355 +v -3.068852 168.500076 27.853399 1.000000 1.000000 1.000000 +vn -0.300804 0.597157 0.743586 +v -1.534986 168.971695 28.421997 1.000000 1.000000 1.000000 +vn -0.439931 0.460434 0.771013 +v -2.942164 168.282394 28.191198 1.000000 1.000000 1.000000 +vn -0.227012 0.236477 0.944746 +v -1.472570 168.738663 28.562599 1.000000 1.000000 1.000000 +vn -0.124308 0.613906 0.779530 +v -0.007512 169.207504 28.652798 1.000000 1.000000 1.000000 +vn -0.335940 0.158127 0.928515 +v -3.419240 167.602859 28.216599 1.000000 1.000000 1.000000 +vn -0.639119 0.596823 0.485107 +v -3.717678 167.982407 27.738199 1.000000 1.000000 1.000000 +vn -0.564856 0.318656 0.761181 +v -4.119000 167.198212 27.960199 1.000000 1.000000 1.000000 +vn -0.728042 0.515456 0.451951 +v -4.296362 167.368454 27.622398 1.000000 1.000000 1.000000 +vn -0.611318 0.242461 0.753328 +v -4.593422 166.524277 27.843599 1.000000 1.000000 1.000000 +vn -0.798317 0.395607 0.454076 +v -4.791206 166.665207 27.505798 1.000000 1.000000 1.000000 +vn -0.777992 0.609891 0.150866 +v -4.409880 167.477295 27.154198 1.000000 1.000000 1.000000 +vn -0.852845 0.500175 0.149936 +v -4.917804 166.755905 27.037598 1.000000 1.000000 1.000000 +vn -0.669040 0.107068 0.735474 +v -5.225912 165.105209 27.626198 1.000000 1.000000 1.000000 +vn -0.865897 0.216803 0.450799 +v -5.450950 165.184753 27.288399 1.000000 1.000000 1.000000 +vn -0.908431 0.385026 0.162810 +v -5.282226 166.065216 26.935398 1.000000 1.000000 1.000000 +vn -0.951797 0.268718 0.147898 +v -5.594968 165.236374 26.820198 1.000000 1.000000 1.000000 +vn -0.877071 0.080220 0.473614 +v -5.648540 164.330811 27.172199 1.000000 1.000000 1.000000 +vn -0.968953 0.179874 -0.169633 +v -5.785128 164.357315 25.888399 1.000000 1.000000 1.000000 +vn -0.979074 0.140441 0.147277 +v -5.797798 164.360107 26.703999 1.000000 1.000000 1.000000 +vn -0.872212 0.200772 -0.446024 +v -5.654242 164.332214 25.495398 1.000000 1.000000 1.000000 +vn -0.984233 0.051832 -0.169111 +v -5.871016 163.458725 25.771999 1.000000 1.000000 1.000000 +vn -0.891307 0.085614 -0.445245 +v -5.738174 163.453140 25.378798 1.000000 1.000000 1.000000 +vn -0.989048 0.011387 0.147156 +v -5.883852 163.458725 26.587599 1.000000 1.000000 1.000000 +vn -0.982648 -0.076158 -0.169124 +v -5.840400 162.562912 25.656601 1.000000 1.000000 1.000000 +vn -0.879825 -0.025474 -0.474614 +v -5.708252 162.579666 25.263599 1.000000 1.000000 1.000000 +vn -0.096975 0.343375 0.934179 +v 0.740054 168.908905 28.909798 1.000000 1.000000 1.000000 +vn 0.008857 0.344683 0.938677 +v 2.165428 168.460999 29.141199 1.000000 1.000000 1.000000 +vn 0.099285 0.645968 0.756880 +v 1.533030 168.971695 28.885399 1.000000 1.000000 1.000000 +vn 0.061796 0.864044 0.499609 +v 0.804718 169.402847 28.431398 1.000000 1.000000 1.000000 +vn -0.067019 0.880294 0.469671 +v -0.007816 169.464233 28.314999 1.000000 1.000000 1.000000 +vn 0.414767 0.778916 0.470382 +v 2.986802 168.554474 28.764999 1.000000 1.000000 1.000000 +vn 0.216081 0.852641 0.475723 +v 1.599078 169.218674 28.547598 1.000000 1.000000 1.000000 +vn 0.261271 0.582217 0.769909 +v 2.863460 168.335419 29.102798 1.000000 1.000000 1.000000 +vn 0.217815 0.389618 0.894849 +v 3.897694 167.100540 29.475798 1.000000 1.000000 1.000000 +vn 0.477849 0.423605 0.769558 +v 4.541318 166.606598 29.450399 1.000000 1.000000 1.000000 +vn 0.591903 0.611561 0.525018 +v 4.238000 167.436829 28.997398 1.000000 1.000000 1.000000 +vn 0.523569 0.666610 0.530571 +v 3.651232 168.042404 28.881599 1.000000 1.000000 1.000000 +vn 0.720756 0.525082 0.452548 +v 4.736900 166.751709 29.112598 1.000000 1.000000 1.000000 +vn 0.770484 0.419738 0.479765 +v 5.146434 165.991257 29.228798 1.000000 1.000000 1.000000 +vn 0.620094 0.291983 0.728168 +v 5.224610 165.106613 29.681198 1.000000 1.000000 1.000000 +vn 0.244291 0.214963 0.945575 +v 5.012034 165.031265 29.821798 1.000000 1.000000 1.000000 +vn 0.891490 0.427678 0.149460 +v 5.282444 166.063812 28.760599 1.000000 1.000000 1.000000 +vn 0.825694 0.543542 0.150971 +v 4.862108 166.843811 28.644398 1.000000 1.000000 1.000000 +vn 0.940693 0.305000 0.148563 +v 5.593666 165.237778 28.875198 1.000000 1.000000 1.000000 +vn 0.837851 0.314526 0.446183 +v 5.449636 165.186157 29.343599 1.000000 1.000000 1.000000 +vn 0.856653 0.202541 0.474472 +v 5.645874 164.337784 29.458799 1.000000 1.000000 1.000000 +vn 0.634429 0.133252 0.761410 +v 5.494080 163.460129 29.911999 1.000000 1.000000 1.000000 +vn 0.972758 0.178624 0.147771 +v 5.795094 164.367081 28.990599 1.000000 1.000000 1.000000 +vn 0.949186 0.264866 -0.169977 +v 5.581448 165.233597 28.059799 1.000000 1.000000 1.000000 +vn 0.905680 0.388091 -0.170671 +v 5.270922 166.056839 27.944998 1.000000 1.000000 1.000000 +vn 0.836559 0.315359 -0.448015 +v 5.151636 165.994049 27.551998 1.000000 1.000000 1.000000 +vn 0.845310 0.505711 -0.172362 +v 4.851486 166.836838 27.828798 1.000000 1.000000 1.000000 +vn 0.871772 0.202959 -0.445895 +v 5.455146 165.187546 27.666599 1.000000 1.000000 1.000000 +vn 0.602105 0.180839 -0.777668 +v 4.938854 165.881027 27.207399 1.000000 1.000000 1.000000 +vn 0.774449 0.411505 -0.480512 +v 4.741702 166.754517 27.435799 1.000000 1.000000 1.000000 +vn 0.767638 0.616850 -0.173863 +v 4.340524 167.538681 27.713598 1.000000 1.000000 1.000000 +vn 0.594346 0.340664 -0.728492 +v 4.067062 167.267990 26.975998 1.000000 1.000000 1.000000 +vn 0.719372 0.525452 -0.454316 +v 4.242288 167.441010 27.320599 1.000000 1.000000 1.000000 +vn 0.686146 0.084371 -0.722554 +v 5.229838 165.108017 27.321999 1.000000 1.000000 1.000000 +vn 0.318372 -0.064474 -0.945771 +v 4.995710 165.024292 27.170998 1.000000 1.000000 1.000000 +vn 0.259670 -0.167899 -0.950990 +v 5.227378 162.642456 27.518198 1.000000 1.000000 1.000000 +vn -0.200277 -0.218250 -0.955121 +v 4.773992 164.946152 27.176197 1.000000 1.000000 1.000000 +vn -0.041007 -0.246831 -0.968190 +v 3.712568 166.917755 26.830198 1.000000 1.000000 1.000000 +vn 0.320823 0.062548 -0.945072 +v 3.884986 167.087997 26.824999 1.000000 1.000000 1.000000 +vn 0.625804 -0.062572 -0.777467 +v 5.499566 163.460129 27.552799 1.000000 1.000000 1.000000 +vn 0.207393 -0.234431 -0.949753 +v 4.863922 161.088058 27.749598 1.000000 1.000000 1.000000 +vn -0.257183 -0.124662 -0.958288 +v 4.995374 162.668976 27.523199 1.000000 1.000000 1.000000 +vn 0.669414 -0.176786 -0.721549 +v 5.472334 162.613159 27.669197 1.000000 1.000000 1.000000 +vn 0.895083 -0.029324 -0.444934 +v 5.736500 163.468491 27.897198 1.000000 1.000000 1.000000 +vn 0.876430 0.080925 -0.474680 +v 5.651590 164.339188 27.781998 1.000000 1.000000 1.000000 +vn -0.699894 0.047064 -0.712694 +v 4.657540 161.968506 27.775398 1.000000 1.000000 1.000000 +vn -0.756685 -0.155750 -0.634956 +v 4.801416 163.433609 27.542599 1.000000 1.000000 1.000000 +vn -0.286734 -0.048094 -0.956802 +v 4.648064 161.184326 27.754599 1.000000 1.000000 1.000000 +vn -0.689689 0.269310 -0.672162 +v 4.184172 160.688995 27.992798 1.000000 1.000000 1.000000 +vn -0.267210 0.029872 -0.963175 +v 3.509248 159.352264 28.089399 1.000000 1.000000 1.000000 +vn -0.859475 0.237717 -0.452542 +v 4.225204 161.371307 28.225199 1.000000 1.000000 1.000000 +vn -0.898734 0.032523 -0.437287 +v 4.540920 162.721985 27.993998 1.000000 1.000000 1.000000 +vn -0.709226 0.428288 -0.559971 +v 3.618890 160.229919 28.443998 1.000000 1.000000 1.000000 +vn -0.921690 0.310577 -0.232444 +v 4.096546 161.428513 28.622799 1.000000 1.000000 1.000000 +vn -0.971484 0.094673 -0.217382 +v 4.402644 162.737335 28.391399 1.000000 1.000000 1.000000 +vn -0.896957 -0.128544 -0.423018 +v 4.563502 163.423843 27.877398 1.000000 1.000000 1.000000 +vn -0.998644 -0.051306 0.008867 +v 4.373328 163.416855 28.729799 1.000000 1.000000 1.000000 +vn -0.970408 0.239259 0.032611 +v 4.242288 162.081528 28.962399 1.000000 1.000000 1.000000 +vn -0.995806 0.091329 0.005469 +v 4.351672 162.742920 28.846201 1.000000 1.000000 1.000000 +vn -0.871802 0.280667 0.401481 +v 4.413716 162.035492 29.786598 1.000000 1.000000 1.000000 +vn -0.787194 0.430872 0.441220 +v 4.212754 161.376892 29.901798 1.000000 1.000000 1.000000 +vn -0.902231 0.431203 0.006586 +v 3.811110 160.917816 29.179798 1.000000 1.000000 1.000000 +vn -0.773036 0.553670 0.309621 +v 3.608242 160.238297 30.120598 1.000000 1.000000 1.000000 +vn -0.715049 0.577147 -0.394470 +v 3.189978 159.706680 28.559998 1.000000 1.000000 1.000000 +vn -0.812892 0.582356 -0.008258 +v 3.468088 160.355499 29.296398 1.000000 1.000000 1.000000 +vn -0.589016 0.673122 0.447177 +v 3.180594 159.717834 30.236597 1.000000 1.000000 1.000000 +vn -0.526050 0.728903 -0.438145 +v 2.152978 158.883423 28.791199 1.000000 1.000000 1.000000 +vn -0.638374 0.768043 0.050882 +v 2.587862 159.424805 29.527399 1.000000 1.000000 1.000000 +vn -0.533633 0.515361 -0.670551 +v 2.841188 159.049469 28.340399 1.000000 1.000000 1.000000 +vn -0.371681 0.790868 -0.486190 +v 1.570302 158.600174 28.905998 1.000000 1.000000 1.000000 +vn -0.474590 0.831065 -0.289991 +v 2.087418 159.017380 29.188799 1.000000 1.000000 1.000000 +vn -0.353904 0.564628 -0.745619 +v 1.652186 158.358780 28.571199 1.000000 1.000000 1.000000 +vn -0.240298 0.176049 -0.954601 +v 1.727490 158.135529 28.435398 1.000000 1.000000 1.000000 +vn -0.201688 0.718990 -0.665114 +v 0.333338 158.054596 28.801798 1.000000 1.000000 1.000000 +vn -0.144584 0.235066 -0.961166 +v -0.364940 157.817383 28.782598 1.000000 1.000000 1.000000 +vn 0.003742 0.883696 -0.468047 +v -0.331796 158.311340 29.253199 1.000000 1.000000 1.000000 +vn -0.181138 0.874947 -0.449061 +v 0.316796 158.311340 29.136599 1.000000 1.000000 1.000000 +vn 0.027683 0.672217 -0.739836 +v -1.022814 158.159241 29.034599 1.000000 1.000000 1.000000 +vn -0.061566 0.265490 -0.962146 +v -1.746326 158.143890 29.013798 1.000000 1.000000 1.000000 +vn -0.250381 -0.201755 -0.946892 +v -1.827400 157.906693 29.008799 1.000000 1.000000 1.000000 +vn -0.173543 -0.250883 -0.952334 +v -0.381862 157.566223 28.777399 1.000000 1.000000 1.000000 +vn 0.274776 0.666055 -0.693447 +v -2.217866 158.629471 29.251799 1.000000 1.000000 1.000000 +vn 0.238333 0.844561 -0.479494 +v -1.587528 158.607147 29.484398 1.000000 1.000000 1.000000 +vn 0.605677 0.689505 -0.397162 +v -3.158126 159.671783 29.819199 1.000000 1.000000 1.000000 +vn 0.451278 0.686129 -0.570592 +v -2.661570 159.225281 29.703199 1.000000 1.000000 1.000000 +vn 0.022815 0.248970 -0.968242 +v -3.474100 159.314590 29.348598 1.000000 1.000000 1.000000 +vn 0.539595 0.511112 -0.669031 +v -3.775898 160.027588 29.599598 1.000000 1.000000 1.000000 +vn 0.323884 0.913448 -0.246396 +v -1.539210 158.749481 29.881998 1.000000 1.000000 1.000000 +vn 0.076423 0.969009 -0.234906 +v -0.321718 158.462036 29.650599 1.000000 1.000000 1.000000 +vn 0.457076 0.889407 0.006059 +v -2.020200 159.041107 30.438999 1.000000 1.000000 1.000000 +vn 0.243866 0.969225 0.033645 +v -0.931688 158.614136 30.221598 1.000000 1.000000 1.000000 +vn -0.096994 0.995228 0.010633 +v 0.303576 158.516449 29.988998 1.000000 1.000000 1.000000 +vn 0.072395 0.997356 0.006402 +v -0.317996 158.517853 30.105398 1.000000 1.000000 1.000000 +vn 0.454228 0.765471 0.455775 +v -1.582854 158.621109 31.160999 1.000000 1.000000 1.000000 +vn 0.583127 0.747936 0.317104 +v -2.653730 159.237839 31.379799 1.000000 1.000000 1.000000 +vn 0.288352 0.858074 0.424927 +v -0.969310 158.425766 31.045998 1.000000 1.000000 1.000000 +vn 0.577050 0.391646 0.716678 +v -3.311878 159.497375 31.843399 1.000000 1.000000 1.000000 +vn 0.391677 0.553528 0.734980 +v -1.664802 158.381104 31.508799 1.000000 1.000000 1.000000 +vn 0.701200 0.560052 0.441203 +v -3.148830 159.682953 31.495798 1.000000 1.000000 1.000000 +vn 0.693343 0.136340 0.707592 +v -4.439724 161.298752 32.189400 1.000000 1.000000 1.000000 +vn 0.277476 -0.055856 0.959108 +v -4.668162 161.198288 32.343998 1.000000 1.000000 1.000000 +vn 0.277392 0.053941 0.959241 +v -3.482276 159.304810 31.997999 1.000000 1.000000 1.000000 +vn 0.803710 0.497156 0.326935 +v -3.578296 160.196426 31.610798 1.000000 1.000000 1.000000 +vn 0.616367 0.787409 -0.008879 +v -2.550694 159.392731 30.555599 1.000000 1.000000 1.000000 +vn 0.848318 0.396035 0.351443 +v -3.940734 160.774109 31.726999 1.000000 1.000000 1.000000 +vn 0.794879 0.604697 0.050091 +v -3.439338 160.315033 30.786598 1.000000 1.000000 1.000000 +vn 0.931297 0.119762 0.344011 +v -4.418982 162.055023 31.957199 1.000000 1.000000 1.000000 +vn 0.690408 -0.124071 0.712702 +v -4.786970 163.448959 32.536598 1.000000 1.000000 1.000000 +vn 0.876011 0.263348 0.404046 +v -4.221136 161.393631 31.841799 1.000000 1.000000 1.000000 +vn 0.945151 0.064591 0.320183 +v -4.529654 162.738724 32.072399 1.000000 1.000000 1.000000 +vn 0.940284 0.337074 0.047411 +v -4.057226 161.466187 31.017399 1.000000 1.000000 1.000000 +vn 0.754382 0.499496 -0.425925 +v -3.952360 160.767136 30.050398 1.000000 1.000000 1.000000 +vn 0.849183 0.449088 -0.277864 +v -3.832058 160.842484 30.447998 1.000000 1.000000 1.000000 +vn 0.908923 0.350596 -0.225700 +v -4.104734 161.445267 30.562599 1.000000 1.000000 1.000000 +vn 0.809830 0.355316 -0.466825 +v -4.233610 161.388062 30.165199 1.000000 1.000000 1.000000 +vn 0.993431 0.114096 0.008788 +v -4.353746 162.758270 31.248198 1.000000 1.000000 1.000000 +vn 0.886724 0.185124 -0.423615 +v -4.543018 162.735947 30.395798 1.000000 1.000000 1.000000 +vn 0.588539 0.339735 -0.733622 +v -4.454260 161.291779 29.830399 1.000000 1.000000 1.000000 +vn 0.744605 0.203448 -0.635745 +v -4.779798 162.709427 30.060999 1.000000 1.000000 1.000000 +vn 0.975525 -0.033265 -0.217360 +v -4.425768 163.433609 30.909798 1.000000 1.000000 1.000000 +vn 0.898997 0.024172 -0.437287 +v -4.564724 163.439194 30.512398 1.000000 1.000000 1.000000 +vn 0.999584 -0.028307 0.005488 +v -4.374538 163.430817 31.364599 1.000000 1.000000 1.000000 +vn 0.888251 -0.224726 0.400634 +v -4.481064 164.134064 32.305199 1.000000 1.000000 1.000000 +vn 0.873371 -0.182519 -0.451565 +v -4.334742 164.809402 30.743599 1.000000 1.000000 1.000000 +vn 0.939784 -0.250961 -0.232001 +v -4.202788 164.761963 31.141199 1.000000 1.000000 1.000000 +vn 0.701467 -0.002874 -0.712697 +v -4.728518 164.182907 30.293798 1.000000 1.000000 1.000000 +vn 0.183502 0.230538 -0.955604 +v -4.657192 161.202469 29.694599 1.000000 1.000000 1.000000 +vn 0.247902 0.140621 -0.958525 +v -5.021432 163.458725 30.041798 1.000000 1.000000 1.000000 +vn -0.224227 0.221151 -0.949112 +v -4.989852 165.045212 30.267998 1.000000 1.000000 1.000000 +vn 0.282315 0.066128 -0.957040 +v -4.768444 164.965683 30.272999 1.000000 1.000000 1.000000 +vn -0.271102 0.151435 -0.950564 +v -5.254582 163.468491 30.036598 1.000000 1.000000 1.000000 +vn 0.706453 -0.224569 -0.671188 +v -4.336750 165.493118 30.511198 1.000000 1.000000 1.000000 +vn 0.268369 -0.012630 -0.963234 +v -3.747612 166.877289 30.607798 1.000000 1.000000 1.000000 +vn 0.568488 -0.478526 -0.669205 +v -3.100176 167.227524 30.858797 1.000000 1.000000 1.000000 +vn -0.680324 0.133879 -0.720580 +v -5.500788 163.478271 30.187599 1.000000 1.000000 1.000000 +vn -0.628911 0.023078 -0.777135 +v -5.474640 162.631302 30.071199 1.000000 1.000000 1.000000 +vn -0.679023 -0.127671 -0.722930 +v -5.101758 161.007126 29.840599 1.000000 1.000000 1.000000 +vn -0.322962 0.044156 -0.945381 +v -4.873424 161.107590 29.689398 1.000000 1.000000 1.000000 +vn -0.895201 -0.027242 -0.444830 +v -5.710454 162.604782 30.415798 1.000000 1.000000 1.000000 +vn -0.869329 -0.136125 -0.475118 +v -5.570930 161.742462 30.300398 1.000000 1.000000 1.000000 +vn -0.588488 -0.218672 -0.778373 +v -4.762830 160.257828 29.725798 1.000000 1.000000 1.000000 +vn -0.568772 -0.378164 -0.730404 +v -3.805704 158.939240 29.494398 1.000000 1.000000 1.000000 +vn -0.315971 -0.083167 -0.945117 +v -3.635396 159.131790 29.343399 1.000000 1.000000 1.000000 +vn -0.442043 -0.441849 -0.780620 +v -3.207308 158.400650 29.378599 1.000000 1.000000 1.000000 +vn -0.362183 -0.568563 -0.738621 +v -1.912990 157.655533 29.159798 1.000000 1.000000 1.000000 +vn -0.891217 0.088932 -0.444773 +v -5.737724 163.488022 30.532198 1.000000 1.000000 1.000000 +vn -0.854434 0.206483 -0.476767 +v -5.649184 164.364288 30.648399 1.000000 1.000000 1.000000 +vn -0.612889 0.310053 -0.726797 +v -5.223646 165.128937 30.418999 1.000000 1.000000 1.000000 +vn -0.982924 -0.072678 -0.169050 +v -5.842628 162.589432 30.808798 1.000000 1.000000 1.000000 +vn -0.983996 0.056109 -0.169125 +v -5.870540 163.493607 30.925198 1.000000 1.000000 1.000000 +vn -0.104294 0.288382 -0.951819 +v -3.921616 167.044739 30.602598 1.000000 1.000000 1.000000 +vn -0.431898 0.517890 -0.738413 +v -4.105352 167.223343 30.753599 1.000000 1.000000 1.000000 +vn 0.031883 0.305420 -0.951684 +v -2.141660 168.454025 30.948599 1.000000 1.000000 1.000000 +vn -0.490699 0.388496 -0.779927 +v -4.581386 166.556366 30.637798 1.000000 1.000000 1.000000 +vn 0.252839 -0.160996 -0.954019 +v -2.046658 168.222397 30.953798 1.000000 1.000000 1.000000 +vn 0.154259 0.260945 -0.952949 +v 0.021918 168.946579 31.295799 1.000000 1.000000 1.000000 +vn -0.266123 0.549513 -0.791968 +v -2.921024 168.304718 30.984999 1.000000 1.000000 1.000000 +vn -0.167383 0.644768 -0.745827 +v -2.241980 168.698212 31.099798 1.000000 1.000000 1.000000 +vn 0.161491 -0.225887 -0.960675 +v 0.020916 168.694016 31.300999 1.000000 1.000000 1.000000 +vn 0.125249 0.657054 -0.743366 +v 0.022968 169.214478 31.446798 1.000000 1.000000 1.000000 +vn 0.002002 0.606168 -0.795334 +v -0.756864 169.157272 31.330399 1.000000 1.000000 1.000000 +vn 0.235320 0.218701 -0.946992 +v 1.485534 168.714951 31.527199 1.000000 1.000000 1.000000 +vn 0.081244 -0.260896 -0.961942 +v 1.419590 168.472153 31.532198 1.000000 1.000000 1.000000 +vn 0.320108 0.591279 -0.740216 +v 1.555160 168.970291 31.678198 1.000000 1.000000 1.000000 +vn 0.309259 0.103144 -0.945368 +v 3.366466 167.625198 31.861799 1.000000 1.000000 1.000000 +vn -0.004683 -0.249944 -0.968249 +v 3.217054 167.431229 31.866999 1.000000 1.000000 1.000000 +vn 0.540811 0.414417 -0.731971 +v 3.524248 167.830307 32.012798 1.000000 1.000000 1.000000 +vn 0.325630 -0.023740 -0.945199 +v 4.726046 165.745682 32.207798 1.000000 1.000000 1.000000 +vn 0.409390 0.470037 -0.781963 +v 2.893342 168.322861 31.896999 1.000000 1.000000 1.000000 +vn 0.348764 0.830382 -0.434546 +v 1.622188 169.217270 32.022797 1.000000 1.000000 1.000000 +vn 0.204697 0.841755 -0.499548 +v 0.834982 169.405640 31.907598 1.000000 1.000000 1.000000 +vn 0.529860 0.705551 -0.470581 +v 3.017998 168.541931 32.241600 1.000000 1.000000 1.000000 +vn 0.431530 0.875705 -0.216616 +v 2.347838 169.083313 32.517998 1.000000 1.000000 1.000000 +vn 0.191122 0.965211 -0.178439 +v 0.854322 169.547958 32.300598 1.000000 1.000000 1.000000 +vn 0.028480 0.982991 -0.181430 +v 0.024550 169.614944 32.184399 1.000000 1.000000 1.000000 +vn 0.069193 0.879341 -0.471138 +v 0.023980 169.471222 31.791401 1.000000 1.000000 1.000000 +vn 0.272783 0.946634 0.171679 +v 1.663386 169.367966 33.231400 1.000000 1.000000 1.000000 +vn 0.133727 0.978236 0.158653 +v 0.856198 169.561905 33.116196 1.000000 1.000000 1.000000 +vn 0.088842 0.874303 0.477181 +v 0.834138 169.398666 33.584396 1.000000 1.000000 1.000000 +vn 0.298469 0.828906 0.473108 +v 2.292386 168.946579 33.801796 1.000000 1.000000 1.000000 +vn 0.406152 0.900429 0.155781 +v 2.352974 169.095871 33.333599 1.000000 1.000000 1.000000 +vn -0.066042 0.864038 0.499075 +v 0.023960 169.464233 33.468201 1.000000 1.000000 1.000000 +vn -0.018159 0.987222 0.158315 +v 0.024608 169.628891 33.000000 1.000000 1.000000 1.000000 +vn 0.003123 0.653595 0.756838 +v 0.799668 169.144714 33.922199 1.000000 1.000000 1.000000 +vn -0.195738 0.862159 0.467299 +v -0.788642 169.405640 33.351799 1.000000 1.000000 1.000000 +vn -0.213385 0.591485 0.777568 +v -0.756110 169.151688 33.689598 1.000000 1.000000 1.000000 +vn -0.167792 0.973208 0.157203 +v -0.809466 169.567505 32.883598 1.000000 1.000000 1.000000 +vn -0.321431 0.807205 0.495079 +v -1.577976 169.224243 33.236397 1.000000 1.000000 1.000000 +vn -0.384326 0.551546 0.740331 +v -2.239740 168.692627 33.458801 1.000000 1.000000 1.000000 +vn -0.146480 0.327834 0.933311 +v 0.021986 168.966110 33.946598 1.000000 1.000000 1.000000 +vn -0.259454 0.204569 0.943841 +v -2.148664 168.470764 33.599396 1.000000 1.000000 1.000000 +vn -0.442034 0.768569 0.462502 +v -2.336172 168.927048 33.121201 1.000000 1.000000 1.000000 +vn -0.311255 0.937212 0.157336 +v -1.619664 169.383316 32.768196 1.000000 1.000000 1.000000 +vn -0.544798 0.681864 0.488116 +v -3.043760 168.516815 33.006401 1.000000 1.000000 1.000000 +vn -0.505666 0.394567 0.767215 +v -3.547268 167.802399 33.227997 1.000000 1.000000 1.000000 +vn -0.448336 0.880274 0.155279 +v -2.397894 169.076340 32.652798 1.000000 1.000000 1.000000 +vn -0.265962 0.946840 -0.180994 +v -1.616136 169.369370 31.952599 1.000000 1.000000 1.000000 +vn -0.404835 0.896592 -0.179531 +v -2.392668 169.063782 31.837399 1.000000 1.000000 1.000000 +vn -0.532371 0.827425 -0.178740 +v -3.117352 168.645187 31.722601 1.000000 1.000000 1.000000 +vn -0.571934 0.805578 0.154713 +v -3.124176 168.656342 32.538200 1.000000 1.000000 1.000000 +vn -0.644218 0.614726 0.455077 +v -3.700014 167.997757 32.890198 1.000000 1.000000 1.000000 +vn -0.680882 0.716265 0.152856 +v -3.797760 168.123322 32.421997 1.000000 1.000000 1.000000 +vn -0.442282 0.765981 -0.466540 +v -3.046824 168.522400 31.329599 1.000000 1.000000 1.000000 +vn -0.645881 0.742712 -0.176685 +v -3.789482 168.113556 31.606398 1.000000 1.000000 1.000000 +vn -0.324516 0.821892 -0.468169 +v -2.338542 168.932617 31.444199 1.000000 1.000000 1.000000 +vn -0.188748 0.845576 -0.499375 +v -1.579584 169.231216 31.559599 1.000000 1.000000 1.000000 +vn -0.536475 0.685658 -0.492003 +v -3.703748 168.003326 31.213398 1.000000 1.000000 1.000000 +vn -0.743975 0.645052 -0.174383 +v -4.381284 167.489853 31.491398 1.000000 1.000000 1.000000 +vn -0.644624 0.612244 -0.457839 +v -4.282174 167.394974 31.098198 1.000000 1.000000 1.000000 +vn -0.774452 0.614434 0.150650 +v -4.390876 167.499619 32.306801 1.000000 1.000000 1.000000 +vn -0.826691 0.535164 -0.173726 +v -4.889324 166.779617 31.375399 1.000000 1.000000 1.000000 +vn -0.729808 0.503925 -0.461995 +v -4.778704 166.698700 30.982397 1.000000 1.000000 1.000000 +vn -0.845390 0.335273 -0.415823 +v -5.448632 165.209869 30.763599 1.000000 1.000000 1.000000 +vn -0.887971 0.409048 -0.210205 +v -5.301074 165.991257 31.258799 1.000000 1.000000 1.000000 +vn -0.910850 0.385084 0.148533 +v -5.312662 165.998245 32.074398 1.000000 1.000000 1.000000 +vn -0.852181 0.501333 0.149844 +v -4.900024 166.786591 32.190998 1.000000 1.000000 1.000000 +vn -0.950470 0.265441 0.161701 +v -5.586958 165.260101 31.972198 1.000000 1.000000 1.000000 +vn -0.966351 0.195183 -0.167542 +v -5.779952 164.389420 31.041401 1.000000 1.000000 1.000000 +vn -0.843937 0.289847 0.451396 +v -5.175892 165.927078 32.542599 1.000000 1.000000 1.000000 +vn -0.753771 0.401992 0.519839 +v -4.773876 166.695908 32.659199 1.000000 1.000000 1.000000 +vn -0.887044 0.105377 0.449497 +v -5.643480 164.362900 32.325199 1.000000 1.000000 1.000000 +vn -0.634757 0.172665 0.753174 +v -4.962222 165.816833 32.880398 1.000000 1.000000 1.000000 +vn -0.978319 0.145649 0.147239 +v -5.792596 164.392212 31.856998 1.000000 1.000000 1.000000 +vn -0.988988 0.015702 0.147164 +v -5.883376 163.493607 31.740799 1.000000 1.000000 1.000000 +vn -0.711768 0.475860 0.516666 +v -4.277848 167.390778 32.775200 1.000000 1.000000 1.000000 +vn -0.434465 0.155854 0.887102 +v -3.934426 167.057297 33.253399 1.000000 1.000000 1.000000 +vn -0.064289 0.879550 -0.471443 +v -0.789438 169.411224 31.674999 1.000000 1.000000 1.000000 +vn -0.120861 0.975958 -0.181380 +v -0.807708 169.553543 32.068001 1.000000 1.000000 1.000000 +vn -0.042060 0.342407 0.938610 +v 1.490388 168.731689 34.177998 1.000000 1.000000 1.000000 +vn 0.162527 0.616454 0.770434 +v 2.197704 168.710770 34.139599 1.000000 1.000000 1.000000 +vn 0.113160 0.335339 0.935277 +v 3.377474 167.639145 34.512596 1.000000 1.000000 1.000000 +vn 0.437556 0.770497 0.463550 +v 3.014958 168.536346 33.918396 1.000000 1.000000 1.000000 +vn 0.251169 0.579066 0.775626 +v 2.890460 168.318665 34.256199 1.000000 1.000000 1.000000 +vn 0.211424 0.243973 0.946455 +v 4.741484 165.754044 34.858597 1.000000 1.000000 1.000000 +vn 0.417265 0.477464 0.773252 +v 4.077104 167.245667 34.487198 1.000000 1.000000 1.000000 +vn 0.533446 0.688986 0.490647 +v 3.672372 168.022858 34.034401 1.000000 1.000000 1.000000 +vn 0.646224 0.747368 0.154386 +v 3.769422 168.149841 33.565998 1.000000 1.000000 1.000000 +vn 0.530666 0.833179 0.155583 +v 3.094654 168.675888 33.450199 1.000000 1.000000 1.000000 +vn 0.565916 0.805180 -0.177267 +v 3.087894 168.664719 32.634598 1.000000 1.000000 1.000000 +vn 0.745357 0.648998 0.152459 +v 4.365102 167.528915 33.681198 1.000000 1.000000 1.000000 +vn 0.676818 0.714969 -0.175317 +v 3.761196 168.138672 32.750599 1.000000 1.000000 1.000000 +vn 0.640340 0.616637 -0.457955 +v 3.676080 168.028442 32.357399 1.000000 1.000000 1.000000 +vn 0.770438 0.613384 -0.173738 +v 4.355574 167.519150 32.865601 1.000000 1.000000 1.000000 +vn 0.712193 0.509048 -0.483375 +v 4.257004 167.422867 32.472599 1.000000 1.000000 1.000000 +vn 0.787218 0.420314 -0.451248 +v 4.758788 166.727997 32.588799 1.000000 1.000000 1.000000 +vn 0.572114 0.255742 -0.779283 +v 4.562240 166.584274 32.244198 1.000000 1.000000 1.000000 +vn 0.847044 0.502786 -0.172401 +v 4.868970 166.808914 32.981796 1.000000 1.000000 1.000000 +vn 0.837683 0.312499 -0.447919 +v 5.160674 165.975906 32.703400 1.000000 1.000000 1.000000 +vn 0.668684 0.170535 -0.723727 +v 4.947518 165.862885 32.359001 1.000000 1.000000 1.000000 +vn 0.281390 -0.133988 -0.950193 +v 5.254944 163.419647 32.555000 1.000000 1.000000 1.000000 +vn 0.629132 0.016436 -0.777124 +v 5.421814 164.269409 32.589600 1.000000 1.000000 1.000000 +vn 0.858746 0.190864 -0.475528 +v 5.461920 165.163818 32.818798 1.000000 1.000000 1.000000 +vn 0.907300 0.384373 -0.170483 +v 5.280166 166.038696 33.096596 1.000000 1.000000 1.000000 +vn 0.950470 0.260393 -0.169712 +v 5.588388 165.207077 33.211800 1.000000 1.000000 1.000000 +vn 0.891634 0.083794 -0.444935 +v 5.655402 164.314072 32.934196 1.000000 1.000000 1.000000 +vn 0.976362 0.134626 -0.169096 +v 5.786338 164.337784 33.327198 1.000000 1.000000 1.000000 +vn 0.895213 -0.032502 -0.444451 +v 5.738212 163.434998 33.050598 1.000000 1.000000 1.000000 +vn 0.687864 -0.090706 -0.720150 +v 5.501214 163.426636 32.706001 1.000000 1.000000 1.000000 +vn 0.632866 -0.269997 -0.725660 +v 5.328678 161.759216 32.937401 1.000000 1.000000 1.000000 +vn 0.239264 -0.206332 -0.948778 +v 5.090146 161.826187 32.786400 1.000000 1.000000 1.000000 +vn 0.516740 -0.356103 -0.778569 +v 4.777802 160.287140 33.156197 1.000000 1.000000 1.000000 +vn 0.125311 -0.281590 -0.951317 +v 4.150336 159.751328 33.120998 1.000000 1.000000 1.000000 +vn -0.009354 -0.306646 -0.951778 +v 2.463222 158.215057 33.466999 1.000000 1.000000 1.000000 +vn -0.268850 -0.004290 -0.963173 +v 3.966136 159.906204 33.126198 1.000000 1.000000 1.000000 +vn -0.276771 -0.083805 -0.957274 +v 4.864232 161.888977 32.791397 1.000000 1.000000 1.000000 +vn -0.236858 -0.155961 -0.958945 +v 5.021716 163.411285 32.560196 1.000000 1.000000 1.000000 +vn -0.165850 -0.241763 -0.956057 +v 4.516290 165.635452 32.212997 1.000000 1.000000 1.000000 +vn -0.263837 0.144592 -0.953668 +v 2.353876 158.438309 33.472198 1.000000 1.000000 1.000000 +vn -0.134543 -0.270913 -0.953155 +v 0.335754 157.562042 33.814198 1.000000 1.000000 1.000000 +vn -0.177663 0.214653 -0.960396 +v 0.320824 157.814590 33.819397 1.000000 1.000000 1.000000 +vn -0.218359 -0.232787 -0.947697 +v -1.139114 157.686234 34.045601 1.000000 1.000000 1.000000 +vn -0.071740 0.668581 -0.740171 +v -0.373888 158.056000 34.071396 1.000000 1.000000 1.000000 +vn -0.304270 0.684876 -0.662091 +v 0.982932 158.152267 33.838799 1.000000 1.000000 1.000000 +vn -0.100226 0.254958 -0.961744 +v -1.088588 157.933197 34.050598 1.000000 1.000000 1.000000 +vn -0.301306 -0.122898 -0.945574 +v -3.084224 158.633667 34.380196 1.000000 1.000000 1.000000 +vn -0.013783 0.249728 -0.968218 +v -2.947378 158.838776 34.385399 1.000000 1.000000 1.000000 +vn 0.174184 0.696049 -0.696545 +v -1.616728 158.344833 34.288799 1.000000 1.000000 1.000000 +vn -0.326997 0.003032 -0.945020 +v -4.558996 160.408524 34.726196 1.000000 1.000000 1.000000 +vn -0.374656 -0.496526 -0.783004 +v -2.568242 157.972275 34.415398 1.000000 1.000000 1.000000 +vn -0.276231 -0.611954 -0.741086 +v -1.192462 157.425293 34.196598 1.000000 1.000000 1.000000 +vn 0.147777 0.251948 -0.956391 +v -4.356706 160.534103 34.731400 1.000000 1.000000 1.000000 +vn -0.655597 -0.212520 -0.724588 +v -4.772602 160.275970 34.877396 1.000000 1.000000 1.000000 +vn -0.290447 0.116095 -0.949822 +v -5.233160 162.689896 35.073399 1.000000 1.000000 1.000000 +vn -0.552919 -0.291737 -0.780493 +v -4.342738 159.583893 34.762596 1.000000 1.000000 1.000000 +vn -0.510588 -0.449066 -0.733239 +v -3.228718 158.417374 34.531197 1.000000 1.000000 1.000000 +vn 0.225213 0.170620 -0.959254 +v -5.000950 162.715012 35.078598 1.000000 1.000000 1.000000 +vn -0.626830 -0.056053 -0.777137 +v -5.346072 161.828964 35.107998 1.000000 1.000000 1.000000 +vn -0.692611 0.047067 -0.719774 +v -5.478348 162.664780 35.224396 1.000000 1.000000 1.000000 +vn -0.253543 0.190943 -0.948292 +v -5.169068 164.291733 35.304798 1.000000 1.000000 1.000000 +vn 0.270056 0.101090 -0.957523 +v -4.939716 164.245697 35.309799 1.000000 1.000000 1.000000 +vn -0.650175 0.228996 -0.724454 +v -5.411256 164.340576 35.455799 1.000000 1.000000 1.000000 +vn -0.145137 0.272472 -0.951154 +v -4.362088 166.430786 35.639397 1.000000 1.000000 1.000000 +vn -0.540142 0.321890 -0.777582 +v -4.954304 165.850327 35.674599 1.000000 1.000000 1.000000 +vn -0.882302 0.224406 -0.413744 +v -5.644330 164.388016 35.800400 1.000000 1.000000 1.000000 +vn -0.874337 0.096829 -0.475561 +v -5.736694 163.520126 35.685196 1.000000 1.000000 1.000000 +vn -0.013472 0.306695 -0.951712 +v -2.775668 168.089828 35.985397 1.000000 1.000000 1.000000 +vn 0.268013 0.021244 -0.963181 +v -4.168528 166.289856 35.644600 1.000000 1.000000 1.000000 +vn -0.501663 0.456888 -0.734566 +v -4.566462 166.580093 35.790596 1.000000 1.000000 1.000000 +vn -0.791439 0.404833 -0.457968 +v -5.167692 165.961960 36.019199 1.000000 1.000000 1.000000 +vn -0.933496 0.291679 -0.208587 +v -5.596320 165.183365 36.295601 1.000000 1.000000 1.000000 +vn -0.983324 0.071509 -0.167215 +v -5.869484 163.527100 36.078201 1.000000 1.000000 1.000000 +vn -0.889975 0.422414 -0.171789 +v -5.287324 166.024750 36.412201 1.000000 1.000000 1.000000 +vn -0.722285 0.520920 -0.454914 +v -4.763138 166.723801 36.134998 1.000000 1.000000 1.000000 +vn -0.342870 0.508510 -0.789847 +v -3.529076 167.827515 36.021797 1.000000 1.000000 1.000000 +vn -0.627495 0.606628 -0.488112 +v -4.266558 167.411697 36.250198 1.000000 1.000000 1.000000 +vn -0.823689 0.539879 -0.173398 +v -4.873398 166.804733 36.528198 1.000000 1.000000 1.000000 +vn -0.741256 0.647954 -0.175198 +v -4.365334 167.507980 36.643196 1.000000 1.000000 1.000000 +vn -0.547066 0.697878 -0.462262 +v -3.681076 168.024261 36.366398 1.000000 1.000000 1.000000 +vn -0.259387 0.615946 -0.743861 +v -2.905690 168.315887 36.136597 1.000000 1.000000 1.000000 +vn -0.643118 0.745085 -0.176771 +v -3.766280 168.134491 36.759399 1.000000 1.000000 1.000000 +vn -0.439296 0.768290 -0.465564 +v -3.030846 168.534943 36.480999 1.000000 1.000000 1.000000 +vn -0.772017 0.617369 0.151148 +v -4.374874 167.517746 37.458801 1.000000 1.000000 1.000000 +vn -0.849570 0.505839 0.149526 +v -4.884058 166.811722 37.343597 1.000000 1.000000 1.000000 +vn -0.722544 0.523114 0.451976 +v -4.262258 167.407516 37.926998 1.000000 1.000000 1.000000 +vn -0.769741 0.378783 0.513831 +v -4.758324 166.721024 37.811996 1.000000 1.000000 1.000000 +vn -0.678346 0.718634 0.153009 +v -3.774508 168.145645 37.574997 1.000000 1.000000 1.000000 +vn -0.800861 0.301667 0.517318 +v -5.162476 165.959167 37.695999 1.000000 1.000000 1.000000 +vn -0.910360 0.386209 0.148618 +v -5.298884 166.030319 37.227798 1.000000 1.000000 1.000000 +vn -0.952814 0.265244 0.147619 +v -5.608562 165.188950 37.111198 1.000000 1.000000 1.000000 +vn -0.874870 0.180154 0.449608 +v -5.464172 165.138702 37.579399 1.000000 1.000000 1.000000 +vn -0.976512 0.142853 0.161302 +v -5.787626 164.417328 37.008999 1.000000 1.000000 1.000000 +vn -0.988890 0.021065 0.147148 +v -5.882334 163.527100 36.893799 1.000000 1.000000 1.000000 +vn -0.556121 0.325349 0.764773 +v -4.086310 167.235886 38.264801 1.000000 1.000000 1.000000 +vn -0.286522 0.168784 0.943089 +v -2.784732 168.105179 38.636200 1.000000 1.000000 1.000000 +vn -0.459690 0.495240 0.737172 +v -2.902794 168.311691 38.495796 1.000000 1.000000 1.000000 +vn -0.634888 0.601393 0.485020 +v -3.677354 168.018677 38.043198 1.000000 1.000000 1.000000 +vn -0.452936 0.099657 0.885956 +v -4.376328 166.441940 38.290199 1.000000 1.000000 1.000000 +vn -0.652534 0.091019 0.752273 +v -5.238606 165.060562 37.917198 1.000000 1.000000 1.000000 +vn -0.546854 0.700267 0.458886 +v -3.027782 168.529373 38.157997 1.000000 1.000000 1.000000 +vn -0.567771 0.808662 0.153952 +v -3.107774 168.668900 37.689598 1.000000 1.000000 1.000000 +vn -0.444012 0.882516 0.154983 +v -2.375260 169.086105 37.805000 1.000000 1.000000 1.000000 +vn -0.528382 0.830153 -0.177925 +v -3.101002 168.656342 36.874199 1.000000 1.000000 1.000000 +vn -0.435040 0.754385 0.491572 +v -2.314118 168.936798 38.273399 1.000000 1.000000 1.000000 +vn -0.307787 0.938369 0.157259 +v -1.595872 169.390289 37.920399 1.000000 1.000000 1.000000 +vn -0.400938 0.898363 -0.179421 +v -2.370072 169.073547 36.989399 1.000000 1.000000 1.000000 +vn -0.310263 0.809843 -0.497886 +v -2.316462 168.942383 36.596397 1.000000 1.000000 1.000000 +vn -0.192968 0.860644 -0.471228 +v -1.556372 169.238205 36.711800 1.000000 1.000000 1.000000 +vn -0.262476 0.947837 -0.180863 +v -1.592382 169.376343 37.104797 1.000000 1.000000 1.000000 +vn -0.087786 0.599210 -0.795765 +v -1.492126 168.989838 36.367199 1.000000 1.000000 1.000000 +vn -0.060528 0.880264 -0.470607 +v -0.758024 169.416809 36.828201 1.000000 1.000000 1.000000 +vn 0.027327 0.667790 -0.743848 +v -0.726740 169.162857 36.483597 1.000000 1.000000 1.000000 +vn -0.115701 0.976610 -0.181232 +v -0.775558 169.559128 37.221397 1.000000 1.000000 1.000000 +vn 0.078710 0.862075 -0.500630 +v 0.053714 169.471222 36.944397 1.000000 1.000000 1.000000 +vn 0.200670 0.246778 -0.948068 +v 0.785004 168.882385 36.563980 1.000000 1.000000 1.000000 +vn 0.113922 0.278642 -0.953615 +v -0.694236 168.897736 36.332596 1.000000 1.000000 1.000000 +vn 0.230593 0.627789 -0.743443 +v 0.821820 169.146103 36.714996 1.000000 1.000000 1.000000 +vn 0.192891 -0.202973 -0.959997 +v -0.663452 168.646576 36.337799 1.000000 1.000000 1.000000 +vn 0.273425 -0.127206 -0.953445 +v -2.652520 167.874954 35.990601 1.000000 1.000000 1.000000 +vn 0.292180 0.142353 -0.945709 +v 2.785220 168.081467 36.898579 1.000000 1.000000 1.000000 +vn 0.118854 -0.248042 -0.961431 +v 0.750144 168.632614 36.569000 1.000000 1.000000 1.000000 +vn 0.223945 0.870956 -0.437361 +v 0.857240 169.401459 37.059601 1.000000 1.000000 1.000000 +vn 0.338195 0.520475 -0.784047 +v 2.228822 168.703781 36.933777 1.000000 1.000000 1.000000 +vn 0.477567 0.481133 -0.735147 +v 2.915758 168.307510 37.049797 1.000000 1.000000 1.000000 +vn 0.326770 0.017683 -0.944939 +v 4.368320 166.419617 37.244797 1.000000 1.000000 1.000000 +vn 0.032043 -0.248456 -0.968113 +v 2.661596 167.866592 36.903801 1.000000 1.000000 1.000000 +vn 0.424812 0.771838 -0.473076 +v 2.324856 168.938202 37.278397 1.000000 1.000000 1.000000 +vn 0.300754 0.928466 -0.217941 +v 1.592872 169.376343 37.554798 1.000000 1.000000 1.000000 +vn 0.047151 0.982776 -0.178683 +v 0.054972 169.614944 37.337399 1.000000 1.000000 1.000000 +vn 0.548253 0.697328 -0.461684 +v 3.041390 168.526581 37.394180 1.000000 1.000000 1.000000 +vn 0.446545 0.876748 -0.178636 +v 2.378686 169.069366 37.671398 1.000000 1.000000 1.000000 +vn 0.271074 0.949604 0.157391 +v 1.596348 169.388901 38.370377 1.000000 1.000000 1.000000 +vn 0.130849 0.976263 0.172595 +v 0.879026 169.556335 38.268196 1.000000 1.000000 1.000000 +vn -0.011257 0.987330 0.158281 +v 0.055088 169.628891 38.153000 1.000000 1.000000 1.000000 +vn 0.174005 0.862593 0.475033 +v 1.555238 169.231216 38.838600 1.000000 1.000000 1.000000 +vn -0.039639 0.878468 0.476154 +v 0.053654 169.464233 38.621201 1.000000 1.000000 1.000000 +vn 0.406600 0.900124 0.156378 +v 2.383886 169.083313 38.486977 1.000000 1.000000 1.000000 +vn 0.070072 0.632933 0.771029 +v 1.491006 168.984253 39.176376 1.000000 1.000000 1.000000 +vn -0.093134 0.647896 0.756014 +v 0.051416 169.208893 38.959000 1.000000 1.000000 1.000000 +vn 0.321765 0.823700 0.466890 +v 2.322500 168.932617 38.955200 1.000000 1.000000 1.000000 +vn -0.193069 0.845859 0.497239 +v -0.757258 169.411224 38.505196 1.000000 1.000000 1.000000 +vn -0.297972 0.556609 0.775499 +v -1.490632 168.984253 38.726398 1.000000 1.000000 1.000000 +vn -0.092000 0.333439 0.938272 +v 0.787568 168.900528 39.214779 1.000000 1.000000 1.000000 +vn -0.193536 0.305221 0.932407 +v -0.696506 168.915878 38.983398 1.000000 1.000000 1.000000 +vn -0.162649 0.974107 0.157041 +v -0.777248 169.573074 38.036797 1.000000 1.000000 1.000000 +vn -0.319019 0.825065 0.466364 +v -1.554800 169.231216 38.388599 1.000000 1.000000 1.000000 +vn 0.062700 0.346793 0.935844 +v 2.794322 168.096817 39.549400 1.000000 1.000000 1.000000 +vn 0.164100 0.607285 0.777352 +v 2.226582 168.698212 39.292976 1.000000 1.000000 1.000000 +vn 0.345278 0.528315 0.775672 +v 3.536928 167.810776 39.523998 1.000000 1.000000 1.000000 +vn 0.174671 0.268892 0.947200 +v 4.382586 166.430786 39.895397 1.000000 1.000000 1.000000 +vn 0.516615 0.439943 0.734547 +v 4.568472 166.564743 39.754978 1.000000 1.000000 1.000000 +vn 0.629921 0.605415 0.486489 +v 4.272970 167.393570 39.302399 1.000000 1.000000 1.000000 +vn 0.550383 0.696787 0.459963 +v 3.689276 168.007507 39.186180 1.000000 1.000000 1.000000 +vn 0.430480 0.755687 0.493582 +v 3.038314 168.520996 39.071178 1.000000 1.000000 1.000000 +vn 0.724827 0.519601 0.452373 +v 4.765250 166.708450 39.417198 1.000000 1.000000 1.000000 +vn 0.774382 0.412838 0.479477 +v 5.165284 165.949402 39.532600 1.000000 1.000000 1.000000 +vn 0.829903 0.537140 0.150805 +v 4.891178 166.799164 38.948776 1.000000 1.000000 1.000000 +vn 0.747976 0.645940 0.152624 +v 4.385906 167.503799 38.834179 1.000000 1.000000 1.000000 +vn 0.649798 0.744398 0.153735 +v 3.786790 168.133102 38.717999 1.000000 1.000000 1.000000 +vn 0.772565 0.610627 -0.174006 +v 4.376328 167.494034 38.018600 1.000000 1.000000 1.000000 +vn 0.895271 0.419680 0.149528 +v 5.301796 166.020569 39.064178 1.000000 1.000000 1.000000 +vn 0.849058 0.499460 -0.172166 +v 4.880506 166.792191 38.133400 1.000000 1.000000 1.000000 +vn 0.943074 0.297551 0.148576 +v 5.607790 165.186157 39.179581 1.000000 1.000000 1.000000 +vn 0.908976 0.380292 -0.170706 +v 5.290220 166.014969 38.248596 1.000000 1.000000 1.000000 +vn 0.788869 0.417783 -0.450714 +v 4.770052 166.711243 37.740196 1.000000 1.000000 1.000000 +vn 0.723792 0.519631 -0.453992 +v 4.277282 167.397751 37.625599 1.000000 1.000000 1.000000 +vn 0.679860 0.711990 -0.175674 +v 3.778524 168.121933 37.902397 1.000000 1.000000 1.000000 +vn 0.826361 0.298418 -0.477571 +v 5.170498 165.952179 37.855598 1.000000 1.000000 1.000000 +vn 0.639347 0.254160 -0.725699 +v 4.573042 166.568924 37.395779 1.000000 1.000000 1.000000 +vn 0.531656 0.327101 -0.781247 +v 4.100626 167.227524 37.280998 1.000000 1.000000 1.000000 +vn 0.635705 0.599114 -0.486767 +v 3.693010 168.011688 37.509377 1.000000 1.000000 1.000000 +vn 0.570918 0.801721 -0.176907 +v 3.111802 168.647964 37.787376 1.000000 1.000000 1.000000 +vn 0.298388 -0.097791 -0.949422 +v 5.184608 164.192673 37.591797 1.000000 1.000000 1.000000 +vn -0.128968 -0.260751 -0.956753 +v 4.174438 166.278702 37.249779 1.000000 1.000000 1.000000 +vn -0.212388 -0.184612 -0.959588 +v 4.954510 164.150803 37.597000 1.000000 1.000000 1.000000 +vn 0.266623 -0.174627 -0.947849 +v 5.221534 162.590836 37.823196 1.000000 1.000000 1.000000 +vn 0.694475 -0.003163 -0.719510 +v 5.427582 164.237320 37.742779 1.000000 1.000000 1.000000 +vn 0.621767 0.095416 -0.777369 +v 5.243048 165.060562 37.626396 1.000000 1.000000 1.000000 +vn -0.262054 -0.117941 -0.957819 +v 4.989786 162.620132 37.828178 1.000000 1.000000 1.000000 +vn 0.166306 -0.252003 -0.953330 +v 4.551116 160.395966 38.157799 1.000000 1.000000 1.000000 +vn 0.664562 -0.187068 -0.723438 +v 5.466218 162.560135 37.974178 1.000000 1.000000 1.000000 +vn -0.307177 -0.006875 -0.951627 +v 4.349124 160.522949 38.162998 1.000000 1.000000 1.000000 +vn 0.561474 -0.286472 -0.776325 +v 5.105350 161.021088 38.193001 1.000000 1.000000 1.000000 +vn 0.088935 -0.295017 -0.951344 +v 3.637456 159.135971 38.389198 1.000000 1.000000 1.000000 +vn 0.895136 -0.167864 -0.412981 +v 5.701726 162.529434 38.318798 1.000000 1.000000 1.000000 +vn 0.878914 -0.041487 -0.475174 +v 5.739216 163.402924 38.203598 1.000000 1.000000 1.000000 +vn 0.985897 -0.009282 -0.167098 +v 5.872086 163.405701 38.596581 1.000000 1.000000 1.000000 +vn 0.976947 0.130409 -0.169019 +v 5.792492 164.304291 38.480598 1.000000 1.000000 1.000000 +vn 0.892123 0.080526 -0.444559 +v 5.661414 164.280579 38.087399 1.000000 1.000000 1.000000 +vn 0.951340 0.257245 -0.169639 +v 5.595560 165.181961 38.363998 1.000000 1.000000 1.000000 +vn 0.873372 0.195639 -0.446035 +v 5.468922 165.138702 37.971001 1.000000 1.000000 1.000000 +vn -0.294713 0.074478 -0.952679 +v 3.476006 159.317383 38.394180 1.000000 1.000000 1.000000 +vn -0.059423 -0.307107 -0.949818 +v 1.761338 157.878784 38.735378 1.000000 1.000000 1.000000 +vn -0.170684 0.267563 -0.948302 +v 0.280884 157.811813 38.970177 1.000000 1.000000 1.000000 +vn -0.297227 0.195092 -0.934663 +v 2.336172 158.427155 38.624378 1.000000 1.000000 1.000000 +vn -0.229867 -0.233884 -0.944701 +v -2.198026 158.071350 39.337601 1.000000 1.000000 1.000000 +vn -0.094212 0.669544 -0.736774 +v -0.001254 158.040649 39.150177 1.000000 1.000000 1.000000 +vn -0.302606 0.691975 -0.655439 +v 0.951244 158.143890 38.991798 1.000000 1.000000 1.000000 +vn -0.180592 -0.255157 -0.949885 +v -0.750136 157.609497 39.119999 1.000000 1.000000 1.000000 +vn -0.432239 0.502861 -0.748532 +v 2.234346 158.637848 38.760201 1.000000 1.000000 1.000000 +vn -0.288648 0.840463 -0.458590 +v 0.904086 158.396454 39.326576 1.000000 1.000000 1.000000 +vn -0.504990 0.716042 -0.481944 +v 2.123610 158.866684 39.094978 1.000000 1.000000 1.000000 +vn -0.121285 0.872735 -0.472888 +v 0.255276 158.305756 39.440781 1.000000 1.000000 1.000000 +vn -0.688722 0.548316 -0.474354 +v 3.159762 159.675980 38.864979 1.000000 1.000000 1.000000 +vn -0.561613 0.368693 -0.740714 +v 3.324494 159.488998 38.530197 1.000000 1.000000 1.000000 +vn -0.801704 0.372680 -0.467312 +v 3.953454 160.771317 38.633598 1.000000 1.000000 1.000000 +vn -0.647844 0.218778 -0.729681 +v 4.159568 160.641541 38.298779 1.000000 1.000000 1.000000 +vn -0.728932 0.644302 -0.231372 +v 3.063548 159.784805 39.262379 1.000000 1.000000 1.000000 +vn -0.839638 0.500792 -0.210275 +v 3.833076 160.846664 39.030998 1.000000 1.000000 1.000000 +vn -0.885917 0.244186 -0.394366 +v 4.236380 161.399216 38.517601 1.000000 1.000000 1.000000 +vn -0.740599 0.082423 -0.666873 +v 4.666114 162.007584 38.066399 1.000000 1.000000 1.000000 +vn -0.892934 0.014179 -0.449964 +v 4.535848 162.677338 38.298779 1.000000 1.000000 1.000000 +vn -0.688469 -0.129342 -0.713639 +v 4.803682 163.377792 37.848999 1.000000 1.000000 1.000000 +vn -0.877600 -0.193308 -0.438691 +v 4.503776 164.068481 38.067596 1.000000 1.000000 1.000000 +vn -0.688172 -0.341634 -0.640082 +v 4.577458 164.830338 37.616379 1.000000 1.000000 1.000000 +vn -0.972038 0.056066 -0.228033 +v 4.397726 162.694077 38.696381 1.000000 1.000000 1.000000 +vn -0.964257 -0.150969 -0.217755 +v 4.366632 164.044769 38.464996 1.000000 1.000000 1.000000 +vn -0.982753 0.180792 -0.038874 +v 4.250090 162.119202 39.253399 1.000000 1.000000 1.000000 +vn -0.999403 -0.011427 0.032605 +v 4.375402 163.366638 39.035980 1.000000 1.000000 1.000000 +vn -0.892103 0.334607 0.303629 +v 4.223904 161.404800 40.194199 1.000000 1.000000 1.000000 +vn -0.870763 0.490452 0.035047 +v 3.788696 160.874573 39.485779 1.000000 1.000000 1.000000 +vn -0.714747 0.696975 0.057992 +v 3.028078 159.823883 39.717178 1.000000 1.000000 1.000000 +vn -0.773600 0.482886 0.410322 +v 3.941816 160.778290 40.310181 1.000000 1.000000 1.000000 +vn -0.687674 0.600730 0.407711 +v 3.583226 160.204819 40.425377 1.000000 1.000000 1.000000 +vn -0.609855 0.674110 0.416717 +v 3.150466 159.685745 40.541580 1.000000 1.000000 1.000000 +vn -0.554529 0.411719 0.723177 +v 4.145998 160.649918 40.657799 1.000000 1.000000 1.000000 +vn -0.391179 0.566069 0.725635 +v 3.313654 159.501556 40.889198 1.000000 1.000000 1.000000 +vn -0.490491 0.792257 0.362970 +v 2.661390 159.243423 40.656197 1.000000 1.000000 1.000000 +vn 0.077700 0.243587 0.966762 +v 1.687128 158.104828 41.389977 1.000000 1.000000 1.000000 +vn -0.043831 0.269974 0.961869 +v 3.484206 159.309006 41.043800 1.000000 1.000000 1.000000 +vn -0.126801 0.671221 0.730332 +v 1.604524 158.357376 41.235378 1.000000 1.000000 1.000000 +vn -0.438132 0.832413 0.339307 +v 2.117366 158.879242 40.771599 1.000000 1.000000 1.000000 +vn -0.231539 0.861399 0.452086 +v 1.525484 158.597382 40.887798 1.000000 1.000000 1.000000 +vn -0.110316 0.897570 0.426848 +v 0.901424 158.410400 41.003197 1.000000 1.000000 1.000000 +vn -0.070382 0.935129 0.347246 +v 0.267732 158.065765 41.464996 1.000000 1.000000 1.000000 +vn -0.512389 0.857345 0.049171 +v 2.035108 159.048080 39.947197 1.000000 1.000000 1.000000 +vn -0.369970 0.928972 -0.011499 +v 1.466210 158.778778 40.063400 1.000000 1.000000 1.000000 +vn -0.533392 0.815711 -0.223848 +v 2.058940 158.999237 39.492378 1.000000 1.000000 1.000000 +vn 0.044142 0.880359 0.472250 +v 0.254520 158.321106 41.117378 1.000000 1.000000 1.000000 +vn 0.227638 0.633306 0.739665 +v -0.683430 158.111816 41.619980 1.000000 1.000000 1.000000 +vn 0.182644 0.206661 0.961214 +v -0.718564 157.846695 41.774597 1.000000 1.000000 1.000000 +vn 0.230213 0.784077 0.576390 +v -0.649808 158.364365 41.272377 1.000000 1.000000 1.000000 +vn -0.008631 0.972162 0.234151 +v 0.247182 158.463440 40.723598 1.000000 1.000000 1.000000 +vn 0.325741 0.858335 0.396426 +v -1.290352 158.515060 41.382198 1.000000 1.000000 1.000000 +vn 0.404533 0.550974 0.729919 +v -2.002458 158.533188 41.837379 1.000000 1.000000 1.000000 +vn 0.473784 0.758622 0.447237 +v -1.903876 158.764816 41.489777 1.000000 1.000000 1.000000 +vn 0.013130 0.999485 -0.029298 +v -0.001194 158.505295 40.337196 1.000000 1.000000 1.000000 +vn 0.284191 0.957204 0.054741 +v -1.240268 158.699249 40.557800 1.000000 1.000000 1.000000 +vn 0.579964 0.721847 0.377596 +v -2.474950 159.105286 41.594597 1.000000 1.000000 1.000000 +vn 0.557260 0.828634 0.053169 +v -2.378852 159.267136 40.770397 1.000000 1.000000 1.000000 +vn 0.518514 0.818347 -0.247896 +v -2.406714 159.219711 40.315578 1.000000 1.000000 1.000000 +vn 0.322530 0.839073 -0.438099 +v -1.909502 158.750870 39.813198 1.000000 1.000000 1.000000 +vn 0.707689 0.577408 0.407158 +v -3.106834 159.641098 41.720779 1.000000 1.000000 1.000000 +vn 0.557135 0.397855 0.728911 +v -3.267716 159.454117 42.068398 1.000000 1.000000 1.000000 +vn 0.734798 0.676278 0.052164 +v -2.986196 159.780624 40.896400 1.000000 1.000000 1.000000 +vn 0.685354 0.689963 -0.232897 +v -3.021164 159.740158 40.441597 1.000000 1.000000 1.000000 +vn 0.590765 0.649107 -0.479224 +v -3.116012 159.629929 40.044197 1.000000 1.000000 1.000000 +vn 0.446584 0.753227 -0.482920 +v -2.482264 159.094116 39.917976 1.000000 1.000000 1.000000 +vn 0.723656 0.504460 -0.471000 +v -3.937966 160.739212 40.243980 1.000000 1.000000 1.000000 +vn 0.834650 0.496729 -0.237949 +v -3.818102 160.815964 40.641579 1.000000 1.000000 1.000000 +vn 0.879327 0.472765 0.057250 +v -3.773916 160.843872 41.096378 1.000000 1.000000 1.000000 +vn 0.816774 0.413553 0.402310 +v -3.926380 160.746201 41.920597 1.000000 1.000000 1.000000 +vn 0.879799 0.259767 0.398089 +v -4.215046 161.379669 42.016598 1.000000 1.000000 1.000000 +vn 0.900530 0.161776 0.403577 +v -4.416588 162.048050 42.109779 1.000000 1.000000 1.000000 +vn 0.965641 0.255580 0.047089 +v -4.245082 162.094086 41.285400 1.000000 1.000000 1.000000 +vn 0.650712 0.242447 0.719579 +v -4.129698 160.617828 42.268379 1.000000 1.000000 1.000000 +vn 0.848068 0.186284 0.496064 +v -4.645308 161.985245 42.457397 1.000000 1.000000 1.000000 +vn 0.918081 0.022504 0.395754 +v -4.530710 162.749893 42.202579 1.000000 1.000000 1.000000 +vn -0.237104 -0.119448 0.964113 +v -5.270908 163.494995 42.791580 1.000000 1.000000 1.000000 +vn 0.264584 0.081183 0.960939 +v -3.435836 159.258774 42.222977 1.000000 1.000000 1.000000 +vn 0.227071 0.134542 0.964540 +v -2.105468 158.290405 41.991997 1.000000 1.000000 1.000000 +vn 0.994856 0.101186 0.004705 +v -4.354776 162.769424 41.378197 1.000000 1.000000 1.000000 +vn 0.896458 -0.096730 0.432442 +v -4.550550 163.461517 42.293198 1.000000 1.000000 1.000000 +vn 0.966675 0.074621 -0.244890 +v -4.405760 162.763855 40.923397 1.000000 1.000000 1.000000 +vn 0.894843 0.164471 -0.414976 +v -4.544086 162.748505 40.525997 1.000000 1.000000 1.000000 +vn 0.956253 0.002318 -0.292531 +v -4.425046 163.455933 41.014000 1.000000 1.000000 1.000000 +vn 0.999246 -0.038821 0.000874 +v -4.373830 163.453140 41.468800 1.000000 1.000000 1.000000 +vn 0.982725 -0.152728 -0.104523 +v -4.301242 164.131271 41.556999 1.000000 1.000000 1.000000 +vn 0.536348 0.699099 -0.472855 +v -4.801854 163.474075 40.281799 1.000000 1.000000 1.000000 +vn 0.873935 -0.238612 0.423440 +v -4.475014 164.167557 42.381180 1.000000 1.000000 1.000000 +vn 0.722681 0.229613 -0.651928 +v -4.660488 161.981064 40.098396 1.000000 1.000000 1.000000 +vn 0.338774 0.137815 -0.930720 +v -5.020622 163.483841 40.145996 1.000000 1.000000 1.000000 +vn 0.778834 0.323467 -0.537389 +v -4.227482 161.375488 40.339996 1.000000 1.000000 1.000000 +vn 0.450247 0.363787 -0.815437 +v -4.143204 160.608047 39.909199 1.000000 1.000000 1.000000 +vn 0.184162 0.183158 -0.965680 +v -4.650458 161.187119 39.869400 1.000000 1.000000 1.000000 +vn 0.483442 0.636516 -0.600941 +v -3.278402 159.441559 39.709396 1.000000 1.000000 1.000000 +vn 0.251782 0.616951 -0.745639 +v -2.611630 158.876450 39.583397 1.000000 1.000000 1.000000 +vn -0.238543 -0.002968 -0.971127 +v -4.533104 160.359695 39.768398 1.000000 1.000000 1.000000 +vn -0.339590 0.031965 -0.940030 +v -5.099082 161.862457 39.957581 1.000000 1.000000 1.000000 +vn -0.654101 -0.158492 -0.739617 +v -5.094394 160.990372 40.015396 1.000000 1.000000 1.000000 +vn -0.581629 -0.342153 -0.737997 +v -4.295384 159.518295 39.820599 1.000000 1.000000 1.000000 +vn -0.259926 -0.097367 -0.960707 +v -3.586896 159.082962 39.568581 1.000000 1.000000 1.000000 +vn -0.672985 0.009419 -0.739596 +v -5.475926 162.645248 40.201401 1.000000 1.000000 1.000000 +vn -0.272080 0.121413 -0.954584 +v -5.253746 163.494995 40.140999 1.000000 1.000000 1.000000 +vn -0.866510 -0.149718 -0.476178 +v -5.567918 161.734100 40.452980 1.000000 1.000000 1.000000 +vn -0.894594 -0.039284 -0.445149 +v -5.711780 162.620132 40.545799 1.000000 1.000000 1.000000 +vn -0.682346 0.113035 -0.722237 +v -5.499900 163.506165 40.292000 1.000000 1.000000 1.000000 +vn -0.250318 0.180274 -0.951232 +v -4.973088 165.095459 40.313999 1.000000 1.000000 1.000000 +vn -0.104002 0.177904 -0.978537 +v -4.308620 166.514511 40.475197 1.000000 1.000000 1.000000 +vn -0.625510 0.273704 -0.730632 +v -5.206096 165.181961 40.464996 1.000000 1.000000 1.000000 +vn -0.891974 0.078907 -0.445146 +v -5.736796 163.517334 40.636398 1.000000 1.000000 1.000000 +vn -0.856169 0.196462 -0.477888 +v -5.641562 164.406158 40.724400 1.000000 1.000000 1.000000 +vn -0.982659 -0.076456 -0.168925 +v -5.844006 162.604782 40.938999 1.000000 1.000000 1.000000 +vn -0.984068 0.055285 -0.168981 +v -5.869586 163.524307 41.029598 1.000000 1.000000 1.000000 +vn -0.967705 0.186526 -0.169574 +v -5.772150 164.434067 41.117599 1.000000 1.000000 1.000000 +vn -0.838683 0.309092 -0.448412 +v -5.430338 165.265686 40.809601 1.000000 1.000000 1.000000 +vn -0.934714 0.311926 -0.170331 +v -5.556034 165.311722 41.202797 1.000000 1.000000 1.000000 +vn -0.775165 0.410262 -0.480421 +v -5.129762 166.040100 40.888199 1.000000 1.000000 1.000000 +vn -0.886130 0.430492 -0.171610 +v -5.248506 166.104279 41.281399 1.000000 1.000000 1.000000 +vn -0.725219 0.516839 -0.454900 +v -4.704764 166.814514 40.970798 1.000000 1.000000 1.000000 +vn -0.526468 0.425077 -0.736303 +v -4.510484 166.666595 40.626198 1.000000 1.000000 1.000000 +vn -0.901810 0.405682 0.148869 +v -5.259990 166.111252 42.096798 1.000000 1.000000 1.000000 +vn -0.819209 0.546683 -0.173303 +v -4.813672 166.896835 41.363800 1.000000 1.000000 1.000000 +vn -0.947032 0.284955 0.148092 +v -5.568188 165.317307 42.018196 1.000000 1.000000 1.000000 +vn -0.889112 0.112805 0.443571 +v -5.635870 164.406158 42.401398 1.000000 1.000000 1.000000 +vn -0.851845 0.221522 0.474645 +v -5.424840 165.262894 42.486580 1.000000 1.000000 1.000000 +vn -0.976465 0.157399 0.147451 +v -5.784794 164.435455 41.933197 1.000000 1.000000 1.000000 +vn -0.988797 0.024804 0.147194 +v -5.882424 163.524307 41.844997 1.000000 1.000000 1.000000 +vn -0.827271 0.339990 0.447246 +v -5.124586 166.037308 42.565201 1.000000 1.000000 1.000000 +vn -0.838053 0.524450 0.150399 +v -4.824204 166.905197 42.179398 1.000000 1.000000 1.000000 +vn -0.597078 0.204406 0.775704 +v -4.913028 165.921494 42.902977 1.000000 1.000000 1.000000 +vn -0.772227 0.448204 0.450311 +v -4.700014 166.810318 42.647579 1.000000 1.000000 1.000000 +vn -0.754728 0.638218 0.151865 +v -4.288560 167.621002 42.259598 1.000000 1.000000 1.000000 +vn -0.545023 0.255171 0.798648 +v -4.505990 166.663803 42.985397 1.000000 1.000000 1.000000 +vn -0.686625 0.542425 0.484067 +v -4.178158 167.507980 42.727997 1.000000 1.000000 1.000000 +vn -0.653668 0.741136 0.153090 +v -3.663630 168.243317 42.337379 1.000000 1.000000 1.000000 +vn -0.733021 0.657278 -0.175117 +v -4.279188 167.611237 41.444199 1.000000 1.000000 1.000000 +vn -0.629088 0.603045 -0.490496 +v -4.182382 167.512177 41.050999 1.000000 1.000000 1.000000 +vn -0.629301 0.756951 -0.176083 +v -3.655634 168.232162 41.521999 1.000000 1.000000 1.000000 +vn -0.545895 0.698572 -0.462597 +v -3.572926 168.120529 41.128799 1.000000 1.000000 1.000000 +vn -0.380732 0.549481 -0.743716 +v -3.425394 167.918213 40.784397 1.000000 1.000000 1.000000 +vn -0.426602 0.756376 -0.495889 +v -2.898944 168.617279 41.202999 1.000000 1.000000 1.000000 +vn -0.511410 0.840549 -0.178708 +v -2.966048 168.741455 41.596199 1.000000 1.000000 1.000000 +vn -0.537296 0.829024 0.155024 +v -2.972524 168.754013 42.411579 1.000000 1.000000 1.000000 +vn -0.193279 0.629400 -0.752661 +v -2.064348 168.776352 40.931999 1.000000 1.000000 1.000000 +vn -0.317901 0.824138 -0.468760 +v -2.153234 169.013550 41.276600 1.000000 1.000000 1.000000 +vn -0.380742 0.906928 -0.180327 +v -2.203074 169.147507 41.669598 1.000000 1.000000 1.000000 +vn -0.587186 0.628245 0.510413 +v -3.569322 168.114960 42.805798 1.000000 1.000000 1.000000 +vn -0.513557 0.702759 0.492330 +v -2.896022 168.611694 42.879997 1.000000 1.000000 1.000000 +vn -0.403782 0.898500 0.172216 +v -2.207888 169.160065 42.485180 1.000000 1.000000 1.000000 +vn -0.261777 0.520676 0.812631 +v -2.163818 168.879593 43.186779 1.000000 1.000000 1.000000 +vn -0.335683 0.270200 0.902391 +v -3.702628 167.477295 43.189796 1.000000 1.000000 1.000000 +vn -0.269063 0.945717 0.182275 +v -1.393634 169.446106 42.557198 1.000000 1.000000 1.000000 +vn -0.146779 0.555955 0.818150 +v -1.099018 169.260529 43.189796 1.000000 1.000000 1.000000 +vn -0.124859 0.977512 0.169943 +v -0.552534 169.600983 42.627197 1.000000 1.000000 1.000000 +vn -0.017173 0.609916 0.792280 +v 0.000000 169.464233 43.189796 1.000000 1.000000 1.000000 +vn 0.052525 0.986283 0.156480 +v 0.297612 169.621918 42.694798 1.000000 1.000000 1.000000 +vn -0.087181 0.979467 -0.181780 +v -0.551326 169.587036 41.811577 1.000000 1.000000 1.000000 +vn -0.237801 0.954317 -0.180912 +v -1.390582 169.432159 41.741600 1.000000 1.000000 1.000000 +vn -0.052428 0.879710 -0.472612 +v -0.538860 169.443314 41.418400 1.000000 1.000000 1.000000 +vn -0.181897 0.845832 -0.501480 +v -1.359142 169.292618 41.348598 1.000000 1.000000 1.000000 +vn 0.066484 0.981179 -0.181293 +v 0.296952 169.607971 41.879196 1.000000 1.000000 1.000000 +vn 0.083892 0.877453 -0.472270 +v 0.290224 169.464233 41.486000 1.000000 1.000000 1.000000 +vn 0.192779 0.962717 0.189767 +v 1.120400 169.513077 42.758198 1.000000 1.000000 1.000000 +vn 0.243845 0.647408 0.722082 +v 1.942976 169.189362 43.187981 1.000000 1.000000 1.000000 +vn 0.355205 0.920052 -0.165328 +v 1.939680 169.257736 42.005997 1.000000 1.000000 1.000000 +vn 0.216730 0.959402 -0.180488 +v 1.117954 169.499130 41.942780 1.000000 1.000000 1.000000 +vn 0.216389 0.838517 -0.500066 +v 1.092642 169.358200 41.549599 1.000000 1.000000 1.000000 +vn 0.110088 0.655622 -0.747022 +v 0.278212 169.207504 41.141598 1.000000 1.000000 1.000000 +vn 0.345026 0.813590 -0.468005 +v 1.895764 169.122391 41.612801 1.000000 1.000000 1.000000 +vn 0.293470 0.592089 -0.750537 +v 1.817446 168.879593 41.268196 1.000000 1.000000 1.000000 +vn 0.457698 0.737656 -0.496363 +v 2.660656 168.762390 41.673981 1.000000 1.000000 1.000000 +vn 0.404030 0.462239 -0.789364 +v 3.230444 168.078674 41.388580 1.000000 1.000000 1.000000 +vn 0.252013 0.136887 -0.957993 +v 3.671406 167.327988 41.294579 1.000000 1.000000 1.000000 +vn 0.183502 0.229541 -0.955844 +v 1.736066 168.627045 41.117199 1.000000 1.000000 1.000000 +vn 0.571370 0.678219 -0.462120 +v 3.369634 168.286591 41.733200 1.000000 1.000000 1.000000 +vn 0.492533 0.838798 -0.232013 +v 2.722262 168.890762 42.067177 1.000000 1.000000 1.000000 +vn 0.533366 0.421967 -0.733120 +v 3.843478 167.519150 41.445599 1.000000 1.000000 1.000000 +vn 0.664295 0.590754 -0.457954 +v 4.009060 167.703339 41.790176 1.000000 1.000000 1.000000 +vn 0.612542 0.756467 -0.229238 +v 3.447656 168.403793 42.126198 1.000000 1.000000 1.000000 +vn 0.605559 0.795766 0.007454 +v 3.475542 168.445648 42.531776 1.000000 1.000000 1.000000 +vn 0.481206 0.875369 0.046581 +v 2.744278 168.936798 42.472580 1.000000 1.000000 1.000000 +vn 0.716003 0.660470 -0.226094 +v 4.101888 167.806595 42.183197 1.000000 1.000000 1.000000 +vn 0.734459 0.678653 -0.000517 +v 4.135066 167.842865 42.588779 1.000000 1.000000 1.000000 +vn 0.730141 0.481996 -0.484329 +v 4.547202 167.047531 41.843201 1.000000 1.000000 1.000000 +vn 0.802179 0.553315 -0.224394 +v 4.652480 167.135422 42.236397 1.000000 1.000000 1.000000 +vn 0.814988 0.577758 0.044625 +v 4.690112 167.167526 42.641800 1.000000 1.000000 1.000000 +vn 0.464070 0.518641 0.718089 +v 3.805704 168.095428 43.189796 1.000000 1.000000 1.000000 +vn 0.626455 0.333371 0.704569 +v 5.085614 166.422409 43.189796 1.000000 1.000000 1.000000 +vn 0.879076 0.442884 -0.176294 +v 5.123556 166.362411 42.289177 1.000000 1.000000 1.000000 +vn 0.804390 0.387506 -0.450328 +v 5.007606 166.292648 41.895981 1.000000 1.000000 1.000000 +vn 0.923560 0.313909 -0.220224 +v 5.486716 165.522430 42.339996 1.000000 1.000000 1.000000 +vn 0.835649 0.267134 -0.479927 +v 5.362552 165.470795 41.946800 1.000000 1.000000 1.000000 +vn 0.624277 0.273803 -0.731649 +v 4.800786 166.167068 41.551579 1.000000 1.000000 1.000000 +vn 0.880281 0.160889 -0.446341 +v 5.606092 164.594528 41.995598 1.000000 1.000000 1.000000 +vn 0.677707 0.101041 -0.728357 +v 5.374538 164.538712 41.650997 1.000000 1.000000 1.000000 +vn 0.963736 0.192649 -0.184660 +v 5.735882 164.625229 42.388580 1.000000 1.000000 1.000000 +vn 0.879046 0.043764 -0.474723 +v 5.721758 163.783829 42.037376 1.000000 1.000000 1.000000 +vn 0.681991 -0.075004 -0.727505 +v 5.496062 162.893616 41.737396 1.000000 1.000000 1.000000 +vn 0.259608 -0.042439 -0.964781 +v 5.250038 162.908966 41.586197 1.000000 1.000000 1.000000 +vn 0.195363 -0.011804 -0.980660 +v 5.133934 164.481506 41.500000 1.000000 1.000000 1.000000 +vn 0.892406 -0.070937 -0.445623 +v 5.732844 162.878265 42.081779 1.000000 1.000000 1.000000 +vn 0.978521 0.064168 -0.195906 +v 5.854228 163.796402 42.430580 1.000000 1.000000 1.000000 +vn 0.858099 -0.187028 -0.478211 +v 5.620910 161.979675 42.124001 1.000000 1.000000 1.000000 +vn 0.978135 -0.065583 -0.197362 +v 5.865582 162.869888 42.474979 1.000000 1.000000 1.000000 +vn 0.630959 -0.279869 -0.723577 +v 5.171670 161.206650 41.819000 1.000000 1.000000 1.000000 +vn 0.252106 -0.140205 -0.957489 +v 4.940142 161.298752 41.667976 1.000000 1.000000 1.000000 +vn 0.481247 -0.465272 -0.742915 +v 3.991436 159.141571 41.919979 1.000000 1.000000 1.000000 +vn 0.192065 -0.218528 -0.956743 +v 3.812758 159.324356 41.768997 1.000000 1.000000 1.000000 +vn 0.336945 -0.509647 -0.791661 +v 2.887098 158.166214 41.974979 1.000000 1.000000 1.000000 +vn -0.549887 -0.304588 -0.777721 +v 1.798108 157.938782 41.830997 1.000000 1.000000 1.000000 +vn -0.180951 0.114469 -0.976808 +v 3.643532 159.498764 41.773979 1.000000 1.000000 1.000000 +vn -0.828860 0.239700 -0.505505 +v 1.616110 158.464828 42.119797 1.000000 1.000000 1.000000 +vn -0.436442 0.538488 -0.720797 +v 2.520566 158.812271 41.964798 1.000000 1.000000 1.000000 +vn -0.266795 0.039712 -0.962935 +v 4.720896 161.385269 41.673180 1.000000 1.000000 1.000000 +vn -0.662637 0.372454 -0.649762 +v 3.933782 160.257828 41.875580 1.000000 1.000000 1.000000 +vn -0.182278 0.022462 -0.982990 +v 5.017030 162.924316 41.591400 1.000000 1.000000 1.000000 +vn -0.612222 -0.107378 -0.783361 +v 4.789068 163.697327 41.682800 1.000000 1.000000 1.000000 +vn -0.553551 -0.277417 -0.785252 +v 4.488416 165.109406 41.592178 1.000000 1.000000 1.000000 +vn 0.292268 0.082679 -0.952756 +v 4.585866 166.035904 41.400597 1.000000 1.000000 1.000000 +vn -0.084433 -0.193809 -0.977399 +v 3.508462 167.146591 41.299599 1.000000 1.000000 1.000000 +vn -0.003665 -0.236511 -0.971622 +v 1.658996 168.388443 41.122398 1.000000 1.000000 1.000000 +vn 0.081477 -0.229556 -0.969879 +v 0.253920 168.687042 40.995598 1.000000 1.000000 1.000000 +vn 0.103096 0.258889 -0.960390 +v 0.265736 168.939590 40.990601 1.000000 1.000000 1.000000 +vn 0.187239 -0.193748 -0.963018 +v -1.884474 168.293564 40.785999 1.000000 1.000000 1.000000 +vn -0.018855 0.604034 -0.796736 +v -0.516632 169.187958 41.073997 1.000000 1.000000 1.000000 +vn -0.017261 0.288792 -0.957236 +v -1.971958 168.527969 40.780998 1.000000 1.000000 1.000000 +vn -0.109412 0.236637 -0.965418 +v -3.272094 167.710312 40.633400 1.000000 1.000000 1.000000 +vn 0.137348 -0.114883 -0.983838 +v -3.126918 167.512177 40.638397 1.000000 1.000000 1.000000 +vn 0.528264 -0.326600 -0.783753 +v -3.500790 166.817291 40.696400 1.000000 1.000000 1.000000 +vn 0.643359 -0.159718 -0.748718 +v -4.293762 165.585205 40.533600 1.000000 1.000000 1.000000 +vn -0.672418 0.631844 -0.385522 +v 3.312044 159.840622 42.244579 1.000000 1.000000 1.000000 +vn -0.795364 0.449405 -0.406734 +v 3.738858 160.405731 42.210381 1.000000 1.000000 1.000000 +vn -0.792169 0.264907 -0.549811 +v 4.291418 161.554092 42.143780 1.000000 1.000000 1.000000 +vn -0.652375 0.170543 -0.738459 +v 4.515144 161.466187 41.808998 1.000000 1.000000 1.000000 +vn -0.510667 0.712342 -0.481444 +v 2.395654 159.031326 42.299580 1.000000 1.000000 1.000000 +vn -0.901940 0.379820 -0.205528 +v 1.534780 158.706223 42.600380 1.000000 1.000000 1.000000 +vn -0.549129 0.789964 -0.272791 +v 2.322706 159.159698 42.696980 1.000000 1.000000 1.000000 +vn -0.684597 0.686927 -0.243841 +v 3.211196 159.943878 42.642197 1.000000 1.000000 1.000000 +vn -0.770014 0.317716 0.553295 +v 1.510808 158.777374 43.189598 1.000000 1.000000 1.000000 +vn -0.491841 0.507917 0.707186 +v 2.987986 159.770859 43.189377 1.000000 1.000000 1.000000 +vn -0.638972 0.373594 0.672416 +v 3.666012 160.647125 43.189796 1.000000 1.000000 1.000000 +vn -0.676591 0.190570 0.711272 +v 4.198616 161.877808 43.188580 1.000000 1.000000 1.000000 +vn -0.965643 0.190549 -0.176706 +v 4.335400 162.269897 42.501801 1.000000 1.000000 1.000000 +vn -0.690259 -0.005299 0.723543 +v 4.399812 163.260590 43.189796 1.000000 1.000000 1.000000 +vn -0.924260 0.039596 -0.379704 +v 4.560606 162.953613 42.061996 1.000000 1.000000 1.000000 +vn -0.980682 0.013486 -0.195141 +v 4.421738 162.963379 42.459396 1.000000 1.000000 1.000000 +vn -0.877629 -0.197154 -0.436918 +v 4.459756 164.319641 41.975777 1.000000 1.000000 1.000000 +vn -0.941286 -0.336795 -0.023464 +v 4.088228 164.943359 42.779198 1.000000 1.000000 1.000000 +vn -0.593182 -0.462299 -0.659101 +v 3.805962 166.429398 41.488579 1.000000 1.000000 1.000000 +vn 0.941403 0.328387 0.076955 +v 5.531096 165.540558 42.745377 1.000000 1.000000 1.000000 +vn 0.738868 0.095558 0.667040 +v 5.885874 164.023834 43.188198 1.000000 1.000000 1.000000 +vn 0.035930 0.605411 -0.795102 +v -1.361588 158.254135 39.370796 1.000000 1.000000 1.000000 +vn 0.085596 0.882369 -0.462707 +v -0.651722 158.350403 39.595798 1.000000 1.000000 1.000000 +vn -0.060004 0.963100 -0.262371 +v 0.247488 158.456451 39.838181 1.000000 1.000000 1.000000 +vn -0.253492 0.960682 -0.113275 +v 0.866386 158.598785 40.178799 1.000000 1.000000 1.000000 +vn -0.463864 -0.476587 -0.746790 +v -2.991230 158.241562 39.593376 1.000000 1.000000 1.000000 +vn -0.873328 0.216676 0.436291 +v 4.522482 162.678726 39.975399 1.000000 1.000000 1.000000 +vn -0.660085 0.216256 0.719389 +v 4.756740 162.649429 40.323196 1.000000 1.000000 1.000000 +vn -0.132511 0.236681 0.962509 +v 4.359384 160.515976 40.812401 1.000000 1.000000 1.000000 +vn -0.915469 0.052797 0.398911 +v 4.552224 163.370819 39.860378 1.000000 1.000000 1.000000 +vn -0.987065 -0.160230 0.005407 +v 4.316086 164.035004 38.919777 1.000000 1.000000 1.000000 +vn -0.220178 0.179537 0.958795 +v 5.001554 162.618729 40.477798 1.000000 1.000000 1.000000 +vn -0.064627 -0.585162 -0.808337 +v 0.307750 157.292740 39.115978 1.000000 1.000000 1.000000 +vn 0.109748 -0.654777 -0.747812 +v 1.843904 157.627625 38.886597 1.000000 1.000000 1.000000 +vn 0.535836 0.829927 0.155244 +v 3.118626 168.660538 38.602798 1.000000 1.000000 1.000000 +vn 0.840601 0.307964 0.445588 +v 5.463400 165.135910 39.647797 1.000000 1.000000 1.000000 +vn 0.974145 0.171077 0.147558 +v 5.805174 164.305695 39.295979 1.000000 1.000000 1.000000 +vn 0.575931 0.287676 0.765210 +v 5.237808 165.059174 39.985580 1.000000 1.000000 1.000000 +vn 0.857844 0.196022 0.475058 +v 5.655698 164.279190 39.764397 1.000000 1.000000 1.000000 +vn 0.988237 0.041401 0.147222 +v 5.884934 163.407104 39.412201 1.000000 1.000000 1.000000 +vn -0.983254 -0.068280 -0.168968 +v -5.846606 162.625717 35.962196 1.000000 1.000000 1.000000 +vn -0.895516 -0.023938 -0.444386 +v -5.714318 162.639664 35.569000 1.000000 1.000000 1.000000 +vn -0.884371 -0.139943 -0.445314 +v -5.576350 161.767578 35.452599 1.000000 1.000000 1.000000 +vn 0.731057 -0.133248 -0.669179 +v -4.578296 164.831726 35.547997 1.000000 1.000000 1.000000 +vn 0.695858 0.085485 -0.713074 +v -4.801776 163.475464 35.330597 1.000000 1.000000 1.000000 +vn 0.630355 -0.400865 -0.664800 +v -3.571254 166.733566 35.895599 1.000000 1.000000 1.000000 +vn 0.781766 -0.284030 -0.555129 +v -4.111248 165.406616 35.999199 1.000000 1.000000 1.000000 +vn 0.890083 -0.070692 -0.450283 +v -4.490424 164.154999 35.780399 1.000000 1.000000 1.000000 +vn 0.817060 -0.425828 -0.388694 +v -3.789404 166.013580 36.115196 1.000000 1.000000 1.000000 +vn 0.964243 -0.129871 -0.231019 +v -4.353732 164.127090 36.177998 1.000000 1.000000 1.000000 +vn 0.971935 0.089581 -0.217527 +v -4.407716 162.779190 35.946598 1.000000 1.000000 1.000000 +vn 0.998131 -0.051675 0.032620 +v -4.373754 163.455933 36.517601 1.000000 1.000000 1.000000 +vn 0.888307 0.137364 -0.438225 +v -4.546108 162.763855 35.549198 1.000000 1.000000 1.000000 +vn 0.995198 0.097723 0.005550 +v -4.356706 162.783386 36.401379 1.000000 1.000000 1.000000 +vn 0.971062 0.238665 0.008817 +v -4.251520 162.120590 36.284981 1.000000 1.000000 1.000000 +vn 0.854937 0.296266 -0.425804 +v -4.436350 162.070374 35.432598 1.000000 1.000000 1.000000 +vn 0.857211 -0.271732 0.437437 +v -4.477214 164.152206 37.457001 1.000000 1.000000 1.000000 +vn 0.910112 -0.110518 0.399352 +v -4.550472 163.464310 37.341999 1.000000 1.000000 1.000000 +vn 0.855403 0.465354 -0.227444 +v -3.839900 160.856430 35.599396 1.000000 1.000000 1.000000 +vn 0.888827 0.455745 0.047794 +v -3.795468 160.884338 36.054176 1.000000 1.000000 1.000000 +vn 0.755074 0.457013 -0.470109 +v -3.960458 160.781082 35.201996 1.000000 1.000000 1.000000 +vn 0.710207 0.296668 -0.638431 +v -4.667556 162.008972 35.098000 1.000000 1.000000 1.000000 +vn 0.535246 0.412560 -0.737093 +v -4.166868 160.652710 34.867199 1.000000 1.000000 1.000000 +vn 0.679124 0.594985 -0.429864 +v -3.603750 160.207596 35.087399 1.000000 1.000000 1.000000 +vn 0.782044 0.556625 -0.280314 +v -3.494068 160.299698 35.484798 1.000000 1.000000 1.000000 +vn 0.706094 0.706312 0.050536 +v -3.038662 159.835052 35.823399 1.000000 1.000000 1.000000 +vn 0.461780 0.577750 -0.673026 +v -3.335992 159.500168 34.636398 1.000000 1.000000 1.000000 +vn 0.500396 0.865750 -0.009026 +v -2.042486 159.052261 35.592400 1.000000 1.000000 1.000000 +vn 0.502400 0.765780 -0.401466 +v -2.679326 159.239243 34.855999 1.000000 1.000000 1.000000 +vn 0.324407 0.945899 0.005968 +v -1.472660 158.781570 35.475800 1.000000 1.000000 1.000000 +vn 0.346952 0.741287 -0.574558 +v -2.131258 158.870865 34.739998 1.000000 1.000000 1.000000 +vn 0.187408 0.951091 -0.245570 +v -0.959506 158.563889 34.918800 1.000000 1.000000 1.000000 +vn 0.112024 0.869452 -0.481149 +v -0.989624 158.417374 34.521198 1.000000 1.000000 1.000000 +vn 0.098284 0.994613 0.032932 +v -0.340608 158.519241 35.258400 1.000000 1.000000 1.000000 +vn -0.067564 0.969783 -0.234428 +v 0.282692 158.459244 34.687401 1.000000 1.000000 1.000000 +vn -0.126199 0.874843 -0.467679 +v 0.291592 158.308548 34.290001 1.000000 1.000000 1.000000 +vn -0.307112 0.839889 -0.447515 +v 0.934202 158.404831 34.173401 1.000000 1.000000 1.000000 +vn -0.076277 0.997069 0.005878 +v 0.279410 158.515060 35.142197 1.000000 1.000000 1.000000 +vn -0.242314 0.970142 0.010392 +v 0.895256 158.605759 35.025799 1.000000 1.000000 1.000000 +vn -0.481308 0.731421 -0.483080 +v 2.139704 158.875061 33.942799 1.000000 1.000000 1.000000 +vn -0.493761 0.836791 -0.236602 +v 2.074556 159.009003 34.340199 1.000000 1.000000 1.000000 +vn -0.431887 0.512561 -0.742129 +v 2.251276 158.647614 33.607998 1.000000 1.000000 1.000000 +vn -0.623212 0.650533 -0.434066 +v 2.681346 159.242035 33.828201 1.000000 1.000000 1.000000 +vn -0.587420 0.756672 -0.287028 +v 2.599708 159.364807 34.225601 1.000000 1.000000 1.000000 +vn -0.484399 0.873445 0.049524 +v 2.050520 159.057831 34.794998 1.000000 1.000000 1.000000 +vn -0.737775 0.673136 0.050764 +v 3.044314 159.842026 34.564198 1.000000 1.000000 1.000000 +vn -0.600854 0.440693 -0.666907 +v 3.342314 159.508545 33.377197 1.000000 1.000000 1.000000 +vn -0.786801 0.478116 -0.390320 +v 3.605308 160.210388 33.596798 1.000000 1.000000 1.000000 +vn -0.882887 0.469514 -0.008177 +v 3.799344 160.894104 34.333199 1.000000 1.000000 1.000000 +vn -0.720280 0.179199 -0.670138 +v 4.466748 161.330841 33.029598 1.000000 1.000000 1.000000 +vn -0.760959 0.333240 -0.556680 +v 3.964578 160.792236 33.480797 1.000000 1.000000 1.000000 +vn -0.953994 0.190696 -0.231367 +v 4.287080 162.050842 33.659599 1.000000 1.000000 1.000000 +vn -0.950327 0.311182 0.006690 +v 4.068504 161.502472 34.216599 1.000000 1.000000 1.000000 +vn -0.677280 0.587552 0.442803 +v 3.594686 160.220154 35.273399 1.000000 1.000000 1.000000 +vn -0.629186 0.701751 0.334172 +v 3.167344 159.703888 35.388599 1.000000 1.000000 1.000000 +vn -0.484976 0.493566 0.721935 +v 3.780894 160.062485 35.620998 1.000000 1.000000 1.000000 +vn -0.840267 0.447218 0.306508 +v 3.952902 160.799210 35.157398 1.000000 1.000000 1.000000 +vn -0.226442 0.644468 0.730332 +v 2.243938 158.662964 35.966999 1.000000 1.000000 1.000000 +vn -0.530247 0.765014 0.365501 +v 2.673454 159.254593 35.504601 1.000000 1.000000 1.000000 +vn -0.239735 0.898205 0.368450 +v 1.547706 158.607147 35.734798 1.000000 1.000000 1.000000 +vn 0.064707 0.671977 0.737740 +v 0.305814 158.068542 36.314178 1.000000 1.000000 1.000000 +vn -0.392729 0.816095 0.423973 +v 2.133408 158.889008 35.619400 1.000000 1.000000 1.000000 +vn -0.175232 0.922121 0.344944 +v 0.931452 158.418777 35.849998 1.000000 1.000000 1.000000 +vn 0.033156 0.890358 0.454053 +v 0.290726 158.323898 35.966599 1.000000 1.000000 1.000000 +vn 0.160148 0.890101 0.426700 +v -0.354350 158.328079 36.082779 1.000000 1.000000 1.000000 +vn 0.339079 0.821595 0.458264 +v -0.986706 158.431335 36.197777 1.000000 1.000000 1.000000 +vn 0.307864 0.599998 0.738392 +v -1.037784 158.181564 36.545601 1.000000 1.000000 1.000000 +vn 0.471607 0.821995 0.319236 +v -2.125000 158.883423 36.416580 1.000000 1.000000 1.000000 +vn 0.516585 0.462943 0.720295 +v -2.809772 159.043900 36.880180 1.000000 1.000000 1.000000 +vn 0.214304 0.182501 0.959566 +v -1.091150 157.920654 36.700180 1.000000 1.000000 1.000000 +vn 0.266736 0.087923 0.959751 +v -2.954332 158.827621 37.034779 1.000000 1.000000 1.000000 +vn 0.138031 0.230750 0.963173 +v 0.321580 157.802048 36.468781 1.000000 1.000000 1.000000 +vn 0.035677 0.262909 0.964161 +v 2.359424 158.427155 36.121578 1.000000 1.000000 1.000000 +vn -0.085413 0.254833 0.963205 +v 3.975484 159.899231 35.775597 1.000000 1.000000 1.000000 +vn -0.837612 0.325963 0.438354 +v 4.408696 162.015945 34.938599 1.000000 1.000000 1.000000 +vn -0.624421 0.298277 0.721893 +v 4.637042 161.953156 35.286400 1.000000 1.000000 1.000000 +vn -0.191517 0.206226 0.959579 +v 4.875704 161.886185 35.440998 1.000000 1.000000 1.000000 +vn -0.901200 0.167664 0.399660 +v 4.525122 162.698273 34.823601 1.000000 1.000000 1.000000 +vn -0.697290 0.080173 0.712291 +v 4.787176 163.404312 35.055000 1.000000 1.000000 1.000000 +vn -0.999384 -0.034645 0.005533 +v 4.374628 163.390350 33.882999 1.000000 1.000000 1.000000 +vn -0.992882 0.114546 0.032616 +v 4.349356 162.719193 33.999199 1.000000 1.000000 1.000000 +vn -0.902346 0.058499 0.427024 +v 4.551426 163.395935 34.707397 1.000000 1.000000 1.000000 +vn -0.984250 -0.176562 0.008819 +v 4.311490 164.060120 33.766598 1.000000 1.000000 1.000000 +vn 0.617493 0.648642 0.444934 +v -2.671446 159.251785 36.532600 1.000000 1.000000 1.000000 +vn 0.729442 0.598927 0.330456 +v -3.161410 159.696899 36.647797 1.000000 1.000000 1.000000 +vn 0.668668 0.223091 0.709304 +v -4.153284 160.661087 37.226196 1.000000 1.000000 1.000000 +vn 0.788161 0.502883 0.354840 +v -3.593140 160.215973 36.763779 1.000000 1.000000 1.000000 +vn 0.833903 0.373272 0.406539 +v -3.948794 160.788055 36.878601 1.000000 1.000000 1.000000 +vn 0.908142 0.236670 0.345349 +v -4.227740 161.413162 36.993980 1.000000 1.000000 1.000000 +vn 0.701424 -0.036135 0.711828 +v -4.767452 162.740128 37.573399 1.000000 1.000000 1.000000 +vn 0.929079 0.183182 0.321335 +v -4.423282 162.074554 37.109177 1.000000 1.000000 1.000000 +vn 0.904301 -0.001456 0.426892 +v -4.532718 162.765244 37.225777 1.000000 1.000000 1.000000 +vn -0.883572 0.126790 -0.450805 +v 4.421700 162.013168 33.262001 1.000000 1.000000 1.000000 +vn -0.975672 -0.028198 -0.217414 +v 4.425870 163.391754 33.428200 1.000000 1.000000 1.000000 +vn -0.700216 -0.041377 -0.712731 +v 4.775086 162.667572 32.812199 1.000000 1.000000 1.000000 +vn -0.895533 -0.081021 -0.437558 +v 4.564866 163.397324 33.030800 1.000000 1.000000 1.000000 +vn -0.728776 -0.250465 -0.637301 +v 4.733526 164.139648 32.579597 1.000000 1.000000 1.000000 +vn -0.872755 -0.241177 -0.424420 +v 4.498986 164.096390 32.914200 1.000000 1.000000 1.000000 +vn 0.304991 -0.530083 -0.791197 +v 3.231396 158.420181 33.503399 1.000000 1.000000 1.000000 +vn 0.468295 -0.488893 -0.735991 +v 4.344836 159.588074 33.271999 1.000000 1.000000 1.000000 +vn 0.985590 0.006145 -0.169041 +v 5.871068 163.439194 33.443596 1.000000 1.000000 1.000000 +vn 0.893388 0.423731 0.149365 +v 5.291714 166.044281 33.911999 1.000000 1.000000 1.000000 +vn 0.827766 0.540397 0.150916 +v 4.879630 166.817291 33.797398 1.000000 1.000000 1.000000 +vn 0.942017 0.300878 0.148585 +v 5.600606 165.212662 34.027397 1.000000 1.000000 1.000000 +vn 0.822710 0.309626 0.476739 +v 5.456396 165.161026 34.495598 1.000000 1.000000 1.000000 +vn 0.788671 0.419945 0.449049 +v 5.155460 165.973114 34.380398 1.000000 1.000000 1.000000 +vn 0.973376 0.175339 0.147630 +v 5.798982 164.340576 34.142799 1.000000 1.000000 1.000000 +vn 0.988017 0.046647 0.147124 +v 5.883916 163.439194 34.259201 1.000000 1.000000 1.000000 +vn 0.873891 0.198740 0.443641 +v 5.649684 164.312668 34.611000 1.000000 1.000000 1.000000 +vn 0.610378 0.212148 0.763172 +v 5.416408 164.269409 34.948799 1.000000 1.000000 1.000000 +vn 0.573651 0.368869 0.731341 +v 4.942588 165.860092 34.717999 1.000000 1.000000 1.000000 +vn 0.707012 0.516446 0.483133 +v 4.753984 166.725204 34.265598 1.000000 1.000000 1.000000 +vn 0.641839 0.616021 0.456684 +v 4.252704 167.418686 34.149399 1.000000 1.000000 1.000000 +vn 0.238946 0.154567 0.958652 +v -1.750434 158.131348 31.663198 1.000000 1.000000 1.000000 +vn 0.162986 0.656424 0.736575 +v -0.347926 158.071350 31.277399 1.000000 1.000000 1.000000 +vn 0.170068 0.210774 0.962627 +v -0.365802 157.804840 31.431999 1.000000 1.000000 1.000000 +vn 0.164264 0.876215 0.453060 +v -0.330824 158.326691 30.929798 1.000000 1.000000 1.000000 +vn -0.039429 0.938441 0.343182 +v 0.315862 158.325302 30.813198 1.000000 1.000000 1.000000 +vn -0.129136 0.668439 0.732471 +v 1.646804 158.374130 30.930199 1.000000 1.000000 1.000000 +vn -0.106285 0.923150 0.369455 +v 0.950154 158.422974 30.697998 1.000000 1.000000 1.000000 +vn -0.354025 0.933885 0.050240 +v 1.504846 158.794128 29.758198 1.000000 1.000000 1.000000 +vn -0.269565 0.863396 0.426476 +v 1.565680 158.614136 30.582598 1.000000 1.000000 1.000000 +vn -0.416348 0.831092 0.368700 +v 2.146642 158.897385 30.467798 1.000000 1.000000 1.000000 +vn -0.524407 0.781371 0.338314 +v 2.692458 159.269928 30.351599 1.000000 1.000000 1.000000 +vn -0.409289 0.552539 0.726074 +v 3.345340 159.533646 30.584198 1.000000 1.000000 1.000000 +vn -0.368897 0.898396 -0.238326 +v 1.522472 158.742493 29.303398 1.000000 1.000000 1.000000 +vn -0.576740 0.375627 0.725449 +v 4.430968 161.280609 30.249598 1.000000 1.000000 1.000000 +vn -0.680315 0.167453 0.713534 +v 4.762058 162.695480 30.018198 1.000000 1.000000 1.000000 +vn -0.159743 0.229151 0.960194 +v 4.659008 161.178757 30.403999 1.000000 1.000000 1.000000 +vn -0.046603 0.263042 0.963658 +v 3.517514 159.342484 30.738798 1.000000 1.000000 1.000000 +vn -0.887259 0.171497 0.428205 +v 4.527542 162.723389 29.670597 1.000000 1.000000 1.000000 +vn -0.947369 -0.004816 0.320108 +v 4.550074 163.423843 29.553999 1.000000 1.000000 1.000000 +vn -0.224004 0.164382 0.960625 +v 5.007142 162.667572 30.172798 1.000000 1.000000 1.000000 +vn 0.073995 0.255104 0.964078 +v 1.731572 158.122971 31.084799 1.000000 1.000000 1.000000 +vn -0.054487 -0.302846 -0.951481 +v 1.807752 157.898331 28.430199 1.000000 1.000000 1.000000 +vn -0.046934 -0.604828 -0.794972 +v 0.381892 157.298325 28.811998 1.000000 1.000000 1.000000 +vn 0.119165 -0.654325 -0.746765 +v 1.892482 157.647171 28.581398 1.000000 1.000000 1.000000 +vn 0.083247 -0.294916 -0.951890 +v 3.672230 159.170868 28.084198 1.000000 1.000000 1.000000 +vn 0.402144 0.543120 -0.737090 +v 2.259530 168.687042 26.641399 1.000000 1.000000 1.000000 +vn 0.264980 0.185782 -0.946187 +v 2.158372 168.444260 26.490398 1.000000 1.000000 1.000000 +vn 0.472187 0.411638 -0.779483 +v 3.503956 167.849838 26.860197 1.000000 1.000000 1.000000 +vn 0.042464 -0.267984 -0.962487 +v 2.062558 168.214020 26.495398 1.000000 1.000000 1.000000 +vn 0.624119 0.627311 -0.465786 +v 3.654926 168.047974 27.204599 1.000000 1.000000 1.000000 +vn 0.463995 0.773480 -0.431783 +v 2.356902 168.921448 26.985998 1.000000 1.000000 1.000000 +vn 0.551513 0.806017 -0.214874 +v 3.059054 168.682861 27.481199 1.000000 1.000000 1.000000 +vn 0.672697 0.718946 -0.174917 +v 3.739552 168.158203 27.597799 1.000000 1.000000 1.000000 +vn 0.529968 0.833700 0.155172 +v 3.065750 168.694016 28.296799 1.000000 1.000000 1.000000 +vn 0.742724 0.651971 0.152629 +v 4.350012 167.547043 28.529198 1.000000 1.000000 1.000000 +vn 0.642166 0.750931 0.154029 +v 3.747740 168.169373 28.413399 1.000000 1.000000 1.000000 +vn 0.406909 0.897356 0.170811 +v 2.416744 169.065186 28.194599 1.000000 1.000000 1.000000 +vn 0.330060 0.927062 -0.177810 +v 1.637754 169.362381 27.263798 1.000000 1.000000 1.000000 +vn 0.275623 0.948292 0.157398 +v 1.641346 169.376343 28.079399 1.000000 1.000000 1.000000 +vn 0.173543 0.968045 -0.181031 +v 0.824196 169.552155 27.147598 1.000000 1.000000 1.000000 +vn 0.127662 0.979059 0.158575 +v 0.825994 169.566101 27.963198 1.000000 1.000000 1.000000 +vn 0.325740 0.804059 -0.497375 +v 1.600686 169.224243 26.870798 1.000000 1.000000 1.000000 +vn 0.126765 -0.243540 -0.961571 +v 0.704880 168.640991 26.263998 1.000000 1.000000 1.000000 +vn 0.975885 0.137896 -0.169211 +v 5.782438 164.364288 28.174999 1.000000 1.000000 1.000000 +vn 0.985569 0.010480 -0.168950 +v 5.869318 163.474075 28.290398 1.000000 1.000000 1.000000 +vn 0.987788 0.051013 0.147219 +v 5.882166 163.474075 29.105997 1.000000 1.000000 1.000000 +vn 0.892556 0.086616 0.442541 +v 5.730706 163.468491 29.574198 1.000000 1.000000 1.000000 +vn -0.612990 -0.142142 -0.777199 +v -5.094228 160.988983 24.688999 1.000000 1.000000 1.000000 +vn 0.170662 -0.316941 0.932965 +v 0.336854 157.543900 36.464996 1.000000 1.000000 1.000000 +vn 0.256342 -0.575340 0.776706 +v 1.124802 157.416931 36.208000 1.000000 1.000000 1.000000 +vn 0.273672 -0.187194 0.943431 +v 2.471268 158.198318 36.117779 1.000000 1.000000 1.000000 +vn 0.045212 -0.652306 0.756606 +v -0.427734 157.306702 36.440578 1.000000 1.000000 1.000000 +vn 0.066936 -0.339370 0.938268 +v -1.142838 157.668091 36.696381 1.000000 1.000000 1.000000 +vn -0.116959 -0.626813 0.770342 +v -1.849852 157.637390 36.657997 1.000000 1.000000 1.000000 +vn -0.089164 -0.343057 0.935073 +v -3.094306 158.618317 37.030998 1.000000 1.000000 1.000000 +vn -0.380563 -0.799100 0.465414 +v -2.676144 157.750412 36.436798 1.000000 1.000000 1.000000 +vn -0.237016 -0.847804 0.474396 +v -1.929496 157.395996 36.320198 1.000000 1.000000 1.000000 +vn -0.208453 -0.594663 0.776481 +v -2.565680 157.977859 36.774597 1.000000 1.000000 1.000000 +vn -0.593063 -0.790206 0.154436 +v -3.453256 158.081116 36.084396 1.000000 1.000000 1.000000 +vn -0.470264 -0.868634 0.155968 +v -2.746866 157.605301 35.968578 1.000000 1.000000 1.000000 +vn -0.483455 -0.723989 0.492048 +v -3.364380 158.213669 36.552780 1.000000 1.000000 1.000000 +vn -0.382384 -0.504019 0.774434 +v -3.817110 158.960159 37.005600 1.000000 1.000000 1.000000 +vn -0.597887 -0.657897 0.457933 +v -3.981470 158.774597 36.667801 1.000000 1.000000 1.000000 +vn -0.699575 -0.698047 0.152727 +v -4.086658 158.657379 36.199600 1.000000 1.000000 1.000000 +vn -0.625535 -0.759963 -0.176529 +v -3.445724 158.092270 35.268997 1.000000 1.000000 1.000000 +vn -0.508126 -0.842728 -0.177813 +v -2.740866 157.617859 35.153000 1.000000 1.000000 1.000000 +vn -0.339945 -0.927156 0.157543 +v -1.980468 157.241119 35.851978 1.000000 1.000000 1.000000 +vn -0.595924 -0.658382 -0.459792 +v -3.367780 158.209488 34.875801 1.000000 1.000000 1.000000 +vn -0.478840 -0.740376 -0.471758 +v -2.678862 157.744843 34.759998 1.000000 1.000000 1.000000 +vn -0.367215 -0.904202 -0.218111 +v -1.976142 157.253677 35.036400 1.000000 1.000000 1.000000 +vn -0.727043 -0.664137 -0.174158 +v -4.077736 158.667145 35.383999 1.000000 1.000000 1.000000 +vn -0.675569 -0.555323 -0.484998 +v -3.985488 158.770401 34.990997 1.000000 1.000000 1.000000 +vn -0.287263 -0.852965 -0.435811 +v -1.243804 157.175537 34.541199 1.000000 1.000000 1.000000 +vn -0.202418 -0.964016 0.172338 +v -1.275366 157.020645 35.749779 1.000000 1.000000 1.000000 +vn -0.120272 -0.976427 -0.179234 +v -0.456908 156.902054 34.819000 1.000000 1.000000 1.000000 +vn -0.142659 -0.854234 -0.499934 +v -0.446584 157.045776 34.425999 1.000000 1.000000 1.000000 +vn -0.076878 -0.664101 -0.743679 +v 0.351510 157.295532 33.965199 1.000000 1.000000 1.000000 +vn -0.005044 -0.881631 -0.471912 +v 0.366676 157.038788 34.309799 1.000000 1.000000 1.000000 +vn 0.043135 -0.982407 -0.181705 +v 0.375182 156.895081 34.702999 1.000000 1.000000 1.000000 +vn 0.129101 -0.872336 -0.471554 +v 1.174456 157.158783 34.193398 1.000000 1.000000 1.000000 +vn 0.043045 -0.604507 -0.795436 +v 1.125922 157.409943 33.848801 1.000000 1.000000 1.000000 +vn 0.192566 -0.964343 -0.181553 +v 1.201654 157.017868 34.586399 1.000000 1.000000 1.000000 +vn 0.334971 -0.924814 -0.180316 +v 1.996574 157.262054 34.471001 1.000000 1.000000 1.000000 +vn 0.250677 -0.829523 -0.499051 +v 1.951384 157.397400 34.077999 1.000000 1.000000 1.000000 +vn 0.213643 -0.631742 -0.745157 +v 2.578670 157.979248 33.618198 1.000000 1.000000 1.000000 +vn 0.383000 -0.796840 -0.467287 +v 2.689780 157.751816 33.962601 1.000000 1.000000 1.000000 +vn 0.468303 -0.865235 -0.179053 +v 2.752068 157.624832 34.355797 1.000000 1.000000 1.000000 +vn 0.238865 -0.958117 0.157971 +v 1.204286 157.003906 35.402000 1.000000 1.000000 1.000000 +vn 0.379547 -0.911955 0.155829 +v 2.000938 157.249496 35.286598 1.000000 1.000000 1.000000 +vn 0.257879 -0.845309 0.467922 +v 1.173268 157.165771 35.870178 1.000000 1.000000 1.000000 +vn 0.090253 -0.983202 0.158645 +v 0.376008 156.881119 35.518398 1.000000 1.000000 1.000000 +vn 0.379633 -0.782725 0.493173 +v 1.949414 157.402969 35.754799 1.000000 1.000000 1.000000 +vn 0.495799 -0.736236 0.460587 +v 2.687050 157.757385 35.639599 1.000000 1.000000 1.000000 +vn 0.509438 -0.846477 0.154755 +v 2.758080 157.612274 35.171196 1.000000 1.000000 1.000000 +vn 0.423118 -0.524647 0.738726 +v 2.576094 157.983429 35.977180 1.000000 1.000000 1.000000 +vn 0.130189 -0.856857 0.498846 +v 0.366312 157.045776 35.986778 1.000000 1.000000 1.000000 +vn -0.061348 -0.985546 0.157912 +v -0.457900 156.888092 35.634579 1.000000 1.000000 1.000000 +vn -0.024469 -0.878993 0.476206 +v -0.446132 157.051361 36.102798 1.000000 1.000000 1.000000 +vn 0.528018 -0.365028 0.766780 +v 3.824514 158.968536 35.746399 1.000000 1.000000 1.000000 +vn 0.362486 -0.090738 0.927562 +v 4.163894 159.740158 35.771797 1.000000 1.000000 1.000000 +vn 0.648432 -0.122078 0.751420 +v 5.111146 161.054565 35.398796 1.000000 1.000000 1.000000 +vn 0.362156 0.051525 0.930692 +v 5.106780 161.820602 35.437199 1.000000 1.000000 1.000000 +vn 0.619081 -0.203822 0.758417 +v 4.773026 160.291321 35.515396 1.000000 1.000000 1.000000 +vn 0.677311 0.020712 0.735405 +v 5.463954 162.583847 35.181396 1.000000 1.000000 1.000000 +vn 0.341695 0.145462 0.928485 +v 5.272118 163.419647 35.205799 1.000000 1.000000 1.000000 +vn 0.861279 -0.235400 0.450318 +v 5.331278 160.959686 35.060997 1.000000 1.000000 1.000000 +vn 0.817150 -0.363622 0.447265 +v 4.978598 160.162949 35.177597 1.000000 1.000000 1.000000 +vn 0.748160 -0.458044 0.480055 +v 4.527452 159.433197 35.293598 1.000000 1.000000 1.000000 +vn 0.814170 -0.560859 0.150216 +v 4.647110 159.332733 34.825199 1.000000 1.000000 1.000000 +vn 0.883398 -0.444349 0.148869 +v 5.110180 160.082016 34.709396 1.000000 1.000000 1.000000 +vn 0.728135 -0.668384 0.151930 +v 4.094678 158.665756 34.940399 1.000000 1.000000 1.000000 +vn 0.685065 -0.569919 0.453738 +v 3.989246 158.784348 35.408600 1.000000 1.000000 1.000000 +vn 0.591422 -0.643260 0.486248 +v 3.367214 158.217850 35.524799 1.000000 1.000000 1.000000 +vn 0.626785 -0.763952 0.153353 +v 3.456216 158.085297 35.056599 1.000000 1.000000 1.000000 +vn 0.589396 -0.788155 -0.177269 +v 3.448672 158.096466 34.240997 1.000000 1.000000 1.000000 +vn 0.496080 -0.733999 -0.463843 +v 3.370612 158.212280 33.848000 1.000000 1.000000 1.000000 +vn 0.695258 -0.696821 -0.176230 +v 4.085744 158.676926 34.124798 1.000000 1.000000 1.000000 +vn 0.583785 -0.647419 -0.489942 +v 3.993276 158.780167 33.731796 1.000000 1.000000 1.000000 +vn 0.785811 -0.593288 -0.174670 +v 4.636966 159.341095 34.009796 1.000000 1.000000 1.000000 +vn 0.685157 -0.567425 -0.456716 +v 4.532036 159.430405 33.616600 1.000000 1.000000 1.000000 +vn 0.762405 -0.455724 -0.459406 +v 4.983634 160.160156 33.500801 1.000000 1.000000 1.000000 +vn 0.860315 -0.479736 -0.172369 +v 5.099016 160.089005 33.893799 1.000000 1.000000 1.000000 +vn 0.865699 -0.280156 -0.414824 +v 5.558262 161.695023 33.281998 1.000000 1.000000 1.000000 +vn 0.912621 -0.351221 -0.209206 +v 5.460246 160.903870 33.777199 1.000000 1.000000 1.000000 +vn 0.976806 -0.133490 -0.167425 +v 5.837142 162.537811 33.559799 1.000000 1.000000 1.000000 +vn 0.866198 -0.151776 -0.476094 +v 5.705048 162.554550 33.166798 1.000000 1.000000 1.000000 +vn 0.933831 -0.325628 0.148075 +v 5.472180 160.899673 34.592796 1.000000 1.000000 1.000000 +vn 0.965461 -0.204409 0.161562 +v 5.699396 161.655945 34.490601 1.000000 1.000000 1.000000 +vn 0.892082 -0.049213 0.449185 +v 5.699280 162.554550 34.843597 1.000000 1.000000 1.000000 +vn 0.985582 -0.083516 0.147153 +v 5.849902 162.536407 34.375397 1.000000 1.000000 1.000000 +vn 0.876387 0.086135 0.473842 +v 5.732406 163.434998 34.727600 1.000000 1.000000 1.000000 +vn -0.757167 -0.470868 -0.452749 +v -4.529796 159.424805 35.107201 1.000000 1.000000 1.000000 +vn -0.811752 -0.557926 -0.172562 +v -4.634636 159.336914 35.500198 1.000000 1.000000 1.000000 +vn -0.815103 -0.365441 -0.449510 +v -4.978160 160.147598 35.221798 1.000000 1.000000 1.000000 +vn -0.844344 -0.245126 -0.476442 +v -5.329824 160.934570 35.337196 1.000000 1.000000 1.000000 +vn -0.880229 -0.442425 -0.171632 +v -5.093404 160.075043 35.614979 1.000000 1.000000 1.000000 +vn -0.931743 -0.320819 -0.170092 +v -5.453202 160.881546 35.730179 1.000000 1.000000 1.000000 +vn -0.863691 -0.481071 0.150360 +v -5.104540 160.068069 36.430397 1.000000 1.000000 1.000000 +vn -0.669974 -0.562216 0.484818 +v -4.525212 159.429001 36.783997 1.000000 1.000000 1.000000 +vn -0.789554 -0.594701 0.151444 +v -4.644780 159.328537 36.315781 1.000000 1.000000 1.000000 +vn -0.920681 -0.360737 0.149052 +v -5.465126 160.875961 36.545776 1.000000 1.000000 1.000000 +vn -0.758614 -0.470202 0.451014 +v -4.973126 160.150391 36.898781 1.000000 1.000000 1.000000 +vn -0.546715 -0.405270 0.732706 +v -4.767838 160.278763 37.236397 1.000000 1.000000 1.000000 +vn -0.193563 -0.257056 0.946813 +v -4.573892 160.398758 37.376999 1.000000 1.000000 1.000000 +vn -0.594505 -0.250396 0.764111 +v -5.340742 161.830368 37.467178 1.000000 1.000000 1.000000 +vn -0.800343 -0.361915 0.477985 +v -5.324442 160.937347 37.014000 1.000000 1.000000 1.000000 +vn -0.859099 -0.253756 0.444474 +v -5.570712 161.770370 37.129398 1.000000 1.000000 1.000000 +vn -0.960225 -0.236743 0.148055 +v -5.717910 161.731293 36.661179 1.000000 1.000000 1.000000 +vn -0.868940 -0.141283 0.474324 +v -5.708548 162.639664 37.245998 1.000000 1.000000 1.000000 +vn -0.983074 -0.109012 0.147248 +v -5.859378 162.624313 36.777599 1.000000 1.000000 1.000000 +vn -0.965850 -0.196235 -0.169188 +v -5.705432 161.734100 35.845596 1.000000 1.000000 1.000000 +vn -0.893434 -0.007269 0.449135 +v -5.730900 163.520126 37.362000 1.000000 1.000000 1.000000 +vn -0.674429 -0.063184 0.735631 +v -5.494312 163.508957 37.699799 1.000000 1.000000 1.000000 +vn -0.330872 -0.166718 0.928832 +v -5.250258 162.688507 37.724197 1.000000 1.000000 1.000000 +vn -0.357244 -0.074331 0.931049 +v -5.185960 164.295929 37.955597 1.000000 1.000000 1.000000 +vn 0.254850 -0.118113 0.959740 +v -5.012742 162.713623 37.727997 1.000000 1.000000 1.000000 +vn 0.282795 -0.020218 0.958967 +v -4.366982 160.528519 37.380798 1.000000 1.000000 1.000000 +vn 0.206625 -0.193431 0.959109 +v -4.951356 164.248489 37.959396 1.000000 1.000000 1.000000 +vn 0.643374 -0.257957 0.720783 +v -4.709064 164.199646 37.804798 1.000000 1.000000 1.000000 +vn 0.103741 -0.248533 0.963052 +v -4.178352 166.296829 38.293999 1.000000 1.000000 1.000000 +vn 0.518820 -0.460586 0.720199 +v -3.973900 166.147537 38.139397 1.000000 1.000000 1.000000 +vn -0.016494 -0.264487 0.964248 +v -2.658764 167.886124 38.639999 1.000000 1.000000 1.000000 +vn 0.272485 -0.627021 0.729792 +v -2.528676 167.658676 38.485397 1.000000 1.000000 1.000000 +vn -0.120790 -0.239790 0.963281 +v -0.665024 168.659134 38.987198 1.000000 1.000000 1.000000 +vn -0.014727 -0.675036 0.737638 +v -0.632500 168.395416 38.832596 1.000000 1.000000 1.000000 +vn -0.200743 -0.195968 0.959843 +v 0.751910 168.645187 39.218578 1.000000 1.000000 1.000000 +vn -0.263437 -0.619648 0.739350 +v 0.715086 168.381470 39.063980 1.000000 1.000000 1.000000 +vn -0.259866 -0.104587 0.959964 +v 2.667866 167.877747 39.553177 1.000000 1.000000 1.000000 +vn -0.482783 -0.496397 0.721464 +v 2.537278 167.651703 39.398579 1.000000 1.000000 1.000000 +vn -0.282847 0.002574 0.959162 +v 4.184274 166.287064 39.899200 1.000000 1.000000 1.000000 +vn -0.094001 -0.899268 0.427178 +v 0.042486 168.184723 38.601196 1.000000 1.000000 1.000000 +vn -0.278171 -0.843369 0.459728 +v 0.679842 168.128906 38.716179 1.000000 1.000000 1.000000 +vn 0.032556 -0.890041 0.454717 +v -0.601382 168.141464 38.485001 1.000000 1.000000 1.000000 +vn 0.149502 -0.988739 0.006663 +v -0.578054 167.951691 37.660599 1.000000 1.000000 1.000000 +vn 0.312546 -0.949844 0.010544 +v -1.186708 167.814957 37.544197 1.000000 1.000000 1.000000 +vn -0.411154 -0.853657 0.319723 +v 1.843942 167.761948 38.934978 1.000000 1.000000 1.000000 +vn -0.025639 -0.999084 0.034274 +v 0.040806 167.992157 37.776798 1.000000 1.000000 1.000000 +vn 0.138594 -0.962443 -0.233444 +v -0.584812 168.006119 37.205799 1.000000 1.000000 1.000000 +vn -0.254494 -0.967053 0.006443 +v 1.186762 167.814957 37.994179 1.000000 1.000000 1.000000 +vn -0.116626 -0.962072 -0.246610 +v 0.661072 167.993561 37.437199 1.000000 1.000000 1.000000 +vn -0.570800 -0.688863 0.446829 +v 2.412302 167.435425 39.050999 1.000000 1.000000 1.000000 +vn -0.438374 -0.898757 -0.008001 +v 1.772308 167.586121 38.110779 1.000000 1.000000 1.000000 +vn -0.446047 -0.798517 -0.404244 +v 2.419434 167.446594 37.374378 1.000000 1.000000 1.000000 +vn -0.292728 -0.763001 -0.576315 +v 1.849390 167.774490 37.258400 1.000000 1.000000 1.000000 +vn -0.047370 -0.874936 -0.481917 +v 0.681856 168.142853 37.039597 1.000000 1.000000 1.000000 +vn -0.419378 -0.607422 -0.674656 +v 3.090998 167.235886 37.154800 1.000000 1.000000 1.000000 +vn -0.635991 -0.639223 -0.432330 +v 3.402644 166.549393 37.605797 1.000000 1.000000 1.000000 +vn -0.122800 -0.706582 -0.696894 +v 1.302970 168.261459 36.807178 1.000000 1.000000 1.000000 +vn 0.121074 -0.661900 -0.739750 +v 0.044864 168.456802 36.589798 1.000000 1.000000 1.000000 +vn 0.189613 -0.863720 -0.466943 +v -0.603160 168.155426 36.808399 1.000000 1.000000 1.000000 +vn 0.353037 -0.663049 -0.660099 +v -1.302790 168.261459 36.357201 1.000000 1.000000 1.000000 +vn 0.366925 -0.816185 -0.446327 +v -1.238286 168.013107 36.691799 1.000000 1.000000 1.000000 +vn 0.532357 -0.696583 -0.481008 +v -2.411284 167.453568 36.461197 1.000000 1.000000 1.000000 +vn 0.551817 -0.800321 -0.234486 +v -2.337898 167.325195 36.858597 1.000000 1.000000 1.000000 +vn 0.467329 -0.482142 -0.741042 +v -2.536942 167.672638 36.126396 1.000000 1.000000 1.000000 +vn 0.639263 -0.714318 -0.284768 +v -2.839436 166.931717 36.743996 1.000000 1.000000 1.000000 +vn 0.666746 -0.607236 -0.432104 +v -2.928568 167.047531 36.346596 1.000000 1.000000 1.000000 +vn 0.544989 -0.836963 0.049797 +v -2.310848 167.279160 37.313400 1.000000 1.000000 1.000000 +vn 0.243338 -0.906995 0.343725 +v -1.234642 167.999146 38.368401 1.000000 1.000000 1.000000 +vn 0.781774 -0.621505 0.050606 +v -3.252950 166.422409 37.082596 1.000000 1.000000 1.000000 +vn 0.450044 -0.786681 0.422603 +v -2.404190 167.441010 38.137798 1.000000 1.000000 1.000000 +vn 0.304974 -0.878531 0.367660 +v -1.837532 167.764725 38.253197 1.000000 1.000000 1.000000 +vn 0.911547 -0.411119 -0.007985 +v -3.939962 165.317307 36.851601 1.000000 1.000000 1.000000 +vn 0.676538 -0.657131 0.332380 +v -3.384362 166.550781 37.906998 1.000000 1.000000 1.000000 +vn 0.583413 -0.726276 0.363528 +v -2.919942 167.036362 38.022999 1.000000 1.000000 1.000000 +vn 0.715780 -0.541774 0.440612 +v -3.778242 166.005219 37.791798 1.000000 1.000000 1.000000 +vn 0.868429 -0.391452 0.304298 +v -4.099146 165.401031 37.675797 1.000000 1.000000 1.000000 +vn 0.968261 -0.249850 0.006829 +v -4.170216 164.690811 36.735001 1.000000 1.000000 1.000000 +vn -0.505264 -0.446692 -0.738360 +v 3.992492 166.147537 37.385597 1.000000 1.000000 1.000000 +vn -0.722256 -0.505522 -0.472011 +v 3.794656 166.003815 37.720379 1.000000 1.000000 1.000000 +vn -0.833674 -0.350456 -0.426811 +v 4.350642 164.752197 37.950996 1.000000 1.000000 1.000000 +vn -0.822634 -0.520846 -0.228020 +v 3.679118 165.920105 38.117779 1.000000 1.000000 1.000000 +vn -0.742975 -0.607322 -0.281335 +v 3.299028 166.448929 38.003197 1.000000 1.000000 1.000000 +vn -0.655619 -0.753354 0.051199 +v 2.815386 166.880081 38.341797 1.000000 1.000000 1.000000 +vn -0.856884 -0.513272 0.047977 +v 3.636528 165.889404 38.572578 1.000000 1.000000 1.000000 +vn -0.953873 -0.300078 0.008951 +v 4.169340 164.689407 38.803398 1.000000 1.000000 1.000000 +vn -0.915379 -0.242023 0.321724 +v 4.337832 164.748016 39.627579 1.000000 1.000000 1.000000 +vn -0.902565 -0.055512 0.426959 +v 4.490514 164.067093 39.744179 1.000000 1.000000 1.000000 +vn -0.702445 -0.008067 0.711692 +v 4.723110 164.108948 40.091797 1.000000 1.000000 1.000000 +vn -0.890842 -0.294325 0.346082 +v 4.101116 165.392654 39.512379 1.000000 1.000000 1.000000 +vn -0.651735 -0.264847 0.710702 +v 3.979474 166.137772 39.744598 1.000000 1.000000 1.000000 +vn -0.807440 -0.426269 0.407842 +v 3.783482 165.995438 39.396980 1.000000 1.000000 1.000000 +vn -0.752626 -0.553861 0.356079 +v 3.392616 166.541016 39.282181 1.000000 1.000000 1.000000 +vn -0.686764 -0.646713 0.331841 +v 2.929174 167.026596 39.166199 1.000000 1.000000 1.000000 +vn -0.262912 0.101551 0.959461 +v 4.966188 164.153595 40.246399 1.000000 1.000000 1.000000 +vn 0.318261 0.187332 0.929310 +v 5.201564 164.196869 40.242577 1.000000 1.000000 1.000000 +vn 0.351188 0.096622 0.931306 +v 5.238592 162.588043 40.473999 1.000000 1.000000 1.000000 +vn 0.668602 0.105428 0.736108 +v 5.496668 163.395935 40.218201 1.000000 1.000000 1.000000 +vn 0.336345 -0.022265 0.941476 +v 4.565986 160.387589 40.808578 1.000000 1.000000 1.000000 +vn 0.658313 -0.044533 0.751426 +v 5.339260 161.828964 40.435600 1.000000 1.000000 1.000000 +vn 0.557019 -0.392418 0.731941 +v 3.804120 158.946213 40.899399 1.000000 1.000000 1.000000 +vn 0.646940 -0.232482 0.726238 +v 4.759650 160.266205 40.667976 1.000000 1.000000 1.000000 +vn 0.318755 -0.109611 0.941478 +v 3.649352 159.122025 41.039997 1.000000 1.000000 1.000000 +vn 0.884864 -0.124228 0.448980 +v 5.569218 161.767578 40.097778 1.000000 1.000000 1.000000 +vn 0.844371 -0.246924 0.475464 +v 5.319922 160.926193 40.214378 1.000000 1.000000 1.000000 +vn 0.814943 -0.368720 0.447116 +v 4.964642 160.137833 40.330399 1.000000 1.000000 1.000000 +vn 0.746337 -0.461268 0.479805 +v 4.513020 159.415054 40.445396 1.000000 1.000000 1.000000 +vn 0.933431 -0.326778 0.148061 +v 5.460516 160.864807 39.746201 1.000000 1.000000 1.000000 +vn 0.880881 -0.449226 0.149145 +v 5.095862 160.055511 39.861977 1.000000 1.000000 1.000000 +vn 0.811641 -0.564369 0.150755 +v 4.632292 159.313187 39.977180 1.000000 1.000000 1.000000 +vn 0.683484 -0.572309 0.453114 +v 3.967978 158.762024 40.561577 1.000000 1.000000 1.000000 +vn 0.726080 -0.670568 0.152139 +v 4.072856 158.643433 40.093399 1.000000 1.000000 1.000000 +vn 0.692882 -0.699367 -0.175499 +v 4.063960 158.653198 39.277779 1.000000 1.000000 1.000000 +vn 0.783518 -0.596404 -0.174363 +v 4.622186 159.321564 39.161598 1.000000 1.000000 1.000000 +vn 0.857786 -0.484345 -0.172086 +v 5.084726 160.062485 39.046600 1.000000 1.000000 1.000000 +vn 0.915548 -0.363873 -0.171371 +v 5.448594 160.870377 38.930580 1.000000 1.000000 1.000000 +vn 0.667840 -0.563017 -0.486829 +v 4.517590 159.410873 38.768600 1.000000 1.000000 1.000000 +vn 0.756089 -0.472380 -0.452976 +v 4.969664 160.133652 38.653397 1.000000 1.000000 1.000000 +vn 0.595247 -0.658893 -0.459936 +v 3.971994 158.756454 38.884796 1.000000 1.000000 1.000000 +vn 0.394457 -0.538295 -0.744743 +v 3.807918 158.942032 38.540176 1.000000 1.000000 1.000000 +vn 0.541395 -0.418118 -0.729431 +v 4.764400 160.263412 38.308998 1.000000 1.000000 1.000000 +vn 0.816615 -0.352565 -0.456988 +v 5.325292 160.924805 38.537579 1.000000 1.000000 1.000000 +vn 0.950312 -0.231615 -0.207993 +v 5.703928 161.732697 38.813980 1.000000 1.000000 1.000000 +vn 0.481110 -0.724441 -0.493679 +v 3.355406 158.199707 38.999378 1.000000 1.000000 1.000000 +vn 0.219657 -0.567442 -0.793575 +v 2.559280 157.966690 38.770199 1.000000 1.000000 1.000000 +vn 0.379008 -0.798691 -0.467382 +v 2.669554 157.739243 39.114777 1.000000 1.000000 1.000000 +vn 0.586251 -0.790366 -0.177852 +v 3.433094 158.082504 39.392601 1.000000 1.000000 1.000000 +vn 0.117021 -0.857526 -0.500954 +v 1.136590 157.149033 39.346378 1.000000 1.000000 1.000000 +vn 0.255409 -0.844928 -0.469961 +v 1.923354 157.384842 39.230999 1.000000 1.000000 1.000000 +vn -0.212066 -0.636920 -0.741189 +v -0.785262 157.345764 39.271198 1.000000 1.000000 1.000000 +vn -0.013462 -0.886296 -0.462923 +v 0.321040 157.035995 39.460579 1.000000 1.000000 1.000000 +vn 0.185405 -0.965440 -0.183167 +v 1.162914 157.008102 39.739399 1.000000 1.000000 1.000000 +vn -0.046056 -0.973870 -0.222385 +v -0.001400 156.882523 39.897797 1.000000 1.000000 1.000000 +vn -0.189976 -0.859466 -0.474581 +v -0.819062 157.090424 39.615601 1.000000 1.000000 1.000000 +vn -0.176668 -0.967285 -0.182067 +v -0.838010 156.948105 40.008797 1.000000 1.000000 1.000000 +vn 0.084460 -0.996361 -0.011437 +v 0.331146 156.840652 40.259178 1.000000 1.000000 1.000000 +vn -0.337209 -0.775246 -0.534120 +v -1.626616 157.281586 39.725399 1.000000 1.000000 1.000000 +vn -0.280760 -0.946756 0.157568 +v -1.667892 157.129486 40.933998 1.000000 1.000000 1.000000 +vn -0.320306 -0.929999 -0.180295 +v -1.664250 157.143448 40.118599 1.000000 1.000000 1.000000 +vn -0.128926 -0.978730 0.159580 +v -0.839836 156.934143 40.824181 1.000000 1.000000 1.000000 +vn 0.091160 -0.974417 0.205430 +v 0.329202 156.878326 40.669197 1.000000 1.000000 1.000000 +vn -0.068556 -0.862765 0.500936 +v -0.818236 157.097397 41.292599 1.000000 1.000000 1.000000 +vn 0.067267 -0.883343 0.463876 +v -0.001380 157.033218 41.181599 1.000000 1.000000 1.000000 +vn -0.210014 -0.857796 0.469127 +v -1.624968 157.287170 41.402397 1.000000 1.000000 1.000000 +vn -0.422566 -0.892689 0.156667 +v -2.461020 157.451813 41.041580 1.000000 1.000000 1.000000 +vn 0.100659 -0.659726 0.744734 +v -0.001352 157.289948 41.519379 1.000000 1.000000 1.000000 +vn -0.089344 -0.614846 0.783570 +v -1.557904 157.534134 41.739998 1.000000 1.000000 1.000000 +vn 0.242653 -0.847896 0.471373 +v 1.135440 157.156006 41.023376 1.000000 1.000000 1.000000 +vn 0.249331 -0.579021 0.776253 +v 1.088536 157.407166 41.361000 1.000000 1.000000 1.000000 +vn 0.169021 -0.273389 0.946937 +v 0.294912 157.541107 41.615780 1.000000 1.000000 1.000000 +vn 0.079429 -0.344060 0.935582 +v -0.752582 157.591354 41.770798 1.000000 1.000000 1.000000 +vn 0.374872 -0.784010 0.494772 +v 1.921410 157.391815 40.907997 1.000000 1.000000 1.000000 +vn 0.272780 -0.191398 0.942846 +v 2.452690 158.187149 41.269997 1.000000 1.000000 1.000000 +vn 0.421022 -0.525292 0.739465 +v 2.556718 157.972275 41.129398 1.000000 1.000000 1.000000 +vn 0.230906 -0.960054 0.158046 +v 1.165468 156.994141 40.555000 1.000000 1.000000 1.000000 +vn 0.374239 -0.913993 0.156723 +v 1.972214 157.236923 40.439598 1.000000 1.000000 1.000000 +vn 0.492594 -0.737997 0.461208 +v 2.666850 157.744843 40.791779 1.000000 1.000000 1.000000 +vn 0.330058 -0.926633 -0.180038 +v 1.967902 157.249496 39.624199 1.000000 1.000000 1.000000 +vn 0.506009 -0.848505 0.154902 +v 2.737340 157.599716 40.323399 1.000000 1.000000 1.000000 +vn 0.588678 -0.645464 0.486655 +v 3.352008 158.205292 40.676376 1.000000 1.000000 1.000000 +vn 0.623859 -0.766234 0.153902 +v 3.440612 158.071350 40.208000 1.000000 1.000000 1.000000 +vn 0.464596 -0.867265 -0.178889 +v 2.731364 157.612274 39.507980 1.000000 1.000000 1.000000 +vn -0.096257 -0.353763 0.930369 +v -2.866704 158.449478 42.093201 1.000000 1.000000 1.000000 +vn -0.203748 -0.599192 0.774245 +v -2.298708 157.834137 41.847797 1.000000 1.000000 1.000000 +vn -0.410038 -0.546006 0.730579 +v -3.751204 158.891800 42.078796 1.000000 1.000000 1.000000 +vn -0.124659 -0.278691 0.952256 +v -3.598612 159.069000 42.219200 1.000000 1.000000 1.000000 +vn -0.358677 -0.802635 0.476580 +v -2.397676 157.601105 41.509998 1.000000 1.000000 1.000000 +vn -0.568475 -0.678248 0.465635 +v -3.912720 158.704819 41.740997 1.000000 1.000000 1.000000 +vn -0.533670 -0.810608 0.241062 +v -3.199262 157.892731 41.146599 1.000000 1.000000 1.000000 +vn -0.783477 -0.602480 0.152255 +v -4.594130 159.258774 41.373798 1.000000 1.000000 1.000000 +vn -0.687767 -0.708332 0.158878 +v -4.016104 158.584824 41.272598 1.000000 1.000000 1.000000 +vn -0.668000 -0.562872 0.486777 +v -4.475862 159.362030 41.841980 1.000000 1.000000 1.000000 +vn -0.561160 -0.826548 -0.043793 +v -3.218084 157.862045 40.736599 1.000000 1.000000 1.000000 +vn -0.460241 -0.869298 -0.180275 +v -2.455652 157.464371 40.226196 1.000000 1.000000 1.000000 +vn -0.582115 -0.689549 -0.430888 +v -3.120056 158.025299 39.937981 1.000000 1.000000 1.000000 +vn -0.419735 -0.732579 -0.535864 +v -2.400096 157.595535 39.833000 1.000000 1.000000 1.000000 +vn -0.703932 -0.669689 -0.236637 +v -4.007336 158.594604 40.457176 1.000000 1.000000 1.000000 +vn -0.802189 -0.571398 -0.173196 +v -4.584114 159.267136 40.558197 1.000000 1.000000 1.000000 +vn -0.729405 -0.502712 -0.463950 +v -4.480394 159.357834 40.165176 1.000000 1.000000 1.000000 +vn -0.794477 -0.371302 -0.480563 +v -4.949900 160.094574 40.264000 1.000000 1.000000 1.000000 +vn -0.852374 -0.270901 -0.447293 +v -5.313820 160.892700 40.359798 1.000000 1.000000 1.000000 +vn -0.874327 -0.454120 -0.171252 +v -5.064474 160.022018 40.656979 1.000000 1.000000 1.000000 +vn -0.928065 -0.331295 -0.170114 +v -5.436812 160.838287 40.752998 1.000000 1.000000 1.000000 +vn -0.963936 -0.205424 -0.169197 +v -5.696794 161.699219 40.846199 1.000000 1.000000 1.000000 +vn -0.860683 -0.486507 0.150122 +v -5.075546 160.015045 41.472599 1.000000 1.000000 1.000000 +vn -0.919536 -0.363630 0.149087 +v -5.448710 160.832703 41.568378 1.000000 1.000000 1.000000 +vn -0.759637 -0.469193 0.450344 +v -4.944892 160.097366 41.940781 1.000000 1.000000 1.000000 +vn -0.801982 -0.356046 0.479642 +v -5.308452 160.895493 42.036797 1.000000 1.000000 1.000000 +vn -0.960036 -0.237617 0.147883 +v -5.709258 161.696426 41.661579 1.000000 1.000000 1.000000 +vn -0.860991 -0.246460 0.444917 +v -5.562278 161.735489 42.129997 1.000000 1.000000 1.000000 +vn -0.983167 -0.107981 0.147388 +v -5.856790 162.603378 41.754379 1.000000 1.000000 1.000000 +vn -0.503549 -0.384617 0.773633 +v -4.740762 160.227142 42.278580 1.000000 1.000000 1.000000 +vn -0.603633 -0.214756 0.767794 +v -5.332656 161.798279 42.467796 1.000000 1.000000 1.000000 +vn -0.272545 -0.218844 0.936924 +v -4.882282 161.083862 42.514977 1.000000 1.000000 1.000000 +vn 0.262913 -0.004527 0.964809 +v -4.342172 160.482483 42.422779 1.000000 1.000000 1.000000 +vn 0.196687 -0.149382 0.969020 +v -4.948922 164.263840 42.883400 1.000000 1.000000 1.000000 +vn -0.354907 0.013192 0.934808 +v -4.989348 165.101028 42.964798 1.000000 1.000000 1.000000 +vn 0.108216 -0.187763 0.976235 +v -3.791542 166.841019 43.189796 1.000000 1.000000 1.000000 +vn -0.666914 0.046177 0.743703 +v -5.403210 164.357315 42.739197 1.000000 1.000000 1.000000 +vn 0.202446 -0.390322 0.898145 +v -2.453218 167.690781 43.189796 1.000000 1.000000 1.000000 +vn 0.083217 -0.520739 0.849650 +v -0.984132 168.172165 43.189796 1.000000 1.000000 1.000000 +vn -0.047736 -0.536788 0.842366 +v 0.000000 168.234955 43.189796 1.000000 1.000000 1.000000 +vn -0.188679 -0.570713 0.799179 +v 1.318136 167.921005 43.185181 1.000000 1.000000 1.000000 +vn -0.336421 -0.516190 0.787635 +v 2.202430 167.491241 43.189796 1.000000 1.000000 1.000000 +vn -0.474902 -0.392781 0.787522 +v 3.288278 166.504745 43.189198 1.000000 1.000000 1.000000 +vn -0.581172 -0.143908 0.800955 +v 4.275866 164.559647 43.189796 1.000000 1.000000 1.000000 +vn 0.746198 -0.047881 0.664000 +v 5.921280 162.921524 43.188580 1.000000 1.000000 1.000000 +vn 0.715991 -0.290910 0.634609 +v 5.488184 160.760147 43.189796 1.000000 1.000000 1.000000 +vn 0.575109 -0.543739 0.611226 +v 4.201204 158.632263 43.189598 1.000000 1.000000 1.000000 +vn -0.266927 -0.808896 0.523868 +v 2.046658 157.197861 43.189598 1.000000 1.000000 1.000000 +vn -0.690318 -0.058655 0.721125 +v -5.494416 163.506165 42.651176 1.000000 1.000000 1.000000 +vn -0.896598 -0.008102 0.442772 +v -5.731002 163.517334 42.313400 1.000000 1.000000 1.000000 +vn -0.869583 -0.130303 0.476284 +v -5.706012 162.620132 42.222797 1.000000 1.000000 1.000000 +vn 0.967853 -0.203867 0.147302 +v 5.716416 161.728516 39.629601 1.000000 1.000000 1.000000 +vn 0.983597 -0.080855 0.161245 +v 5.846490 162.511292 39.527397 1.000000 1.000000 1.000000 +vn 0.891077 0.063736 0.449354 +v 5.733410 163.402924 39.880379 1.000000 1.000000 1.000000 +vn 0.576281 -0.691341 -0.435831 +v -2.424004 167.445190 31.309599 1.000000 1.000000 1.000000 +vn 0.690044 -0.721985 0.050756 +v -2.823858 166.873108 32.045799 1.000000 1.000000 1.000000 +vn 0.850123 -0.526523 -0.008082 +v -3.643404 165.879623 31.814798 1.000000 1.000000 1.000000 +vn 0.532525 -0.795763 -0.288409 +v -2.350220 167.316833 31.707199 1.000000 1.000000 1.000000 +vn 0.427493 -0.762906 -0.484999 +v -1.860526 167.770309 31.424398 1.000000 1.000000 1.000000 +vn 0.752855 -0.528735 -0.391981 +v -3.406764 166.546600 31.078398 1.000000 1.000000 1.000000 +vn 0.393856 -0.539747 -0.744010 +v -1.957486 168.006119 31.089598 1.000000 1.000000 1.000000 +vn 0.432285 -0.869990 -0.237163 +v -1.803902 167.632172 31.821798 1.000000 1.000000 1.000000 +vn 0.420152 -0.906059 0.050286 +v -1.783032 167.581940 32.276596 1.000000 1.000000 1.000000 +vn 0.244594 -0.859599 -0.448624 +v -0.628160 168.151230 31.654999 1.000000 1.000000 1.000000 +vn 0.253577 -0.704247 -0.663125 +v -0.660868 168.406586 31.320398 1.000000 1.000000 1.000000 +vn 0.022579 -0.671790 -0.740397 +v 0.698790 168.402405 31.552998 1.000000 1.000000 1.000000 +vn 0.061199 -0.881384 -0.468420 +v 0.018960 168.198669 31.771599 1.000000 1.000000 1.000000 +vn -0.175107 -0.859395 -0.480393 +v 1.290390 167.996353 32.002800 1.000000 1.000000 1.000000 +vn -0.225079 -0.682939 -0.694934 +v 1.920586 168.022858 31.770399 1.000000 1.000000 1.000000 +vn -0.004600 -0.972138 -0.234365 +v 0.018362 168.047974 32.168999 1.000000 1.000000 1.000000 +vn -0.401662 -0.714688 -0.572616 +v 2.400830 167.460541 32.221596 1.000000 1.000000 1.000000 +vn -0.256081 -0.934962 -0.245495 +v 1.251090 167.852631 32.400398 1.000000 1.000000 1.000000 +vn -0.501497 -0.545573 -0.671454 +v 3.563064 166.741943 32.117996 1.000000 1.000000 1.000000 +vn -0.555540 -0.729071 -0.399788 +v 2.924358 167.050323 32.337601 1.000000 1.000000 1.000000 +vn -0.171058 -0.984714 0.032824 +v 0.636446 167.941940 32.739998 1.000000 1.000000 1.000000 +vn -0.392159 -0.919877 0.006191 +v 1.749326 167.597290 32.957397 1.000000 1.000000 1.000000 +vn -0.718791 -0.548026 -0.427794 +v 3.785708 166.017776 32.569000 1.000000 1.000000 1.000000 +vn -0.560495 -0.828113 -0.008589 +v 2.300766 167.284729 33.073997 1.000000 1.000000 1.000000 +vn -0.528932 -0.787517 0.316304 +v 2.393762 167.447983 33.898201 1.000000 1.000000 1.000000 +vn -0.661293 -0.605554 0.442714 +v 2.915746 167.039154 34.014198 1.000000 1.000000 1.000000 +vn 0.001945 -0.999979 0.006130 +v 0.018146 167.992157 32.623798 1.000000 1.000000 1.000000 +vn -0.397492 -0.795798 0.456844 +v 1.286590 167.982407 33.679398 1.000000 1.000000 1.000000 +vn -0.548342 -0.428302 0.718247 +v 3.066792 167.235886 34.361801 1.000000 1.000000 1.000000 +vn -0.768409 -0.549299 0.328356 +v 3.376534 166.559158 34.129398 1.000000 1.000000 1.000000 +vn -0.752439 -0.656749 0.050158 +v 3.245378 166.430786 33.305000 1.000000 1.000000 1.000000 +vn -0.682235 -0.179900 0.708654 +v 4.305350 165.523819 34.707798 1.000000 1.000000 1.000000 +vn -0.820212 -0.449754 0.353516 +v 3.774560 166.009399 34.245399 1.000000 1.000000 1.000000 +vn -0.856779 -0.318607 0.405486 +v 4.093328 165.410797 34.360199 1.000000 1.000000 1.000000 +vn -0.921569 -0.178581 0.344701 +v 4.332284 164.767548 34.475601 1.000000 1.000000 1.000000 +vn -0.916574 -0.397063 0.047267 +v 3.934336 165.327072 33.535797 1.000000 1.000000 1.000000 +vn -0.939016 -0.124092 0.320703 +v 4.485738 164.093597 34.590797 1.000000 1.000000 1.000000 +vn -0.245801 0.134352 0.959964 +v 5.033548 163.411285 35.209599 1.000000 1.000000 1.000000 +vn -0.280380 0.038220 0.959128 +v 4.526938 165.641022 34.862396 1.000000 1.000000 1.000000 +vn -0.272547 -0.070983 0.959521 +v 3.224638 167.441010 34.516399 1.000000 1.000000 1.000000 +vn -0.350670 -0.577404 0.737317 +v 1.353258 168.227982 34.027199 1.000000 1.000000 1.000000 +vn -0.226963 -0.168362 0.959240 +v 1.422924 168.484726 34.181599 1.000000 1.000000 1.000000 +vn -0.225137 -0.876218 0.426094 +v 0.662182 168.131699 33.564400 1.000000 1.000000 1.000000 +vn -0.114142 -0.666372 0.736831 +v 0.019914 168.440079 33.795799 1.000000 1.000000 1.000000 +vn -0.154301 -0.221782 0.962810 +v 0.020964 168.706573 33.950401 1.000000 1.000000 1.000000 +vn 0.178207 -0.658296 0.731361 +v -1.951100 167.990768 33.448601 1.000000 1.000000 1.000000 +vn -0.055089 -0.259531 0.964162 +v -2.051472 168.234955 33.603199 1.000000 1.000000 1.000000 +vn 0.448309 -0.524127 0.724092 +v -3.572630 166.707062 33.102600 1.000000 1.000000 1.000000 +vn 0.065733 -0.259318 0.963552 +v -3.756444 166.885666 33.257198 1.000000 1.000000 1.000000 +vn 0.601719 -0.337666 0.723820 +v -4.545786 164.884750 32.767998 1.000000 1.000000 1.000000 +vn -0.364373 -0.028916 0.930804 +v -5.006150 165.050812 32.918800 1.000000 1.000000 1.000000 +vn 0.176181 -0.218314 0.959843 +v -4.779684 164.969864 32.922398 1.000000 1.000000 1.000000 +vn -0.677491 0.021952 0.735204 +v -5.410498 164.316864 32.662998 1.000000 1.000000 1.000000 +vn -0.880251 -0.030681 0.473515 +v -5.731916 163.488022 32.209000 1.000000 1.000000 1.000000 +vn -0.623888 -0.172933 0.762140 +v -5.469180 162.632690 32.430397 1.000000 1.000000 1.000000 +vn -0.351625 -0.123538 0.927954 +v -5.271758 163.468491 32.687401 1.000000 1.000000 1.000000 +vn -0.884968 -0.142686 0.443252 +v -5.704674 162.606186 32.092598 1.000000 1.000000 1.000000 +vn -0.841358 -0.256766 0.475593 +v -5.565304 161.743866 31.977198 1.000000 1.000000 1.000000 +vn -0.982539 -0.113379 0.147521 +v -5.855412 162.588043 31.624399 1.000000 1.000000 1.000000 +vn -0.965108 -0.199691 -0.169382 +v -5.699884 161.707581 30.693398 1.000000 1.000000 1.000000 +vn -0.959366 -0.240236 0.148000 +v -5.712360 161.704788 31.508999 1.000000 1.000000 1.000000 +vn -0.598329 -0.331092 0.729644 +v -5.096674 161.009918 32.199600 1.000000 1.000000 1.000000 +vn -0.815054 -0.367718 0.447740 +v -5.316124 160.913635 31.861998 1.000000 1.000000 1.000000 +vn -0.919058 -0.364767 0.149259 +v -5.456602 160.850845 31.393599 1.000000 1.000000 1.000000 +vn -0.930280 -0.324924 -0.170307 +v -5.444692 160.856430 30.578199 1.000000 1.000000 1.000000 +vn -0.740482 -0.468902 0.481475 +v -4.962956 160.132248 31.747198 1.000000 1.000000 1.000000 +vn -0.228414 -0.229915 0.946027 +v -4.889350 161.100616 32.340199 1.000000 1.000000 1.000000 +vn -0.446735 -0.453978 0.770930 +v -4.320464 159.562943 31.968798 1.000000 1.000000 1.000000 +vn -0.861550 -0.484904 0.150329 +v -5.094098 160.049927 31.278999 1.000000 1.000000 1.000000 +vn -0.683049 -0.571687 0.454554 +v -4.506506 159.403885 31.630999 1.000000 1.000000 1.000000 +vn -0.878221 -0.446369 -0.171708 +v -5.082988 160.056900 30.463398 1.000000 1.000000 1.000000 +vn -0.787376 -0.597521 0.151684 +v -4.625572 159.302032 31.162798 1.000000 1.000000 1.000000 +vn -0.547566 -0.650149 0.526762 +v -3.965608 158.757843 31.515999 1.000000 1.000000 1.000000 +vn -0.724384 -0.667100 -0.173914 +v -4.061512 158.649002 30.232199 1.000000 1.000000 1.000000 +vn -0.696335 -0.701135 0.153389 +v -4.070396 158.639252 31.047598 1.000000 1.000000 1.000000 +vn -0.809883 -0.560575 -0.172758 +v -4.615478 159.311798 30.347198 1.000000 1.000000 1.000000 +vn -0.856582 -0.258085 -0.446832 +v -5.321506 160.910843 30.184998 1.000000 1.000000 1.000000 +vn -0.813722 -0.368492 -0.449522 +v -4.967978 160.129456 30.070398 1.000000 1.000000 1.000000 +vn -0.745316 -0.461424 -0.481240 +v -4.511062 159.399704 29.954199 1.000000 1.000000 1.000000 +vn -0.578351 -0.667676 -0.468742 +v -3.345454 158.191345 29.723198 1.000000 1.000000 1.000000 +vn -0.681531 -0.572263 -0.456103 +v -3.969626 158.752274 29.838999 1.000000 1.000000 1.000000 +vn -0.407923 -0.803563 -0.433458 +v -1.995376 157.415543 29.504398 1.000000 1.000000 1.000000 +vn -0.493062 -0.842530 -0.216870 +v -2.710946 157.601105 29.999598 1.000000 1.000000 1.000000 +vn -0.261192 -0.948713 -0.178110 +v -1.250150 157.027634 29.782198 1.000000 1.000000 1.000000 +vn -0.266104 -0.824888 -0.498747 +v -1.221870 157.168564 29.389198 1.000000 1.000000 1.000000 +vn -0.173517 -0.646836 -0.742627 +v -0.399730 157.299728 28.928398 1.000000 1.000000 1.000000 +vn -0.101005 -0.978195 -0.181476 +v -0.426556 156.899261 29.665998 1.000000 1.000000 1.000000 +vn -0.133913 -0.871619 -0.471538 +v -0.416920 157.042969 29.272999 1.000000 1.000000 1.000000 +vn -0.340343 -0.924388 0.172257 +v -2.046026 157.266235 30.712999 1.000000 1.000000 1.000000 +vn -0.204515 -0.965942 0.158525 +v -1.252882 157.015076 30.597799 1.000000 1.000000 1.000000 +vn 0.048837 -0.982132 -0.181747 +v 0.407608 156.899261 29.549599 1.000000 1.000000 1.000000 +vn 0.095814 -0.982862 0.157486 +v 0.408490 156.885300 30.365198 1.000000 1.000000 1.000000 +vn -0.055296 -0.985781 0.158678 +v -0.427490 156.885300 30.481598 1.000000 1.000000 1.000000 +vn -0.000754 -0.881714 -0.471784 +v 0.398364 157.042969 29.156399 1.000000 1.000000 1.000000 +vn 0.195781 -0.963676 -0.181653 +v 1.225778 157.023438 29.434198 1.000000 1.000000 1.000000 +vn 0.131462 -0.873327 0.469061 +v 0.397962 157.048569 30.833399 1.000000 1.000000 1.000000 +vn 0.261671 -0.827787 0.496283 +v 1.196822 157.169952 30.717999 1.000000 1.000000 1.000000 +vn 0.242218 -0.957435 0.156999 +v 1.228460 157.009491 30.249798 1.000000 1.000000 1.000000 +vn 0.002082 -0.866276 0.499561 +v -0.416498 157.049957 30.949799 1.000000 1.000000 1.000000 +vn 0.169249 -0.603993 0.778811 +v 0.381508 157.305298 31.171198 1.000000 1.000000 1.000000 +vn 0.385330 -0.797532 0.464181 +v 1.972034 157.411346 30.602798 1.000000 1.000000 1.000000 +vn 0.343423 -0.575747 0.742008 +v 1.890588 157.652740 30.940399 1.000000 1.000000 1.000000 +vn 0.383576 -0.910258 0.155886 +v 2.024164 157.257874 30.134399 1.000000 1.000000 1.000000 +vn 0.338744 -0.923424 -0.180392 +v 2.019736 157.270416 29.318998 1.000000 1.000000 1.000000 +vn 0.495185 -0.717749 0.489519 +v 2.703722 157.767166 30.487997 1.000000 1.000000 1.000000 +vn 0.471915 -0.430604 0.769335 +v 3.251108 158.443893 30.709599 1.000000 1.000000 1.000000 +vn 0.243888 -0.221505 0.944168 +v 1.813648 157.880188 31.080999 1.000000 1.000000 1.000000 +vn 0.513690 -0.843894 0.154808 +v 2.775190 157.623428 30.019798 1.000000 1.000000 1.000000 +vn 0.600193 -0.656491 0.456933 +v 3.391148 158.237381 30.371798 1.000000 1.000000 1.000000 +vn 0.472362 -0.863057 -0.178904 +v 2.769126 157.634598 29.204199 1.000000 1.000000 1.000000 +vn 0.629712 -0.761492 0.153600 +v 3.480782 158.104828 29.903599 1.000000 1.000000 1.000000 +vn 0.679140 -0.552800 0.482888 +v 4.005920 158.801102 30.256798 1.000000 1.000000 1.000000 +vn 0.592646 -0.785681 -0.177413 +v 3.473172 158.115997 29.087999 1.000000 1.000000 1.000000 +vn 0.698146 -0.693997 -0.175957 +v 4.102816 158.693665 28.972799 1.000000 1.000000 1.000000 +vn 0.731084 -0.665199 0.151745 +v 4.111790 158.683899 29.788399 1.000000 1.000000 1.000000 +vn 0.263144 -0.842580 -0.469909 +v 1.974030 157.405762 28.925798 1.000000 1.000000 1.000000 +vn 0.385996 -0.794927 -0.468080 +v 2.706452 157.761581 28.811199 1.000000 1.000000 1.000000 +vn 0.486848 -0.720818 -0.493356 +v 3.394572 158.231812 28.694998 1.000000 1.000000 1.000000 +vn 0.600637 -0.654289 -0.459502 +v 4.009962 158.796921 28.579798 1.000000 1.000000 1.000000 +vn 0.789119 -0.589051 -0.174096 +v 4.654450 159.364807 28.856998 1.000000 1.000000 1.000000 +vn 0.761303 -0.466614 0.450211 +v 4.544524 159.456909 30.140799 1.000000 1.000000 1.000000 +vn 0.816935 -0.556769 0.150422 +v 4.664646 159.356445 29.672598 1.000000 1.000000 1.000000 +vn 0.693530 -0.551431 -0.463615 +v 4.549120 159.452728 28.463799 1.000000 1.000000 1.000000 +vn 0.859419 -0.466043 -0.210245 +v 5.114814 160.121078 28.740398 1.000000 1.000000 1.000000 +vn 0.883871 -0.443499 0.148598 +v 5.126002 160.114105 29.555998 1.000000 1.000000 1.000000 +vn 0.394200 -0.545952 -0.739285 +v 3.844340 158.979706 28.235197 1.000000 1.000000 1.000000 +vn 0.462102 -0.419372 -0.781402 +v 4.361226 159.610397 28.119398 1.000000 1.000000 1.000000 +vn 0.821290 -0.389176 -0.417163 +v 5.311244 160.888519 28.245199 1.000000 1.000000 1.000000 +vn 0.951874 -0.256223 -0.168183 +v 5.693434 161.682465 28.522999 1.000000 1.000000 1.000000 +vn 0.931400 -0.325923 0.162072 +v 5.446108 160.828522 29.453798 1.000000 1.000000 1.000000 +vn 0.839031 -0.260009 -0.477935 +v 5.564608 161.718750 28.129999 1.000000 1.000000 1.000000 +vn 0.967094 -0.207261 0.147555 +v 5.705896 161.679672 29.338598 1.000000 1.000000 1.000000 +vn 0.978458 -0.118102 -0.169330 +v 5.840258 162.571289 28.406799 1.000000 1.000000 1.000000 +vn 0.589561 -0.348621 -0.728616 +v 5.091872 160.986191 27.900599 1.000000 1.000000 1.000000 +vn 0.883632 -0.145096 -0.445131 +v 5.708110 162.586655 28.013798 1.000000 1.000000 1.000000 +vn 0.224999 -0.565757 -0.793281 +v 2.594660 157.989014 28.466599 1.000000 1.000000 1.000000 +vn 0.125996 -0.856689 -0.500209 +v 1.198030 157.164383 29.041199 1.000000 1.000000 1.000000 +vn 0.986030 -0.078102 0.147119 +v 5.853044 162.569901 29.222399 1.000000 1.000000 1.000000 +vn 0.880499 -0.024830 0.473397 +v 5.702344 162.586655 29.690598 1.000000 1.000000 1.000000 +vn 0.878337 -0.161269 0.450018 +v 5.558982 161.720139 29.806799 1.000000 1.000000 1.000000 +vn 0.674718 -0.064607 0.735243 +v 5.329438 161.782928 30.144598 1.000000 1.000000 1.000000 +vn 0.359774 0.101021 0.927555 +v 5.244450 162.639664 30.168999 1.000000 1.000000 1.000000 +vn 0.365788 0.005798 0.930680 +v 4.879824 161.081085 30.400398 1.000000 1.000000 1.000000 +vn 0.626226 -0.202868 0.752785 +v 4.787794 160.320618 30.361998 1.000000 1.000000 1.000000 +vn 0.822860 -0.343591 0.452601 +v 4.994010 160.193649 30.024199 1.000000 1.000000 1.000000 +vn 0.345957 -0.135652 0.928392 +v 3.684242 159.158310 30.734999 1.000000 1.000000 1.000000 +vn 0.585833 -0.281449 0.759991 +v 4.356874 159.613190 30.478598 1.000000 1.000000 1.000000 +vn 0.122238 -0.336917 0.933566 +v -0.383110 157.546692 31.428198 1.000000 1.000000 1.000000 +vn 0.016468 -0.344428 0.938668 +v -1.833360 157.888550 31.659599 1.000000 1.000000 1.000000 +vn -0.051671 -0.652122 0.756352 +v -1.170262 157.425293 31.403799 1.000000 1.000000 1.000000 +vn -0.357614 -0.805493 0.472539 +v -2.646944 157.735062 31.283398 1.000000 1.000000 1.000000 +vn -0.153063 -0.866260 0.475568 +v -1.220642 157.175537 31.065998 1.000000 1.000000 1.000000 +vn -0.218433 -0.598712 0.770605 +v -2.537690 157.962509 31.621199 1.000000 1.000000 1.000000 +vn -0.469554 -0.868885 0.156711 +v -2.716880 157.588562 30.815199 1.000000 1.000000 1.000000 +vn -0.588495 -0.793442 0.155317 +v -3.430378 158.062973 30.931799 1.000000 1.000000 1.000000 +vn -0.621341 -0.763433 -0.176368 +v -3.422884 158.074142 30.116198 1.000000 1.000000 1.000000 +vn -0.475027 -0.700887 0.532078 +v -3.342068 158.196915 31.399998 1.000000 1.000000 1.000000 +vn -0.189202 -0.403218 0.895331 +v -3.647266 159.117844 31.994198 1.000000 1.000000 1.000000 +vn 0.235594 -0.149593 0.960270 +v -5.033278 163.458725 32.691200 1.000000 1.000000 1.000000 +vn 0.814151 -0.379203 0.439732 +v -4.321984 164.805222 32.420197 1.000000 1.000000 1.000000 +vn 0.808783 -0.501294 0.307528 +v -3.790588 165.985672 32.639000 1.000000 1.000000 1.000000 +vn 0.983659 -0.177075 0.032555 +v -4.307036 164.099182 31.480799 1.000000 1.000000 1.000000 +vn 0.579077 -0.742990 0.335612 +v -2.937928 167.019623 32.869999 1.000000 1.000000 1.000000 +vn 0.635044 -0.631887 0.444339 +v -3.396748 166.536835 32.754997 1.000000 1.000000 1.000000 +vn 0.928339 -0.371674 0.006639 +v -3.950198 165.292191 31.698198 1.000000 1.000000 1.000000 +vn 0.475781 -0.799837 0.365915 +v -2.416872 167.432648 32.986198 1.000000 1.000000 1.000000 +vn 0.173325 -0.913006 0.369295 +v -1.253050 167.993561 33.216400 1.000000 1.000000 1.000000 +vn 0.331330 -0.842204 0.425338 +v -1.855054 167.757751 33.100998 1.000000 1.000000 1.000000 +vn 0.108361 -0.932783 0.343763 +v -0.626312 168.137283 33.331596 1.000000 1.000000 1.000000 +vn -0.099774 -0.885410 0.453977 +v 0.018902 168.184723 33.448196 1.000000 1.000000 1.000000 +vn 0.170062 -0.985375 0.010687 +v -0.602010 167.947510 32.507401 1.000000 1.000000 1.000000 +vn 0.736733 -0.382317 -0.557725 +v -3.801790 165.994049 30.962399 1.000000 1.000000 1.000000 +vn 0.896656 -0.115159 0.427489 +v -4.551284 163.439194 32.188999 1.000000 1.000000 1.000000 +vn -0.700988 -0.092284 0.707177 +v 4.551026 164.866623 29.670998 1.000000 1.000000 1.000000 +vn -0.272883 0.073380 0.959245 +v 4.785258 164.950333 29.825598 1.000000 1.000000 1.000000 +vn -0.603423 -0.353613 0.714730 +v 3.539170 166.746124 29.324999 1.000000 1.000000 1.000000 +vn -0.280759 -0.036355 0.959089 +v 3.721322 166.926132 29.479597 1.000000 1.000000 1.000000 +vn -0.430707 -0.526614 0.732918 +v 1.966216 167.982407 28.990198 1.000000 1.000000 1.000000 +vn -0.249631 -0.139379 0.958258 +v 2.067424 168.225174 29.144798 1.000000 1.000000 1.000000 +vn -0.210713 -0.643854 0.735563 +v 0.671936 168.388443 28.758999 1.000000 1.000000 1.000000 +vn -0.184847 -0.199014 0.962406 +v 0.706550 168.653564 28.913601 1.000000 1.000000 1.000000 +vn -0.507923 -0.732295 0.453606 +v 1.869370 167.749374 28.642599 1.000000 1.000000 1.000000 +vn -0.349847 -0.835829 0.423080 +v 1.269538 167.989365 28.527399 1.000000 1.000000 1.000000 +vn -0.144230 -0.989523 0.006507 +v 0.613990 167.946121 27.586998 1.000000 1.000000 1.000000 +vn -0.313475 -0.948999 0.033670 +v 1.220208 167.805191 27.703199 1.000000 1.000000 1.000000 +vn -0.633954 -0.706465 0.314659 +v 2.898970 167.054504 28.861399 1.000000 1.000000 1.000000 +vn -0.227591 -0.862447 0.452092 +v 0.638822 168.135880 28.411398 1.000000 1.000000 1.000000 +vn 0.023379 -0.999674 0.010218 +v -0.006106 167.992157 27.470598 1.000000 1.000000 1.000000 +vn -0.147531 -0.961063 -0.233650 +v 0.621190 168.000534 27.132198 1.000000 1.000000 1.000000 +vn -0.389560 -0.887983 -0.244395 +v 1.817782 167.625198 27.363598 1.000000 1.000000 1.000000 +vn -0.520072 -0.854102 0.006013 +v 2.279292 167.297287 27.920597 1.000000 1.000000 1.000000 +vn -0.737834 -0.512632 0.439102 +v 3.364858 166.574509 28.977398 1.000000 1.000000 1.000000 +vn -0.669886 -0.742416 -0.008453 +v 2.786354 166.906586 28.037201 1.000000 1.000000 1.000000 +vn -0.652185 -0.646726 -0.395474 +v 3.374796 166.584274 27.300798 1.000000 1.000000 1.000000 +vn -0.498850 -0.654101 -0.568596 +v 2.907532 167.065674 27.184799 1.000000 1.000000 1.000000 +vn -0.299583 -0.826283 -0.476976 +v 1.874882 167.761948 26.965998 1.000000 1.000000 1.000000 +vn -0.321668 -0.644880 -0.693297 +v 2.502412 167.693558 26.733398 1.000000 1.000000 1.000000 +vn -0.574424 -0.474380 -0.667084 +v 3.968750 166.183807 27.081198 1.000000 1.000000 1.000000 +vn -0.786518 -0.448573 -0.424466 +v 4.098220 165.433121 27.531998 1.000000 1.000000 1.000000 +vn -0.076590 -0.667665 -0.740511 +v 1.339702 168.250305 26.516199 1.000000 1.000000 1.000000 +vn -0.069635 -0.880928 -0.468100 +v 0.640708 168.149841 26.734798 1.000000 1.000000 1.000000 +vn 0.148230 -0.731894 -0.665101 +v -0.006648 168.456802 26.283398 1.000000 1.000000 1.000000 +vn 0.115801 -0.885166 -0.450634 +v -0.006342 168.198669 26.618198 1.000000 1.000000 1.000000 +vn 0.313666 -0.814884 -0.487420 +v -1.275132 168.003326 26.387598 1.000000 1.000000 1.000000 +vn 0.302755 -0.922606 -0.239033 +v -1.236330 167.858215 26.784998 1.000000 1.000000 1.000000 +vn 0.312298 -0.587280 -0.746707 +v -1.341556 168.250305 26.052799 1.000000 1.000000 1.000000 +vn 0.413474 -0.862936 -0.290482 +v -1.817240 167.625198 26.670399 1.000000 1.000000 1.000000 +vn 0.473231 -0.763280 -0.439836 +v -1.874290 167.763336 26.272799 1.000000 1.000000 1.000000 +vn 0.284570 -0.957327 0.050457 +v -1.222018 167.805191 27.239798 1.000000 1.000000 1.000000 +vn -0.031082 -0.937823 0.345720 +v -0.006324 168.183319 28.294798 1.000000 1.000000 1.000000 +vn 0.206010 -0.880812 0.426299 +v -1.271378 167.989365 28.064198 1.000000 1.000000 1.000000 +vn 0.582860 -0.810943 0.051445 +v -2.342172 167.256821 27.008999 1.000000 1.000000 1.000000 +vn 0.036947 -0.928535 0.369401 +v -0.645222 168.134491 28.179398 1.000000 1.000000 1.000000 +vn 0.467864 -0.816441 0.338420 +v -2.436790 167.418686 27.833199 1.000000 1.000000 1.000000 +vn 0.772507 -0.634953 -0.008210 +v -3.278970 166.393112 26.777998 1.000000 1.000000 1.000000 +vn 0.355304 -0.858768 0.369158 +v -1.868766 167.749374 27.949398 1.000000 1.000000 1.000000 +vn 0.079997 -0.676356 0.732218 +v -1.337190 168.233566 28.411798 1.000000 1.000000 1.000000 +vn -0.092370 -0.249643 0.963922 +v -1.405968 168.490295 28.566399 1.000000 1.000000 1.000000 +vn 0.368690 -0.578662 0.727473 +v -3.104824 167.202408 28.065798 1.000000 1.000000 1.000000 +vn 0.026663 -0.265067 0.963861 +v -3.264562 167.406128 28.220398 1.000000 1.000000 1.000000 +vn -0.366011 0.017630 0.930443 +v -4.733114 165.773590 27.881998 1.000000 1.000000 1.000000 +vn 0.142359 -0.238843 0.960567 +v -4.518994 165.659164 27.885599 1.000000 1.000000 1.000000 +vn 0.548771 -0.412141 0.727317 +v -4.297856 165.540558 27.730997 1.000000 1.000000 1.000000 +vn -0.366100 -0.078159 0.927288 +v -5.195076 164.244293 27.650599 1.000000 1.000000 1.000000 +vn 0.667423 -0.209893 0.714487 +v -4.717330 164.152206 27.499798 1.000000 1.000000 1.000000 +vn 0.211228 -0.178529 0.960994 +v -4.960046 164.199646 27.654398 1.000000 1.000000 1.000000 +vn 0.756268 -0.481306 0.443174 +v -4.086258 165.427536 27.383398 1.000000 1.000000 1.000000 +vn 0.851318 -0.336230 0.402750 +v -4.328176 164.787079 27.268198 1.000000 1.000000 1.000000 +vn 0.988061 -0.153965 0.005422 +v -4.310898 164.075455 26.327799 1.000000 1.000000 1.000000 +vn 0.953131 -0.300801 0.032572 +v -4.160108 164.727081 26.443998 1.000000 1.000000 1.000000 +vn 0.733980 -0.604028 0.310522 +v -3.411452 166.520081 27.602198 1.000000 1.000000 1.000000 +vn 0.874398 -0.227337 0.428657 +v -4.485082 164.108948 27.151999 1.000000 1.000000 1.000000 +vn 0.872168 -0.489158 0.006943 +v -3.656626 165.855911 26.661398 1.000000 1.000000 1.000000 +vn 0.899615 -0.369111 -0.233345 +v -3.973566 165.367538 26.104399 1.000000 1.000000 1.000000 +vn 0.678249 -0.475373 -0.560355 +v -3.421520 166.529861 25.925598 1.000000 1.000000 1.000000 +vn 0.674046 -0.623528 -0.396075 +v -2.960690 167.018219 26.041599 1.000000 1.000000 1.000000 +vn 0.495805 -0.549205 -0.672720 +v -2.571344 167.648911 25.821999 1.000000 1.000000 1.000000 +vn 0.540986 -0.711688 0.448146 +v -2.951974 167.007065 27.718199 1.000000 1.000000 1.000000 +vn 0.267190 -0.090640 0.959372 +v -4.882398 161.905716 27.307198 1.000000 1.000000 1.000000 +vn -0.259401 -0.199132 0.945017 +v -5.113746 161.841537 27.303398 1.000000 1.000000 1.000000 +vn -0.245077 -0.374362 0.894310 +v -4.132298 159.694107 26.957399 1.000000 1.000000 1.000000 +vn -0.639002 -0.251552 0.726910 +v -5.330570 161.782928 27.162798 1.000000 1.000000 1.000000 +vn -0.506706 -0.391504 0.768097 +v -4.743350 160.234100 26.931999 1.000000 1.000000 1.000000 +vn -0.642343 -0.092956 0.760759 +v -5.495742 163.444778 27.393599 1.000000 1.000000 1.000000 +vn -0.034303 -0.343071 0.938683 +v -2.489756 158.209488 26.622799 1.000000 1.000000 1.000000 +vn -0.302706 -0.562503 0.769389 +v -3.178250 158.386688 26.584398 1.000000 1.000000 1.000000 +vn -0.146571 -0.637257 0.756585 +v -1.891014 157.652740 26.366999 1.000000 1.000000 1.000000 +vn 0.071424 -0.348784 0.934478 +v -1.095946 157.656921 26.391399 1.000000 1.000000 1.000000 +vn 0.208865 -0.250634 0.945282 +v 1.122236 157.662506 26.044197 1.000000 1.000000 1.000000 +vn 0.078559 -0.620327 0.780399 +v -0.368898 157.303909 26.134399 1.000000 1.000000 1.000000 +vn 0.406251 -0.489300 0.771716 +v 2.617140 158.008545 25.672798 1.000000 1.000000 1.000000 +vn 0.324121 -0.179431 0.928843 +v 3.135930 158.651794 25.698198 1.000000 1.000000 1.000000 +vn 0.256597 -0.616630 0.744262 +v 1.169858 157.425293 25.903599 1.000000 1.000000 1.000000 +vn 0.593341 -0.281224 0.754228 +v 4.375260 159.641098 25.325199 1.000000 1.000000 1.000000 +vn 0.541447 -0.354804 0.762200 +v 3.859546 159.004822 25.441799 1.000000 1.000000 1.000000 +vn 0.691205 -0.562470 0.453721 +v 4.025786 158.822021 25.103998 1.000000 1.000000 1.000000 +vn 0.769862 -0.446820 0.455702 +v 4.563708 159.486221 24.987398 1.000000 1.000000 1.000000 +vn 0.660369 -0.149149 0.735980 +v 5.095644 161.009918 25.107798 1.000000 1.000000 1.000000 +vn 0.596274 -0.638346 0.486797 +v 3.409738 158.251343 25.219801 1.000000 1.000000 1.000000 +vn 0.632923 -0.758807 0.153690 +v 3.499862 158.118790 24.751598 1.000000 1.000000 1.000000 +vn 0.734906 -0.660921 0.151979 +v 4.132196 158.704819 24.635599 1.000000 1.000000 1.000000 +vn 0.501887 -0.732124 0.460547 +v 2.729858 157.783905 25.334999 1.000000 1.000000 1.000000 +vn 0.516414 -0.842123 0.155389 +v 2.802022 157.638779 24.866798 1.000000 1.000000 1.000000 +vn 0.595506 -0.783446 -0.177722 +v 3.492228 158.129944 23.935999 1.000000 1.000000 1.000000 +vn 0.702123 -0.689914 -0.176187 +v 4.123158 158.714600 23.820198 1.000000 1.000000 1.000000 +vn 0.817727 -0.555495 0.150826 +v 4.684320 159.385742 24.519199 1.000000 1.000000 1.000000 +vn 0.789882 -0.575239 -0.212570 +v 4.674096 159.394119 23.703598 1.000000 1.000000 1.000000 +vn 0.611047 -0.638753 -0.467564 +v 4.029854 158.817841 23.426998 1.000000 1.000000 1.000000 +vn 0.502520 -0.729713 -0.463674 +v 3.413190 158.245758 23.542999 1.000000 1.000000 1.000000 +vn 0.475285 -0.861283 -0.179710 +v 2.795906 157.651352 24.051197 1.000000 1.000000 1.000000 +vn 0.378744 -0.781232 -0.496215 +v 2.732626 157.778320 23.658199 1.000000 1.000000 1.000000 +vn 0.398728 -0.476587 -0.783506 +v 3.863408 159.000626 23.082600 1.000000 1.000000 1.000000 +vn 0.761811 -0.492589 -0.420714 +v 4.965274 160.126678 23.208199 1.000000 1.000000 1.000000 +vn 0.535257 -0.421467 -0.732028 +v 4.760190 160.256439 22.863800 1.000000 1.000000 1.000000 +vn 0.797398 -0.365317 -0.480312 +v 5.320490 160.910843 23.093197 1.000000 1.000000 1.000000 +vn 0.911042 -0.376247 -0.168645 +v 5.443676 160.857819 23.486198 1.000000 1.000000 1.000000 +vn 0.639174 -0.260075 -0.723752 +v 5.341526 161.812241 22.632397 1.000000 1.000000 1.000000 +vn 0.233568 -0.199066 -0.951745 +v 5.102402 161.876419 22.481400 1.000000 1.000000 1.000000 +vn 0.611775 -0.140710 -0.778417 +v 5.474872 162.646652 22.515999 1.000000 1.000000 1.000000 +vn 0.883859 -0.141876 -0.445718 +v 5.710738 162.620132 22.860397 1.000000 1.000000 1.000000 +vn 0.857048 -0.255834 -0.447234 +v 5.571664 161.749435 22.976997 1.000000 1.000000 1.000000 +vn 0.955497 -0.241101 -0.169990 +v 5.700656 161.714569 23.369999 1.000000 1.000000 1.000000 +vn 0.881467 -0.443164 0.163161 +v 5.091356 160.048538 24.416998 1.000000 1.000000 1.000000 +vn 0.932572 -0.329240 0.148024 +v 5.455584 160.852249 24.301798 1.000000 1.000000 1.000000 +vn 0.849801 -0.271746 0.451655 +v 5.315108 160.913635 24.769999 1.000000 1.000000 1.000000 +vn 0.870144 -0.135475 0.473811 +v 5.566026 161.750839 24.653799 1.000000 1.000000 1.000000 +vn 0.968197 -0.202119 0.147453 +v 5.713120 161.711761 24.185598 1.000000 1.000000 1.000000 +vn 0.896494 -0.026380 0.442270 +v 5.704956 162.621521 24.537399 1.000000 1.000000 1.000000 +vn 0.647578 0.052257 0.760205 +v 5.469398 162.646652 24.875198 1.000000 1.000000 1.000000 +vn 0.986365 -0.073763 0.147117 +v 5.855746 162.604782 24.068998 1.000000 1.000000 1.000000 +vn 0.979004 -0.113747 -0.169154 +v 5.842948 162.606186 23.253597 1.000000 1.000000 1.000000 +vn 0.370745 0.054987 0.927105 +v 5.119088 161.872238 25.132198 1.000000 1.000000 1.000000 +vn -0.647087 -0.272984 0.711869 +v 3.945602 166.190781 24.288198 1.000000 1.000000 1.000000 +vn -0.283619 -0.000676 0.958937 +v 4.148664 166.342880 24.442799 1.000000 1.000000 1.000000 +vn -0.501931 -0.464942 0.729311 +v 2.542530 167.647522 23.953398 1.000000 1.000000 1.000000 +vn -0.267171 -0.106337 0.957764 +v 2.673390 167.873566 24.107998 1.000000 1.000000 1.000000 +vn -0.302896 -0.609425 0.732704 +v 1.311440 168.241928 23.722198 1.000000 1.000000 1.000000 +vn -0.211971 -0.174428 0.961584 +v 1.378956 168.498672 23.876799 1.000000 1.000000 1.000000 +vn -0.606193 -0.655966 0.449710 +v 2.417310 167.431229 23.605799 1.000000 1.000000 1.000000 +vn -0.466919 -0.778006 0.420349 +v 1.853238 167.757751 23.490597 1.000000 1.000000 1.000000 +vn -0.288246 -0.957539 0.005753 +v 1.198382 167.810776 22.550198 1.000000 1.000000 1.000000 +vn -0.446910 -0.893967 0.033082 +v 1.781230 167.581940 22.666397 1.000000 1.000000 1.000000 +vn -0.725127 -0.614585 0.310606 +v 3.350168 166.591248 23.824598 1.000000 1.000000 1.000000 +vn -0.351323 -0.821017 0.450004 +v 1.246838 167.996353 23.374397 1.000000 1.000000 1.000000 +vn -0.124146 -0.992210 0.010379 +v 0.589906 167.948914 22.433800 1.000000 1.000000 1.000000 +vn -0.286065 -0.929245 -0.233818 +v 1.212428 167.865189 22.095398 1.000000 1.000000 1.000000 +vn -0.634357 -0.773013 0.006505 +v 2.766770 166.923340 22.883797 1.000000 1.000000 1.000000 +vn -0.512421 -0.823484 -0.243514 +v 2.350606 167.315430 22.326797 1.000000 1.000000 1.000000 +vn -0.800499 -0.411554 0.435689 +v 3.751282 166.047073 23.940598 1.000000 1.000000 1.000000 +vn -0.764521 -0.644551 -0.007897 +v 3.220028 166.461487 23.000397 1.000000 1.000000 1.000000 +vn -0.735155 -0.553301 -0.391671 +v 3.762368 166.054047 22.264000 1.000000 1.000000 1.000000 +vn -0.586556 -0.579876 -0.565416 +v 3.360054 166.601028 22.147999 1.000000 1.000000 1.000000 +vn -0.415803 -0.775865 -0.474491 +v 2.424442 167.443802 21.929199 1.000000 1.000000 1.000000 +vn -0.634818 -0.395177 -0.663959 +v 4.300508 165.569855 22.044399 1.000000 1.000000 1.000000 +vn -0.839674 -0.342970 -0.421092 +v 4.334394 164.808014 22.495197 1.000000 1.000000 1.000000 +vn -0.412804 -0.596255 -0.688530 +v 3.037618 167.283340 21.696598 1.000000 1.000000 1.000000 +vn -0.197574 -0.862134 -0.466572 +v 1.250522 168.010300 21.697998 1.000000 1.000000 1.000000 +vn -0.174767 -0.651761 -0.738014 +v 1.955632 168.006119 21.479397 1.000000 1.000000 1.000000 +vn 0.039383 -0.744776 -0.666151 +v 0.647702 168.409378 21.246597 1.000000 1.000000 1.000000 +vn -0.014948 -0.892165 -0.451462 +v 0.615582 168.152634 21.581398 1.000000 1.000000 1.000000 +vn 0.164751 -0.956451 -0.240955 +v -0.645732 167.997757 21.748199 1.000000 1.000000 1.000000 +vn 0.191299 -0.850337 -0.490236 +v -0.665986 168.147049 21.350800 1.000000 1.000000 1.000000 +vn 0.223701 -0.622779 -0.749736 +v -0.700670 168.402405 21.015999 1.000000 1.000000 1.000000 +vn 0.283975 -0.913006 -0.292880 +v -1.250456 167.852631 21.633598 1.000000 1.000000 1.000000 +vn 0.359530 -0.821284 -0.442979 +v -1.289708 167.997757 21.236000 1.000000 1.000000 1.000000 +vn 0.141838 -0.988643 0.049670 +v -0.638258 167.941940 22.202999 1.000000 1.000000 1.000000 +vn -0.168738 -0.923035 0.345737 +v 0.613764 168.138672 23.257999 1.000000 1.000000 1.000000 +vn 0.074028 -0.900043 0.429468 +v -0.664032 168.131699 23.027397 1.000000 1.000000 1.000000 +vn 0.462477 -0.885134 0.051506 +v -1.816894 167.565186 21.972198 1.000000 1.000000 1.000000 +vn -0.100102 -0.923383 0.370600 +v -0.025390 168.184723 23.142597 1.000000 1.000000 1.000000 +vn 0.346021 -0.873689 0.341959 +v -1.890292 167.738205 22.796398 1.000000 1.000000 1.000000 +vn 0.677603 -0.735387 -0.007777 +v -2.853496 166.846588 21.740997 1.000000 1.000000 1.000000 +vn 0.226974 -0.900384 0.371202 +v -1.285906 167.983795 22.912598 1.000000 1.000000 1.000000 +vn -0.020570 -0.679890 0.733026 +v -0.698392 168.385651 23.375000 1.000000 1.000000 1.000000 +vn -0.127596 -0.235650 0.963425 +v -0.734292 168.649368 23.529598 1.000000 1.000000 1.000000 +vn 0.281589 -0.622941 0.729831 +v -2.579224 167.623795 23.028999 1.000000 1.000000 1.000000 +vn -0.012368 -0.265927 0.963914 +v -2.711912 167.848450 23.183598 1.000000 1.000000 1.000000 +vn 0.485439 -0.479668 0.730936 +v -3.969858 166.153122 22.694199 1.000000 1.000000 1.000000 +vn -0.360091 0.063471 0.930756 +v -4.371886 166.447540 22.844997 1.000000 1.000000 1.000000 +vn 0.105181 -0.254640 0.961299 +v -4.174116 166.303802 22.848797 1.000000 1.000000 1.000000 +vn 0.684041 -0.576618 0.446766 +v -3.774404 166.010788 22.346600 1.000000 1.000000 1.000000 +vn 0.799533 -0.442983 0.405602 +v -4.094678 165.410797 22.231400 1.000000 1.000000 1.000000 +vn 0.632493 -0.292909 0.717047 +v -4.559820 164.840103 22.462997 1.000000 1.000000 1.000000 +vn 0.182970 -0.203975 0.961726 +v -4.794438 164.922424 22.617599 1.000000 1.000000 1.000000 +vn -0.374353 -0.031298 0.926758 +v -5.021600 165.001968 22.613800 1.000000 1.000000 1.000000 +vn -0.649786 -0.011407 0.760031 +v -5.419934 164.254074 22.356800 1.000000 1.000000 1.000000 +vn -0.281558 -0.157805 0.946479 +v -5.242880 162.610367 22.266598 1.000000 1.000000 1.000000 +vn 0.251331 -0.123937 0.959933 +v -5.005700 162.638275 22.270397 1.000000 1.000000 1.000000 +vn -0.189878 -0.259359 0.946931 +v -4.537392 160.331787 21.919598 1.000000 1.000000 1.000000 +vn -0.673702 -0.156875 0.722160 +v -5.465190 162.582458 22.125999 1.000000 1.000000 1.000000 +vn -0.589469 -0.263404 0.763639 +v -5.323862 161.756424 22.010399 1.000000 1.000000 1.000000 +vn -0.083988 -0.334439 0.938667 +v -3.104580 158.626678 21.586800 1.000000 1.000000 1.000000 +vn -0.376988 -0.521218 0.765645 +v -3.755106 158.895981 21.546600 1.000000 1.000000 1.000000 +vn -0.238717 -0.610593 0.755109 +v -2.581992 157.986221 21.331200 1.000000 1.000000 1.000000 +vn 0.016653 -0.352604 0.935624 +v -1.793988 157.873199 21.355400 1.000000 1.000000 1.000000 +vn -0.031971 -0.647022 0.761801 +v -1.118518 157.414139 21.098400 1.000000 1.000000 1.000000 +vn 0.121965 -0.334051 0.934631 +v -0.337820 157.543900 21.123600 1.000000 1.000000 1.000000 +vn 0.249855 -0.348191 0.903513 +v 1.077632 157.652740 20.902397 1.000000 1.000000 1.000000 +vn 0.191384 -0.639557 0.744540 +v 0.427320 157.306702 20.866798 1.000000 1.000000 1.000000 +vn 0.407425 -0.485470 0.773514 +v 2.558198 157.973663 20.535000 1.000000 1.000000 1.000000 +vn 0.171059 -0.859436 0.481776 +v 0.445748 157.051361 20.528999 1.000000 1.000000 1.000000 +vn 0.009593 -0.867051 0.498127 +v -0.367258 157.045776 20.645397 1.000000 1.000000 1.000000 +vn 0.546438 -0.357477 0.757374 +v 3.987754 159.147141 20.276600 1.000000 1.000000 1.000000 +vn 0.336373 -0.757529 0.559467 +v 1.942100 157.398788 20.309799 1.000000 1.000000 1.000000 +vn 0.516000 -0.718621 0.466184 +v 2.668394 157.746231 20.197399 1.000000 1.000000 1.000000 +vn 0.652484 -0.214786 0.726726 +v 4.867128 160.476898 20.067600 1.000000 1.000000 1.000000 +vn 0.763645 -0.434601 0.477460 +v 4.663746 159.632721 19.833000 1.000000 1.000000 1.000000 +vn 0.688202 -0.558005 0.463690 +v 4.159516 158.971329 19.938795 1.000000 1.000000 1.000000 +vn 0.687938 -0.043829 0.724445 +v 5.383176 162.041061 19.863598 1.000000 1.000000 1.000000 +vn 0.851892 -0.223219 0.473765 +v 5.396348 161.145264 19.627800 1.000000 1.000000 1.000000 +vn 0.882100 -0.002124 0.471058 +v 5.721784 162.839203 19.427998 1.000000 1.000000 1.000000 +vn 0.888629 -0.118957 0.442931 +v 5.615038 161.989441 19.525799 1.000000 1.000000 1.000000 +vn 0.944098 -0.294603 0.147946 +v 5.538962 161.089447 19.159397 1.000000 1.000000 1.000000 +vn 0.980871 -0.161588 0.108545 +v 5.763434 161.955948 19.057598 1.000000 1.000000 1.000000 +vn 0.992339 -0.061974 0.106874 +v 5.872986 162.828033 18.959599 1.000000 1.000000 1.000000 +vn 0.911079 -0.120304 -0.394287 +v 5.727564 162.839203 17.750999 1.000000 1.000000 1.000000 +vn 0.909791 -0.199237 -0.364123 +v 5.620718 161.988052 17.848797 1.000000 1.000000 1.000000 +vn 0.813917 -0.327764 -0.479698 +v 5.401794 161.142471 17.950798 1.000000 1.000000 1.000000 +vn 0.934934 -0.311094 -0.170641 +v 5.526872 161.093628 18.343998 1.000000 1.000000 1.000000 +vn 0.777224 -0.437613 -0.452126 +v 5.081894 160.354111 18.052998 1.000000 1.000000 1.000000 +vn 0.651191 -0.214072 -0.728096 +v 5.388558 162.039673 17.504398 1.000000 1.000000 1.000000 +vn 0.876952 -0.448615 -0.172339 +v 5.199556 160.287140 18.445999 1.000000 1.000000 1.000000 +vn 0.897044 -0.416152 0.148762 +v 5.210924 160.280151 19.261597 1.000000 1.000000 1.000000 +vn 0.664088 -0.535545 -0.521708 +v 4.668458 159.628540 18.156197 1.000000 1.000000 1.000000 +vn 0.809185 -0.561287 -0.173713 +v 4.776554 159.544815 18.549198 1.000000 1.000000 1.000000 +vn 0.833886 -0.531103 0.150211 +v 4.787008 159.536438 19.364799 1.000000 1.000000 1.000000 +vn 0.826756 -0.341744 0.446862 +v 5.076756 160.356888 19.730000 1.000000 1.000000 1.000000 +vn 0.755487 -0.637328 0.151830 +v 4.269454 158.858307 19.470600 1.000000 1.000000 1.000000 +vn 0.606228 -0.595824 -0.526765 +v 4.163726 158.965759 18.261799 1.000000 1.000000 1.000000 +vn 0.725631 -0.665472 -0.174949 +v 4.260132 158.866684 18.654999 1.000000 1.000000 1.000000 +vn 0.554828 -0.386945 -0.736505 +v 4.871996 160.474106 17.708397 1.000000 1.000000 1.000000 +vn 0.359229 -0.572910 -0.736701 +v 3.428626 158.582031 18.025597 1.000000 1.000000 1.000000 +vn 0.161450 -0.638524 -0.752476 +v 1.863758 157.634598 18.288399 1.000000 1.000000 1.000000 +vn 0.277823 -0.831533 -0.481007 +v 1.944070 157.393219 18.632797 1.000000 1.000000 1.000000 +vn 0.017425 -0.674901 -0.737702 +v 1.124486 157.408554 18.402798 1.000000 1.000000 1.000000 +vn 0.504051 -0.724895 -0.469530 +v 3.576340 158.381104 18.370197 1.000000 1.000000 1.000000 +vn 0.116719 -0.892000 -0.436707 +v 1.172952 157.157394 18.747200 1.000000 1.000000 1.000000 +vn -0.144373 -0.654929 -0.741771 +v -0.352464 157.295532 18.623997 1.000000 1.000000 1.000000 +vn 0.322010 -0.929918 -0.177655 +v 1.989080 157.257874 19.025997 1.000000 1.000000 1.000000 +vn 0.064730 -0.972997 -0.221555 +v 0.456542 156.902054 19.245197 1.000000 1.000000 1.000000 +vn -0.110601 -0.871082 -0.478522 +v -0.367632 157.040192 18.968399 1.000000 1.000000 1.000000 +vn 0.243199 -0.954736 0.171270 +v 1.202742 157.002518 19.955799 1.000000 1.000000 1.000000 +vn 0.447429 -0.849981 -0.278101 +v 2.732948 157.613678 18.913597 1.000000 1.000000 1.000000 +vn 0.373842 -0.913915 0.158118 +v 1.993432 157.245300 19.841400 1.000000 1.000000 1.000000 +vn -0.093073 -0.978978 -0.181493 +v -0.376128 156.896469 19.361597 1.000000 1.000000 1.000000 +vn 0.099824 -0.982470 0.157441 +v 0.457544 156.888092 20.060799 1.000000 1.000000 1.000000 +vn -0.257666 -0.828015 -0.497995 +v -1.167846 157.157394 19.083797 1.000000 1.000000 1.000000 +vn -0.046537 -0.986414 0.157550 +v -0.376944 156.882523 20.176998 1.000000 1.000000 1.000000 +vn -0.239762 -0.953847 -0.180804 +v -1.194870 157.016464 19.476997 1.000000 1.000000 1.000000 +vn -0.194998 -0.968107 0.157307 +v -1.197482 157.002518 20.292400 1.000000 1.000000 1.000000 +vn -0.129184 -0.873826 0.468764 +v -1.166668 157.162979 20.760799 1.000000 1.000000 1.000000 +vn -0.339104 -0.927569 0.156922 +v -2.002084 157.248093 20.408798 1.000000 1.000000 1.000000 +vn -0.380412 -0.907182 -0.179743 +v -1.997720 157.262054 19.593399 1.000000 1.000000 1.000000 +vn -0.381219 -0.798129 -0.466543 +v -1.952516 157.397400 19.200199 1.000000 1.000000 1.000000 +vn -0.514948 -0.838234 -0.179421 +v -2.758274 157.627625 19.709599 1.000000 1.000000 1.000000 +vn -0.491953 -0.718105 -0.492247 +v -2.695882 157.754593 19.316399 1.000000 1.000000 1.000000 +vn -0.474108 -0.866538 0.155991 +v -2.764312 157.615067 20.524998 1.000000 1.000000 1.000000 +vn -0.250950 -0.830286 0.497644 +v -1.950560 157.402969 20.877197 1.000000 1.000000 1.000000 +vn -0.396988 -0.787615 0.471236 +v -2.693166 157.760178 20.993397 1.000000 1.000000 1.000000 +vn -0.576009 -0.785454 0.226442 +v -3.464740 158.090881 20.640198 1.000000 1.000000 1.000000 +vn -0.583793 -0.686067 0.434163 +v -3.916800 158.707611 21.208797 1.000000 1.000000 1.000000 +vn -0.779344 -0.606516 0.157355 +v -4.590036 159.253189 20.857197 1.000000 1.000000 1.000000 +vn -0.661587 -0.571423 0.485570 +v -4.471884 159.355057 21.325397 1.000000 1.000000 1.000000 +vn -0.718642 -0.694798 0.028436 +v -4.043940 158.561111 20.330597 1.000000 1.000000 1.000000 +vn -0.589783 -0.806234 -0.046284 +v -3.485134 158.060181 20.230198 1.000000 1.000000 1.000000 +vn -0.857423 -0.492187 0.150261 +v -5.063804 159.994110 20.973000 1.000000 1.000000 1.000000 +vn -0.808950 -0.559750 -0.179664 +v -4.580020 159.261566 20.041599 1.000000 1.000000 1.000000 +vn -0.752484 -0.480082 0.450875 +v -4.933446 160.077835 21.441399 1.000000 1.000000 1.000000 +vn -0.540797 -0.412321 0.733164 +v -4.729780 160.209000 21.779198 1.000000 1.000000 1.000000 +vn -0.795356 -0.372559 0.478131 +v -5.294108 160.857819 21.556599 1.000000 1.000000 1.000000 +vn -0.915780 -0.373048 0.148938 +v -5.433994 160.795029 21.088200 1.000000 1.000000 1.000000 +vn -0.874584 -0.453728 -0.170978 +v -5.052744 160.001083 20.157597 1.000000 1.000000 1.000000 +vn -0.963161 -0.208781 -0.169504 +v -5.687408 161.654556 20.388798 1.000000 1.000000 1.000000 +vn -0.927413 -0.333172 -0.170005 +v -5.422136 160.800613 20.272797 1.000000 1.000000 1.000000 +vn -0.957077 -0.249214 0.147971 +v -5.699846 161.651764 21.204399 1.000000 1.000000 1.000000 +vn -0.855493 -0.264871 0.444944 +v -5.553112 161.692230 21.672798 1.000000 1.000000 1.000000 +vn -0.981607 -0.121198 0.147508 +v -5.851150 162.535019 21.320000 1.000000 1.000000 1.000000 +vn -0.883448 -0.150330 0.443757 +v -5.700528 162.554550 21.788399 1.000000 1.000000 1.000000 +vn -0.982306 -0.080502 -0.169101 +v -5.838378 162.536407 20.504398 1.000000 1.000000 1.000000 +vn -0.880344 -0.037448 0.472856 +v -5.733474 163.428024 21.903599 1.000000 1.000000 1.000000 +vn -0.882389 -0.151174 -0.445575 +v -5.558724 161.690842 19.995800 1.000000 1.000000 1.000000 +vn -0.841183 -0.256048 -0.476289 +v -5.299452 160.855026 19.879597 1.000000 1.000000 1.000000 +vn -0.810509 -0.376125 -0.449005 +v -4.938430 160.073654 19.764397 1.000000 1.000000 1.000000 +vn -0.739299 -0.491325 -0.460475 +v -4.476404 159.350861 19.648598 1.000000 1.000000 1.000000 +vn -0.705422 -0.657683 -0.264258 +v -4.011508 158.598785 19.924999 1.000000 1.000000 1.000000 +vn -0.617300 -0.660996 -0.426643 +v -3.378968 158.219238 19.431599 1.000000 1.000000 1.000000 +vn -0.341426 -0.576288 -0.742509 +v -1.871920 157.638779 18.855797 1.000000 1.000000 1.000000 +vn 0.518158 -0.829939 0.206676 +v 2.738922 157.601105 19.729000 1.000000 1.000000 1.000000 +vn 0.473799 -0.880023 -0.032765 +v 2.755042 157.567627 19.319000 1.000000 1.000000 1.000000 +vn 0.653155 -0.728788 0.205566 +v 3.667158 158.258316 19.578800 1.000000 1.000000 1.000000 +vn 0.619960 -0.763315 -0.181658 +v 3.659150 158.269485 18.763199 1.000000 1.000000 1.000000 +vn -0.645279 -0.425877 -0.634227 +v 4.084366 165.989853 16.980797 1.000000 1.000000 1.000000 +vn -0.798314 -0.398919 -0.451175 +v 4.175456 165.251724 17.404598 1.000000 1.000000 1.000000 +vn -0.653133 -0.532083 -0.538799 +v 3.519536 166.402878 17.229198 1.000000 1.000000 1.000000 +vn -0.439558 -0.603036 -0.665685 +v 3.251328 167.083801 16.809998 1.000000 1.000000 1.000000 +vn -0.853119 -0.521551 0.013122 +v 3.720202 165.745682 18.167797 1.000000 1.000000 1.000000 +vn -0.658219 -0.712464 -0.243194 +v 2.996122 166.782410 17.542198 1.000000 1.000000 1.000000 +vn -0.880565 -0.232902 -0.412750 +v 4.468228 164.273605 17.542400 1.000000 1.000000 1.000000 +vn -0.706989 -0.704940 0.056793 +v 2.961438 166.741943 17.996998 1.000000 1.000000 1.000000 +vn -0.512392 -0.818431 -0.260050 +v 1.990240 167.534500 17.377598 1.000000 1.000000 1.000000 +vn -0.548874 -0.684567 -0.479694 +v 3.090224 166.894043 17.144798 1.000000 1.000000 1.000000 +vn -0.388571 -0.788938 -0.476014 +v 2.052760 167.668457 16.980000 1.000000 1.000000 1.000000 +vn -0.285347 -0.958296 -0.015641 +v 1.398410 167.742401 17.751198 1.000000 1.000000 1.000000 +vn -0.496168 -0.868040 0.017997 +v 1.967194 167.484268 17.832397 1.000000 1.000000 1.000000 +vn -0.239536 -0.613194 -0.752739 +v 2.159788 167.898682 16.645199 1.000000 1.000000 1.000000 +vn -0.127021 -0.955679 -0.265602 +v 0.238142 168.041000 17.145599 1.000000 1.000000 1.000000 +vn -0.205926 -0.751141 -0.627201 +v 1.459244 167.937744 16.898998 1.000000 1.000000 1.000000 +vn -0.043106 -0.641573 -0.765849 +v 0.901980 168.364731 16.487400 1.000000 1.000000 1.000000 +vn -0.008530 -0.887811 -0.460129 +v 0.245638 168.191696 16.748199 1.000000 1.000000 1.000000 +vn 0.116634 -0.992849 0.025442 +v -0.365070 167.975433 17.527397 1.000000 1.000000 1.000000 +vn -0.084384 -0.996271 0.017979 +v 0.235382 167.986588 17.600401 1.000000 1.000000 1.000000 +vn 0.243828 -0.871390 -0.425708 +v -1.017836 168.073105 16.602200 1.000000 1.000000 1.000000 +vn 0.078062 -0.391381 -0.916912 +v -0.400734 168.438675 16.340397 1.000000 1.000000 1.000000 +vn 0.266608 -0.927645 -0.261524 +v -0.986866 167.925186 16.999599 1.000000 1.000000 1.000000 +vn 0.225055 -0.423308 -0.877588 +v -1.760000 167.950302 16.326797 1.000000 1.000000 1.000000 +vn 0.414609 -0.908394 0.054039 +v -1.551916 167.682404 17.385197 1.000000 1.000000 1.000000 +vn 0.596634 -0.757359 -0.265397 +v -2.626552 167.113098 16.798199 1.000000 1.000000 1.000000 +vn 0.347292 -0.381738 -0.856542 +v -2.815012 167.224731 16.327400 1.000000 1.000000 1.000000 +vn 0.726047 -0.687641 -0.002231 +v -3.053326 166.648453 17.189400 1.000000 1.000000 1.000000 +vn 0.776750 -0.607369 -0.166622 +v -3.297650 166.453110 16.703800 1.000000 1.000000 1.000000 +vn 0.602156 -0.798226 0.015623 +v -2.596166 167.068451 17.252998 1.000000 1.000000 1.000000 +vn 0.169289 -0.908663 0.381672 +v -1.014840 168.057755 18.278797 1.000000 1.000000 1.000000 +vn 0.078883 -0.934322 0.347593 +v -0.379792 168.166580 18.351801 1.000000 1.000000 1.000000 +vn 0.387616 -0.804860 0.449394 +v -2.179692 167.581940 18.142399 1.000000 1.000000 1.000000 +vn -0.122533 -0.667538 0.734424 +v 0.257632 168.433090 18.772400 1.000000 1.000000 1.000000 +vn 0.159931 -0.639267 0.752170 +v -1.698200 168.100998 18.556999 1.000000 1.000000 1.000000 +vn -0.117770 -0.884008 0.452393 +v 0.244912 168.177750 18.424797 1.000000 1.000000 1.000000 +vn -0.263169 -0.889039 0.374636 +v 0.854736 168.096817 18.498798 1.000000 1.000000 1.000000 +vn -0.404006 -0.556498 0.726009 +v 2.152746 167.883331 19.004200 1.000000 1.000000 1.000000 +vn -0.357005 -0.822866 0.442085 +v 1.454956 167.923798 18.575600 1.000000 1.000000 1.000000 +vn -0.474072 -0.754947 0.453112 +v 2.046708 167.655884 18.656597 1.000000 1.000000 1.000000 +vn -0.615639 -0.698655 0.364513 +v 2.588610 167.308456 18.737997 1.000000 1.000000 1.000000 +vn -0.594357 -0.348407 0.724812 +v 3.690950 166.556366 19.253399 1.000000 1.000000 1.000000 +vn -0.673618 -0.657672 0.337203 +v 3.081110 166.882874 18.821400 1.000000 1.000000 1.000000 +vn -0.762172 -0.486264 0.427364 +v 3.509172 166.393112 18.905800 1.000000 1.000000 1.000000 +vn -0.817943 -0.510834 0.264608 +v 3.408220 166.303802 18.512199 1.000000 1.000000 1.000000 +vn -0.678869 -0.153818 0.717967 +v 4.378812 165.348007 19.428799 1.000000 1.000000 1.000000 +vn -0.875875 -0.125391 0.465961 +v 4.455058 164.269409 19.218800 1.000000 1.000000 1.000000 +vn -0.866676 -0.245782 0.434125 +v 4.163160 165.244751 19.081200 1.000000 1.000000 1.000000 +vn -0.931469 -0.278567 0.234020 +v 4.043398 165.187546 18.687399 1.000000 1.000000 1.000000 +vn -0.948411 -0.315420 -0.032057 +v 4.113256 164.866623 18.301598 1.000000 1.000000 1.000000 +vn -0.901028 -0.355325 -0.248781 +v 4.048330 165.190338 17.801998 1.000000 1.000000 1.000000 +vn -0.119842 -0.210815 0.970152 +v 0.270922 168.699600 18.926998 1.000000 1.000000 1.000000 +vn 0.358610 -0.571132 0.738381 +v -2.840904 167.428452 18.424999 1.000000 1.000000 1.000000 +vn 0.455062 -0.676353 0.579193 +v -2.701044 167.223343 18.077400 1.000000 1.000000 1.000000 +vn 0.686111 -0.685753 0.242887 +v -3.293646 166.448929 17.588997 1.000000 1.000000 1.000000 +vn -0.015721 -0.244216 0.969594 +v -1.785556 168.350769 18.711597 1.000000 1.000000 1.000000 +vn 0.069248 -0.240902 0.968076 +v -2.987058 167.643326 18.579597 1.000000 1.000000 1.000000 +vn 0.493845 -0.467406 0.733245 +v -3.566772 166.715439 18.330399 1.000000 1.000000 1.000000 +vn 0.133917 -0.205974 0.969351 +v -3.750278 166.894043 18.484997 1.000000 1.000000 1.000000 +vn 0.629383 -0.275217 0.726727 +v -4.542168 164.900101 18.155998 1.000000 1.000000 1.000000 +vn 0.644138 -0.619098 0.449226 +v -3.391174 166.543808 17.982800 1.000000 1.000000 1.000000 +vn 0.819550 -0.482539 0.309023 +v -3.772628 166.014969 17.922600 1.000000 1.000000 1.000000 +vn 0.829343 -0.341350 0.442347 +v -4.318532 164.817780 17.808399 1.000000 1.000000 1.000000 +vn 0.929733 -0.366066 -0.039894 +v -3.925028 165.350800 17.040199 1.000000 1.000000 1.000000 +vn 0.841801 -0.539617 -0.013576 +v -3.626126 165.907532 17.098400 1.000000 1.000000 1.000000 +vn 0.541598 -0.283529 -0.791380 +v -3.901608 165.719162 16.328400 1.000000 1.000000 1.000000 +vn 0.604049 -0.139226 -0.784692 +v -4.336042 164.459183 16.326797 1.000000 1.000000 1.000000 +vn 0.998855 -0.044334 -0.017978 +v -4.372234 163.493607 16.877197 1.000000 1.000000 1.000000 +vn 0.633718 0.014567 -0.773427 +v -4.448220 163.239655 16.326797 1.000000 1.000000 1.000000 +vn 0.983671 -0.179965 -0.001993 +v -4.300740 164.136856 16.929798 1.000000 1.000000 1.000000 +vn 0.969857 -0.048347 0.238832 +v -4.420528 163.056870 17.273399 1.000000 1.000000 1.000000 +vn 0.903652 -0.038566 0.426529 +v -4.551426 163.051285 17.667198 1.000000 1.000000 1.000000 +vn 0.861006 -0.166879 0.480437 +v -4.474486 164.171738 17.754200 1.000000 1.000000 1.000000 +vn 0.988174 0.150952 0.026953 +v -4.311272 162.421997 16.793598 1.000000 1.000000 1.000000 +vn 0.200095 -0.143176 0.969259 +v -4.775872 164.985214 18.310600 1.000000 1.000000 1.000000 +vn 0.689837 -0.050122 0.722227 +v -4.787124 163.041519 18.014797 1.000000 1.000000 1.000000 +vn 0.248211 -0.061965 0.966722 +v -5.033432 163.030350 18.169399 1.000000 1.000000 1.000000 +vn -0.644511 -0.227878 0.729847 +v -5.238026 161.432709 17.928799 1.000000 1.000000 1.000000 +vn -0.284084 -0.126361 0.950436 +v -5.024960 161.506653 18.069395 1.000000 1.000000 1.000000 +vn 0.636331 0.146903 0.757299 +v -4.562870 161.667114 17.918598 1.000000 1.000000 1.000000 +vn 0.256035 0.010747 0.966608 +v -4.797644 161.584793 18.073200 1.000000 1.000000 1.000000 +vn -0.506084 -0.372251 0.778016 +v -4.608576 159.992722 17.840797 1.000000 1.000000 1.000000 +vn -0.272268 -0.323671 0.906150 +v -3.502116 158.971329 17.900597 1.000000 1.000000 1.000000 +vn 0.244133 0.081533 0.966308 +v -4.221110 160.267593 17.985197 1.000000 1.000000 1.000000 +vn -0.900021 -0.002958 0.435836 +v -5.728890 163.568954 17.721600 1.000000 1.000000 1.000000 +vn -0.838761 -0.137072 0.526963 +v -5.649004 162.166641 17.638199 1.000000 1.000000 1.000000 +vn -0.857285 -0.296760 0.420709 +v -5.463580 161.354568 17.591000 1.000000 1.000000 1.000000 +vn -0.734377 -0.486237 0.473564 +v -4.807028 159.853180 17.503197 1.000000 1.000000 1.000000 +vn -0.317706 -0.555617 0.768344 +v -2.998956 158.252731 17.718197 1.000000 1.000000 1.000000 +vn -0.900815 -0.382975 0.204603 +v -5.317670 160.507599 17.077797 1.000000 1.000000 1.000000 +vn -0.581074 -0.593453 0.556926 +v -3.807776 158.597382 17.422199 1.000000 1.000000 1.000000 +vn -0.835271 -0.528265 0.152504 +v -4.934040 159.763885 17.034798 1.000000 1.000000 1.000000 +vn -0.774106 -0.607046 0.179599 +v -4.463028 159.082962 16.993599 1.000000 1.000000 1.000000 +vn -0.976023 -0.167964 0.138447 +v -5.798274 162.137344 17.169800 1.000000 1.000000 1.000000 +vn -0.723002 -0.177279 -0.667712 +v -5.695442 161.540146 16.329800 1.000000 1.000000 1.000000 +vn -0.665715 -0.326206 -0.671128 +v -5.256308 160.284348 16.327999 1.000000 1.000000 1.000000 +vn -0.665592 -0.720560 0.194372 +v -3.908394 158.474594 16.953999 1.000000 1.000000 1.000000 +vn -0.528180 -0.529993 -0.663425 +v -4.031450 158.531799 16.327000 1.000000 1.000000 1.000000 +vn -0.464552 -0.745749 0.477546 +v -3.128076 158.037857 17.380398 1.000000 1.000000 1.000000 +vn -0.561583 -0.817001 0.130901 +v -3.210732 157.899719 16.912197 1.000000 1.000000 1.000000 +vn -0.299749 -0.680259 -0.668878 +v -2.223506 157.306702 16.326797 1.000000 1.000000 1.000000 +vn -0.453612 -0.867780 0.202965 +v -2.533298 157.488083 16.876999 1.000000 1.000000 1.000000 +vn -0.072358 -0.611942 0.787585 +v -0.982170 157.384842 17.617798 1.000000 1.000000 1.000000 +vn -0.288943 -0.780566 0.554282 +v -1.762406 157.331818 17.311798 1.000000 1.000000 1.000000 +vn -0.302891 -0.938585 0.165271 +v -1.808976 157.175537 16.843597 1.000000 1.000000 1.000000 +vn -0.175895 -0.973479 0.146287 +v -1.051498 156.970428 16.811798 1.000000 1.000000 1.000000 +vn -0.041544 -0.772880 -0.633191 +v -0.321326 156.840652 16.326797 1.000000 1.000000 1.000000 +vn -0.122763 -0.874719 0.468824 +v -1.024436 157.132278 17.280197 1.000000 1.000000 1.000000 +vn 0.067676 -0.591323 0.803590 +v 0.435522 157.305298 17.561199 1.000000 1.000000 1.000000 +vn -0.089409 -0.372436 0.923741 +v -1.620952 157.807617 17.790199 1.000000 1.000000 1.000000 +vn 0.088827 -0.989096 0.117469 +v 0.466316 156.885300 16.755199 1.000000 1.000000 1.000000 +vn 0.077918 -0.876933 0.474254 +v 0.454304 157.048569 17.223400 1.000000 1.000000 1.000000 +vn 0.211809 -0.964690 0.156555 +v 1.229688 157.006714 16.729000 1.000000 1.000000 1.000000 +vn 0.824042 -0.405162 0.395978 +v 1.958374 157.451813 17.276398 1.000000 1.000000 1.000000 +vn 0.662227 -0.044624 0.747974 +v 1.838678 157.799240 17.652798 1.000000 1.000000 1.000000 +vn 0.732528 -0.455530 -0.505861 +v 2.047442 157.183914 16.326797 1.000000 1.000000 1.000000 +vn 0.195166 0.138981 0.970873 +v -3.343678 159.165283 17.904400 1.000000 1.000000 1.000000 +vn 0.143732 0.171456 0.974651 +v -1.547642 158.053207 17.793999 1.000000 1.000000 1.000000 +vn 0.015985 0.641828 0.766682 +v 0.379298 158.071350 17.550999 1.000000 1.000000 1.000000 +vn -0.985560 -0.060337 0.158213 +v -5.883568 162.994080 17.218998 1.000000 1.000000 1.000000 +vn 0.837207 -0.336694 0.430953 +v -4.335322 164.761963 22.115200 1.000000 1.000000 1.000000 +vn 0.931067 -0.173803 0.320791 +v -4.488866 164.081055 21.998798 1.000000 1.000000 1.000000 +vn 0.960551 -0.278048 0.005588 +v -4.166970 164.703369 21.291000 1.000000 1.000000 1.000000 +vn 0.906523 -0.420881 0.032807 +v -3.935674 165.327072 21.407200 1.000000 1.000000 1.000000 +vn 0.644860 -0.696904 0.313815 +v -2.968776 166.991714 22.565399 1.000000 1.000000 1.000000 +vn 0.799818 -0.600208 0.006521 +v -3.294960 166.372177 21.624599 1.000000 1.000000 1.000000 +vn 0.843699 -0.482723 -0.234840 +v -3.670326 165.934052 21.067600 1.000000 1.000000 1.000000 +vn 0.935760 -0.276769 -0.218521 +v -4.215754 164.720108 20.836197 1.000000 1.000000 1.000000 +vn 0.433517 -0.779522 0.452116 +v -2.452252 167.408905 22.681400 1.000000 1.000000 1.000000 +vn 0.581074 -0.708635 -0.400235 +v -2.459488 167.420074 21.004799 1.000000 1.000000 1.000000 +vn 0.413073 -0.609738 -0.676454 +v -1.994656 167.986588 20.785198 1.000000 1.000000 1.000000 +vn 0.606693 -0.558772 -0.565418 +v -2.977544 167.002869 20.888798 1.000000 1.000000 1.000000 +vn 0.795452 -0.397674 -0.457288 +v -3.785554 166.019165 20.669998 1.000000 1.000000 1.000000 +vn -0.920632 -0.277156 -0.274992 +v 4.202428 164.760574 22.892799 1.000000 1.000000 1.000000 +vn -0.898175 -0.436833 0.049577 +v 3.917070 165.363358 23.231400 1.000000 1.000000 1.000000 +vn -0.910793 -0.093024 0.402248 +v 4.479866 164.134064 24.286598 1.000000 1.000000 1.000000 +vn -0.909484 -0.225848 0.349042 +v 4.321636 164.802429 24.171799 1.000000 1.000000 1.000000 +vn -0.886392 -0.331910 0.322714 +v 4.075380 165.448471 24.055599 1.000000 1.000000 1.000000 +vn 0.267351 -0.841325 -0.469783 +v 1.991862 157.414139 23.774399 1.000000 1.000000 1.000000 +vn 0.343697 -0.921558 -0.180566 +v 2.037992 157.278793 24.167398 1.000000 1.000000 1.000000 +vn 0.137411 -0.871117 -0.471459 +v 1.221494 157.168564 23.888998 1.000000 1.000000 1.000000 +vn 0.247447 -0.955984 0.157684 +v 1.252524 157.015076 25.097601 1.000000 1.000000 1.000000 +vn 0.201025 -0.962715 -0.181023 +v 1.249784 157.027634 24.282198 1.000000 1.000000 1.000000 +vn 0.387676 -0.908458 0.156241 +v 2.042446 157.266235 24.982998 1.000000 1.000000 1.000000 +vn -0.001856 -0.865580 -0.500767 +v 0.422360 157.044388 24.004398 1.000000 1.000000 1.000000 +vn 0.052227 -0.981935 -0.181868 +v 0.432142 156.900650 24.397398 1.000000 1.000000 1.000000 +vn 0.099797 -0.982432 0.157698 +v 0.433098 156.886703 25.212999 1.000000 1.000000 1.000000 +vn -0.130067 -0.871893 -0.472108 +v -0.385156 157.041580 24.119598 1.000000 1.000000 1.000000 +vn -0.266350 -0.616799 -0.740687 +v -1.143536 157.414139 23.891598 1.000000 1.000000 1.000000 +vn -0.095736 -0.978717 -0.181516 +v -0.394054 156.897873 24.512798 1.000000 1.000000 1.000000 +vn -0.260474 -0.843194 -0.470295 +v -1.192768 157.161591 24.236198 1.000000 1.000000 1.000000 +vn -0.383059 -0.779019 -0.496382 +v -1.974416 157.405762 24.352398 1.000000 1.000000 1.000000 +vn -0.243556 -0.952956 -0.180431 +v -1.220370 157.020645 24.629198 1.000000 1.000000 1.000000 +vn -0.049766 -0.986228 0.157724 +v -0.394918 156.883911 25.328199 1.000000 1.000000 1.000000 +vn -0.343600 -0.925898 0.157012 +v -2.024526 157.257874 25.560999 1.000000 1.000000 1.000000 +vn -0.396211 -0.900978 -0.176793 +v -2.020108 157.270416 24.745398 1.000000 1.000000 1.000000 +vn -0.199334 -0.967059 0.158314 +v -1.223040 157.008102 25.444799 1.000000 1.000000 1.000000 +vn -0.277909 -0.835441 0.474137 +v -1.972420 157.411346 26.029198 1.000000 1.000000 1.000000 +vn -0.469943 -0.866190 0.169906 +v -2.778576 157.624832 25.676197 1.000000 1.000000 1.000000 +vn -0.125577 -0.857536 0.498861 +v -1.191568 157.168564 25.912998 1.000000 1.000000 1.000000 +vn -0.607060 -0.765217 -0.214291 +v -3.395268 158.054596 24.962799 1.000000 1.000000 1.000000 +vn -0.518014 -0.739597 -0.429718 +v -2.709788 157.762970 24.467398 1.000000 1.000000 1.000000 +vn -0.469270 -0.747671 0.469865 +v -3.315108 158.175995 26.246599 1.000000 1.000000 1.000000 +vn -0.587164 -0.794651 0.154171 +v -3.402696 158.042038 25.778399 1.000000 1.000000 1.000000 +vn -0.692775 -0.704659 0.153357 +v -4.050004 158.616928 25.894999 1.000000 1.000000 1.000000 +vn -0.569177 -0.629128 0.529373 +v -3.945756 158.736923 26.363199 1.000000 1.000000 1.000000 +vn -0.720332 -0.671187 -0.175016 +v -4.041172 158.628082 25.079399 1.000000 1.000000 1.000000 +vn -0.785113 -0.600472 0.151760 +v -4.611718 159.282486 26.010799 1.000000 1.000000 1.000000 +vn -0.632914 -0.570737 0.523144 +v -4.493000 159.384354 26.478998 1.000000 1.000000 1.000000 +vn -0.754974 -0.476544 0.450467 +v -4.947608 160.104340 26.594198 1.000000 1.000000 1.000000 +vn -0.859855 -0.487996 0.150030 +v -5.078340 160.022018 26.125998 1.000000 1.000000 1.000000 +vn -0.807446 -0.564089 -0.172728 +v -4.601650 159.290863 25.195198 1.000000 1.000000 1.000000 +vn -0.917404 -0.368961 0.149123 +v -5.448542 160.831314 26.242199 1.000000 1.000000 1.000000 +vn -0.928827 -0.329075 -0.170263 +v -5.436646 160.836884 25.426598 1.000000 1.000000 1.000000 +vn -0.876808 -0.449285 -0.171319 +v -5.067254 160.029007 25.310398 1.000000 1.000000 1.000000 +vn -0.796980 -0.368794 0.478344 +v -5.308284 160.894104 26.710398 1.000000 1.000000 1.000000 +vn -0.958338 -0.244315 0.147981 +v -5.707016 161.678284 26.356798 1.000000 1.000000 1.000000 +vn -0.856607 -0.260562 0.445344 +v -5.560102 161.718750 26.825199 1.000000 1.000000 1.000000 +vn -0.982156 -0.116733 0.147455 +v -5.853172 162.561523 26.472198 1.000000 1.000000 1.000000 +vn -0.964285 -0.203613 -0.169399 +v -5.694566 161.682465 25.541401 1.000000 1.000000 1.000000 +vn -0.868064 -0.147973 0.473886 +v -5.702498 162.579666 26.940399 1.000000 1.000000 1.000000 +vn -0.896333 -0.030154 0.442356 +v -5.732380 163.453140 27.055798 1.000000 1.000000 1.000000 +vn -0.883278 -0.147343 -0.445095 +v -5.565728 161.717346 25.148199 1.000000 1.000000 1.000000 +vn -0.855435 -0.261197 -0.447222 +v -5.313652 160.891312 25.033598 1.000000 1.000000 1.000000 +vn -0.800455 -0.360589 -0.478798 +v -4.952604 160.101547 24.917398 1.000000 1.000000 1.000000 +vn -0.753240 -0.477282 -0.452583 +v -4.497544 159.380157 24.802198 1.000000 1.000000 1.000000 +vn -0.666121 -0.583909 -0.464040 +v -3.949734 158.732727 24.686199 1.000000 1.000000 1.000000 +vn 0.001629 -0.882956 0.469453 +v -0.384762 157.047165 25.796598 1.000000 1.000000 1.000000 +vn 0.137967 -0.856513 0.497344 +v 0.421928 157.049957 25.681198 1.000000 1.000000 1.000000 +vn 0.265793 -0.843826 0.466168 +v 1.220258 157.175537 25.565998 1.000000 1.000000 1.000000 +vn 0.387387 -0.779337 0.492509 +v 1.989854 157.419724 25.451199 1.000000 1.000000 1.000000 +vn -0.610800 -0.301060 -0.732315 +v 4.565922 164.872192 27.311998 1.000000 1.000000 1.000000 +vn -0.831837 -0.302198 -0.465537 +v 4.339686 164.791260 27.646799 1.000000 1.000000 1.000000 +vn -0.876958 -0.392745 -0.276941 +v 3.973436 165.366150 27.929598 1.000000 1.000000 1.000000 +vn -0.833322 -0.550520 0.050029 +v 3.614912 165.921494 28.268198 1.000000 1.000000 1.000000 +vn -0.929693 -0.291886 -0.224664 +v 4.207540 164.745224 28.044197 1.000000 1.000000 1.000000 +vn -0.959929 -0.276259 0.047084 +v 4.158834 164.727081 28.498999 1.000000 1.000000 1.000000 +vn -0.835167 -0.443466 0.325323 +v 3.760990 166.030319 29.092398 1.000000 1.000000 1.000000 +vn -0.872504 -0.339778 0.351125 +v 4.086156 165.426147 29.208599 1.000000 1.000000 1.000000 +vn -0.891267 -0.207269 0.403341 +v 4.326902 164.787079 29.323399 1.000000 1.000000 1.000000 +vn -0.937082 -0.060807 0.343772 +v 4.482712 164.114532 29.438599 1.000000 1.000000 1.000000 +vn -0.817784 -0.503071 -0.279551 +v 3.670428 165.932648 32.966400 1.000000 1.000000 1.000000 +vn -0.884036 -0.408923 -0.226414 +v 3.980414 165.352188 33.081001 1.000000 1.000000 1.000000 +vn -0.784438 -0.406543 -0.468380 +v 4.105416 165.417786 32.683598 1.000000 1.000000 1.000000 +vn -0.563136 -0.376625 -0.735549 +v 4.319448 165.530792 32.348801 1.000000 1.000000 1.000000 +vn 0.718569 -0.341811 0.605660 +v -4.530530 164.930801 42.813980 1.000000 1.000000 1.000000 +vn 0.830123 -0.053171 0.555039 +v -4.786198 163.472672 42.640800 1.000000 1.000000 1.000000 +vn 0.827930 -0.410813 0.381791 +v -4.069058 165.462433 42.544979 1.000000 1.000000 1.000000 +vn 0.718807 -0.539256 0.438771 +v -3.731944 166.076370 42.627380 1.000000 1.000000 1.000000 +vn 0.621731 -0.435030 0.651306 +v -3.925194 166.222885 42.975197 1.000000 1.000000 1.000000 +vn 0.910138 -0.380402 0.164144 +v -3.911046 165.377319 41.720596 1.000000 1.000000 1.000000 +vn 0.655984 -0.665008 0.357000 +v -3.317594 166.630325 42.707798 1.000000 1.000000 1.000000 +vn 0.483302 -0.692826 0.535175 +v -2.834170 167.113098 42.785580 1.000000 1.000000 1.000000 +vn 0.431252 -0.780142 0.453211 +v -2.299570 167.507980 42.859779 1.000000 1.000000 1.000000 +vn 0.835312 -0.549774 0.001143 +v -3.587024 165.967529 41.803177 1.000000 1.000000 1.000000 +vn 0.849525 -0.479501 -0.219970 +v -3.629036 165.999634 41.348396 1.000000 1.000000 1.000000 +vn 0.753257 -0.618493 -0.223764 +v -3.226106 166.538223 41.428596 1.000000 1.000000 1.000000 +vn 0.665226 -0.746459 -0.016518 +v -2.724116 166.962402 41.961197 1.000000 1.000000 1.000000 +vn 0.785177 -0.432786 -0.442937 +v -3.742964 166.084747 40.950996 1.000000 1.000000 1.000000 +vn 0.867342 -0.244518 -0.433508 +v -4.320180 164.852661 40.789799 1.000000 1.000000 1.000000 +vn 0.608828 -0.686150 -0.398154 +v -2.842540 167.124268 41.108997 1.000000 1.000000 1.000000 +vn 0.626805 -0.743036 -0.234549 +v -2.756008 167.005676 41.506397 1.000000 1.000000 1.000000 +vn 0.336942 -0.563038 -0.754625 +v -1.802384 168.074493 40.921997 1.000000 1.000000 1.000000 +vn 0.397551 -0.777243 -0.487696 +v -1.713110 167.835892 41.256798 1.000000 1.000000 1.000000 +vn 0.431821 -0.873024 -0.226628 +v -1.660980 167.694962 41.654198 1.000000 1.000000 1.000000 +vn 0.422649 -0.904696 0.053790 +v -1.641758 167.644730 42.108997 1.000000 1.000000 1.000000 +vn 0.176345 -0.734022 -0.655831 +v -0.451134 168.434479 41.063797 1.000000 1.000000 1.000000 +vn 0.159069 -0.868527 -0.469422 +v -0.428816 168.176346 41.398598 1.000000 1.000000 1.000000 +vn -0.070483 -0.665827 -0.742769 +v 0.914456 168.361938 41.194977 1.000000 1.000000 1.000000 +vn -0.021501 -0.883043 -0.468799 +v 0.230768 168.193100 41.466179 1.000000 1.000000 1.000000 +vn -0.340735 -0.659051 -0.670486 +v 2.226892 167.863800 41.319397 1.000000 1.000000 1.000000 +vn -0.775028 -0.440884 -0.452717 +v 3.983646 165.670334 41.876198 1.000000 1.000000 1.000000 +vn -0.639282 -0.657485 -0.398787 +v 3.189258 166.792191 41.770180 1.000000 1.000000 1.000000 +vn -0.857989 -0.469741 -0.207843 +v 3.862340 165.596375 42.273598 1.000000 1.000000 1.000000 +vn -0.706008 -0.661503 -0.252914 +v 3.092144 166.684738 42.167797 1.000000 1.000000 1.000000 +vn -0.622313 -0.739581 -0.256411 +v 2.598934 167.135422 42.110798 1.000000 1.000000 1.000000 +vn -0.559312 -0.739003 -0.375559 +v 2.680574 167.256821 41.713398 1.000000 1.000000 1.000000 +vn -0.268047 -0.838888 -0.473728 +v 1.508052 167.921005 41.592999 1.000000 1.000000 1.000000 +vn -0.468739 -0.883212 0.014871 +v 2.028324 167.452179 42.506397 1.000000 1.000000 1.000000 +vn -0.314638 -0.916047 -0.248718 +v 1.462114 167.778671 41.990379 1.000000 1.000000 1.000000 +vn -0.638737 -0.769423 -0.001442 +v 2.568846 167.089386 42.565598 1.000000 1.000000 1.000000 +vn -0.813450 -0.581254 0.021070 +v 3.466620 166.144745 42.675579 1.000000 1.000000 1.000000 +vn -0.178056 -0.984000 0.006343 +v 0.832880 167.905655 42.381996 1.000000 1.000000 1.000000 +vn -0.054069 -0.963514 -0.262141 +v 0.223716 168.042404 41.863800 1.000000 1.000000 1.000000 +vn 0.072689 -0.996550 0.040056 +v -0.410968 167.971237 42.250977 1.000000 1.000000 1.000000 +vn 0.288113 -0.956525 -0.045282 +v -1.036340 167.856812 42.180977 1.000000 1.000000 1.000000 +vn 0.068894 -0.962020 -0.264144 +v -0.415772 168.027054 41.796181 1.000000 1.000000 1.000000 +vn 0.355973 -0.875308 0.327292 +v -1.708076 167.821945 42.933380 1.000000 1.000000 1.000000 +vn -0.884137 -0.458807 -0.088302 +v 3.817626 165.569855 42.728397 1.000000 1.000000 1.000000 +vn -0.985738 -0.139834 0.093629 +v 4.362088 163.656860 42.869797 1.000000 1.000000 1.000000 +vn 0.605547 0.310427 0.732767 +v -4.014558 160.412704 17.830597 1.000000 1.000000 1.000000 +vn 0.903913 0.137758 0.404925 +v -4.485456 162.388504 17.618000 1.000000 1.000000 1.000000 +vn 0.798180 0.407473 0.443706 +v -3.816904 160.552246 17.482998 1.000000 1.000000 1.000000 +vn 0.494901 0.467560 0.732435 +v -3.180078 159.364807 17.749798 1.000000 1.000000 1.000000 +vn 0.653540 0.601701 0.459174 +v -3.023508 159.555969 17.402199 1.000000 1.000000 1.000000 +vn 0.245432 0.620888 0.744487 +v -1.471938 158.308548 17.639397 1.000000 1.000000 1.000000 +vn 0.547867 0.757233 0.355584 +v -2.483834 159.110870 17.360197 1.000000 1.000000 1.000000 +vn 0.477403 0.794523 0.375259 +v -1.959804 158.792725 17.325199 1.000000 1.000000 1.000000 +vn 0.739793 0.624874 0.249479 +v -2.412404 159.230865 16.966599 1.000000 1.000000 1.000000 +vn 0.680397 0.710818 0.178320 +v -2.936564 159.662033 17.008400 1.000000 1.000000 1.000000 +vn 0.371061 0.619940 -0.691367 +v -2.134990 159.103897 16.327999 1.000000 1.000000 1.000000 +vn 0.179081 0.707507 -0.683640 +v -1.046904 158.635056 16.327000 1.000000 1.000000 1.000000 +vn 0.273635 0.871774 0.406366 +v -1.399478 158.551331 17.291599 1.000000 1.000000 1.000000 +vn 0.074945 0.983059 0.167266 +v -0.220860 158.459244 16.836998 1.000000 1.000000 1.000000 +vn -0.045307 0.702766 -0.709977 +v 0.229992 158.508087 16.326797 1.000000 1.000000 1.000000 +vn -0.009658 0.876001 0.482213 +v 0.360594 158.326691 17.203197 1.000000 1.000000 1.000000 +vn -0.180643 0.937021 0.298933 +v 0.923730 158.559708 16.783398 1.000000 1.000000 1.000000 +vn 0.354861 0.807300 -0.471530 +v 1.488958 158.841568 16.349197 1.000000 1.000000 1.000000 +vn -0.167080 0.894566 0.414531 +v 0.951106 158.420181 17.177200 1.000000 1.000000 1.000000 +vn 0.460972 0.645720 0.608729 +v 1.640508 158.393661 17.533798 1.000000 1.000000 1.000000 +vn 0.484463 0.499465 -0.718214 +v -2.999624 159.752716 16.327198 1.000000 1.000000 1.000000 +vn 0.889121 0.413172 0.196859 +v -3.707134 160.630386 17.089199 1.000000 1.000000 1.000000 +vn 0.584356 0.353622 -0.730396 +v -3.648322 160.573181 16.326797 1.000000 1.000000 1.000000 +vn 0.944198 0.328243 -0.027315 +v -4.169764 161.802460 16.746597 1.000000 1.000000 1.000000 +vn 0.580798 0.196219 -0.790045 +v -4.240228 161.782928 16.326797 1.000000 1.000000 1.000000 +vn -0.343745 -0.896793 -0.278571 +v 2.007454 157.309494 42.513798 1.000000 1.000000 1.000000 +vn -0.429093 -0.747814 -0.506610 +v 1.933230 157.527161 42.152798 1.000000 1.000000 1.000000 +vn 0.540256 -0.830175 -0.137596 +v 3.081238 157.825760 42.712601 1.000000 1.000000 1.000000 +vn 0.616889 -0.742332 -0.261518 +v 3.699938 158.300171 42.685997 1.000000 1.000000 1.000000 +vn 0.485030 -0.734864 -0.474048 +v 3.011496 157.948547 42.319397 1.000000 1.000000 1.000000 +vn 0.727911 -0.633175 -0.263125 +v 4.259810 158.865280 42.657600 1.000000 1.000000 1.000000 +vn 0.836738 -0.519554 -0.173014 +v 4.808742 159.592255 42.623177 1.000000 1.000000 1.000000 +vn 0.644875 -0.605901 -0.465855 +v 4.163404 158.964355 42.264580 1.000000 1.000000 1.000000 +vn 0.717239 -0.436292 -0.543340 +v 4.699910 159.674576 42.230198 1.000000 1.000000 1.000000 +vn 0.823824 -0.336960 -0.455820 +v 5.394480 161.118759 42.163597 1.000000 1.000000 1.000000 +vn 0.917771 -0.332993 -0.216363 +v 5.519366 161.069916 42.556801 1.000000 1.000000 1.000000 +vn 0.967001 -0.195995 -0.162774 +v 5.751048 161.950378 42.517197 1.000000 1.000000 1.000000 +vn -0.317187 0.587009 0.744858 +v 157.054657 -136.787827 18.567200 1.000000 1.000000 1.000000 +vn -0.481414 0.703433 0.522899 +v 156.258987 -136.902237 18.162399 1.000000 1.000000 1.000000 +vn -0.515539 0.361400 0.776923 +v 155.168503 -138.086884 18.371399 1.000000 1.000000 1.000000 +vn -0.193281 0.238710 0.951662 +v 157.134476 -137.015259 18.707798 1.000000 1.000000 1.000000 +vn -0.132242 0.611030 0.780484 +v 158.545547 -136.419449 18.709599 1.000000 1.000000 1.000000 +vn -0.305977 0.284397 0.908569 +v 155.875320 -137.754791 18.575798 1.000000 1.000000 1.000000 +vn -0.250699 0.831756 0.495311 +v 157.726715 -136.300858 18.298798 1.000000 1.000000 1.000000 +vn -0.371588 0.803772 0.464621 +v 156.970963 -136.549225 18.229597 1.000000 1.000000 1.000000 +vn -0.049144 0.405274 0.912873 +v 159.288437 -136.649689 18.923199 1.000000 1.000000 1.000000 +vn 0.127590 0.396013 0.909337 +v 161.375443 -137.253860 19.154999 1.000000 1.000000 1.000000 +vn 0.132906 0.610752 0.780588 +v 160.761307 -136.712479 18.933399 1.000000 1.000000 1.000000 +vn -0.207362 -0.146237 0.967272 +v 161.268585 -137.484100 19.158798 1.000000 1.000000 1.000000 +vn 0.195336 0.284605 0.938533 +v 163.069763 -138.714783 19.404198 1.000000 1.000000 1.000000 +vn 0.374105 0.511582 0.773518 +v 162.724716 -137.969666 19.179199 1.000000 1.000000 1.000000 +vn -0.257213 -0.061524 0.964394 +v 162.885651 -138.879425 19.407997 1.000000 1.000000 1.000000 +vn 0.237750 0.217743 0.946606 +v 163.826797 -140.045929 19.579597 1.000000 1.000000 1.000000 +vn 0.536633 0.395019 0.745643 +v 163.677444 -139.221283 19.349998 1.000000 1.000000 1.000000 +vn -0.275968 0.019059 0.960978 +v 163.609222 -140.150574 19.583397 1.000000 1.000000 1.000000 +vn 0.294910 0.132682 0.946268 +v 164.265823 -141.954742 19.811199 1.000000 1.000000 1.000000 +vn 0.608712 0.280300 0.742227 +v 164.171844 -140.324997 19.483797 1.000000 1.000000 1.000000 +vn -0.253231 0.103399 0.961864 +v 164.027649 -141.972885 19.814999 1.000000 1.000000 1.000000 +vn -0.214865 0.173036 0.961193 +v 163.934952 -143.464493 20.007797 1.000000 1.000000 1.000000 +vn 0.323590 0.059049 0.944353 +v 164.169266 -143.516129 20.003998 1.000000 1.000000 1.000000 +vn -0.119735 -0.210953 0.970135 +v 159.275558 -136.907822 18.926998 1.000000 1.000000 1.000000 +vn -0.141455 0.231423 0.962514 +v 163.462448 -144.897507 20.211800 1.000000 1.000000 1.000000 +vn 0.331646 -0.021250 0.943165 +v 163.673584 -145.017502 20.208199 1.000000 1.000000 1.000000 +vn -0.041575 0.196555 0.979611 +v 162.141479 -146.627716 20.528999 1.000000 1.000000 1.000000 +vn 0.665492 0.568672 0.483459 +v 163.423813 -138.396637 18.925999 1.000000 1.000000 1.000000 +vn 0.833838 0.335766 0.438149 +v 164.394577 -140.237091 19.146000 1.000000 1.000000 1.000000 +vn 0.753334 0.474495 0.455348 +v 163.879593 -139.085938 19.012199 1.000000 1.000000 1.000000 +vn 0.452230 0.719355 0.527273 +v 162.265076 -137.245499 18.758198 1.000000 1.000000 1.000000 +vn 0.592652 0.662317 0.458366 +v 162.885651 -137.781311 18.841400 1.000000 1.000000 1.000000 +vn 0.684874 0.712317 0.153467 +v 162.987366 -137.659897 18.373199 1.000000 1.000000 1.000000 +vn 0.578850 0.800706 0.154279 +v 162.351349 -137.110153 18.289799 1.000000 1.000000 1.000000 +vn 0.373895 0.760221 0.531288 +v 161.582718 -136.807358 18.676800 1.000000 1.000000 1.000000 +vn 0.108029 0.840216 0.531382 +v 160.081512 -136.253418 18.518997 1.000000 1.000000 1.000000 +vn 0.261899 0.844598 0.466972 +v 160.837280 -136.469696 18.595600 1.000000 1.000000 1.000000 +vn 0.457819 0.875338 0.155512 +v 161.650955 -136.660858 18.208397 1.000000 1.000000 1.000000 +vn 0.602199 0.778553 -0.176668 +v 162.343628 -137.122711 17.474400 1.000000 1.000000 1.000000 +vn 0.484686 0.856354 -0.178151 +v 161.644531 -136.673401 17.392998 1.000000 1.000000 1.000000 +vn 0.326389 0.932137 0.156814 +v 160.884903 -136.314804 18.127399 1.000000 1.000000 1.000000 +vn 0.188764 0.971929 0.140437 +v 160.109848 -136.091553 18.050598 1.000000 1.000000 1.000000 +vn 0.331247 0.924414 -0.189032 +v 160.881042 -136.327362 17.311798 1.000000 1.000000 1.000000 +vn 0.462077 0.754844 -0.465505 +v 161.585297 -136.801773 16.999798 1.000000 1.000000 1.000000 +vn 0.559802 0.668464 -0.489671 +v 162.267670 -137.239914 17.081200 1.000000 1.000000 1.000000 +vn 0.323054 0.809929 -0.489542 +v 160.838562 -136.464111 16.918800 1.000000 1.000000 1.000000 +vn 0.100363 0.976786 -0.189254 +v 159.320618 -136.000854 17.160999 1.000000 1.000000 1.000000 +vn 0.116400 0.867686 -0.483292 +v 159.312897 -136.144577 16.767998 1.000000 1.000000 1.000000 +vn 0.389055 0.539850 -0.746457 +v 161.478439 -137.032013 16.655399 1.000000 1.000000 1.000000 +vn 0.475262 0.394248 -0.786571 +v 162.728577 -137.965485 16.820000 1.000000 1.000000 1.000000 +vn 0.658213 0.597101 -0.458504 +v 162.889511 -137.775711 17.164600 1.000000 1.000000 1.000000 +vn 0.237448 0.191690 -0.952299 +v 161.367706 -137.270599 16.504200 1.000000 1.000000 1.000000 +vn 0.221744 0.661952 -0.715995 +v 160.037750 -136.498993 16.497597 1.000000 1.000000 1.000000 +vn 0.290146 0.078559 -0.953753 +v 163.055603 -138.727341 16.753399 1.000000 1.000000 1.000000 +vn 0.137647 0.227212 -0.964068 +v 159.991394 -136.761307 16.346397 1.000000 1.000000 1.000000 +vn 0.033264 0.419324 -0.907227 +v 158.975571 -136.475266 16.326599 1.000000 1.000000 1.000000 +vn -0.042735 0.863442 -0.502634 +v 158.526245 -136.158524 16.695000 1.000000 1.000000 1.000000 +vn -0.178437 0.574504 -0.798815 +v 157.258072 -136.546432 16.330997 1.000000 1.000000 1.000000 +vn -0.075246 0.980389 -0.182139 +v 158.514664 -136.014801 17.087997 1.000000 1.000000 1.000000 +vn -0.234657 0.950109 -0.205498 +v 157.695816 -136.154343 17.014999 1.000000 1.000000 1.000000 +vn -0.329889 0.501948 -0.799513 +v 155.910080 -137.160385 16.327000 1.000000 1.000000 1.000000 +vn -0.458315 0.867240 -0.194531 +v 156.193329 -136.769684 16.878597 1.000000 1.000000 1.000000 +vn -0.386598 0.911760 0.138695 +v 156.916885 -136.395737 17.761200 1.000000 1.000000 1.000000 +vn -0.250477 0.955255 0.157319 +v 157.693237 -136.140396 17.830597 1.000000 1.000000 1.000000 +vn -0.601068 0.774996 -0.195188 +v 155.519974 -137.231537 16.813599 1.000000 1.000000 1.000000 +vn -0.510342 0.845829 0.155318 +v 156.186890 -136.757126 17.694199 1.000000 1.000000 1.000000 +vn -0.694741 0.654694 -0.297844 +v 154.907135 -137.795258 16.750000 1.000000 1.000000 1.000000 +vn -0.579851 0.375507 -0.723026 +v 154.178421 -138.875244 16.327999 1.000000 1.000000 1.000000 +vn -0.621412 0.766807 0.160793 +v 155.513535 -137.220383 17.629200 1.000000 1.000000 1.000000 +vn -0.732775 0.680414 -0.008807 +v 154.873657 -137.757584 17.155399 1.000000 1.000000 1.000000 +vn -0.550073 0.650402 0.523829 +v 155.602371 -137.352936 18.097397 1.000000 1.000000 1.000000 +vn -0.680178 0.576348 0.452969 +v 155.003693 -137.902695 18.033798 1.000000 1.000000 1.000000 +vn -0.774621 0.606194 0.180256 +v 154.621307 -138.098038 17.534599 1.000000 1.000000 1.000000 +vn -0.847501 0.516567 0.122069 +v 154.128204 -138.783142 17.474400 1.000000 1.000000 1.000000 +vn -0.725171 0.440234 0.529454 +v 154.253082 -138.875244 17.942799 1.000000 1.000000 1.000000 +vn -0.651729 0.228272 0.723285 +v 154.074127 -139.718033 18.222397 1.000000 1.000000 1.000000 +vn -0.105435 0.981860 0.157593 +v 158.513367 -136.000854 17.903599 1.000000 1.000000 1.000000 +vn -0.124144 0.874630 0.468626 +v 158.526245 -136.164108 18.371799 1.000000 1.000000 1.000000 +vn 0.042295 0.986629 0.157400 +v 159.321915 -135.986908 17.976597 1.000000 1.000000 1.000000 +vn 0.016417 0.845559 0.533630 +v 159.312897 -136.150146 18.444798 1.000000 1.000000 1.000000 +vn -0.307700 0.076980 0.948364 +v 154.274979 -139.825470 18.362997 1.000000 1.000000 1.000000 +vn -0.830311 0.314564 0.460036 +v 153.861694 -139.603607 17.884598 1.000000 1.000000 1.000000 +vn -0.631415 -0.049922 0.773836 +v 153.511505 -142.051025 18.059399 1.000000 1.000000 1.000000 +vn -0.419962 0.026239 0.907163 +v 153.821777 -141.289169 18.252598 1.000000 1.000000 1.000000 +vn -0.830383 0.148272 0.537103 +v 153.369888 -141.195679 17.774197 1.000000 1.000000 1.000000 +vn -0.898683 0.417556 0.134222 +v 153.725235 -139.531052 17.416397 1.000000 1.000000 1.000000 +vn -0.933994 0.274283 0.228964 +v 153.421387 -140.329178 17.360197 1.000000 1.000000 1.000000 +vn -0.900415 -0.002715 0.435024 +v 153.275894 -142.037064 17.721600 1.000000 1.000000 1.000000 +vn -0.644048 -0.227972 0.730227 +v 153.766418 -144.174728 17.928799 1.000000 1.000000 1.000000 +vn -0.282951 -0.126240 0.950790 +v 153.980148 -144.100769 18.069199 1.000000 1.000000 1.000000 +vn -0.838825 -0.136940 0.526897 +v 153.355713 -143.440781 17.638199 1.000000 1.000000 1.000000 +vn -0.842225 -0.293123 0.452478 +v 153.541122 -144.252869 17.591000 1.000000 1.000000 1.000000 +vn -0.970791 0.144079 0.191850 +v 153.220535 -141.164978 17.306000 1.000000 1.000000 1.000000 +vn -0.977350 -0.035551 0.208623 +v 153.121399 -142.613342 17.218998 1.000000 1.000000 1.000000 +vn -0.982852 0.170040 -0.071330 +v 153.185776 -141.158005 16.896000 1.000000 1.000000 1.000000 +vn -0.998463 -0.029432 -0.046955 +v 153.086639 -142.614731 16.808998 1.000000 1.000000 1.000000 +vn -0.972357 -0.176957 0.152344 +v 153.206375 -143.470078 17.169800 1.000000 1.000000 1.000000 +vn -0.949068 -0.284618 0.135140 +v 153.396912 -144.303085 17.122597 1.000000 1.000000 1.000000 +vn -0.668322 -0.320565 -0.671256 +v 153.748398 -145.324478 16.327999 1.000000 1.000000 1.000000 +vn -0.894453 -0.395837 0.208007 +v 153.686600 -145.098434 17.077797 1.000000 1.000000 1.000000 +vn -0.697516 -0.128774 -0.704903 +v 153.229538 -143.495193 16.326599 1.000000 1.000000 1.000000 +vn -0.681056 0.055632 -0.730115 +v 153.171616 -141.940796 16.326599 1.000000 1.000000 1.000000 +vn -0.639015 0.277478 -0.717402 +v 153.653122 -139.828247 16.327797 1.000000 1.000000 1.000000 +vn -0.952867 0.299058 -0.051070 +v 153.389191 -140.316620 16.950199 1.000000 1.000000 1.000000 +vn 0.595139 0.340085 -0.728115 +v 163.246140 -138.557114 16.904598 1.000000 1.000000 1.000000 +vn 0.736106 0.502421 -0.453565 +v 163.428970 -138.393845 17.248997 1.000000 1.000000 1.000000 +vn 0.820994 0.404714 -0.402710 +v 163.884735 -139.083145 17.335400 1.000000 1.000000 1.000000 +vn 0.664344 0.178018 -0.725918 +v 164.036652 -139.945465 17.079800 1.000000 1.000000 1.000000 +vn 0.705428 0.686855 -0.174933 +v 162.979630 -137.669678 17.557598 1.000000 1.000000 1.000000 +vn 0.805362 0.567852 -0.170109 +v 163.530685 -138.301758 17.642197 1.000000 1.000000 1.000000 +vn 0.776517 0.611579 0.151634 +v 163.540985 -138.291992 18.457600 1.000000 1.000000 1.000000 +vn 0.859363 0.498269 0.114993 +v 164.008331 -138.999420 18.543999 1.000000 1.000000 1.000000 +vn 0.942271 0.334553 -0.014157 +v 164.569672 -140.168716 18.267597 1.000000 1.000000 1.000000 +vn 0.921669 0.317284 -0.223286 +v 164.524612 -140.186859 17.862198 1.000000 1.000000 1.000000 +vn 0.853833 0.307009 -0.420374 +v 164.252960 -139.840820 17.424400 1.000000 1.000000 1.000000 +vn 0.897960 0.402529 0.177875 +v 164.386856 -139.778030 18.632999 1.000000 1.000000 1.000000 +vn -0.119573 -0.976528 -0.179155 +v 158.548141 -148.705368 34.819000 1.000000 1.000000 1.000000 +vn -0.287385 -0.852917 -0.435824 +v 157.760193 -148.431885 34.541199 1.000000 1.000000 1.000000 +vn -0.142124 -0.853932 -0.500601 +v 158.558426 -148.561646 34.425999 1.000000 1.000000 1.000000 +vn 0.043952 -0.982345 -0.181844 +v 159.379837 -148.710953 34.702797 1.000000 1.000000 1.000000 +vn -0.202684 -0.964050 0.171835 +v 157.729294 -148.586761 35.749718 1.000000 1.000000 1.000000 +vn -0.060859 -0.985620 0.157636 +v 158.546844 -148.719330 35.634518 1.000000 1.000000 1.000000 +vn -0.366982 -0.904389 -0.217726 +v 157.028900 -148.352356 35.036400 1.000000 1.000000 1.000000 +vn -0.339847 -0.927291 0.156954 +v 157.023743 -148.366302 35.851936 1.000000 1.000000 1.000000 +vn -0.236781 -0.847739 0.474630 +v 157.075256 -148.211426 36.320137 1.000000 1.000000 1.000000 +vn -0.024236 -0.878415 0.477284 +v 158.558426 -148.556076 36.102718 1.000000 1.000000 1.000000 +vn 0.090984 -0.983329 0.157435 +v 159.381134 -148.724899 35.518398 1.000000 1.000000 1.000000 +vn 0.130174 -0.857075 0.498474 +v 159.370834 -148.561646 35.986717 1.000000 1.000000 1.000000 +vn 0.045264 -0.652007 0.756861 +v 158.576447 -148.299332 36.440521 1.000000 1.000000 1.000000 +vn 0.256487 -0.575343 0.776656 +v 160.129150 -148.190491 36.207916 1.000000 1.000000 1.000000 +vn 0.258495 -0.845710 0.466856 +v 160.178085 -148.441650 35.870117 1.000000 1.000000 1.000000 +vn 0.238570 -0.958327 0.157140 +v 160.208969 -148.602112 35.402000 1.000000 1.000000 1.000000 +vn 0.379306 -0.782314 0.494076 +v 160.954437 -148.203049 35.754719 1.000000 1.000000 1.000000 +vn 0.422906 -0.524644 0.738850 +v 161.580139 -147.622589 35.977119 1.000000 1.000000 1.000000 +vn 0.170460 -0.317848 0.932693 +v 159.341217 -148.063522 36.464920 1.000000 1.000000 1.000000 +vn 0.274193 -0.188283 0.943063 +v 161.475861 -147.409103 36.117718 1.000000 1.000000 1.000000 +vn 0.378575 -0.912215 0.156668 +v 161.005936 -148.357925 35.286598 1.000000 1.000000 1.000000 +vn 0.495337 -0.735588 0.462116 +v 161.692154 -147.850037 35.639519 1.000000 1.000000 1.000000 +vn 0.591229 -0.643017 0.486803 +v 162.371948 -147.389572 35.524799 1.000000 1.000000 1.000000 +vn 0.532256 -0.360557 0.765965 +v 162.829010 -146.638885 35.746319 1.000000 1.000000 1.000000 +vn 0.509532 -0.846455 0.154566 +v 161.762970 -147.995148 35.171196 1.000000 1.000000 1.000000 +vn 0.334191 -0.924840 -0.181626 +v 161.000778 -148.345383 34.471001 1.000000 1.000000 1.000000 +vn 0.467946 -0.865396 -0.179210 +v 161.756531 -147.982590 34.355797 1.000000 1.000000 1.000000 +vn 0.627150 -0.763714 0.153050 +v 162.460785 -147.522125 35.056599 1.000000 1.000000 1.000000 +vn 0.589527 -0.787792 -0.178443 +v 162.453064 -147.510971 34.240997 1.000000 1.000000 1.000000 +vn 0.685615 -0.569700 0.453182 +v 162.993805 -146.823059 35.408600 1.000000 1.000000 1.000000 +vn 0.728522 -0.668034 0.151615 +v 163.099380 -146.940277 34.940399 1.000000 1.000000 1.000000 +vn 0.382703 -0.796832 -0.467544 +v 161.694733 -147.855606 33.962601 1.000000 1.000000 1.000000 +vn 0.695455 -0.696661 -0.176083 +v 163.090363 -146.930511 34.124798 1.000000 1.000000 1.000000 +vn 0.495840 -0.733336 -0.465146 +v 162.374512 -147.393768 33.848000 1.000000 1.000000 1.000000 +vn 0.250017 -0.829230 -0.499869 +v 160.955719 -148.208633 34.077999 1.000000 1.000000 1.000000 +vn 0.213893 -0.631721 -0.745103 +v 161.582718 -147.628174 33.618198 1.000000 1.000000 1.000000 +vn 0.305300 -0.530389 -0.790873 +v 162.235474 -147.185852 33.503399 1.000000 1.000000 1.000000 +vn 0.583268 -0.647678 -0.490215 +v 162.997665 -146.827240 33.731796 1.000000 1.000000 1.000000 +vn 0.785754 -0.593640 -0.173732 +v 163.641403 -146.264923 34.009796 1.000000 1.000000 1.000000 +vn 0.468167 -0.488522 -0.736319 +v 163.349152 -146.019363 33.271999 1.000000 1.000000 1.000000 +vn 0.685345 -0.567764 -0.456011 +v 163.537125 -146.177032 33.616600 1.000000 1.000000 1.000000 +vn -0.008949 -0.306805 -0.951730 +v 161.468140 -147.392365 33.466999 1.000000 1.000000 1.000000 +vn 0.762223 -0.455121 -0.460305 +v 163.987732 -145.447266 33.500801 1.000000 1.000000 1.000000 +vn 0.516602 -0.355802 -0.778799 +v 163.781738 -145.318893 33.156197 1.000000 1.000000 1.000000 +vn 0.125343 -0.281377 -0.951376 +v 163.154739 -145.856094 33.120998 1.000000 1.000000 1.000000 +vn 0.860406 -0.479345 -0.173002 +v 164.103607 -145.518433 33.893799 1.000000 1.000000 1.000000 +vn 0.813788 -0.561311 0.150600 +v 163.651703 -146.274704 34.825199 1.000000 1.000000 1.000000 +vn 0.883194 -0.444390 0.149956 +v 164.115204 -145.525406 34.709396 1.000000 1.000000 1.000000 +vn 0.934045 -0.325035 0.148028 +v 164.476974 -144.707733 34.592796 1.000000 1.000000 1.000000 +vn 0.912817 -0.350897 -0.208891 +v 164.464096 -144.702164 33.777199 1.000000 1.000000 1.000000 +vn 0.742489 -0.427512 0.515697 +v 163.531967 -146.172836 35.293598 1.000000 1.000000 1.000000 +vn 0.778651 -0.352132 0.519331 +v 163.982574 -145.443085 35.177597 1.000000 1.000000 1.000000 +vn 0.645246 -0.132200 0.752450 +v 164.115204 -144.552856 35.398796 1.000000 1.000000 1.000000 +vn 0.860997 -0.235234 0.450943 +v 164.335358 -144.647736 35.060997 1.000000 1.000000 1.000000 +vn 0.965481 -0.204404 0.161448 +v 164.703583 -143.951462 34.490601 1.000000 1.000000 1.000000 +vn 0.891933 -0.049148 0.449488 +v 164.703583 -143.051483 34.843597 1.000000 1.000000 1.000000 +vn 0.677351 0.020672 0.735370 +v 164.467972 -143.023575 35.181396 1.000000 1.000000 1.000000 +vn 0.445576 -0.128525 0.885970 +v 163.168900 -145.867264 35.771736 1.000000 1.000000 1.000000 +vn 0.362004 0.051681 0.930743 +v 164.111343 -143.785416 35.437199 1.000000 1.000000 1.000000 +vn 0.035647 0.262884 0.964169 +v 161.363846 -147.180283 36.121521 1.000000 1.000000 1.000000 +vn -0.085716 0.255017 0.963130 +v 162.979630 -145.708191 35.775520 1.000000 1.000000 1.000000 +vn 0.342100 0.145442 0.928340 +v 164.276138 -142.187759 35.205799 1.000000 1.000000 1.000000 +vn 0.609679 0.211926 0.763793 +v 164.420334 -141.338013 34.948799 1.000000 1.000000 1.000000 +vn 0.875973 0.085870 0.474655 +v 164.737061 -142.172409 34.727398 1.000000 1.000000 1.000000 +vn 0.873358 0.198338 0.444868 +v 164.654648 -141.294754 34.611000 1.000000 1.000000 1.000000 +vn 0.822169 0.309907 0.477489 +v 164.461533 -140.444992 34.495598 1.000000 1.000000 1.000000 +vn 0.573152 0.368834 0.731750 +v 163.946533 -139.747330 34.717999 1.000000 1.000000 1.000000 +vn 0.985529 -0.083947 0.147258 +v 164.854218 -143.071014 34.375397 1.000000 1.000000 1.000000 +vn 0.987965 0.046343 0.147571 +v 164.888977 -142.166840 34.259201 1.000000 1.000000 1.000000 +vn 0.973353 0.175419 0.147688 +v 164.804001 -141.265442 34.142799 1.000000 1.000000 1.000000 +vn 0.942063 0.300956 0.148131 +v 164.605728 -140.394760 34.027397 1.000000 1.000000 1.000000 +vn 0.787972 0.420023 0.450201 +v 164.160248 -139.634308 34.380398 1.000000 1.000000 1.000000 +vn 0.893269 0.423859 0.149715 +v 164.296738 -139.561752 33.911999 1.000000 1.000000 1.000000 +vn 0.976880 -0.133941 -0.166631 +v 164.841339 -143.069626 33.559799 1.000000 1.000000 1.000000 +vn 0.865854 -0.280400 -0.414334 +v 164.563248 -143.912399 33.281998 1.000000 1.000000 1.000000 +vn 0.866140 -0.151771 -0.476200 +v 164.710007 -143.052872 33.166798 1.000000 1.000000 1.000000 +vn 0.985429 0.005990 -0.169985 +v 164.876099 -142.168228 33.443596 1.000000 1.000000 1.000000 +vn 0.976210 0.134695 -0.169913 +v 164.791122 -141.268250 33.327198 1.000000 1.000000 1.000000 +vn 0.894719 -0.032301 -0.445460 +v 164.742203 -142.172409 33.050598 1.000000 1.000000 1.000000 +vn 0.688233 -0.090609 -0.719809 +v 164.505310 -142.179398 32.706001 1.000000 1.000000 1.000000 +vn 0.632436 -0.270037 -0.726020 +v 164.332779 -143.848221 32.937401 1.000000 1.000000 1.000000 +vn 0.891693 0.083361 -0.444898 +v 164.659805 -141.293365 32.934196 1.000000 1.000000 1.000000 +vn 0.950405 0.260451 -0.169988 +v 164.592850 -140.398956 33.211800 1.000000 1.000000 1.000000 +vn 0.858719 0.190800 -0.475601 +v 164.466675 -140.443604 32.818798 1.000000 1.000000 1.000000 +vn 0.907120 0.384543 -0.171055 +v 164.285141 -139.568726 33.096596 1.000000 1.000000 1.000000 +vn 0.629485 0.016357 -0.776841 +v 164.426758 -141.336609 32.589600 1.000000 1.000000 1.000000 +vn 0.668421 0.170103 -0.724071 +v 163.951691 -139.744537 32.359001 1.000000 1.000000 1.000000 +vn 0.837509 0.312287 -0.448392 +v 164.165405 -139.631516 32.703400 1.000000 1.000000 1.000000 +vn 0.281545 -0.134222 -0.950114 +v 164.259399 -142.187759 32.555000 1.000000 1.000000 1.000000 +vn 0.325614 -0.023843 -0.945202 +v 163.730240 -139.861740 32.207798 1.000000 1.000000 1.000000 +vn 0.571945 0.255491 -0.779489 +v 163.566727 -139.021759 32.244198 1.000000 1.000000 1.000000 +vn 0.239516 -0.206307 -0.948720 +v 164.094604 -143.781235 32.786400 1.000000 1.000000 1.000000 +vn 0.138080 0.230714 0.963175 +v 159.325775 -147.805389 36.468719 1.000000 1.000000 1.000000 +vn 0.214370 0.182672 0.959519 +v 157.913406 -147.686783 36.700138 1.000000 1.000000 1.000000 +vn 0.066977 -0.340129 0.937991 +v 157.861908 -147.939331 36.696320 1.000000 1.000000 1.000000 +vn 0.267049 0.088277 0.959631 +v 156.050415 -146.778412 37.034737 1.000000 1.000000 1.000000 +vn 0.517020 0.463340 0.719726 +v 156.194611 -146.562134 36.880138 1.000000 1.000000 1.000000 +vn 0.282321 -0.020398 0.959103 +v 154.638046 -145.078903 37.380737 1.000000 1.000000 1.000000 +vn -0.089331 -0.343215 0.934999 +v 155.910080 -146.989120 37.030937 1.000000 1.000000 1.000000 +vn 0.668725 0.223221 0.709210 +v 154.851776 -144.946335 37.226139 1.000000 1.000000 1.000000 +vn 0.254643 -0.118371 0.959763 +v 153.991730 -142.892410 37.727936 1.000000 1.000000 1.000000 +vn 0.701196 -0.036027 0.712058 +v 154.237640 -142.867294 37.573338 1.000000 1.000000 1.000000 +vn 0.206929 -0.193386 0.959053 +v 154.053528 -141.358932 37.959339 1.000000 1.000000 1.000000 +vn -0.329737 -0.166742 0.929231 +v 153.754837 -142.918930 37.724136 1.000000 1.000000 1.000000 +vn -0.192884 -0.256577 0.947082 +v 154.430756 -145.207275 37.376938 1.000000 1.000000 1.000000 +vn 0.644020 -0.257673 0.720308 +v 154.295578 -141.407776 37.804741 1.000000 1.000000 1.000000 +vn 0.103928 -0.248664 0.962998 +v 154.826019 -139.309189 38.293938 1.000000 1.000000 1.000000 +vn -0.358335 -0.074019 0.930654 +v 153.817917 -141.311493 37.955536 1.000000 1.000000 1.000000 +vn 0.518308 -0.460255 0.720780 +v 155.030731 -139.458496 38.139336 1.000000 1.000000 1.000000 +vn 0.857264 -0.271929 0.437210 +v 154.527328 -141.453827 37.456940 1.000000 1.000000 1.000000 +vn 0.910272 -0.110283 0.399053 +v 154.453949 -142.143112 37.341938 1.000000 1.000000 1.000000 +vn -0.016579 -0.264248 0.964312 +v 156.345245 -137.721313 38.639938 1.000000 1.000000 1.000000 +vn -0.453642 0.099972 0.885559 +v 154.627747 -139.165466 38.290138 1.000000 1.000000 1.000000 +vn -0.121041 -0.239015 0.963442 +v 158.339554 -136.946899 38.987137 1.000000 1.000000 1.000000 +vn -0.286604 0.168966 0.943032 +v 156.220367 -137.502228 38.636139 1.000000 1.000000 1.000000 +vn 0.272699 -0.627442 0.729350 +v 156.475296 -137.948746 38.485336 1.000000 1.000000 1.000000 +vn -0.015039 -0.674088 0.738498 +v 158.371750 -137.212006 38.832539 1.000000 1.000000 1.000000 +vn -0.200484 -0.195240 0.960046 +v 159.755783 -136.960846 39.218536 1.000000 1.000000 1.000000 +vn -0.263434 -0.619074 0.739831 +v 159.719742 -137.225952 39.063938 1.000000 1.000000 1.000000 +vn -0.259328 -0.103620 0.960214 +v 161.672836 -137.728287 39.553139 1.000000 1.000000 1.000000 +vn -0.278059 -0.843727 0.459139 +v 159.684967 -137.478516 38.716141 1.000000 1.000000 1.000000 +vn -0.093858 -0.899298 0.427147 +v 159.046387 -137.422699 38.601139 1.000000 1.000000 1.000000 +vn -0.482515 -0.495558 0.722219 +v 161.541519 -137.955719 39.398537 1.000000 1.000000 1.000000 +vn -0.282918 0.002452 0.959141 +v 163.188217 -139.320358 39.899139 1.000000 1.000000 1.000000 +vn -0.411440 -0.853495 0.319788 +v 160.848862 -137.845490 38.934937 1.000000 1.000000 1.000000 +vn -0.651975 -0.265088 0.710392 +v 162.983505 -139.469666 39.744537 1.000000 1.000000 1.000000 +vn -0.686882 -0.646883 0.331265 +v 161.934204 -138.580826 39.166138 1.000000 1.000000 1.000000 +vn -0.570666 -0.689404 0.446164 +v 161.416641 -138.171997 39.050938 1.000000 1.000000 1.000000 +vn -0.024455 -0.999172 0.032509 +v 159.045090 -137.613861 37.776741 1.000000 1.000000 1.000000 +vn -0.254685 -0.967007 0.005811 +v 160.190948 -137.792465 37.994141 1.000000 1.000000 1.000000 +vn -0.436874 -0.899478 -0.008977 +v 160.776764 -138.019897 38.110741 1.000000 1.000000 1.000000 +vn -0.752885 -0.553698 0.355785 +v 162.397705 -139.066406 39.282139 1.000000 1.000000 1.000000 +vn -0.655923 -0.753134 0.050545 +v 161.819611 -138.727341 38.341736 1.000000 1.000000 1.000000 +vn -0.890901 -0.294726 0.345590 +v 163.105804 -140.214767 39.512337 1.000000 1.000000 1.000000 +vn -0.807534 -0.426297 0.407628 +v 162.787811 -139.611984 39.396938 1.000000 1.000000 1.000000 +vn -0.856910 -0.513245 0.047803 +v 162.641022 -139.718033 38.572540 1.000000 1.000000 1.000000 +vn -0.636560 -0.639437 -0.431174 +v 162.406708 -139.056625 37.605736 1.000000 1.000000 1.000000 +vn -0.915527 -0.241925 0.321377 +v 163.342712 -140.859406 39.627541 1.000000 1.000000 1.000000 +vn -0.953902 -0.299986 0.008927 +v 163.174042 -140.918015 38.803337 1.000000 1.000000 1.000000 +vn -0.446626 -0.798975 -0.402697 +v 161.424362 -138.159439 37.374336 1.000000 1.000000 1.000000 +vn -0.418352 -0.606652 -0.675984 +v 162.095139 -138.371521 37.154739 1.000000 1.000000 1.000000 +vn -0.122276 -0.706436 -0.697135 +v 160.306824 -137.345963 36.807137 1.000000 1.000000 1.000000 +vn -0.293302 -0.763980 -0.574725 +v 160.854004 -137.831528 37.258339 1.000000 1.000000 1.000000 +vn -0.116927 -0.962184 -0.246028 +v 159.665665 -137.612473 37.437138 1.000000 1.000000 1.000000 +vn -0.127970 -0.260267 -0.957019 +v 163.179199 -139.327332 37.249741 1.000000 1.000000 1.000000 +vn 0.032497 -0.247751 -0.968278 +v 161.666412 -137.739441 36.903740 1.000000 1.000000 1.000000 +vn -0.504541 -0.446404 -0.739028 +v 162.996368 -139.459885 37.385536 1.000000 1.000000 1.000000 +vn -0.211953 -0.184545 -0.959697 +v 163.959412 -141.455215 37.596916 1.000000 1.000000 1.000000 +vn -0.687270 -0.341622 -0.641057 +v 163.582184 -140.777084 37.616341 1.000000 1.000000 1.000000 +vn -0.722723 -0.505280 -0.471555 +v 162.799393 -139.603607 37.720337 1.000000 1.000000 1.000000 +vn -0.833529 -0.350673 -0.426917 +v 163.355576 -140.855225 37.950939 1.000000 1.000000 1.000000 +vn -0.822950 -0.520251 -0.228239 +v 162.683517 -139.687332 38.117737 1.000000 1.000000 1.000000 +vn -0.742578 -0.607668 -0.281632 +v 162.303711 -139.157104 38.003136 1.000000 1.000000 1.000000 +vn 0.266666 -0.174684 -0.947826 +v 164.225922 -143.016602 37.823120 1.000000 1.000000 1.000000 +vn -0.262605 -0.117814 -0.957684 +v 163.994171 -142.987289 37.828117 1.000000 1.000000 1.000000 +vn 0.297899 -0.097729 -0.949582 +v 164.188583 -141.413361 37.591721 1.000000 1.000000 1.000000 +vn 0.165598 -0.251413 -0.953608 +v 163.555145 -145.210052 38.157719 1.000000 1.000000 1.000000 +vn -0.306865 -0.006918 -0.951728 +v 163.353012 -145.084473 38.162918 1.000000 1.000000 1.000000 +vn 0.089656 -0.296047 -0.950956 +v 162.642319 -146.471436 38.389118 1.000000 1.000000 1.000000 +vn 0.327072 0.017926 -0.944829 +v 163.372314 -139.186401 37.244537 1.000000 1.000000 1.000000 +vn 0.292435 0.142732 -0.945574 +v 161.790009 -137.524551 36.898537 1.000000 1.000000 1.000000 +vn 0.118634 -0.248358 -0.961376 +v 159.754501 -136.974792 36.568939 1.000000 1.000000 1.000000 +vn 0.200432 0.246820 -0.948107 +v 159.789261 -136.723633 36.563938 1.000000 1.000000 1.000000 +vn 0.120731 -0.662857 -0.738949 +v 159.048965 -137.149216 36.589737 1.000000 1.000000 1.000000 +vn 0.193110 -0.203214 -0.959902 +v 158.340851 -136.960846 36.337738 1.000000 1.000000 1.000000 +vn -0.047710 -0.875378 -0.481079 +v 159.686264 -137.464554 37.039539 1.000000 1.000000 1.000000 +vn 0.353225 -0.662641 -0.660408 +v 157.702255 -137.345963 36.357140 1.000000 1.000000 1.000000 +vn 0.190300 -0.863754 -0.466600 +v 158.401352 -137.450607 36.808338 1.000000 1.000000 1.000000 +vn 0.273907 -0.127763 -0.953232 +v 156.351685 -137.732468 35.990540 1.000000 1.000000 1.000000 +vn 0.466835 -0.482187 -0.741323 +v 156.467560 -137.933395 36.126339 1.000000 1.000000 1.000000 +vn 0.367689 -0.816020 -0.446001 +v 157.766632 -137.594330 36.691738 1.000000 1.000000 1.000000 +vn 0.531742 -0.696927 -0.481190 +v 156.593735 -138.153854 36.461136 1.000000 1.000000 1.000000 +vn 0.139532 -0.962153 -0.234078 +v 158.419373 -137.599899 37.205738 1.000000 1.000000 1.000000 +vn 0.150860 -0.988543 0.004855 +v 158.425827 -137.655716 37.660538 1.000000 1.000000 1.000000 +vn 0.313003 -0.949699 0.010051 +v 157.818130 -137.792465 37.544136 1.000000 1.000000 1.000000 +vn 0.551419 -0.800603 -0.234463 +v 156.667114 -138.280823 36.858536 1.000000 1.000000 1.000000 +vn 0.243049 -0.906870 0.344259 +v 157.770493 -137.608276 38.368340 1.000000 1.000000 1.000000 +vn 0.544620 -0.837236 0.049250 +v 156.694153 -138.328278 37.313339 1.000000 1.000000 1.000000 +vn 0.032652 -0.890034 0.454724 +v 158.402634 -137.465958 38.484940 1.000000 1.000000 1.000000 +vn 0.304386 -0.878638 0.367892 +v 157.166656 -137.842697 38.253136 1.000000 1.000000 1.000000 +vn 0.449431 -0.787188 0.422313 +v 156.600174 -138.165009 38.137741 1.000000 1.000000 1.000000 +vn 0.583621 -0.726325 0.363096 +v 156.085175 -138.569656 38.022938 1.000000 1.000000 1.000000 +vn 0.676576 -0.657115 0.332332 +v 155.620407 -139.055237 37.906937 1.000000 1.000000 1.000000 +vn 0.781785 -0.621492 0.050598 +v 155.751724 -139.183609 37.082539 1.000000 1.000000 1.000000 +vn 0.716132 -0.541085 0.440887 +v 155.226425 -139.602219 37.791740 1.000000 1.000000 1.000000 +vn 0.911526 -0.411162 -0.008186 +v 155.064209 -140.290115 36.851540 1.000000 1.000000 1.000000 +vn 0.867937 -0.391682 0.305401 +v 154.905853 -140.206390 37.675739 1.000000 1.000000 1.000000 +vn 0.968300 -0.249709 0.006418 +v 154.833755 -140.916611 36.734940 1.000000 1.000000 1.000000 +vn 0.817046 -0.426118 -0.388407 +v 155.214844 -139.593842 36.115139 1.000000 1.000000 1.000000 +vn 0.666714 -0.607509 -0.431770 +v 156.076157 -138.558502 36.346539 1.000000 1.000000 1.000000 +vn 0.964381 -0.129934 -0.230404 +v 154.650925 -141.478928 36.177940 1.000000 1.000000 1.000000 +vn 0.998183 -0.050898 0.032246 +v 154.630325 -142.151489 36.517540 1.000000 1.000000 1.000000 +vn 0.995251 0.097177 0.005636 +v 154.648346 -142.822647 36.401337 1.000000 1.000000 1.000000 +vn 0.971767 0.089757 -0.218203 +v 154.596848 -142.828217 35.946541 1.000000 1.000000 1.000000 +vn 0.971145 0.238318 0.009062 +v 154.752640 -143.486816 36.284939 1.000000 1.000000 1.000000 +vn 0.889924 -0.070411 -0.450641 +v 154.514450 -141.451035 35.780338 1.000000 1.000000 1.000000 +vn 0.888200 0.137693 -0.438339 +v 154.457809 -142.843582 35.549198 1.000000 1.000000 1.000000 +vn 0.854759 0.296623 -0.425914 +v 154.568527 -143.535660 35.432598 1.000000 1.000000 1.000000 +vn 0.695971 0.085188 -0.712999 +v 154.202881 -142.130554 35.330597 1.000000 1.000000 1.000000 +vn 0.781398 -0.284326 -0.555495 +v 154.892975 -140.199417 35.999138 1.000000 1.000000 1.000000 +vn 0.731763 -0.133559 -0.668344 +v 154.425613 -140.774292 35.547997 1.000000 1.000000 1.000000 +vn 0.710248 0.296842 -0.638305 +v 154.336777 -143.597061 35.098000 1.000000 1.000000 1.000000 +vn 0.270534 0.101067 -0.957391 +v 154.065125 -141.360336 35.309799 1.000000 1.000000 1.000000 +vn 0.225056 0.170571 -0.959300 +v 154.003311 -142.891006 35.078598 1.000000 1.000000 1.000000 +vn 0.267826 0.021212 -0.963234 +v 154.836319 -139.316177 35.644539 1.000000 1.000000 1.000000 +vn 0.630020 -0.400301 -0.665458 +v 155.433716 -138.873856 35.895538 1.000000 1.000000 1.000000 +vn 0.638838 -0.714594 -0.285029 +v 156.164993 -138.674316 36.743938 1.000000 1.000000 1.000000 +vn 0.904634 -0.001094 0.426187 +v 154.471970 -142.842178 37.225739 1.000000 1.000000 1.000000 +vn 0.908411 0.236904 0.344479 +v 154.777100 -144.192856 36.993938 1.000000 1.000000 1.000000 +vn 0.929408 0.183810 0.320025 +v 154.581406 -143.532867 37.109138 1.000000 1.000000 1.000000 +vn 0.888829 0.455720 0.047987 +v 155.208405 -144.723083 36.054138 1.000000 1.000000 1.000000 +vn 0.834298 0.373386 0.405624 +v 155.055191 -144.817978 36.878540 1.000000 1.000000 1.000000 +vn -0.116756 -0.626928 0.770279 +v 157.155075 -147.970032 36.657936 1.000000 1.000000 1.000000 +vn -0.380671 -0.798890 0.465687 +v 156.328506 -147.857010 36.436737 1.000000 1.000000 1.000000 +vn -0.208643 -0.594644 0.776444 +v 156.439240 -147.629578 36.774536 1.000000 1.000000 1.000000 +vn -0.382880 -0.504278 0.774020 +v 155.187805 -146.647247 37.005539 1.000000 1.000000 1.000000 +vn -0.483547 -0.723563 0.492583 +v 155.639709 -147.392365 36.552738 1.000000 1.000000 1.000000 +vn -0.592934 -0.790156 0.155186 +v 155.550873 -147.526306 36.084339 1.000000 1.000000 1.000000 +vn -0.470213 -0.868672 0.155914 +v 156.257690 -148.002121 35.968536 1.000000 1.000000 1.000000 +vn -0.507602 -0.842987 -0.178083 +v 156.264145 -147.989563 35.153000 1.000000 1.000000 1.000000 +vn -0.699554 -0.697832 0.153802 +v 154.917435 -146.950043 36.199539 1.000000 1.000000 1.000000 +vn -0.625320 -0.760032 -0.176995 +v 155.558594 -147.515152 35.268997 1.000000 1.000000 1.000000 +vn -0.597982 -0.657514 0.458360 +v 155.022995 -146.831436 36.667740 1.000000 1.000000 1.000000 +vn -0.789787 -0.594160 0.152347 +v 154.359955 -146.278885 36.315739 1.000000 1.000000 1.000000 +vn -0.811879 -0.557670 -0.172793 +v 154.370255 -146.270523 35.500198 1.000000 1.000000 1.000000 +vn -0.727213 -0.663840 -0.174576 +v 154.926453 -146.940277 35.383999 1.000000 1.000000 1.000000 +vn -0.595708 -0.658345 -0.460123 +v 155.637131 -147.397949 34.875801 1.000000 1.000000 1.000000 +vn -0.675541 -0.555250 -0.485122 +v 155.019150 -146.837021 34.990997 1.000000 1.000000 1.000000 +vn -0.510592 -0.449231 -0.733136 +v 155.776184 -147.190033 34.531197 1.000000 1.000000 1.000000 +vn -0.478728 -0.740629 -0.471474 +v 156.325928 -147.862595 34.759998 1.000000 1.000000 1.000000 +vn -0.757533 -0.470629 -0.452384 +v 154.474548 -146.181213 35.107201 1.000000 1.000000 1.000000 +vn -0.553627 -0.292017 -0.779887 +v 154.661224 -146.023544 34.762596 1.000000 1.000000 1.000000 +vn -0.815023 -0.365203 -0.449850 +v 154.026505 -145.459824 35.221798 1.000000 1.000000 1.000000 +vn -0.656208 -0.212586 -0.724016 +v 154.232498 -145.331451 34.877396 1.000000 1.000000 1.000000 +vn -0.880315 -0.442354 -0.171374 +v 153.910614 -145.530991 35.614937 1.000000 1.000000 1.000000 +vn -0.374604 -0.496455 -0.783074 +v 156.436661 -147.635147 34.415398 1.000000 1.000000 1.000000 +vn -0.328199 0.002680 -0.944605 +v 154.444931 -145.198898 34.726196 1.000000 1.000000 1.000000 +vn -0.301455 -0.123145 -0.945495 +v 155.920380 -146.973755 34.380196 1.000000 1.000000 1.000000 +vn -0.276088 -0.611444 -0.741560 +v 157.811691 -148.180725 34.196598 1.000000 1.000000 1.000000 +vn -0.218399 -0.233630 -0.947480 +v 157.865753 -147.921188 34.045601 1.000000 1.000000 1.000000 +vn -0.076622 -0.664719 -0.743154 +v 159.355377 -148.310486 33.965199 1.000000 1.000000 1.000000 +vn -0.004376 -0.881562 -0.472048 +v 159.370834 -148.567230 34.309799 1.000000 1.000000 1.000000 +vn 0.128794 -0.872267 -0.471765 +v 160.179367 -148.447235 34.193398 1.000000 1.000000 1.000000 +vn 0.043157 -0.605083 -0.794992 +v 160.130447 -148.196075 33.848801 1.000000 1.000000 1.000000 +vn -0.134502 -0.271815 -0.952904 +v 159.339935 -148.045380 33.814198 1.000000 1.000000 1.000000 +vn 0.191854 -0.964488 -0.181536 +v 160.206406 -148.588165 34.586399 1.000000 1.000000 1.000000 +vn -0.863599 -0.481274 0.150238 +v 153.900330 -145.537964 36.430336 1.000000 1.000000 1.000000 +vn -0.920481 -0.361284 0.148960 +v 153.539825 -144.731461 36.545738 1.000000 1.000000 1.000000 +vn -0.931577 -0.321026 -0.170610 +v 153.551422 -144.725876 35.730141 1.000000 1.000000 1.000000 +vn -0.758776 -0.470927 0.449986 +v 154.031647 -145.457031 36.898739 1.000000 1.000000 1.000000 +vn -0.800443 -0.361989 0.477759 +v 153.680161 -144.670059 37.013939 1.000000 1.000000 1.000000 +vn -0.670112 -0.562155 0.484698 +v 154.479691 -146.177032 36.783939 1.000000 1.000000 1.000000 +vn -0.546151 -0.405281 0.733121 +v 154.236359 -145.328659 37.236336 1.000000 1.000000 1.000000 +vn -0.594744 -0.250251 0.763973 +v 153.663422 -143.775650 37.467140 1.000000 1.000000 1.000000 +vn -0.858871 -0.253680 0.444957 +v 153.434265 -143.837051 37.129341 1.000000 1.000000 1.000000 +vn -0.768635 -0.549280 0.327859 +v 162.380966 -139.048264 34.129196 1.000000 1.000000 1.000000 +vn -0.548563 -0.428558 0.717925 +v 162.070679 -138.371521 34.361801 1.000000 1.000000 1.000000 +vn -0.661496 -0.605516 0.442464 +v 161.920044 -138.566879 34.014198 1.000000 1.000000 1.000000 +vn -0.820149 -0.450360 0.352889 +v 162.778793 -139.598022 34.245399 1.000000 1.000000 1.000000 +vn -0.682085 -0.179753 0.708836 +v 163.309235 -140.083603 34.707798 1.000000 1.000000 1.000000 +vn -0.560778 -0.827921 -0.008654 +v 161.304626 -138.322693 33.073997 1.000000 1.000000 1.000000 +vn -0.752301 -0.656902 0.050221 +v 162.249649 -139.176636 33.305000 1.000000 1.000000 1.000000 +vn -0.529080 -0.787406 0.316332 +v 161.398605 -138.159439 33.898201 1.000000 1.000000 1.000000 +vn -0.392568 -0.919700 0.006481 +v 160.753586 -138.010132 32.957397 1.000000 1.000000 1.000000 +vn -0.718934 -0.547678 -0.427998 +v 162.790375 -139.589661 32.568798 1.000000 1.000000 1.000000 +vn -0.555747 -0.729172 -0.399315 +v 161.929062 -138.555710 32.337601 1.000000 1.000000 1.000000 +vn -0.256702 -0.934571 -0.246335 +v 160.255325 -137.754791 32.400398 1.000000 1.000000 1.000000 +vn -0.171867 -0.984546 0.033615 +v 159.641205 -137.664093 32.739998 1.000000 1.000000 1.000000 +vn -0.397809 -0.796030 0.456163 +v 160.291382 -137.623642 33.679398 1.000000 1.000000 1.000000 +vn -0.004161 -0.972058 -0.234704 +v 159.023209 -137.558044 32.168999 1.000000 1.000000 1.000000 +vn 0.003334 -0.999979 0.005481 +v 159.023209 -137.613861 32.623798 1.000000 1.000000 1.000000 +vn -0.400285 -0.715229 -0.572904 +v 161.405045 -138.146881 32.221596 1.000000 1.000000 1.000000 +vn -0.175688 -0.859261 -0.480420 +v 160.295242 -137.609680 32.002800 1.000000 1.000000 1.000000 +vn 0.170856 -0.985247 0.009807 +v 158.402634 -137.659897 32.507401 1.000000 1.000000 1.000000 +vn 0.244765 -0.859344 -0.449019 +v 158.376892 -137.454803 31.654999 1.000000 1.000000 1.000000 +vn 0.060924 -0.881779 -0.467712 +v 159.023209 -137.407349 31.771599 1.000000 1.000000 1.000000 +vn -0.224536 -0.876948 0.424908 +v 159.666946 -137.474335 33.564400 1.000000 1.000000 1.000000 +vn -0.350974 -0.578097 0.736628 +v 160.358337 -137.379440 34.027199 1.000000 1.000000 1.000000 +vn -0.114172 -0.665665 0.737465 +v 159.024490 -137.167358 33.795799 1.000000 1.000000 1.000000 +vn -0.098478 -0.885800 0.453498 +v 159.023209 -137.422699 33.448196 1.000000 1.000000 1.000000 +vn -0.272549 -0.070938 0.959523 +v 162.229034 -138.166412 34.516399 1.000000 1.000000 1.000000 +vn -0.227132 -0.168695 0.959142 +v 160.427856 -137.122711 34.181599 1.000000 1.000000 1.000000 +vn -0.279700 0.038645 0.959309 +v 163.531967 -139.966385 34.862396 1.000000 1.000000 1.000000 +vn -0.154472 -0.220517 0.963074 +v 159.025787 -136.899445 33.950401 1.000000 1.000000 1.000000 +vn 0.178481 -0.658288 0.731301 +v 157.053360 -137.616653 33.448601 1.000000 1.000000 1.000000 +vn -0.259364 0.204507 0.943879 +v 156.856384 -137.136658 33.599396 1.000000 1.000000 1.000000 +vn -0.055111 -0.259394 0.964198 +v 156.952942 -137.372467 33.603199 1.000000 1.000000 1.000000 +vn 0.448941 -0.524729 0.723265 +v 155.432419 -138.898956 33.102600 1.000000 1.000000 1.000000 +vn 0.066112 -0.259501 0.963477 +v 155.248322 -138.721756 33.257198 1.000000 1.000000 1.000000 +vn -0.355313 0.113603 0.927819 +v 155.070648 -138.548737 33.253399 1.000000 1.000000 1.000000 +vn -0.364827 -0.028740 0.930632 +v 153.998169 -140.555222 32.918800 1.000000 1.000000 1.000000 +vn 0.176196 -0.218203 0.959866 +v 154.224777 -140.637558 32.922398 1.000000 1.000000 1.000000 +vn 0.601345 -0.338003 0.723974 +v 154.459091 -140.721268 32.767998 1.000000 1.000000 1.000000 +vn -0.350864 -0.123515 0.928245 +v 153.732941 -142.138931 32.687401 1.000000 1.000000 1.000000 +vn 0.235895 -0.149572 0.960199 +v 153.971146 -142.148697 32.691200 1.000000 1.000000 1.000000 +vn 0.690671 -0.124059 0.712448 +v 154.217041 -142.158463 32.536598 1.000000 1.000000 1.000000 +vn 0.814018 -0.379180 0.439996 +v 154.683105 -140.802200 32.420197 1.000000 1.000000 1.000000 +vn 0.887900 -0.225292 0.401094 +v 154.523453 -141.473358 32.305000 1.000000 1.000000 1.000000 +vn 0.809875 -0.500568 0.305833 +v 155.213547 -139.621750 32.639000 1.000000 1.000000 1.000000 +vn 0.999582 -0.028403 0.005417 +v 154.630325 -142.175201 31.364599 1.000000 1.000000 1.000000 +vn 0.983773 -0.176536 0.032038 +v 154.697266 -141.508240 31.480799 1.000000 1.000000 1.000000 +vn 0.634805 -0.631909 0.444651 +v 155.607529 -139.069199 32.754997 1.000000 1.000000 1.000000 +vn 0.928359 -0.371628 0.006517 +v 155.053909 -140.313828 31.698198 1.000000 1.000000 1.000000 +vn 0.578869 -0.743300 0.335285 +v 156.067154 -138.586411 32.869999 1.000000 1.000000 1.000000 +vn 0.849295 -0.527857 -0.008013 +v 155.361618 -139.727798 31.814798 1.000000 1.000000 1.000000 +vn 0.752697 -0.528970 -0.391968 +v 155.597214 -139.059433 31.078398 1.000000 1.000000 1.000000 +vn 0.940071 -0.250892 -0.230913 +v 154.801559 -140.845459 31.141199 1.000000 1.000000 1.000000 +vn 0.576155 -0.691328 -0.436017 +v 156.580856 -138.162231 31.309599 1.000000 1.000000 1.000000 +vn 0.690124 -0.721863 0.051415 +v 156.180450 -138.732925 32.045799 1.000000 1.000000 1.000000 +vn 0.475090 -0.800165 0.366094 +v 156.587296 -138.174789 32.986198 1.000000 1.000000 1.000000 +vn 0.532224 -0.796117 -0.287985 +v 156.654251 -138.290604 31.707199 1.000000 1.000000 1.000000 +vn 0.420363 -0.906030 0.049049 +v 157.222015 -138.025482 32.276596 1.000000 1.000000 1.000000 +vn 0.332045 -0.841918 0.425347 +v 157.149918 -137.849670 33.100998 1.000000 1.000000 1.000000 +vn 0.172931 -0.913046 0.369381 +v 157.751175 -137.612473 33.216400 1.000000 1.000000 1.000000 +vn 0.433373 -0.869312 -0.237664 +v 157.200134 -137.973862 31.821798 1.000000 1.000000 1.000000 +vn 0.106880 -0.932325 0.345467 +v 158.378189 -137.470154 33.331596 1.000000 1.000000 1.000000 +vn 0.428432 -0.763122 -0.483829 +v 157.143494 -137.837128 31.424398 1.000000 1.000000 1.000000 +vn 0.253711 -0.704119 -0.663210 +v 158.343414 -137.199448 31.320198 1.000000 1.000000 1.000000 +vn 0.393985 -0.539060 -0.744439 +v 157.046936 -137.601303 31.089598 1.000000 1.000000 1.000000 +vn 0.022208 -0.671961 -0.740253 +v 159.703003 -137.205032 31.552998 1.000000 1.000000 1.000000 +vn 0.161330 -0.225102 -0.960886 +v 159.025787 -136.912018 31.300999 1.000000 1.000000 1.000000 +vn 0.252461 -0.160225 -0.954249 +v 156.958099 -137.383636 30.953798 1.000000 1.000000 1.000000 +vn 0.568693 -0.479266 -0.668500 +v 155.904938 -138.378494 30.858797 1.000000 1.000000 1.000000 +vn 0.706638 -0.224643 -0.670969 +v 154.667664 -140.114304 30.511198 1.000000 1.000000 1.000000 +vn 0.268527 -0.012731 -0.963188 +v 155.257324 -138.730133 30.607798 1.000000 1.000000 1.000000 +vn 0.737285 -0.380591 -0.558177 +v 155.203247 -139.613373 30.962399 1.000000 1.000000 1.000000 +vn 0.282475 0.066083 -0.956996 +v 154.236359 -140.641739 30.272999 1.000000 1.000000 1.000000 +vn 0.701174 -0.002957 -0.712984 +v 154.276276 -141.424530 30.293798 1.000000 1.000000 1.000000 +vn 0.873467 -0.182531 -0.451374 +v 154.670242 -140.798004 30.743599 1.000000 1.000000 1.000000 +vn 0.975499 -0.033136 -0.217493 +v 154.578827 -142.173813 30.909798 1.000000 1.000000 1.000000 +vn 0.899016 0.024198 -0.437247 +v 154.439774 -142.168228 30.512398 1.000000 1.000000 1.000000 +vn 0.247383 0.140666 -0.958653 +v 153.982727 -142.148697 30.041798 1.000000 1.000000 1.000000 +vn 0.743554 0.203471 -0.636967 +v 154.224777 -142.896606 30.060999 1.000000 1.000000 1.000000 +vn 0.886752 0.185057 -0.423586 +v 154.461670 -142.870087 30.395798 1.000000 1.000000 1.000000 +vn 0.993453 0.113879 0.009132 +v 154.650925 -142.849152 31.248198 1.000000 1.000000 1.000000 +vn 0.908875 0.351083 -0.225140 +v 154.899399 -144.162170 30.562599 1.000000 1.000000 1.000000 +vn 0.810054 0.355221 -0.466509 +v 154.770660 -144.217987 30.165199 1.000000 1.000000 1.000000 +vn 0.940186 0.337395 0.047066 +v 154.947037 -144.141235 31.017399 1.000000 1.000000 1.000000 +vn 0.896396 -0.115458 0.427952 +v 154.452652 -142.168228 32.188999 1.000000 1.000000 1.000000 +vn 0.945034 0.064630 0.320522 +v 154.474548 -142.868683 32.072399 1.000000 1.000000 1.000000 +vn 0.931248 0.120047 0.344043 +v 154.585266 -143.552399 31.957199 1.000000 1.000000 1.000000 +vn 0.693309 0.136604 0.707575 +v 154.564667 -144.308670 32.189400 1.000000 1.000000 1.000000 +vn 0.875829 0.263833 0.404124 +v 154.783539 -144.212387 31.841799 1.000000 1.000000 1.000000 +vn 0.848181 0.394547 0.353443 +v 155.064209 -144.831924 31.726999 1.000000 1.000000 1.000000 +vn 0.794827 0.604738 0.050415 +v 155.565033 -145.292389 30.786598 1.000000 1.000000 1.000000 +vn 0.277835 -0.055663 0.959015 +v 154.336777 -144.409149 32.343998 1.000000 1.000000 1.000000 +vn 0.577348 0.391666 0.716427 +v 155.692505 -146.108658 31.843399 1.000000 1.000000 1.000000 +vn -0.228380 -0.230011 0.946011 +v 154.115341 -144.506821 32.340199 1.000000 1.000000 1.000000 +vn 0.276982 0.053649 0.959376 +v 155.522552 -146.302597 31.997999 1.000000 1.000000 1.000000 +vn -0.187532 -0.401471 0.896467 +v 155.357758 -146.488190 31.994198 1.000000 1.000000 1.000000 +vn 0.016270 -0.345499 0.938278 +v 157.170517 -147.718872 31.659599 1.000000 1.000000 1.000000 +vn 0.238694 0.153933 0.958817 +v 157.254211 -147.476089 31.663198 1.000000 1.000000 1.000000 +vn -0.051158 -0.651368 0.757036 +v 157.834869 -148.180725 31.403799 1.000000 1.000000 1.000000 +vn 0.122158 -0.335921 0.933935 +v 158.621521 -148.059326 31.428198 1.000000 1.000000 1.000000 +vn -0.218454 -0.598939 0.770422 +v 156.466278 -147.644928 31.621199 1.000000 1.000000 1.000000 +vn -0.446789 -0.453876 0.770958 +v 154.684387 -146.044464 31.968798 1.000000 1.000000 1.000000 +vn -0.548021 -0.650038 0.526424 +v 155.038452 -146.849579 31.515999 1.000000 1.000000 1.000000 +vn -0.475021 -0.701162 0.531720 +v 155.662888 -147.410507 31.399998 1.000000 1.000000 1.000000 +vn -0.357403 -0.806035 0.471775 +v 156.358124 -147.872360 31.283398 1.000000 1.000000 1.000000 +vn -0.598123 -0.331168 0.729778 +v 153.908051 -144.597504 32.199600 1.000000 1.000000 1.000000 +vn -0.740608 -0.469100 0.481088 +v 154.041946 -145.473785 31.747198 1.000000 1.000000 1.000000 +vn -0.683901 -0.571219 0.453859 +v 154.497711 -146.202133 31.630999 1.000000 1.000000 1.000000 +vn -0.624310 -0.173124 0.761751 +v 153.534683 -142.974731 32.430397 1.000000 1.000000 1.000000 +vn -0.814890 -0.368045 0.447770 +v 153.687897 -144.693787 31.861998 1.000000 1.000000 1.000000 +vn -0.841556 -0.256632 0.475315 +v 153.439407 -143.862167 31.977198 1.000000 1.000000 1.000000 +vn -0.861358 -0.485100 0.150801 +v 153.910614 -145.556107 31.278999 1.000000 1.000000 1.000000 +vn -0.919166 -0.364750 0.148630 +v 153.547562 -144.755173 31.393599 1.000000 1.000000 1.000000 +vn -0.787679 -0.597157 0.151542 +v 154.379257 -146.304001 31.162798 1.000000 1.000000 1.000000 +vn -0.878202 -0.446496 -0.171471 +v 153.920929 -145.549118 30.463398 1.000000 1.000000 1.000000 +vn -0.930428 -0.324875 -0.169588 +v 153.560425 -144.750992 30.578199 1.000000 1.000000 1.000000 +vn -0.809761 -0.560679 -0.172989 +v 154.389572 -146.295624 30.347198 1.000000 1.000000 1.000000 +vn -0.724555 -0.666759 -0.174507 +v 154.943176 -146.958405 30.232199 1.000000 1.000000 1.000000 +vn -0.696764 -0.700769 0.153111 +v 154.934174 -146.968185 31.047598 1.000000 1.000000 1.000000 +vn -0.620970 -0.763714 -0.176459 +v 155.581772 -147.533295 30.116198 1.000000 1.000000 1.000000 +vn -0.588226 -0.793635 0.155349 +v 155.574051 -147.544449 30.931799 1.000000 1.000000 1.000000 +vn -0.469253 -0.869213 0.155791 +v 156.287308 -148.017471 30.815199 1.000000 1.000000 1.000000 +vn -0.340982 -0.924345 0.171225 +v 156.958099 -148.339783 30.712999 1.000000 1.000000 1.000000 +vn -0.153152 -0.865677 0.476600 +v 157.783371 -148.431885 31.065998 1.000000 1.000000 1.000000 +vn -0.492694 -0.842961 -0.216030 +v 156.293747 -148.004913 29.999598 1.000000 1.000000 1.000000 +vn -0.262014 -0.948413 -0.178497 +v 157.753754 -148.578400 29.782198 1.000000 1.000000 1.000000 +vn -0.205566 -0.965820 0.157904 +v 157.751175 -148.592346 30.597799 1.000000 1.000000 1.000000 +vn 0.001970 -0.866002 0.500037 +v 158.588043 -148.557465 30.949799 1.000000 1.000000 1.000000 +vn 0.169314 -0.603709 0.779018 +v 159.386276 -148.302124 31.171198 1.000000 1.000000 1.000000 +vn -0.055351 -0.985781 0.158659 +v 158.576447 -148.722107 30.481598 1.000000 1.000000 1.000000 +vn 0.132260 -0.873237 0.469004 +v 159.403015 -148.558868 30.833399 1.000000 1.000000 1.000000 +vn -0.101585 -0.978103 -0.181648 +v 158.577744 -148.708160 29.665998 1.000000 1.000000 1.000000 +vn 0.096119 -0.982798 0.157698 +v 159.413315 -148.722107 30.365198 1.000000 1.000000 1.000000 +vn 0.261950 -0.827560 0.496515 +v 160.201248 -148.436066 30.717999 1.000000 1.000000 1.000000 +vn 0.243776 -0.221362 0.944231 +v 160.817947 -147.727249 31.080999 1.000000 1.000000 1.000000 +vn 0.343686 -0.576652 0.741183 +v 160.895203 -147.954681 30.940399 1.000000 1.000000 1.000000 +vn 0.242374 -0.957170 0.158368 +v 160.233444 -148.597931 30.249798 1.000000 1.000000 1.000000 +vn 0.385438 -0.797374 0.464363 +v 160.976318 -148.194672 30.602798 1.000000 1.000000 1.000000 +vn 0.048783 -0.982131 -0.181766 +v 159.412033 -148.708160 29.549599 1.000000 1.000000 1.000000 +vn 0.195888 -0.963660 -0.181625 +v 160.230865 -148.583969 29.434198 1.000000 1.000000 1.000000 +vn 0.383923 -0.909918 0.157009 +v 161.029099 -148.349564 30.134399 1.000000 1.000000 1.000000 +vn 0.339468 -0.923147 -0.180449 +v 161.023956 -148.337006 29.318798 1.000000 1.000000 1.000000 +vn 0.494844 -0.717770 0.489833 +v 161.707611 -147.838867 30.487997 1.000000 1.000000 1.000000 +vn 0.471999 -0.431073 0.769021 +v 162.256073 -147.163528 30.709599 1.000000 1.000000 1.000000 +vn 0.599729 -0.656986 0.456831 +v 162.395126 -147.370026 30.371798 1.000000 1.000000 1.000000 +vn 0.513606 -0.843880 0.155162 +v 161.779709 -147.983978 30.019798 1.000000 1.000000 1.000000 +vn 0.472385 -0.863044 -0.178907 +v 161.773270 -147.971420 29.204199 1.000000 1.000000 1.000000 +vn 0.125577 -0.856439 -0.500743 +v 160.202545 -148.443054 29.040998 1.000000 1.000000 1.000000 +vn 0.263931 -0.842421 -0.469752 +v 160.978882 -148.201645 28.925798 1.000000 1.000000 1.000000 +vn 0.592121 -0.785875 -0.178304 +v 162.477524 -147.491440 29.087999 1.000000 1.000000 1.000000 +vn 0.629515 -0.761658 0.153582 +v 162.485245 -147.502594 29.903599 1.000000 1.000000 1.000000 +vn 0.386565 -0.795185 -0.467171 +v 161.711472 -147.844452 28.810999 1.000000 1.000000 1.000000 +vn 0.679528 -0.552293 0.482923 +v 163.010544 -146.806320 30.256798 1.000000 1.000000 1.000000 +vn 0.698136 -0.693984 -0.176045 +v 163.107101 -146.913757 28.972799 1.000000 1.000000 1.000000 +vn 0.731352 -0.664928 0.151642 +v 163.116119 -146.923523 29.788399 1.000000 1.000000 1.000000 +vn 0.486722 -0.720394 -0.494099 +v 162.398987 -147.374222 28.694799 1.000000 1.000000 1.000000 +vn 0.225558 -0.566200 -0.792806 +v 161.599457 -147.618408 28.466599 1.000000 1.000000 1.000000 +vn 0.119208 -0.654209 -0.746860 +v 160.896500 -147.960266 28.581198 1.000000 1.000000 1.000000 +vn -0.054185 -0.303085 -0.951422 +v 160.812805 -147.709106 28.430199 1.000000 1.000000 1.000000 +vn -0.046839 -0.604247 -0.795419 +v 159.386276 -148.307709 28.811998 1.000000 1.000000 1.000000 +vn -0.173347 -0.251430 -0.952226 +v 158.622803 -148.041199 28.777399 1.000000 1.000000 1.000000 +vn 0.393669 -0.545842 -0.739649 +v 162.848312 -146.626328 28.235197 1.000000 1.000000 1.000000 +vn 0.599984 -0.654164 -0.460532 +v 163.014404 -146.810516 28.579798 1.000000 1.000000 1.000000 +vn 0.083841 -0.295517 -0.951651 +v 162.677078 -146.435165 28.084198 1.000000 1.000000 1.000000 +vn 0.462079 -0.419821 -0.781174 +v 163.365891 -145.997040 28.119398 1.000000 1.000000 1.000000 +vn 0.693615 -0.551487 -0.463422 +v 163.553848 -146.153305 28.463799 1.000000 1.000000 1.000000 +vn 0.789174 -0.588913 -0.174313 +v 163.659424 -146.241211 28.856998 1.000000 1.000000 1.000000 +vn 0.820983 -0.389220 -0.417726 +v 164.316040 -144.717514 28.244999 1.000000 1.000000 1.000000 +vn 0.859262 -0.466146 -0.210660 +v 164.119064 -145.486328 28.740398 1.000000 1.000000 1.000000 +vn 0.589500 -0.348618 -0.728667 +v 164.095886 -144.619843 27.900599 1.000000 1.000000 1.000000 +vn 0.207827 -0.234892 -0.949544 +v 163.867996 -144.519363 27.749399 1.000000 1.000000 1.000000 +vn 0.669782 -0.176573 -0.721259 +v 164.476974 -142.992874 27.669197 1.000000 1.000000 1.000000 +vn 0.838683 -0.260382 -0.478343 +v 164.569672 -143.888687 28.129799 1.000000 1.000000 1.000000 +vn 0.951993 -0.256261 -0.167451 +v 164.698425 -143.923569 28.522999 1.000000 1.000000 1.000000 +vn 0.931363 -0.325818 0.162499 +v 164.451233 -144.777512 29.453598 1.000000 1.000000 1.000000 +vn 0.883766 -0.443438 0.149401 +v 164.130646 -145.493317 29.555798 1.000000 1.000000 1.000000 +vn 0.978456 -0.117760 -0.169574 +v 164.845200 -143.036133 28.406799 1.000000 1.000000 1.000000 +vn 0.967071 -0.207347 0.147585 +v 164.710007 -143.927750 29.338398 1.000000 1.000000 1.000000 +vn 0.883411 -0.144667 -0.445709 +v 164.712585 -143.020782 28.013599 1.000000 1.000000 1.000000 +vn 0.985582 0.010285 -0.168888 +v 164.873535 -142.133347 28.290398 1.000000 1.000000 1.000000 +vn 0.987889 0.051178 0.146480 +v 164.886398 -142.131958 29.105799 1.000000 1.000000 1.000000 +vn 0.986048 -0.078349 0.146871 +v 164.858063 -143.037521 29.222399 1.000000 1.000000 1.000000 +vn 0.878313 -0.161766 0.449886 +v 164.563248 -143.887283 29.806799 1.000000 1.000000 1.000000 +vn 0.880435 -0.025167 0.473498 +v 164.707443 -143.020782 29.690598 1.000000 1.000000 1.000000 +vn 0.822766 -0.343410 0.452909 +v 163.998032 -145.412384 30.024199 1.000000 1.000000 1.000000 +vn 0.674802 -0.064735 0.735154 +v 164.334061 -143.823090 30.144598 1.000000 1.000000 1.000000 +vn 0.634117 0.133320 0.761657 +v 164.498856 -142.147308 29.911999 1.000000 1.000000 1.000000 +vn 0.892659 0.086875 0.442281 +v 164.735764 -142.137527 29.574198 1.000000 1.000000 1.000000 +vn 0.856367 0.203022 0.474783 +v 164.650787 -141.268250 29.458799 1.000000 1.000000 1.000000 +vn 0.359402 0.101104 0.927690 +v 164.249084 -142.966354 30.168999 1.000000 1.000000 1.000000 +vn 0.619935 0.292014 0.728291 +v 164.228500 -140.500809 29.681198 1.000000 1.000000 1.000000 +vn 0.244299 0.214909 0.945586 +v 164.016052 -140.576157 29.821798 1.000000 1.000000 1.000000 +vn 0.837669 0.314677 0.446419 +v 164.453812 -140.421280 29.343399 1.000000 1.000000 1.000000 +vn 0.972772 0.178561 0.147754 +v 164.800140 -141.240326 28.990599 1.000000 1.000000 1.000000 +vn 0.940498 0.305409 0.148960 +v 164.598007 -140.369644 28.875198 1.000000 1.000000 1.000000 +vn 0.770973 0.419518 0.479172 +v 164.151245 -139.616165 29.228798 1.000000 1.000000 1.000000 +vn 0.891659 0.427418 0.149189 +v 164.286423 -139.543610 28.760399 1.000000 1.000000 1.000000 +vn 0.366457 0.005477 0.930419 +v 163.884735 -144.526352 30.400398 1.000000 1.000000 1.000000 +vn 0.626772 -0.203464 0.752170 +v 163.792038 -145.286804 30.361998 1.000000 1.000000 1.000000 +vn 0.346702 -0.136090 0.928050 +v 162.688660 -146.449112 30.734999 1.000000 1.000000 1.000000 +vn -0.046145 0.262663 0.963784 +v 162.522583 -146.263535 30.738798 1.000000 1.000000 1.000000 +vn 0.761243 -0.466117 0.450826 +v 163.548706 -146.149109 30.140799 1.000000 1.000000 1.000000 +vn 0.586005 -0.281636 0.759789 +v 163.360733 -145.992844 30.478598 1.000000 1.000000 1.000000 +vn 0.073509 0.256057 0.963863 +v 160.735565 -147.483063 31.084799 1.000000 1.000000 1.000000 +vn 0.816947 -0.556547 0.151171 +v 163.669724 -146.249588 29.672598 1.000000 1.000000 1.000000 +vn 0.170108 0.210837 0.962607 +v 158.638260 -147.802597 31.431999 1.000000 1.000000 1.000000 +vn 0.975859 0.137715 -0.169511 +v 164.787262 -141.241730 28.174999 1.000000 1.000000 1.000000 +vn 0.895174 -0.029249 -0.444756 +v 164.740921 -142.137527 27.897198 1.000000 1.000000 1.000000 +vn 0.876320 0.080695 -0.474924 +v 164.655945 -141.266846 27.781799 1.000000 1.000000 1.000000 +vn 0.949199 0.265187 -0.169404 +v 164.586411 -140.373825 28.059599 1.000000 1.000000 1.000000 +vn 0.905701 0.388298 -0.170087 +v 164.274841 -139.549194 27.944998 1.000000 1.000000 1.000000 +vn 0.871845 0.203138 -0.445670 +v 164.460236 -140.418488 27.666599 1.000000 1.000000 1.000000 +vn 0.836642 0.315583 -0.447703 +v 164.156387 -139.613373 27.551798 1.000000 1.000000 1.000000 +vn 0.686004 0.084132 -0.722717 +v 164.234940 -140.499420 27.321999 1.000000 1.000000 1.000000 +vn 0.602062 0.180974 -0.777669 +v 163.943954 -139.726395 27.207399 1.000000 1.000000 1.000000 +vn 0.260507 -0.168118 -0.950722 +v 164.232361 -142.964966 27.518198 1.000000 1.000000 1.000000 +vn 0.318774 -0.064124 -0.945659 +v 164.000610 -140.581741 27.170998 1.000000 1.000000 1.000000 +vn 0.626139 -0.062655 -0.777190 +v 164.504013 -142.147308 27.552799 1.000000 1.000000 1.000000 +vn 0.594497 0.340978 -0.728222 +v 163.071045 -138.339432 26.975998 1.000000 1.000000 1.000000 +vn 0.321369 0.062970 -0.944858 +v 162.889511 -138.519440 26.824999 1.000000 1.000000 1.000000 +vn -0.173459 -0.646806 -0.742667 +v 158.604782 -148.307709 28.928398 1.000000 1.000000 1.000000 +vn -0.251017 -0.202875 -0.946484 +v 157.176956 -147.700729 29.008799 1.000000 1.000000 1.000000 +vn -0.361963 -0.568537 -0.738748 +v 157.091980 -147.950485 29.159798 1.000000 1.000000 1.000000 +vn -0.316428 -0.083537 -0.944931 +v 155.369339 -146.475632 29.343399 1.000000 1.000000 1.000000 +vn -0.407496 -0.803795 -0.433429 +v 157.009583 -148.191895 29.504198 1.000000 1.000000 1.000000 +vn -0.266468 -0.824703 -0.498859 +v 157.782074 -148.437469 29.388998 1.000000 1.000000 1.000000 +vn -0.442054 -0.441692 -0.780702 +v 155.796783 -147.206787 29.378599 1.000000 1.000000 1.000000 +vn -0.569226 -0.378216 -0.730023 +v 155.199387 -146.668182 29.494398 1.000000 1.000000 1.000000 +vn -0.578547 -0.667869 -0.468225 +v 155.659027 -147.416092 29.723198 1.000000 1.000000 1.000000 +vn -0.134403 -0.871537 -0.471550 +v 158.588043 -148.564438 29.272799 1.000000 1.000000 1.000000 +vn -0.000676 -0.881226 -0.472695 +v 159.403015 -148.564438 29.156399 1.000000 1.000000 1.000000 +vn -0.681889 -0.571614 -0.456382 +v 155.034592 -146.853760 29.838999 1.000000 1.000000 1.000000 +vn -0.745127 -0.461273 -0.481678 +v 154.493851 -146.206329 29.954199 1.000000 1.000000 1.000000 +vn -0.588436 -0.218842 -0.778364 +v 154.241516 -145.348190 29.725798 1.000000 1.000000 1.000000 +vn -0.813295 -0.368921 -0.449942 +v 154.036789 -145.477966 30.070398 1.000000 1.000000 1.000000 +vn 0.183124 0.230427 -0.955703 +v 154.347076 -144.404953 29.694599 1.000000 1.000000 1.000000 +vn 0.081259 -0.260805 -0.961966 +v 160.423981 -137.135254 31.532198 1.000000 1.000000 1.000000 +vn -0.225542 -0.683244 -0.694484 +v 160.924820 -137.584549 31.770399 1.000000 1.000000 1.000000 +vn -0.004468 -0.249698 -0.968314 +v 162.221313 -138.176178 31.866999 1.000000 1.000000 1.000000 +vn -0.502293 -0.545709 -0.670749 +v 162.567642 -138.865479 32.117996 1.000000 1.000000 1.000000 +vn -0.165830 -0.241792 -0.956053 +v 163.520386 -139.971985 32.212997 1.000000 1.000000 1.000000 +vn -0.563185 -0.376793 -0.735425 +v 163.323395 -140.076630 32.348801 1.000000 1.000000 1.000000 +vn -0.817855 -0.502931 -0.279597 +v 162.674500 -139.674774 32.966400 1.000000 1.000000 1.000000 +vn -0.784488 -0.406711 -0.468151 +v 163.109680 -140.189651 32.683598 1.000000 1.000000 1.000000 +vn -0.728707 -0.250710 -0.637284 +v 163.737961 -141.466385 32.579597 1.000000 1.000000 1.000000 +vn -0.884074 -0.409075 -0.225987 +v 162.984787 -140.255219 33.081001 1.000000 1.000000 1.000000 +vn -0.916484 -0.397205 0.047811 +v 162.938446 -140.278961 33.535797 1.000000 1.000000 1.000000 +vn 0.309101 0.103055 -0.945429 +v 162.370651 -137.980835 31.861799 1.000000 1.000000 1.000000 +vn 0.235299 0.218789 -0.946977 +v 160.489655 -136.892471 31.527199 1.000000 1.000000 1.000000 +vn -0.236906 -0.155960 -0.958933 +v 164.026367 -142.194733 32.560196 1.000000 1.000000 1.000000 +vn -0.276337 -0.083965 -0.957386 +v 163.869293 -143.718445 32.791397 1.000000 1.000000 1.000000 +vn -0.269135 -0.004081 -0.963094 +v 162.970627 -145.699814 33.126198 1.000000 1.000000 1.000000 +vn 0.154334 0.262322 -0.952559 +v 159.025787 -136.659454 31.295799 1.000000 1.000000 1.000000 +vn -0.857157 -0.318701 0.404612 +v 163.098083 -140.195221 34.360199 1.000000 1.000000 1.000000 +vn -0.108459 0.251088 -0.961869 +v 157.961044 -147.685379 23.745598 1.000000 1.000000 1.000000 +vn 0.125785 0.660870 -0.739885 +v 157.352066 -147.248642 23.997599 1.000000 1.000000 1.000000 +vn -0.094207 0.739819 -0.666178 +v 158.682022 -147.554214 23.764999 1.000000 1.000000 1.000000 +vn -0.212922 0.205387 -0.955239 +v 160.073792 -147.678406 23.398399 1.000000 1.000000 1.000000 +vn -0.022174 0.270909 -0.962350 +v 156.632355 -147.157944 23.976999 1.000000 1.000000 1.000000 +vn 0.368521 0.622507 -0.690418 +v 156.226807 -146.608185 24.214998 1.000000 1.000000 1.000000 +vn 0.358328 0.802827 -0.476519 +v 156.848648 -146.721207 24.447599 1.000000 1.000000 1.000000 +vn 0.134608 0.873923 -0.467054 +v 158.055023 -147.199814 24.216198 1.000000 1.000000 1.000000 +vn 0.058964 0.243411 -0.968129 +v 155.068069 -145.743073 24.311598 1.000000 1.000000 1.000000 +vn 0.606352 0.435589 -0.665282 +v 154.859497 -144.992386 24.562599 1.000000 1.000000 1.000000 +vn 0.695832 0.601134 -0.393007 +v 155.425995 -145.436111 24.782198 1.000000 1.000000 1.000000 +vn 0.542814 0.618416 -0.568256 +v 155.862442 -145.950974 24.666401 1.000000 1.000000 1.000000 +vn 0.452661 0.857939 -0.242980 +v 156.914322 -146.588654 24.844999 1.000000 1.000000 1.000000 +vn 0.217909 0.947806 -0.232765 +v 158.084641 -147.053299 24.613798 1.000000 1.000000 1.000000 +vn -0.050302 0.891086 -0.451038 +v 158.697479 -147.296082 24.099798 1.000000 1.000000 1.000000 +vn 0.381688 0.923688 0.033384 +v 157.498840 -146.813309 25.184799 1.000000 1.000000 1.000000 +vn 0.216987 0.976157 0.005884 +v 158.094940 -146.998871 25.068598 1.000000 1.000000 1.000000 +vn 0.050460 0.998672 0.010415 +v 158.710358 -147.090973 24.951998 1.000000 1.000000 1.000000 +vn -0.252958 0.834875 -0.488873 +v 159.975937 -147.195618 23.868998 1.000000 1.000000 1.000000 +vn -0.233580 0.942253 -0.240000 +v 159.946335 -147.047714 24.266598 1.000000 1.000000 1.000000 +vn -0.268921 0.606786 -0.747993 +v 160.027435 -147.446777 23.534397 1.000000 1.000000 1.000000 +vn -0.418098 0.794184 -0.440983 +v 160.588791 -147.000275 23.754398 1.000000 1.000000 1.000000 +vn -0.351441 0.889668 -0.291514 +v 160.541153 -146.859344 24.151798 1.000000 1.000000 1.000000 +vn -0.214366 0.975486 0.049732 +v 159.936035 -146.993301 24.721399 1.000000 1.000000 1.000000 +vn -0.524324 0.849976 0.051234 +v 161.087036 -146.528656 24.490398 1.000000 1.000000 1.000000 +vn -0.455599 0.580591 -0.674792 +v 161.291748 -146.937485 23.303398 1.000000 1.000000 1.000000 +vn -0.629077 0.667343 -0.398642 +v 161.719193 -146.337494 23.522999 1.000000 1.000000 1.000000 +vn -0.726705 0.686905 -0.007821 +v 162.077118 -145.736099 24.259399 1.000000 1.000000 1.000000 +vn -0.260107 0.063011 -0.963522 +v 161.990860 -146.736557 23.052399 1.000000 1.000000 1.000000 +vn -0.646266 0.354909 -0.675559 +v 162.827713 -145.511459 22.955799 1.000000 1.000000 1.000000 +vn -0.643800 0.518387 -0.562846 +v 162.209717 -145.884003 23.407200 1.000000 1.000000 1.000000 +vn -0.873784 0.426665 -0.233365 +v 162.834152 -144.766342 23.585800 1.000000 1.000000 1.000000 +vn -0.838068 0.545530 0.006275 +v 162.487823 -145.229599 24.142799 1.000000 1.000000 1.000000 +vn -0.488869 0.747391 0.449904 +v 161.711472 -146.326324 25.199598 1.000000 1.000000 1.000000 +vn -0.408114 0.847090 0.340412 +v 161.172012 -146.697495 25.314798 1.000000 1.000000 1.000000 +vn -0.931844 0.361384 0.032682 +v 163.060745 -144.139847 23.925398 1.000000 1.000000 1.000000 +vn -0.691339 0.651751 0.311884 +v 162.200714 -145.872849 25.083799 1.000000 1.000000 1.000000 +vn -0.820838 0.345568 -0.454761 +v 162.953888 -144.841690 23.188400 1.000000 1.000000 1.000000 +vn -0.951654 0.216743 -0.217662 +v 163.301498 -143.514725 23.354597 1.000000 1.000000 1.000000 +vn -0.886910 0.145879 -0.438303 +v 163.436691 -143.551010 22.956997 1.000000 1.000000 1.000000 +vn -0.686827 0.134872 -0.714198 +v 163.457291 -144.314255 22.738400 1.000000 1.000000 1.000000 +vn -0.906336 -0.014568 -0.422307 +v 163.547424 -142.857529 22.840599 1.000000 1.000000 1.000000 +vn -0.976359 0.216081 0.005721 +v 163.252594 -143.500778 23.809399 1.000000 1.000000 1.000000 +vn -0.997169 0.074633 0.009169 +v 163.358170 -142.836594 23.692799 1.000000 1.000000 1.000000 +vn -0.770582 -0.058770 -0.634625 +v 163.784317 -142.884033 22.505798 1.000000 1.000000 1.000000 +vn -0.291212 -0.011390 -0.956591 +v 163.349152 -145.090057 22.717800 1.000000 1.000000 1.000000 +vn -0.272535 -0.091140 -0.957819 +v 163.880875 -143.669601 22.486397 1.000000 1.000000 1.000000 +vn -0.864734 -0.193750 -0.463352 +v 163.497208 -141.470566 22.609798 1.000000 1.000000 1.000000 +vn -0.646703 -0.220702 -0.730114 +v 163.731522 -141.423126 22.275200 1.000000 1.000000 1.000000 +vn -0.229301 -0.190273 -0.954577 +v 163.947815 -141.381256 22.139198 1.000000 1.000000 1.000000 +vn -0.839691 -0.342713 -0.421269 +v 163.338837 -140.799408 22.495197 1.000000 1.000000 1.000000 +vn -0.959758 -0.170795 -0.222922 +v 163.360733 -141.497070 23.007397 1.000000 1.000000 1.000000 +vn -0.920882 -0.277161 -0.274149 +v 163.207520 -140.846848 22.892597 1.000000 1.000000 1.000000 +vn -0.635927 -0.395379 -0.662776 +v 163.305374 -140.036163 22.044197 1.000000 1.000000 1.000000 +vn -0.898033 -0.437062 0.050133 +v 162.921707 -140.242676 23.231197 1.000000 1.000000 1.000000 +vn -0.987239 -0.152141 0.047033 +v 163.310516 -141.506851 23.462200 1.000000 1.000000 1.000000 +vn 0.040149 -0.304517 -0.951661 +v 162.129898 -146.940277 23.047398 1.000000 1.000000 1.000000 +vn -0.098709 -0.294779 -0.950453 +v 160.122726 -147.926773 23.393398 1.000000 1.000000 1.000000 +vn -0.208969 -0.226716 -0.951279 +v 157.912109 -147.932358 23.740599 1.000000 1.000000 1.000000 +vn -0.277798 -0.167721 -0.945885 +v 156.522919 -147.381195 23.971798 1.000000 1.000000 1.000000 +vn -0.324525 -0.042306 -0.944931 +v 154.885254 -145.900757 24.306599 1.000000 1.000000 1.000000 +vn -0.314076 0.083920 -0.945682 +v 153.906754 -143.760300 24.652599 1.000000 1.000000 1.000000 +vn 0.215578 0.204751 -0.954779 +v 154.133362 -143.697525 24.657598 1.000000 1.000000 1.000000 +vn -0.246828 0.183765 -0.951476 +v 153.826935 -141.365921 24.999798 1.000000 1.000000 1.000000 +vn 0.265461 0.108142 -0.958037 +v 154.056107 -141.409164 25.004799 1.000000 1.000000 1.000000 +vn -0.655878 0.218449 -0.722568 +v 153.583603 -141.319870 25.150799 1.000000 1.000000 1.000000 +vn -0.189992 0.247008 -0.950205 +v 154.286560 -139.842209 25.230997 1.000000 1.000000 1.000000 +vn -0.620093 0.101892 -0.777883 +v 153.503769 -142.161255 25.034401 1.000000 1.000000 1.000000 +vn -0.690374 -0.040686 -0.722308 +v 153.668579 -143.825897 24.803598 1.000000 1.000000 1.000000 +vn 0.289979 0.029734 -0.956571 +v 154.496429 -139.953842 25.236198 1.000000 1.000000 1.000000 +vn -0.061832 0.300022 -0.951926 +v 155.595932 -138.018509 25.565798 1.000000 1.000000 1.000000 +vn 0.264086 -0.046410 -0.963382 +v 155.747864 -138.211060 25.570799 1.000000 1.000000 1.000000 +vn 0.076695 0.299112 -0.951131 +v 157.536163 -136.885498 25.911798 1.000000 1.000000 1.000000 +vn -0.353928 0.570649 -0.741009 +v 155.436279 -137.814789 25.716799 1.000000 1.000000 1.000000 +vn -0.431500 0.449122 -0.782366 +v 154.881378 -138.405014 25.600998 1.000000 1.000000 1.000000 +vn -0.564006 0.386042 -0.729979 +v 154.065125 -139.723602 25.382198 1.000000 1.000000 1.000000 +vn -0.070704 0.660907 -0.747130 +v 157.467926 -136.628754 26.062798 1.000000 1.000000 1.000000 +vn 0.191603 0.239147 -0.951891 +v 159.741623 -136.716660 26.258999 1.000000 1.000000 1.000000 +vn -0.183306 0.580057 -0.793683 +v 156.745651 -136.917587 25.948198 1.000000 1.000000 1.000000 +vn 0.091561 0.599748 -0.794933 +v 158.997467 -136.392944 26.293598 1.000000 1.000000 1.000000 +vn 0.220484 0.633505 -0.741659 +v 159.776382 -136.451553 26.409998 1.000000 1.000000 1.000000 +vn 0.264876 0.185043 -0.946361 +v 161.163010 -137.163177 26.490198 1.000000 1.000000 1.000000 +vn 0.065647 0.879392 -0.471551 +v 158.996170 -136.136200 26.637999 1.000000 1.000000 1.000000 +vn -0.062359 0.863646 -0.500227 +v 158.191498 -136.198990 26.522598 1.000000 1.000000 1.000000 +vn 0.325275 0.804124 -0.497576 +v 160.605530 -136.381775 26.870598 1.000000 1.000000 1.000000 +vn 0.197701 0.860241 -0.469999 +v 159.809860 -136.197601 26.754398 1.000000 1.000000 1.000000 +vn 0.402041 0.542694 -0.737459 +v 161.263428 -136.918991 26.641399 1.000000 1.000000 1.000000 +vn 0.464599 0.773329 -0.431405 +v 161.361282 -136.684570 26.985798 1.000000 1.000000 1.000000 +vn 0.472558 0.411565 -0.779297 +v 162.508423 -137.757584 26.860197 1.000000 1.000000 1.000000 +vn 0.329272 0.927488 -0.177047 +v 160.642868 -136.243637 27.263798 1.000000 1.000000 1.000000 +vn 0.172943 0.968178 -0.180891 +v 159.829178 -136.055283 27.147598 1.000000 1.000000 1.000000 +vn 0.023813 0.983137 -0.181315 +v 158.996170 -135.992477 27.031199 1.000000 1.000000 1.000000 +vn 0.274692 0.948466 0.157978 +v 160.645432 -136.231094 28.079199 1.000000 1.000000 1.000000 +vn 0.127623 0.979216 0.157631 +v 159.830460 -136.041321 27.963198 1.000000 1.000000 1.000000 +vn 0.406654 0.897328 0.171565 +v 161.421783 -136.540848 28.194399 1.000000 1.000000 1.000000 +vn 0.551848 0.805724 -0.215111 +v 162.062958 -136.924561 27.481199 1.000000 1.000000 1.000000 +vn 0.216707 0.852979 0.474830 +v 160.602951 -136.388763 28.547598 1.000000 1.000000 1.000000 +vn 0.061472 0.864516 0.498832 +v 159.808578 -136.203171 28.431398 1.000000 1.000000 1.000000 +vn -0.066810 0.880302 0.469685 +v 158.996170 -136.143173 28.314999 1.000000 1.000000 1.000000 +vn -0.022827 0.987139 0.158227 +v 158.996170 -135.978531 27.846598 1.000000 1.000000 1.000000 +vn 0.099899 0.646323 0.756496 +v 160.537292 -136.634338 28.885399 1.000000 1.000000 1.000000 +vn -0.124345 0.614197 0.779295 +v 158.997467 -136.399918 28.652599 1.000000 1.000000 1.000000 +vn 0.414865 0.778451 0.471065 +v 161.990860 -137.052933 28.764999 1.000000 1.000000 1.000000 +vn 0.008647 0.343700 0.939040 +v 161.169434 -137.146423 29.140999 1.000000 1.000000 1.000000 +vn -0.097129 0.344045 0.933916 +v 159.744202 -136.697128 28.909798 1.000000 1.000000 1.000000 +vn 0.261447 0.582168 0.769887 +v 161.868546 -137.272003 29.102798 1.000000 1.000000 1.000000 +vn 0.642030 0.750960 0.154453 +v 162.751755 -137.438049 28.413198 1.000000 1.000000 1.000000 +vn 0.530374 0.833310 0.155876 +v 162.070679 -136.912018 28.296598 1.000000 1.000000 1.000000 +vn 0.523491 0.666935 0.530240 +v 162.655197 -137.565018 28.881599 1.000000 1.000000 1.000000 +vn 0.672676 0.718820 -0.175515 +v 162.744034 -137.449219 27.597799 1.000000 1.000000 1.000000 +vn 0.742240 0.652387 0.153203 +v 163.354294 -138.058975 28.529198 1.000000 1.000000 1.000000 +vn 0.624319 0.627185 -0.465688 +v 162.659058 -137.559448 27.204599 1.000000 1.000000 1.000000 +vn 0.718882 0.525577 -0.454947 +v 163.246140 -138.166412 27.320599 1.000000 1.000000 1.000000 +vn 0.774113 0.411808 -0.480795 +v 163.745682 -138.851532 27.435598 1.000000 1.000000 1.000000 +vn 0.767391 0.616870 -0.174880 +v 163.345291 -138.068741 27.713598 1.000000 1.000000 1.000000 +vn 0.845341 0.505549 -0.172683 +v 163.856415 -138.770599 27.828798 1.000000 1.000000 1.000000 +vn 0.825759 0.543341 0.151339 +v 163.866714 -138.762222 28.644199 1.000000 1.000000 1.000000 +vn 0.591651 0.611714 0.525123 +v 163.242279 -138.170609 28.997398 1.000000 1.000000 1.000000 +vn 0.477887 0.423737 0.769462 +v 163.546127 -138.999420 29.450399 1.000000 1.000000 1.000000 +vn 0.721066 0.525043 0.452098 +v 163.741821 -138.855713 29.112598 1.000000 1.000000 1.000000 +vn 0.216193 0.388499 0.895728 +v 162.902390 -138.506882 29.475798 1.000000 1.000000 1.000000 +vn -0.272897 0.073435 0.959236 +v 163.789474 -140.657089 29.825598 1.000000 1.000000 1.000000 +vn -0.280667 -0.036061 0.959127 +v 162.725998 -138.681290 29.479399 1.000000 1.000000 1.000000 +vn -0.223341 0.164505 0.960759 +v 164.012192 -142.939850 30.172798 1.000000 1.000000 1.000000 +vn -0.160130 0.229272 0.960101 +v 163.663300 -144.428680 30.403999 1.000000 1.000000 1.000000 +vn -0.249576 -0.139519 0.958252 +v 161.071594 -137.382233 29.144798 1.000000 1.000000 1.000000 +vn -0.185072 -0.200414 0.962072 +v 159.710724 -136.953873 28.913399 1.000000 1.000000 1.000000 +vn -0.226767 0.236563 0.944783 +v 157.532303 -136.867355 28.562599 1.000000 1.000000 1.000000 +vn -0.301100 0.597786 0.742960 +v 157.469223 -136.634338 28.421997 1.000000 1.000000 1.000000 +vn -0.440104 0.460969 0.770595 +v 156.061996 -137.323639 28.191198 1.000000 1.000000 1.000000 +vn -0.335242 0.156919 0.928972 +v 155.585632 -138.004547 28.216599 1.000000 1.000000 1.000000 +vn -0.200532 0.844480 0.496628 +v 158.191498 -136.204575 28.199598 1.000000 1.000000 1.000000 +vn -0.327024 0.822835 0.464755 +v 157.403564 -136.388763 28.084198 1.000000 1.000000 1.000000 +vn -0.442229 0.750071 0.491759 +v 156.651672 -136.690155 27.969599 1.000000 1.000000 1.000000 +vn -0.171785 0.972538 0.157035 +v 158.170898 -136.042709 27.731199 1.000000 1.000000 1.000000 +vn -0.316265 0.935519 0.157415 +v 157.361069 -136.231094 27.615999 1.000000 1.000000 1.000000 +vn -0.451778 0.878264 0.156682 +v 156.588577 -136.539459 27.501198 1.000000 1.000000 1.000000 +vn -0.552200 0.695922 0.459094 +v 155.935822 -137.107361 27.853399 1.000000 1.000000 1.000000 +vn -0.270502 0.945630 -0.180587 +v 157.364929 -136.243637 26.800398 1.000000 1.000000 1.000000 +vn -0.409433 0.894420 -0.179936 +v 156.593735 -136.552017 26.685799 1.000000 1.000000 1.000000 +vn -0.124645 0.975485 -0.181365 +v 158.172180 -136.056671 26.915798 1.000000 1.000000 1.000000 +vn -0.200731 0.859226 -0.470572 +v 157.402267 -136.381775 26.407398 1.000000 1.000000 1.000000 +vn -0.327691 0.820174 -0.468971 +v 156.649094 -136.683182 26.292599 1.000000 1.000000 1.000000 +vn -0.535615 0.825418 -0.178329 +v 155.861160 -136.980377 26.569599 1.000000 1.000000 1.000000 +vn -0.434247 0.752810 -0.494678 +v 155.931961 -137.101776 26.176399 1.000000 1.000000 1.000000 +vn -0.649320 0.739695 -0.176733 +v 155.196808 -137.509216 26.454399 1.000000 1.000000 1.000000 +vn -0.553483 0.693129 -0.461767 +v 155.283081 -137.619446 26.061398 1.000000 1.000000 1.000000 +vn -0.575056 0.803402 0.154453 +v 155.854721 -136.967819 27.384998 1.000000 1.000000 1.000000 +vn -0.747565 0.640849 -0.174526 +v 154.604568 -138.139908 26.338598 1.000000 1.000000 1.000000 +vn -0.684240 0.713183 0.152270 +v 155.189102 -137.499451 27.269999 1.000000 1.000000 1.000000 +vn -0.654247 0.596738 -0.464613 +v 154.703720 -138.234787 25.945398 1.000000 1.000000 1.000000 +vn -0.826544 0.521767 -0.211151 +v 154.097305 -138.858490 26.221998 1.000000 1.000000 1.000000 +vn -0.793700 0.441780 -0.418176 +v 153.852692 -139.610580 25.726599 1.000000 1.000000 1.000000 +vn -0.777702 0.610399 0.150309 +v 154.594269 -138.130142 27.153999 1.000000 1.000000 1.000000 +vn -0.852808 0.500435 0.149275 +v 154.087006 -138.850128 27.037399 1.000000 1.000000 1.000000 +vn -0.933636 0.316464 -0.167852 +v 153.421387 -140.375229 26.004599 1.000000 1.000000 1.000000 +vn -0.908516 0.384956 0.162502 +v 153.722656 -139.540817 26.935198 1.000000 1.000000 1.000000 +vn -0.820268 0.312890 -0.478811 +v 153.547562 -140.419876 25.611399 1.000000 1.000000 1.000000 +vn -0.968884 0.179952 -0.169942 +v 153.219254 -141.250107 25.888399 1.000000 1.000000 1.000000 +vn -0.951798 0.268697 0.147927 +v 153.409790 -140.371033 26.819998 1.000000 1.000000 1.000000 +vn -0.798264 0.395782 0.454017 +v 154.213181 -138.940826 27.505798 1.000000 1.000000 1.000000 +vn -0.866286 0.217351 0.449785 +v 153.553986 -140.421280 27.288399 1.000000 1.000000 1.000000 +vn -0.669315 0.107276 0.735193 +v 153.778015 -140.500809 27.626198 1.000000 1.000000 1.000000 +vn -0.610804 0.242390 0.753767 +v 154.411453 -139.081757 27.843599 1.000000 1.000000 1.000000 +vn -0.727932 0.515587 0.451979 +v 154.707581 -138.238968 27.622398 1.000000 1.000000 1.000000 +vn -0.877102 0.080314 0.473541 +v 153.355713 -141.275223 27.172199 1.000000 1.000000 1.000000 +vn -0.979048 0.140749 0.147158 +v 153.206375 -141.247299 26.703999 1.000000 1.000000 1.000000 +vn -0.642112 -0.093089 0.760938 +v 153.508926 -142.162659 27.393398 1.000000 1.000000 1.000000 +vn -0.896017 -0.030133 0.442996 +v 153.272034 -142.154282 27.055798 1.000000 1.000000 1.000000 +vn -0.989017 0.011433 0.147360 +v 153.120117 -142.148697 26.587399 1.000000 1.000000 1.000000 +vn -0.868032 -0.148261 0.473855 +v 153.301636 -143.027756 26.940399 1.000000 1.000000 1.000000 +vn -0.638464 -0.251596 0.727367 +v 153.673721 -143.824493 27.162798 1.000000 1.000000 1.000000 +vn -0.366352 -0.078311 0.927175 +v 153.808914 -141.363113 27.650398 1.000000 1.000000 1.000000 +vn -0.982148 -0.117028 0.147274 +v 153.151016 -143.044495 26.471998 1.000000 1.000000 1.000000 +vn -0.857170 -0.260251 0.444442 +v 153.444550 -143.887283 26.824999 1.000000 1.000000 1.000000 +vn -0.958227 -0.244556 0.148302 +v 153.297775 -143.927750 26.356798 1.000000 1.000000 1.000000 +vn -0.797421 -0.369363 0.477170 +v 153.695618 -144.713318 26.710398 1.000000 1.000000 1.000000 +vn -0.917533 -0.368924 0.148421 +v 153.556564 -144.774719 26.241999 1.000000 1.000000 1.000000 +vn -0.984067 0.051822 -0.170078 +v 153.132980 -142.148697 25.771999 1.000000 1.000000 1.000000 +vn -0.982591 -0.075724 -0.169647 +v 153.163879 -143.043106 25.656601 1.000000 1.000000 1.000000 +vn -0.872180 0.200468 -0.446223 +v 153.350571 -141.275223 25.495199 1.000000 1.000000 1.000000 +vn -0.890886 0.085730 -0.446062 +v 153.266876 -142.152878 25.378798 1.000000 1.000000 1.000000 +vn -0.879602 -0.025046 -0.475050 +v 153.296494 -143.027756 25.263399 1.000000 1.000000 1.000000 +vn -0.964238 -0.204057 -0.169133 +v 153.309372 -143.924957 25.541199 1.000000 1.000000 1.000000 +vn -0.883091 -0.147009 -0.445577 +v 153.438126 -143.888687 25.148199 1.000000 1.000000 1.000000 +vn -0.928824 -0.329364 -0.169720 +v 153.568146 -144.770523 25.426598 1.000000 1.000000 1.000000 +vn -0.855361 -0.261227 -0.447345 +v 153.690460 -144.714706 25.033398 1.000000 1.000000 1.000000 +vn -0.613007 -0.142341 -0.777150 +v 153.910614 -144.618439 24.688999 1.000000 1.000000 1.000000 +vn -0.800615 -0.360491 -0.478604 +v 154.052246 -145.505875 24.917198 1.000000 1.000000 1.000000 +vn -0.616785 -0.302148 -0.726831 +v 154.692123 -146.066788 24.457598 1.000000 1.000000 1.000000 +vn -0.365657 0.017648 0.930582 +v 154.271118 -139.833847 27.881798 1.000000 1.000000 1.000000 +vn -0.564617 0.318416 0.761459 +v 154.885254 -138.409195 27.959999 1.000000 1.000000 1.000000 +vn -0.639578 0.596980 0.484309 +v 155.286942 -137.623642 27.738199 1.000000 1.000000 1.000000 +vn -0.827191 0.390283 0.404270 +v 163.224258 -144.212387 24.749798 1.000000 1.000000 1.000000 +vn -0.721767 0.530123 0.444997 +v 162.942307 -144.834717 24.864998 1.000000 1.000000 1.000000 +vn -0.326057 0.602225 0.728705 +v 161.851807 -146.531433 25.547199 1.000000 1.000000 1.000000 +vn -0.518638 0.446825 0.728946 +v 163.147018 -144.961685 25.212599 1.000000 1.000000 1.000000 +vn 0.110232 0.242910 0.963766 +v 160.076370 -147.690964 26.047998 1.000000 1.000000 1.000000 +vn -0.007175 0.266233 0.963882 +v 161.998581 -146.746323 25.701799 1.000000 1.000000 1.000000 +vn -0.029610 0.679797 0.732802 +v 160.023575 -147.430038 25.893398 1.000000 1.000000 1.000000 +vn -0.291960 0.881800 0.370390 +v 160.584915 -146.986328 25.430998 1.000000 1.000000 1.000000 +vn 0.030788 0.928726 0.369487 +v 159.339935 -147.279343 25.660999 1.000000 1.000000 1.000000 +vn -0.140198 0.892897 0.427878 +v 159.973373 -147.180283 25.545597 1.000000 1.000000 1.000000 +vn 0.257725 0.627766 0.734499 +v 158.008667 -147.435623 26.240398 1.000000 1.000000 1.000000 +vn 0.099316 0.933900 0.343463 +v 158.698761 -147.282135 25.776398 1.000000 1.000000 1.000000 +vn 0.290536 0.843924 0.450978 +v 158.058884 -147.185852 25.892799 1.000000 1.000000 1.000000 +vn 0.409840 0.808608 0.422119 +v 157.438309 -146.993301 26.008999 1.000000 1.000000 1.000000 +vn 0.558559 0.695607 0.451822 +v 156.855087 -146.708649 26.124199 1.000000 1.000000 1.000000 +vn 0.467480 0.496653 0.731299 +v 156.743088 -146.934692 26.471798 1.000000 1.000000 1.000000 +vn 0.681155 0.662624 0.311380 +v 155.871460 -145.941223 26.342999 1.000000 1.000000 1.000000 +vn 0.578748 0.815477 0.006896 +v 156.473999 -146.228653 25.401999 1.000000 1.000000 1.000000 +vn 0.626735 0.313994 0.713170 +v 155.252182 -145.585403 26.806398 1.000000 1.000000 1.000000 +vn 0.771276 0.462747 0.437034 +v 155.436279 -145.426331 26.458799 1.000000 1.000000 1.000000 +vn 0.862862 0.387922 0.324015 +v 155.075790 -144.854248 26.573999 1.000000 1.000000 1.000000 +vn 0.283224 0.018811 0.958869 +v 155.059052 -145.751450 26.960999 1.000000 1.000000 1.000000 +vn 0.718861 0.695099 -0.008680 +v 155.992477 -145.801682 25.518599 1.000000 1.000000 1.000000 +vn 0.867897 0.494231 0.049908 +v 155.229004 -144.757980 25.749598 1.000000 1.000000 1.000000 +vn 0.892737 0.283172 0.350478 +v 154.789963 -144.227737 26.690199 1.000000 1.000000 1.000000 +vn 0.814836 0.396556 -0.422830 +v 154.777100 -144.233337 25.013599 1.000000 1.000000 1.000000 +vn 0.630911 0.261677 -0.730395 +v 154.345795 -143.640305 24.793598 1.000000 1.000000 1.000000 +vn 0.849769 0.248558 -0.464878 +v 154.576248 -143.576126 25.128199 1.000000 1.000000 1.000000 +vn 0.765378 0.107254 -0.634581 +v 154.201584 -142.186371 25.024199 1.000000 1.000000 1.000000 +vn 0.259301 0.123667 0.957846 +v 156.627213 -147.169113 26.626398 1.000000 1.000000 1.000000 +vn 0.198714 0.186750 0.962101 +v 157.958466 -147.697937 26.394999 1.000000 1.000000 1.000000 +vn -0.651144 0.252045 0.715880 +v 163.652985 -143.608215 24.981199 1.000000 1.000000 1.000000 +vn -0.124133 0.247468 0.960912 +v 163.359451 -145.097031 25.367199 1.000000 1.000000 1.000000 +vn -0.857284 0.282772 0.430237 +v 163.423813 -143.546814 24.633598 1.000000 1.000000 1.000000 +vn -0.940604 0.114157 0.319737 +v 163.534546 -142.856140 24.517199 1.000000 1.000000 1.000000 +vn -0.937425 0.057225 0.343452 +v 163.553848 -142.162659 24.401798 1.000000 1.000000 1.000000 +vn -0.911079 -0.092933 0.401621 +v 163.484329 -141.473358 24.286398 1.000000 1.000000 1.000000 +vn -0.707110 -0.003095 0.707097 +v 163.716080 -141.427307 24.634199 1.000000 1.000000 1.000000 +vn -0.909679 -0.225719 0.348619 +v 163.325974 -140.803604 24.171799 1.000000 1.000000 1.000000 +vn -0.886487 -0.331972 0.322391 +v 163.080063 -140.157547 24.055599 1.000000 1.000000 1.000000 +vn -0.646797 -0.273151 0.712069 +v 162.950027 -139.415237 24.287998 1.000000 1.000000 1.000000 +vn -0.259248 0.107650 0.959793 +v 163.959412 -141.378464 24.788799 1.000000 1.000000 1.000000 +vn -0.284216 -0.000984 0.958760 +v 163.153442 -139.264542 24.442598 1.000000 1.000000 1.000000 +vn -0.197484 0.191633 0.961393 +v 163.892456 -143.672409 25.135799 1.000000 1.000000 1.000000 +vn 0.774693 0.412922 0.478902 +v 164.169266 -139.658020 39.532341 1.000000 1.000000 1.000000 +vn 0.942904 0.298001 0.148753 +v 164.612167 -140.419876 39.179539 1.000000 1.000000 1.000000 +vn 0.895214 0.419822 0.149471 +v 164.305740 -139.586868 39.064140 1.000000 1.000000 1.000000 +vn 0.575883 0.287670 0.765248 +v 164.242661 -140.548248 39.985538 1.000000 1.000000 1.000000 +vn 0.840431 0.308271 0.445696 +v 164.467972 -140.470108 39.647739 1.000000 1.000000 1.000000 +vn 0.974082 0.170894 0.148188 +v 164.809158 -141.300339 39.295921 1.000000 1.000000 1.000000 +vn 0.858066 0.195760 0.474765 +v 164.659805 -141.328247 39.764320 1.000000 1.000000 1.000000 +vn 0.668483 0.105400 0.736221 +v 164.501434 -142.211487 40.218117 1.000000 1.000000 1.000000 +vn 0.318544 0.187328 0.929214 +v 164.206604 -141.410568 40.242519 1.000000 1.000000 1.000000 +vn 0.988336 0.041182 0.146613 +v 164.888977 -142.200333 39.412117 1.000000 1.000000 1.000000 +vn 0.891383 0.063921 0.448720 +v 164.738342 -142.204514 39.880318 1.000000 1.000000 1.000000 +vn 0.885321 -0.124307 0.448057 +v 164.573532 -143.838440 40.097717 1.000000 1.000000 1.000000 +vn 0.350082 0.096850 0.931699 +v 164.242661 -143.019394 40.473919 1.000000 1.000000 1.000000 +vn 0.658680 -0.044743 0.751092 +v 164.344376 -143.778442 40.435516 1.000000 1.000000 1.000000 +vn 0.983639 -0.080901 0.160963 +v 164.850342 -143.094742 39.527336 1.000000 1.000000 1.000000 +vn 0.967897 -0.203656 0.147309 +v 164.720322 -143.877518 39.629517 1.000000 1.000000 1.000000 +vn 0.844307 -0.247032 0.475522 +v 164.323776 -144.679840 40.214317 1.000000 1.000000 1.000000 +vn 0.933438 -0.326692 0.148212 +v 164.465393 -144.741226 39.746117 1.000000 1.000000 1.000000 +vn 0.336832 -0.022663 0.941292 +v 163.570587 -145.219818 40.808517 1.000000 1.000000 1.000000 +vn 0.646850 -0.232381 0.726350 +v 163.763718 -145.341217 40.667919 1.000000 1.000000 1.000000 +vn 0.880923 -0.449298 0.148680 +v 164.099747 -145.551926 39.861919 1.000000 1.000000 1.000000 +vn 0.815319 -0.368228 0.446837 +v 163.969711 -145.469589 40.330318 1.000000 1.000000 1.000000 +vn 0.915643 -0.364171 -0.170226 +v 164.452515 -144.735641 38.930519 1.000000 1.000000 1.000000 +vn 0.950407 -0.231744 -0.207417 +v 164.708725 -143.874725 38.813919 1.000000 1.000000 1.000000 +vn 0.857951 -0.483749 -0.172936 +v 164.089447 -145.544937 39.046516 1.000000 1.000000 1.000000 +vn 0.756311 -0.472017 -0.452982 +v 163.973572 -145.472382 38.653320 1.000000 1.000000 1.000000 +vn 0.817013 -0.353319 -0.455692 +v 164.330200 -144.682632 38.537518 1.000000 1.000000 1.000000 +vn 0.811908 -0.564228 0.149837 +v 163.636246 -146.292847 39.977119 1.000000 1.000000 1.000000 +vn 0.746461 -0.461451 0.479435 +v 163.517807 -146.192383 40.445320 1.000000 1.000000 1.000000 +vn 0.692975 -0.699211 -0.175753 +v 163.068466 -146.954224 39.277718 1.000000 1.000000 1.000000 +vn 0.783616 -0.596440 -0.173800 +v 163.627243 -146.284470 39.161518 1.000000 1.000000 1.000000 +vn 0.725966 -0.670672 0.152228 +v 163.077484 -146.963989 40.093338 1.000000 1.000000 1.000000 +vn 0.667553 -0.563223 -0.486984 +v 163.521667 -146.196564 38.768517 1.000000 1.000000 1.000000 +vn 0.541207 -0.418240 -0.729500 +v 163.768860 -145.344009 38.308918 1.000000 1.000000 1.000000 +vn 0.595308 -0.658204 -0.460842 +v 162.977066 -146.849579 38.884720 1.000000 1.000000 1.000000 +vn 0.394697 -0.538597 -0.744397 +v 162.812271 -146.664001 38.540119 1.000000 1.000000 1.000000 +vn 0.480738 -0.724907 -0.493357 +v 162.360367 -147.407700 38.999321 1.000000 1.000000 1.000000 +vn -0.059377 -0.306042 -0.950164 +v 160.766464 -147.727249 38.735321 1.000000 1.000000 1.000000 +vn 0.219525 -0.567021 -0.793912 +v 161.563416 -147.639328 38.770119 1.000000 1.000000 1.000000 +vn 0.586115 -0.790684 -0.176883 +v 162.437607 -147.523514 39.392540 1.000000 1.000000 1.000000 +vn 0.378838 -0.798292 -0.468201 +v 161.674133 -147.866776 39.114719 1.000000 1.000000 1.000000 +vn 0.110291 -0.654880 -0.747642 +v 160.848862 -147.979797 38.886520 1.000000 1.000000 1.000000 +vn -0.180745 -0.255284 -0.949822 +v 158.254578 -147.997940 39.119919 1.000000 1.000000 1.000000 +vn 0.117305 -0.857061 -0.501683 +v 160.140747 -148.457001 39.346321 1.000000 1.000000 1.000000 +vn -0.064401 -0.585325 -0.808237 +v 159.311600 -148.314682 39.115921 1.000000 1.000000 1.000000 +vn 0.255254 -0.844856 -0.470174 +v 160.927399 -148.221191 39.230919 1.000000 1.000000 1.000000 +vn 0.464809 -0.866817 -0.180502 +v 161.735931 -147.995148 39.507736 1.000000 1.000000 1.000000 +vn 0.329596 -0.926522 -0.181447 +v 160.972458 -148.357925 39.624119 1.000000 1.000000 1.000000 +vn -0.013220 -0.886235 -0.463046 +v 159.325775 -148.571411 39.460518 1.000000 1.000000 1.000000 +vn 0.185693 -0.965258 -0.183832 +v 160.167786 -148.599335 39.739319 1.000000 1.000000 1.000000 +vn -0.212069 -0.637597 -0.740605 +v 158.219818 -148.261658 39.271118 1.000000 1.000000 1.000000 +vn -0.229145 -0.231998 -0.945341 +v 156.806168 -147.534683 39.337540 1.000000 1.000000 1.000000 +vn -0.464187 -0.477012 -0.746318 +v 156.013077 -147.365845 39.593338 1.000000 1.000000 1.000000 +vn -0.189786 -0.859369 -0.474833 +v 158.185059 -148.515610 39.615517 1.000000 1.000000 1.000000 +vn -0.336945 -0.775316 -0.534184 +v 157.377808 -148.325836 39.725338 1.000000 1.000000 1.000000 +vn -0.048323 -0.974981 -0.216972 +v 159.002609 -148.724899 39.897720 1.000000 1.000000 1.000000 +vn -0.174686 -0.967811 -0.181179 +v 158.167038 -148.659332 40.008720 1.000000 1.000000 1.000000 +vn -0.320331 -0.930180 -0.179312 +v 157.340469 -148.463974 40.118519 1.000000 1.000000 1.000000 +vn -0.420487 -0.733003 -0.534693 +v 156.604034 -148.011902 39.832939 1.000000 1.000000 1.000000 +vn -0.128740 -0.978963 0.158297 +v 158.164459 -148.671890 40.824120 1.000000 1.000000 1.000000 +vn 0.081947 -0.996566 -0.011909 +v 159.336075 -148.765366 40.259117 1.000000 1.000000 1.000000 +vn -0.069018 -0.863370 0.499828 +v 158.186340 -148.510025 41.292519 1.000000 1.000000 1.000000 +vn 0.066860 -0.883579 0.463485 +v 159.002609 -148.574219 41.181519 1.000000 1.000000 1.000000 +vn -0.280904 -0.946649 0.157950 +v 157.336609 -148.476547 40.933918 1.000000 1.000000 1.000000 +vn 0.090374 -0.974780 0.204050 +v 159.333481 -148.729095 40.669121 1.000000 1.000000 1.000000 +vn 0.242691 -0.848379 0.470482 +v 160.139465 -148.451416 41.023319 1.000000 1.000000 1.000000 +vn 0.231401 -0.959968 0.157846 +v 160.170349 -148.611893 40.554916 1.000000 1.000000 1.000000 +vn 0.100569 -0.659854 0.744633 +v 159.002609 -148.317459 41.519318 1.000000 1.000000 1.000000 +vn 0.249437 -0.579123 0.776143 +v 160.093109 -148.200256 41.360916 1.000000 1.000000 1.000000 +vn 0.375256 -0.783838 0.494754 +v 160.926102 -148.215607 40.907921 1.000000 1.000000 1.000000 +vn 0.373711 -0.914188 0.156848 +v 160.976318 -148.370483 40.439518 1.000000 1.000000 1.000000 +vn 0.492274 -0.737424 0.462463 +v 161.671555 -147.861191 40.791718 1.000000 1.000000 1.000000 +vn 0.421264 -0.525298 0.739323 +v 161.560837 -147.633759 41.129318 1.000000 1.000000 1.000000 +vn 0.169011 -0.273574 0.946886 +v 159.300018 -148.066299 41.615719 1.000000 1.000000 1.000000 +vn 0.273216 -0.192318 0.942532 +v 161.456543 -147.420273 41.269920 1.000000 1.000000 1.000000 +vn 0.588758 -0.645231 0.486868 +v 162.356491 -147.402130 40.676319 1.000000 1.000000 1.000000 +vn 0.557089 -0.392443 0.731874 +v 162.808411 -146.659821 40.899319 1.000000 1.000000 1.000000 +vn 0.319374 -0.110427 0.941173 +v 162.653900 -146.485397 41.039917 1.000000 1.000000 1.000000 +vn 0.506119 -0.848293 0.155703 +v 161.742371 -148.007706 40.323318 1.000000 1.000000 1.000000 +vn 0.624268 -0.766036 0.153224 +v 162.445328 -147.534683 40.207916 1.000000 1.000000 1.000000 +vn 0.682947 -0.572327 0.453900 +v 162.971909 -146.845383 40.561520 1.000000 1.000000 1.000000 +vn -0.043532 0.269672 0.961968 +v 162.489105 -146.298416 41.043716 1.000000 1.000000 1.000000 +vn 0.077483 0.244216 0.966620 +v 160.691788 -147.501190 41.389919 1.000000 1.000000 1.000000 +vn 0.182783 0.207678 0.960968 +v 158.285492 -147.759338 41.774536 1.000000 1.000000 1.000000 +vn 0.226939 0.134319 0.964602 +v 156.898865 -147.317017 41.991920 1.000000 1.000000 1.000000 +vn 0.079443 -0.343914 0.935635 +v 158.252014 -148.016083 41.770737 1.000000 1.000000 1.000000 +vn -0.096298 -0.353762 0.930365 +v 156.137970 -147.156540 42.093117 1.000000 1.000000 1.000000 +vn 0.264541 0.081262 0.960945 +v 155.568893 -146.348648 42.222919 1.000000 1.000000 1.000000 +vn -0.125229 -0.279206 0.952030 +v 155.405396 -146.537018 42.219116 1.000000 1.000000 1.000000 +vn 0.262558 -0.004796 0.964904 +v 154.662506 -145.124954 42.422718 1.000000 1.000000 1.000000 +vn 0.557235 0.398166 0.728665 +v 155.736267 -146.153305 42.068336 1.000000 1.000000 1.000000 +vn -0.273461 -0.218976 0.936626 +v 154.121765 -144.522156 42.514919 1.000000 1.000000 1.000000 +vn -0.237846 -0.119345 0.963943 +v 153.732941 -142.111023 42.791538 1.000000 1.000000 1.000000 +vn 0.650551 0.242171 0.719817 +v 154.874939 -144.989609 42.268120 1.000000 1.000000 1.000000 +vn 0.196938 -0.149509 0.968949 +v 154.056107 -141.342194 42.883339 1.000000 1.000000 1.000000 +vn -0.355058 0.013081 0.934753 +v 154.014908 -140.504990 42.964737 1.000000 1.000000 1.000000 +vn 0.847933 0.186425 0.496241 +v 154.358658 -143.620773 42.457336 1.000000 1.000000 1.000000 +vn 0.108558 -0.188349 0.976084 +v 155.213547 -138.766403 43.189739 1.000000 1.000000 1.000000 +vn -0.339008 0.265321 0.902595 +v 155.302383 -138.130142 43.189739 1.000000 1.000000 1.000000 +vn -0.281554 0.385380 0.878754 +v 156.275726 -137.143631 43.189739 1.000000 1.000000 1.000000 +vn 0.203704 -0.391340 0.897417 +v 156.551254 -137.916656 43.189739 1.000000 1.000000 1.000000 +vn -0.199986 0.564219 0.801038 +v 157.364929 -136.476654 43.187340 1.000000 1.000000 1.000000 +vn 0.082477 -0.519909 0.850231 +v 158.020264 -137.435257 43.189739 1.000000 1.000000 1.000000 +vn 0.088964 0.622196 0.777790 +v 159.784119 -136.162720 43.189938 1.000000 1.000000 1.000000 +vn -0.040308 -0.547958 0.835534 +v 159.037369 -137.371063 43.189739 1.000000 1.000000 1.000000 +vn 0.356251 0.563225 0.745562 +v 162.083557 -137.012466 43.189720 1.000000 1.000000 1.000000 +vn -0.266363 -0.539970 0.798425 +v 160.819244 -137.895721 43.187317 1.000000 1.000000 1.000000 +vn -0.440879 -0.407988 0.799482 +v 162.089996 -138.847336 43.189140 1.000000 1.000000 1.000000 +vn 0.587392 0.426234 0.687964 +v 163.680038 -138.413391 43.189720 1.000000 1.000000 1.000000 +vn -0.564000 -0.121477 0.816791 +v 163.341431 -141.243118 43.189720 1.000000 1.000000 1.000000 +vn 0.741347 0.084219 0.665816 +v 164.892838 -141.600327 43.188519 1.000000 1.000000 1.000000 +vn -0.701418 0.095448 0.706330 +v 163.342712 -143.034744 43.187920 1.000000 1.000000 1.000000 +vn 0.738298 -0.136210 0.660577 +v 164.823318 -143.597061 43.188919 1.000000 1.000000 1.000000 +vn -0.648019 0.286195 0.705808 +v 162.901108 -144.566818 43.188721 1.000000 1.000000 1.000000 +vn 0.669094 -0.383683 0.636475 +v 164.074005 -145.751450 43.189720 1.000000 1.000000 1.000000 +vn -0.497047 0.499887 0.709266 +v 161.992142 -145.835175 43.189320 1.000000 1.000000 1.000000 +vn 0.521474 -0.617209 0.589167 +v 162.642319 -147.476089 43.185516 1.000000 1.000000 1.000000 +vn -0.769787 0.318281 0.553287 +v 160.515411 -146.828644 43.189537 1.000000 1.000000 1.000000 +vn -0.281072 -0.791290 0.543009 +v 161.045837 -148.397003 43.189720 1.000000 1.000000 1.000000 +vn 0.879710 0.260220 0.397990 +v 154.789963 -144.226349 42.016541 1.000000 1.000000 1.000000 +vn 0.816899 0.412987 0.402639 +v 155.078369 -144.859833 41.920517 1.000000 1.000000 1.000000 +vn 0.900336 0.162496 0.403720 +v 154.587845 -143.559387 42.109737 1.000000 1.000000 1.000000 +vn 0.879236 0.472971 0.056938 +v 155.230286 -144.763550 41.096336 1.000000 1.000000 1.000000 +vn 0.918052 0.022255 0.395834 +v 154.473251 -142.857529 42.202538 1.000000 1.000000 1.000000 +vn 0.830387 -0.053525 0.554610 +v 154.218323 -142.133347 42.640739 1.000000 1.000000 1.000000 +vn 0.965664 0.255490 0.047089 +v 154.759079 -143.511932 41.285339 1.000000 1.000000 1.000000 +vn 0.896245 -0.097497 0.432711 +v 154.453949 -142.144516 42.293137 1.000000 1.000000 1.000000 +vn 0.874106 -0.238557 0.423119 +v 154.529907 -141.439865 42.381138 1.000000 1.000000 1.000000 +vn 0.718816 -0.341846 0.605347 +v 154.474548 -140.675232 42.813938 1.000000 1.000000 1.000000 +vn 0.994845 0.101323 0.004010 +v 154.649628 -142.837997 41.378139 1.000000 1.000000 1.000000 +vn 0.827876 -0.410861 0.381857 +v 154.935455 -140.143600 42.544937 1.000000 1.000000 1.000000 +vn 0.999239 -0.039000 0.000200 +v 154.630325 -142.152878 41.468739 1.000000 1.000000 1.000000 +vn 0.956234 0.002244 -0.292594 +v 154.578827 -142.151489 41.013939 1.000000 1.000000 1.000000 +vn 0.966713 0.075014 -0.244619 +v 154.598145 -142.843582 40.923340 1.000000 1.000000 1.000000 +vn 0.982655 -0.153671 -0.103798 +v 154.703720 -141.474747 41.556938 1.000000 1.000000 1.000000 +vn 0.867179 -0.244468 -0.433861 +v 154.684387 -140.753357 40.789738 1.000000 1.000000 1.000000 +vn 0.895226 0.164738 -0.414044 +v 154.460373 -142.858932 40.525940 1.000000 1.000000 1.000000 +vn 0.536524 0.699107 -0.472643 +v 154.202881 -142.133347 40.281738 1.000000 1.000000 1.000000 +vn 0.779157 0.323552 -0.536870 +v 154.777100 -144.231918 40.339939 1.000000 1.000000 1.000000 +vn 0.834843 0.496949 -0.236812 +v 155.186523 -144.791458 40.641541 1.000000 1.000000 1.000000 +vn 0.721646 0.229480 -0.653120 +v 154.344498 -143.624954 40.098339 1.000000 1.000000 1.000000 +vn 0.338816 0.137943 -0.930685 +v 153.984009 -142.123581 40.145939 1.000000 1.000000 1.000000 +vn 0.183474 0.182935 -0.965853 +v 154.353516 -144.420303 39.869339 1.000000 1.000000 1.000000 +vn 0.849528 -0.479179 -0.220656 +v 155.375778 -139.607788 41.348339 1.000000 1.000000 1.000000 +vn 0.784724 -0.432430 -0.444086 +v 155.261200 -139.521286 40.950737 1.000000 1.000000 1.000000 +vn 0.753069 -0.618577 -0.224164 +v 155.778763 -139.069199 41.428539 1.000000 1.000000 1.000000 +vn 0.835636 -0.549281 0.001482 +v 155.416977 -139.639893 41.803139 1.000000 1.000000 1.000000 +vn 0.910091 -0.380385 0.164443 +v 155.093811 -140.230118 41.720539 1.000000 1.000000 1.000000 +vn 0.643886 -0.159752 -0.748258 +v 154.710144 -140.022202 40.533539 1.000000 1.000000 1.000000 +vn -0.103174 0.177168 -0.978758 +v 154.695984 -139.092911 40.475140 1.000000 1.000000 1.000000 +vn -0.103728 0.246367 -0.963610 +v 155.732407 -137.897125 40.633141 1.000000 1.000000 1.000000 +vn 0.528370 -0.326867 -0.783571 +v 155.503235 -138.788742 40.696339 1.000000 1.000000 1.000000 +vn 0.137713 -0.115954 -0.983661 +v 155.877899 -138.095261 40.638336 1.000000 1.000000 1.000000 +vn 0.336800 -0.562178 -0.755329 +v 157.202713 -137.532928 40.921940 1.000000 1.000000 1.000000 +vn 0.608713 -0.686137 -0.398352 +v 156.162430 -138.483154 41.108940 1.000000 1.000000 1.000000 +vn 0.398174 -0.778002 -0.485974 +v 157.291550 -137.771530 41.256737 1.000000 1.000000 1.000000 +vn 0.627435 -0.742530 -0.234468 +v 156.248688 -138.600357 41.506340 1.000000 1.000000 1.000000 +vn 0.224624 -0.248381 -0.942258 +v 157.120316 -137.312469 40.785938 1.000000 1.000000 1.000000 +vn 0.176174 -0.733016 -0.657001 +v 158.553284 -137.172928 41.063740 1.000000 1.000000 1.000000 +vn 0.002819 0.315382 -0.948961 +v 157.760193 -136.824097 40.852940 1.000000 1.000000 1.000000 +vn 0.079083 -0.227198 -0.970632 +v 159.258820 -136.918991 40.995537 1.000000 1.000000 1.000000 +vn -0.069925 -0.664979 -0.743581 +v 159.919296 -137.245499 41.194939 1.000000 1.000000 1.000000 +vn -0.021617 -0.883084 -0.468716 +v 159.235641 -137.414337 41.466141 1.000000 1.000000 1.000000 +vn 0.158174 -0.868765 -0.469285 +v 158.575165 -137.429672 41.398537 1.000000 1.000000 1.000000 +vn -0.003374 -0.236190 -0.971701 +v 160.663467 -137.217590 41.122337 1.000000 1.000000 1.000000 +vn -0.340498 -0.658535 -0.671114 +v 161.231247 -137.742233 41.319340 1.000000 1.000000 1.000000 +vn 0.251648 0.136605 -0.958130 +v 162.675797 -138.279434 41.294540 1.000000 1.000000 1.000000 +vn -0.084184 -0.193486 -0.977485 +v 162.513565 -138.459442 41.299538 1.000000 1.000000 1.000000 +vn -0.592657 -0.461807 -0.659918 +v 162.810974 -139.178040 41.488541 1.000000 1.000000 1.000000 +vn 0.195059 -0.011928 -0.980719 +v 164.138367 -141.125916 41.499920 1.000000 1.000000 1.000000 +vn -0.553598 -0.277245 -0.785280 +v 163.493347 -140.498016 41.592140 1.000000 1.000000 1.000000 +vn -0.774220 -0.450193 -0.444869 +v 162.988647 -139.937088 41.876137 1.000000 1.000000 1.000000 +vn -0.648486 -0.651997 -0.392895 +v 162.194275 -138.815247 41.770119 1.000000 1.000000 1.000000 +vn -0.909755 -0.379433 -0.168453 +v 163.140564 -140.644516 42.324341 1.000000 1.000000 1.000000 +vn -0.842799 -0.491028 -0.220412 +v 162.866333 -140.009659 42.273537 1.000000 1.000000 1.000000 +vn -0.614394 -0.787928 -0.041101 +v 161.573715 -138.516647 42.565536 1.000000 1.000000 1.000000 +vn -0.590814 -0.771940 -0.234623 +v 161.603317 -138.471985 42.110741 1.000000 1.000000 1.000000 +vn -0.558413 -0.738722 -0.377446 +v 161.684433 -138.350601 41.713341 1.000000 1.000000 1.000000 +vn -0.267938 -0.839082 -0.473445 +v 160.512817 -137.685028 41.592937 1.000000 1.000000 1.000000 +vn -0.484400 -0.874819 -0.006937 +v 161.032959 -138.153854 42.506340 1.000000 1.000000 1.000000 +vn -0.314585 -0.916108 -0.248560 +v 160.466476 -137.827347 41.990318 1.000000 1.000000 1.000000 +vn -0.192906 -0.981024 0.019457 +v 159.836899 -137.700363 42.381939 1.000000 1.000000 1.000000 +vn -0.053764 -0.963875 -0.260872 +v 159.227921 -137.565018 41.863739 1.000000 1.000000 1.000000 +vn 0.080360 -0.995832 0.043135 +v 158.593185 -137.634796 42.250938 1.000000 1.000000 1.000000 +vn 0.068145 -0.961977 -0.264494 +v 158.589325 -137.580368 41.796139 1.000000 1.000000 1.000000 +vn -0.227516 -0.963039 0.144194 +v 159.845901 -137.651535 42.812538 1.000000 1.000000 1.000000 +vn 0.288920 -0.955989 -0.051087 +v 157.968765 -137.750610 42.180939 1.000000 1.000000 1.000000 +vn 0.422557 -0.904830 0.052230 +v 157.362350 -137.962692 42.108940 1.000000 1.000000 1.000000 +vn -0.794119 -0.600709 0.092325 +v 162.471085 -139.461273 42.675518 1.000000 1.000000 1.000000 +vn -0.876872 -0.459953 -0.139784 +v 162.822571 -140.037552 42.728340 1.000000 1.000000 1.000000 +vn 0.431901 -0.872997 -0.226579 +v 157.343048 -137.911072 41.654137 1.000000 1.000000 1.000000 +vn 0.665343 -0.746343 -0.017064 +v 156.280884 -138.645004 41.961140 1.000000 1.000000 1.000000 +vn 0.356045 -0.875308 0.327213 +v 157.296707 -137.785492 42.933140 1.000000 1.000000 1.000000 +vn 0.431110 -0.780163 0.453310 +v 156.704453 -138.099442 42.859737 1.000000 1.000000 1.000000 +vn 0.483454 -0.692992 0.534822 +v 156.170151 -138.494308 42.785538 1.000000 1.000000 1.000000 +vn 0.655557 -0.665511 0.356848 +v 155.687347 -138.975708 42.707741 1.000000 1.000000 1.000000 +vn 0.622856 -0.435521 0.649901 +v 155.079666 -139.383148 42.975140 1.000000 1.000000 1.000000 +vn 0.718454 -0.539351 0.439232 +v 155.272781 -139.529663 42.627338 1.000000 1.000000 1.000000 +vn -0.878537 -0.194330 -0.436359 +v 163.463730 -141.287781 41.975719 1.000000 1.000000 1.000000 +vn -0.937797 -0.343655 -0.049377 +v 163.092941 -140.664063 42.779137 1.000000 1.000000 1.000000 +vn -0.090097 -0.615426 0.783029 +v 157.446045 -148.073288 41.739937 1.000000 1.000000 1.000000 +vn -0.204281 -0.599208 0.774093 +v 156.705734 -147.771896 41.847740 1.000000 1.000000 1.000000 +vn -0.211056 -0.858183 0.467951 +v 157.379089 -148.318863 41.402336 1.000000 1.000000 1.000000 +vn -0.358977 -0.802701 0.476242 +v 156.606613 -148.004913 41.509937 1.000000 1.000000 1.000000 +vn -0.409376 -0.545420 0.731388 +v 155.253464 -146.714233 42.078720 1.000000 1.000000 1.000000 +vn -0.567928 -0.678087 0.466537 +v 155.091248 -146.902603 41.740936 1.000000 1.000000 1.000000 +vn -0.532676 -0.811047 0.241784 +v 155.805786 -147.713287 41.146538 1.000000 1.000000 1.000000 +vn -0.422836 -0.892541 0.156779 +v 156.543518 -148.154221 41.041538 1.000000 1.000000 1.000000 +vn -0.460906 -0.869203 -0.179029 +v 156.548676 -148.141647 40.226139 1.000000 1.000000 1.000000 +vn -0.559796 -0.827542 -0.042448 +v 155.786484 -147.745377 40.736538 1.000000 1.000000 1.000000 +vn -0.687587 -0.708572 0.158587 +v 154.988235 -147.022598 41.272537 1.000000 1.000000 1.000000 +vn -0.582396 -0.689653 -0.430340 +v 155.884338 -147.580734 39.937939 1.000000 1.000000 1.000000 +vn -0.703936 -0.669681 -0.236647 +v 154.997253 -147.012833 40.457138 1.000000 1.000000 1.000000 +vn -0.802499 -0.571225 -0.172328 +v 154.420471 -146.338882 40.558140 1.000000 1.000000 1.000000 +vn -0.783581 -0.602491 0.151676 +v 154.410172 -146.348648 41.373737 1.000000 1.000000 1.000000 +vn -0.874253 -0.454182 -0.171467 +v 153.940231 -145.585403 40.656937 1.000000 1.000000 1.000000 +vn -0.860707 -0.486251 0.150809 +v 153.928650 -145.592392 41.472538 1.000000 1.000000 1.000000 +vn -0.667690 -0.562503 0.487628 +v 154.528610 -146.245392 41.841919 1.000000 1.000000 1.000000 +vn -0.503737 -0.384734 0.773453 +v 154.263397 -145.378891 42.278519 1.000000 1.000000 1.000000 +vn -0.759586 -0.468897 0.450738 +v 154.059982 -145.508652 41.940720 1.000000 1.000000 1.000000 +vn -0.919661 -0.363586 0.148425 +v 153.555283 -144.773315 41.568336 1.000000 1.000000 1.000000 +vn -0.928243 -0.330842 -0.170025 +v 153.568146 -144.767731 40.752937 1.000000 1.000000 1.000000 +vn -0.801732 -0.356285 0.479882 +v 153.695618 -144.711929 42.036739 1.000000 1.000000 1.000000 +vn -0.603544 -0.214451 0.767949 +v 153.672440 -143.807755 42.467739 1.000000 1.000000 1.000000 +vn -0.860654 -0.245884 0.445888 +v 153.441986 -143.870544 42.129936 1.000000 1.000000 1.000000 +vn -0.690537 -0.058884 0.720896 +v 153.510223 -142.101257 42.651138 1.000000 1.000000 1.000000 +vn -0.729965 -0.502806 -0.462966 +v 154.523453 -146.249588 40.165138 1.000000 1.000000 1.000000 +vn -0.581493 -0.341778 -0.738278 +v 154.708862 -146.089111 39.820538 1.000000 1.000000 1.000000 +vn -0.794605 -0.371245 -0.480395 +v 154.054825 -145.512848 40.263939 1.000000 1.000000 1.000000 +vn -0.260434 -0.097968 -0.960508 +v 155.416977 -146.524460 39.568539 1.000000 1.000000 1.000000 +vn 0.560937 -0.286314 -0.776772 +v 164.110046 -144.586349 38.192917 1.000000 1.000000 1.000000 +vn 0.664699 -0.187165 -0.723287 +v 164.470551 -143.047287 37.974121 1.000000 1.000000 1.000000 +vn 0.895257 -0.167474 -0.412877 +v 164.706146 -143.076599 38.318718 1.000000 1.000000 1.000000 +vn 0.985955 -0.009588 -0.166737 +v 164.876099 -142.200333 38.596519 1.000000 1.000000 1.000000 +vn 0.879002 -0.041827 -0.474979 +v 164.743484 -142.204514 38.203518 1.000000 1.000000 1.000000 +vn 0.693997 -0.003379 -0.719970 +v 164.431915 -141.370102 37.742718 1.000000 1.000000 1.000000 +vn 0.621927 0.095462 -0.777234 +v 164.247803 -140.546844 37.626339 1.000000 1.000000 1.000000 +vn 0.872962 0.195918 -0.446715 +v 164.473114 -140.468719 37.970940 1.000000 1.000000 1.000000 +vn 0.891761 0.080232 -0.445337 +v 164.666245 -141.326843 38.087318 1.000000 1.000000 1.000000 +vn 0.977040 0.129944 -0.168843 +v 164.797562 -141.303116 38.480518 1.000000 1.000000 1.000000 +vn 0.951003 0.258009 -0.170366 +v 164.600571 -140.424057 38.363937 1.000000 1.000000 1.000000 +vn 0.908831 0.380574 -0.170850 +v 164.294159 -139.592438 38.248539 1.000000 1.000000 1.000000 +vn 0.826441 0.298553 -0.477348 +v 164.174423 -139.655228 37.855537 1.000000 1.000000 1.000000 +vn 0.639493 0.253784 -0.725702 +v 163.577026 -139.038498 37.395737 1.000000 1.000000 1.000000 +vn -0.509489 -0.451618 -0.732436 +v 155.764603 -147.180283 19.086998 1.000000 1.000000 1.000000 +vn -0.326677 -0.000761 -0.945136 +v 154.482269 -145.265869 19.268799 1.000000 1.000000 1.000000 +vn -0.298576 -0.129200 -0.945600 +v 155.910080 -146.963989 18.935999 1.000000 1.000000 1.000000 +vn -0.341426 -0.576161 -0.742608 +v 157.133179 -147.968628 18.855598 1.000000 1.000000 1.000000 +vn -0.617138 -0.660854 -0.427098 +v 155.625549 -147.388168 19.431599 1.000000 1.000000 1.000000 +vn -0.491800 -0.717819 -0.492817 +v 156.309204 -147.852814 19.316399 1.000000 1.000000 1.000000 +vn -0.549023 -0.312026 -0.775380 +v 154.712723 -146.094711 19.303999 1.000000 1.000000 1.000000 +vn -0.237634 -0.203786 -0.949738 +v 157.216873 -147.717468 18.704597 1.000000 1.000000 1.000000 +vn -0.144272 -0.654087 -0.742534 +v 158.652405 -148.310486 18.623798 1.000000 1.000000 1.000000 +vn -0.146975 -0.237238 -0.960269 +v 158.667862 -148.043976 18.472797 1.000000 1.000000 1.000000 +vn -0.257537 -0.827688 -0.498606 +v 157.836151 -148.450027 19.083797 1.000000 1.000000 1.000000 +vn -0.110620 -0.870463 -0.479644 +v 158.636963 -148.567230 18.968399 1.000000 1.000000 1.000000 +vn 0.017264 -0.674575 -0.738004 +v 160.129150 -148.197464 18.402599 1.000000 1.000000 1.000000 +vn 0.116645 -0.891578 -0.437588 +v 160.178085 -148.450027 18.747200 1.000000 1.000000 1.000000 +vn -0.101868 -0.228361 -0.968233 +v 160.078949 -147.936539 18.251598 1.000000 1.000000 1.000000 +vn 0.277604 -0.831034 -0.481994 +v 160.947998 -148.214218 18.632797 1.000000 1.000000 1.000000 +vn 0.161499 -0.637908 -0.752989 +v 160.868164 -147.971420 18.288200 1.000000 1.000000 1.000000 +vn 0.310226 -0.932326 -0.185819 +v 160.993057 -148.349564 19.025997 1.000000 1.000000 1.000000 +vn 0.064715 -0.972994 -0.221572 +v 159.460953 -148.705368 19.245197 1.000000 1.000000 1.000000 +vn -0.093073 -0.978954 -0.181620 +v 158.627960 -148.710953 19.361397 1.000000 1.000000 1.000000 +vn 0.099794 -0.982482 0.157387 +v 159.462250 -148.719330 20.060799 1.000000 1.000000 1.000000 +vn 0.243535 -0.954561 0.171769 +v 160.207687 -148.604904 19.955799 1.000000 1.000000 1.000000 +vn -0.195296 -0.967801 0.158809 +v 157.806534 -148.604904 20.292400 1.000000 1.000000 1.000000 +vn -0.239885 -0.953803 -0.180870 +v 157.809113 -148.590942 19.476801 1.000000 1.000000 1.000000 +vn -0.046547 -0.986240 0.158631 +v 158.627960 -148.724899 20.176998 1.000000 1.000000 1.000000 +vn 0.170714 -0.858746 0.483128 +v 159.450653 -148.556076 20.528999 1.000000 1.000000 1.000000 +vn 0.336229 -0.757287 0.559881 +v 160.946716 -148.207245 20.309799 1.000000 1.000000 1.000000 +vn 0.370477 -0.914279 0.163831 +v 160.998215 -148.362122 19.841400 1.000000 1.000000 1.000000 +vn 0.190850 -0.639275 0.744919 +v 159.431335 -148.299332 20.866798 1.000000 1.000000 1.000000 +vn 0.407176 -0.485766 0.773459 +v 161.562119 -147.633759 20.535000 1.000000 1.000000 1.000000 +vn 0.009296 -0.866262 0.499504 +v 158.636963 -148.560257 20.645397 1.000000 1.000000 1.000000 +vn -0.128888 -0.873461 0.469525 +v 157.837448 -148.443054 20.760597 1.000000 1.000000 1.000000 +vn -0.031822 -0.647582 0.761331 +v 157.886368 -148.191895 21.098400 1.000000 1.000000 1.000000 +vn 0.121785 -0.335815 0.934022 +v 158.666580 -148.063522 21.123600 1.000000 1.000000 1.000000 +vn 0.250035 -0.349885 0.902808 +v 160.081512 -147.954681 20.902397 1.000000 1.000000 1.000000 +vn 0.015763 -0.354380 0.934969 +v 157.210434 -147.734222 21.355400 1.000000 1.000000 1.000000 +vn -0.238874 -0.610280 0.755313 +v 156.422501 -147.619797 21.330997 1.000000 1.000000 1.000000 +vn -0.250261 -0.830508 0.497621 +v 157.053360 -148.204437 20.877197 1.000000 1.000000 1.000000 +vn -0.338685 -0.927743 0.156798 +v 157.001862 -148.357925 20.408798 1.000000 1.000000 1.000000 +vn -0.473923 -0.866604 0.156185 +v 156.239670 -147.992355 20.524998 1.000000 1.000000 1.000000 +vn -0.396665 -0.786961 0.472598 +v 156.311768 -147.847244 20.993198 1.000000 1.000000 1.000000 +vn -0.380511 -0.907202 -0.179432 +v 157.007004 -148.345383 19.593399 1.000000 1.000000 1.000000 +vn -0.515013 -0.838090 -0.179909 +v 156.246109 -147.979797 19.709400 1.000000 1.000000 1.000000 +vn -0.381490 -0.797978 -0.466580 +v 157.052078 -148.210037 19.200199 1.000000 1.000000 1.000000 +vn -0.576229 -0.785432 0.225959 +v 155.539276 -147.516541 20.640198 1.000000 1.000000 1.000000 +vn -0.583627 -0.685927 0.434608 +v 155.087387 -146.898407 21.208797 1.000000 1.000000 1.000000 +vn -0.779174 -0.606513 0.158211 +v 154.414032 -146.354233 20.856998 1.000000 1.000000 1.000000 +vn -0.718214 -0.695286 0.027311 +v 154.959915 -147.046326 20.330399 1.000000 1.000000 1.000000 +vn -0.590386 -0.805710 -0.047698 +v 155.519974 -147.545837 20.230198 1.000000 1.000000 1.000000 +vn -0.376931 -0.521581 0.765426 +v 155.249603 -146.711441 21.546600 1.000000 1.000000 1.000000 +vn -0.661383 -0.571267 0.486032 +v 154.532471 -146.250977 21.325397 1.000000 1.000000 1.000000 +vn -0.083451 -0.334144 0.938820 +v 155.899780 -146.979340 21.586800 1.000000 1.000000 1.000000 +vn -0.190141 -0.259277 0.946901 +v 154.466812 -145.274246 21.919598 1.000000 1.000000 1.000000 +vn -0.540558 -0.412564 0.733204 +v 154.274979 -145.398438 21.778999 1.000000 1.000000 1.000000 +vn -0.752127 -0.480286 0.451255 +v 154.071564 -145.529587 21.441200 1.000000 1.000000 1.000000 +vn -0.857474 -0.491910 0.150872 +v 153.940231 -145.613312 20.973000 1.000000 1.000000 1.000000 +vn -0.589835 -0.263283 0.763399 +v 153.680161 -143.849609 22.010399 1.000000 1.000000 1.000000 +vn -0.795283 -0.372907 0.477980 +v 153.709778 -144.749603 21.556400 1.000000 1.000000 1.000000 +vn -0.281675 -0.157747 0.946454 +v 153.761276 -142.997055 22.266598 1.000000 1.000000 1.000000 +vn -0.674092 -0.156779 0.721817 +v 153.539825 -143.024963 22.125999 1.000000 1.000000 1.000000 +vn -0.855625 -0.264208 0.445085 +v 153.450989 -143.913788 21.672600 1.000000 1.000000 1.000000 +vn -0.915775 -0.373257 0.148447 +v 153.570724 -144.812378 21.088200 1.000000 1.000000 1.000000 +vn -0.705046 -0.657730 -0.265145 +v 154.993393 -147.008652 19.924999 1.000000 1.000000 1.000000 +vn -0.739354 -0.491051 -0.460679 +v 154.528610 -146.255173 19.648399 1.000000 1.000000 1.000000 +vn -0.808774 -0.559480 -0.181289 +v 154.424332 -146.345871 20.041599 1.000000 1.000000 1.000000 +vn -0.810198 -0.376206 -0.449498 +v 154.066406 -145.532379 19.764397 1.000000 1.000000 1.000000 +vn -0.652610 -0.220960 -0.724760 +v 154.269821 -145.401230 19.419800 1.000000 1.000000 1.000000 +vn -0.874460 -0.453545 -0.172094 +v 153.951813 -145.606323 20.157398 1.000000 1.000000 1.000000 +vn -0.841080 -0.255985 -0.476504 +v 153.704636 -144.750992 19.879597 1.000000 1.000000 1.000000 +vn -0.927437 -0.333126 -0.169964 +v 153.582321 -144.806808 20.272598 1.000000 1.000000 1.000000 +vn 0.306466 -0.189991 0.932729 +v 162.290833 -146.830048 20.525398 1.000000 1.000000 1.000000 +vn 0.106273 0.252542 0.961732 +v 160.033890 -147.702133 20.906197 1.000000 1.000000 1.000000 +vn 0.175057 0.217911 0.960141 +v 158.682022 -147.805389 21.127399 1.000000 1.000000 1.000000 +vn 0.546673 -0.357779 0.757062 +v 162.992508 -146.460281 20.276398 1.000000 1.000000 1.000000 +vn 0.515636 -0.718585 0.466642 +v 161.672836 -147.861191 20.197195 1.000000 1.000000 1.000000 +vn -0.179996 0.632310 0.753516 +v 161.232529 -146.952835 20.524799 1.000000 1.000000 1.000000 +vn 0.652302 -0.214729 0.726907 +v 163.871857 -145.130524 20.067600 1.000000 1.000000 1.000000 +vn 0.688214 -0.043943 0.724176 +v 164.388138 -143.566360 19.863400 1.000000 1.000000 1.000000 +vn 0.676548 0.127071 0.725352 +v 164.488571 -141.938004 19.670597 1.000000 1.000000 1.000000 +vn 0.851790 -0.223380 0.473872 +v 164.401016 -144.462158 19.627800 1.000000 1.000000 1.000000 +vn 0.882206 -0.001967 0.470859 +v 164.726746 -142.768219 19.427799 1.000000 1.000000 1.000000 +vn 0.888738 -0.118959 0.442712 +v 164.619888 -143.617981 19.525799 1.000000 1.000000 1.000000 +vn 0.852756 0.218845 0.474251 +v 164.616028 -141.071487 19.238998 1.000000 1.000000 1.000000 +vn 0.890056 0.106295 0.443285 +v 164.725464 -141.919861 19.332798 1.000000 1.000000 1.000000 +vn 0.980954 -0.161509 0.107904 +v 164.767944 -143.651474 19.057400 1.000000 1.000000 1.000000 +vn 0.992404 -0.061677 0.106441 +v 164.877380 -142.777985 18.959599 1.000000 1.000000 1.000000 +vn 0.944061 -0.295006 0.147381 +v 164.543930 -144.517975 19.159397 1.000000 1.000000 1.000000 +vn 0.897177 -0.416029 0.148301 +v 164.215622 -145.325867 19.261597 1.000000 1.000000 1.000000 +vn 0.934992 -0.310851 -0.170770 +v 164.531052 -144.512390 18.343998 1.000000 1.000000 1.000000 +vn 0.827000 -0.341874 0.446311 +v 164.081726 -145.250519 19.729797 1.000000 1.000000 1.000000 +vn 0.834207 -0.530748 0.149684 +v 163.792038 -146.069580 19.364597 1.000000 1.000000 1.000000 +vn 0.877289 -0.448239 -0.171596 +v 164.204041 -145.320297 18.445999 1.000000 1.000000 1.000000 +vn 0.763727 -0.434736 0.477206 +v 163.668442 -145.974701 19.833000 1.000000 1.000000 1.000000 +vn 0.755464 -0.637475 0.151326 +v 163.274475 -146.749115 19.470398 1.000000 1.000000 1.000000 +vn 0.808848 -0.561972 -0.173067 +v 163.780457 -146.062607 18.549198 1.000000 1.000000 1.000000 +vn 0.777786 -0.437076 -0.451678 +v 164.086868 -145.253311 18.052998 1.000000 1.000000 1.000000 +vn 0.664154 -0.536344 -0.520802 +v 163.673584 -145.978897 18.155998 1.000000 1.000000 1.000000 +vn 0.606387 -0.596957 -0.525297 +v 163.167618 -146.640274 18.261799 1.000000 1.000000 1.000000 +vn 0.725371 -0.665457 -0.176082 +v 163.264175 -146.739349 18.654999 1.000000 1.000000 1.000000 +vn 0.687952 -0.558102 0.463944 +v 163.163757 -146.636093 19.938795 1.000000 1.000000 1.000000 +vn 0.653236 -0.728681 0.205685 +v 162.671936 -147.349106 19.578800 1.000000 1.000000 1.000000 +vn 0.503910 -0.724332 -0.470550 +v 162.580521 -147.224930 18.370197 1.000000 1.000000 1.000000 +vn 0.620231 -0.762701 -0.183305 +v 162.664215 -147.337952 18.763199 1.000000 1.000000 1.000000 +vn 0.359328 -0.573026 -0.736562 +v 162.433746 -147.024002 18.025597 1.000000 1.000000 1.000000 +vn 0.554745 -0.386552 -0.736774 +v 163.877014 -145.133316 17.708397 1.000000 1.000000 1.000000 +vn 0.093268 -0.286313 -0.953586 +v 162.279251 -146.814697 17.874599 1.000000 1.000000 1.000000 +vn -0.022893 -0.251878 -0.967488 +v 161.450119 -147.402130 18.024799 1.000000 1.000000 1.000000 +vn 0.188710 -0.240650 -0.952090 +v 163.658142 -145.009140 17.557400 1.000000 1.000000 1.000000 +vn 0.651354 -0.213975 -0.727979 +v 164.393295 -143.566360 17.504398 1.000000 1.000000 1.000000 +vn 0.814368 -0.327429 -0.479160 +v 164.406174 -144.463547 17.950798 1.000000 1.000000 1.000000 +vn 0.064048 -0.185924 -0.980475 +v 164.151245 -143.513336 17.353201 1.000000 1.000000 1.000000 +vn 0.911206 -0.120215 -0.394019 +v 164.731903 -142.768219 17.750999 1.000000 1.000000 1.000000 +vn 0.909713 -0.199526 -0.364159 +v 164.625031 -143.619385 17.848797 1.000000 1.000000 1.000000 +vn 0.691416 -0.049640 -0.720749 +v 164.495010 -141.936600 17.311398 1.000000 1.000000 1.000000 +vn 0.985727 0.028015 -0.166006 +v 164.863220 -141.908707 18.049000 1.000000 1.000000 1.000000 +vn 0.895926 0.009686 -0.444097 +v 164.730606 -141.918472 17.655998 1.000000 1.000000 1.000000 +vn 0.985940 0.079947 0.146732 +v 164.876099 -141.907303 18.864597 1.000000 1.000000 1.000000 +vn 0.970839 0.162194 -0.176536 +v 164.751205 -141.040802 17.955200 1.000000 1.000000 1.000000 +vn 0.883494 0.132510 -0.449309 +v 164.621170 -141.070099 17.562000 1.000000 1.000000 1.000000 +vn 0.967068 0.203014 0.153510 +v 164.764084 -141.038010 18.770798 1.000000 1.000000 1.000000 +vn 0.636311 0.060401 -0.769064 +v 164.389435 -141.123123 17.217598 1.000000 1.000000 1.000000 +vn 0.272873 -0.091779 -0.957662 +v 164.249084 -141.956146 17.160397 1.000000 1.000000 1.000000 +vn 0.314665 0.003080 -0.949198 +v 163.811356 -140.052902 16.928799 1.000000 1.000000 1.000000 +vn 0.455488 -0.841560 -0.290359 +v 161.737228 -147.993759 18.913399 1.000000 1.000000 1.000000 +vn 0.500549 -0.865535 -0.017319 +v 161.759109 -148.039795 19.319000 1.000000 1.000000 1.000000 +vn 0.518203 -0.829958 0.206485 +v 161.743652 -148.006302 19.729000 1.000000 1.000000 1.000000 +vn 0.232012 0.163584 0.958859 +v 157.291550 -147.491440 21.359200 1.000000 1.000000 1.000000 +vn 0.274558 0.089240 0.957420 +v 156.040115 -146.770035 21.590599 1.000000 1.000000 1.000000 +vn 0.283629 -0.016671 0.958789 +v 154.672821 -145.143082 21.923397 1.000000 1.000000 1.000000 +vn 0.664484 0.231897 0.710412 +v 154.883957 -145.006332 21.768799 1.000000 1.000000 1.000000 +vn 0.251050 -0.124249 0.959967 +v 153.998169 -142.967758 22.270199 1.000000 1.000000 1.000000 +vn 0.904904 0.248172 0.345774 +v 154.800278 -144.257050 21.536198 1.000000 1.000000 1.000000 +vn 0.705368 -0.041116 0.707648 +v 154.244080 -142.938461 22.115799 1.000000 1.000000 1.000000 +vn 0.828445 0.384642 0.407098 +v 155.087387 -144.876572 21.421200 1.000000 1.000000 1.000000 +vn 0.183905 -0.204062 0.961529 +v 154.210602 -140.684982 22.617397 1.000000 1.000000 1.000000 +vn 0.633194 -0.293119 0.716343 +v 154.444931 -140.765930 22.462799 1.000000 1.000000 1.000000 +vn 0.105410 -0.254526 0.961304 +v 154.829895 -139.303604 22.848797 1.000000 1.000000 1.000000 +vn -0.374178 -0.031603 0.926818 +v 153.982727 -140.605453 22.613598 1.000000 1.000000 1.000000 +vn -0.360143 0.063824 0.930711 +v 154.632904 -139.158493 22.844997 1.000000 1.000000 1.000000 +vn 0.485009 -0.479715 0.731191 +v 155.034592 -139.452911 22.694199 1.000000 1.000000 1.000000 +vn -0.012832 -0.265642 0.963986 +v 156.292465 -137.757584 23.183399 1.000000 1.000000 1.000000 +vn 0.683640 -0.576424 0.447629 +v 155.230286 -139.596634 22.346600 1.000000 1.000000 1.000000 +vn 0.799035 -0.443212 0.406333 +v 154.909714 -140.196625 22.231400 1.000000 1.000000 1.000000 +vn 0.281171 -0.622350 0.730495 +v 156.425079 -137.983627 23.028797 1.000000 1.000000 1.000000 +vn -0.127525 -0.235648 0.963435 +v 158.270035 -136.958054 23.529598 1.000000 1.000000 1.000000 +vn -0.020476 -0.680529 0.732435 +v 158.306076 -137.221771 23.375000 1.000000 1.000000 1.000000 +vn 0.644704 -0.697115 0.313667 +v 156.036255 -138.614319 22.565399 1.000000 1.000000 1.000000 +vn 0.345647 -0.874063 0.341382 +v 157.113876 -137.867813 22.796398 1.000000 1.000000 1.000000 +vn 0.434567 -0.779440 0.451247 +v 156.552536 -138.198502 22.681198 1.000000 1.000000 1.000000 +vn 0.906476 -0.421021 0.032279 +v 155.069351 -140.280350 21.406998 1.000000 1.000000 1.000000 +vn 0.800219 -0.599679 0.005912 +v 155.709229 -139.235245 21.624397 1.000000 1.000000 1.000000 +vn 0.678295 -0.734740 -0.008536 +v 156.150833 -138.759430 21.740997 1.000000 1.000000 1.000000 +vn 0.462272 -0.885216 0.051939 +v 157.187256 -138.042221 21.972000 1.000000 1.000000 1.000000 +vn 0.226271 -0.900141 0.372221 +v 157.718994 -137.623642 22.912598 1.000000 1.000000 1.000000 +vn 0.581050 -0.708704 -0.400150 +v 156.544800 -138.185959 21.004597 1.000000 1.000000 1.000000 +vn 0.359527 -0.821414 -0.442742 +v 157.715134 -137.609680 21.236000 1.000000 1.000000 1.000000 +vn 0.843612 -0.482632 -0.235343 +v 155.334579 -139.671982 21.067398 1.000000 1.000000 1.000000 +vn 0.607094 -0.559103 -0.564659 +v 156.027252 -138.603149 20.888798 1.000000 1.000000 1.000000 +vn 0.412686 -0.609920 -0.676526 +v 157.009583 -137.619446 20.785000 1.000000 1.000000 1.000000 +vn 0.619601 -0.395227 -0.678152 +v 155.387360 -138.929657 20.437399 1.000000 1.000000 1.000000 +vn 0.795522 -0.397789 -0.457065 +v 155.218704 -139.588257 20.669998 1.000000 1.000000 1.000000 +vn 0.935667 -0.276711 -0.218995 +v 154.788681 -140.885925 20.836197 1.000000 1.000000 1.000000 +vn 0.254730 -0.079034 -0.963777 +v 156.298904 -137.768738 20.533997 1.000000 1.000000 1.000000 +vn 0.291196 -0.007009 -0.956638 +v 154.840179 -139.310593 20.199398 1.000000 1.000000 1.000000 +vn 0.676301 -0.178136 -0.714762 +v 154.683105 -140.076630 20.219997 1.000000 1.000000 1.000000 +vn 0.875412 -0.201163 -0.439532 +v 154.656082 -140.839874 20.438599 1.000000 1.000000 1.000000 +vn 0.278853 0.073701 -0.957501 +v 154.220917 -140.687790 19.967999 1.000000 1.000000 1.000000 +vn 0.773762 0.013060 -0.633342 +v 154.267258 -141.478928 19.987400 1.000000 1.000000 1.000000 +vn 0.905151 -0.042119 -0.422999 +v 154.502869 -141.523590 20.322195 1.000000 1.000000 1.000000 +vn 0.917918 0.128248 -0.375472 +v 154.464233 -142.911942 20.091400 1.000000 1.000000 1.000000 +vn 0.706795 0.300530 -0.640408 +v 154.352234 -143.662628 19.641197 1.000000 1.000000 1.000000 +vn 0.967302 0.063496 -0.245551 +v 154.603287 -142.895203 20.488998 1.000000 1.000000 1.000000 +vn 0.990489 -0.137289 0.009169 +v 154.689545 -141.558472 21.174400 1.000000 1.000000 1.000000 +vn 0.996205 0.085772 0.014789 +v 154.653503 -142.888229 20.943798 1.000000 1.000000 1.000000 +vn 0.964215 0.261342 0.044610 +v 154.766800 -143.545425 20.828197 1.000000 1.000000 1.000000 +vn 0.960386 -0.278620 0.005449 +v 154.837616 -140.904068 21.291000 1.000000 1.000000 1.000000 +vn 0.837024 -0.337049 0.431031 +v 154.668961 -140.844070 22.115200 1.000000 1.000000 1.000000 +vn 0.930773 -0.174286 0.321383 +v 154.515732 -141.524979 21.998798 1.000000 1.000000 1.000000 +vn 0.931130 -0.111712 0.347157 +v 154.451355 -142.215668 21.883400 1.000000 1.000000 1.000000 +vn 0.904561 0.010727 0.426209 +v 154.478409 -142.910553 21.767998 1.000000 1.000000 1.000000 +vn 0.926402 0.194161 0.322615 +v 154.595551 -143.594269 21.652397 1.000000 1.000000 1.000000 +vn 0.887246 0.459911 0.035729 +v 155.239304 -144.778900 20.596798 1.000000 1.000000 1.000000 +vn 0.723368 0.278591 -0.631764 +v 154.582687 -143.597061 19.975800 1.000000 1.000000 1.000000 +vn 0.881231 0.423666 -0.209617 +v 155.195526 -144.806808 20.141998 1.000000 1.000000 1.000000 +vn 0.194755 0.162689 -0.967266 +v 154.011047 -142.966354 19.620800 1.000000 1.000000 1.000000 +vn 0.197417 -0.218190 -0.955730 +v 158.271317 -136.970612 20.879997 1.000000 1.000000 1.000000 +vn 0.089546 -0.257776 -0.962046 +v 160.380219 -137.121307 21.227200 1.000000 1.000000 1.000000 +vn 0.039128 -0.745340 -0.665535 +v 159.652786 -137.198059 21.246597 1.000000 1.000000 1.000000 +vn 0.223497 -0.622825 -0.749758 +v 158.303513 -137.205032 21.015999 1.000000 1.000000 1.000000 +vn 0.191228 -0.850523 -0.489942 +v 158.338272 -137.460373 21.350597 1.000000 1.000000 1.000000 +vn -0.015609 -0.892463 -0.450851 +v 159.620590 -137.453400 21.581398 1.000000 1.000000 1.000000 +vn -0.174004 -0.651160 -0.738724 +v 160.959579 -137.601303 21.479198 1.000000 1.000000 1.000000 +vn -0.198426 -0.862055 -0.466357 +v 160.255325 -137.597122 21.697800 1.000000 1.000000 1.000000 +vn 0.163589 -0.956932 -0.239832 +v 158.358871 -137.609680 21.748199 1.000000 1.000000 1.000000 +vn 0.285126 -0.913075 -0.291544 +v 157.753754 -137.753387 21.633400 1.000000 1.000000 1.000000 +vn 0.140988 -0.988711 0.050718 +v 158.366592 -137.664093 22.202999 1.000000 1.000000 1.000000 +vn -0.124234 -0.992203 0.009972 +v 159.594849 -137.658508 22.433598 1.000000 1.000000 1.000000 +vn -0.286602 -0.929199 -0.233343 +v 160.216705 -137.742233 22.095398 1.000000 1.000000 1.000000 +vn -0.415656 -0.775929 -0.474515 +v 161.429520 -138.163620 21.929199 1.000000 1.000000 1.000000 +vn -0.512022 -0.823732 -0.243513 +v 161.354828 -138.291992 22.326599 1.000000 1.000000 1.000000 +vn -0.447633 -0.893572 0.033972 +v 160.785782 -138.025482 22.666199 1.000000 1.000000 1.000000 +vn -0.287849 -0.957656 0.006178 +v 160.202545 -137.795258 22.550198 1.000000 1.000000 1.000000 +vn -0.586031 -0.580101 -0.565730 +v 162.364227 -139.005005 22.147999 1.000000 1.000000 1.000000 +vn -0.412545 -0.596028 -0.688882 +v 162.042358 -138.324097 21.696598 1.000000 1.000000 1.000000 +vn -0.735014 -0.553268 -0.391981 +v 162.767197 -139.551987 22.263798 1.000000 1.000000 1.000000 +vn -0.633994 -0.773308 0.006899 +v 161.770691 -138.682693 22.883598 1.000000 1.000000 1.000000 +vn 0.002607 -0.271131 -0.962539 +v 161.671555 -137.743637 21.458599 1.000000 1.000000 1.000000 +vn -0.076861 -0.239296 -0.967900 +v 163.143143 -139.271530 21.793198 1.000000 1.000000 1.000000 +vn 0.327356 0.021781 -0.944650 +v 163.336273 -139.127792 21.788200 1.000000 1.000000 1.000000 +vn 0.288886 0.148899 -0.945714 +v 161.795151 -137.530151 21.453400 1.000000 1.000000 1.000000 +vn 0.306703 -0.103394 -0.946173 +v 164.176987 -141.335220 22.134197 1.000000 1.000000 1.000000 +vn 0.233969 -0.199237 -0.951611 +v 164.107468 -143.731003 22.481400 1.000000 1.000000 1.000000 +vn 0.171992 -0.258770 -0.950504 +v 163.551270 -145.217026 22.712597 1.000000 1.000000 1.000000 +vn 0.225570 0.212884 -0.950683 +v 160.444595 -136.877121 21.222198 1.000000 1.000000 1.000000 +vn 0.120296 0.287213 -0.950283 +v 158.237839 -136.719452 20.875000 1.000000 1.000000 1.000000 +vn -0.764384 -0.644704 -0.008562 +v 162.223892 -139.144547 23.000198 1.000000 1.000000 1.000000 +vn -0.606017 -0.656518 0.449141 +v 161.421783 -138.176178 23.605799 1.000000 1.000000 1.000000 +vn -0.725265 -0.614580 0.310293 +v 162.355209 -139.014771 23.824598 1.000000 1.000000 1.000000 +vn -0.467010 -0.778225 0.419843 +v 160.857880 -137.849670 23.490597 1.000000 1.000000 1.000000 +vn -0.501808 -0.464970 0.729377 +v 161.546677 -137.959900 23.953398 1.000000 1.000000 1.000000 +vn -0.302820 -0.609177 0.732942 +v 160.315842 -137.365494 23.721998 1.000000 1.000000 1.000000 +vn -0.351264 -0.821074 0.449945 +v 160.251465 -137.611069 23.374397 1.000000 1.000000 1.000000 +vn -0.168862 -0.923009 0.345746 +v 159.618027 -137.468750 23.257999 1.000000 1.000000 1.000000 +vn -0.100478 -0.923668 0.369786 +v 158.979446 -137.422699 23.142597 1.000000 1.000000 1.000000 +vn 0.074168 -0.900683 0.428100 +v 158.340851 -137.474335 23.027199 1.000000 1.000000 1.000000 +vn -0.267317 -0.106410 0.957715 +v 161.677994 -137.733856 24.107998 1.000000 1.000000 1.000000 +vn -0.212081 -0.174430 0.961559 +v 160.384079 -137.108749 23.876598 1.000000 1.000000 1.000000 +vn -0.800397 -0.411419 0.436003 +v 162.755615 -139.560349 23.940399 1.000000 1.000000 1.000000 +vn -0.310607 0.200160 0.929225 +v 156.163712 -137.539902 23.179798 1.000000 1.000000 1.000000 +vn 0.475782 0.484604 -0.734024 +v 161.926468 -137.304092 21.604597 1.000000 1.000000 1.000000 +vn 0.311078 0.598195 -0.738508 +v 160.511536 -136.620392 21.373199 1.000000 1.000000 1.000000 +vn 0.526374 0.346685 -0.776363 +v 163.054321 -138.317108 21.823399 1.000000 1.000000 1.000000 +vn 0.568912 0.701976 -0.428449 +v 162.052643 -137.086426 21.948997 1.000000 1.000000 1.000000 +vn 0.438306 0.750325 -0.494873 +v 161.340683 -136.674805 21.833797 1.000000 1.000000 1.000000 +vn 0.178950 0.581801 -0.793401 +v 159.746780 -136.447372 21.256798 1.000000 1.000000 1.000000 +vn 0.026785 0.664567 -0.746748 +v 158.201797 -136.455734 21.025997 1.000000 1.000000 1.000000 +vn 0.065428 0.863564 -0.499977 +v 158.972992 -136.136200 21.485798 1.000000 1.000000 1.000000 +vn 0.194288 0.860935 -0.470153 +v 159.778961 -136.193420 21.601200 1.000000 1.000000 1.000000 +vn -0.096323 0.599289 -0.794717 +v 157.449905 -136.635742 20.911400 1.000000 1.000000 1.000000 +vn -0.072865 0.878970 -0.471277 +v 158.167038 -136.201782 21.370598 1.000000 1.000000 1.000000 +vn -0.204643 0.857895 -0.471314 +v 157.382950 -136.388763 21.255798 1.000000 1.000000 1.000000 +vn -0.268187 0.612781 -0.743354 +v 156.040115 -137.330612 20.680000 1.000000 1.000000 1.000000 +vn -0.017601 0.306254 -0.951787 +v 156.172729 -137.555252 20.528999 1.000000 1.000000 1.000000 +vn -0.321189 0.805511 -0.497986 +v 156.622055 -136.697128 21.139599 1.000000 1.000000 1.000000 +vn -0.412927 0.892821 -0.179895 +v 156.566696 -136.565964 21.532799 1.000000 1.000000 1.000000 +vn -0.275398 0.944215 -0.180594 +v 157.345627 -136.250626 21.648998 1.000000 1.000000 1.000000 +vn -0.129403 0.974852 -0.181435 +v 158.147720 -136.059464 21.763599 1.000000 1.000000 1.000000 +vn -0.455555 0.876573 0.155207 +v 156.561539 -136.553406 22.348198 1.000000 1.000000 1.000000 +vn -0.176535 0.971646 0.157287 +v 158.146439 -136.045502 22.579197 1.000000 1.000000 1.000000 +vn -0.320784 0.933982 0.157399 +v 157.341766 -136.238068 22.464397 1.000000 1.000000 1.000000 +vn -0.538809 0.823396 -0.178057 +v 155.841843 -136.992935 21.417599 1.000000 1.000000 1.000000 +vn -0.449559 0.762666 -0.465014 +v 155.912659 -137.114334 21.024399 1.000000 1.000000 1.000000 +vn -0.652992 0.736311 -0.177335 +v 155.174927 -137.528748 21.301800 1.000000 1.000000 1.000000 +vn -0.578318 0.801078 0.154349 +v 155.834122 -136.981766 22.233200 1.000000 1.000000 1.000000 +vn -0.564863 0.678370 -0.469834 +v 155.262482 -137.638977 20.908600 1.000000 1.000000 1.000000 +vn -0.688125 0.709453 0.152188 +v 155.167206 -137.518982 22.117199 1.000000 1.000000 1.000000 +vn -0.778462 0.609357 0.150603 +v 154.573669 -138.158035 22.000599 1.000000 1.000000 1.000000 +vn -0.749245 0.626778 -0.213967 +v 154.582687 -138.166412 21.185200 1.000000 1.000000 1.000000 +vn -0.650661 0.607661 0.455399 +v 155.265060 -137.643173 22.585598 1.000000 1.000000 1.000000 +vn -0.549770 0.677388 0.488772 +v 155.916519 -137.119919 22.701397 1.000000 1.000000 1.000000 +vn -0.737955 0.496620 0.456937 +v 154.686981 -138.265488 22.468998 1.000000 1.000000 1.000000 +vn -0.850267 0.500231 0.163754 +v 154.125626 -138.787338 21.898399 1.000000 1.000000 1.000000 +vn -0.726325 0.541884 -0.422864 +v 154.246658 -138.876633 20.689800 1.000000 1.000000 1.000000 +vn -0.884364 0.434608 -0.170341 +v 153.722656 -139.568726 20.967800 1.000000 1.000000 1.000000 +vn -0.830223 0.325405 0.452594 +v 153.847534 -139.635696 22.251598 1.000000 1.000000 1.000000 +vn -0.909367 0.388379 0.149044 +v 153.711060 -139.563141 21.783199 1.000000 1.000000 1.000000 +vn -0.572136 0.318407 0.755829 +v 154.865936 -138.434311 22.806599 1.000000 1.000000 1.000000 +vn -0.648864 0.190603 0.736645 +v 154.059982 -139.747330 22.589397 1.000000 1.000000 1.000000 +vn -0.859581 0.190243 0.474266 +v 153.544983 -140.451965 22.135399 1.000000 1.000000 1.000000 +vn -0.953245 0.263478 0.147994 +v 153.400787 -140.401733 21.667000 1.000000 1.000000 1.000000 +vn -0.938040 0.301866 -0.170173 +v 153.412369 -140.405930 20.851597 1.000000 1.000000 1.000000 +vn -0.770938 0.415967 -0.482314 +v 153.842377 -139.632904 20.574600 1.000000 1.000000 1.000000 +vn -0.838159 0.310226 -0.448608 +v 153.538544 -140.450577 20.458397 1.000000 1.000000 1.000000 +vn -0.969760 0.175128 -0.169990 +v 153.214096 -141.283585 20.735197 1.000000 1.000000 1.000000 +vn -0.979725 0.135990 0.147127 +v 153.201218 -141.282196 21.550598 1.000000 1.000000 1.000000 +vn -0.892492 0.083117 0.443340 +v 153.350571 -141.310104 22.018997 1.000000 1.000000 1.000000 +vn -0.649391 -0.011449 0.760369 +v 153.584885 -141.353363 22.356598 1.000000 1.000000 1.000000 +vn -0.880406 -0.037949 0.472699 +v 153.270737 -142.179398 21.903599 1.000000 1.000000 1.000000 +vn -0.984458 0.048062 -0.168915 +v 153.132980 -142.175201 20.619797 1.000000 1.000000 1.000000 +vn -0.989197 0.007409 0.146407 +v 153.120117 -142.175201 21.435200 1.000000 1.000000 1.000000 +vn -0.872389 0.197021 -0.447348 +v 153.345428 -141.308716 20.341999 1.000000 1.000000 1.000000 +vn -0.876037 0.085461 -0.474611 +v 153.265594 -142.179398 20.226597 1.000000 1.000000 1.000000 +vn -0.982477 -0.080125 -0.168285 +v 153.166458 -143.069626 20.504398 1.000000 1.000000 1.000000 +vn -0.981701 -0.120643 0.147340 +v 153.153580 -143.071014 21.320000 1.000000 1.000000 1.000000 +vn -0.963234 -0.208551 -0.169374 +v 153.317093 -143.951462 20.388798 1.000000 1.000000 1.000000 +vn -0.957195 -0.248879 0.147774 +v 153.304214 -143.955658 21.204399 1.000000 1.000000 1.000000 +vn -0.895505 -0.034944 -0.443678 +v 153.297775 -143.054276 20.111397 1.000000 1.000000 1.000000 +vn -0.689247 0.046614 -0.723026 +v 153.533386 -143.024963 19.766800 1.000000 1.000000 1.000000 +vn -0.882480 -0.151430 -0.445306 +v 153.445847 -143.916580 19.995800 1.000000 1.000000 1.000000 +vn -0.626188 -0.063868 -0.777052 +v 153.675018 -143.851013 19.651199 1.000000 1.000000 1.000000 +vn -0.297229 0.122262 -0.946946 +v 153.779297 -142.995667 19.615799 1.000000 1.000000 1.000000 +vn -0.218601 0.213161 -0.952248 +v 153.999451 -140.611038 19.962997 1.000000 1.000000 1.000000 +vn 0.144019 0.253505 -0.956553 +v 154.683105 -145.136108 19.273998 1.000000 1.000000 1.000000 +vn -0.600599 0.178993 -0.779258 +v 153.579742 -141.351959 19.997597 1.000000 1.000000 1.000000 +vn -0.619402 0.300315 -0.725364 +v 153.765137 -140.528717 20.113998 1.000000 1.000000 1.000000 +vn -0.153155 0.269381 -0.950777 +v 154.647064 -139.169662 20.194199 1.000000 1.000000 1.000000 +vn -0.504992 0.455787 -0.732967 +v 154.442352 -139.020370 20.345398 1.000000 1.000000 1.000000 +vn -0.364025 0.502255 -0.784364 +v 155.416977 -137.832932 20.563999 1.000000 1.000000 1.000000 +vn -0.021531 0.245633 -0.969124 +v 156.047852 -146.760269 18.940998 1.000000 1.000000 1.000000 +vn -0.024729 0.374093 -0.927061 +v 157.295410 -147.478867 18.709797 1.000000 1.000000 1.000000 +vn 0.449443 0.573248 -0.685119 +v 155.722107 -146.163071 19.177200 1.000000 1.000000 1.000000 +vn -0.070768 0.148644 -0.986355 +v 158.683319 -147.791428 18.477997 1.000000 1.000000 1.000000 +vn -0.387749 0.419846 -0.820597 +v 161.240250 -146.968185 18.165798 1.000000 1.000000 1.000000 +vn -0.222307 0.602646 -0.766419 +v 159.377274 -147.550034 18.497597 1.000000 1.000000 1.000000 +vn -0.716736 0.494877 -0.491311 +v 162.489105 -145.942612 17.907200 1.000000 1.000000 1.000000 +vn 0.472069 0.743341 -0.473915 +v 156.315643 -146.359818 19.411598 1.000000 1.000000 1.000000 +vn 0.530003 0.419398 -0.737023 +v 154.871078 -145.014709 19.409798 1.000000 1.000000 1.000000 +vn 0.680881 0.610495 -0.404595 +v 155.442734 -145.458435 19.628597 1.000000 1.000000 1.000000 +vn 0.203620 0.803787 -0.558986 +v 157.451187 -147.012833 19.180399 1.000000 1.000000 1.000000 +vn -0.027445 0.880995 -0.472328 +v 158.711639 -147.297485 18.948595 1.000000 1.000000 1.000000 +vn 0.304745 0.923970 -0.231107 +v 157.498840 -146.871902 19.577797 1.000000 1.000000 1.000000 +vn 0.039560 0.972113 -0.231151 +v 158.720657 -147.146790 19.345997 1.000000 1.000000 1.000000 +vn -0.298145 0.851109 -0.432114 +v 159.937317 -147.203995 18.727398 1.000000 1.000000 1.000000 +vn -0.255062 0.934962 -0.246556 +v 159.908997 -147.056091 19.124798 1.000000 1.000000 1.000000 +vn -0.488663 0.726660 -0.482881 +v 161.129532 -146.740738 18.500599 1.000000 1.000000 1.000000 +vn -0.504673 0.841297 -0.193715 +v 161.065155 -146.606781 18.897999 1.000000 1.000000 1.000000 +vn -0.333587 0.942239 0.030091 +v 160.487076 -146.821671 19.465199 1.000000 1.000000 1.000000 +vn -0.123866 0.992281 0.005888 +v 159.345078 -147.088181 19.684599 1.000000 1.000000 1.000000 +vn -0.651289 0.758824 -0.003087 +v 161.730774 -146.068192 19.202599 1.000000 1.000000 1.000000 +vn -0.612968 0.746700 -0.258284 +v 161.762970 -146.112839 18.747799 1.000000 1.000000 1.000000 +vn -0.455260 0.872351 0.178165 +v 161.062576 -146.601212 19.783398 1.000000 1.000000 1.000000 +vn -0.634504 0.648792 -0.420088 +v 161.849228 -146.230057 18.350197 1.000000 1.000000 1.000000 +vn -0.784099 0.619614 -0.035600 +v 162.178833 -145.623077 19.094200 1.000000 1.000000 1.000000 +vn -0.684663 0.496963 -0.533165 +v 162.316589 -145.765411 18.241997 1.000000 1.000000 1.000000 +vn -0.832002 0.507907 -0.223167 +v 162.604980 -145.150055 18.533600 1.000000 1.000000 1.000000 +vn -0.897111 0.434460 0.080225 +v 162.879211 -144.565414 18.885399 1.000000 1.000000 1.000000 +vn -0.526859 0.742819 0.413085 +v 161.841507 -146.218887 20.026798 1.000000 1.000000 1.000000 +vn -0.544905 0.802557 0.242860 +v 161.759109 -146.107254 19.633198 1.000000 1.000000 1.000000 +vn -0.952321 0.305031 -0.006370 +v 163.122543 -143.964035 18.783199 1.000000 1.000000 1.000000 +vn -0.718839 0.561785 0.409473 +v 162.707977 -145.229599 19.812798 1.000000 1.000000 1.000000 +vn -0.576987 0.636679 0.511592 +v 162.307571 -145.754242 19.918598 1.000000 1.000000 1.000000 +vn -0.571983 0.569311 0.590525 +v 162.477524 -145.931442 20.266197 1.000000 1.000000 1.000000 +vn -0.567315 0.402821 0.718254 +v 163.243576 -144.773315 20.057400 1.000000 1.000000 1.000000 +vn -0.775353 0.456832 0.436043 +v 163.034988 -144.654709 19.709599 1.000000 1.000000 1.000000 +vn -0.658415 0.228410 0.717160 +v 163.694183 -143.410080 19.853201 1.000000 1.000000 1.000000 +vn -0.844581 0.355867 0.400052 +v 163.288635 -144.028214 19.607597 1.000000 1.000000 1.000000 +vn -0.984519 0.169071 0.046243 +v 163.289917 -143.319382 18.681198 1.000000 1.000000 1.000000 +vn -0.887409 0.222042 0.403983 +v 163.462448 -143.358444 19.505600 1.000000 1.000000 1.000000 +vn -0.698576 0.040862 0.714368 +v 163.781738 -141.992416 19.660397 1.000000 1.000000 1.000000 +vn -0.909485 0.125122 0.396462 +v 163.547424 -142.683121 19.407597 1.000000 1.000000 1.000000 +vn -0.996620 -0.061532 0.054426 +v 163.369751 -142.023117 18.488400 1.000000 1.000000 1.000000 +vn -0.968579 -0.075582 -0.236942 +v 163.421249 -142.018921 18.033600 1.000000 1.000000 1.000000 +vn -0.967555 0.135047 -0.213541 +v 163.340134 -143.330551 18.226398 1.000000 1.000000 1.000000 +vn -0.948481 -0.315236 -0.031795 +v 163.117401 -140.739410 18.301598 1.000000 1.000000 1.000000 +vn -0.842801 0.012854 -0.538072 +v 163.475311 -143.361252 17.828999 1.000000 1.000000 1.000000 +vn -0.882988 -0.091022 -0.460485 +v 163.560287 -142.009171 17.635998 1.000000 1.000000 1.000000 +vn -0.806282 0.345375 -0.480235 +v 163.047867 -144.660309 18.032997 1.000000 1.000000 1.000000 +vn -0.672284 0.366467 -0.643223 +v 162.911407 -145.388657 17.801399 1.000000 1.000000 1.000000 +vn -0.292444 0.009097 -0.956240 +v 163.452148 -144.891922 17.562399 1.000000 1.000000 1.000000 +vn -0.553923 -0.617012 -0.558986 +v 163.708359 -143.414261 17.494198 1.000000 1.000000 1.000000 +vn -0.242933 -0.115492 -0.963143 +v 164.016052 -141.974274 17.165398 1.000000 1.000000 1.000000 +vn -0.670532 -0.135423 -0.729415 +v 163.797195 -141.991028 17.301399 1.000000 1.000000 1.000000 +vn -0.718341 -0.354500 -0.598595 +v 163.520386 -140.581741 17.114397 1.000000 1.000000 1.000000 +vn -0.880691 -0.232836 -0.412517 +v 163.472748 -141.333817 17.542198 1.000000 1.000000 1.000000 +vn -0.798543 -0.398412 -0.451216 +v 163.180496 -140.355682 17.404400 1.000000 1.000000 1.000000 +vn -0.901170 -0.354885 -0.248895 +v 163.053024 -140.417099 17.801998 1.000000 1.000000 1.000000 +vn -0.853135 -0.521528 0.013020 +v 162.724716 -139.860352 18.167797 1.000000 1.000000 1.000000 +vn -0.913882 -0.018346 0.405565 +v 163.546127 -142.009171 19.312599 1.000000 1.000000 1.000000 +vn -0.876001 -0.125248 0.465764 +v 163.459869 -141.336609 19.218800 1.000000 1.000000 1.000000 +vn -0.931466 -0.278309 0.234342 +v 163.047867 -140.418488 18.687399 1.000000 1.000000 1.000000 +vn -0.678754 -0.153829 0.718074 +v 163.383911 -140.258011 19.428799 1.000000 1.000000 1.000000 +vn -0.866531 -0.245531 0.434555 +v 163.167618 -140.361282 19.080997 1.000000 1.000000 1.000000 +vn -0.817857 -0.510956 0.264640 +v 162.413147 -139.303604 18.511997 1.000000 1.000000 1.000000 +vn -0.594245 -0.348356 0.724928 +v 162.695099 -139.049667 19.253399 1.000000 1.000000 1.000000 +vn -0.344781 0.813256 0.468764 +v 161.123093 -146.726791 20.176998 1.000000 1.000000 1.000000 +vn -0.017515 0.662318 0.749018 +v 159.982391 -147.439804 20.751598 1.000000 1.000000 1.000000 +vn -0.096132 0.878325 0.468298 +v 159.934738 -147.190033 20.403999 1.000000 1.000000 1.000000 +vn 0.168740 0.648362 0.742397 +v 158.697479 -147.538864 20.972797 1.000000 1.000000 1.000000 +vn 0.123111 0.881416 0.456014 +v 158.712936 -147.283524 20.625198 1.000000 1.000000 1.000000 +vn 0.280088 0.860838 0.424862 +v 158.078201 -147.190033 20.740398 1.000000 1.000000 1.000000 +vn 0.361213 0.577467 0.732159 +v 157.375229 -147.240280 21.204597 1.000000 1.000000 1.000000 +vn 0.092952 0.995519 0.017363 +v 158.724518 -147.092361 19.800800 1.000000 1.000000 1.000000 +vn 0.391873 0.816341 0.424291 +v 157.455048 -146.998871 20.856998 1.000000 1.000000 1.000000 +vn 0.527470 0.741563 0.414558 +v 156.865387 -146.715622 20.973198 1.000000 1.000000 1.000000 +vn 0.533859 0.430849 0.727574 +v 156.185593 -146.555161 21.435999 1.000000 1.000000 1.000000 +vn 0.343582 0.937836 0.049142 +v 157.515579 -146.818878 20.032597 1.000000 1.000000 1.000000 +vn 0.650598 0.613600 0.447457 +v 156.324646 -146.348648 21.088200 1.000000 1.000000 1.000000 +vn 0.510288 0.859365 0.033145 +v 156.949081 -146.546783 20.148800 1.000000 1.000000 1.000000 +vn 0.764768 0.564622 0.310372 +v 155.454300 -145.450058 21.305199 1.000000 1.000000 1.000000 +vn 0.680563 0.731553 -0.040784 +v 156.015656 -145.822617 20.364397 1.000000 1.000000 1.000000 +vn 0.558436 0.794514 -0.238530 +v 156.398041 -146.238419 19.809200 1.000000 1.000000 1.000000 +vn 0.749567 0.466033 -0.470067 +v 155.075790 -144.883545 19.744598 1.000000 1.000000 1.000000 +vn -0.883532 -0.150291 0.443604 +v 153.304214 -143.052872 21.788200 1.000000 1.000000 1.000000 +vn -0.514926 0.389024 0.763879 +v 155.419556 -137.838516 22.923199 1.000000 1.000000 1.000000 +vn -0.189836 0.263979 0.945662 +v 158.235275 -136.701309 23.525799 1.000000 1.000000 1.000000 +vn -0.369643 0.514500 0.773727 +v 156.722473 -136.937119 23.154400 1.000000 1.000000 1.000000 +vn -0.448461 0.764482 0.463088 +v 156.623352 -136.702713 22.816595 1.000000 1.000000 1.000000 +vn -0.211015 0.632088 0.745612 +v 158.203079 -136.461319 23.385197 1.000000 1.000000 1.000000 +vn -0.329618 0.804079 0.494782 +v 157.385529 -136.395737 22.932800 1.000000 1.000000 1.000000 +vn -0.045808 0.351920 0.934909 +v 160.448456 -136.860382 23.872799 1.000000 1.000000 1.000000 +vn -0.032323 0.623677 0.781014 +v 159.745483 -136.454330 23.615799 1.000000 1.000000 1.000000 +vn -0.203837 0.860261 0.467335 +v 158.168320 -136.207367 23.047398 1.000000 1.000000 1.000000 +vn -0.073981 0.864041 0.497955 +v 158.972992 -136.141785 23.162800 1.000000 1.000000 1.000000 +vn -0.026804 0.987197 0.157236 +v 158.971710 -135.978531 22.694395 1.000000 1.000000 1.000000 +vn 0.063624 0.880462 0.469828 +v 159.777664 -136.198990 23.278198 1.000000 1.000000 1.000000 +vn 0.122216 0.979984 0.157145 +v 159.798264 -136.037140 22.809799 1.000000 1.000000 1.000000 +vn 0.019974 0.983229 -0.181280 +v 158.971710 -135.992477 21.878998 1.000000 1.000000 1.000000 +vn 0.168025 0.969049 -0.180861 +v 159.796982 -136.051086 21.994400 1.000000 1.000000 1.000000 +vn 0.321564 0.823238 -0.467841 +v 160.575912 -136.373413 21.717598 1.000000 1.000000 1.000000 +vn 0.312441 0.932640 -0.180451 +v 160.613251 -136.235275 22.110798 1.000000 1.000000 1.000000 +vn 0.459473 0.870363 -0.177069 +v 161.394745 -136.542252 22.226997 1.000000 1.000000 1.000000 +vn 0.409580 0.898592 0.157406 +v 161.399902 -136.529694 23.042400 1.000000 1.000000 1.000000 +vn 0.269520 0.949942 0.158014 +v 160.617111 -136.221313 22.926197 1.000000 1.000000 1.000000 +vn 0.188246 0.845677 0.499393 +v 160.574631 -136.380386 23.394600 1.000000 1.000000 1.000000 +vn 0.337919 0.813482 0.473347 +v 161.338104 -136.680389 23.510799 1.000000 1.000000 1.000000 +vn 0.530504 0.830433 0.170138 +v 162.129898 -136.952469 23.157597 1.000000 1.000000 1.000000 +vn 0.193261 0.626014 0.755485 +v 161.242828 -136.914795 23.848598 1.000000 1.000000 1.000000 +vn 0.521617 0.714051 0.466956 +v 162.629440 -137.542694 23.728201 1.000000 1.000000 1.000000 +vn 0.658885 0.721305 -0.213516 +v 162.718277 -137.426880 22.444395 1.000000 1.000000 1.000000 +vn 0.641504 0.751458 0.154220 +v 162.725998 -137.415726 23.259800 1.000000 1.000000 1.000000 +vn 0.611940 0.589807 0.526931 +v 163.224258 -138.148285 23.844801 1.000000 1.000000 1.000000 +vn 0.738861 0.656389 0.152437 +v 163.334976 -138.036652 23.376400 1.000000 1.000000 1.000000 +vn 0.342992 0.541572 0.767500 +v 162.480087 -137.740845 24.065798 1.000000 1.000000 1.000000 +vn 0.670782 0.527323 0.521520 +v 163.728943 -138.834778 23.960598 1.000000 1.000000 1.000000 +vn 0.823323 0.547052 0.151243 +v 163.853836 -138.741287 23.492397 1.000000 1.000000 1.000000 +vn 0.268832 0.355770 0.895074 +v 163.349152 -139.118042 24.438999 1.000000 1.000000 1.000000 +vn 0.059255 0.339893 0.938595 +v 161.804169 -137.513397 24.104198 1.000000 1.000000 1.000000 +vn 0.533004 0.357816 0.766729 +v 163.925934 -139.701279 24.413601 1.000000 1.000000 1.000000 +vn 0.785425 0.426155 0.448888 +v 164.137085 -139.586868 24.075798 1.000000 1.000000 1.000000 +vn 0.890009 0.430602 0.149887 +v 164.273560 -139.514313 23.607397 1.000000 1.000000 1.000000 +vn 0.272847 0.182285 0.944630 +v 164.193726 -141.332428 24.784998 1.000000 1.000000 1.000000 +vn 0.654971 0.210379 0.725778 +v 164.413895 -141.289169 24.644398 1.000000 1.000000 1.000000 +vn 0.819861 0.316801 0.476933 +v 164.447357 -140.401733 24.191998 1.000000 1.000000 1.000000 +vn 0.939345 0.309128 0.148564 +v 164.591553 -140.348709 23.723598 1.000000 1.000000 1.000000 +vn 0.371752 0.054554 0.926728 +v 164.124207 -143.735199 25.131998 1.000000 1.000000 1.000000 +vn 0.364399 -0.040843 0.930347 +v 163.566727 -145.226807 25.363398 1.000000 1.000000 1.000000 +vn 0.764255 0.621063 -0.173766 +v 163.325974 -138.046417 22.560999 1.000000 1.000000 1.000000 +vn 0.704787 0.538372 -0.461986 +v 163.228119 -138.144089 22.167797 1.000000 1.000000 1.000000 +vn 0.636446 0.261465 -0.725653 +v 163.538406 -138.977097 21.939198 1.000000 1.000000 1.000000 +vn 0.783803 0.426831 -0.451074 +v 163.734100 -138.830597 22.283600 1.000000 1.000000 1.000000 +vn 0.843232 0.509339 -0.171852 +v 163.843536 -138.749664 22.676800 1.000000 1.000000 1.000000 +vn 0.822474 0.308283 -0.478014 +v 164.142227 -139.584076 22.398800 1.000000 1.000000 1.000000 +vn 0.904262 0.391121 -0.171274 +v 164.261963 -139.519882 22.792000 1.000000 1.000000 1.000000 +vn -0.459515 0.495236 0.737284 +v 156.101913 -137.295731 38.495537 1.000000 1.000000 1.000000 +vn -0.556048 0.325095 0.764934 +v 154.918732 -138.370132 38.264740 1.000000 1.000000 1.000000 +vn -0.193380 0.304463 0.932688 +v 158.307373 -136.691544 38.983337 1.000000 1.000000 1.000000 +vn -0.297949 0.556543 0.775556 +v 157.514282 -136.621780 38.726341 1.000000 1.000000 1.000000 +vn -0.652250 0.091244 0.752492 +v 153.766418 -140.546844 37.917137 1.000000 1.000000 1.000000 +vn -0.769527 0.378294 0.514512 +v 154.246658 -138.886414 37.811939 1.000000 1.000000 1.000000 +vn -0.800384 0.301572 0.518111 +v 153.842377 -139.648254 37.695938 1.000000 1.000000 1.000000 +vn -0.874468 0.180247 0.450351 +v 153.539825 -140.468719 37.579338 1.000000 1.000000 1.000000 +vn -0.674285 -0.063491 0.735737 +v 153.510223 -142.098465 37.699738 1.000000 1.000000 1.000000 +vn -0.893613 -0.007808 0.448770 +v 153.273331 -142.087311 37.361938 1.000000 1.000000 1.000000 +vn -0.868744 -0.141195 0.474708 +v 153.296494 -142.967758 37.245941 1.000000 1.000000 1.000000 +vn -0.976624 0.142624 0.160822 +v 153.216660 -141.190109 37.008938 1.000000 1.000000 1.000000 +vn -0.988961 0.020932 0.146690 +v 153.122681 -142.080322 36.893738 1.000000 1.000000 1.000000 +vn -0.982984 -0.108571 0.148171 +v 153.144562 -142.983109 36.777538 1.000000 1.000000 1.000000 +vn -0.983350 0.071691 -0.166983 +v 153.135559 -142.080322 36.078140 1.000000 1.000000 1.000000 +vn -0.983194 -0.067979 -0.169439 +v 153.157440 -142.981705 35.961937 1.000000 1.000000 1.000000 +vn -0.952843 0.265335 0.147267 +v 153.395630 -140.418488 37.111137 1.000000 1.000000 1.000000 +vn -0.933363 0.292025 -0.208698 +v 153.408508 -140.422668 36.295540 1.000000 1.000000 1.000000 +vn -0.910296 0.386343 0.148662 +v 153.705917 -139.575699 37.227737 1.000000 1.000000 1.000000 +vn -0.889898 0.422409 -0.172197 +v 153.717499 -139.582687 36.412140 1.000000 1.000000 1.000000 +vn -0.791664 0.405048 -0.457389 +v 153.837234 -139.645477 36.019138 1.000000 1.000000 1.000000 +vn -0.882939 0.224017 -0.412596 +v 153.359573 -141.219406 35.800339 1.000000 1.000000 1.000000 +vn -0.874693 0.096680 -0.474938 +v 153.268173 -142.087311 35.685139 1.000000 1.000000 1.000000 +vn -0.650001 0.228846 -0.724657 +v 153.592606 -141.265442 35.455799 1.000000 1.000000 1.000000 +vn -0.541081 0.322258 -0.776776 +v 154.049667 -139.757095 35.674538 1.000000 1.000000 1.000000 +vn -0.722751 0.520519 -0.454632 +v 154.241516 -138.883621 36.134941 1.000000 1.000000 1.000000 +vn -0.502229 0.457145 -0.734019 +v 154.438492 -139.025940 35.790337 1.000000 1.000000 1.000000 +vn -0.145605 0.272748 -0.951004 +v 154.641907 -139.175247 35.639336 1.000000 1.000000 1.000000 +vn -0.252537 0.190712 -0.948606 +v 153.835953 -141.314285 35.304798 1.000000 1.000000 1.000000 +vn -0.692568 0.047029 -0.719818 +v 153.525665 -142.942642 35.224396 1.000000 1.000000 1.000000 +vn -0.012905 0.305547 -0.952089 +v 156.229370 -137.517578 35.985336 1.000000 1.000000 1.000000 +vn -0.290034 0.116217 -0.949934 +v 153.771576 -142.916138 35.073399 1.000000 1.000000 1.000000 +vn 0.148621 0.252268 -0.956176 +v 154.648346 -145.071930 34.731400 1.000000 1.000000 1.000000 +vn -0.626425 -0.056229 -0.777451 +v 153.658279 -143.777054 35.107998 1.000000 1.000000 1.000000 +vn -0.844055 -0.245055 -0.476989 +v 153.675018 -144.671463 35.337196 1.000000 1.000000 1.000000 +vn -0.014049 0.249191 -0.968352 +v 156.056854 -146.768646 34.385399 1.000000 1.000000 1.000000 +vn -0.100533 0.254436 -0.961850 +v 157.915970 -147.674225 34.050598 1.000000 1.000000 1.000000 +vn -0.177546 0.214387 -0.960477 +v 159.325775 -147.792816 33.819397 1.000000 1.000000 1.000000 +vn -0.263745 0.144305 -0.953737 +v 161.358704 -147.169113 33.472198 1.000000 1.000000 1.000000 +vn -0.072174 0.667628 -0.740988 +v 158.630524 -147.550034 34.071396 1.000000 1.000000 1.000000 +vn -0.304119 0.684454 -0.662597 +v 159.987534 -147.455154 33.838799 1.000000 1.000000 1.000000 +vn 0.111732 0.869869 -0.480462 +v 158.015121 -147.190033 34.521198 1.000000 1.000000 1.000000 +vn -0.125409 0.875494 -0.466671 +v 159.296158 -147.297485 34.290001 1.000000 1.000000 1.000000 +vn 0.174015 0.695979 -0.696658 +v 157.388107 -147.262604 34.288799 1.000000 1.000000 1.000000 +vn 0.502356 0.765710 -0.401654 +v 156.324646 -146.366791 34.855999 1.000000 1.000000 1.000000 +vn 0.348154 0.740987 -0.574218 +v 156.873123 -146.736557 34.739998 1.000000 1.000000 1.000000 +vn 0.461683 0.577615 -0.673209 +v 155.668030 -146.105865 34.636398 1.000000 1.000000 1.000000 +vn 0.536196 0.412840 -0.736245 +v 154.837616 -144.954712 34.867199 1.000000 1.000000 1.000000 +vn 0.679264 0.594736 -0.429988 +v 155.400238 -145.399826 35.087399 1.000000 1.000000 1.000000 +vn 0.755246 0.456407 -0.470421 +v 155.043610 -144.824951 35.201996 1.000000 1.000000 1.000000 +vn 0.782473 0.555905 -0.280545 +v 155.510971 -145.307739 35.484798 1.000000 1.000000 1.000000 +vn 0.705807 0.706600 0.050524 +v 155.965439 -145.772385 35.823338 1.000000 1.000000 1.000000 +vn 0.500050 0.865954 -0.008613 +v 156.961960 -146.553757 35.592400 1.000000 1.000000 1.000000 +vn 0.855555 0.465532 -0.226508 +v 155.164627 -144.750992 35.599396 1.000000 1.000000 1.000000 +vn 0.325306 0.945588 0.006362 +v 157.532303 -146.824463 35.475800 1.000000 1.000000 1.000000 +vn 0.617311 0.648957 0.444727 +v 156.333664 -146.355621 36.532539 1.000000 1.000000 1.000000 +vn 0.729668 0.598927 0.329956 +v 155.843124 -145.910522 36.647739 1.000000 1.000000 1.000000 +vn 0.187782 0.950820 -0.246331 +v 158.044724 -147.043533 34.918800 1.000000 1.000000 1.000000 +vn 0.098483 0.994594 0.032918 +v 158.664001 -147.088181 35.258400 1.000000 1.000000 1.000000 +vn 0.471799 0.822124 0.318620 +v 156.879547 -146.723999 36.416538 1.000000 1.000000 1.000000 +vn -0.067900 0.969948 -0.233648 +v 159.287140 -147.148178 34.687401 1.000000 1.000000 1.000000 +vn -0.077564 0.996974 0.005234 +v 159.283279 -147.092361 35.142197 1.000000 1.000000 1.000000 +vn 0.339233 0.821461 0.458392 +v 158.017685 -147.176086 36.197739 1.000000 1.000000 1.000000 +vn 0.308158 0.599982 0.738282 +v 157.966187 -147.425842 36.545540 1.000000 1.000000 1.000000 +vn 0.160070 0.890093 0.426745 +v 158.649841 -147.279343 36.082718 1.000000 1.000000 1.000000 +vn 0.064622 0.671944 0.737778 +v 159.310318 -147.538864 36.314117 1.000000 1.000000 1.000000 +vn 0.033331 0.890023 0.454695 +v 159.294861 -147.283524 35.966518 1.000000 1.000000 1.000000 +vn -0.242504 0.970094 0.010422 +v 159.899979 -147.000275 35.025799 1.000000 1.000000 1.000000 +vn -0.176295 0.922279 0.343980 +v 159.936035 -147.188644 35.849918 1.000000 1.000000 1.000000 +vn -0.240128 0.898126 0.368387 +v 160.552734 -146.998871 35.734718 1.000000 1.000000 1.000000 +vn -0.483911 0.873716 0.049499 +v 161.054855 -146.549576 34.794998 1.000000 1.000000 1.000000 +vn -0.226085 0.644609 0.730318 +v 161.247971 -146.944458 35.966938 1.000000 1.000000 1.000000 +vn -0.392138 0.816480 0.423779 +v 161.138535 -146.718414 35.619316 1.000000 1.000000 1.000000 +vn -0.493720 0.837158 -0.235387 +v 161.079315 -146.598419 34.340199 1.000000 1.000000 1.000000 +vn -0.588132 0.756760 -0.285333 +v 161.604599 -146.242599 34.225601 1.000000 1.000000 1.000000 +vn -0.737840 0.673003 0.051570 +v 162.048782 -145.765411 34.564198 1.000000 1.000000 1.000000 +vn -0.530178 0.765081 0.365463 +v 161.677994 -146.352844 35.504601 1.000000 1.000000 1.000000 +vn -0.629338 0.701737 0.333913 +v 162.172379 -145.903549 35.388397 1.000000 1.000000 1.000000 +vn -0.485080 0.493485 0.721921 +v 162.785217 -145.544937 35.620918 1.000000 1.000000 1.000000 +vn -0.623475 0.650392 -0.433900 +v 161.685715 -146.364014 33.827999 1.000000 1.000000 1.000000 +vn -0.882335 0.470551 -0.008233 +v 162.803253 -144.713318 34.333199 1.000000 1.000000 1.000000 +vn -0.481561 0.731541 -0.482645 +v 161.143692 -146.730972 33.942799 1.000000 1.000000 1.000000 +vn -0.431487 0.511469 -0.743114 +v 161.255707 -146.959808 33.607998 1.000000 1.000000 1.000000 +vn -0.600785 0.440595 -0.667034 +v 162.346191 -146.098892 33.377197 1.000000 1.000000 1.000000 +vn -0.786625 0.478323 -0.390421 +v 162.610138 -145.395645 33.596798 1.000000 1.000000 1.000000 +vn -0.950253 0.311396 0.007140 +v 163.073624 -144.104950 34.216599 1.000000 1.000000 1.000000 +vn -0.677460 0.587311 0.442847 +v 162.598541 -145.387268 35.273399 1.000000 1.000000 1.000000 +vn -0.840407 0.447408 0.305846 +v 162.957748 -144.808197 35.157398 1.000000 1.000000 1.000000 +vn -0.954055 0.190727 -0.231087 +v 163.291214 -143.556595 33.659599 1.000000 1.000000 1.000000 +vn -0.992943 0.113990 0.032710 +v 163.354294 -142.888229 33.999199 1.000000 1.000000 1.000000 +vn -0.760702 0.333708 -0.556751 +v 162.969345 -144.815186 33.480797 1.000000 1.000000 1.000000 +vn -0.720183 0.179267 -0.670224 +v 163.471451 -144.276581 33.029598 1.000000 1.000000 1.000000 +vn -0.883491 0.126581 -0.451023 +v 163.426392 -143.594269 33.262001 1.000000 1.000000 1.000000 +vn -0.975626 -0.028463 -0.217585 +v 163.430267 -142.214279 33.428200 1.000000 1.000000 1.000000 +vn -0.999368 -0.035165 0.005164 +v 163.378754 -142.215668 33.882999 1.000000 1.000000 1.000000 +vn -0.837947 0.325521 0.438042 +v 163.413528 -143.590073 34.938599 1.000000 1.000000 1.000000 +vn -0.624320 0.298393 0.721932 +v 163.641403 -143.654266 35.286400 1.000000 1.000000 1.000000 +vn -0.900996 0.167827 0.400051 +v 163.529388 -142.909149 34.823601 1.000000 1.000000 1.000000 +vn -0.697734 0.080262 0.711846 +v 163.792038 -142.203110 35.055000 1.000000 1.000000 1.000000 +vn -0.192518 0.206551 0.959309 +v 163.879593 -143.721237 35.440796 1.000000 1.000000 1.000000 +vn -0.245869 0.134109 0.959981 +v 164.037949 -142.194733 35.209599 1.000000 1.000000 1.000000 +vn -0.921683 -0.179104 0.344125 +v 163.336273 -140.839874 34.475601 1.000000 1.000000 1.000000 +vn -0.939271 -0.125059 0.319579 +v 163.490768 -141.513824 34.590797 1.000000 1.000000 1.000000 +vn -0.902022 0.058995 0.427639 +v 163.556427 -142.210083 34.707397 1.000000 1.000000 1.000000 +vn -0.984231 -0.176653 0.009064 +v 163.315674 -141.545914 33.766598 1.000000 1.000000 1.000000 +vn -0.872678 -0.241057 -0.424647 +v 163.503647 -141.511032 32.914200 1.000000 1.000000 1.000000 +vn -0.895660 -0.080734 -0.437350 +v 163.569305 -142.210083 33.030800 1.000000 1.000000 1.000000 +vn -0.699662 -0.041600 -0.713262 +v 163.779160 -142.939850 32.812199 1.000000 1.000000 1.000000 +vn -0.306763 0.839909 -0.447716 +v 159.938599 -147.202606 34.173401 1.000000 1.000000 1.000000 +vn 0.788220 0.502134 0.355768 +v 155.411819 -145.390060 36.763741 1.000000 1.000000 1.000000 +vn -0.884284 -0.140118 -0.445430 +v 153.427811 -143.838440 35.452599 1.000000 1.000000 1.000000 +vn -0.895515 -0.023787 -0.444396 +v 153.290054 -142.967758 35.569000 1.000000 1.000000 1.000000 +vn -0.965760 -0.196477 -0.169425 +v 153.299072 -143.873337 35.845539 1.000000 1.000000 1.000000 +vn -0.259282 0.615669 -0.744127 +v 156.099350 -137.290146 36.136536 1.000000 1.000000 1.000000 +vn 0.114006 0.278450 -0.953660 +v 158.309937 -136.709686 36.332539 1.000000 1.000000 1.000000 +vn -0.342820 0.508505 -0.789871 +v 155.474915 -137.779907 36.021736 1.000000 1.000000 1.000000 +vn -0.087577 0.600035 -0.795166 +v 157.513000 -136.616211 36.367138 1.000000 1.000000 1.000000 +vn 0.027432 0.667939 -0.743710 +v 158.277756 -136.444580 36.483536 1.000000 1.000000 1.000000 +vn -0.192587 0.861123 -0.470507 +v 157.448624 -136.369232 36.711739 1.000000 1.000000 1.000000 +vn -0.310124 0.809761 -0.498107 +v 156.687714 -136.665039 36.596336 1.000000 1.000000 1.000000 +vn 0.078603 0.861589 -0.501484 +v 159.057968 -136.136200 36.944336 1.000000 1.000000 1.000000 +vn -0.060571 0.879606 -0.471831 +v 158.246857 -136.190628 36.828140 1.000000 1.000000 1.000000 +vn 0.230729 0.628780 -0.742563 +v 159.826599 -136.459915 36.714939 1.000000 1.000000 1.000000 +vn 0.224329 0.871035 -0.437007 +v 159.861359 -136.205963 37.059540 1.000000 1.000000 1.000000 +vn 0.338293 0.521121 -0.783575 +v 161.233810 -136.903641 36.933739 1.000000 1.000000 1.000000 +vn -0.116325 0.976248 -0.182781 +v 158.228836 -136.046906 37.221336 1.000000 1.000000 1.000000 +vn 0.047512 0.982489 -0.180161 +v 159.059265 -135.991089 37.337341 1.000000 1.000000 1.000000 +vn -0.262188 0.947848 -0.181223 +v 157.412567 -136.231094 37.104736 1.000000 1.000000 1.000000 +vn -0.308323 0.938326 0.156466 +v 157.408707 -136.217133 37.920338 1.000000 1.000000 1.000000 +vn -0.011600 0.987291 0.158501 +v 159.059265 -135.977142 38.152939 1.000000 1.000000 1.000000 +vn -0.162954 0.973937 0.157775 +v 158.227554 -136.032944 38.036739 1.000000 1.000000 1.000000 +vn 0.131293 0.976165 0.172813 +v 159.883240 -136.049683 38.268139 1.000000 1.000000 1.000000 +vn 0.300666 0.928232 -0.219057 +v 160.597794 -136.231094 37.554741 1.000000 1.000000 1.000000 +vn -0.192835 0.845426 0.498065 +v 158.246857 -136.196198 38.505138 1.000000 1.000000 1.000000 +vn -0.040279 0.877824 0.477287 +v 159.057968 -136.141785 38.621140 1.000000 1.000000 1.000000 +vn -0.319531 0.825272 0.465645 +v 157.449905 -136.374802 38.388538 1.000000 1.000000 1.000000 +vn -0.093382 0.647412 0.756397 +v 159.055405 -136.398529 38.958939 1.000000 1.000000 1.000000 +vn 0.174052 0.862101 0.475907 +v 160.559174 -136.376205 38.838539 1.000000 1.000000 1.000000 +vn 0.271163 0.949413 0.158387 +v 160.600372 -136.217133 38.370338 1.000000 1.000000 1.000000 +vn 0.321703 0.823741 0.466860 +v 161.326508 -136.674805 38.955139 1.000000 1.000000 1.000000 +vn 0.406711 0.899875 0.157513 +v 161.388306 -136.524109 38.486938 1.000000 1.000000 1.000000 +vn 0.070504 0.633575 0.770462 +v 160.496078 -136.623169 39.176338 1.000000 1.000000 1.000000 +vn 0.446280 0.876679 -0.179633 +v 161.383163 -136.536667 37.671341 1.000000 1.000000 1.000000 +vn 0.535716 0.829857 0.156033 +v 162.123459 -136.946899 38.602737 1.000000 1.000000 1.000000 +vn 0.164504 0.607903 0.776784 +v 161.231247 -136.909225 39.292938 1.000000 1.000000 1.000000 +vn 0.430329 0.755713 0.493674 +v 162.042358 -137.086426 39.071136 1.000000 1.000000 1.000000 +vn 0.063634 0.348031 0.935321 +v 161.799011 -137.509216 39.549339 1.000000 1.000000 1.000000 +vn -0.091641 0.335192 0.937683 +v 159.791840 -136.705505 39.214737 1.000000 1.000000 1.000000 +vn 0.345495 0.528612 0.775373 +v 162.541901 -137.796646 39.523941 1.000000 1.000000 1.000000 +vn 0.649691 0.744420 0.154079 +v 162.791672 -137.474335 38.717941 1.000000 1.000000 1.000000 +vn 0.550199 0.697049 0.459787 +v 162.693817 -137.599899 39.186138 1.000000 1.000000 1.000000 +vn 0.173636 0.268251 0.947571 +v 163.386475 -139.176636 39.895340 1.000000 1.000000 1.000000 +vn 0.516297 0.439670 0.734933 +v 163.573166 -139.041290 39.754738 1.000000 1.000000 1.000000 +vn 0.629893 0.605880 0.485947 +v 163.277054 -138.212463 39.302338 1.000000 1.000000 1.000000 +vn 0.747808 0.646057 0.152947 +v 163.390335 -138.103622 38.834137 1.000000 1.000000 1.000000 +vn 0.725485 0.519144 0.451842 +v 163.770157 -138.898956 39.417137 1.000000 1.000000 1.000000 +vn 0.830145 0.536814 0.150633 +v 163.895035 -138.806885 38.948738 1.000000 1.000000 1.000000 +vn -0.220271 0.179633 0.958756 +v 164.005768 -142.988678 40.477718 1.000000 1.000000 1.000000 +vn -0.262658 0.101629 0.959522 +v 163.971008 -141.453827 40.246319 1.000000 1.000000 1.000000 +vn -0.132996 0.236816 0.962409 +v 163.363312 -145.090057 40.812317 1.000000 1.000000 1.000000 +vn -0.435269 0.754059 0.491870 +v 156.690292 -136.670609 38.273140 1.000000 1.000000 1.000000 +vn -0.443679 0.882523 0.155895 +v 156.629776 -136.519928 37.804939 1.000000 1.000000 1.000000 +vn -0.546441 0.700455 0.459092 +v 155.977036 -137.078049 38.157936 1.000000 1.000000 1.000000 +vn -0.634779 0.601870 0.484571 +v 155.326843 -137.587357 38.043137 1.000000 1.000000 1.000000 +vn -0.568187 0.808297 0.154339 +v 155.897202 -136.938522 37.689537 1.000000 1.000000 1.000000 +vn -0.400135 0.898541 -0.180323 +v 156.634933 -136.532471 36.989338 1.000000 1.000000 1.000000 +vn -0.528782 0.829831 -0.178242 +v 155.903641 -136.949692 36.874138 1.000000 1.000000 1.000000 +vn -0.439528 0.768089 -0.465677 +v 155.973175 -137.072479 36.480938 1.000000 1.000000 1.000000 +vn -0.643039 0.745235 -0.176423 +v 155.238007 -137.472931 36.759338 1.000000 1.000000 1.000000 +vn -0.678179 0.718992 0.152066 +v 155.230286 -137.461761 37.574936 1.000000 1.000000 1.000000 +vn -0.547034 0.698042 -0.462052 +v 155.322983 -137.583160 36.366341 1.000000 1.000000 1.000000 +vn -0.741178 0.648032 -0.175242 +v 154.639343 -138.098038 36.643139 1.000000 1.000000 1.000000 +vn -0.771982 0.617403 0.151191 +v 154.629028 -138.089676 37.458740 1.000000 1.000000 1.000000 +vn -0.627378 0.606595 -0.488302 +v 154.738464 -138.194321 36.250137 1.000000 1.000000 1.000000 +vn -0.823865 0.539432 -0.173952 +v 154.130783 -138.802689 36.528137 1.000000 1.000000 1.000000 +vn -0.849467 0.505829 0.150145 +v 154.120483 -138.794312 37.343536 1.000000 1.000000 1.000000 +vn -0.722857 0.522810 0.451827 +v 154.742340 -138.198502 37.926941 1.000000 1.000000 1.000000 +vn 0.571130 0.801527 -0.177101 +v 162.115738 -136.958054 37.787338 1.000000 1.000000 1.000000 +vn 0.679669 0.712174 -0.175667 +v 162.782654 -137.485489 37.902336 1.000000 1.000000 1.000000 +vn 0.772471 0.610837 -0.173683 +v 163.381332 -138.112000 38.018539 1.000000 1.000000 1.000000 +vn 0.635782 0.599125 -0.486652 +v 162.697678 -137.595718 37.509338 1.000000 1.000000 1.000000 +vn 0.548358 0.697188 -0.461771 +v 162.046219 -137.080841 37.394138 1.000000 1.000000 1.000000 +vn 0.424263 0.771609 -0.473941 +v 161.329086 -136.669220 37.278339 1.000000 1.000000 1.000000 +vn 0.477757 0.481939 -0.734495 +v 161.920044 -137.298523 37.049736 1.000000 1.000000 1.000000 +vn 0.723154 0.519446 -0.455219 +v 163.282196 -138.208282 37.625538 1.000000 1.000000 1.000000 +vn 0.531137 0.326749 -0.781748 +v 163.104523 -138.379898 37.280937 1.000000 1.000000 1.000000 +vn 0.789188 0.417090 -0.450796 +v 163.774017 -138.894775 37.740139 1.000000 1.000000 1.000000 +vn 0.849677 0.498484 -0.171937 +v 163.884735 -138.815247 38.133339 1.000000 1.000000 1.000000 +vn -0.960077 -0.237025 0.148562 +v 153.286194 -143.876114 36.661140 1.000000 1.000000 1.000000 +vn -0.505982 -0.371961 0.778220 +v 154.395996 -145.613312 17.840797 1.000000 1.000000 1.000000 +vn -0.734039 -0.486091 0.474239 +v 154.197723 -145.754242 17.502998 1.000000 1.000000 1.000000 +vn -0.317683 -0.555212 0.768646 +v 156.005356 -147.353302 17.718197 1.000000 1.000000 1.000000 +vn -0.273773 -0.324991 0.905223 +v 155.501953 -146.636093 17.900597 1.000000 1.000000 1.000000 +vn -0.580863 -0.593322 0.557286 +v 155.196808 -147.010040 17.422199 1.000000 1.000000 1.000000 +vn -0.464486 -0.745815 0.477508 +v 155.876602 -147.569565 17.380398 1.000000 1.000000 1.000000 +vn -0.096282 -0.646399 0.756900 +v 158.022842 -148.222580 17.617798 1.000000 1.000000 1.000000 +vn -0.111222 -0.378656 0.918831 +v 157.382950 -147.799805 17.789997 1.000000 1.000000 1.000000 +vn -0.773919 -0.607366 0.179320 +v 154.541489 -146.524460 16.993599 1.000000 1.000000 1.000000 +vn -0.665349 -0.721271 0.192558 +v 155.096390 -147.132828 16.953999 1.000000 1.000000 1.000000 +vn -0.835249 -0.528089 0.153237 +v 154.070267 -145.843552 17.034798 1.000000 1.000000 1.000000 +vn -0.527835 -0.529200 -0.664332 +v 154.971497 -147.071442 16.327000 1.000000 1.000000 1.000000 +vn -0.562236 -0.816797 0.129359 +v 155.794205 -147.706314 16.911999 1.000000 1.000000 1.000000 +vn -0.299853 -0.680873 -0.668206 +v 156.780426 -148.300720 16.326599 1.000000 1.000000 1.000000 +vn -0.453677 -0.867668 0.203297 +v 156.471420 -148.119324 16.876999 1.000000 1.000000 1.000000 +vn -0.042158 -0.773297 -0.632640 +v 158.683319 -148.766754 16.326599 1.000000 1.000000 1.000000 +vn -0.176110 -0.973419 0.146429 +v 157.953308 -148.635605 16.811798 1.000000 1.000000 1.000000 +vn -0.302527 -0.938529 0.166253 +v 157.194992 -148.430496 16.843399 1.000000 1.000000 1.000000 +vn -0.289100 -0.780802 0.553868 +v 157.242630 -148.274216 17.311798 1.000000 1.000000 1.000000 +vn -0.123401 -0.875120 0.467907 +v 157.980347 -148.475143 17.279999 1.000000 1.000000 1.000000 +vn 0.088946 -0.988793 0.119903 +v 159.471252 -148.722107 16.754997 1.000000 1.000000 1.000000 +vn 0.087082 -0.873338 0.479267 +v 159.458374 -148.557465 17.223400 1.000000 1.000000 1.000000 +vn 0.104243 -0.635068 0.765390 +v 159.440353 -148.302124 17.561199 1.000000 1.000000 1.000000 +vn 0.023375 -0.317070 0.948114 +v 158.741241 -148.069092 17.729000 1.000000 1.000000 1.000000 +vn 0.829805 -0.432652 0.352472 +v 161.005936 -148.283981 16.993797 1.000000 1.000000 1.000000 +vn 0.640915 0.042412 0.766439 +v 160.792206 -147.650497 17.692600 1.000000 1.000000 1.000000 +vn 0.201878 -0.966229 0.160148 +v 160.234726 -148.599335 16.729000 1.000000 1.000000 1.000000 +vn 0.726290 -0.448274 -0.521107 +v 161.053574 -148.426300 16.326599 1.000000 1.000000 1.000000 +vn 0.533685 0.689323 0.489913 +v 162.677078 -137.583160 34.034401 1.000000 1.000000 1.000000 +vn 0.745499 0.649000 0.151757 +v 163.369751 -138.078506 33.681198 1.000000 1.000000 1.000000 +vn 0.646466 0.747366 0.153381 +v 162.773636 -137.457581 33.565998 1.000000 1.000000 1.000000 +vn 0.250887 0.579072 0.775713 +v 161.895584 -137.288742 34.256199 1.000000 1.000000 1.000000 +vn 0.437064 0.770536 0.463949 +v 162.019180 -137.069687 33.918396 1.000000 1.000000 1.000000 +vn 0.642461 0.615754 0.456170 +v 163.257736 -138.188736 34.149399 1.000000 1.000000 1.000000 +vn 0.417618 0.477401 0.773100 +v 163.081345 -138.360367 34.487198 1.000000 1.000000 1.000000 +vn 0.827600 0.540702 0.150727 +v 163.884735 -138.790131 33.797398 1.000000 1.000000 1.000000 +vn 0.706829 0.516263 0.483596 +v 163.758560 -138.882217 34.265598 1.000000 1.000000 1.000000 +vn 0.211577 0.243904 0.946439 +v 163.745682 -139.853378 34.858597 1.000000 1.000000 1.000000 +vn 0.113541 0.335870 0.935040 +v 162.382248 -137.966873 34.512596 1.000000 1.000000 1.000000 +vn 0.162644 0.616670 0.770237 +v 161.201630 -136.896667 34.139599 1.000000 1.000000 1.000000 +vn -0.041656 0.342971 0.938422 +v 160.494797 -136.874344 34.177998 1.000000 1.000000 1.000000 +vn -0.146753 0.326944 0.933580 +v 159.027069 -136.641312 33.946598 1.000000 1.000000 1.000000 +vn 0.003172 0.653411 0.756996 +v 159.804718 -136.461319 33.922199 1.000000 1.000000 1.000000 +vn 0.298102 0.828503 0.474044 +v 161.296906 -136.660858 33.801796 1.000000 1.000000 1.000000 +vn 0.088926 0.874802 0.476250 +v 159.838196 -136.207367 33.584396 1.000000 1.000000 1.000000 +vn -0.066486 0.863982 0.499113 +v 159.028351 -136.141785 33.468201 1.000000 1.000000 1.000000 +vn -0.213530 0.591026 0.777877 +v 158.248154 -136.455734 33.689598 1.000000 1.000000 1.000000 +vn 0.531110 0.832958 0.155253 +v 162.098999 -136.930145 33.450199 1.000000 1.000000 1.000000 +vn 0.406012 0.900317 0.156793 +v 161.357422 -136.510147 33.333599 1.000000 1.000000 1.000000 +vn 0.272379 0.946713 0.171883 +v 160.667328 -136.238068 33.231400 1.000000 1.000000 1.000000 +vn 0.566443 0.804795 -0.177332 +v 162.092560 -136.942703 32.634598 1.000000 1.000000 1.000000 +vn 0.431607 0.875424 -0.217598 +v 161.352264 -136.522720 32.517998 1.000000 1.000000 1.000000 +vn 0.191693 0.965064 -0.178623 +v 159.858780 -136.059464 32.300598 1.000000 1.000000 1.000000 +vn 0.133624 0.978407 0.157682 +v 159.860077 -136.045502 33.116196 1.000000 1.000000 1.000000 +vn 0.530211 0.705827 -0.469771 +v 162.023041 -137.065506 32.241600 1.000000 1.000000 1.000000 +vn 0.348324 0.830160 -0.435322 +v 160.626129 -136.390152 32.022797 1.000000 1.000000 1.000000 +vn 0.640685 0.616916 -0.457097 +v 162.680954 -137.578979 32.357399 1.000000 1.000000 1.000000 +vn 0.676910 0.714949 -0.175044 +v 162.765915 -137.468750 32.750599 1.000000 1.000000 1.000000 +vn 0.770469 0.613456 -0.173345 +v 163.359451 -138.088272 32.865601 1.000000 1.000000 1.000000 +vn 0.712437 0.509551 -0.482484 +v 163.261597 -138.184555 32.472599 1.000000 1.000000 1.000000 +vn 0.541038 0.414646 -0.731674 +v 162.529022 -137.775711 32.012798 1.000000 1.000000 1.000000 +vn 0.787566 0.420668 -0.450310 +v 163.763718 -138.878036 32.588799 1.000000 1.000000 1.000000 +vn 0.847003 0.503121 -0.171625 +v 163.873154 -138.798492 32.981796 1.000000 1.000000 1.000000 +vn 0.319865 0.591340 -0.740273 +v 160.559174 -136.637131 31.678198 1.000000 1.000000 1.000000 +vn 0.409327 0.470578 -0.781670 +v 161.898163 -137.283173 31.896999 1.000000 1.000000 1.000000 +vn 0.205105 0.841501 -0.499807 +v 159.839478 -136.201782 31.907598 1.000000 1.000000 1.000000 +vn 0.125600 0.657540 -0.742877 +v 159.027069 -136.392944 31.446798 1.000000 1.000000 1.000000 +vn 0.069771 0.878624 -0.472390 +v 159.028351 -136.136200 31.791401 1.000000 1.000000 1.000000 +vn -0.064427 0.879050 -0.472356 +v 158.214676 -136.194809 31.674999 1.000000 1.000000 1.000000 +vn 0.001848 0.605578 -0.795784 +v 158.248154 -136.450150 31.330399 1.000000 1.000000 1.000000 +vn 0.029248 0.982731 -0.182711 +v 159.029648 -135.991089 32.184399 1.000000 1.000000 1.000000 +vn -0.121314 0.975872 -0.181539 +v 158.196655 -136.052475 32.068001 1.000000 1.000000 1.000000 +vn -0.017586 0.987204 0.158493 +v 159.029648 -135.977142 33.000000 1.000000 1.000000 1.000000 +vn -0.168021 0.973038 0.158006 +v 158.195358 -136.038528 32.883598 1.000000 1.000000 1.000000 +vn -0.266762 0.946574 -0.181204 +v 157.388107 -136.238068 31.952599 1.000000 1.000000 1.000000 +vn -0.321810 0.807103 0.494998 +v 157.426743 -136.381775 33.236397 1.000000 1.000000 1.000000 +vn -0.311893 0.937129 0.156565 +v 157.384247 -136.224106 32.768196 1.000000 1.000000 1.000000 +vn -0.195570 0.861706 0.468205 +v 158.215958 -136.201782 33.351799 1.000000 1.000000 1.000000 +vn -0.441460 0.768367 0.463385 +v 156.668396 -136.680389 33.121201 1.000000 1.000000 1.000000 +vn -0.384166 0.551131 0.740723 +v 156.764969 -136.914795 33.458801 1.000000 1.000000 1.000000 +vn -0.501192 0.398358 0.768191 +v 155.456894 -137.805023 33.227997 1.000000 1.000000 1.000000 +vn -0.544627 0.681595 0.488681 +v 155.960297 -137.089218 33.006401 1.000000 1.000000 1.000000 +vn -0.447489 0.880672 0.155469 +v 156.606613 -136.529694 32.652798 1.000000 1.000000 1.000000 +vn -0.644533 0.614240 0.455287 +v 155.304962 -137.608276 32.890198 1.000000 1.000000 1.000000 +vn -0.572046 0.805656 0.153888 +v 155.880463 -136.949692 32.538200 1.000000 1.000000 1.000000 +vn -0.404512 0.896616 -0.180137 +v 156.611755 -136.543640 31.837399 1.000000 1.000000 1.000000 +vn -0.532335 0.827533 -0.178350 +v 155.886902 -136.962234 31.722601 1.000000 1.000000 1.000000 +vn -0.680985 0.716187 0.152761 +v 155.207123 -137.482697 32.421997 1.000000 1.000000 1.000000 +vn -0.715626 0.506093 0.481403 +v 154.726883 -138.216644 32.775200 1.000000 1.000000 1.000000 +vn -0.774894 0.613666 0.151505 +v 154.613586 -138.107803 32.306801 1.000000 1.000000 1.000000 +vn -0.744161 0.644728 -0.174787 +v 154.622604 -138.116180 31.491398 1.000000 1.000000 1.000000 +vn -0.645477 0.742931 -0.177237 +v 155.214844 -137.493866 31.606398 1.000000 1.000000 1.000000 +vn -0.324129 0.822144 -0.467996 +v 156.665833 -136.674805 31.444199 1.000000 1.000000 1.000000 +vn -0.442388 0.766382 -0.465781 +v 155.957718 -137.083633 31.329599 1.000000 1.000000 1.000000 +vn -0.536490 0.685433 -0.492301 +v 155.301102 -137.604095 31.213398 1.000000 1.000000 1.000000 +vn -0.826858 0.535188 -0.172856 +v 154.115341 -138.827805 31.375399 1.000000 1.000000 1.000000 +vn -0.644051 0.611959 -0.459026 +v 154.721741 -138.212463 31.098198 1.000000 1.000000 1.000000 +vn -0.432063 0.518622 -0.737803 +v 154.899399 -138.384094 30.753599 1.000000 1.000000 1.000000 +vn -0.265888 0.549212 -0.792256 +v 156.083893 -137.301315 30.984999 1.000000 1.000000 1.000000 +vn -0.166937 0.644922 -0.745794 +v 156.762390 -136.909225 31.099798 1.000000 1.000000 1.000000 +vn -0.189084 0.845279 -0.499750 +v 157.425446 -136.376205 31.559599 1.000000 1.000000 1.000000 +vn 0.031966 0.305457 -0.951669 +v 156.862808 -137.153397 30.948599 1.000000 1.000000 1.000000 +vn -0.105143 0.289536 -0.951375 +v 155.082230 -138.561295 30.602598 1.000000 1.000000 1.000000 +vn -0.490872 0.389026 -0.779554 +v 154.423035 -139.049667 30.637798 1.000000 1.000000 1.000000 +vn -0.612255 0.309594 -0.727527 +v 153.780594 -140.477097 30.418999 1.000000 1.000000 1.000000 +vn -0.223285 0.220547 -0.949475 +v 154.014908 -140.562195 30.267998 1.000000 1.000000 1.000000 +vn -0.271344 0.151532 -0.950479 +v 153.749680 -142.138931 30.036598 1.000000 1.000000 1.000000 +vn -0.680531 0.134038 -0.720355 +v 153.503769 -142.129166 30.187599 1.000000 1.000000 1.000000 +vn -0.845532 0.334964 -0.415783 +v 153.555283 -140.396164 30.763599 1.000000 1.000000 1.000000 +vn -0.854360 0.205792 -0.477199 +v 153.355713 -141.243118 30.648399 1.000000 1.000000 1.000000 +vn -0.729796 0.504601 -0.461276 +v 154.226059 -138.907333 30.982397 1.000000 1.000000 1.000000 +vn -0.887909 0.409479 -0.209629 +v 153.703339 -139.614761 31.258799 1.000000 1.000000 1.000000 +vn -0.966294 0.194810 -0.168299 +v 153.224396 -141.216614 31.041401 1.000000 1.000000 1.000000 +vn -0.891263 0.089320 -0.444603 +v 153.266876 -142.119385 30.532198 1.000000 1.000000 1.000000 +vn -0.983984 0.056404 -0.169098 +v 153.134277 -142.113815 30.925198 1.000000 1.000000 1.000000 +vn -0.950434 0.265499 0.161818 +v 153.417526 -140.347321 31.972198 1.000000 1.000000 1.000000 +vn -0.978270 0.145912 0.147302 +v 153.211517 -141.213821 31.856998 1.000000 1.000000 1.000000 +vn -0.910729 0.385350 0.148584 +v 153.691757 -139.609192 32.074398 1.000000 1.000000 1.000000 +vn -0.852119 0.501383 0.150028 +v 154.105026 -138.820816 32.190998 1.000000 1.000000 1.000000 +vn -0.843894 0.290209 0.451245 +v 153.828232 -139.680359 32.542599 1.000000 1.000000 1.000000 +vn -0.886865 0.105545 0.449812 +v 153.360870 -141.244522 32.325199 1.000000 1.000000 1.000000 +vn -0.880586 -0.030987 0.472872 +v 153.272034 -142.119385 32.209000 1.000000 1.000000 1.000000 +vn -0.989068 0.015615 0.146632 +v 153.121399 -142.112411 31.740799 1.000000 1.000000 1.000000 +vn -0.677303 0.021918 0.735378 +v 153.593903 -141.290573 32.662998 1.000000 1.000000 1.000000 +vn -0.638778 0.163100 0.751905 +v 154.041946 -139.790573 32.880398 1.000000 1.000000 1.000000 +vn -0.791107 0.415975 0.448458 +v 154.231201 -138.911530 32.659199 1.000000 1.000000 1.000000 +vn -0.604053 0.243564 0.758812 +v 154.428192 -139.053848 32.996998 1.000000 1.000000 1.000000 +vn -0.885137 -0.142862 0.442857 +v 153.300354 -143.001251 32.092598 1.000000 1.000000 1.000000 +vn -0.982446 -0.113126 0.148331 +v 153.148438 -143.017990 31.624399 1.000000 1.000000 1.000000 +vn -0.959240 -0.240604 0.148218 +v 153.292633 -143.902634 31.508999 1.000000 1.000000 1.000000 +vn -0.965080 -0.200134 -0.169016 +v 153.304214 -143.898438 30.693398 1.000000 1.000000 1.000000 +vn -0.982887 -0.072320 -0.169420 +v 153.161301 -143.016602 30.808798 1.000000 1.000000 1.000000 +vn -0.895137 -0.027075 -0.444968 +v 153.293930 -143.002640 30.415798 1.000000 1.000000 1.000000 +vn -0.869352 -0.136239 -0.475044 +v 153.432968 -143.863556 30.300398 1.000000 1.000000 1.000000 +vn -0.628983 0.023200 -0.777072 +v 153.529526 -142.976135 30.071199 1.000000 1.000000 1.000000 +vn -0.679017 -0.127826 -0.722909 +v 153.902893 -144.600311 29.840599 1.000000 1.000000 1.000000 +vn -0.856739 -0.258211 -0.446458 +v 153.682739 -144.696579 30.184998 1.000000 1.000000 1.000000 +vn -0.323374 0.044041 -0.945246 +v 154.130783 -144.499832 29.689398 1.000000 1.000000 1.000000 +vn 0.022454 0.248548 -0.968359 +v 155.530273 -146.292847 29.348398 1.000000 1.000000 1.000000 +vn -0.062095 0.265047 -0.962234 +v 157.258072 -147.463516 29.013798 1.000000 1.000000 1.000000 +vn -0.144392 0.235058 -0.961196 +v 158.639542 -147.788635 28.782398 1.000000 1.000000 1.000000 +vn -0.240240 0.175793 -0.954663 +v 160.731705 -147.471893 28.435198 1.000000 1.000000 1.000000 +vn -0.266227 0.029034 -0.963473 +v 162.513565 -146.255173 28.089199 1.000000 1.000000 1.000000 +vn -0.286477 -0.048187 -0.956875 +v 163.652985 -144.423080 27.754599 1.000000 1.000000 1.000000 +vn -0.688600 0.268415 -0.673634 +v 163.188217 -144.917038 27.992598 1.000000 1.000000 1.000000 +vn -0.699464 0.046760 -0.713136 +v 163.662003 -143.638916 27.775198 1.000000 1.000000 1.000000 +vn -0.257494 -0.124546 -0.958220 +v 163.999313 -142.938461 27.523199 1.000000 1.000000 1.000000 +vn -0.757822 -0.155497 -0.633661 +v 163.806198 -142.173813 27.542599 1.000000 1.000000 1.000000 +vn -0.859393 0.237750 -0.452680 +v 163.229401 -144.234726 28.225199 1.000000 1.000000 1.000000 +vn -0.898633 0.032973 -0.437461 +v 163.544846 -142.885437 27.993799 1.000000 1.000000 1.000000 +vn -0.200299 -0.218298 -0.955105 +v 163.777878 -140.661270 27.175999 1.000000 1.000000 1.000000 +vn -0.896945 -0.128340 -0.423106 +v 163.568008 -142.182190 27.877398 1.000000 1.000000 1.000000 +vn -0.831932 -0.302456 -0.465198 +v 163.343994 -140.814758 27.646599 1.000000 1.000000 1.000000 +vn -0.611717 -0.301134 -0.731520 +v 163.570587 -140.735229 27.311998 1.000000 1.000000 1.000000 +vn -0.971445 0.094755 -0.217521 +v 163.407074 -142.868683 28.391399 1.000000 1.000000 1.000000 +vn -0.929895 -0.291669 -0.224108 +v 163.212662 -140.862198 28.044197 1.000000 1.000000 1.000000 +vn -0.998669 -0.050785 0.009029 +v 163.377472 -142.190552 28.729597 1.000000 1.000000 1.000000 +vn -0.921907 0.310200 -0.232083 +v 163.100662 -144.177521 28.622599 1.000000 1.000000 1.000000 +vn -0.995773 0.091666 0.005776 +v 163.355576 -142.863113 28.846201 1.000000 1.000000 1.000000 +vn -0.970402 0.239238 0.032937 +v 163.246140 -143.524490 28.962399 1.000000 1.000000 1.000000 +vn -0.959883 -0.276468 0.046806 +v 163.163757 -140.878937 28.498999 1.000000 1.000000 1.000000 +vn -0.876957 -0.392863 -0.276776 +v 162.978348 -140.241287 27.929398 1.000000 1.000000 1.000000 +vn -0.833393 -0.550428 0.049856 +v 162.619141 -139.684540 28.267998 1.000000 1.000000 1.000000 +vn -0.786728 -0.448508 -0.424146 +v 163.103241 -140.174301 27.531998 1.000000 1.000000 1.000000 +vn -0.871731 0.280682 0.401625 +v 163.418671 -143.571930 29.786598 1.000000 1.000000 1.000000 +vn -0.786773 0.430892 0.441951 +v 163.217819 -144.229141 29.901798 1.000000 1.000000 1.000000 +vn -0.576835 0.375755 0.725307 +v 163.435410 -144.326813 30.249399 1.000000 1.000000 1.000000 +vn -0.679976 0.167273 0.713900 +v 163.766281 -142.910553 30.018198 1.000000 1.000000 1.000000 +vn -0.887498 0.171424 0.427741 +v 163.531967 -142.884033 29.670597 1.000000 1.000000 1.000000 +vn -0.409773 0.552878 0.725543 +v 162.350052 -146.072372 30.584198 1.000000 1.000000 1.000000 +vn -0.773573 0.553529 0.308530 +v 162.612701 -145.369125 30.120598 1.000000 1.000000 1.000000 +vn -0.129999 0.669236 0.731589 +v 160.651871 -147.233292 30.930199 1.000000 1.000000 1.000000 +vn 0.163222 0.655927 0.736966 +v 158.656281 -147.536087 31.277399 1.000000 1.000000 1.000000 +vn 0.391829 0.552693 0.735528 +v 157.339188 -147.224930 31.508799 1.000000 1.000000 1.000000 +vn 0.453936 0.766025 0.455135 +v 157.421585 -146.984924 31.160999 1.000000 1.000000 1.000000 +vn 0.288712 0.857973 0.424886 +v 158.035706 -147.180283 31.045799 1.000000 1.000000 1.000000 +vn 0.582996 0.749034 0.314745 +v 156.350403 -146.369583 31.379799 1.000000 1.000000 1.000000 +vn 0.070919 0.997470 0.004991 +v 158.685883 -147.089569 30.105398 1.000000 1.000000 1.000000 +vn 0.243688 0.969292 0.033020 +v 158.073044 -146.993301 30.221598 1.000000 1.000000 1.000000 +vn 0.803901 0.497002 0.326699 +v 155.425995 -145.410980 31.610798 1.000000 1.000000 1.000000 +vn 0.701216 0.560347 0.440804 +v 155.856003 -145.924469 31.495798 1.000000 1.000000 1.000000 +vn 0.457542 0.889164 0.006503 +v 156.983841 -146.566330 30.438999 1.000000 1.000000 1.000000 +vn 0.323923 0.913752 -0.245216 +v 157.465363 -146.857956 29.881998 1.000000 1.000000 1.000000 +vn 0.076291 0.969270 -0.233870 +v 158.683319 -147.145386 29.650599 1.000000 1.000000 1.000000 +vn 0.605442 0.689285 -0.397903 +v 155.846985 -145.934235 29.819199 1.000000 1.000000 1.000000 +vn 0.617460 0.786561 -0.008067 +v 156.453400 -146.213303 30.555599 1.000000 1.000000 1.000000 +vn 0.452989 0.685461 -0.570039 +v 156.342667 -146.382141 29.703199 1.000000 1.000000 1.000000 +vn 0.238136 0.845043 -0.478741 +v 157.416428 -146.998871 29.484398 1.000000 1.000000 1.000000 +vn 0.538532 0.510906 -0.670044 +v 155.229004 -145.579819 29.599398 1.000000 1.000000 1.000000 +vn 0.274253 0.665851 -0.693850 +v 156.786850 -146.977951 29.251799 1.000000 1.000000 1.000000 +vn 0.754306 0.499538 -0.426010 +v 155.052612 -144.840302 30.050398 1.000000 1.000000 1.000000 +vn 0.849402 0.448995 -0.277344 +v 155.172363 -144.763550 30.447998 1.000000 1.000000 1.000000 +vn 0.588110 0.339700 -0.733983 +v 154.550507 -144.315659 29.830399 1.000000 1.000000 1.000000 +vn 0.027084 0.671559 -0.740456 +v 157.981644 -147.446777 29.034401 1.000000 1.000000 1.000000 +vn 0.005001 0.884186 -0.467108 +v 158.673004 -147.294693 29.252998 1.000000 1.000000 1.000000 +vn -0.201221 0.720230 -0.663912 +v 159.337357 -147.552826 28.801798 1.000000 1.000000 1.000000 +vn -0.180868 0.875002 -0.449063 +v 159.321915 -147.296082 29.136599 1.000000 1.000000 1.000000 +vn -0.371828 0.790895 -0.486035 +v 160.574631 -147.005859 28.905998 1.000000 1.000000 1.000000 +vn -0.354020 0.564202 -0.745886 +v 160.657013 -147.248642 28.571199 1.000000 1.000000 1.000000 +vn -0.368788 0.898710 -0.237308 +v 160.526993 -146.864929 29.303398 1.000000 1.000000 1.000000 +vn -0.097305 0.995205 0.009950 +v 159.307739 -147.089569 29.988998 1.000000 1.000000 1.000000 +vn -0.353458 0.934096 0.050328 +v 160.508957 -146.813309 29.758198 1.000000 1.000000 1.000000 +vn -0.038340 0.937454 0.345991 +v 159.320618 -147.280731 30.813198 1.000000 1.000000 1.000000 +vn 0.164584 0.875590 0.454153 +v 158.674301 -147.280731 30.929798 1.000000 1.000000 1.000000 +vn -0.475211 0.831125 -0.288800 +v 161.092194 -146.590042 29.188599 1.000000 1.000000 1.000000 +vn -0.526492 0.728878 -0.437656 +v 161.157852 -146.722595 28.791199 1.000000 1.000000 1.000000 +vn -0.638239 0.768128 0.051289 +v 161.591736 -146.182602 29.527399 1.000000 1.000000 1.000000 +vn -0.533271 0.514409 -0.671569 +v 161.845367 -146.556549 28.340199 1.000000 1.000000 1.000000 +vn -0.715174 0.577637 -0.393525 +v 162.194275 -145.900757 28.559799 1.000000 1.000000 1.000000 +vn -0.812418 0.583019 -0.008054 +v 162.472366 -145.251923 29.296198 1.000000 1.000000 1.000000 +vn -0.902528 0.430581 0.006674 +v 162.816132 -144.689606 29.179598 1.000000 1.000000 1.000000 +vn -0.589539 0.673268 0.446268 +v 162.185257 -145.889587 30.236597 1.000000 1.000000 1.000000 +vn -0.524801 0.781378 0.337686 +v 161.697311 -146.337494 30.351599 1.000000 1.000000 1.000000 +vn -0.416281 0.830981 0.369027 +v 161.151413 -146.710037 30.467798 1.000000 1.000000 1.000000 +vn -0.269424 0.863351 0.426657 +v 160.570770 -146.993301 30.582598 1.000000 1.000000 1.000000 +vn -0.105219 0.922979 0.370187 +v 159.954056 -147.184464 30.697998 1.000000 1.000000 1.000000 +vn -0.709433 0.428478 -0.559564 +v 162.623001 -145.377502 28.443998 1.000000 1.000000 1.000000 +vn -0.947883 -0.005336 0.318574 +v 163.555145 -142.183578 29.553999 1.000000 1.000000 1.000000 +vn -0.937365 -0.061434 0.342889 +v 163.486908 -141.492889 29.438599 1.000000 1.000000 1.000000 +vn -0.700837 -0.092582 0.707288 +v 163.555145 -140.739410 29.670998 1.000000 1.000000 1.000000 +vn -0.603330 -0.353436 0.714896 +v 162.543182 -138.861282 29.324999 1.000000 1.000000 1.000000 +vn -0.891464 -0.207376 0.402848 +v 163.331116 -140.820328 29.323198 1.000000 1.000000 1.000000 +vn -0.872416 -0.338975 0.352116 +v 163.090363 -140.181274 29.208599 1.000000 1.000000 1.000000 +vn 0.495896 -0.549223 -0.672637 +v 156.432800 -137.958511 25.821798 1.000000 1.000000 1.000000 +vn 0.473782 -0.762939 -0.439835 +v 157.130615 -137.844101 26.272799 1.000000 1.000000 1.000000 +vn 0.673519 -0.623654 -0.396772 +v 156.043976 -138.587799 26.041401 1.000000 1.000000 1.000000 +vn 0.227134 -0.191173 -0.954915 +v 157.601837 -137.128281 25.916798 1.000000 1.000000 1.000000 +vn 0.312230 -0.586666 -0.747218 +v 157.662338 -137.355728 26.052799 1.000000 1.000000 1.000000 +vn 0.669848 -0.313107 -0.673251 +v 154.989532 -139.494766 25.474199 1.000000 1.000000 1.000000 +vn 0.126762 -0.243750 -0.961518 +v 159.709427 -136.966431 26.263998 1.000000 1.000000 1.000000 +vn 0.148172 -0.731417 -0.665638 +v 158.997467 -137.150604 26.283398 1.000000 1.000000 1.000000 +vn 0.313284 -0.814459 -0.488375 +v 157.729294 -137.604095 26.387398 1.000000 1.000000 1.000000 +vn -0.076600 -0.668019 -0.740191 +v 160.344162 -137.355728 26.515999 1.000000 1.000000 1.000000 +vn 0.115881 -0.885212 -0.450523 +v 158.998749 -137.408737 26.618198 1.000000 1.000000 1.000000 +vn -0.069579 -0.881301 -0.467405 +v 159.645065 -137.457581 26.734598 1.000000 1.000000 1.000000 +vn 0.041796 -0.269384 -0.962125 +v 161.066437 -137.393402 26.495398 1.000000 1.000000 1.000000 +vn -0.299172 -0.825800 -0.478071 +v 160.879761 -137.845490 26.965998 1.000000 1.000000 1.000000 +vn -0.322665 -0.646028 -0.691763 +v 161.506760 -137.912460 26.733398 1.000000 1.000000 1.000000 +vn -0.147352 -0.961111 -0.233567 +v 159.625748 -137.605499 27.132198 1.000000 1.000000 1.000000 +vn -0.499357 -0.653189 -0.569199 +v 161.912323 -138.540359 27.184799 1.000000 1.000000 1.000000 +vn -0.389304 -0.888138 -0.244241 +v 160.821823 -137.982224 27.363398 1.000000 1.000000 1.000000 +vn -0.652519 -0.646614 -0.395108 +v 162.379669 -139.023148 27.300598 1.000000 1.000000 1.000000 +vn -0.574948 -0.474523 -0.666531 +v 162.973206 -139.423599 27.080999 1.000000 1.000000 1.000000 +vn -0.040995 -0.246682 -0.968229 +v 162.716995 -138.689667 26.829998 1.000000 1.000000 1.000000 +vn -0.669726 -0.742558 -0.008630 +v 161.791290 -138.699432 28.036999 1.000000 1.000000 1.000000 +vn -0.519465 -0.854467 0.006512 +v 161.284027 -138.308746 27.920399 1.000000 1.000000 1.000000 +vn -0.738187 -0.513055 0.438012 +v 162.369370 -139.032913 28.977198 1.000000 1.000000 1.000000 +vn -0.835431 -0.443481 0.324623 +v 162.765915 -139.577087 29.092398 1.000000 1.000000 1.000000 +vn -0.633923 -0.707532 0.312313 +v 161.903305 -138.551529 28.861399 1.000000 1.000000 1.000000 +vn -0.507799 -0.732303 0.453731 +v 160.873322 -137.858047 28.642599 1.000000 1.000000 1.000000 +vn -0.431032 -0.526367 0.732904 +v 160.971161 -137.625031 28.990198 1.000000 1.000000 1.000000 +vn -0.313410 -0.949047 0.032936 +v 160.224426 -137.802231 27.703199 1.000000 1.000000 1.000000 +vn -0.350431 -0.835149 0.423939 +v 160.274643 -137.618042 28.527399 1.000000 1.000000 1.000000 +vn -0.144004 -0.989564 0.005073 +v 159.618027 -137.661301 27.586998 1.000000 1.000000 1.000000 +vn -0.210785 -0.644085 0.735339 +v 159.675964 -137.217590 28.758799 1.000000 1.000000 1.000000 +vn -0.228478 -0.861700 0.453068 +v 159.643784 -137.471542 28.411198 1.000000 1.000000 1.000000 +vn 0.023475 -0.999670 0.010439 +v 158.998749 -137.615250 27.470398 1.000000 1.000000 1.000000 +vn -0.030583 -0.938071 0.345090 +v 158.998749 -137.422699 28.294798 1.000000 1.000000 1.000000 +vn 0.284458 -0.957367 0.050320 +v 157.782074 -137.802231 27.239798 1.000000 1.000000 1.000000 +vn 0.301859 -0.922953 -0.238830 +v 157.767914 -137.749207 26.784998 1.000000 1.000000 1.000000 +vn 0.037619 -0.928175 0.370238 +v 158.358871 -137.472931 28.179398 1.000000 1.000000 1.000000 +vn 0.205049 -0.880499 0.427407 +v 157.733154 -137.618042 28.063999 1.000000 1.000000 1.000000 +vn 0.583380 -0.810555 0.051653 +v 156.661972 -138.350601 27.008799 1.000000 1.000000 1.000000 +vn 0.414378 -0.862809 -0.289573 +v 157.187256 -137.980835 26.670198 1.000000 1.000000 1.000000 +vn 0.468317 -0.816128 0.338547 +v 156.567993 -138.188736 27.833199 1.000000 1.000000 1.000000 +vn 0.771430 -0.636261 -0.008197 +v 155.725967 -139.214310 26.777798 1.000000 1.000000 1.000000 +vn 0.355762 -0.858742 0.368776 +v 157.135773 -137.856659 27.949398 1.000000 1.000000 1.000000 +vn 0.079433 -0.675775 0.732815 +v 157.667496 -137.372467 28.411798 1.000000 1.000000 1.000000 +vn 0.368936 -0.578881 0.727175 +v 155.899780 -138.405014 28.065598 1.000000 1.000000 1.000000 +vn 0.540577 -0.712059 0.448050 +v 156.052994 -138.598969 27.717999 1.000000 1.000000 1.000000 +vn 0.872170 -0.489164 0.006139 +v 155.347458 -139.750122 26.661198 1.000000 1.000000 1.000000 +vn 0.734419 -0.603779 0.309966 +v 155.593353 -139.087341 27.602198 1.000000 1.000000 1.000000 +vn 0.953266 -0.300401 0.032289 +v 154.844040 -140.880341 26.443998 1.000000 1.000000 1.000000 +vn 0.899698 -0.369149 -0.232964 +v 155.030731 -140.238480 26.104198 1.000000 1.000000 1.000000 +vn 0.678106 -0.474044 -0.561654 +v 155.583069 -139.077576 25.925598 1.000000 1.000000 1.000000 +vn 0.841988 -0.291804 -0.453770 +v 154.905853 -140.172897 25.706799 1.000000 1.000000 1.000000 +vn 0.963646 -0.156006 -0.216907 +v 154.643204 -141.522202 25.872999 1.000000 1.000000 1.000000 +vn 0.755819 -0.481354 0.443887 +v 154.918732 -140.178482 27.383398 1.000000 1.000000 1.000000 +vn 0.987997 -0.154368 0.005674 +v 154.693405 -141.531952 26.327799 1.000000 1.000000 1.000000 +vn 0.850949 -0.336147 0.403598 +v 154.676666 -140.820328 27.268198 1.000000 1.000000 1.000000 +vn 0.549294 -0.412400 0.726775 +v 154.706284 -140.065475 27.730997 1.000000 1.000000 1.000000 +vn 0.999892 -0.011611 0.009009 +v 154.629028 -142.201721 26.211199 1.000000 1.000000 1.000000 +vn 0.873992 -0.227648 0.429320 +v 154.519592 -141.498474 27.151999 1.000000 1.000000 1.000000 +vn 0.667394 -0.210072 0.714461 +v 154.286560 -141.453827 27.499598 1.000000 1.000000 1.000000 +vn 0.027004 -0.265434 0.963751 +v 155.740128 -138.201294 28.220198 1.000000 1.000000 1.000000 +vn 0.143405 -0.239258 0.960307 +v 154.486130 -139.948257 27.885599 1.000000 1.000000 1.000000 +vn -0.092429 -0.249218 0.964027 +v 157.597961 -137.115723 28.566399 1.000000 1.000000 1.000000 +vn 0.212160 -0.178583 0.960779 +v 154.044525 -141.407776 27.654198 1.000000 1.000000 1.000000 +vn 0.705555 0.047904 0.707035 +v 154.361237 -143.636124 27.152599 1.000000 1.000000 1.000000 +vn -0.258495 -0.198846 0.945326 +v 153.891312 -143.764496 27.303398 1.000000 1.000000 1.000000 +vn 0.266345 -0.090882 0.959584 +v 154.121765 -143.701706 27.307198 1.000000 1.000000 1.000000 +vn 0.938988 0.001760 0.343946 +v 154.477112 -142.889618 26.920198 1.000000 1.000000 1.000000 +vn 0.945933 -0.054333 0.319778 +v 154.452652 -142.196136 27.035599 1.000000 1.000000 1.000000 +vn 0.903130 0.150006 0.402312 +v 154.589127 -143.571930 26.804798 1.000000 1.000000 1.000000 +vn 0.975517 0.214820 0.047097 +v 154.761642 -143.525894 25.980598 1.000000 1.000000 1.000000 +vn -0.244273 -0.373681 0.894814 +v 154.872375 -145.911911 26.957399 1.000000 1.000000 1.000000 +vn -0.034219 -0.342865 0.938761 +v 156.515198 -147.397949 26.622599 1.000000 1.000000 1.000000 +vn 0.071445 -0.348810 0.934466 +v 157.908249 -147.950485 26.391199 1.000000 1.000000 1.000000 +vn 0.209145 -0.251922 0.944878 +v 160.126587 -147.944916 26.044197 1.000000 1.000000 1.000000 +vn 0.078529 -0.620966 0.779894 +v 158.635681 -148.303513 26.134199 1.000000 1.000000 1.000000 +vn 0.323713 -0.178954 0.929078 +v 162.140198 -146.954224 25.698198 1.000000 1.000000 1.000000 +vn 0.256769 -0.616547 0.744271 +v 160.174210 -148.180725 25.903599 1.000000 1.000000 1.000000 +vn 0.405883 -0.488416 0.772469 +v 161.621338 -147.597473 25.672798 1.000000 1.000000 1.000000 +vn 0.593544 -0.281317 0.754034 +v 163.380051 -145.966324 25.324999 1.000000 1.000000 1.000000 +vn 0.541373 -0.355001 0.762161 +v 162.863770 -146.602600 25.441599 1.000000 1.000000 1.000000 +vn 0.691057 -0.562575 0.453817 +v 163.029846 -146.785385 25.103998 1.000000 1.000000 1.000000 +vn 0.770011 -0.446951 0.455321 +v 163.568008 -146.121216 24.987398 1.000000 1.000000 1.000000 +vn 0.660184 -0.149106 0.736155 +v 164.099747 -144.596115 25.107798 1.000000 1.000000 1.000000 +vn 0.869970 -0.135557 0.474105 +v 164.570969 -143.855194 24.653799 1.000000 1.000000 1.000000 +vn 0.647381 0.052452 0.760359 +v 164.474411 -142.959381 24.874998 1.000000 1.000000 1.000000 +vn 0.849478 -0.271514 0.452401 +v 164.319901 -144.692383 24.769999 1.000000 1.000000 1.000000 +vn 0.896514 -0.026205 0.442240 +v 164.710007 -142.985901 24.537399 1.000000 1.000000 1.000000 +vn 0.875977 0.092978 0.473308 +v 164.734467 -142.112411 24.421997 1.000000 1.000000 1.000000 +vn 0.968217 -0.202431 0.146891 +v 164.717743 -143.895660 24.185398 1.000000 1.000000 1.000000 +vn 0.986382 -0.073857 0.146957 +v 164.860641 -143.002640 24.068998 1.000000 1.000000 1.000000 +vn 0.987546 0.054500 0.147589 +v 164.886398 -142.105438 23.953598 1.000000 1.000000 1.000000 +vn 0.872029 0.205467 0.444240 +v 164.646927 -141.243118 24.306599 1.000000 1.000000 1.000000 +vn 0.971959 0.182956 0.147729 +v 164.796280 -141.213821 23.838398 1.000000 1.000000 1.000000 +vn 0.932555 -0.329185 0.148252 +v 164.460236 -144.755173 24.301598 1.000000 1.000000 1.000000 +vn 0.955468 -0.241190 -0.170024 +v 164.704865 -143.891464 23.369999 1.000000 1.000000 1.000000 +vn 0.881315 -0.443438 0.163239 +v 164.095886 -145.558899 24.416798 1.000000 1.000000 1.000000 +vn 0.911040 -0.375903 -0.169419 +v 164.448654 -144.749603 23.486198 1.000000 1.000000 1.000000 +vn 0.789917 -0.575108 -0.212793 +v 163.678741 -146.211914 23.703598 1.000000 1.000000 1.000000 +vn 0.817827 -0.555468 0.150382 +v 163.689041 -146.220276 24.518999 1.000000 1.000000 1.000000 +vn 0.797340 -0.364944 -0.480692 +v 164.325058 -144.695175 23.092999 1.000000 1.000000 1.000000 +vn 0.761783 -0.492834 -0.420478 +v 163.969711 -145.479355 23.208199 1.000000 1.000000 1.000000 +vn 0.702083 -0.689848 -0.176607 +v 163.127701 -146.892838 23.820198 1.000000 1.000000 1.000000 +vn 0.610861 -0.638704 -0.467875 +v 163.033707 -146.789566 23.426998 1.000000 1.000000 1.000000 +vn 0.734720 -0.661084 0.152164 +v 163.136703 -146.902603 24.635599 1.000000 1.000000 1.000000 +vn 0.633259 -0.758677 0.152944 +v 162.504562 -147.487244 24.751598 1.000000 1.000000 1.000000 +vn 0.595574 -0.783452 -0.177465 +v 162.496826 -147.476089 23.935999 1.000000 1.000000 1.000000 +vn 0.502701 -0.729528 -0.463768 +v 162.418304 -147.360275 23.542999 1.000000 1.000000 1.000000 +vn 0.311902 -0.593275 -0.742120 +v 162.276672 -147.153763 23.198399 1.000000 1.000000 1.000000 +vn 0.398879 -0.476972 -0.783194 +v 162.867630 -146.606781 23.082600 1.000000 1.000000 1.000000 +vn 0.378907 -0.780689 -0.496944 +v 161.737228 -147.829102 23.658001 1.000000 1.000000 1.000000 +vn 0.516731 -0.842003 0.154984 +v 161.806747 -147.968628 24.866598 1.000000 1.000000 1.000000 +vn 0.475813 -0.861022 -0.179561 +v 161.800308 -147.956085 24.051197 1.000000 1.000000 1.000000 +vn 0.596475 -0.638271 0.486650 +v 162.414444 -147.356079 25.219801 1.000000 1.000000 1.000000 +vn 0.501694 -0.731544 0.461678 +v 161.734650 -147.823517 25.334999 1.000000 1.000000 1.000000 +vn 0.387575 -0.908533 0.156057 +v 161.047134 -148.341187 24.982798 1.000000 1.000000 1.000000 +vn 0.342952 -0.921857 -0.180455 +v 161.041977 -148.328629 24.167398 1.000000 1.000000 1.000000 +vn 0.266630 -0.841221 -0.470378 +v 160.996918 -148.193283 23.774199 1.000000 1.000000 1.000000 +vn 0.247166 -0.956155 0.157088 +v 160.256622 -148.592346 25.097601 1.000000 1.000000 1.000000 +vn 0.200859 -0.962617 -0.181724 +v 160.254044 -148.578400 24.281998 1.000000 1.000000 1.000000 +vn 0.137430 -0.871089 -0.471505 +v 160.225708 -148.437469 23.888998 1.000000 1.000000 1.000000 +vn 0.387197 -0.778837 0.493448 +v 160.994339 -148.187714 25.451199 1.000000 1.000000 1.000000 +vn 0.265718 -0.843342 0.467085 +v 160.224426 -148.431885 25.565798 1.000000 1.000000 1.000000 +vn 0.100046 -0.982443 0.157469 +v 159.437775 -148.720718 25.212799 1.000000 1.000000 1.000000 +vn 0.052987 -0.981916 -0.181752 +v 159.436493 -148.706757 24.397398 1.000000 1.000000 1.000000 +vn -0.001091 -0.865400 -0.501081 +v 159.427475 -148.563049 24.004198 1.000000 1.000000 1.000000 +vn 0.022139 -0.664907 -0.746598 +v 160.175507 -148.186310 23.544399 1.000000 1.000000 1.000000 +vn -0.135309 -0.591818 -0.794634 +v 158.635681 -148.309097 23.775198 1.000000 1.000000 1.000000 +vn -0.130531 -0.871882 -0.471999 +v 158.618942 -148.565842 24.119598 1.000000 1.000000 1.000000 +vn -0.050156 -0.986071 0.158583 +v 158.609924 -148.723511 25.328199 1.000000 1.000000 1.000000 +vn -0.096606 -0.978643 -0.181452 +v 158.609924 -148.709564 24.512798 1.000000 1.000000 1.000000 +vn 0.138004 -0.856210 0.497854 +v 159.426193 -148.557465 25.681198 1.000000 1.000000 1.000000 +vn 0.001418 -0.882924 0.469514 +v 158.620239 -148.558868 25.796598 1.000000 1.000000 1.000000 +vn -0.243563 -0.952915 -0.180639 +v 157.784653 -148.585373 24.629198 1.000000 1.000000 1.000000 +vn -0.199042 -0.967224 0.157672 +v 157.782074 -148.599335 25.444799 1.000000 1.000000 1.000000 +vn -0.260616 -0.843790 -0.469146 +v 157.811691 -148.444443 24.235998 1.000000 1.000000 1.000000 +vn -0.395632 -0.901158 -0.177172 +v 156.983841 -148.337006 24.745398 1.000000 1.000000 1.000000 +vn -0.383016 -0.779118 -0.496259 +v 157.030197 -148.201645 24.352198 1.000000 1.000000 1.000000 +vn -0.343248 -0.926082 0.156695 +v 156.979980 -148.349564 25.560799 1.000000 1.000000 1.000000 +vn -0.125091 -0.857734 0.498643 +v 157.812973 -148.438873 25.912998 1.000000 1.000000 1.000000 +vn -0.278118 -0.835288 0.474284 +v 157.031479 -148.196075 26.029198 1.000000 1.000000 1.000000 +vn -0.146553 -0.636943 0.756853 +v 157.113876 -147.954681 26.366999 1.000000 1.000000 1.000000 +vn -0.470540 -0.865739 0.170552 +v 156.225510 -147.982590 25.675999 1.000000 1.000000 1.000000 +vn -0.469723 -0.748000 0.468888 +v 155.689926 -147.430038 26.246599 1.000000 1.000000 1.000000 +vn -0.302965 -0.563122 0.768834 +v 155.826385 -147.220734 26.584198 1.000000 1.000000 1.000000 +vn -0.632623 -0.570279 0.523994 +v 154.511871 -146.223068 26.478998 1.000000 1.000000 1.000000 +vn -0.568963 -0.629920 0.528661 +v 155.059052 -146.870514 26.363199 1.000000 1.000000 1.000000 +vn -0.506680 -0.391644 0.768043 +v 154.260818 -145.371918 26.931999 1.000000 1.000000 1.000000 +vn -0.755099 -0.476312 0.450502 +v 154.057388 -145.501678 26.594198 1.000000 1.000000 1.000000 +vn -0.860065 -0.487324 0.151007 +v 153.926071 -145.585403 26.125799 1.000000 1.000000 1.000000 +vn -0.784934 -0.600589 0.152223 +v 154.392136 -146.324921 26.010799 1.000000 1.000000 1.000000 +vn -0.692010 -0.705482 0.153029 +v 154.954773 -146.989120 25.894798 1.000000 1.000000 1.000000 +vn -0.807221 -0.564105 -0.173723 +v 154.402451 -146.316559 25.195198 1.000000 1.000000 1.000000 +vn -0.587906 -0.793939 0.155008 +v 155.602371 -147.563980 25.778198 1.000000 1.000000 1.000000 +vn -0.720266 -0.671352 -0.174652 +v 154.963776 -146.979340 25.079399 1.000000 1.000000 1.000000 +vn -0.607305 -0.764953 -0.214540 +v 155.608810 -147.552826 24.962799 1.000000 1.000000 1.000000 +vn -0.876942 -0.448979 -0.171437 +v 153.937668 -145.578430 25.310398 1.000000 1.000000 1.000000 +vn -0.665970 -0.583936 -0.464223 +v 155.055191 -146.874695 24.686199 1.000000 1.000000 1.000000 +vn -0.518334 -0.738946 -0.430451 +v 156.295044 -147.843063 24.467398 1.000000 1.000000 1.000000 +vn -0.500296 -0.380012 -0.778007 +v 155.217407 -146.687714 24.341799 1.000000 1.000000 1.000000 +vn -0.440404 -0.515115 -0.735323 +v 156.407043 -147.617004 24.122999 1.000000 1.000000 1.000000 +vn -0.753190 -0.477367 -0.452577 +v 154.506729 -146.225861 24.802198 1.000000 1.000000 1.000000 +vn -0.266401 -0.617336 -0.740221 +v 157.860611 -148.193283 23.891598 1.000000 1.000000 1.000000 +vn 0.140143 -0.591184 -0.794268 +v 160.914520 -147.951889 23.429798 1.000000 1.000000 1.000000 +vn 0.535860 -0.421835 -0.731375 +v 163.764999 -145.350983 22.863800 1.000000 1.000000 1.000000 +vn 0.639660 -0.260294 -0.723244 +v 164.345657 -143.795197 22.632397 1.000000 1.000000 1.000000 +vn 0.612080 -0.140994 -0.778125 +v 164.479553 -142.960785 22.515999 1.000000 1.000000 1.000000 +vn 0.857122 -0.255871 -0.447071 +v 164.576126 -143.856583 22.976801 1.000000 1.000000 1.000000 +vn 0.883782 -0.142025 -0.445822 +v 164.715164 -142.985901 22.860397 1.000000 1.000000 1.000000 +vn 0.978870 -0.114067 -0.169710 +v 164.847778 -143.001251 23.253597 1.000000 1.000000 1.000000 +vn 0.985545 0.013962 -0.168837 +v 164.873535 -142.105438 23.138199 1.000000 1.000000 1.000000 +vn 0.879604 -0.030002 -0.474761 +v 164.740921 -142.112411 22.744999 1.000000 1.000000 1.000000 +vn 0.691880 -0.002822 -0.722007 +v 164.419037 -141.287781 22.285198 1.000000 1.000000 1.000000 +vn 0.871244 0.205987 -0.445537 +v 164.452515 -140.398956 22.514999 1.000000 1.000000 1.000000 +vn 0.621853 0.103179 -0.776307 +v 164.228500 -140.479874 22.170597 1.000000 1.000000 1.000000 +vn 0.890866 0.091796 -0.444894 +v 164.652084 -141.241730 22.629799 1.000000 1.000000 1.000000 +vn 0.975117 0.142572 -0.169764 +v 164.783401 -141.216614 23.022797 1.000000 1.000000 1.000000 +vn 0.948169 0.268446 -0.170038 +v 164.578690 -140.354294 22.908199 1.000000 1.000000 1.000000 +vn 0.894712 -0.089269 -0.437631 +v 154.506729 -141.495682 25.475401 1.000000 1.000000 1.000000 +vn 0.903595 0.071371 -0.422400 +v 154.439774 -142.194733 25.358999 1.000000 1.000000 1.000000 +vn 0.695004 -0.090984 -0.713226 +v 154.437210 -140.735229 25.256798 1.000000 1.000000 1.000000 +vn 0.946479 0.231685 -0.224723 +v 154.711441 -143.538452 25.525799 1.000000 1.000000 1.000000 +vn 0.900699 0.335492 -0.276020 +v 154.905853 -144.176117 25.410999 1.000000 1.000000 1.000000 +vn -0.686973 0.601251 0.408125 +v 162.588242 -145.402618 40.425320 1.000000 1.000000 1.000000 +vn -0.555468 0.411514 0.722572 +v 163.150879 -144.956116 40.657719 1.000000 1.000000 1.000000 +vn -0.774145 0.482397 0.409868 +v 162.946167 -144.829132 40.310120 1.000000 1.000000 1.000000 +vn -0.609008 0.674199 0.417809 +v 162.154358 -145.920288 40.541321 1.000000 1.000000 1.000000 +vn -0.390385 0.565786 0.726282 +v 162.317871 -146.105865 40.889118 1.000000 1.000000 1.000000 +vn -0.870596 0.490764 0.034839 +v 162.792953 -144.732849 39.485718 1.000000 1.000000 1.000000 +vn -0.892164 0.334372 0.303710 +v 163.228119 -144.201233 40.194118 1.000000 1.000000 1.000000 +vn -0.982777 0.180625 -0.039037 +v 163.255157 -143.488220 39.253319 1.000000 1.000000 1.000000 +vn -0.714937 0.696889 0.056661 +v 162.032043 -145.782135 39.717117 1.000000 1.000000 1.000000 +vn -0.840010 0.500010 -0.210648 +v 162.838013 -144.760757 39.030918 1.000000 1.000000 1.000000 +vn -0.886058 0.244280 -0.393990 +v 163.240997 -144.206818 38.517540 1.000000 1.000000 1.000000 +vn -0.688661 0.548201 -0.474575 +v 162.164673 -145.931442 38.864918 1.000000 1.000000 1.000000 +vn -0.728660 0.643997 -0.233072 +v 162.068100 -145.822617 39.262318 1.000000 1.000000 1.000000 +vn -0.802230 0.372874 -0.466253 +v 162.957748 -144.836121 38.633518 1.000000 1.000000 1.000000 +vn -0.432445 0.503740 -0.747822 +v 161.238968 -146.969574 38.760117 1.000000 1.000000 1.000000 +vn -0.504661 0.715716 -0.482771 +v 161.128250 -146.740738 39.094917 1.000000 1.000000 1.000000 +vn -0.562270 0.369579 -0.739773 +v 162.329468 -146.118423 38.530136 1.000000 1.000000 1.000000 +vn -0.533489 0.815272 -0.225212 +v 161.063858 -146.606781 39.492317 1.000000 1.000000 1.000000 +vn -0.512572 0.857235 0.049182 +v 161.039413 -146.557953 39.947121 1.000000 1.000000 1.000000 +vn -0.302451 0.692184 -0.655289 +v 159.955338 -147.463516 38.991718 1.000000 1.000000 1.000000 +vn -0.287855 0.840544 -0.458939 +v 159.908997 -147.210968 39.326519 1.000000 1.000000 1.000000 +vn -0.120972 0.872845 -0.472766 +v 159.260101 -147.300278 39.440720 1.000000 1.000000 1.000000 +vn -0.371246 0.928454 -0.012273 +v 160.470337 -146.828644 40.063316 1.000000 1.000000 1.000000 +vn -0.094266 0.668761 -0.737477 +v 159.002609 -147.565384 39.150116 1.000000 1.000000 1.000000 +vn -0.170488 0.266911 -0.948521 +v 159.285858 -147.795609 38.970116 1.000000 1.000000 1.000000 +vn -0.297384 0.195352 -0.934559 +v 161.340683 -147.178879 38.624321 1.000000 1.000000 1.000000 +vn 0.085347 0.882505 -0.462493 +v 158.352432 -147.257019 39.595741 1.000000 1.000000 1.000000 +vn 0.036048 0.606257 -0.794451 +v 157.643036 -147.353302 39.370739 1.000000 1.000000 1.000000 +vn 0.251447 0.616201 -0.746372 +v 156.392883 -146.729568 39.583336 1.000000 1.000000 1.000000 +vn 0.322578 0.838825 -0.438539 +v 157.094559 -146.855164 39.813137 1.000000 1.000000 1.000000 +vn 0.013101 0.999502 -0.028695 +v 159.003891 -147.102142 40.337120 1.000000 1.000000 1.000000 +vn -0.059972 0.963391 -0.261307 +v 159.252380 -147.149567 39.838120 1.000000 1.000000 1.000000 +vn -0.253228 0.960833 -0.112588 +v 159.870361 -147.008652 40.178719 1.000000 1.000000 1.000000 +vn -0.008334 0.972179 0.234092 +v 159.251099 -147.143997 40.723518 1.000000 1.000000 1.000000 +vn 0.325611 0.858022 0.397211 +v 157.713837 -147.090973 41.382137 1.000000 1.000000 1.000000 +vn 0.284581 0.957097 0.054581 +v 157.764053 -146.906784 40.557739 1.000000 1.000000 1.000000 +vn -0.111268 0.897431 0.426892 +v 159.906418 -147.195618 41.003120 1.000000 1.000000 1.000000 +vn 0.043447 0.880478 0.472092 +v 159.258820 -147.286316 41.117317 1.000000 1.000000 1.000000 +vn -0.071327 0.936465 0.343433 +v 159.271698 -147.541656 41.464920 1.000000 1.000000 1.000000 +vn -0.126722 0.671371 0.730208 +v 160.609390 -147.250031 41.235317 1.000000 1.000000 1.000000 +vn -0.230413 0.861020 0.453381 +v 160.529556 -147.008652 40.887718 1.000000 1.000000 1.000000 +vn 0.231065 0.783469 0.576875 +v 158.355011 -147.243057 41.272339 1.000000 1.000000 1.000000 +vn 0.227727 0.633693 0.739306 +v 158.321533 -147.495621 41.619919 1.000000 1.000000 1.000000 +vn 0.404383 0.550593 0.730289 +v 157.001862 -147.074219 41.837318 1.000000 1.000000 1.000000 +vn -0.490850 0.791629 0.363854 +v 161.666412 -146.362595 40.656120 1.000000 1.000000 1.000000 +vn -0.873295 0.216762 0.436314 +v 163.526825 -142.928680 39.975319 1.000000 1.000000 1.000000 +vn -0.660167 0.216317 0.719296 +v 163.761139 -142.957993 40.323120 1.000000 1.000000 1.000000 +vn -0.915495 0.052712 0.398861 +v 163.556427 -142.236603 39.860317 1.000000 1.000000 1.000000 +vn -0.702068 -0.007824 0.712067 +v 163.727661 -141.498474 40.091740 1.000000 1.000000 1.000000 +vn -0.987068 -0.160206 0.005464 +v 163.320816 -141.572418 38.919739 1.000000 1.000000 1.000000 +vn -0.999396 -0.011315 0.032850 +v 163.380051 -142.240799 39.035919 1.000000 1.000000 1.000000 +vn -0.972275 0.056045 -0.227025 +v 163.401932 -142.913330 38.696320 1.000000 1.000000 1.000000 +vn -0.964206 -0.150693 -0.218169 +v 163.371033 -141.562653 38.464939 1.000000 1.000000 1.000000 +vn -0.892578 0.014104 -0.450672 +v 163.539703 -142.930084 38.298721 1.000000 1.000000 1.000000 +vn -0.740792 0.082513 -0.666647 +v 163.671021 -143.598450 38.066319 1.000000 1.000000 1.000000 +vn -0.648380 0.218678 -0.729235 +v 163.163757 -144.964478 38.298721 1.000000 1.000000 1.000000 +vn -0.877255 -0.193504 -0.439295 +v 163.508789 -141.537537 38.067539 1.000000 1.000000 1.000000 +vn -0.688493 -0.128970 -0.713684 +v 163.808777 -142.229630 37.848919 1.000000 1.000000 1.000000 +vn -0.295705 0.075461 -0.952294 +v 162.480087 -146.288651 38.394119 1.000000 1.000000 1.000000 +vn -0.902522 -0.055159 0.427096 +v 163.494629 -141.540329 39.744141 1.000000 1.000000 1.000000 +vn -0.438096 0.832413 0.339354 +v 161.121796 -146.728180 40.771519 1.000000 1.000000 1.000000 +vn 0.473792 0.758079 0.448149 +v 157.100998 -146.842606 41.489738 1.000000 1.000000 1.000000 +vn 0.579597 0.721816 0.378218 +v 156.529358 -146.500748 41.594540 1.000000 1.000000 1.000000 +vn 0.707503 0.577226 0.407738 +v 155.897202 -145.966324 41.720718 1.000000 1.000000 1.000000 +vn 0.556708 0.828977 0.053599 +v 156.625916 -146.340271 40.770340 1.000000 1.000000 1.000000 +vn 0.735117 0.675965 0.051724 +v 156.018234 -145.825409 40.896339 1.000000 1.000000 1.000000 +vn 0.517924 0.818645 -0.248143 +v 156.597595 -146.386337 40.315536 1.000000 1.000000 1.000000 +vn 0.590629 0.649044 -0.479477 +v 155.888199 -145.977493 40.044140 1.000000 1.000000 1.000000 +vn 0.685050 0.690048 -0.233536 +v 155.983459 -145.867264 40.441540 1.000000 1.000000 1.000000 +vn 0.445884 0.753624 -0.482947 +v 156.521637 -146.513306 39.917938 1.000000 1.000000 1.000000 +vn 0.486545 0.639993 -0.594712 +v 155.725967 -146.165863 39.709339 1.000000 1.000000 1.000000 +vn -0.237433 -0.002078 -0.971402 +v 154.471970 -145.246338 39.768337 1.000000 1.000000 1.000000 +vn 0.450156 0.363629 -0.815557 +v 154.860779 -144.997971 39.909138 1.000000 1.000000 1.000000 +vn 0.723641 0.504690 -0.470779 +v 155.066788 -144.866806 40.243938 1.000000 1.000000 1.000000 +vn -0.339688 0.031808 -0.940000 +v 153.905472 -143.744949 39.957539 1.000000 1.000000 1.000000 +vn -0.653949 -0.158483 -0.739752 +v 153.910614 -144.617035 40.015339 1.000000 1.000000 1.000000 +vn -0.672962 0.009631 -0.739615 +v 153.528244 -142.960785 40.201340 1.000000 1.000000 1.000000 +vn -0.272178 0.121498 -0.954546 +v 153.750977 -142.112411 40.140938 1.000000 1.000000 1.000000 +vn -0.866601 -0.149985 -0.475928 +v 153.436829 -143.871933 40.452938 1.000000 1.000000 1.000000 +vn -0.894542 -0.039383 -0.445245 +v 153.292633 -142.987289 40.545738 1.000000 1.000000 1.000000 +vn -0.682485 0.113240 -0.722075 +v 153.505066 -142.101257 40.291939 1.000000 1.000000 1.000000 +vn -0.250147 0.180237 -0.951284 +v 154.031647 -140.510574 40.313938 1.000000 1.000000 1.000000 +vn -0.625867 0.273781 -0.730298 +v 153.798615 -140.424057 40.464939 1.000000 1.000000 1.000000 +vn -0.891443 0.079034 -0.446186 +v 153.268173 -142.090088 40.636337 1.000000 1.000000 1.000000 +vn -0.855870 0.196610 -0.478363 +v 153.363449 -141.199875 40.724339 1.000000 1.000000 1.000000 +vn -0.838660 0.308761 -0.448682 +v 153.574585 -140.341736 40.809540 1.000000 1.000000 1.000000 +vn -0.775256 0.410066 -0.480442 +v 153.874573 -139.567337 40.888138 1.000000 1.000000 1.000000 +vn -0.526328 0.424922 -0.736492 +v 154.493851 -138.939423 40.626137 1.000000 1.000000 1.000000 +vn -0.725876 0.516896 -0.453786 +v 154.299438 -138.792923 40.970737 1.000000 1.000000 1.000000 +vn -0.629581 0.603562 -0.489224 +v 154.822159 -138.093857 41.050938 1.000000 1.000000 1.000000 +vn -0.371142 0.550931 -0.747482 +v 155.579193 -137.687820 40.784340 1.000000 1.000000 1.000000 +vn -0.934684 0.311792 -0.170737 +v 153.448410 -140.294296 41.202740 1.000000 1.000000 1.000000 +vn -0.885915 0.430957 -0.171552 +v 153.756134 -139.501740 41.281338 1.000000 1.000000 1.000000 +vn -0.819208 0.546830 -0.172844 +v 154.191299 -138.710602 41.363739 1.000000 1.000000 1.000000 +vn -0.733339 0.657084 -0.174512 +v 154.725601 -137.996185 41.444138 1.000000 1.000000 1.000000 +vn -0.546383 0.698216 -0.462558 +v 155.431137 -137.486877 41.128738 1.000000 1.000000 1.000000 +vn -0.838301 0.524251 0.149709 +v 154.179703 -138.702225 42.179337 1.000000 1.000000 1.000000 +vn -0.755050 0.638071 0.150883 +v 154.715302 -137.986420 42.259537 1.000000 1.000000 1.000000 +vn -0.901877 0.405584 0.148727 +v 153.744537 -139.496170 42.096741 1.000000 1.000000 1.000000 +vn -0.852302 0.221519 0.473825 +v 153.579742 -140.343140 42.486538 1.000000 1.000000 1.000000 +vn -0.827711 0.340109 0.446342 +v 153.879715 -139.570114 42.565140 1.000000 1.000000 1.000000 +vn -0.947084 0.284841 0.147976 +v 153.436829 -140.290115 42.018139 1.000000 1.000000 1.000000 +vn -0.771975 0.448156 0.450789 +v 154.304596 -138.795715 42.647537 1.000000 1.000000 1.000000 +vn -0.686432 0.542285 0.484497 +v 154.826019 -138.098038 42.727940 1.000000 1.000000 1.000000 +vn -0.653103 0.741526 0.153607 +v 155.341019 -137.362701 42.337337 1.000000 1.000000 1.000000 +vn -0.597336 0.204714 0.775423 +v 154.090866 -139.684540 42.902939 1.000000 1.000000 1.000000 +vn -0.544509 0.255367 0.798935 +v 154.499008 -138.943619 42.985336 1.000000 1.000000 1.000000 +vn -0.667133 0.046328 0.743497 +v 153.601624 -141.248718 42.739140 1.000000 1.000000 1.000000 +vn -0.600950 0.628439 0.493886 +v 155.434998 -137.492477 42.805740 1.000000 1.000000 1.000000 +vn -0.507888 0.733070 0.452391 +v 156.108353 -136.994339 42.879936 1.000000 1.000000 1.000000 +vn -0.537498 0.829018 0.154357 +v 156.032394 -136.853409 42.411537 1.000000 1.000000 1.000000 +vn -0.411513 0.895431 0.169881 +v 156.797165 -136.445969 42.485138 1.000000 1.000000 1.000000 +vn -0.380650 0.907148 -0.179408 +v 156.801025 -136.459915 41.669540 1.000000 1.000000 1.000000 +vn -0.511161 0.840906 -0.177738 +v 156.038834 -136.864563 41.596138 1.000000 1.000000 1.000000 +vn -0.629643 0.756543 -0.176615 +v 155.348740 -137.373871 41.521938 1.000000 1.000000 1.000000 +vn -0.256554 0.951510 0.169731 +v 157.610840 -136.161316 42.557137 1.000000 1.000000 1.000000 +vn -0.112905 0.966641 0.229909 +v 158.451569 -136.006439 42.627136 1.000000 1.000000 1.000000 +vn -0.238191 0.954085 -0.181621 +v 157.613419 -136.173874 41.741539 1.000000 1.000000 1.000000 +vn 0.022320 0.985514 0.168121 +v 159.302597 -135.985504 42.694538 1.000000 1.000000 1.000000 +vn -0.086394 0.979531 -0.181812 +v 158.452850 -136.020386 41.811539 1.000000 1.000000 1.000000 +vn -0.052064 0.879619 -0.472821 +v 158.465729 -136.164108 41.418339 1.000000 1.000000 1.000000 +vn -0.181673 0.845146 -0.502716 +v 157.645599 -136.314804 41.348537 1.000000 1.000000 1.000000 +vn 0.066460 0.981183 -0.181280 +v 159.301315 -135.999466 41.879139 1.000000 1.000000 1.000000 +vn 0.083926 0.877491 -0.472193 +v 159.294861 -136.143173 41.485939 1.000000 1.000000 1.000000 +vn 0.256418 0.942827 0.212900 +v 160.125290 -136.094345 42.758141 1.000000 1.000000 1.000000 +vn 0.207720 0.959930 -0.188112 +v 160.122726 -136.108292 41.942738 1.000000 1.000000 1.000000 +vn 0.216356 0.838509 -0.500093 +v 160.096970 -136.249237 41.549538 1.000000 1.000000 1.000000 +vn 0.110170 0.656368 -0.746354 +v 159.283279 -136.399918 41.141541 1.000000 1.000000 1.000000 +vn -0.009037 0.646804 -0.762603 +v 158.487610 -136.419449 41.073936 1.000000 1.000000 1.000000 +vn 0.293507 0.592673 -0.750062 +v 160.821823 -136.727829 41.268139 1.000000 1.000000 1.000000 +vn 0.184019 0.230608 -0.955488 +v 160.740707 -136.978989 41.117138 1.000000 1.000000 1.000000 +vn 0.105664 0.258639 -0.960178 +v 159.270401 -136.666428 40.990540 1.000000 1.000000 1.000000 +vn 0.344063 0.813265 -0.469277 +v 160.900360 -136.485046 41.612740 1.000000 1.000000 1.000000 +vn 0.403546 0.461485 -0.790052 +v 162.235474 -137.528748 41.388538 1.000000 1.000000 1.000000 +vn 0.457626 0.737802 -0.496212 +v 161.665115 -136.843628 41.673920 1.000000 1.000000 1.000000 +vn 0.359522 0.903397 -0.233703 +v 160.944138 -136.348297 42.005737 1.000000 1.000000 1.000000 +vn 0.572015 0.678318 -0.461177 +v 162.374512 -137.319443 41.733116 1.000000 1.000000 1.000000 +vn 0.493243 0.838737 -0.230722 +v 161.726913 -136.716660 42.067120 1.000000 1.000000 1.000000 +vn 0.533482 0.421794 -0.733135 +v 162.848312 -138.088272 41.445538 1.000000 1.000000 1.000000 +vn 0.292650 0.082991 -0.952611 +v 163.589905 -139.570114 41.400539 1.000000 1.000000 1.000000 +vn 0.624165 0.273751 -0.731764 +v 163.804916 -139.440353 41.551537 1.000000 1.000000 1.000000 +vn 0.729865 0.482063 -0.484678 +v 163.551270 -138.558502 41.843117 1.000000 1.000000 1.000000 +vn 0.664573 0.591030 -0.457194 +v 163.013107 -137.904099 41.790119 1.000000 1.000000 1.000000 +vn 0.613074 0.756389 -0.228069 +v 162.451767 -137.203629 42.126137 1.000000 1.000000 1.000000 +vn 0.715808 0.660674 -0.226118 +v 163.105804 -137.800842 42.183121 1.000000 1.000000 1.000000 +vn 0.803856 0.387535 -0.451255 +v 164.012192 -139.314774 41.895920 1.000000 1.000000 1.000000 +vn 0.801840 0.554150 -0.223541 +v 163.656845 -138.470596 42.236320 1.000000 1.000000 1.000000 +vn 0.835793 0.267236 -0.479619 +v 164.367538 -140.135223 41.946716 1.000000 1.000000 1.000000 +vn 0.871368 0.437551 -0.221960 +v 164.128082 -139.243607 42.289120 1.000000 1.000000 1.000000 +vn 0.896872 0.440772 0.036624 +v 164.169266 -139.218491 42.694519 1.000000 1.000000 1.000000 +vn 0.816202 0.574379 -0.062474 +v 163.694183 -138.439911 42.641720 1.000000 1.000000 1.000000 +vn 0.709303 0.704525 0.023092 +v 163.139282 -137.764557 42.588718 1.000000 1.000000 1.000000 +vn 0.624318 0.780396 0.034767 +v 162.480087 -137.161774 42.531719 1.000000 1.000000 1.000000 +vn 0.478214 0.877212 0.042547 +v 161.748810 -136.670609 42.472519 1.000000 1.000000 1.000000 +vn 0.350071 0.932807 0.085567 +v 160.959579 -136.299454 42.411339 1.000000 1.000000 1.000000 +vn 0.923532 0.313631 -0.220735 +v 164.491150 -140.085007 42.339737 1.000000 1.000000 1.000000 +vn 0.932653 0.331550 0.142240 +v 164.536194 -140.065475 42.745319 1.000000 1.000000 1.000000 +vn -0.193798 0.575176 -0.794742 +v 156.940063 -136.831085 40.931938 1.000000 1.000000 1.000000 +vn -0.316989 0.824483 -0.468771 +v 156.851227 -136.592468 41.276539 1.000000 1.000000 1.000000 +vn -0.426396 0.756248 -0.496261 +v 156.105774 -136.988754 41.202938 1.000000 1.000000 1.000000 +vn 0.259397 -0.042360 -0.964841 +v 164.254242 -142.698456 41.586121 1.000000 1.000000 1.000000 +vn 0.253417 -0.140929 -0.957036 +v 163.945251 -144.308670 41.667919 1.000000 1.000000 1.000000 +vn -0.182256 0.022468 -0.982994 +v 164.021210 -142.683121 41.591316 1.000000 1.000000 1.000000 +vn -0.612105 -0.107342 -0.783457 +v 163.793335 -141.910095 41.682716 1.000000 1.000000 1.000000 +vn -0.652598 0.170606 -0.738248 +v 163.519104 -144.141235 41.808937 1.000000 1.000000 1.000000 +vn -0.924485 0.039519 -0.379165 +v 163.565445 -142.653809 42.061920 1.000000 1.000000 1.000000 +vn -0.266573 0.039569 -0.963002 +v 163.725082 -144.222168 41.673119 1.000000 1.000000 1.000000 +vn 0.186578 -0.212957 -0.959082 +v 162.817413 -146.281677 41.768936 1.000000 1.000000 1.000000 +vn -0.182565 0.106926 -0.977362 +v 162.647476 -146.108658 41.773918 1.000000 1.000000 1.000000 +vn -0.662998 0.372610 -0.649305 +v 162.938446 -145.349594 41.875519 1.000000 1.000000 1.000000 +vn -0.792517 0.264924 -0.549302 +v 163.296356 -144.051926 42.143719 1.000000 1.000000 1.000000 +vn -0.484514 0.656117 -0.578582 +v 161.524780 -146.795166 41.964737 1.000000 1.000000 1.000000 +vn -0.675162 0.623565 -0.394111 +v 162.316589 -145.766800 42.244518 1.000000 1.000000 1.000000 +vn -0.787421 0.452760 -0.418303 +v 162.742737 -145.201691 42.210320 1.000000 1.000000 1.000000 +vn -0.961616 0.206259 -0.180972 +v 163.340134 -143.337524 42.501717 1.000000 1.000000 1.000000 +vn -0.510669 0.712064 -0.481853 +v 161.399902 -146.574692 42.299519 1.000000 1.000000 1.000000 +vn -0.715291 0.655127 -0.243246 +v 162.216171 -145.663544 42.642120 1.000000 1.000000 1.000000 +vn -0.977831 0.003035 -0.209373 +v 163.426392 -142.644043 42.459320 1.000000 1.000000 1.000000 +vn -0.993912 -0.095257 0.055355 +v 163.367172 -141.950562 42.869720 1.000000 1.000000 1.000000 +vn -0.549337 0.789775 -0.272917 +v 161.327805 -146.446335 42.696918 1.000000 1.000000 1.000000 +vn -0.902193 0.379018 -0.205894 +v 160.539856 -146.901199 42.600319 1.000000 1.000000 1.000000 +vn -0.850898 0.265883 -0.453078 +v 160.620972 -147.142593 42.119720 1.000000 1.000000 1.000000 +vn -0.699539 -0.035833 -0.713695 +v 160.722687 -147.445389 41.876320 1.000000 1.000000 1.000000 +vn -0.419837 -0.599224 -0.681665 +v 160.872025 -147.865387 41.896519 1.000000 1.000000 1.000000 +vn -0.888835 0.112859 0.444113 +v 153.368591 -141.201263 42.401337 1.000000 1.000000 1.000000 +vn -0.896724 -0.008685 0.442504 +v 153.273331 -142.090088 42.313339 1.000000 1.000000 1.000000 +vn -0.869239 -0.130100 0.476967 +v 153.299072 -142.985901 42.222740 1.000000 1.000000 1.000000 +vn -0.976331 0.157970 0.147727 +v 153.219254 -141.170578 41.933140 1.000000 1.000000 1.000000 +vn -0.988786 0.024196 0.147367 +v 153.122681 -142.083115 41.844940 1.000000 1.000000 1.000000 +vn -0.983105 -0.107398 0.148224 +v 153.147141 -143.002640 41.754337 1.000000 1.000000 1.000000 +vn -0.982587 -0.076469 -0.169341 +v 153.160019 -143.001251 40.938938 1.000000 1.000000 1.000000 +vn -0.983977 0.055116 -0.169564 +v 153.134277 -142.083115 41.029537 1.000000 1.000000 1.000000 +vn -0.960033 -0.237802 0.147603 +v 153.295212 -143.911011 41.661537 1.000000 1.000000 1.000000 +vn -0.963801 -0.205763 -0.169558 +v 153.308075 -143.906815 40.846138 1.000000 1.000000 1.000000 +vn -0.967525 0.186871 -0.170219 +v 153.232117 -141.173355 41.117538 1.000000 1.000000 1.000000 +vn -0.852662 -0.270525 -0.446972 +v 153.690460 -144.713318 40.359737 1.000000 1.000000 1.000000 +vn -0.403802 -0.555661 0.726764 +v 161.157852 -137.722702 19.004200 1.000000 1.000000 1.000000 +vn -0.762228 -0.486092 0.427460 +v 162.513565 -139.212921 18.905800 1.000000 1.000000 1.000000 +vn -0.673325 -0.658956 0.335276 +v 162.086121 -138.723145 18.821198 1.000000 1.000000 1.000000 +vn -0.615065 -0.699069 0.364688 +v 161.593018 -138.298965 18.737997 1.000000 1.000000 1.000000 +vn -0.122579 -0.667559 0.734398 +v 159.262680 -137.174332 18.772400 1.000000 1.000000 1.000000 +vn 0.160337 -0.639782 0.751646 +v 157.305710 -137.506424 18.556999 1.000000 1.000000 1.000000 +vn -0.015789 -0.244568 0.969504 +v 157.219452 -137.256668 18.711597 1.000000 1.000000 1.000000 +vn 0.357947 -0.570534 0.739165 +v 156.163712 -138.177582 18.424797 1.000000 1.000000 1.000000 +vn 0.168643 -0.908863 0.381481 +v 157.989365 -137.548279 18.278599 1.000000 1.000000 1.000000 +vn 0.387722 -0.804713 0.449565 +v 156.824188 -138.025482 18.142197 1.000000 1.000000 1.000000 +vn 0.069351 -0.240993 0.968046 +v 156.016937 -137.962692 18.579399 1.000000 1.000000 1.000000 +vn 0.494817 -0.467277 0.732672 +v 155.437576 -138.891983 18.330399 1.000000 1.000000 1.000000 +vn 0.134658 -0.206242 0.969191 +v 155.254745 -138.713394 18.484997 1.000000 1.000000 1.000000 +vn 0.629905 -0.275376 0.726214 +v 154.462952 -140.707321 18.155998 1.000000 1.000000 1.000000 +vn 0.644457 -0.619182 0.448653 +v 155.613953 -139.062225 17.982800 1.000000 1.000000 1.000000 +vn 0.819346 -0.482634 0.309412 +v 155.231583 -139.592438 17.922600 1.000000 1.000000 1.000000 +vn 0.829646 -0.341585 0.441597 +v 154.685684 -140.788254 17.808399 1.000000 1.000000 1.000000 +vn 0.199651 -0.143096 0.969362 +v 154.228638 -140.622192 18.310600 1.000000 1.000000 1.000000 +vn 0.689846 -0.050106 0.722220 +v 154.217041 -142.565903 18.014797 1.000000 1.000000 1.000000 +vn 0.249003 -0.062009 0.966516 +v 153.971146 -142.577057 18.169197 1.000000 1.000000 1.000000 +vn 0.256756 0.010993 0.966414 +v 154.206741 -144.021240 18.072998 1.000000 1.000000 1.000000 +vn 0.243313 0.081062 0.966555 +v 154.783539 -145.339828 17.985197 1.000000 1.000000 1.000000 +vn 0.195544 0.139219 0.970763 +v 155.660309 -146.442139 17.904198 1.000000 1.000000 1.000000 +vn 0.119207 0.193533 0.973825 +v 157.456345 -147.552826 17.793800 1.000000 1.000000 1.000000 +vn 0.009645 0.275667 0.961205 +v 159.403015 -147.802597 17.705399 1.000000 1.000000 1.000000 +vn 0.635998 0.146890 0.757582 +v 154.441071 -143.940308 17.918400 1.000000 1.000000 1.000000 +vn 0.903629 -0.038203 0.426608 +v 154.452652 -142.556137 17.667000 1.000000 1.000000 1.000000 +vn 0.903638 0.138193 0.405390 +v 154.519592 -143.217514 17.618000 1.000000 1.000000 1.000000 +vn 0.605495 0.310013 0.732985 +v 154.989532 -145.193314 17.830597 1.000000 1.000000 1.000000 +vn 0.798835 0.407312 0.442673 +v 155.187805 -145.053787 17.482800 1.000000 1.000000 1.000000 +vn 0.889498 0.414382 0.192563 +v 155.297241 -144.977036 17.089199 1.000000 1.000000 1.000000 +vn 0.945517 0.321719 0.049954 +v 154.835037 -143.803558 16.746597 1.000000 1.000000 1.000000 +vn 0.987860 0.155350 -0.000022 +v 154.693405 -143.184036 16.793598 1.000000 1.000000 1.000000 +vn 0.600619 0.314241 -0.735194 +v 155.214844 -144.802628 16.328400 1.000000 1.000000 1.000000 +vn 0.622529 0.099197 -0.776284 +v 154.618744 -143.144958 16.326599 1.000000 1.000000 1.000000 +vn 0.969792 -0.048352 0.239095 +v 154.583984 -142.550552 17.273399 1.000000 1.000000 1.000000 +vn 0.999533 -0.029518 -0.007850 +v 154.631607 -142.113815 16.877197 1.000000 1.000000 1.000000 +vn 0.861353 -0.166883 0.479813 +v 154.529907 -141.434280 17.754200 1.000000 1.000000 1.000000 +vn 0.981526 -0.191317 -0.001948 +v 154.703720 -141.470566 16.929798 1.000000 1.000000 1.000000 +vn 0.913519 -0.402862 0.056438 +v 155.079666 -140.256622 17.040199 1.000000 1.000000 1.000000 +vn 0.630020 -0.076527 -0.772799 +v 154.589127 -141.658936 16.327198 1.000000 1.000000 1.000000 +vn 0.956609 -0.288926 -0.037696 +v 154.805420 -140.831497 16.529198 1.000000 1.000000 1.000000 +vn 0.500061 -0.278093 -0.820124 +v 155.176224 -139.671982 16.326599 1.000000 1.000000 1.000000 +vn 0.850930 -0.524665 -0.025403 +v 155.378342 -139.699890 17.098198 1.000000 1.000000 1.000000 +vn 0.686939 -0.685118 0.242339 +v 155.710526 -139.157104 17.588997 1.000000 1.000000 1.000000 +vn 0.725965 -0.687727 -0.002452 +v 155.951279 -138.957565 17.189198 1.000000 1.000000 1.000000 +vn 0.752327 -0.635467 -0.173740 +v 155.706665 -139.152908 16.703598 1.000000 1.000000 1.000000 +vn 0.319107 -0.413838 -0.852590 +v 156.440521 -138.192932 16.327400 1.000000 1.000000 1.000000 +vn 0.619002 -0.747319 -0.241559 +v 156.377441 -138.492920 16.798199 1.000000 1.000000 1.000000 +vn 0.601545 -0.798701 0.014822 +v 156.408340 -138.538971 17.252998 1.000000 1.000000 1.000000 +vn 0.455357 -0.676400 0.578906 +v 156.304047 -138.384094 18.077198 1.000000 1.000000 1.000000 +vn 0.412965 -0.910666 -0.012118 +v 157.452484 -137.925018 17.384998 1.000000 1.000000 1.000000 +vn 0.425077 -0.870391 -0.248453 +v 157.434448 -137.871994 16.930199 1.000000 1.000000 1.000000 +vn 0.120550 -0.428061 -0.895674 +v 157.948166 -137.348740 16.326599 1.000000 1.000000 1.000000 +vn 0.234645 -0.936985 -0.258846 +v 158.017685 -137.680832 16.999599 1.000000 1.000000 1.000000 +vn 0.176139 -0.855019 -0.487768 +v 157.986786 -137.534332 16.601997 1.000000 1.000000 1.000000 +vn 0.077912 -0.934127 0.348333 +v 158.624100 -137.440842 18.351597 1.000000 1.000000 1.000000 +vn 0.106194 -0.991870 0.070127 +v 158.639542 -137.630600 17.527397 1.000000 1.000000 1.000000 +vn -0.117907 -0.884283 0.451820 +v 159.249802 -137.429672 18.424797 1.000000 1.000000 1.000000 +vn -0.262087 -0.889419 0.374493 +v 159.858780 -137.510605 18.498798 1.000000 1.000000 1.000000 +vn -0.085154 -0.996224 0.016960 +v 159.239502 -137.620834 17.600401 1.000000 1.000000 1.000000 +vn -0.042955 -0.971762 -0.232021 +v 159.242081 -137.565018 17.145599 1.000000 1.000000 1.000000 +vn -0.356670 -0.823033 0.442044 +v 160.460037 -137.682236 18.575397 1.000000 1.000000 1.000000 +vn -0.474491 -0.754149 0.454002 +v 161.050995 -137.951523 18.656597 1.000000 1.000000 1.000000 +vn -0.285062 -0.958360 -0.016888 +v 160.403381 -137.863632 17.751198 1.000000 1.000000 1.000000 +vn -0.496561 -0.867795 0.018922 +v 160.971161 -138.121765 17.832199 1.000000 1.000000 1.000000 +vn -0.389010 -0.788164 -0.476937 +v 161.057434 -137.937576 16.980000 1.000000 1.000000 1.000000 +vn -0.513848 -0.817210 -0.261012 +v 160.994339 -138.072937 17.377399 1.000000 1.000000 1.000000 +vn -0.706961 -0.705003 0.056364 +v 161.966400 -138.865479 17.996998 1.000000 1.000000 1.000000 +vn -0.657714 -0.713047 -0.242850 +v 162.001160 -138.823608 17.542198 1.000000 1.000000 1.000000 +vn -0.549488 -0.684734 -0.478751 +v 162.095139 -138.713394 17.144600 1.000000 1.000000 1.000000 +vn -0.653332 -0.532356 -0.538288 +v 162.523865 -139.204544 17.229198 1.000000 1.000000 1.000000 +vn -0.438750 -0.602443 -0.666754 +v 162.256073 -138.523621 16.809799 1.000000 1.000000 1.000000 +vn -0.644782 -0.425722 -0.634836 +v 163.089066 -139.616165 16.980797 1.000000 1.000000 1.000000 +vn -0.112218 -0.231553 -0.966328 +v 162.876648 -138.887802 16.758598 1.000000 1.000000 1.000000 +vn -0.240436 -0.614086 -0.751724 +v 161.164291 -137.707352 16.645199 1.000000 1.000000 1.000000 +vn -0.018202 -0.267441 -0.963402 +v 161.262131 -137.496658 16.509399 1.000000 1.000000 1.000000 +vn 0.035507 -0.236656 -0.970945 +v 159.947617 -137.009689 16.351597 1.000000 1.000000 1.000000 +vn -0.028150 -0.646919 -0.762039 +v 159.906418 -137.242706 16.487400 1.000000 1.000000 1.000000 +vn 0.029477 -0.909373 -0.414936 +v 159.249802 -137.414337 16.748199 1.000000 1.000000 1.000000 +vn -0.205837 -0.751605 -0.626675 +v 160.463898 -137.668289 16.898998 1.000000 1.000000 1.000000 +vn 0.487298 0.467421 0.737603 +v 155.823822 -146.242599 17.749599 1.000000 1.000000 1.000000 +vn 0.641286 0.618253 0.454439 +v 155.980896 -146.051437 17.401997 1.000000 1.000000 1.000000 +vn 0.259281 0.627535 0.734149 +v 157.532303 -147.298874 17.639198 1.000000 1.000000 1.000000 +vn 0.486463 0.789587 0.374041 +v 157.044342 -146.814697 17.324997 1.000000 1.000000 1.000000 +vn 0.572140 0.799164 0.184374 +v 156.592438 -146.376556 16.966400 1.000000 1.000000 1.000000 +vn 0.683235 0.706529 0.184408 +v 156.068436 -145.945404 17.008400 1.000000 1.000000 1.000000 +vn 0.503538 0.491122 -0.710808 +v 155.951279 -145.786331 16.326599 1.000000 1.000000 1.000000 +vn 0.338868 0.595763 -0.728173 +v 156.807449 -146.474228 16.326599 1.000000 1.000000 1.000000 +vn 0.189533 0.703638 -0.684815 +v 157.923706 -146.959808 16.327000 1.000000 1.000000 1.000000 +vn 0.311155 0.852290 0.420456 +v 157.604401 -147.056091 17.291599 1.000000 1.000000 1.000000 +vn -0.026057 0.709027 -0.704699 +v 159.104324 -147.103531 16.326599 1.000000 1.000000 1.000000 +vn 0.145136 0.923229 0.355785 +v 158.191498 -147.215149 17.259800 1.000000 1.000000 1.000000 +vn 0.003009 0.657862 0.753133 +v 159.383698 -147.536087 17.550800 1.000000 1.000000 1.000000 +vn 0.003411 0.836046 0.548650 +v 159.365677 -147.280731 17.203197 1.000000 1.000000 1.000000 +vn -0.198741 0.964926 0.171524 +v 159.928314 -147.047714 16.783398 1.000000 1.000000 1.000000 +vn 0.428014 0.878217 0.213400 +v 160.534714 -146.895630 16.941799 1.000000 1.000000 1.000000 +vn 0.487405 0.684203 0.542496 +v 160.637711 -147.197006 17.473598 1.000000 1.000000 1.000000 +vn 0.382383 0.736458 -0.558044 +v 160.514114 -146.849579 16.326599 1.000000 1.000000 1.000000 +vn -0.335028 -0.914655 -0.226191 +v 161.031677 -148.356537 42.746319 1.000000 1.000000 1.000000 +vn 0.547015 -0.807887 -0.219302 +v 162.086121 -147.781662 42.712517 1.000000 1.000000 1.000000 +vn 0.490213 -0.738833 -0.462404 +v 162.016602 -147.658875 42.319321 1.000000 1.000000 1.000000 +vn 0.638826 -0.621244 -0.453826 +v 163.167618 -146.643066 42.264519 1.000000 1.000000 1.000000 +vn 0.719585 -0.667519 -0.191355 +v 163.264175 -146.742142 42.657516 1.000000 1.000000 1.000000 +vn 0.337959 -0.513311 -0.788857 +v 161.891708 -147.439804 41.974918 1.000000 1.000000 1.000000 +vn 0.485106 -0.464152 -0.741104 +v 162.996368 -146.465866 41.919918 1.000000 1.000000 1.000000 +vn 0.706544 -0.444175 -0.550912 +v 163.704498 -145.932846 42.230141 1.000000 1.000000 1.000000 +vn 0.804257 -0.552023 -0.220094 +v 163.812637 -146.015167 42.623119 1.000000 1.000000 1.000000 +vn 0.875010 -0.416079 -0.247458 +v 164.214325 -145.302155 42.590736 1.000000 1.000000 1.000000 +vn 0.823804 -0.325681 -0.463982 +v 164.398453 -144.487274 42.163521 1.000000 1.000000 1.000000 +vn 0.933026 -0.321848 -0.160863 +v 164.523331 -144.537506 42.556717 1.000000 1.000000 1.000000 +vn 0.959395 -0.196886 -0.201985 +v 164.755081 -143.657059 42.517120 1.000000 1.000000 1.000000 +vn 0.631747 -0.280119 -0.722793 +v 164.175705 -144.399368 41.818916 1.000000 1.000000 1.000000 +vn 0.858064 -0.187303 -0.478166 +v 164.625031 -143.627747 42.123917 1.000000 1.000000 1.000000 +vn 0.984092 -0.058564 -0.167730 +v 164.869659 -142.737518 42.474918 1.000000 1.000000 1.000000 +vn 0.892422 -0.071410 -0.445514 +v 164.737061 -142.729156 42.081718 1.000000 1.000000 1.000000 +vn 0.979586 0.060121 -0.191826 +v 164.859360 -141.811035 42.430519 1.000000 1.000000 1.000000 +vn 0.681839 -0.075155 -0.727632 +v 164.500153 -142.713806 41.737137 1.000000 1.000000 1.000000 +vn 0.878824 0.043414 -0.475166 +v 164.726746 -141.823578 42.037319 1.000000 1.000000 1.000000 +vn 0.963720 0.192918 -0.184461 +v 164.740921 -140.980804 42.388519 1.000000 1.000000 1.000000 +vn 0.880133 0.160850 -0.446646 +v 164.610886 -141.012894 41.995537 1.000000 1.000000 1.000000 +vn 0.677432 0.101121 -0.728602 +v 164.379135 -141.067307 41.650940 1.000000 1.000000 1.000000 +vn -0.649291 0.218461 0.728489 +v -163.954269 -139.771042 18.567398 1.000000 1.000000 1.000000 +vn -0.839627 0.195053 0.506933 +v -164.460236 -140.446381 18.162399 1.000000 1.000000 1.000000 +vn -0.631572 -0.065134 0.772577 +v -164.498856 -142.119385 18.371597 1.000000 1.000000 1.000000 +vn -0.313897 0.048158 0.948235 +v -163.753418 -139.877090 18.707798 1.000000 1.000000 1.000000 +vn -0.539279 0.348598 0.766588 +v -163.107101 -138.392456 18.709599 1.000000 1.000000 1.000000 +vn -0.425334 0.011135 0.904968 +v -164.196304 -141.351959 18.575798 1.000000 1.000000 1.000000 +vn -0.830455 0.332260 0.447156 +v -164.167984 -139.659424 18.229597 1.000000 1.000000 1.000000 +vn -0.333991 0.259063 0.906276 +v -162.423447 -138.004547 18.923199 1.000000 1.000000 1.000000 +vn 0.069136 -0.231949 0.970268 +v -162.268951 -138.201294 18.926998 1.000000 1.000000 1.000000 +vn -0.044601 -0.240014 0.969744 +v -160.456177 -137.133865 19.158798 1.000000 1.000000 1.000000 +vn -0.202907 0.368981 0.907018 +v -160.525696 -136.885498 19.154999 1.000000 1.000000 1.000000 +vn 0.171893 -0.187856 0.967038 +v -163.538406 -139.988724 18.711597 1.000000 1.000000 1.000000 +vn -0.643409 -0.250032 0.723539 +v -164.256821 -144.120300 18.222397 1.000000 1.000000 1.000000 +vn -0.281012 -0.137145 0.949854 +v -164.043106 -144.047745 18.362997 1.000000 1.000000 1.000000 +vn -0.329918 -0.251291 0.909949 +v -163.443130 -145.447266 18.252598 1.000000 1.000000 1.000000 +vn -0.897249 -0.014664 0.441282 +v -164.735764 -142.109634 18.033798 1.000000 1.000000 1.000000 +vn -0.841087 -0.138803 0.522787 +v -164.662369 -143.375198 17.942799 1.000000 1.000000 1.000000 +vn -0.835489 -0.301177 0.459620 +v -164.483414 -144.195663 17.884598 1.000000 1.000000 1.000000 +vn -0.430617 -0.444281 0.785610 +v -163.183060 -146.231445 18.059399 1.000000 1.000000 1.000000 +vn -0.852862 0.118620 0.508484 +v -164.649506 -141.264053 18.097397 1.000000 1.000000 1.000000 +vn -0.976016 0.154155 0.153717 +v -164.798859 -141.234756 17.629200 1.000000 1.000000 1.000000 +vn -0.980611 -0.042927 0.191204 +v -164.888977 -142.536606 17.534599 1.000000 1.000000 1.000000 +vn -0.966904 -0.161830 0.197253 +v -164.811722 -143.401718 17.474598 1.000000 1.000000 1.000000 +vn -0.989941 -0.134002 -0.045387 +v -164.846481 -143.407288 17.064400 1.000000 1.000000 1.000000 +vn -0.999178 0.040345 -0.004088 +v -164.921158 -142.101257 17.155399 1.000000 1.000000 1.000000 +vn -0.950386 0.273876 0.147510 +v -164.604431 -140.396164 17.694199 1.000000 1.000000 1.000000 +vn -0.907389 0.393257 0.148303 +v -164.304459 -139.588257 17.761200 1.000000 1.000000 1.000000 +vn -0.656280 -0.131251 -0.743014 +v -164.675247 -143.749146 16.326599 1.000000 1.000000 1.000000 +vn -0.957616 -0.283386 -0.051612 +v -164.661087 -144.255661 17.006397 1.000000 1.000000 1.000000 +vn -0.949210 0.033766 -0.312825 +v -164.873535 -142.104050 16.750000 1.000000 1.000000 1.000000 +vn -0.909191 -0.394431 -0.133400 +v -164.372696 -145.064941 16.950199 1.000000 1.000000 1.000000 +vn -0.587711 0.151130 -0.794831 +v -164.551651 -140.898468 16.326797 1.000000 1.000000 1.000000 +vn -0.545385 -0.385355 -0.744350 +v -163.499771 -146.405869 16.326797 1.000000 1.000000 1.000000 +vn -0.938842 -0.282000 0.197615 +v -164.627609 -144.244492 17.416397 1.000000 1.000000 1.000000 +vn -0.888951 -0.396578 0.229110 +v -164.341797 -145.049606 17.360197 1.000000 1.000000 1.000000 +vn -0.868173 -0.486221 -0.099319 +v -163.986450 -145.826797 16.896000 1.000000 1.000000 1.000000 +vn -0.467256 -0.556730 -0.686821 +v -162.653900 -147.368637 16.326599 1.000000 1.000000 1.000000 +vn -0.779900 -0.625880 -0.005441 +v -163.504929 -146.530045 16.843399 1.000000 1.000000 1.000000 +vn -0.832613 -0.516523 0.199902 +v -163.958130 -145.805878 17.306000 1.000000 1.000000 1.000000 +vn -0.723672 -0.426145 0.542862 +v -163.830658 -145.717957 17.774399 1.000000 1.000000 1.000000 +vn -0.668872 -0.592130 0.449436 +v -163.363312 -146.398880 17.721600 1.000000 1.000000 1.000000 +vn -0.697778 -0.697274 0.164056 +v -163.109680 -146.931900 17.218998 1.000000 1.000000 1.000000 +vn -0.609061 -0.777198 0.158142 +v -162.504562 -147.488647 17.169800 1.000000 1.000000 1.000000 +vn -0.524642 -0.656870 0.541547 +v -162.414444 -147.357483 17.638199 1.000000 1.000000 1.000000 +vn -0.305902 -0.591105 0.746337 +v -161.649673 -147.582123 17.928799 1.000000 1.000000 1.000000 +vn -0.409385 -0.780797 0.471974 +v -161.764252 -147.806778 17.591000 1.000000 1.000000 1.000000 +vn -0.092397 -0.609174 0.787636 +v -160.279785 -148.156998 17.840797 1.000000 1.000000 1.000000 +vn -0.116118 -0.277402 0.953711 +v -161.542816 -147.370026 18.069395 1.000000 1.000000 1.000000 +vn -0.501930 -0.853349 0.140930 +v -161.836349 -147.951889 17.122799 1.000000 1.000000 1.000000 +vn -0.178351 -0.851983 0.492256 +v -160.333862 -148.406769 17.503197 1.000000 1.000000 1.000000 +vn -0.372426 -0.902265 0.217292 +v -161.120514 -148.313278 17.077797 1.000000 1.000000 1.000000 +vn 0.185919 -0.610026 0.770261 +v -158.006104 -148.218399 17.718197 1.000000 1.000000 1.000000 +vn 0.044100 -0.415542 0.908504 +v -158.827515 -148.073288 17.900597 1.000000 1.000000 1.000000 +vn 0.022473 -0.822250 0.568682 +v -158.812057 -148.572815 17.422199 1.000000 1.000000 1.000000 +vn -0.223445 -0.961466 0.160175 +v -160.369904 -148.565842 17.034798 1.000000 1.000000 1.000000 +vn -0.113296 -0.978095 0.174627 +v -159.596130 -148.708160 16.993599 1.000000 1.000000 1.000000 +vn -0.260015 -0.696928 -0.668344 +v -160.933838 -148.429092 16.327999 1.000000 1.000000 1.000000 +vn 0.040941 -0.759821 -0.648842 +v -158.703918 -148.797455 16.326797 1.000000 1.000000 1.000000 +vn 0.047067 -0.975102 0.216703 +v -158.806915 -148.736069 16.953999 1.000000 1.000000 1.000000 +vn 0.219848 -0.847629 0.482900 +v -157.963608 -148.470947 17.380398 1.000000 1.000000 1.000000 +vn 0.218472 -0.964066 0.151154 +v -157.935287 -148.632813 16.911999 1.000000 1.000000 1.000000 +vn 0.314901 -0.928429 0.197123 +v -157.183395 -148.426300 16.876999 1.000000 1.000000 1.000000 +vn 0.289917 -0.685610 -0.667748 +v -156.842209 -148.327240 16.326797 1.000000 1.000000 1.000000 +vn 0.400257 -0.483167 0.778681 +v -155.992477 -147.344925 17.617798 1.000000 1.000000 1.000000 +vn 0.370735 -0.746085 0.553094 +v -156.524200 -147.964447 17.311798 1.000000 1.000000 1.000000 +vn 0.474379 -0.864735 0.164916 +v -156.458557 -148.112350 16.843597 1.000000 1.000000 1.000000 +vn 0.582768 -0.799906 0.143287 +v -155.778763 -147.696548 16.811798 1.000000 1.000000 1.000000 +vn 0.525157 -0.565846 -0.635632 +v -155.167206 -147.247253 16.326797 1.000000 1.000000 1.000000 +vn 0.550198 -0.697492 0.459116 +v -155.862442 -147.558411 17.279999 1.000000 1.000000 1.000000 +vn 0.204704 -0.339585 0.918029 +v -156.723770 -147.513763 17.790199 1.000000 1.000000 1.000000 +vn 0.484852 -0.374976 0.790134 +v -154.912277 -146.344467 17.561199 1.000000 1.000000 1.000000 +vn 0.766348 -0.632423 0.112919 +v -154.623886 -146.626328 16.755199 1.000000 1.000000 1.000000 +vn 0.686996 -0.561457 0.461305 +v -154.735901 -146.516083 17.223400 1.000000 1.000000 1.000000 +vn 0.824995 -0.545813 0.146531 +v -154.147522 -145.969116 16.729000 1.000000 1.000000 1.000000 +vn 0.918705 0.262686 0.294918 +v -153.788315 -145.162628 16.993797 1.000000 1.000000 1.000000 +vn 0.589007 0.375539 0.715571 +v -154.169403 -144.960297 17.642998 1.000000 1.000000 1.000000 +vn -0.140064 0.175689 0.974431 +v -155.257324 -146.009583 17.705399 1.000000 1.000000 1.000000 +vn 0.040545 0.224017 0.973741 +v -158.835236 -147.815140 17.904400 1.000000 1.000000 1.000000 +vn 0.116969 0.212862 0.970056 +v -160.171646 -147.670029 17.985197 1.000000 1.000000 1.000000 +vn 0.178076 0.171616 0.968936 +v -161.426941 -147.142593 18.072998 1.000000 1.000000 1.000000 +vn 0.224748 0.113722 0.967758 +v -162.516144 -146.270523 18.169399 1.000000 1.000000 1.000000 +vn 0.241302 0.024602 0.970138 +v -163.570587 -144.660309 18.310600 1.000000 1.000000 1.000000 +vn 0.130720 -0.085341 0.987739 +v -164.039246 -142.511490 18.484997 1.000000 1.000000 1.000000 +vn 0.242372 -0.145162 0.959262 +v -163.961990 -141.396606 18.579597 1.000000 1.000000 1.000000 +vn 0.830429 0.182661 -0.526329 +v -153.666000 -145.229599 16.326797 1.000000 1.000000 1.000000 +vn -0.967683 0.171516 -0.184854 +v -164.785965 -141.237549 16.813599 1.000000 1.000000 1.000000 +vn -0.932782 0.308225 -0.186857 +v -164.591553 -140.400345 16.878597 1.000000 1.000000 1.000000 +vn -0.881975 0.411918 -0.229005 +v -164.292877 -139.595230 16.945795 1.000000 1.000000 1.000000 +vn -0.142762 -0.208509 0.967545 +v -158.396210 -136.939911 19.407997 1.000000 1.000000 1.000000 +vn -0.071002 0.331457 0.940795 +v -158.367874 -136.683182 19.404198 1.000000 1.000000 1.000000 +vn -0.214791 -0.161641 0.963191 +v -157.064957 -137.322235 19.583397 1.000000 1.000000 1.000000 +vn 0.012140 0.312598 0.949808 +v -156.973541 -137.082245 19.579597 1.000000 1.000000 1.000000 +vn -0.259280 -0.086364 0.961933 +v -155.603668 -138.331070 19.814999 1.000000 1.000000 1.000000 +vn -0.545512 -0.421261 0.724538 +v -155.769745 -138.527802 19.660397 1.000000 1.000000 1.000000 +vn -0.282573 -0.012204 0.959168 +v -154.724319 -139.482208 20.007797 1.000000 1.000000 1.000000 +vn -0.386335 -0.557287 0.734967 +v -157.160233 -137.567825 19.428799 1.000000 1.000000 1.000000 +vn -0.649680 -0.253087 0.716843 +v -154.932877 -139.623154 19.853201 1.000000 1.000000 1.000000 +vn -0.272543 0.075737 0.959158 +v -154.156540 -140.874756 20.211998 1.000000 1.000000 1.000000 +vn -0.702171 -0.066176 0.708927 +v -154.394714 -140.947311 20.057400 1.000000 1.000000 1.000000 +vn -0.874459 -0.276553 0.398548 +v -154.833755 -140.373825 19.607597 1.000000 1.000000 1.000000 +vn -0.817515 -0.406746 0.407710 +v -155.133728 -139.757095 19.505600 1.000000 1.000000 1.000000 +vn -0.767752 -0.497064 0.404333 +v -155.500656 -139.204544 19.407799 1.000000 1.000000 1.000000 +vn -0.178430 0.115685 0.977128 +v -154.016190 -143.114273 20.529198 1.000000 1.000000 1.000000 +vn -0.588021 0.337462 0.735085 +v -154.468094 -144.029602 20.524799 1.000000 1.000000 1.000000 +vn 0.362916 0.055671 0.930157 +v -153.779297 -143.150543 20.525398 1.000000 1.000000 1.000000 +vn -0.818089 0.045907 0.573257 +v -154.214462 -142.358002 20.266197 1.000000 1.000000 1.000000 +vn -0.819573 0.355124 0.449652 +v -154.692123 -143.947281 20.177200 1.000000 1.000000 1.000000 +vn -0.897684 0.195358 0.394966 +v -154.493851 -143.043106 20.026798 1.000000 1.000000 1.000000 +vn -0.863749 0.093206 0.495228 +v -154.450073 -142.358002 19.918598 1.000000 1.000000 1.000000 +vn -0.915973 -0.048745 0.398268 +v -154.493851 -141.678467 19.812798 1.000000 1.000000 1.000000 +vn -0.964546 -0.252018 0.078347 +v -154.791260 -141.068710 18.885399 1.000000 1.000000 1.000000 +vn -0.947154 0.223261 0.230333 +v -154.623886 -143.022171 19.633198 1.000000 1.000000 1.000000 +vn -0.998240 -0.048012 -0.034797 +v -154.627747 -142.358002 19.094200 1.000000 1.000000 1.000000 +vn -0.930058 0.326316 0.168850 +v -154.815720 -143.901230 19.783398 1.000000 1.000000 1.000000 +vn -0.991484 0.130210 -0.001993 +v -154.668961 -143.015198 19.202599 1.000000 1.000000 1.000000 +vn -0.943916 0.275029 -0.182704 +v -154.810562 -143.902634 18.897999 1.000000 1.000000 1.000000 +vn -0.958312 0.145499 -0.245902 +v -154.618744 -143.023575 18.747799 1.000000 1.000000 1.000000 +vn -0.963068 -0.157026 -0.218733 +v -154.617447 -141.698013 18.533798 1.000000 1.000000 1.000000 +vn -0.911789 0.066345 -0.405265 +v -154.480972 -143.044495 18.350401 1.000000 1.000000 1.000000 +vn -0.860957 0.207759 -0.464316 +v -154.679245 -143.951462 18.500599 1.000000 1.000000 1.000000 +vn -0.582960 0.056209 -0.810554 +v -154.453949 -144.035187 18.165798 1.000000 1.000000 1.000000 +vn -0.869082 -0.095638 -0.485336 +v -154.199020 -142.358002 17.907200 1.000000 1.000000 1.000000 +vn -0.850266 -0.071854 -0.521426 +v -154.437210 -142.358002 18.241997 1.000000 1.000000 1.000000 +vn -0.814197 0.410041 -0.411035 +v -155.249603 -145.177963 18.727398 1.000000 1.000000 1.000000 +vn -0.838990 -0.261625 -0.477125 +v -154.608429 -141.012894 18.033199 1.000000 1.000000 1.000000 +vn -0.922560 -0.385791 -0.006885 +v -154.995972 -140.450577 18.783199 1.000000 1.000000 1.000000 +vn -0.754487 -0.159790 -0.636566 +v -154.244080 -141.640793 17.801399 1.000000 1.000000 1.000000 +vn 0.164523 -0.195139 -0.966878 +v -154.025208 -144.192856 18.024799 1.000000 1.000000 1.000000 +vn -0.220600 -0.180097 -0.958593 +v -154.168121 -140.877548 17.562399 1.000000 1.000000 1.000000 +vn 0.189618 -0.094008 -0.977347 +v -154.536331 -139.355240 17.353397 1.000000 1.000000 1.000000 +vn -0.635088 -0.536405 -0.555818 +v -155.122147 -139.750122 17.828999 1.000000 1.000000 1.000000 +vn -0.889377 -0.157356 0.429242 +v -154.621307 -141.017090 19.709797 1.000000 1.000000 1.000000 +vn -0.857296 -0.512643 0.047333 +v -155.284363 -139.858963 18.681198 1.000000 1.000000 1.000000 +vn -0.820501 -0.527881 -0.219360 +v -155.240601 -139.829651 18.226398 1.000000 1.000000 1.000000 +vn -0.705988 -0.705971 0.056454 +v -156.049133 -138.858490 18.488400 1.000000 1.000000 1.000000 +vn -0.669907 -0.612923 0.418986 +v -155.929398 -138.717575 19.312798 1.000000 1.000000 1.000000 +vn -0.478405 -0.877498 -0.033565 +v -157.046936 -138.114792 18.301598 1.000000 1.000000 1.000000 +vn -0.672541 -0.697701 -0.246783 +v -156.014374 -138.816635 18.033600 1.000000 1.000000 1.000000 +vn -0.592706 -0.649305 -0.476553 +v -155.920380 -138.706406 17.636200 1.000000 1.000000 1.000000 +vn 0.043788 -0.820106 -0.570533 +v -154.920013 -139.614761 17.494198 1.000000 1.000000 1.000000 +vn -0.484077 -0.761235 -0.431498 +v -156.412201 -138.282227 17.542198 1.000000 1.000000 1.000000 +vn -0.394164 -0.536871 -0.745925 +v -155.759445 -138.515259 17.301399 1.000000 1.000000 1.000000 +vn -0.088765 -0.240166 -0.966665 +v -155.611389 -138.340836 17.165600 1.000000 1.000000 1.000000 +vn -0.265136 -0.738974 -0.619371 +v -156.855087 -137.700363 17.114597 1.000000 1.000000 1.000000 +vn -0.408974 -0.874742 -0.259936 +v -157.299271 -137.929199 17.801998 1.000000 1.000000 1.000000 +vn -0.292447 -0.831805 -0.471779 +v -157.246490 -137.791061 17.404598 1.000000 1.000000 1.000000 +vn 0.268212 0.106833 -0.957418 +v -155.454300 -138.153854 17.160397 1.000000 1.000000 1.000000 +vn -0.154796 -0.740256 -0.654262 +v -157.780792 -137.322235 16.980797 1.000000 1.000000 1.000000 +vn -0.078661 -0.826455 -0.557480 +v -158.452850 -137.443634 17.229198 1.000000 1.000000 1.000000 +vn 0.054682 -0.966596 -0.250403 +v -159.074707 -137.559448 17.542198 1.000000 1.000000 1.000000 +vn -0.243528 -0.969791 0.014141 +v -157.890228 -137.771530 18.167797 1.000000 1.000000 1.000000 +vn -0.493032 -0.834662 0.245475 +v -157.301849 -137.934799 18.687399 1.000000 1.000000 1.000000 +vn -0.224751 -0.934154 0.277206 +v -158.470871 -137.599899 18.511997 1.000000 1.000000 1.000000 +vn 0.012504 -0.998152 0.059472 +v -159.073425 -137.613861 17.996998 1.000000 1.000000 1.000000 +vn -0.463907 -0.761139 0.453274 +v -157.251633 -137.803635 19.081200 1.000000 1.000000 1.000000 +vn -0.561670 -0.671863 0.482832 +v -156.419922 -138.293396 19.218800 1.000000 1.000000 1.000000 +vn -0.197344 -0.873334 0.445358 +v -158.455429 -137.458984 18.905800 1.000000 1.000000 1.000000 +vn -0.175408 -0.646384 0.742577 +v -158.425827 -137.205032 19.253399 1.000000 1.000000 1.000000 +vn 0.000510 -0.937227 0.348720 +v -159.075989 -137.422699 18.821198 1.000000 1.000000 1.000000 +vn 0.123699 -0.668109 0.733709 +v -160.385361 -137.389206 19.004200 1.000000 1.000000 1.000000 +vn 0.076093 -0.923384 0.376260 +v -159.703003 -137.481308 18.737997 1.000000 1.000000 1.000000 +vn 0.290809 -0.956600 0.018609 +v -160.265640 -137.817581 17.832397 1.000000 1.000000 1.000000 +vn 0.221425 -0.859836 0.460058 +v -160.317123 -137.633392 18.656597 1.000000 1.000000 1.000000 +vn 0.501010 -0.865301 -0.015603 +v -160.842422 -138.054794 17.751198 1.000000 1.000000 1.000000 +vn 0.354399 -0.823700 0.442629 +v -160.917099 -137.880371 18.575600 1.000000 1.000000 1.000000 +vn 0.466096 -0.803425 0.370491 +v -161.461700 -138.202682 18.498798 1.000000 1.000000 1.000000 +vn 0.404112 -0.555185 0.726955 +v -162.109299 -138.405014 18.772400 1.000000 1.000000 1.000000 +vn 0.659443 -0.751567 0.016791 +v -161.841507 -138.745468 17.600401 1.000000 1.000000 1.000000 +vn 0.560900 -0.699740 0.442442 +v -161.956085 -138.598969 18.424797 1.000000 1.000000 1.000000 +vn 0.779396 -0.622769 0.068569 +v -162.270233 -139.200363 17.527397 1.000000 1.000000 1.000000 +vn 0.724607 -0.603109 0.333474 +v -162.401566 -139.073380 18.351597 1.000000 1.000000 1.000000 +vn 0.765653 -0.530208 0.364218 +v -162.794235 -139.625931 18.278797 1.000000 1.000000 1.000000 +vn 0.578273 -0.352754 0.735639 +v -163.316956 -140.104538 18.556999 1.000000 1.000000 1.000000 +vn 0.926583 -0.375932 -0.010917 +v -162.944870 -140.298492 17.384998 1.000000 1.000000 1.000000 +vn 0.843892 -0.323361 0.428117 +v -163.336273 -140.839874 18.142197 1.000000 1.000000 1.000000 +vn 0.982473 -0.185825 0.014687 +v -163.313095 -141.523590 17.252998 1.000000 1.000000 1.000000 +vn 0.636227 -0.237760 0.733952 +v -163.718658 -141.444061 18.424999 1.000000 1.000000 1.000000 +vn 0.897828 -0.016639 0.440033 +v -163.556427 -142.496140 17.982800 1.000000 1.000000 1.000000 +vn 0.734348 0.130736 0.666064 +v -163.579605 -143.892868 18.212200 1.000000 1.000000 1.000000 +vn 0.306644 -0.822116 -0.479682 +v -160.320999 -137.619446 16.980000 1.000000 1.000000 1.000000 +vn 0.240943 -0.933565 -0.265335 +v -160.281067 -137.764557 17.377598 1.000000 1.000000 1.000000 +vn 0.669486 -0.708016 -0.224725 +v -161.874985 -138.703613 17.145599 1.000000 1.000000 1.000000 +vn 0.115222 -0.864050 -0.490042 +v -159.075989 -137.408737 17.144798 1.000000 1.000000 1.000000 +vn 0.130565 -0.725256 -0.675985 +v -159.079849 -137.150604 16.809998 1.000000 1.000000 1.000000 +vn 0.282791 -0.596669 -0.751009 +v -160.389221 -137.372467 16.645199 1.000000 1.000000 1.000000 +vn 0.183330 -0.204114 -0.961628 +v -160.452316 -137.146423 16.509399 1.000000 1.000000 1.000000 +vn 0.090762 -0.239088 -0.966747 +v -158.397491 -136.952469 16.758598 1.000000 1.000000 1.000000 +vn 0.200561 -0.151040 -0.967968 +v -161.715332 -137.774323 16.351597 1.000000 1.000000 1.000000 +vn 0.407295 -0.669178 -0.621540 +v -160.922241 -137.867813 16.898998 1.000000 1.000000 1.000000 +vn 0.454976 -0.478928 -0.750750 +v -161.598175 -137.973862 16.487400 1.000000 1.000000 1.000000 +vn 0.398839 -0.236426 -0.886020 +v -162.950027 -139.511520 16.326797 1.000000 1.000000 1.000000 +vn 0.674792 -0.620525 -0.399506 +v -161.965103 -138.587799 16.748199 1.000000 1.000000 1.000000 +vn 0.827408 -0.504599 -0.246530 +v -162.689957 -139.701279 16.999599 1.000000 1.000000 1.000000 +vn 0.736765 -0.488774 -0.467201 +v -162.804550 -139.617554 16.602200 1.000000 1.000000 1.000000 +vn 0.909542 -0.342953 -0.234768 +v -162.991226 -140.274765 16.930199 1.000000 1.000000 1.000000 +vn 0.313906 -0.057197 -0.947730 +v -153.944092 -140.809174 17.557400 1.000000 1.000000 1.000000 +vn 0.275598 -0.148603 -0.949717 +v -153.797333 -143.147766 17.874599 1.000000 1.000000 1.000000 +vn 0.575107 -0.351323 -0.738799 +v -154.085724 -145.039825 18.288399 1.000000 1.000000 1.000000 +vn 0.093305 -0.227382 -0.969325 +v -154.681824 -145.603546 18.251598 1.000000 1.000000 1.000000 +vn 0.787179 -0.409324 -0.461305 +v -153.874573 -145.155640 18.632797 1.000000 1.000000 1.000000 +vn 0.503653 -0.468468 -0.725859 +v -154.478409 -145.755630 18.402599 1.000000 1.000000 1.000000 +vn 0.669006 -0.182472 -0.720511 +v -153.552704 -143.185425 18.025597 1.000000 1.000000 1.000000 +vn 0.071972 -0.264862 -0.961597 +v -155.637131 -146.733765 18.472797 1.000000 1.000000 1.000000 +vn 0.720297 -0.551212 -0.421115 +v -154.283997 -145.902145 18.747200 1.000000 1.000000 1.000000 +vn 0.377717 -0.560814 -0.736762 +v -155.478775 -146.938873 18.623997 1.000000 1.000000 1.000000 +vn 0.878946 -0.445826 -0.169392 +v -153.756134 -145.219818 19.025997 1.000000 1.000000 1.000000 +vn 0.910025 -0.316549 -0.267679 +v -153.441986 -144.407745 18.913399 1.000000 1.000000 1.000000 +vn 0.554700 -0.686779 -0.469726 +v -155.326843 -147.135620 18.968399 1.000000 1.000000 1.000000 +vn 0.739356 -0.638059 -0.215019 +v -154.640625 -146.622147 19.245197 1.000000 1.000000 1.000000 +vn 0.426313 -0.756694 -0.495653 +v -155.982178 -147.647705 19.083797 1.000000 1.000000 1.000000 +vn 0.641042 -0.746817 -0.177002 +v -155.241882 -147.247253 19.361597 1.000000 1.000000 1.000000 +vn 0.844107 -0.510587 0.163660 +v -154.164246 -145.991440 19.955799 1.000000 1.000000 1.000000 +vn 0.902453 -0.403674 0.150415 +v -153.744537 -145.226807 19.841400 1.000000 1.000000 1.000000 +vn 0.769196 -0.620989 0.150701 +v -154.631607 -146.630508 20.060799 1.000000 1.000000 1.000000 +vn 0.676760 -0.720235 0.152504 +v -155.234146 -147.257019 20.176998 1.000000 1.000000 1.000000 +vn 0.567113 -0.809100 0.154081 +v -155.904938 -147.781662 20.292400 1.000000 1.000000 1.000000 +vn 0.633352 -0.603209 0.484773 +v -155.330719 -147.131439 20.645397 1.000000 1.000000 1.000000 +vn 0.442357 -0.883344 0.154995 +v -156.645233 -148.204437 20.408798 1.000000 1.000000 1.000000 +vn 0.398809 -0.899262 -0.179666 +v -156.650375 -148.190491 19.593399 1.000000 1.000000 1.000000 +vn 0.526942 -0.830946 -0.178495 +v -155.912659 -147.770493 19.476801 1.000000 1.000000 1.000000 +vn 0.545818 -0.700961 0.459061 +v -155.984756 -147.642120 20.760597 1.000000 1.000000 1.000000 +vn 0.304013 -0.939615 0.157159 +v -157.430603 -148.507233 20.524998 1.000000 1.000000 1.000000 +vn 0.433657 -0.754296 0.492930 +v -156.705734 -148.053757 20.877197 1.000000 1.000000 1.000000 +vn 0.452692 -0.480753 0.750964 +v -156.109634 -147.424454 21.098400 1.000000 1.000000 1.000000 +vn 0.298985 -0.828065 0.474253 +v -157.471786 -148.348160 20.993397 1.000000 1.000000 1.000000 +vn 0.282602 -0.594640 0.752688 +v -157.534882 -148.101196 21.330997 1.000000 1.000000 1.000000 +vn 0.170098 -0.958081 0.230539 +v -158.241699 -148.684433 20.640198 1.000000 1.000000 1.000000 +vn 0.253970 -0.949613 -0.183668 +v -157.434448 -148.493271 19.709599 1.000000 1.000000 1.000000 +vn 0.088999 -0.891224 0.444746 +v -158.961411 -148.572815 21.208797 1.000000 1.000000 1.000000 +vn 0.117539 -0.626614 0.770415 +v -158.962708 -148.316071 21.546600 1.000000 1.000000 1.000000 +vn 0.188158 -0.295867 0.936514 +v -158.320251 -148.025833 21.586800 1.000000 1.000000 1.000000 +vn 0.273553 -0.243657 0.930484 +v -156.891144 -147.596085 21.355400 1.000000 1.000000 1.000000 +vn -0.055848 -0.864776 0.499042 +v -159.775101 -148.518402 21.325397 1.000000 1.000000 1.000000 +vn -0.118817 -0.979311 0.163804 +v -159.795700 -148.680252 20.857197 1.000000 1.000000 1.000000 +vn -0.087894 -0.658133 0.747754 +v -160.503815 -148.091431 21.778999 1.000000 1.000000 1.000000 +vn 0.054646 -0.313462 0.948027 +v -160.443298 -147.858414 21.919598 1.000000 1.000000 1.000000 +vn 0.219260 0.166848 0.961294 +v -160.377640 -147.608643 21.923397 1.000000 1.000000 1.000000 +vn 0.271951 0.069643 0.959788 +v -162.247055 -146.534225 22.270397 1.000000 1.000000 1.000000 +vn -0.090674 -0.297139 0.950519 +v -162.401566 -146.732376 22.266598 1.000000 1.000000 1.000000 +vn 0.281636 -0.029987 0.959053 +v -163.544846 -144.720306 22.617397 1.000000 1.000000 1.000000 +vn -0.251789 -0.262714 0.931442 +v -163.759857 -144.831924 22.613800 1.000000 1.000000 1.000000 +vn -0.239831 -0.581353 0.777502 +v -161.917465 -147.411896 22.010399 1.000000 1.000000 1.000000 +vn -0.382417 -0.556442 0.737651 +v -162.544464 -146.917953 22.125999 1.000000 1.000000 1.000000 +vn -0.549905 -0.696581 0.460847 +v -162.697678 -147.113297 21.788200 1.000000 1.000000 1.000000 +vn -0.441838 -0.768472 0.462850 +v -162.043640 -147.629578 21.672600 1.000000 1.000000 1.000000 +vn -0.313354 -0.809756 0.496090 +v -161.325226 -148.041199 21.556400 1.000000 1.000000 1.000000 +vn -0.472153 -0.427569 0.770880 +v -163.573166 -145.671921 22.356800 1.000000 1.000000 1.000000 +vn -0.630703 -0.605031 0.485954 +v -163.275757 -146.504929 21.903599 1.000000 1.000000 1.000000 +vn -0.614983 -0.273646 0.739536 +v -164.247803 -144.151001 22.589397 1.000000 1.000000 1.000000 +vn -0.774224 -0.412331 0.480168 +v -164.174423 -145.048203 22.135399 1.000000 1.000000 1.000000 +vn -0.725435 -0.519099 0.451974 +v -163.770157 -145.814240 22.018997 1.000000 1.000000 1.000000 +vn -0.830300 -0.536469 0.151006 +v -163.896332 -145.904938 21.550598 1.000000 1.000000 1.000000 +vn -0.748626 -0.645127 0.152872 +v -163.389053 -146.613754 21.435398 1.000000 1.000000 1.000000 +vn -0.895416 -0.419477 0.149231 +v -164.310898 -145.119354 21.667198 1.000000 1.000000 1.000000 +vn -0.909325 -0.379622 -0.170337 +v -164.299301 -145.112381 20.851597 1.000000 1.000000 1.000000 +vn -0.773207 -0.609990 -0.173389 +v -163.380051 -146.605392 20.619797 1.000000 1.000000 1.000000 +vn -0.849718 -0.498365 -0.172079 +v -163.886032 -145.897949 20.735197 1.000000 1.000000 1.000000 +vn -0.679950 -0.711979 -0.175371 +v -162.786514 -147.229111 20.504398 1.000000 1.000000 1.000000 +vn -0.650123 -0.743982 0.154373 +v -162.795532 -147.240280 21.320000 1.000000 1.000000 1.000000 +vn -0.570270 -0.802007 -0.177702 +v -162.117020 -147.756546 20.388798 1.000000 1.000000 1.000000 +vn -0.534654 -0.830711 0.155129 +v -162.123459 -147.767700 21.204399 1.000000 1.000000 1.000000 +vn -0.714502 -0.505652 -0.483532 +v -163.280914 -146.509109 20.226801 1.000000 1.000000 1.000000 +vn -0.642987 -0.613966 -0.457836 +v -162.701538 -147.118866 20.111397 1.000000 1.000000 1.000000 +vn -0.407910 -0.899338 0.157484 +v -161.387024 -148.191895 21.088200 1.000000 1.000000 1.000000 +vn -0.547953 -0.697120 -0.462354 +v -162.046219 -147.633759 19.995800 1.000000 1.000000 1.000000 +vn -0.447604 -0.875990 -0.179699 +v -161.381882 -148.179321 20.272598 1.000000 1.000000 1.000000 +vn -0.311483 -0.932860 -0.180971 +v -160.606812 -148.483521 20.157597 1.000000 1.000000 1.000000 +vn -0.268511 -0.950286 0.157666 +v -160.609390 -148.496078 20.973000 1.000000 1.000000 1.000000 +vn -0.196483 -0.861463 0.468269 +v -160.568176 -148.338394 21.441399 1.000000 1.000000 1.000000 +vn -0.436919 -0.751191 -0.494787 +v -161.327805 -148.046768 19.879597 1.000000 1.000000 1.000000 +vn -0.178277 -0.965693 -0.188822 +v -159.793121 -148.666306 20.041599 1.000000 1.000000 1.000000 +vn -0.320890 -0.822840 -0.469003 +v -160.569473 -148.343979 19.764397 1.000000 1.000000 1.000000 +vn -0.004210 -0.999595 0.028162 +v -158.960129 -148.775131 20.330597 1.000000 1.000000 1.000000 +vn -0.021866 -0.961401 -0.274283 +v -158.960129 -148.723511 19.924999 1.000000 1.000000 1.000000 +vn 0.175902 -0.983214 -0.048458 +v -158.236557 -148.720718 20.230198 1.000000 1.000000 1.000000 +vn -0.178016 -0.860268 -0.477755 +v -159.776382 -148.523972 19.648598 1.000000 1.000000 1.000000 +vn 0.044936 -0.897121 -0.439494 +v -158.259735 -148.526764 19.431599 1.000000 1.000000 1.000000 +vn 0.181890 -0.846393 -0.500535 +v -157.470505 -148.353745 19.316399 1.000000 1.000000 1.000000 +vn -0.168809 -0.592393 -0.787766 +v -159.744202 -148.270035 19.303999 1.000000 1.000000 1.000000 +vn -0.033684 -0.665718 -0.745443 +v -158.290634 -148.272812 19.086998 1.000000 1.000000 1.000000 +vn -0.317068 -0.591706 -0.741183 +v -160.505096 -148.097000 19.419998 1.000000 1.000000 1.000000 +vn -0.238037 -0.214085 -0.947368 +v -160.438156 -147.840271 19.268799 1.000000 1.000000 1.000000 +vn -0.117838 -0.288417 -0.950226 +v -158.322815 -148.007706 18.935999 1.000000 1.000000 1.000000 +vn 0.181864 -0.639168 -0.747255 +v -156.798447 -147.823517 18.855797 1.000000 1.000000 1.000000 +vn -0.310405 -0.102602 -0.945051 +v -162.389969 -146.718414 19.615799 1.000000 1.000000 1.000000 +vn -0.416651 -0.456142 -0.786343 +v -161.921326 -147.416092 19.651199 1.000000 1.000000 1.000000 +vn -0.542952 -0.412477 -0.731483 +v -162.548325 -146.922134 19.766800 1.000000 1.000000 1.000000 +vn -0.317273 0.017443 -0.948174 +v -163.744400 -144.823547 19.962997 1.000000 1.000000 1.000000 +vn -0.572924 -0.252606 -0.779711 +v -163.578323 -145.674713 19.997597 1.000000 1.000000 1.000000 +vn -0.670511 -0.175788 -0.720773 +v -163.965851 -144.939362 20.113998 1.000000 1.000000 1.000000 +vn -0.307275 0.100557 -0.946293 +v -164.189865 -143.294266 20.194395 1.000000 1.000000 1.000000 +vn -0.789364 -0.416187 -0.451324 +v -163.775299 -145.817032 20.341999 1.000000 1.000000 1.000000 +vn -0.839428 -0.308396 -0.447496 +v -164.179565 -145.050995 20.458599 1.000000 1.000000 1.000000 +vn -0.693078 0.009036 -0.720806 +v -164.433212 -143.338913 20.345398 1.000000 1.000000 1.000000 +vn -0.859875 -0.185828 -0.475482 +v -164.479553 -144.230530 20.574799 1.000000 1.000000 1.000000 +vn -0.235531 0.210227 -0.948857 +v -164.107468 -140.984985 20.528999 1.000000 1.000000 1.000000 +vn -0.909074 -0.068386 -0.410984 +v -164.666245 -143.380783 20.689800 1.000000 1.000000 1.000000 +vn -0.621292 0.131347 -0.772492 +v -164.479553 -141.751022 20.564198 1.000000 1.000000 1.000000 +vn -0.954881 -0.245248 -0.167501 +v -164.605728 -144.273788 20.967800 1.000000 1.000000 1.000000 +vn -0.943803 -0.295199 0.148641 +v -164.618607 -144.277985 21.783398 1.000000 1.000000 1.000000 +vn -0.978167 -0.020702 -0.206787 +v -164.872238 -142.614731 21.185200 1.000000 1.000000 1.000000 +vn -0.971294 -0.174485 0.161689 +v -164.810425 -143.407288 21.898399 1.000000 1.000000 1.000000 +vn -0.882458 0.128017 -0.452637 +v -164.715164 -141.725906 20.908600 1.000000 1.000000 1.000000 +vn -0.633299 0.267278 -0.726289 +v -164.345657 -140.920807 20.680000 1.000000 1.000000 1.000000 +vn -0.857058 0.256171 -0.447021 +v -164.576126 -140.859406 21.024597 1.000000 1.000000 1.000000 +vn -0.978928 0.113571 -0.169714 +v -164.847778 -141.710556 21.301800 1.000000 1.000000 1.000000 +vn -0.987876 -0.051820 0.146343 +v -164.885101 -142.616135 22.000599 1.000000 1.000000 1.000000 +vn -0.968181 0.202528 0.146995 +v -164.717743 -140.821747 22.233200 1.000000 1.000000 1.000000 +vn -0.986422 0.073670 0.146779 +v -164.860641 -141.709167 22.117199 1.000000 1.000000 1.000000 +vn -0.955323 0.241790 -0.169989 +v -164.704865 -140.824524 21.417599 1.000000 1.000000 1.000000 +vn -0.887217 -0.107535 0.448646 +v -164.734467 -142.609161 22.468998 1.000000 1.000000 1.000000 +vn -0.896382 0.025769 0.442533 +v -164.710007 -141.725906 22.585598 1.000000 1.000000 1.000000 +vn -0.842501 -0.291768 0.452840 +v -164.473114 -144.229141 22.251598 1.000000 1.000000 1.000000 +vn -0.645971 -0.130525 0.752120 +v -164.497574 -142.599380 22.806799 1.000000 1.000000 1.000000 +vn -0.870292 0.136099 0.473359 +v -164.570969 -140.860809 22.701397 1.000000 1.000000 1.000000 +vn -0.932766 0.328414 0.148634 +v -164.462814 -139.969193 22.348400 1.000000 1.000000 1.000000 +vn -0.857446 0.258716 0.444806 +v -164.321198 -140.030579 22.816595 1.000000 1.000000 1.000000 +vn -0.635091 0.134340 0.760666 +v -164.102325 -140.126862 23.154400 1.000000 1.000000 1.000000 +vn -0.651957 -0.045544 0.756887 +v -164.474411 -141.752426 22.923397 1.000000 1.000000 1.000000 +vn -0.880853 0.449052 0.149831 +v -164.095886 -139.157104 22.464397 1.000000 1.000000 1.000000 +vn -0.803274 0.357257 0.476570 +v -163.964554 -139.239426 22.932800 1.000000 1.000000 1.000000 +vn -0.607803 0.315758 0.728610 +v -163.329834 -138.678497 23.385197 1.000000 1.000000 1.000000 +vn -0.329711 0.066743 0.941720 +v -163.153442 -138.827805 23.525799 1.000000 1.000000 1.000000 +vn -0.370406 -0.052917 0.927361 +v -164.124207 -140.980804 23.179798 1.000000 1.000000 1.000000 +vn -0.308997 -0.183160 0.933259 +v -164.206604 -143.298447 22.844997 1.000000 1.000000 1.000000 +vn 0.083394 -0.254449 0.963484 +v -162.965485 -138.986877 23.529598 1.000000 1.000000 1.000000 +vn 0.189668 -0.199413 0.961385 +v -163.892456 -141.043594 23.183598 1.000000 1.000000 1.000000 +vn -0.025715 -0.264151 0.964138 +v -161.336807 -137.520370 23.876598 1.000000 1.000000 1.000000 +vn -0.293258 0.223313 0.929586 +v -161.447540 -137.291534 23.872999 1.000000 1.000000 1.000000 +vn -0.117531 -0.247774 0.961662 +v -160.001694 -137.008286 24.107998 1.000000 1.000000 1.000000 +vn -0.209813 0.283932 0.935607 +v -160.048035 -136.754333 24.104198 1.000000 1.000000 1.000000 +vn -0.206708 -0.179169 0.961858 +v -157.958466 -137.018051 24.442799 1.000000 1.000000 1.000000 +vn -0.069105 0.347768 0.935030 +v -157.909546 -136.765503 24.438999 1.000000 1.000000 1.000000 +vn -0.266352 -0.086529 0.959984 +v -156.031113 -137.951523 24.788799 1.000000 1.000000 1.000000 +vn -0.272780 -0.625965 0.730588 +v -158.009964 -137.280380 24.288198 1.000000 1.000000 1.000000 +vn -0.520450 -0.460948 0.718790 +v -156.176590 -138.167816 24.634199 1.000000 1.000000 1.000000 +vn -0.283482 0.011909 0.958903 +v -154.622604 -139.666397 25.135799 1.000000 1.000000 1.000000 +vn -0.660398 -0.230831 0.714557 +v -154.837616 -139.797562 24.981398 1.000000 1.000000 1.000000 +vn -0.272607 0.097809 0.957141 +v -154.105026 -141.095230 25.367199 1.000000 1.000000 1.000000 +vn -0.697866 -0.005851 0.716205 +v -154.344498 -141.156616 25.212599 1.000000 1.000000 1.000000 +vn -0.205005 0.186813 0.960767 +v -154.044525 -143.308228 25.701998 1.000000 1.000000 1.000000 +vn -0.666806 0.223714 0.710860 +v -154.286560 -143.262161 25.547398 1.000000 1.000000 1.000000 +vn -0.897797 -0.071466 0.434573 +v -154.573669 -141.216614 24.864998 1.000000 1.000000 1.000000 +vn -0.884071 -0.241202 0.400300 +v -154.764221 -140.555222 24.749798 1.000000 1.000000 1.000000 +vn -0.883887 0.337830 0.323442 +v -154.675385 -143.888687 25.314798 1.000000 1.000000 1.000000 +vn -0.873671 0.222864 0.432470 +v -154.519592 -143.217514 25.199598 1.000000 1.000000 1.000000 +vn -0.952808 0.032072 0.301875 +v -154.452652 -142.524033 25.083799 1.000000 1.000000 1.000000 +vn -0.882861 -0.469588 0.006580 +v -155.195526 -140.018021 23.809399 1.000000 1.000000 1.000000 +vn -0.943769 -0.328918 0.033374 +v -154.929016 -140.624985 23.925598 1.000000 1.000000 1.000000 +vn -0.991021 -0.133537 0.006752 +v -154.653503 -141.843109 24.142998 1.000000 1.000000 1.000000 +vn -0.999431 0.032814 -0.007752 +v -154.629028 -142.517059 24.259399 1.000000 1.000000 1.000000 +vn -0.962278 0.267469 0.049805 +v -154.842758 -143.830078 24.490599 1.000000 1.000000 1.000000 +vn -0.920441 0.081694 -0.382250 +v -154.506729 -143.218918 23.523197 1.000000 1.000000 1.000000 +vn -0.856245 0.298874 -0.421330 +v -154.905853 -144.543091 23.754398 1.000000 1.000000 1.000000 +vn -0.941808 -0.243079 -0.232188 +v -154.695984 -141.247299 23.585800 1.000000 1.000000 1.000000 +vn -0.863842 -0.452764 -0.220868 +v -155.151764 -139.991516 23.354597 1.000000 1.000000 1.000000 +vn -0.834124 -0.031127 -0.550697 +v -154.438492 -142.524033 23.407200 1.000000 1.000000 1.000000 +vn -0.849360 -0.271177 -0.452826 +v -154.560806 -141.212433 23.188400 1.000000 1.000000 1.000000 +vn -0.727559 -0.152401 -0.668904 +v -154.227341 -141.792892 22.955799 1.000000 1.000000 1.000000 +vn -0.763537 -0.466500 -0.446529 +v -155.030731 -139.916168 22.956997 1.000000 1.000000 1.000000 +vn -0.604269 -0.342244 -0.719534 +v -154.529907 -140.454773 22.738400 1.000000 1.000000 1.000000 +vn -0.235501 -0.120282 -0.964402 +v -154.056107 -143.305435 23.052399 1.000000 1.000000 1.000000 +vn -0.203358 -0.194144 -0.959663 +v -154.116623 -141.098007 22.717800 1.000000 1.000000 1.000000 +vn -0.743681 0.129078 -0.655955 +v -154.435913 -143.973785 23.303398 1.000000 1.000000 1.000000 +vn -0.526660 -0.546540 -0.651095 +v -155.201965 -139.173843 22.505798 1.000000 1.000000 1.000000 +vn -0.131468 -0.241289 -0.961507 +v -154.632904 -139.671982 22.486397 1.000000 1.000000 1.000000 +vn -0.666789 -0.604933 -0.435257 +v -155.389938 -139.331528 22.840599 1.000000 1.000000 1.000000 +vn -0.502058 -0.718217 -0.481770 +v -156.307907 -138.361771 22.609997 1.000000 1.000000 1.000000 +vn -0.312925 -0.586746 -0.746865 +v -156.167572 -138.153854 22.275200 1.000000 1.000000 1.000000 +vn -0.024080 -0.285731 -0.958007 +v -156.037537 -137.962692 22.139397 1.000000 1.000000 1.000000 +vn -0.802813 -0.596151 0.009724 +v -155.540573 -139.457092 23.692799 1.000000 1.000000 1.000000 +vn -0.594909 -0.769121 -0.233528 +v -156.390320 -138.483154 23.007397 1.000000 1.000000 1.000000 +vn -0.836074 -0.340629 0.430060 +v -155.042313 -139.923141 24.633598 1.000000 1.000000 1.000000 +vn -0.784943 -0.526224 0.327038 +v -155.400238 -139.339890 24.517199 1.000000 1.000000 1.000000 +vn -0.631466 -0.773834 0.049315 +v -156.419922 -138.527802 23.462200 1.000000 1.000000 1.000000 +vn -0.485408 -0.825015 -0.289362 +v -156.914322 -138.127335 22.892799 1.000000 1.000000 1.000000 +vn -0.613613 -0.670977 0.416257 +v -156.315643 -138.374313 24.286598 1.000000 1.000000 1.000000 +vn -0.345597 -0.936966 0.051553 +v -157.505264 -137.901306 23.231400 1.000000 1.000000 1.000000 +vn -0.742136 -0.570155 0.352360 +v -155.826385 -138.822220 24.401798 1.000000 1.000000 1.000000 +vn -0.514447 -0.775484 0.366018 +v -156.855087 -138.007339 24.171799 1.000000 1.000000 1.000000 +vn -0.367808 -0.818594 -0.441158 +v -156.848648 -137.993393 22.495197 1.000000 1.000000 1.000000 +vn -0.415385 -0.843806 0.339775 +v -157.444763 -137.721313 24.055599 1.000000 1.000000 1.000000 +vn -0.079453 -0.996802 -0.008571 +v -158.707779 -137.625031 23.000198 1.000000 1.000000 1.000000 +vn -0.169407 -0.709468 -0.684074 +v -157.358490 -137.465958 22.044197 1.000000 1.000000 1.000000 +vn -0.125107 -0.903560 -0.409790 +v -158.056305 -137.516190 22.264000 1.000000 1.000000 1.000000 +vn -0.285172 -0.843878 0.454474 +v -158.058884 -137.530151 23.940399 1.000000 1.000000 1.000000 +vn 0.119597 -0.992805 0.005969 +v -159.329620 -137.627823 22.883598 1.000000 1.000000 1.000000 +vn 0.246500 -0.937333 -0.246263 +v -159.880676 -137.654327 22.326599 1.000000 1.000000 1.000000 +vn 0.146293 -0.701715 -0.697276 +v -159.361816 -137.164566 21.696598 1.000000 1.000000 1.000000 +vn 0.007061 -0.815240 -0.579081 +v -158.694901 -137.418518 22.147999 1.000000 1.000000 1.000000 +vn 0.343575 -0.938518 0.033777 +v -160.462616 -137.885956 22.666397 1.000000 1.000000 1.000000 +vn -0.071695 -0.943246 0.324264 +v -158.696198 -137.433868 23.824598 1.000000 1.000000 1.000000 +vn 0.051661 -0.885197 0.462338 +v -159.905136 -137.520370 23.605799 1.000000 1.000000 1.000000 +vn 0.498766 -0.866712 0.006549 +v -161.031677 -138.153854 22.550198 1.000000 1.000000 1.000000 +vn 0.479775 -0.846739 -0.229892 +v -161.054855 -138.105011 22.095398 1.000000 1.000000 1.000000 +vn 0.244063 -0.871665 0.425009 +v -160.521835 -137.704559 23.490597 1.000000 1.000000 1.000000 +vn -0.018193 -0.668538 0.743456 +v -159.952774 -137.270599 23.953398 1.000000 1.000000 1.000000 +vn 0.234764 -0.635863 0.735231 +v -161.222229 -137.757584 23.722198 1.000000 1.000000 1.000000 +vn 0.482762 -0.496854 0.721164 +v -162.772354 -139.152908 23.375000 1.000000 1.000000 1.000000 +vn 0.357042 -0.818527 0.450037 +v -161.114075 -137.983627 23.374397 1.000000 1.000000 1.000000 +vn 0.555566 -0.760966 0.335079 +v -161.663834 -138.351990 23.257999 1.000000 1.000000 1.000000 +vn 0.599610 -0.714921 0.359659 +v -162.155655 -138.795715 23.142597 1.000000 1.000000 1.000000 +vn 0.649836 -0.265518 0.712189 +v -163.652985 -141.107773 23.028999 1.000000 1.000000 1.000000 +vn 0.859935 -0.394298 0.324100 +v -163.226837 -140.510574 22.796398 1.000000 1.000000 1.000000 +vn 0.857707 -0.277546 0.432789 +v -163.423813 -141.169174 22.681198 1.000000 1.000000 1.000000 +vn 0.698270 -0.584040 0.413904 +v -162.586960 -139.310593 23.027397 1.000000 1.000000 1.000000 +vn 0.798653 -0.486532 0.354174 +v -162.943588 -139.881287 22.912598 1.000000 1.000000 1.000000 +vn 0.943068 -0.328818 0.050011 +v -163.062042 -140.581741 21.972198 1.000000 1.000000 1.000000 +vn 0.800394 -0.597579 0.047623 +v -162.446625 -139.429199 22.202999 1.000000 1.000000 1.000000 +vn 0.631365 -0.775418 0.010198 +v -161.560837 -138.508270 22.433598 1.000000 1.000000 1.000000 +vn 0.490305 -0.740603 -0.459466 +v -161.119232 -137.971069 21.697800 1.000000 1.000000 1.000000 +vn 0.633763 -0.638236 -0.437035 +v -161.671555 -138.340836 21.581398 1.000000 1.000000 1.000000 +vn 0.277621 -0.832771 -0.478976 +v -159.907715 -137.506424 21.929199 1.000000 1.000000 1.000000 +vn 0.794273 -0.562177 -0.230406 +v -162.487823 -139.394302 21.748199 1.000000 1.000000 1.000000 +vn 0.742696 -0.476369 -0.470612 +v -162.597260 -139.300827 21.350800 1.000000 1.000000 1.000000 +vn 0.568664 -0.504261 -0.649878 +v -161.810608 -138.131531 21.246597 1.000000 1.000000 1.000000 +vn 0.355622 -0.578231 -0.734290 +v -160.605530 -137.447815 21.479198 1.000000 1.000000 1.000000 +vn 0.610527 -0.302207 -0.732071 +v -162.783936 -139.141754 21.015999 1.000000 1.000000 1.000000 +vn 0.255005 -0.128125 -0.958414 +v -161.331665 -137.531540 21.227200 1.000000 1.000000 1.000000 +vn 0.303944 -0.033354 -0.952106 +v -162.956467 -138.995239 20.880199 1.000000 1.000000 1.000000 +vn 0.844281 -0.457676 -0.278788 +v -162.834152 -139.949661 21.633598 1.000000 1.000000 1.000000 +vn 0.834495 -0.353422 -0.422742 +v -162.955170 -139.874313 21.236000 1.000000 1.000000 1.000000 +vn 0.202950 -0.194303 -0.959717 +v -159.999130 -137.020844 21.458599 1.000000 1.000000 1.000000 +vn 0.121918 -0.222047 -0.967384 +v -157.961044 -137.030609 21.793198 1.000000 1.000000 1.000000 +vn -0.306462 0.014631 -0.951770 +v -154.849197 -145.420761 23.398598 1.000000 1.000000 1.000000 +vn -0.630475 0.262397 -0.730513 +v -155.029449 -145.286804 23.534397 1.000000 1.000000 1.000000 +vn 0.264755 -0.115130 0.957418 +v -163.971008 -143.255203 22.848797 1.000000 1.000000 1.000000 +vn -0.914902 0.365567 -0.171219 +v -164.449951 -139.974762 21.532799 1.000000 1.000000 1.000000 +vn -0.798208 0.364824 -0.479341 +v -164.327637 -140.029190 21.139599 1.000000 1.000000 1.000000 +vn -0.017790 -0.300135 -0.953731 +v -156.897583 -147.579330 18.704800 1.000000 1.000000 1.000000 +vn 0.318454 -0.824208 -0.468260 +v -156.703171 -148.059326 19.200199 1.000000 1.000000 1.000000 +vn 0.597807 -0.330517 0.730332 +v -154.920013 -146.348648 20.866798 1.000000 1.000000 1.000000 +vn 0.333548 -0.161213 0.928847 +v -155.625549 -146.747711 21.123600 1.000000 1.000000 1.000000 +vn 0.734303 -0.495551 0.463928 +v -154.743622 -146.521683 20.528999 1.000000 1.000000 1.000000 +vn 0.640814 -0.089289 0.762486 +v -153.797333 -144.276581 20.535000 1.000000 1.000000 1.000000 +vn 0.433431 -0.090532 0.896628 +v -154.667664 -145.614716 20.902397 1.000000 1.000000 1.000000 +vn 0.775670 -0.322153 0.542728 +v -153.879715 -145.152847 20.309799 1.000000 1.000000 1.000000 +vn 0.947336 -0.318794 -0.030399 +v -153.396912 -144.424484 19.319000 1.000000 1.000000 1.000000 +vn 0.079333 0.651397 -0.754578 +v -159.661804 -147.078415 16.327797 1.000000 1.000000 1.000000 +vn 0.234169 0.953468 0.189906 +v -160.030014 -147.022598 17.089199 1.000000 1.000000 1.000000 +vn -0.114750 0.681238 -0.723013 +v -158.357590 -147.065857 16.327999 1.000000 1.000000 1.000000 +vn 0.462710 0.782891 0.415911 +v -161.195190 -146.684921 17.570795 1.000000 1.000000 1.000000 +vn 0.482058 0.875620 0.030174 +v -161.110214 -146.517487 16.746597 1.000000 1.000000 1.000000 +vn 0.251861 0.843932 0.473650 +v -160.059631 -147.160736 17.482998 1.000000 1.000000 1.000000 +vn 0.034382 0.966802 0.253204 +v -158.855835 -147.149567 17.008400 1.000000 1.000000 1.000000 +vn -0.201377 0.961570 0.186628 +v -158.201797 -147.072830 16.966400 1.000000 1.000000 1.000000 +vn -0.376768 0.622959 -0.685542 +v -156.866669 -146.503540 16.327198 1.000000 1.000000 1.000000 +vn 0.004148 0.883635 0.468158 +v -158.851974 -147.291901 17.401997 1.000000 1.000000 1.000000 +vn 0.381597 0.553999 0.739911 +v -161.308487 -146.909576 17.918598 1.000000 1.000000 1.000000 +vn 0.213332 0.624708 0.751152 +v -160.114990 -147.409103 17.830597 1.000000 1.000000 1.000000 +vn 0.004910 0.660128 0.751137 +v -158.842957 -147.547241 17.749798 1.000000 1.000000 1.000000 +vn -0.239001 0.894046 0.378892 +v -157.595398 -147.051895 17.325199 1.000000 1.000000 1.000000 +vn -0.407423 0.811946 0.418031 +v -157.035339 -146.809113 17.291599 1.000000 1.000000 1.000000 +vn -0.525315 0.476934 -0.704683 +v -155.916519 -145.726334 16.326797 1.000000 1.000000 1.000000 +vn -0.278982 0.618947 0.734217 +v -156.933624 -147.039337 17.639198 1.000000 1.000000 1.000000 +vn 0.541231 0.423435 0.726479 +v -162.344910 -146.079361 18.014797 1.000000 1.000000 1.000000 +vn 0.680238 0.391323 0.619792 +v -163.033707 -145.164017 18.101801 1.000000 1.000000 1.000000 +vn 0.691920 0.567633 0.446139 +v -162.180115 -145.896561 17.667198 1.000000 1.000000 1.000000 +vn 0.603011 0.683141 0.411943 +v -161.711472 -146.327728 17.618000 1.000000 1.000000 1.000000 +vn 0.851693 0.302780 0.427720 +v -163.132843 -144.439835 17.808399 1.000000 1.000000 1.000000 +vn 0.725649 0.368508 0.581065 +v -162.835434 -145.025864 17.754200 1.000000 1.000000 1.000000 +vn 0.917574 0.107891 0.382645 +v -163.497208 -143.165894 17.922600 1.000000 1.000000 1.000000 +vn 0.864255 0.503046 -0.002701 +v -162.687378 -144.921219 16.929798 1.000000 1.000000 1.000000 +vn 0.950898 0.308866 -0.019871 +v -163.185638 -143.760300 17.040199 1.000000 1.000000 1.000000 +vn 0.805146 -0.195889 0.559792 +v -163.486908 -141.488708 18.077198 1.000000 1.000000 1.000000 +vn 0.983656 -0.009487 0.179808 +v -163.425110 -142.491959 17.588997 1.000000 1.000000 1.000000 +vn 0.547928 0.285510 -0.786294 +v -162.917847 -144.714706 16.326797 1.000000 1.000000 1.000000 +vn 0.938007 0.304248 -0.166058 +v -163.234558 -143.777054 16.585400 1.000000 1.000000 1.000000 +vn 0.782290 0.622652 -0.018082 +v -162.330750 -145.441681 16.877197 1.000000 1.000000 1.000000 +vn 0.492235 0.098501 -0.864871 +v -163.485626 -143.266357 16.326797 1.000000 1.000000 1.000000 +vn 0.463052 0.427278 -0.776541 +v -162.225174 -145.681686 16.326797 1.000000 1.000000 1.000000 +vn 0.991126 0.030948 -0.129275 +v -163.430267 -142.491959 16.703598 1.000000 1.000000 1.000000 +vn 0.995110 -0.098604 -0.005787 +v -163.377472 -142.168228 17.189198 1.000000 1.000000 1.000000 +vn 0.962519 -0.141040 -0.231656 +v -163.363312 -141.513824 16.798199 1.000000 1.000000 1.000000 +vn 0.522993 -0.093677 -0.847173 +v -163.510086 -141.247299 16.327599 1.000000 1.000000 1.000000 +vn 0.634541 0.772360 0.028601 +v -161.605896 -146.172836 16.793598 1.000000 1.000000 1.000000 +vn 0.278346 0.533902 -0.798418 +v -161.147552 -146.584457 16.326797 1.000000 1.000000 1.000000 +vn 0.762409 0.598289 0.246541 +v -162.088699 -145.794708 17.273399 1.000000 1.000000 1.000000 +vn -0.054111 0.218008 0.974446 +v -156.826767 -147.280731 17.793800 1.000000 1.000000 1.000000 +vn -0.489738 0.466411 0.736626 +v -155.440155 -145.830978 17.550800 1.000000 1.000000 1.000000 +vn -0.568176 0.745768 0.347860 +v -156.510056 -146.488190 17.259998 1.000000 1.000000 1.000000 +vn -0.602249 0.592176 0.535372 +v -155.615250 -145.659363 17.203197 1.000000 1.000000 1.000000 +vn -0.299376 0.933092 0.199285 +v -155.011429 -144.509598 16.941799 1.000000 1.000000 1.000000 +vn -0.091260 0.787844 0.609076 +v -154.729462 -144.656113 17.533600 1.000000 1.000000 1.000000 +vn -0.821943 0.545395 0.164174 +v -155.355179 -145.070526 16.783398 1.000000 1.000000 1.000000 +vn -0.087363 -0.238220 0.967274 +v -162.983505 -146.110046 42.791580 1.000000 1.000000 1.000000 +vn -0.466666 -0.491862 0.735048 +v -163.152161 -146.269119 42.651176 1.000000 1.000000 1.000000 +vn -0.286230 -0.554013 0.781756 +v -161.950943 -147.386780 42.467777 1.000000 1.000000 1.000000 +vn 0.252787 0.016578 0.967380 +v -163.238419 -145.311920 42.883377 1.000000 1.000000 1.000000 +vn -0.269380 -0.217140 0.938235 +v -163.799759 -144.735641 42.964779 1.000000 1.000000 1.000000 +vn -0.526579 -0.395186 0.752690 +v -163.627243 -145.584000 42.739178 1.000000 1.000000 1.000000 +vn -0.036781 -0.337135 0.940738 +v -161.170731 -147.569565 42.514977 1.000000 1.000000 1.000000 +vn 0.194643 0.162831 0.967264 +v -160.395660 -147.604462 42.422779 1.000000 1.000000 1.000000 +vn 0.216584 -0.066096 0.974024 +v -164.035370 -142.579849 43.189777 1.000000 1.000000 1.000000 +vn -0.438014 -0.021868 0.898702 +v -164.375259 -142.052414 43.189777 1.000000 1.000000 1.000000 +vn -0.586738 -0.230236 0.776357 +v -164.265823 -144.082626 42.902977 1.000000 1.000000 1.000000 +vn -0.743196 -0.493034 0.452303 +v -163.826797 -145.722137 42.401379 1.000000 1.000000 1.000000 +vn -0.790114 -0.383529 0.478148 +v -164.218201 -144.942154 42.486580 1.000000 1.000000 1.000000 +vn -0.581194 -0.159606 0.797959 +v -164.440933 -143.241241 42.985378 1.000000 1.000000 1.000000 +vn -0.880971 -0.163386 0.444066 +v -164.675247 -143.278915 42.647579 1.000000 1.000000 1.000000 +vn -0.850761 -0.278836 0.445484 +v -164.492432 -144.157974 42.565178 1.000000 1.000000 1.000000 +vn -0.949278 -0.277529 0.147812 +v -164.636627 -144.205414 42.096779 1.000000 1.000000 1.000000 +vn -0.904948 -0.398444 0.149372 +v -164.355957 -145.010529 42.018181 1.000000 1.000000 1.000000 +vn -0.977689 -0.150050 0.147003 +v -164.824600 -143.304031 42.179379 1.000000 1.000000 1.000000 +vn -0.988930 -0.017234 0.147379 +v -164.891541 -142.384506 42.259579 1.000000 1.000000 1.000000 +vn -0.879473 -0.041990 0.474092 +v -164.739624 -142.384506 42.727978 1.000000 1.000000 1.000000 +vn -0.874314 0.071431 0.480077 +v -164.682983 -141.490097 42.805779 1.000000 1.000000 1.000000 +vn -0.982094 0.116899 0.147735 +v -164.833618 -141.466385 42.337379 1.000000 1.000000 1.000000 +vn -0.878380 0.196252 0.435814 +v -164.510452 -140.626389 42.879978 1.000000 1.000000 1.000000 +vn -0.957840 0.246514 0.147560 +v -164.655945 -140.581741 42.411579 1.000000 1.000000 1.000000 +vn -0.475337 0.102439 0.873820 +v -164.294159 -140.609650 43.189777 1.000000 1.000000 1.000000 +vn 0.420596 -0.155229 0.893870 +v -163.604065 -140.965454 43.189777 1.000000 1.000000 1.000000 +vn 0.410111 -0.276493 0.869115 +v -163.019562 -139.797562 43.187378 1.000000 1.000000 1.000000 +vn -0.508273 0.336752 0.792627 +v -163.540985 -138.611526 43.189377 1.000000 1.000000 1.000000 +vn 0.354019 -0.378827 0.855079 +v -162.185257 -138.770599 43.189777 1.000000 1.000000 1.000000 +vn -0.396446 0.561551 0.726286 +v -162.053940 -137.022232 43.185780 1.000000 1.000000 1.000000 +vn 0.350347 -0.474888 0.807303 +v -161.591736 -138.298965 43.189777 1.000000 1.000000 1.000000 +vn 0.261553 -0.556844 0.788362 +v -161.013657 -137.986420 43.182579 1.000000 1.000000 1.000000 +vn -0.202724 0.668727 0.715337 +v -160.517975 -136.249237 43.188580 1.000000 1.000000 1.000000 +vn 0.140075 -0.597418 0.789602 +v -160.099548 -137.637573 43.189777 1.000000 1.000000 1.000000 +vn 0.113320 0.717532 0.687246 +v -158.116821 -136.009232 43.189777 1.000000 1.000000 1.000000 +vn -0.055457 -0.608282 0.791782 +v -158.685883 -137.542694 43.189178 1.000000 1.000000 1.000000 +vn -0.326330 -0.494406 0.805650 +v -156.734070 -138.218033 43.189777 1.000000 1.000000 1.000000 +vn 0.485283 0.567671 0.665018 +v -155.225143 -137.407349 43.188377 1.000000 1.000000 1.000000 +vn -0.513142 -0.458112 0.725823 +v -155.818665 -139.066406 43.189777 1.000000 1.000000 1.000000 +vn 0.595613 0.453786 0.662815 +v -154.480972 -138.204086 43.188580 1.000000 1.000000 1.000000 +vn -0.637074 -0.299846 0.710091 +v -155.109268 -140.177094 43.188377 1.000000 1.000000 1.000000 +vn 0.696593 0.299226 0.652090 +v -153.637680 -139.669189 43.189777 1.000000 1.000000 1.000000 +vn 0.753576 0.147433 0.640614 +v -153.185776 -140.982193 43.189579 1.000000 1.000000 1.000000 +vn -0.720964 -0.151892 0.676121 +v -154.715302 -141.379868 43.189777 1.000000 1.000000 1.000000 +vn -0.705159 0.044271 0.707666 +v -154.623886 -142.614731 43.189377 1.000000 1.000000 1.000000 +vn 0.796556 -0.109480 0.594569 +v -153.114960 -143.373795 43.186760 1.000000 1.000000 1.000000 +vn -0.764521 -0.300220 0.570416 +v -155.039734 -144.484497 43.189377 1.000000 1.000000 1.000000 +vn 0.348852 -0.779432 0.520373 +v -153.680161 -145.221222 43.189579 1.000000 1.000000 1.000000 +vn -0.916116 0.372476 0.148301 +v -164.359818 -139.716629 42.485180 1.000000 1.000000 1.000000 +vn -0.811697 0.311205 0.494267 +v -164.222061 -139.783600 42.953377 1.000000 1.000000 1.000000 +vn -0.978074 -0.121570 -0.169093 +v -164.811722 -143.301239 41.363777 1.000000 1.000000 1.000000 +vn -0.913230 -0.369981 -0.170658 +v -164.344376 -145.004944 41.202778 1.000000 1.000000 1.000000 +vn -0.953653 -0.248660 -0.169454 +v -164.625031 -144.201233 41.281380 1.000000 1.000000 1.000000 +vn -0.842582 -0.517012 0.150843 +v -163.954269 -145.811447 41.933178 1.000000 1.000000 1.000000 +vn -0.855721 -0.488283 -0.171234 +v -163.942673 -145.804474 41.117577 1.000000 1.000000 1.000000 +vn -0.839048 -0.309290 -0.447593 +v -164.223343 -144.944946 40.809578 1.000000 1.000000 1.000000 +vn -0.858544 -0.192122 -0.475386 +v -164.497574 -144.159378 40.888180 1.000000 1.000000 1.000000 +vn -0.891647 -0.084085 -0.444854 +v -164.680389 -143.280304 40.970779 1.000000 1.000000 1.000000 +vn -0.687561 -0.026344 -0.725648 +v -164.446075 -143.242630 40.626179 1.000000 1.000000 1.000000 +vn -0.655975 -0.199355 -0.727980 +v -164.008331 -144.838898 40.464977 1.000000 1.000000 1.000000 +vn -0.777247 -0.405642 -0.480980 +v -163.831955 -145.726334 40.724380 1.000000 1.000000 1.000000 +vn -0.777486 -0.604580 -0.173203 +v -163.436691 -146.537018 41.029579 1.000000 1.000000 1.000000 +vn -0.721562 -0.522022 -0.454798 +v -163.336273 -146.442139 40.636379 1.000000 1.000000 1.000000 +vn -0.584975 -0.355714 -0.728884 +v -163.157303 -146.273300 40.291977 1.000000 1.000000 1.000000 +vn -0.315755 -0.026113 -0.948481 +v -163.784317 -144.727280 40.313980 1.000000 1.000000 1.000000 +vn -0.203297 0.065942 -0.976894 +v -164.202744 -143.202164 40.475178 1.000000 1.000000 1.000000 +vn -0.505132 -0.429668 -0.748483 +v -162.593399 -146.880280 40.201378 1.000000 1.000000 1.000000 +vn -0.289249 -0.084283 -0.953536 +v -162.970627 -146.097488 40.140980 1.000000 1.000000 1.000000 +vn -0.640017 -0.617234 -0.457603 +v -162.747894 -147.074219 40.545776 1.000000 1.000000 1.000000 +vn -0.683082 -0.709067 -0.174993 +v -162.834152 -147.183060 40.938980 1.000000 1.000000 1.000000 +vn -0.536958 -0.685672 -0.491457 +v -162.080978 -147.610031 40.452980 1.000000 1.000000 1.000000 +vn -0.573135 -0.800207 -0.176594 +v -162.151794 -147.731430 40.846176 1.000000 1.000000 1.000000 +vn -0.272757 -0.196224 -0.941860 +v -161.822205 -147.167709 39.957581 1.000000 1.000000 1.000000 +vn -0.365555 -0.546279 -0.753624 +v -161.264709 -147.795609 40.015377 1.000000 1.000000 1.000000 +vn -0.449179 -0.875488 -0.178211 +v -161.416641 -148.161194 40.752979 1.000000 1.000000 1.000000 +vn -0.434634 -0.770930 -0.465575 +v -161.362564 -148.030029 40.359779 1.000000 1.000000 1.000000 +vn -0.545884 -0.823447 0.154744 +v -162.159515 -147.742599 41.661579 1.000000 1.000000 1.000000 +vn -0.311888 -0.932936 -0.179880 +v -160.627411 -148.476547 40.656979 1.000000 1.000000 1.000000 +vn -0.417722 -0.895014 0.156391 +v -161.421783 -148.173752 41.568378 1.000000 1.000000 1.000000 +vn -0.312486 -0.808781 -0.498223 +v -160.591370 -148.338394 40.263977 1.000000 1.000000 1.000000 +vn -0.164243 -0.969700 -0.180849 +v -159.800858 -148.664902 40.558178 1.000000 1.000000 1.000000 +vn -0.276847 -0.947833 0.158011 +v -160.631271 -148.490494 41.472580 1.000000 1.000000 1.000000 +vn -0.211428 -0.857889 0.468322 +v -160.590073 -148.331421 41.940781 1.000000 1.000000 1.000000 +vn -0.330823 -0.802282 0.496890 +v -161.359985 -148.024445 42.036777 1.000000 1.000000 1.000000 +vn -0.067296 -0.863020 0.500668 +v -159.781525 -148.516998 41.841980 1.000000 1.000000 1.000000 +vn -0.125262 -0.979526 0.157603 +v -159.802139 -148.678864 41.373779 1.000000 1.000000 1.000000 +vn -0.082685 -0.614500 0.784572 +v -160.524414 -148.085846 42.278580 1.000000 1.000000 1.000000 +vn -0.459779 -0.757345 0.463716 +v -162.078400 -147.604462 42.129978 1.000000 1.000000 1.000000 +vn 0.110798 -0.664952 0.738622 +v -158.957550 -148.316071 42.078777 1.000000 1.000000 1.000000 +vn 0.118391 -0.283638 0.951595 +v -158.960129 -148.073288 42.219177 1.000000 1.000000 1.000000 +vn 0.094064 -0.874172 0.476419 +v -158.956253 -148.572815 41.740978 1.000000 1.000000 1.000000 +vn 0.028873 -0.986014 0.164141 +v -158.954971 -148.737457 41.272579 1.000000 1.000000 1.000000 +vn 0.220838 -0.944204 0.244357 +v -157.923706 -148.630020 41.146580 1.000000 1.000000 1.000000 +vn 0.337032 -0.812164 0.476234 +v -157.156372 -148.243515 41.509979 1.000000 1.000000 1.000000 +vn 0.299202 -0.563312 0.770167 +v -157.232330 -148.000732 41.847778 1.000000 1.000000 1.000000 +vn 0.193564 -0.316464 0.928646 +v -158.035706 -147.977005 42.093178 1.000000 1.000000 1.000000 +vn 0.389450 -0.495839 0.776191 +v -156.503601 -147.665848 41.739979 1.000000 1.000000 1.000000 +vn 0.359418 -0.919958 0.156511 +v -157.107437 -148.398392 41.041580 1.000000 1.000000 1.000000 +vn 0.479346 -0.746190 0.461983 +v -156.396744 -147.894684 41.402378 1.000000 1.000000 1.000000 +vn 0.579085 -0.652344 0.488986 +v -155.689926 -147.431442 41.292580 1.000000 1.000000 1.000000 +vn 0.551631 -0.403154 0.730185 +v -155.219986 -146.682144 41.519379 1.000000 1.000000 1.000000 +vn 0.310978 -0.195731 0.930044 +v -155.956436 -147.024002 41.770779 1.000000 1.000000 1.000000 +vn 0.494477 -0.855219 0.155221 +v -156.327225 -148.041199 40.933979 1.000000 1.000000 1.000000 +vn 0.315418 -0.931250 -0.182439 +v -157.111298 -148.385849 40.226177 1.000000 1.000000 1.000000 +vn 0.456500 -0.871417 -0.179559 +v -156.333664 -148.028625 40.118580 1.000000 1.000000 1.000000 +vn 0.617834 -0.771118 0.153813 +v -155.602371 -147.565384 40.824181 1.000000 1.000000 1.000000 +vn 0.578712 -0.795595 -0.179224 +v -155.610092 -147.552826 40.008778 1.000000 1.000000 1.000000 +vn 0.244104 -0.805582 -0.539862 +v -157.155075 -148.249100 39.832977 1.000000 1.000000 1.000000 +vn 0.332957 -0.775777 -0.536013 +v -156.394180 -147.900269 39.725380 1.000000 1.000000 1.000000 +vn 0.750574 -0.660286 -0.025720 +v -154.693405 -146.758881 40.259178 1.000000 1.000000 1.000000 +vn 0.494785 -0.733020 -0.466764 +v -155.687347 -147.435623 39.615578 1.000000 1.000000 1.000000 +vn 0.667963 -0.712292 -0.215560 +v -154.961212 -146.976547 39.897778 1.000000 1.000000 1.000000 +vn 0.020975 -0.652234 -0.757728 +v -157.993225 -148.221191 39.593376 1.000000 1.000000 1.000000 +vn 0.319146 -0.594341 -0.738177 +v -155.823822 -147.226318 39.271179 1.000000 1.000000 1.000000 +vn 0.092199 -0.892250 -0.442028 +v -157.949448 -148.473740 39.937981 1.000000 1.000000 1.000000 +vn -0.116052 -0.241645 -0.963400 +v -158.960129 -148.055145 39.568581 1.000000 1.000000 1.000000 +vn 0.009149 -0.318048 -0.948030 +v -157.310852 -147.752350 39.337578 1.000000 1.000000 1.000000 +vn -0.169834 -0.636339 -0.752482 +v -159.750641 -148.268631 39.820580 1.000000 1.000000 1.000000 +vn -0.172961 -0.160434 -0.971774 +v -160.457458 -147.834671 39.768379 1.000000 1.000000 1.000000 +vn -0.161050 -0.861814 -0.480977 +v -159.782822 -148.522583 40.165176 1.000000 1.000000 1.000000 +vn -0.011904 -0.969443 -0.245029 +v -158.954971 -148.723511 40.457176 1.000000 1.000000 1.000000 +vn 0.211678 -0.976277 -0.045557 +v -157.917267 -148.666306 40.736580 1.000000 1.000000 1.000000 +vn 0.059253 -0.298347 -0.952617 +v -155.966736 -147.008652 39.119980 1.000000 1.000000 1.000000 +vn 0.382810 -0.457283 -0.802713 +v -154.997253 -146.449112 39.115978 1.000000 1.000000 1.000000 +vn 0.630985 -0.632272 -0.449544 +v -154.824738 -146.624924 39.460579 1.000000 1.000000 1.000000 +vn -0.321962 0.086402 -0.942802 +v -155.346161 -146.091904 38.970177 1.000000 1.000000 1.000000 +vn 0.181397 -0.257995 -0.948965 +v -154.314896 -144.939362 38.735378 1.000000 1.000000 1.000000 +vn 0.553562 -0.396796 -0.732204 +v -154.096024 -145.060760 38.886578 1.000000 1.000000 1.000000 +vn 0.697064 -0.527149 -0.486020 +v -154.305878 -145.934235 39.346378 1.000000 1.000000 1.000000 +vn 0.814416 -0.551559 -0.180307 +v -154.196442 -146.017960 39.739380 1.000000 1.000000 1.000000 +vn 0.780728 -0.432340 -0.451161 +v -153.884872 -145.176575 39.230980 1.000000 1.000000 1.000000 +vn 0.881868 -0.439046 -0.171896 +v -153.766418 -145.242157 39.624180 1.000000 1.000000 1.000000 +vn 0.565444 -0.265381 -0.780926 +v -153.792175 -144.280762 38.770180 1.000000 1.000000 1.000000 +vn 0.832829 -0.324453 -0.448471 +v -153.568146 -144.363083 39.114777 1.000000 1.000000 1.000000 +vn 0.933066 -0.316751 -0.170462 +v -153.441986 -144.409149 39.507778 1.000000 1.000000 1.000000 +vn -0.360252 -0.047459 -0.931647 +v -154.246658 -144.113327 38.624378 1.000000 1.000000 1.000000 +vn -0.270836 -0.134489 -0.953185 +v -153.985291 -142.616135 38.394180 1.000000 1.000000 1.000000 +vn 0.278925 -0.158603 -0.947125 +v -153.752258 -142.628693 38.389179 1.000000 1.000000 1.000000 +vn -0.218051 -0.202486 -0.954701 +v -154.116623 -141.091034 38.162979 1.000000 1.000000 1.000000 +vn 0.305268 -0.079001 -0.948984 +v -153.890030 -141.032425 38.157776 1.000000 1.000000 1.000000 +vn -0.103559 -0.254072 -0.961625 +v -154.984375 -139.091522 37.828178 1.000000 1.000000 1.000000 +vn 0.325065 0.041326 -0.944788 +v -154.797699 -138.940826 37.823181 1.000000 1.000000 1.000000 +vn -0.016973 -0.270642 -0.962530 +v -155.982178 -138.007339 37.596977 1.000000 1.000000 1.000000 +vn 0.750585 -0.627349 0.207498 +v -154.719162 -146.733765 40.669178 1.000000 1.000000 1.000000 +vn 0.844073 -0.512768 0.156875 +v -154.186142 -146.024933 40.554977 1.000000 1.000000 1.000000 +vn 0.682319 -0.577712 0.447984 +v -155.056473 -146.867722 41.181580 1.000000 1.000000 1.000000 +vn 0.774809 -0.441498 0.452493 +v -154.309738 -145.931442 41.023376 1.000000 1.000000 1.000000 +vn 0.902978 -0.403166 0.148619 +v -153.754837 -145.247742 40.439579 1.000000 1.000000 1.000000 +vn 0.820203 -0.316001 0.476875 +v -153.890030 -145.173782 40.907978 1.000000 1.000000 1.000000 +vn 0.595635 -0.251681 0.762807 +v -154.504150 -145.783554 41.360977 1.000000 1.000000 1.000000 +vn 0.680155 -0.109913 0.724781 +v -153.797333 -144.277985 41.129379 1.000000 1.000000 1.000000 +vn 0.323137 -0.088219 0.942231 +v -155.164627 -146.278885 41.615761 1.000000 1.000000 1.000000 +vn 0.948987 -0.278758 0.147369 +v -153.430389 -144.413330 40.323380 1.000000 1.000000 1.000000 +vn 0.133561 0.228080 0.964438 +v -158.961411 -147.815140 42.222977 1.000000 1.000000 1.000000 +vn 0.067079 0.243077 0.967685 +v -157.381668 -147.526306 41.991978 1.000000 1.000000 1.000000 +vn -0.554437 -0.670974 0.492334 +v -162.744034 -147.070038 42.222778 1.000000 1.000000 1.000000 +vn -0.663568 -0.593111 0.455958 +v -163.331116 -146.437943 42.313377 1.000000 1.000000 1.000000 +vn -0.760051 -0.631712 0.152517 +v -163.445709 -146.545395 41.844978 1.000000 1.000000 1.000000 +vn -0.660980 -0.734609 0.153149 +v -162.843170 -147.194214 41.754379 1.000000 1.000000 1.000000 +vn -0.253929 0.110631 -0.960875 +v -164.210464 -141.562653 40.633179 1.000000 1.000000 1.000000 +vn -0.877776 0.036793 -0.477657 +v -164.744781 -142.384506 41.050980 1.000000 1.000000 1.000000 +vn -0.663247 0.159569 -0.731192 +v -164.453812 -141.524979 40.784378 1.000000 1.000000 1.000000 +vn -0.881538 0.153657 -0.446409 +v -164.689407 -141.488708 41.128777 1.000000 1.000000 1.000000 +vn -0.985438 0.009465 -0.169771 +v -164.878677 -142.384506 41.444180 1.000000 1.000000 1.000000 +vn -0.836603 0.266405 -0.478669 +v -164.515594 -140.624985 41.202980 1.000000 1.000000 1.000000 +vn -0.975265 0.142487 -0.168984 +v -164.820740 -141.469177 41.521980 1.000000 1.000000 1.000000 +vn -0.947591 0.270463 -0.170062 +v -164.643066 -140.584518 41.596176 1.000000 1.000000 1.000000 +vn -0.902934 0.394384 -0.170795 +v -164.348236 -139.722214 41.669579 1.000000 1.000000 1.000000 +vn -0.808198 0.378977 -0.450769 +v -164.227203 -139.780823 41.276581 1.000000 1.000000 1.000000 +vn -0.263145 0.178887 -0.948026 +v -164.232361 -141.751022 25.565798 1.000000 1.000000 1.000000 +vn 0.226691 0.134895 -0.964580 +v -163.999313 -141.778931 25.570799 1.000000 1.000000 1.000000 +vn 0.187905 0.206552 -0.960223 +v -163.801056 -143.976578 25.236198 1.000000 1.000000 1.000000 +vn -0.163388 0.263455 -0.950734 +v -163.543564 -139.482208 25.911798 1.000000 1.000000 1.000000 +vn -0.319626 0.061142 -0.945569 +v -164.023788 -144.051926 25.231199 1.000000 1.000000 1.000000 +vn 0.306847 0.004955 -0.951746 +v -163.342712 -139.610580 25.916998 1.000000 1.000000 1.000000 +vn -0.040066 0.294475 -0.954819 +v -162.051361 -137.714325 26.258999 1.000000 1.000000 1.000000 +vn 0.271861 -0.095393 -0.957597 +v -161.916183 -137.920837 26.263998 1.000000 1.000000 1.000000 +vn 0.050894 0.304727 -0.951079 +v -160.736847 -136.978989 26.490398 1.000000 1.000000 1.000000 +vn 0.229368 -0.167215 -0.958869 +v -160.659607 -137.217590 26.495398 1.000000 1.000000 1.000000 +vn 0.185452 0.255075 -0.948970 +v -158.622803 -136.674805 26.824999 1.000000 1.000000 1.000000 +vn 0.153461 -0.204997 -0.966657 +v -158.639542 -136.927368 26.829998 1.000000 1.000000 1.000000 +vn 0.281289 0.159003 -0.946359 +v -156.507462 -137.343170 27.170998 1.000000 1.000000 1.000000 +vn 0.018363 -0.285808 -0.958111 +v -156.618195 -137.565018 27.176197 1.000000 1.000000 1.000000 +vn 0.315069 0.042926 -0.948097 +v -154.826019 -138.898956 27.518198 1.000000 1.000000 1.000000 +vn 0.620699 0.299491 -0.724595 +v -154.630325 -138.737106 27.669197 1.000000 1.000000 1.000000 +vn 0.324487 -0.040747 -0.945012 +v -154.102463 -140.297089 27.749598 1.000000 1.000000 1.000000 +vn 0.509131 0.357634 -0.782869 +v -155.147888 -138.102234 27.552799 1.000000 1.000000 1.000000 +vn 0.443955 0.509498 -0.737099 +v -156.390320 -137.107361 27.321999 1.000000 1.000000 1.000000 +vn 0.681070 0.121900 -0.722000 +v -153.873291 -140.200806 27.900599 1.000000 1.000000 1.000000 +vn 0.275473 -0.162124 -0.947539 +v -153.749680 -142.577057 28.084198 1.000000 1.000000 1.000000 +vn 0.635701 -0.012255 -0.771838 +v -153.528244 -141.744049 28.119398 1.000000 1.000000 1.000000 +vn 0.878073 0.239269 -0.414414 +v -153.651840 -140.107330 28.244999 1.000000 1.000000 1.000000 +vn 0.806569 0.345461 -0.479691 +v -153.994308 -139.317566 28.129999 1.000000 1.000000 1.000000 +vn 0.675689 -0.142078 -0.723366 +v -153.503769 -142.586838 28.235197 1.000000 1.000000 1.000000 +vn 0.891072 0.040326 -0.452068 +v -153.292633 -141.717545 28.463799 1.000000 1.000000 1.000000 +vn 0.956612 0.204981 -0.207064 +v -153.305496 -140.811966 28.740398 1.000000 1.000000 1.000000 +vn 0.889707 0.423814 -0.169717 +v -153.878433 -139.246399 28.522999 1.000000 1.000000 1.000000 +vn 0.761183 0.464224 -0.452876 +v -154.441071 -138.580826 28.013798 1.000000 1.000000 1.000000 +vn 0.816789 0.550368 -0.173065 +v -154.335495 -138.492920 28.406799 1.000000 1.000000 1.000000 +vn 0.920041 0.356043 0.163577 +v -153.515366 -140.050125 29.453598 1.000000 1.000000 1.000000 +vn 0.868664 0.471952 0.150611 +v -153.866852 -139.239426 29.338598 1.000000 1.000000 1.000000 +vn 0.732664 0.657867 -0.174396 +v -154.889114 -137.816177 28.290398 1.000000 1.000000 1.000000 +vn 0.705343 0.692178 0.152907 +v -154.880096 -137.806412 29.105799 1.000000 1.000000 1.000000 +vn 0.794964 0.587250 0.152215 +v -154.325195 -138.484558 29.222399 1.000000 1.000000 1.000000 +vn 0.689511 0.562823 -0.455856 +v -154.981812 -137.919449 27.897198 1.000000 1.000000 1.000000 +vn 0.596015 0.637378 -0.488379 +v -155.595932 -137.350143 27.781998 1.000000 1.000000 1.000000 +vn 0.633249 0.753689 -0.175921 +v -155.517395 -137.234329 28.174999 1.000000 1.000000 1.000000 +vn 0.516329 0.837807 -0.177436 +v -156.213928 -136.754333 28.059599 1.000000 1.000000 1.000000 +vn 0.600395 0.784519 0.155100 +v -155.509674 -137.223175 28.990599 1.000000 1.000000 1.000000 +vn 0.500533 0.731077 -0.463674 +v -156.277023 -136.881317 27.666599 1.000000 1.000000 1.000000 +vn 0.387616 0.904076 -0.180004 +v -156.963242 -136.388763 27.944998 1.000000 1.000000 1.000000 +vn 0.479295 0.863631 0.156261 +v -156.208786 -136.743179 28.875198 1.000000 1.000000 1.000000 +vn 0.490593 0.719455 0.491633 +v -155.599808 -137.355728 29.458799 1.000000 1.000000 1.000000 +vn 0.390128 0.795142 0.464274 +v -156.280884 -136.886887 29.343399 1.000000 1.000000 1.000000 +vn 0.257961 0.828298 0.497372 +v -157.010880 -136.529694 29.228798 1.000000 1.000000 1.000000 +vn 0.347200 0.924524 0.157187 +v -156.958099 -136.374802 28.760599 1.000000 1.000000 1.000000 +vn 0.239043 0.622477 0.745239 +v -156.392883 -137.112930 29.681198 1.000000 1.000000 1.000000 +vn 0.603824 0.652804 0.457431 +v -154.985672 -137.923630 29.574198 1.000000 1.000000 1.000000 +vn 0.371766 0.511005 0.775025 +v -155.151764 -138.106415 29.911999 1.000000 1.000000 1.000000 +vn 0.675023 0.555353 0.485723 +v -154.446213 -138.585007 29.690598 1.000000 1.000000 1.000000 +vn 0.545473 0.385856 0.744026 +v -154.206741 -139.445938 30.144598 1.000000 1.000000 1.000000 +vn 0.189795 0.305623 0.933045 +v -154.811859 -138.887802 30.168999 1.000000 1.000000 1.000000 +vn 0.020009 0.315823 0.948607 +v -156.498459 -137.326416 29.821798 1.000000 1.000000 1.000000 +vn 0.031510 0.624985 0.780001 +v -157.841309 -136.533875 29.450399 1.000000 1.000000 1.000000 +vn 0.137079 0.872341 0.469287 +v -157.791092 -136.282715 29.112598 1.000000 1.000000 1.000000 +vn -0.026035 0.844021 0.535678 +v -158.588043 -136.158524 28.997398 1.000000 1.000000 1.000000 +vn -0.245864 0.590220 0.768890 +v -160.156189 -136.531082 29.102798 1.000000 1.000000 1.000000 +vn -0.132013 0.424089 0.895947 +v -158.621521 -136.656662 29.475798 1.000000 1.000000 1.000000 +vn 0.204191 0.966134 0.157767 +v -157.758896 -136.122253 28.644398 1.000000 1.000000 1.000000 +vn 0.249229 0.951349 -0.181163 +v -157.761490 -136.136200 27.828798 1.000000 1.000000 1.000000 +vn 0.102173 0.978053 -0.181586 +v -158.579025 -136.007828 27.713598 1.000000 1.000000 1.000000 +vn 0.055572 0.985731 0.158891 +v -158.577744 -135.993881 28.529198 1.000000 1.000000 1.000000 +vn 0.388055 0.794599 -0.466932 +v -157.009583 -136.524109 27.551798 1.000000 1.000000 1.000000 +vn 0.265694 0.825400 -0.498118 +v -157.789795 -136.277130 27.435799 1.000000 1.000000 1.000000 +vn 0.135196 0.871520 -0.471354 +v -158.588043 -136.151550 27.320599 1.000000 1.000000 1.000000 +vn -0.048843 0.982127 -0.181770 +v -159.408173 -136.006439 27.597799 1.000000 1.000000 1.000000 +vn -0.120424 0.833813 0.538753 +v -159.399155 -136.157135 28.881599 1.000000 1.000000 1.000000 +vn -0.096008 0.982659 0.158628 +v -159.409454 -135.992477 28.413198 1.000000 1.000000 1.000000 +vn -0.014507 0.876961 -0.480343 +v -159.399155 -136.150146 27.204599 1.000000 1.000000 1.000000 +vn -0.203853 0.953941 -0.220091 +v -160.234726 -136.133423 27.481199 1.000000 1.000000 1.000000 +vn -0.239723 0.957907 0.157944 +v -160.237305 -136.119461 28.296598 1.000000 1.000000 1.000000 +vn 0.181599 0.641279 -0.745509 +v -158.604782 -136.408295 26.975998 1.000000 1.000000 1.000000 +vn 0.034660 0.612181 -0.789958 +v -159.382416 -136.406906 26.860197 1.000000 1.000000 1.000000 +vn -0.240566 0.866440 -0.437504 +v -160.896500 -136.483643 26.985798 1.000000 1.000000 1.000000 +vn -0.448393 0.876148 -0.176944 +v -161.698593 -136.699921 27.263798 1.000000 1.000000 1.000000 +vn -0.374395 0.911411 0.170757 +v -160.944138 -136.334335 28.194399 1.000000 1.000000 1.000000 +vn -0.280380 0.834987 0.473480 +v -160.206406 -136.281311 28.764999 1.000000 1.000000 1.000000 +vn -0.471650 0.746643 0.469118 +v -161.634216 -136.833878 28.547598 1.000000 1.000000 1.000000 +vn -0.405647 0.524489 0.748573 +v -161.526077 -137.062714 28.885399 1.000000 1.000000 1.000000 +vn -0.500466 0.851732 0.155202 +v -161.703751 -136.688751 28.079399 1.000000 1.000000 1.000000 +vn -0.584334 0.648721 0.487560 +v -162.328171 -137.292938 28.431398 1.000000 1.000000 1.000000 +vn -0.535613 0.355801 0.765849 +v -162.792953 -138.040833 28.652798 1.000000 1.000000 1.000000 +vn -0.249373 0.253854 0.934544 +v -160.741989 -136.960846 29.140999 1.000000 1.000000 1.000000 +vn -0.323110 0.184607 0.928181 +v -162.061661 -137.698975 28.909798 1.000000 1.000000 1.000000 +vn -0.679967 0.575655 0.454165 +v -162.956467 -137.853851 28.314999 1.000000 1.000000 1.000000 +vn -0.744251 0.464685 0.479749 +v -163.501068 -138.499908 28.199598 1.000000 1.000000 1.000000 +vn -0.646521 0.235686 0.725578 +v -163.752136 -139.351059 28.421997 1.000000 1.000000 1.000000 +vn -0.618768 0.770455 0.153379 +v -162.415726 -137.158981 27.963198 1.000000 1.000000 1.000000 +vn -0.722401 0.674657 0.151575 +v -163.060745 -137.735260 27.846598 1.000000 1.000000 1.000000 +vn -0.809196 0.568011 0.150215 +v -163.619522 -138.398041 27.731398 1.000000 1.000000 1.000000 +vn -0.813675 0.372365 0.446405 +v -163.955551 -139.221283 28.084198 1.000000 1.000000 1.000000 +vn -0.878873 0.453116 0.149222 +v -164.086868 -139.138962 27.615999 1.000000 1.000000 1.000000 +vn -0.581318 0.794170 -0.177099 +v -162.407990 -137.170151 27.147598 1.000000 1.000000 1.000000 +vn -0.362743 0.787738 -0.497882 +v -161.636795 -136.828278 26.870798 1.000000 1.000000 1.000000 +vn -0.489227 0.738769 -0.463548 +v -162.332031 -137.287354 26.754599 1.000000 1.000000 1.000000 +vn -0.689179 0.702921 -0.175883 +v -163.051727 -137.745026 27.031199 1.000000 1.000000 1.000000 +vn -0.112877 0.656586 -0.745757 +v -160.817947 -136.726425 26.641399 1.000000 1.000000 1.000000 +vn -0.310190 0.597168 -0.739711 +v -162.194275 -137.496658 26.409998 1.000000 1.000000 1.000000 +vn -0.590982 0.661641 -0.461489 +v -162.960327 -137.849670 26.637999 1.000000 1.000000 1.000000 +vn -0.780785 0.599993 -0.174309 +v -163.609222 -138.406418 26.915798 1.000000 1.000000 1.000000 +vn -0.664993 0.566260 -0.486964 +v -163.504929 -138.495712 26.522799 1.000000 1.000000 1.000000 +vn -0.855415 0.488314 -0.172668 +v -164.075287 -139.145935 26.800398 1.000000 1.000000 1.000000 +vn -0.375037 0.485071 -0.789971 +v -162.796814 -138.036652 26.293598 1.000000 1.000000 1.000000 +vn -0.531015 0.425626 -0.732711 +v -163.755997 -139.348251 26.062798 1.000000 1.000000 1.000000 +vn -0.754133 0.475655 -0.452809 +v -163.960693 -139.218491 26.407398 1.000000 1.000000 1.000000 +vn -0.913565 0.368706 -0.171625 +v -164.439636 -139.944061 26.685799 1.000000 1.000000 1.000000 +vn -0.812402 0.370472 -0.450281 +v -164.316040 -139.998489 26.292599 1.000000 1.000000 1.000000 +vn -0.931644 0.331660 0.148464 +v -164.451233 -139.938492 27.501398 1.000000 1.000000 1.000000 +vn -0.549248 0.296746 -0.781197 +v -164.097168 -140.096161 25.948198 1.000000 1.000000 1.000000 +vn -0.839674 0.259814 -0.476911 +v -164.569672 -140.835678 26.176598 1.000000 1.000000 1.000000 +vn -0.664548 0.184623 -0.724079 +v -164.476974 -141.723114 25.716799 1.000000 1.000000 1.000000 +vn 0.310012 0.529358 -0.789729 +v -157.091980 -136.764099 27.207399 1.000000 1.000000 1.000000 +vn -0.281482 -0.023275 0.959284 +v -155.001114 -139.044083 30.172798 1.000000 1.000000 1.000000 +vn -0.283676 0.062454 0.956884 +v -154.308456 -140.383606 30.403999 1.000000 1.000000 1.000000 +vn 0.262946 0.237918 0.935016 +v -154.087006 -140.290115 30.400398 1.000000 1.000000 1.000000 +vn -0.230014 0.158575 0.960181 +v -153.971146 -142.567307 30.738798 1.000000 1.000000 1.000000 +vn 0.440002 0.135651 0.887692 +v -153.732941 -142.577057 30.734999 1.000000 1.000000 1.000000 +vn -0.691898 0.137682 0.708746 +v -154.217041 -142.557526 30.584198 1.000000 1.000000 1.000000 +vn -0.138789 0.233263 0.962458 +v -154.492569 -144.784485 31.084799 1.000000 1.000000 1.000000 +vn 0.336159 -0.002809 0.941801 +v -154.278839 -144.898895 31.080999 1.000000 1.000000 1.000000 +vn -0.577401 0.392912 0.715702 +v -154.712723 -144.665878 30.930199 1.000000 1.000000 1.000000 +vn -0.033550 0.264369 0.963838 +v -155.812241 -146.580276 31.431999 1.000000 1.000000 1.000000 +vn 0.335338 -0.162983 0.927893 +v -155.660309 -146.779816 31.428198 1.000000 1.000000 1.000000 +vn -0.367616 0.574729 0.731126 +v -155.968018 -146.373764 31.277399 1.000000 1.000000 1.000000 +vn 0.060750 0.266347 0.961961 +v -157.023743 -147.375626 31.663198 1.000000 1.000000 1.000000 +vn 0.267417 -0.237366 0.933887 +v -156.929764 -147.614227 31.659599 1.000000 1.000000 1.000000 +vn -0.129016 0.657255 0.742543 +v -157.120316 -147.130035 31.508799 1.000000 1.000000 1.000000 +vn 0.163876 0.214775 0.962817 +v -159.024490 -147.816544 31.997999 1.000000 1.000000 1.000000 +vn -0.245150 0.853363 0.460079 +v -157.213013 -146.895630 31.160999 1.000000 1.000000 1.000000 +vn -0.427135 0.800204 0.420986 +v -156.643951 -146.578888 31.045799 1.000000 1.000000 1.000000 +vn 0.129765 0.667391 0.733315 +v -159.024490 -147.548645 31.843399 1.000000 1.000000 1.000000 +vn 0.241957 0.133710 0.961030 +v -161.087036 -147.328171 32.343998 1.000000 1.000000 1.000000 +vn 0.093586 0.884480 0.457096 +v -159.023209 -147.293289 31.495798 1.000000 1.000000 1.000000 +vn -0.137177 0.936289 0.323334 +v -158.380753 -147.247253 31.379799 1.000000 1.000000 1.000000 +vn 0.222686 0.912549 0.343022 +v -159.660522 -147.241669 31.610798 1.000000 1.000000 1.000000 +vn 0.411673 0.553617 0.723902 +v -160.985336 -147.084000 32.189400 1.000000 1.000000 1.000000 +vn 0.279854 0.041826 0.959131 +v -162.787811 -145.959351 32.691200 1.000000 1.000000 1.000000 +vn 0.599595 0.352817 0.718335 +v -162.602402 -145.783554 32.536598 1.000000 1.000000 1.000000 +vn 0.287372 -0.044441 0.956788 +v -163.564148 -144.674255 32.922398 1.000000 1.000000 1.000000 +vn 0.682156 0.136400 0.718372 +v -163.340134 -144.561218 32.767998 1.000000 1.000000 1.000000 +vn 0.241207 -0.143310 0.959834 +v -164.037949 -142.521255 33.257198 1.000000 1.000000 1.000000 +vn 0.867286 0.239779 0.436259 +v -163.126419 -144.452393 32.420197 1.000000 1.000000 1.000000 +vn 0.699785 -0.093437 0.708216 +v -163.792038 -142.512878 33.102600 1.000000 1.000000 1.000000 +vn 0.819777 0.405496 0.404399 +v -162.816132 -145.057968 32.305000 1.000000 1.000000 1.000000 +vn 0.941913 0.149288 0.300854 +v -163.490768 -143.199387 32.639000 1.000000 1.000000 1.000000 +vn 0.772451 0.635047 0.005843 +v -162.293411 -145.487732 31.364599 1.000000 1.000000 1.000000 +vn 0.862000 0.505841 0.032868 +v -162.668076 -144.953323 31.480799 1.000000 1.000000 1.000000 +vn 0.901033 -0.053872 0.430393 +v -163.556427 -142.505905 32.754997 1.000000 1.000000 1.000000 +vn 0.932911 -0.163729 0.320734 +v -163.529388 -141.813828 32.869999 1.000000 1.000000 1.000000 +vn 0.603346 -0.354859 0.714177 +v -163.430267 -140.372437 33.448601 1.000000 1.000000 1.000000 +vn 0.947528 0.319607 0.006435 +v -163.167618 -143.821701 31.698198 1.000000 1.000000 1.000000 +vn 0.877251 0.419107 -0.234050 +v -163.013107 -144.395187 31.141199 1.000000 1.000000 1.000000 +vn 0.756350 0.614252 -0.225010 +v -162.330750 -145.525406 30.909798 1.000000 1.000000 1.000000 +vn 0.665134 0.746665 0.009395 +v -161.850510 -145.960754 31.248198 1.000000 1.000000 1.000000 +vn 0.653314 0.607601 -0.451665 +v -162.436325 -145.624466 30.512398 1.000000 1.000000 1.000000 +vn 0.526124 0.727122 -0.441006 +v -161.974121 -146.118423 30.395798 1.000000 1.000000 1.000000 +vn 0.778975 0.429474 -0.456891 +v -163.139282 -144.459366 30.743599 1.000000 1.000000 1.000000 +vn 0.812120 0.188246 -0.552291 +v -163.504929 -143.202164 30.962399 1.000000 1.000000 1.000000 +vn 0.919637 0.092998 -0.381601 +v -163.569305 -142.505905 31.078398 1.000000 1.000000 1.000000 +vn 0.520210 0.452135 -0.724539 +v -163.025986 -145.207275 30.293798 1.000000 1.000000 1.000000 +vn 0.682108 0.287693 -0.672281 +v -163.574463 -143.964035 30.511198 1.000000 1.000000 1.000000 +vn 0.399210 0.639934 -0.656595 +v -162.128616 -146.313766 30.060999 1.000000 1.000000 1.000000 +vn 0.156560 0.228713 -0.960822 +v -163.552567 -144.668671 30.272999 1.000000 1.000000 1.000000 +vn 0.075922 0.261335 -0.962258 +v -162.778793 -145.950974 30.041798 1.000000 1.000000 1.000000 +vn 0.204436 0.162226 -0.965344 +v -164.026367 -142.521255 30.607798 1.000000 1.000000 1.000000 +vn 0.755265 0.013313 -0.655285 +v -163.779160 -141.783112 30.858797 1.000000 1.000000 1.000000 +vn -0.286060 0.144535 -0.947248 +v -164.259399 -142.528229 30.602598 1.000000 1.000000 1.000000 +vn -0.325621 0.020728 -0.945273 +v -163.763718 -144.776123 30.267998 1.000000 1.000000 1.000000 +vn -0.311220 -0.062717 -0.948266 +v -162.953888 -146.118423 30.036598 1.000000 1.000000 1.000000 +vn -0.039284 0.283961 -0.958031 +v -161.081894 -147.315628 29.694599 1.000000 1.000000 1.000000 +vn -0.269151 -0.177242 -0.946648 +v -161.178452 -147.545837 29.689398 1.000000 1.000000 1.000000 +vn -0.168114 0.194355 -0.966418 +v -159.024490 -147.803986 29.348398 1.000000 1.000000 1.000000 +vn -0.166051 -0.266825 -0.949332 +v -159.025787 -148.056549 29.343399 1.000000 1.000000 1.000000 +vn 0.178107 0.636424 -0.750495 +v -160.991760 -147.099335 29.830399 1.000000 1.000000 1.000000 +vn 0.010088 0.728315 -0.685168 +v -159.696564 -147.510971 29.599598 1.000000 1.000000 1.000000 +vn 0.336919 0.806185 -0.486366 +v -160.893921 -146.864929 30.165199 1.000000 1.000000 1.000000 +vn 0.181115 0.876997 -0.445055 +v -160.295242 -147.106323 30.050398 1.000000 1.000000 1.000000 +vn -0.076176 0.908869 -0.410067 +v -159.023209 -147.308640 29.819199 1.000000 1.000000 1.000000 +vn -0.295998 0.655283 -0.694975 +v -157.677795 -147.363052 29.251799 1.000000 1.000000 1.000000 +vn -0.241033 0.151704 -0.958587 +v -157.027603 -147.364456 29.013798 1.000000 1.000000 1.000000 +vn -0.188334 0.794059 -0.577929 +v -158.379471 -147.261200 29.703199 1.000000 1.000000 1.000000 +vn -0.450534 0.756750 -0.473654 +v -157.207870 -146.908188 29.484398 1.000000 1.000000 1.000000 +vn -0.471882 0.495937 -0.728953 +v -156.513916 -146.811905 29.034599 1.000000 1.000000 1.000000 +vn -0.277472 0.077360 -0.957614 +v -155.818665 -146.570511 28.782398 1.000000 1.000000 1.000000 +vn -0.635426 0.624913 -0.453561 +v -156.108353 -146.186783 29.252998 1.000000 1.000000 1.000000 +vn -0.662408 0.383348 -0.643630 +v -155.462036 -145.877029 28.801798 1.000000 1.000000 1.000000 +vn -0.443399 0.862939 -0.242350 +v -157.261932 -146.770035 29.881998 1.000000 1.000000 1.000000 +vn -0.647435 0.727712 -0.226414 +v -156.197189 -146.069580 29.650599 1.000000 1.000000 1.000000 +vn -0.536870 0.842994 0.033639 +v -156.735352 -146.415619 30.221598 1.000000 1.000000 1.000000 +vn -0.333399 0.942767 0.005974 +v -157.796234 -146.917953 30.438999 1.000000 1.000000 1.000000 +vn -0.751560 0.498512 -0.432022 +v -155.638428 -145.702606 29.136599 1.000000 1.000000 1.000000 +vn -0.776143 0.630476 0.010101 +v -155.778763 -145.564468 29.988998 1.000000 1.000000 1.000000 +vn -0.669614 0.742684 0.006200 +v -156.229370 -146.027725 30.105398 1.000000 1.000000 1.000000 +vn -0.889625 0.396949 -0.225828 +v -155.037170 -144.491470 29.303398 1.000000 1.000000 1.000000 +vn -0.823114 0.323526 -0.466706 +v -154.912277 -144.558441 28.905998 1.000000 1.000000 1.000000 +vn -0.902150 0.428747 0.047979 +v -155.082230 -144.466354 29.758198 1.000000 1.000000 1.000000 +vn -0.660803 0.180189 -0.728609 +v -154.698563 -144.672852 28.571199 1.000000 1.000000 1.000000 +vn -0.305715 -0.024251 -0.951814 +v -154.502869 -144.778900 28.435398 1.000000 1.000000 1.000000 +vn -0.141227 0.989936 -0.009043 +v -158.405228 -147.057480 30.555599 1.000000 1.000000 1.000000 +vn 0.133359 0.989698 0.052095 +v -159.634766 -147.051895 30.786598 1.000000 1.000000 1.000000 +vn 0.336146 0.866481 0.369075 +v -160.291382 -147.092361 31.726999 1.000000 1.000000 1.000000 +vn 0.459875 0.781354 0.421901 +v -160.887482 -146.852371 31.841799 1.000000 1.000000 1.000000 +vn 0.454683 0.889295 0.049178 +v -160.814087 -146.676559 31.017399 1.000000 1.000000 1.000000 +vn 0.296826 0.908787 -0.293257 +v -160.255325 -146.961197 30.447998 1.000000 1.000000 1.000000 +vn 0.418035 0.876607 -0.238343 +v -160.835983 -146.728180 30.562599 1.000000 1.000000 1.000000 +vn 0.609384 0.707104 0.358686 +v -161.450119 -146.520279 31.957199 1.000000 1.000000 1.000000 +vn 0.661626 0.672160 0.332342 +v -161.965103 -146.107254 32.072399 1.000000 1.000000 1.000000 +vn 0.751605 0.495927 0.434909 +v -162.426025 -145.614716 32.188999 1.000000 1.000000 1.000000 +vn -0.523625 0.725865 0.446024 +v -156.117371 -146.175629 30.929798 1.000000 1.000000 1.000000 +vn -0.701655 0.631153 0.330644 +v -155.647430 -145.692841 30.813198 1.000000 1.000000 1.000000 +vn -0.733970 0.579178 0.354740 +v -155.249603 -145.150055 30.697998 1.000000 1.000000 1.000000 +vn -0.802184 0.435236 0.408742 +v -154.923874 -144.551468 30.582598 1.000000 1.000000 1.000000 +vn -0.879750 0.322115 0.349689 +v -154.681824 -143.913788 30.467798 1.000000 1.000000 1.000000 +vn -0.988443 0.143404 0.049143 +v -154.697266 -143.202164 29.527399 1.000000 1.000000 1.000000 +vn -0.199410 0.240071 -0.950053 +v -163.862854 -140.178482 30.948599 1.000000 1.000000 1.000000 +vn -0.082615 0.286349 -0.954557 +v -162.606262 -138.206879 31.295799 1.000000 1.000000 1.000000 +vn 0.303473 0.043563 -0.951844 +v -163.646561 -140.276154 30.953798 1.000000 1.000000 1.000000 +vn 0.283159 -0.060091 -0.957189 +v -162.446625 -138.391068 31.300999 1.000000 1.000000 1.000000 +vn 0.005439 0.308151 -0.951322 +v -161.396042 -137.284561 31.527199 1.000000 1.000000 1.000000 +vn 0.506608 -0.464457 -0.726380 +v -161.769409 -138.098038 31.552998 1.000000 1.000000 1.000000 +vn 0.687771 -0.340000 -0.641383 +v -162.758194 -139.108261 31.320198 1.000000 1.000000 1.000000 +vn 0.251850 -0.136797 -0.958049 +v -161.290466 -137.509216 31.532198 1.000000 1.000000 1.000000 +vn 0.145710 0.276225 -0.949983 +v -159.341217 -136.672012 31.861799 1.000000 1.000000 1.000000 +vn 0.181897 -0.183411 -0.966061 +v -159.325775 -136.923172 31.866999 1.000000 1.000000 1.000000 +vn 0.255969 0.194837 -0.946847 +v -157.160233 -137.020844 32.207798 1.000000 1.000000 1.000000 +vn 0.059890 -0.281143 -0.957795 +v -157.242630 -137.258057 32.212997 1.000000 1.000000 1.000000 +vn 0.306107 0.082456 -0.948420 +v -155.299820 -138.314316 32.555000 1.000000 1.000000 1.000000 +vn 0.573601 0.377073 -0.727184 +v -155.126007 -138.124557 32.706001 1.000000 1.000000 1.000000 +vn 0.326996 0.000028 -0.945026 +v -154.407593 -139.592438 32.786400 1.000000 1.000000 1.000000 +vn 0.453595 0.420521 -0.785757 +v -155.718246 -137.573395 32.589600 1.000000 1.000000 1.000000 +vn 0.367035 0.564012 -0.739713 +v -157.073959 -136.771088 32.359001 1.000000 1.000000 1.000000 +vn 0.658285 0.206816 -0.723801 +v -154.191299 -139.464066 32.937401 1.000000 1.000000 1.000000 +vn 0.294977 -0.126002 -0.947160 +v -153.771576 -141.798462 33.120998 1.000000 1.000000 1.000000 +vn 0.632041 0.067682 -0.771973 +v -153.656982 -140.941742 33.156197 1.000000 1.000000 1.000000 +vn 0.839901 0.349835 -0.414948 +v -153.984009 -139.338501 33.281998 1.000000 1.000000 1.000000 +vn 0.753636 0.447337 -0.481584 +v -154.423035 -138.605942 33.166798 1.000000 1.000000 1.000000 +vn 0.688817 -0.055281 -0.722825 +v -153.525665 -141.773361 33.271999 1.000000 1.000000 1.000000 +vn 0.216845 -0.227074 -0.949429 +v -154.018768 -144.171921 33.466999 1.000000 1.000000 1.000000 +vn 0.878724 0.152996 -0.452146 +v -153.426529 -140.880341 33.500801 1.000000 1.000000 1.000000 +vn 0.922504 0.325415 -0.207587 +v -153.553986 -139.985931 33.777199 1.000000 1.000000 1.000000 +vn 0.826557 0.536561 -0.170016 +v -154.317474 -138.519440 33.559799 1.000000 1.000000 1.000000 +vn 0.691285 0.560526 -0.456000 +v -154.958633 -137.943161 33.050598 1.000000 1.000000 1.000000 +vn 0.735517 0.654475 -0.175151 +v -154.864655 -137.839905 33.443596 1.000000 1.000000 1.000000 +vn 0.798612 0.582410 0.151714 +v -154.307159 -138.511063 34.375397 1.000000 1.000000 1.000000 +vn 0.865830 0.472426 0.164778 +v -153.856552 -139.261749 34.490601 1.000000 1.000000 1.000000 +vn 0.708830 0.688489 0.153434 +v -154.855637 -137.830139 34.259201 1.000000 1.000000 1.000000 +vn 0.603090 0.782644 0.154113 +v -155.490372 -137.239914 34.142799 1.000000 1.000000 1.000000 +vn 0.635430 0.751823 -0.176041 +v -155.498093 -137.251068 33.327198 1.000000 1.000000 1.000000 +vn 0.605391 0.649949 -0.459421 +v -155.576614 -137.366882 32.934196 1.000000 1.000000 1.000000 +vn 0.500359 0.712713 -0.491611 +v -156.256409 -136.893875 32.818798 1.000000 1.000000 1.000000 +vn 0.521111 0.834903 -0.177144 +v -156.193329 -136.768280 33.211800 1.000000 1.000000 1.000000 +vn 0.484013 0.861064 0.155883 +v -156.186890 -136.755737 34.027397 1.000000 1.000000 1.000000 +vn 0.392113 0.902293 -0.179206 +v -156.943924 -136.395737 33.096596 1.000000 1.000000 1.000000 +vn 0.390826 0.793439 -0.466594 +v -156.991562 -136.529694 32.703400 1.000000 1.000000 1.000000 +vn 0.350832 0.923093 0.157532 +v -156.940063 -136.381775 33.911999 1.000000 1.000000 1.000000 +vn 0.252501 0.950454 -0.181330 +v -157.731873 -136.143173 32.981796 1.000000 1.000000 1.000000 +vn 0.382459 0.780435 0.494618 +v -156.260284 -136.899445 34.495598 1.000000 1.000000 1.000000 +vn 0.271003 0.841271 0.467782 +v -156.992859 -136.536667 34.380398 1.000000 1.000000 1.000000 +vn 0.207864 0.965300 0.158078 +v -157.729294 -136.129227 33.797398 1.000000 1.000000 1.000000 +vn 0.133198 0.856588 0.498513 +v -157.762772 -136.289688 34.265598 1.000000 1.000000 1.000000 +vn 0.145418 0.648320 0.747352 +v -157.076538 -136.776657 34.717999 1.000000 1.000000 1.000000 +vn 0.506058 0.728673 0.461456 +v -155.580490 -137.371063 34.611000 1.000000 1.000000 1.000000 +vn 0.294302 0.555207 0.777902 +v -155.722107 -137.577576 34.948799 1.000000 1.000000 1.000000 +vn 0.592314 0.640250 0.489125 +v -154.962494 -137.947342 34.727398 1.000000 1.000000 1.000000 +vn 0.486693 0.453196 0.746822 +v -154.617447 -138.765015 35.181396 1.000000 1.000000 1.000000 +vn 0.143601 0.327471 0.933885 +v -155.286942 -138.301758 35.205799 1.000000 1.000000 1.000000 +vn -0.027009 0.315630 0.948498 +v -157.155075 -137.004105 34.858597 1.000000 1.000000 1.000000 +vn -0.060880 0.623648 0.779331 +v -158.584183 -136.416656 34.487198 1.000000 1.000000 1.000000 +vn 0.007923 0.882796 0.469689 +v -158.566162 -136.161316 34.149399 1.000000 1.000000 1.000000 +vn -0.150065 0.832099 0.533940 +v -159.370834 -136.154343 34.034401 1.000000 1.000000 1.000000 +vn -0.329262 0.551039 0.766774 +v -160.877182 -136.755737 34.139599 1.000000 1.000000 1.000000 +vn -0.193185 0.404427 0.893934 +v -159.341217 -136.652466 34.512596 1.000000 1.000000 1.000000 +vn 0.060316 0.985486 0.158677 +v -158.554565 -135.996674 33.681198 1.000000 1.000000 1.000000 +vn 0.106602 0.977553 -0.181732 +v -158.555847 -136.010620 32.865601 1.000000 1.000000 1.000000 +vn -0.042609 0.982428 -0.181714 +v -159.379837 -136.005035 32.750599 1.000000 1.000000 1.000000 +vn -0.090002 0.983389 0.157627 +v -159.381134 -135.991089 33.565998 1.000000 1.000000 1.000000 +vn 0.268975 0.841031 -0.469382 +v -157.761490 -136.284103 32.588799 1.000000 1.000000 1.000000 +vn 0.141376 0.854475 -0.499886 +v -158.566162 -136.154343 32.472599 1.000000 1.000000 1.000000 +vn 0.005473 0.881600 -0.471965 +v -159.372116 -136.148758 32.357399 1.000000 1.000000 1.000000 +vn -0.192353 0.964432 -0.181302 +v -160.202545 -136.125046 32.634598 1.000000 1.000000 1.000000 +vn -0.241276 0.808040 0.537455 +v -160.174210 -136.272949 33.918396 1.000000 1.000000 1.000000 +vn -0.238612 0.958214 0.157765 +v -160.205109 -136.111084 33.450199 1.000000 1.000000 1.000000 +vn -0.143034 0.865534 -0.479993 +v -160.175507 -136.265961 32.241600 1.000000 1.000000 1.000000 +vn -0.340931 0.914187 -0.219154 +v -161.005936 -136.373413 32.517998 1.000000 1.000000 1.000000 +vn -0.376618 0.913190 0.155705 +v -161.009796 -136.360855 33.333599 1.000000 1.000000 1.000000 +vn 0.085695 0.659352 -0.746935 +v -159.356674 -136.405502 32.012798 1.000000 1.000000 1.000000 +vn -0.056129 0.610018 -0.790397 +v -160.126587 -136.518524 31.896999 1.000000 1.000000 1.000000 +vn -0.363667 0.823509 -0.435406 +v -161.616196 -136.818527 32.022797 1.000000 1.000000 1.000000 +vn -0.567304 0.804483 -0.175995 +v -162.383530 -137.150604 32.300598 1.000000 1.000000 1.000000 +vn -0.500923 0.848849 0.168912 +v -161.683151 -136.677597 33.231400 1.000000 1.000000 1.000000 +vn -0.398254 0.787428 0.470480 +v -160.958298 -136.514343 33.801796 1.000000 1.000000 1.000000 +vn -0.572363 0.674657 0.466089 +v -162.303711 -137.273392 33.584396 1.000000 1.000000 1.000000 +vn -0.476842 0.465529 0.745590 +v -162.167236 -137.484100 33.922199 1.000000 1.000000 1.000000 +vn -0.614579 0.773775 0.153509 +v -162.391251 -137.139450 33.116196 1.000000 1.000000 1.000000 +vn -0.668516 0.564118 0.484622 +v -162.933289 -137.830139 33.468201 1.000000 1.000000 1.000000 +vn -0.580048 0.283331 0.763720 +v -163.300217 -138.639435 33.689598 1.000000 1.000000 1.000000 +vn -0.284431 0.220078 0.933094 +v -161.405045 -137.267822 34.177998 1.000000 1.000000 1.000000 +vn -0.345555 0.140797 0.927776 +v -162.617859 -138.194321 33.946598 1.000000 1.000000 1.000000 +vn -0.719027 0.678185 0.151873 +v -163.037582 -137.710144 33.000000 1.000000 1.000000 1.000000 +vn -0.752273 0.480724 0.450545 +v -163.485626 -138.478973 33.351799 1.000000 1.000000 1.000000 +vn -0.799909 0.364142 0.477019 +v -163.943954 -139.198959 33.236397 1.000000 1.000000 1.000000 +vn -0.806859 0.571365 0.150072 +v -163.604065 -138.377106 32.883598 1.000000 1.000000 1.000000 +vn -0.877076 0.456746 0.148732 +v -164.074005 -139.115234 32.768196 1.000000 1.000000 1.000000 +vn -0.685630 0.706222 -0.176528 +v -163.028564 -137.721313 32.184399 1.000000 1.000000 1.000000 +vn -0.472036 0.729818 -0.494518 +v -162.307571 -137.269211 31.907598 1.000000 1.000000 1.000000 +vn -0.588449 0.664598 -0.460475 +v -162.937149 -137.825958 31.791401 1.000000 1.000000 1.000000 +vn -0.778001 0.603353 -0.175157 +v -163.593765 -138.385483 32.068001 1.000000 1.000000 1.000000 +vn -0.208289 0.635394 -0.743566 +v -161.509338 -137.047363 31.678198 1.000000 1.000000 1.000000 +vn -0.393809 0.550343 -0.736232 +v -162.774933 -138.012939 31.446798 1.000000 1.000000 1.000000 +vn -0.440914 0.431639 -0.786945 +v -163.304077 -138.636642 31.330399 1.000000 1.000000 1.000000 +vn -0.676886 0.576214 -0.458041 +v -163.489487 -138.476166 31.674999 1.000000 1.000000 1.000000 +vn -0.735877 0.474135 -0.483405 +v -163.947815 -139.196167 31.559599 1.000000 1.000000 1.000000 +vn -0.853190 0.491894 -0.173514 +v -164.062408 -139.122223 31.952599 1.000000 1.000000 1.000000 +vn -0.585862 0.353276 -0.729357 +v -164.090729 -140.076630 31.099798 1.000000 1.000000 1.000000 +vn -0.585144 0.224142 -0.779337 +v -164.334061 -140.867783 30.984999 1.000000 1.000000 1.000000 +vn -0.811428 0.373921 -0.449185 +v -164.309616 -139.978958 31.444199 1.000000 1.000000 1.000000 +vn -0.854921 0.263400 -0.446913 +v -164.563248 -140.803604 31.329599 1.000000 1.000000 1.000000 +vn -0.912013 0.372905 -0.170808 +v -164.431915 -139.923141 31.837399 1.000000 1.000000 1.000000 +vn -0.930583 0.334893 0.147855 +v -164.443497 -139.918961 32.652798 1.000000 1.000000 1.000000 +vn -0.684137 0.098795 -0.722631 +v -164.505310 -142.536606 30.753599 1.000000 1.000000 1.000000 +vn 0.230027 0.566336 -0.791423 +v -157.811691 -136.533875 32.244198 1.000000 1.000000 1.000000 +vn -0.275454 -0.058697 0.959521 +v -155.455597 -138.484558 35.209599 1.000000 1.000000 1.000000 +vn -0.290407 0.025678 0.956559 +v -154.600708 -139.709656 35.440796 1.000000 1.000000 1.000000 +vn 0.226420 0.269404 0.936032 +v -154.392136 -139.584076 35.437199 1.000000 1.000000 1.000000 +vn -0.249881 0.127673 0.959822 +v -153.991730 -141.822189 35.775578 1.000000 1.000000 1.000000 +vn 0.415580 0.189980 0.889494 +v -153.754837 -141.797073 35.771778 1.000000 1.000000 1.000000 +vn -0.171825 0.213026 0.961819 +v -154.229919 -144.096588 36.121578 1.000000 1.000000 1.000000 +vn 0.333272 0.039131 0.942018 +v -154.003311 -144.178909 36.117779 1.000000 1.000000 1.000000 +vn -0.072328 0.257755 0.963499 +v -155.311401 -146.069580 36.468781 1.000000 1.000000 1.000000 +vn -0.626730 0.314894 0.712777 +v -154.462952 -144.011459 35.966980 1.000000 1.000000 1.000000 +vn 0.354987 -0.118530 0.927327 +v -155.136307 -146.245392 36.464981 1.000000 1.000000 1.000000 +vn -0.446979 0.520560 0.727480 +v -155.491653 -145.888199 36.314178 1.000000 1.000000 1.000000 +vn 0.021093 0.271589 0.962182 +v -156.410904 -147.036545 36.700180 1.000000 1.000000 1.000000 +vn 0.299413 -0.200948 0.932723 +v -156.288605 -147.258408 36.696381 1.000000 1.000000 1.000000 +vn -0.223954 0.633502 0.740621 +v -156.538376 -146.807709 36.545578 1.000000 1.000000 1.000000 +vn 0.131472 0.234178 0.963263 +v -158.339554 -147.769104 37.034779 1.000000 1.000000 1.000000 +vn 0.190632 -0.304637 0.933197 +v -158.307373 -148.024445 37.030979 1.000000 1.000000 1.000000 +vn 0.220691 0.163226 0.961589 +v -160.443298 -147.589111 37.380779 1.000000 1.000000 1.000000 +vn 0.030081 0.677948 0.734494 +v -158.371750 -147.503983 36.880180 1.000000 1.000000 1.000000 +vn 0.327546 0.603287 0.727158 +v -160.373779 -147.332352 37.226181 1.000000 1.000000 1.000000 +vn 0.270684 0.076091 0.959656 +v -162.299850 -146.485397 37.727978 1.000000 1.000000 1.000000 +vn 0.544536 0.426559 0.722169 +v -162.138916 -146.283066 37.573380 1.000000 1.000000 1.000000 +vn 0.290870 -0.007670 0.956732 +v -163.230698 -145.325867 37.959381 1.000000 1.000000 1.000000 +vn 0.657614 0.221795 0.719966 +v -163.023422 -145.180756 37.804779 1.000000 1.000000 1.000000 +vn 0.258840 -0.111341 0.959481 +v -163.971008 -143.262161 38.293976 1.000000 1.000000 1.000000 +vn 0.705882 -0.004609 0.708314 +v -163.727661 -143.218918 38.139378 1.000000 1.000000 1.000000 +vn 0.828140 0.348711 0.438845 +v -162.825150 -145.041229 37.456978 1.000000 1.000000 1.000000 +vn 0.757812 0.508654 0.408647 +v -162.441467 -145.595169 37.341980 1.000000 1.000000 1.000000 +vn 0.186907 -0.201417 0.961508 +v -163.877014 -140.976624 38.639977 1.000000 1.000000 1.000000 +vn 0.946395 -0.044889 0.319876 +v -163.556427 -142.486359 37.906979 1.000000 1.000000 1.000000 +vn 0.646784 -0.273981 0.711762 +v -163.638824 -141.044983 38.485378 1.000000 1.000000 1.000000 +vn 0.900840 0.060363 0.429935 +v -163.494629 -143.175659 37.791779 1.000000 1.000000 1.000000 +vn 0.915076 0.266873 0.302349 +v -163.343994 -143.853790 37.675781 1.000000 1.000000 1.000000 +vn 0.960155 0.279339 -0.008523 +v -163.175339 -143.796585 36.851578 1.000000 1.000000 1.000000 +vn 0.997781 0.044694 0.049359 +v -163.378754 -142.480789 37.082581 1.000000 1.000000 1.000000 +vn 0.924581 -0.150656 0.349932 +v -163.526825 -141.787308 38.022980 1.000000 1.000000 1.000000 +vn 0.872811 -0.271913 0.405294 +v -163.409653 -141.109177 38.137779 1.000000 1.000000 1.000000 +vn 0.967749 -0.247529 0.046807 +v -163.238419 -141.158005 37.313377 1.000000 1.000000 1.000000 +vn 0.834924 -0.424366 0.350449 +v -163.204941 -140.451965 38.253178 1.000000 1.000000 1.000000 +vn 0.899981 0.208987 -0.382568 +v -163.508789 -143.178452 36.115181 1.000000 1.000000 1.000000 +vn 0.898390 0.439146 0.006825 +v -162.944870 -144.421692 36.734978 1.000000 1.000000 1.000000 +vn 0.908227 -0.017944 -0.418093 +v -163.540985 -141.785904 36.346581 1.000000 1.000000 1.000000 +vn 0.814502 0.529902 -0.236201 +v -162.719574 -144.967270 36.177979 1.000000 1.000000 1.000000 +vn 0.635331 0.372442 -0.676492 +v -163.329834 -144.624023 35.547997 1.000000 1.000000 1.000000 +vn 0.779664 0.290687 -0.554640 +v -163.356873 -143.857986 35.999176 1.000000 1.000000 1.000000 +vn 0.747383 0.108350 -0.655499 +v -163.807495 -142.493347 35.895576 1.000000 1.000000 1.000000 +vn 0.713432 0.527263 -0.461528 +v -162.836731 -145.049606 35.780380 1.000000 1.000000 1.000000 +vn 0.665470 0.710947 -0.227385 +v -161.902023 -145.987259 35.946579 1.000000 1.000000 1.000000 +vn 0.787344 0.615642 0.032769 +v -162.307571 -145.469589 36.517578 1.000000 1.000000 1.000000 +vn 0.450201 0.515673 -0.728972 +v -162.630737 -145.775162 35.330597 1.000000 1.000000 1.000000 +vn 0.562230 0.690099 -0.455697 +v -161.993423 -146.100281 35.549198 1.000000 1.000000 1.000000 +vn 0.416943 0.792733 -0.444671 +v -161.473282 -146.521683 35.432598 1.000000 1.000000 1.000000 +vn 0.678676 0.734421 0.004917 +v -161.868546 -145.944000 36.401379 1.000000 1.000000 1.000000 +vn 0.554581 0.832072 0.009777 +v -161.370285 -146.347260 36.284981 1.000000 1.000000 1.000000 +vn 0.676954 0.590400 0.439500 +v -161.984421 -146.089111 37.225777 1.000000 1.000000 1.000000 +vn 0.562580 0.754748 0.337430 +v -161.466858 -146.509109 37.109177 1.000000 1.000000 1.000000 +vn 0.503943 0.784125 0.362201 +v -160.905502 -146.842606 36.993980 1.000000 1.000000 1.000000 +vn 0.322282 0.945292 0.050562 +v -160.255325 -146.903992 36.054176 1.000000 1.000000 1.000000 +vn 0.341796 0.838303 0.424763 +v -160.305542 -147.088181 36.878578 1.000000 1.000000 1.000000 +vn 0.206912 0.904628 0.372606 +v -159.683685 -147.237488 36.763779 1.000000 1.000000 1.000000 +vn 0.087129 0.934543 0.345019 +v -159.041229 -147.293289 36.647778 1.000000 1.000000 1.000000 +vn -0.013877 0.998557 0.051869 +v -159.039948 -147.100739 35.823380 1.000000 1.000000 1.000000 +vn 0.160344 0.942114 -0.294468 +v -159.665665 -147.103531 35.484798 1.000000 1.000000 1.000000 +vn 0.288197 0.927148 -0.239456 +v -160.269501 -146.957016 35.599396 1.000000 1.000000 1.000000 +vn -0.285529 0.958328 -0.008955 +v -157.820709 -146.924927 35.592400 1.000000 1.000000 1.000000 +vn 0.049860 0.893504 -0.446278 +v -159.686264 -147.252823 35.087399 1.000000 1.000000 1.000000 +vn -0.037507 0.888023 0.458267 +v -158.402634 -147.250031 36.532578 1.000000 1.000000 1.000000 +vn -0.208474 0.888065 -0.409732 +v -158.401352 -147.265381 34.855999 1.000000 1.000000 1.000000 +vn -0.465400 0.885077 0.006412 +v -157.234894 -146.696091 35.475800 1.000000 1.000000 1.000000 +vn 0.215990 0.844647 -0.489816 +v -160.309402 -147.102142 35.201996 1.000000 1.000000 1.000000 +vn 0.082621 0.653916 -0.752042 +v -160.377640 -147.349106 34.867199 1.000000 1.000000 1.000000 +vn -0.097212 0.723120 -0.683847 +v -159.042526 -147.565384 34.636398 1.000000 1.000000 1.000000 +vn 0.301709 0.686229 -0.661862 +v -161.602036 -146.737946 35.098000 1.000000 1.000000 1.000000 +vn -0.080549 0.275635 -0.957882 +v -160.440720 -147.576538 34.731400 1.000000 1.000000 1.000000 +vn -0.195187 0.172312 -0.965511 +v -158.340851 -147.755142 34.385399 1.000000 1.000000 1.000000 +vn -0.388224 0.611234 -0.689692 +v -157.062378 -147.121674 34.288799 1.000000 1.000000 1.000000 +vn 0.036632 0.268788 -0.962502 +v -162.292130 -146.475632 35.078598 1.000000 1.000000 1.000000 +vn -0.327897 -0.021202 -0.944476 +v -163.416092 -145.457031 35.304798 1.000000 1.000000 1.000000 +vn 0.121368 0.246269 -0.961572 +v -163.220398 -145.318893 35.309799 1.000000 1.000000 1.000000 +vn -0.300062 -0.102231 -0.948426 +v -162.445328 -146.666794 35.073399 1.000000 1.000000 1.000000 +vn -0.304024 0.107493 -0.946581 +v -164.188583 -143.302643 35.639378 1.000000 1.000000 1.000000 +vn 0.178645 0.186584 -0.966060 +v -163.959412 -143.260773 35.644577 1.000000 1.000000 1.000000 +vn 0.293913 0.081766 -0.952329 +v -163.865433 -140.980804 35.990578 1.000000 1.000000 1.000000 +vn 0.684253 -0.052189 -0.727375 +v -163.652985 -141.040802 36.126381 1.000000 1.000000 1.000000 +vn 0.289156 -0.024014 -0.956981 +v -162.912689 -138.936630 36.337776 1.000000 1.000000 1.000000 +vn 0.728401 -0.249244 -0.638208 +v -163.131561 -139.692902 36.357178 1.000000 1.000000 1.000000 +vn 0.871726 -0.161230 -0.462708 +v -163.422531 -141.106384 36.461178 1.000000 1.000000 1.000000 +vn 0.955617 -0.107846 -0.274165 +v -163.401932 -141.804047 36.743980 1.000000 1.000000 1.000000 +vn 0.836672 -0.343170 -0.426865 +v -162.926849 -139.825470 36.691780 1.000000 1.000000 1.000000 +vn 0.949746 -0.218771 -0.223880 +v -163.288635 -141.144058 36.858578 1.000000 1.000000 1.000000 +vn 0.567629 -0.394565 -0.722576 +v -162.277954 -138.545944 36.589779 1.000000 1.000000 1.000000 +vn -0.039536 0.304519 -0.951685 +v -162.011444 -137.685028 36.563980 1.000000 1.000000 1.000000 +vn -0.122916 0.272563 -0.954254 +v -163.094223 -138.777573 36.332581 1.000000 1.000000 1.000000 +vn 0.269585 -0.103678 -0.957379 +v -161.878845 -137.892929 36.568977 1.000000 1.000000 1.000000 +vn 0.103444 0.292827 -0.950553 +v -160.051910 -136.773880 36.898579 1.000000 1.000000 1.000000 +vn 0.207170 -0.159193 -0.965266 +v -160.005554 -137.022232 36.903778 1.000000 1.000000 1.000000 +vn 0.224561 0.225782 -0.947942 +v -157.847733 -136.798981 37.244579 1.000000 1.000000 1.000000 +vn 0.100533 -0.270160 -0.957552 +v -157.899231 -137.045959 37.249779 1.000000 1.000000 1.000000 +vn 0.291806 0.121046 -0.948787 +v -155.841843 -137.805023 37.591778 1.000000 1.000000 1.000000 +vn 0.515609 0.448193 -0.730253 +v -155.693787 -137.591537 37.742779 1.000000 1.000000 1.000000 +vn 0.389536 0.477018 -0.787855 +v -156.350403 -137.132477 37.626381 1.000000 1.000000 1.000000 +vn 0.281573 0.607291 -0.742909 +v -157.793655 -136.538055 37.395779 1.000000 1.000000 1.000000 +vn 0.624026 0.289588 -0.725762 +v -154.600708 -138.780365 37.974178 1.000000 1.000000 1.000000 +vn 0.617180 0.146659 -0.773033 +v -153.884872 -140.165924 38.192978 1.000000 1.000000 1.000000 +vn 0.785291 0.455178 -0.419679 +v -154.410172 -138.626877 38.318779 1.000000 1.000000 1.000000 +vn 0.685840 0.542066 -0.485580 +v -154.938034 -137.965485 38.203579 1.000000 1.000000 1.000000 +vn 0.693557 0.040232 -0.719277 +v -153.650558 -140.969635 38.308979 1.000000 1.000000 1.000000 +vn 0.850976 0.262807 -0.454722 +v -153.663422 -140.071045 38.537579 1.000000 1.000000 1.000000 +vn 0.872317 0.442144 -0.208738 +v -153.901611 -139.203140 38.813980 1.000000 1.000000 1.000000 +vn 0.746824 0.642137 -0.172960 +v -154.842758 -137.863632 38.596581 1.000000 1.000000 1.000000 +vn 0.608278 0.647696 -0.458789 +v -155.550873 -137.386414 38.087379 1.000000 1.000000 1.000000 +vn 0.639591 0.748387 -0.175615 +v -155.471039 -137.272003 38.480579 1.000000 1.000000 1.000000 +vn 0.713003 0.684163 0.153453 +v -154.833755 -137.853851 39.412178 1.000000 1.000000 1.000000 +vn 0.795632 0.582591 0.166003 +v -154.294296 -138.531982 39.527378 1.000000 1.000000 1.000000 +vn 0.607067 0.779446 0.154706 +v -155.463318 -137.260849 39.295979 1.000000 1.000000 1.000000 +vn 0.486919 0.859292 0.156613 +v -156.166290 -136.768280 39.179581 1.000000 1.000000 1.000000 +vn 0.523872 0.832905 -0.178401 +v -156.171448 -136.780853 38.363979 1.000000 1.000000 1.000000 +vn 0.507627 0.726064 -0.463838 +v -156.235809 -136.907822 37.970978 1.000000 1.000000 1.000000 +vn 0.393516 0.774965 -0.494545 +v -156.968384 -136.539459 37.855579 1.000000 1.000000 1.000000 +vn 0.396207 0.900630 -0.178567 +v -156.922043 -136.405502 38.248581 1.000000 1.000000 1.000000 +vn 0.355008 0.921542 0.157256 +v -156.916885 -136.392944 39.064178 1.000000 1.000000 1.000000 +vn 0.257173 0.949492 -0.179796 +v -157.712555 -136.147369 38.133377 1.000000 1.000000 1.000000 +vn 0.272111 0.840377 -0.468746 +v -157.742157 -136.286911 37.740181 1.000000 1.000000 1.000000 +vn 0.213201 0.964177 0.157826 +v -157.709976 -136.133423 38.948776 1.000000 1.000000 1.000000 +vn 0.110592 0.977152 -0.181501 +v -158.524948 -136.013412 38.018578 1.000000 1.000000 1.000000 +vn 0.265814 0.826305 0.496551 +v -156.970963 -136.546432 39.532379 1.000000 1.000000 1.000000 +vn 0.145689 0.871330 0.468571 +v -157.743454 -136.293884 39.417179 1.000000 1.000000 1.000000 +vn 0.064231 0.985353 0.157965 +v -158.523666 -135.999466 38.834179 1.000000 1.000000 1.000000 +vn 0.005712 0.867054 0.498182 +v -158.536545 -136.162720 39.302376 1.000000 1.000000 1.000000 +vn -0.038084 0.982599 -0.181792 +v -159.356674 -136.003647 37.902378 1.000000 1.000000 1.000000 +vn 0.143145 0.870339 -0.471189 +v -158.535263 -136.157135 37.625580 1.000000 1.000000 1.000000 +vn 0.144284 0.591243 -0.793482 +v -158.554565 -136.412476 37.280979 1.000000 1.000000 1.000000 +vn 0.014170 0.865421 -0.500845 +v -159.348938 -136.147369 37.509377 1.000000 1.000000 1.000000 +vn -0.085295 0.983645 0.158642 +v -159.357956 -135.989685 38.717979 1.000000 1.000000 1.000000 +vn -0.186993 0.965495 -0.181254 +v -160.175507 -136.119461 37.787376 1.000000 1.000000 1.000000 +vn -0.122677 0.874848 0.468606 +v -159.348938 -136.154343 39.186180 1.000000 1.000000 1.000000 +vn -0.232917 0.959608 0.157806 +v -160.176804 -136.105499 38.602779 1.000000 1.000000 1.000000 +vn -0.270370 0.802128 0.532438 +v -160.147186 -136.267365 39.071178 1.000000 1.000000 1.000000 +vn -0.124539 0.872800 -0.471922 +v -160.148468 -136.260391 37.394180 1.000000 1.000000 1.000000 +vn -0.331292 0.926069 -0.180670 +v -160.975021 -136.360855 37.671379 1.000000 1.000000 1.000000 +vn -0.011990 0.664686 -0.747027 +v -160.100830 -136.512939 37.049778 1.000000 1.000000 1.000000 +vn -0.268422 0.836834 -0.477135 +v -160.929977 -136.496201 37.278378 1.000000 1.000000 1.000000 +vn -0.375408 0.913598 0.156227 +v -160.978882 -136.346909 38.486977 1.000000 1.000000 1.000000 +vn -0.468290 0.856288 -0.217890 +v -161.738510 -136.725037 37.554779 1.000000 1.000000 1.000000 +vn -0.503242 0.850197 0.154634 +v -161.744934 -136.712479 38.370377 1.000000 1.000000 1.000000 +vn -0.145546 0.597081 -0.788866 +v -160.850143 -136.737595 36.933777 1.000000 1.000000 1.000000 +vn -0.478124 0.764935 -0.431591 +v -162.288269 -137.255249 37.059578 1.000000 1.000000 1.000000 +vn -0.673329 0.718556 -0.174085 +v -163.006683 -137.697586 37.337379 1.000000 1.000000 1.000000 +vn -0.615082 0.770499 0.167351 +v -162.371948 -137.125504 38.268181 1.000000 1.000000 1.000000 +vn -0.506669 0.724601 0.467162 +v -161.674133 -136.857590 38.838577 1.000000 1.000000 1.000000 +vn -0.356158 0.765750 0.535517 +v -160.927399 -136.501785 38.955177 1.000000 1.000000 1.000000 +vn -0.660794 0.591268 0.462336 +v -162.912689 -137.807816 38.621178 1.000000 1.000000 1.000000 +vn -0.405916 0.501618 0.763945 +v -161.564697 -137.085037 39.176376 1.000000 1.000000 1.000000 +vn -0.537632 0.398383 0.743130 +v -162.750473 -137.996185 38.958977 1.000000 1.000000 1.000000 +vn -0.715457 0.681940 0.151917 +v -163.015686 -137.687820 38.152977 1.000000 1.000000 1.000000 +vn -0.739972 0.470691 0.480511 +v -163.466309 -138.452454 38.505180 1.000000 1.000000 1.000000 +vn -0.614121 0.206387 0.761748 +v -163.727661 -139.307800 38.726379 1.000000 1.000000 1.000000 +vn -0.313263 0.181137 0.932232 +v -162.021759 -137.669678 39.214779 1.000000 1.000000 1.000000 +vn -0.804233 0.574905 0.150642 +v -163.583466 -138.349197 38.036781 1.000000 1.000000 1.000000 +vn -0.810607 0.378527 0.446805 +v -163.931091 -139.176636 38.388580 1.000000 1.000000 1.000000 +vn -0.875319 0.459993 0.149076 +v -164.061127 -139.092911 37.920380 1.000000 1.000000 1.000000 +vn -0.152510 0.609218 0.778200 +v -159.334778 -136.409683 39.523979 1.000000 1.000000 1.000000 +vn -0.250455 0.374304 0.892843 +v -160.055771 -136.755737 39.549377 1.000000 1.000000 1.000000 +vn 0.049227 0.661820 0.748045 +v -157.794952 -136.543640 39.754780 1.000000 1.000000 1.000000 +vn 0.211173 0.590018 0.779285 +v -156.352982 -137.138046 39.985580 1.000000 1.000000 1.000000 +vn -0.073437 0.309344 0.948110 +v -157.843872 -136.780853 39.895378 1.000000 1.000000 1.000000 +vn 0.397103 0.791263 0.464987 +v -156.238388 -136.913406 39.647778 1.000000 1.000000 1.000000 +vn 0.496450 0.715134 0.492058 +v -155.554733 -137.392014 39.764378 1.000000 1.000000 1.000000 +vn 0.618853 0.633658 0.464218 +v -154.941895 -137.969666 39.880379 1.000000 1.000000 1.000000 +vn 0.417919 0.513052 0.749748 +v -155.109268 -138.151062 40.218178 1.000000 1.000000 1.000000 +vn 0.747263 0.481730 0.457749 +v -154.022629 -139.277100 40.097778 1.000000 1.000000 1.000000 +vn 0.519232 0.390243 0.760334 +v -154.228638 -139.405472 40.435577 1.000000 1.000000 1.000000 +vn 0.186145 0.296151 0.936827 +v -154.783539 -138.929657 40.473976 1.000000 1.000000 1.000000 +vn 0.093891 0.342776 0.934713 +v -155.831543 -137.791061 40.242577 1.000000 1.000000 1.000000 +vn 0.641779 0.243662 0.727151 +v -153.655701 -140.971039 40.667976 1.000000 1.000000 1.000000 +vn 0.801056 0.359203 0.478834 +v -153.669861 -140.073837 40.214378 1.000000 1.000000 1.000000 +vn 0.261679 0.196236 0.944995 +v -153.873291 -141.028244 40.808578 1.000000 1.000000 1.000000 +vn 0.685891 0.069492 0.724379 +v -153.511505 -142.641251 40.899380 1.000000 1.000000 1.000000 +vn 0.870005 0.136791 0.473688 +v -153.293930 -141.773361 40.445377 1.000000 1.000000 1.000000 +vn 0.860241 0.249905 0.444447 +v -153.425247 -140.911041 40.330379 1.000000 1.000000 1.000000 +vn 0.961464 0.232122 0.147331 +v -153.278473 -140.873367 39.861977 1.000000 1.000000 1.000000 +vn 0.921864 0.357574 0.149361 +v -153.528244 -140.013840 39.746178 1.000000 1.000000 1.000000 +vn 0.983599 0.104346 0.147122 +v -153.143280 -141.756607 39.977180 1.000000 1.000000 1.000000 +vn 0.896770 0.018862 0.442096 +v -153.274612 -142.653809 40.561577 1.000000 1.000000 1.000000 +vn 0.988926 -0.023580 0.146524 +v -153.123978 -142.660782 40.093376 1.000000 1.000000 1.000000 +vn 0.983540 -0.063955 -0.168996 +v -153.136841 -142.660782 39.277779 1.000000 1.000000 1.000000 +vn 0.966906 0.191125 -0.169009 +v -153.291351 -140.876144 39.046577 1.000000 1.000000 1.000000 +vn 0.983474 0.063972 -0.169373 +v -153.156158 -141.758011 39.161579 1.000000 1.000000 1.000000 +vn 0.977318 -0.152139 0.147317 +v -153.219254 -143.546814 40.207977 1.000000 1.000000 1.000000 +vn 0.876420 -0.090796 0.472910 +v -153.368591 -143.516129 40.676376 1.000000 1.000000 1.000000 +vn 0.966863 -0.191236 -0.169132 +v -153.232117 -143.544037 39.392578 1.000000 1.000000 1.000000 +vn 0.870698 -0.213094 0.443256 +v -153.573303 -144.361694 40.791779 1.000000 1.000000 1.000000 +vn 0.310035 0.121885 0.942880 +v -153.735519 -142.630096 41.039978 1.000000 1.000000 1.000000 +vn 0.335075 0.035880 0.941508 +v -154.009766 -144.199844 41.269978 1.000000 1.000000 1.000000 +vn 0.879985 0.014587 -0.474778 +v -153.288773 -141.771957 38.768578 1.000000 1.000000 1.000000 +vn 0.885455 0.135721 -0.444466 +v -153.420090 -140.909637 38.653378 1.000000 1.000000 1.000000 +vn 0.932994 0.317450 -0.169555 +v -153.539825 -140.019409 38.930580 1.000000 1.000000 1.000000 +vn 0.890430 -0.095841 -0.444915 +v -153.269455 -142.653809 38.884781 1.000000 1.000000 1.000000 +vn 0.853555 -0.211749 -0.476031 +v -153.362152 -143.517517 38.999378 1.000000 1.000000 1.000000 +vn 0.671619 -0.136134 -0.728282 +v -153.506363 -142.641251 38.540176 1.000000 1.000000 1.000000 +vn 0.866920 0.475348 0.149981 +v -153.891312 -139.196167 39.629578 1.000000 1.000000 1.000000 +vn -0.775564 0.606579 -0.174822 +v -163.574463 -138.357574 37.221378 1.000000 1.000000 1.000000 +vn -0.570293 0.658295 -0.491339 +v -162.916550 -137.803635 36.944378 1.000000 1.000000 1.000000 +vn -0.674917 0.579016 -0.457414 +v -163.470169 -138.448273 36.828178 1.000000 1.000000 1.000000 +vn -0.851796 0.494649 -0.172526 +v -164.049530 -139.099899 37.104778 1.000000 1.000000 1.000000 +vn -0.298263 0.600701 -0.741753 +v -162.153076 -137.465958 36.714981 1.000000 1.000000 1.000000 +vn -0.468122 0.492892 -0.733430 +v -163.286057 -138.610123 36.483578 1.000000 1.000000 1.000000 +vn -0.496908 0.369978 -0.784983 +v -163.731522 -139.305008 36.367180 1.000000 1.000000 1.000000 +vn -0.749814 0.481877 -0.453401 +v -163.936234 -139.173843 36.711777 1.000000 1.000000 1.000000 +vn -0.793464 0.374182 -0.480003 +v -164.299301 -139.955231 36.596378 1.000000 1.000000 1.000000 +vn -0.910386 0.376526 -0.171537 +v -164.421616 -139.899414 36.989380 1.000000 1.000000 1.000000 +vn -0.628893 0.274696 -0.727348 +v -164.328918 -140.848251 36.136578 1.000000 1.000000 1.000000 +vn -0.231823 0.212550 -0.949252 +v -164.090729 -140.916611 35.985378 1.000000 1.000000 1.000000 +vn -0.610783 0.148353 -0.777776 +v -164.470551 -141.668701 36.021778 1.000000 1.000000 1.000000 +vn -0.853890 0.266691 -0.446931 +v -164.559387 -140.784058 36.480980 1.000000 1.000000 1.000000 +vn -0.691069 0.011892 -0.722691 +v -164.431915 -143.347290 35.790379 1.000000 1.000000 1.000000 +vn -0.928801 0.339617 0.148283 +v -164.434494 -139.893845 37.804977 1.000000 1.000000 1.000000 +vn 0.885675 -0.464213 0.009270 +v -162.763336 -139.930115 37.544178 1.000000 1.000000 1.000000 +vn -0.240898 -0.211395 -0.947249 +v -160.506393 -147.819336 34.726196 1.000000 1.000000 1.000000 +vn -0.301266 0.759955 -0.575941 +v -157.769211 -147.124466 34.739998 1.000000 1.000000 1.000000 +vn -0.553351 0.687669 -0.470015 +v -156.652969 -146.601212 34.521198 1.000000 1.000000 1.000000 +vn -0.538086 0.430111 -0.724891 +v -155.977036 -146.403076 34.071396 1.000000 1.000000 1.000000 +vn -0.261316 0.120630 -0.957686 +v -156.417343 -147.025391 34.050598 1.000000 1.000000 1.000000 +vn -0.561247 0.791560 -0.241733 +v -156.723770 -146.471436 34.918800 1.000000 1.000000 1.000000 +vn -0.741088 0.633062 -0.223653 +v -155.756866 -145.621674 34.687401 1.000000 1.000000 1.000000 +vn -0.715873 0.535216 -0.448408 +v -155.655167 -145.723541 34.290001 1.000000 1.000000 1.000000 +vn -0.649087 0.759988 0.033232 +v -156.247406 -146.043076 35.258400 1.000000 1.000000 1.000000 +vn -0.272071 0.906408 0.323113 +v -157.773071 -147.110504 36.416580 1.000000 1.000000 1.000000 +vn -0.764411 0.644702 0.005953 +v -155.794205 -145.584000 35.142197 1.000000 1.000000 1.000000 +vn -0.366221 0.810039 0.457950 +v -156.659393 -146.588654 36.197777 1.000000 1.000000 1.000000 +vn -0.853235 0.521437 0.009721 +v -155.405396 -145.057968 35.025799 1.000000 1.000000 1.000000 +vn -0.811997 0.397144 -0.427712 +v -155.249603 -145.175171 34.173401 1.000000 1.000000 1.000000 +vn -0.708702 0.294618 -0.641048 +v -155.053909 -145.321686 33.838799 1.000000 1.000000 1.000000 +vn -0.933750 0.278883 -0.224354 +v -154.805420 -143.885895 34.340199 1.000000 1.000000 1.000000 +vn -0.859134 0.215796 -0.464027 +v -154.674103 -143.934723 33.942799 1.000000 1.000000 1.000000 +vn -0.949967 0.308795 0.046988 +v -154.854340 -143.869141 34.794998 1.000000 1.000000 1.000000 +vn -0.286287 0.041702 -0.957236 +v -155.319122 -146.061218 33.819397 1.000000 1.000000 1.000000 +vn -0.299180 -0.062713 -0.952134 +v -154.240219 -144.092392 33.472198 1.000000 1.000000 1.000000 +vn -0.536244 0.733437 0.417746 +v -156.135391 -146.192383 36.082779 1.000000 1.000000 1.000000 +vn -0.620965 0.647293 0.442057 +v -155.664169 -145.713776 35.966576 1.000000 1.000000 1.000000 +vn -0.780538 0.532169 0.327959 +v -155.259903 -145.166809 35.849979 1.000000 1.000000 1.000000 +vn -0.805423 0.477317 0.351371 +v -154.932877 -144.569595 35.734779 1.000000 1.000000 1.000000 +vn -0.853283 0.327136 0.406066 +v -154.686981 -143.929138 35.619377 1.000000 1.000000 1.000000 +vn 0.571433 0.315786 0.757459 +v -153.901611 -140.136627 35.398796 1.000000 1.000000 1.000000 +vn 0.805655 0.380586 0.453954 +v -153.682739 -140.041733 35.060997 1.000000 1.000000 1.000000 +vn 0.700269 0.545222 0.460821 +v -154.428192 -138.610123 34.843597 1.000000 1.000000 1.000000 +vn 0.645747 0.075100 0.759849 +v -153.510223 -142.610550 35.746376 1.000000 1.000000 1.000000 +vn 0.844160 0.159371 0.511854 +v -153.296494 -141.748230 35.293598 1.000000 1.000000 1.000000 +vn 0.822768 0.237397 0.516426 +v -153.431671 -140.883133 35.177597 1.000000 1.000000 1.000000 +vn 0.681633 -0.108380 0.723623 +v -153.790878 -144.255661 35.977180 1.000000 1.000000 1.000000 +vn 0.876852 -0.087263 0.472775 +v -153.366028 -143.495193 35.524799 1.000000 1.000000 1.000000 +vn 0.896738 0.022016 0.442015 +v -153.274612 -142.620316 35.408600 1.000000 1.000000 1.000000 +vn 0.988824 -0.020509 0.147669 +v -153.122681 -142.627304 34.940399 1.000000 1.000000 1.000000 +vn 0.983065 0.108096 0.147980 +v -153.144562 -141.732895 34.825199 1.000000 1.000000 1.000000 +vn 0.960173 0.237184 0.147684 +v -153.284912 -140.844070 34.709396 1.000000 1.000000 1.000000 +vn 0.965750 0.196672 -0.169252 +v -153.297775 -140.846848 33.893799 1.000000 1.000000 1.000000 +vn 0.983219 0.067995 -0.169285 +v -153.157440 -141.732895 34.009796 1.000000 1.000000 1.000000 +vn 0.921586 0.358310 0.149308 +v -153.541122 -139.980347 34.592796 1.000000 1.000000 1.000000 +vn 0.895539 0.023497 -0.444362 +v -153.290054 -141.748230 33.616600 1.000000 1.000000 1.000000 +vn 0.983749 -0.060996 -0.168869 +v -153.135559 -142.627304 34.124798 1.000000 1.000000 1.000000 +vn 0.874865 -0.096350 -0.474687 +v -153.268173 -142.621704 33.731796 1.000000 1.000000 1.000000 +vn 0.870478 -0.208387 -0.445917 +v -153.359573 -143.496597 33.848000 1.000000 1.000000 1.000000 +vn 0.599422 -0.186880 -0.778312 +v -153.592606 -143.450546 33.503399 1.000000 1.000000 1.000000 +vn 0.967571 -0.187628 -0.169120 +v -153.229538 -143.523102 34.240997 1.000000 1.000000 1.000000 +vn 0.834528 -0.320663 -0.448038 +v -153.560425 -144.339371 33.962601 1.000000 1.000000 1.000000 +vn 0.608781 -0.314564 -0.728310 +v -153.785736 -144.257050 33.618198 1.000000 1.000000 1.000000 +vn 0.934274 -0.313528 -0.169803 +v -153.435547 -144.385406 34.355797 1.000000 1.000000 1.000000 +vn 0.977911 -0.148054 0.147548 +v -153.216660 -143.525894 35.056599 1.000000 1.000000 1.000000 +vn 0.949825 -0.275520 0.148058 +v -153.422668 -144.389603 35.171196 1.000000 1.000000 1.000000 +vn 0.871303 -0.209628 0.443720 +v -153.566864 -144.336578 35.639580 1.000000 1.000000 1.000000 +vn 0.822689 -0.311914 0.475281 +v -153.877151 -145.144485 35.754776 1.000000 1.000000 1.000000 +vn 0.905120 -0.398441 0.148335 +v -153.741959 -145.217026 35.286598 1.000000 1.000000 1.000000 +vn 0.598715 -0.245309 0.762472 +v -154.483551 -145.750061 36.207977 1.000000 1.000000 1.000000 +vn 0.884076 -0.434753 -0.171460 +v -153.753540 -145.211456 34.471001 1.000000 1.000000 1.000000 +vn 0.671678 -0.137987 -0.727879 +v -163.444412 -140.366852 31.089598 1.000000 1.000000 1.000000 +vn 0.843070 -0.270009 -0.465111 +v -163.224258 -140.465927 31.424398 1.000000 1.000000 1.000000 +vn 0.783837 -0.448290 -0.429693 +v -162.572800 -139.270111 31.654999 1.000000 1.000000 1.000000 +vn 0.898544 -0.131759 -0.418639 +v -163.426392 -141.121735 31.309599 1.000000 1.000000 1.000000 +vn 0.987952 0.154581 -0.007513 +v -163.316956 -143.167297 31.814798 1.000000 1.000000 1.000000 +vn 0.934361 -0.228015 -0.273822 +v -163.291214 -141.159409 31.707199 1.000000 1.000000 1.000000 +vn 0.995519 -0.080423 0.049746 +v -163.354294 -141.834747 32.045799 1.000000 1.000000 1.000000 +vn 0.913726 -0.338686 -0.224490 +v -163.095520 -140.523132 31.821798 1.000000 1.000000 1.000000 +vn 0.927798 -0.369905 0.048597 +v -163.049164 -140.544067 32.276596 1.000000 1.000000 1.000000 +vn 0.898913 -0.265066 0.348849 +v -163.413528 -141.125916 32.986198 1.000000 1.000000 1.000000 +vn 0.829693 -0.382312 0.406752 +v -163.212662 -140.470108 33.100998 1.000000 1.000000 1.000000 +vn 0.609616 0.239915 0.755519 +v -153.669861 -140.911041 30.361998 1.000000 1.000000 1.000000 +vn 0.849573 0.273520 0.451013 +v -153.440689 -140.848251 30.024199 1.000000 1.000000 1.000000 +vn 0.767586 0.448530 0.457856 +v -153.999451 -139.320358 29.806799 1.000000 1.000000 1.000000 +vn 0.650047 -0.006428 0.759867 +v -153.593903 -143.418457 30.709599 1.000000 1.000000 1.000000 +vn 0.858713 0.051931 0.509819 +v -153.272034 -142.596603 30.256798 1.000000 1.000000 1.000000 +vn 0.847731 0.131479 0.513874 +v -153.299072 -141.718933 30.140799 1.000000 1.000000 1.000000 +vn 0.660191 -0.193739 0.725682 +v -154.078003 -145.007736 30.940399 1.000000 1.000000 1.000000 +vn 0.858455 -0.197003 0.473545 +v -153.560425 -144.317047 30.487997 1.000000 1.000000 1.000000 +vn 0.892030 -0.091322 0.442655 +v -153.360870 -143.464493 30.371798 1.000000 1.000000 1.000000 +vn 0.978395 -0.145070 0.147305 +v -153.211517 -143.493790 29.903599 1.000000 1.000000 1.000000 +vn 0.989064 -0.016249 0.146590 +v -153.121399 -142.602173 29.788399 1.000000 1.000000 1.000000 +vn 0.982466 0.113463 0.147944 +v -153.148438 -141.702194 29.672598 1.000000 1.000000 1.000000 +vn 0.983974 -0.057213 -0.168883 +v -153.134277 -142.602173 28.972799 1.000000 1.000000 1.000000 +vn 0.951214 -0.270991 0.147502 +v -153.417526 -144.368683 30.019798 1.000000 1.000000 1.000000 +vn 0.935644 -0.309239 -0.170120 +v -153.429108 -144.364487 29.204199 1.000000 1.000000 1.000000 +vn 0.968213 -0.184153 -0.169268 +v -153.224396 -143.491013 29.087999 1.000000 1.000000 1.000000 +vn 0.982993 0.072446 -0.168752 +v -153.160019 -141.703583 28.856998 1.000000 1.000000 1.000000 +vn 0.960158 0.237001 0.148079 +v -153.293930 -140.809174 29.555798 1.000000 1.000000 1.000000 +vn 0.891221 -0.089744 -0.444602 +v -153.266876 -142.596603 28.579798 1.000000 1.000000 1.000000 +vn 0.855097 -0.205540 -0.475986 +v -153.354431 -143.464493 28.694998 1.000000 1.000000 1.000000 +vn 0.835360 -0.317497 -0.448742 +v -153.555283 -144.319839 28.810999 1.000000 1.000000 1.000000 +vn 0.567697 -0.260820 -0.780828 +v -153.780594 -144.238907 28.466599 1.000000 1.000000 1.000000 +vn 0.836316 -0.319257 0.445702 +v -153.865570 -145.120758 30.602798 1.000000 1.000000 1.000000 +vn 0.906571 -0.395174 0.148215 +v -153.730377 -145.194702 30.134399 1.000000 1.000000 1.000000 +vn 0.885748 -0.431293 -0.171572 +v -153.741959 -145.187729 29.318798 1.000000 1.000000 1.000000 +vn 0.113145 0.248828 -0.961916 +v -163.195938 -145.360764 25.004799 1.000000 1.000000 1.000000 +vn -0.317888 -0.023146 -0.947846 +v -163.390335 -145.500290 24.999798 1.000000 1.000000 1.000000 +vn 0.715373 0.198219 -0.670037 +v -163.734100 -143.274734 25.474199 1.000000 1.000000 1.000000 +vn 0.578224 0.380248 -0.721851 +v -163.346573 -144.587738 25.256798 1.000000 1.000000 1.000000 +vn 0.486318 0.580144 -0.653397 +v -162.597260 -145.815628 25.024199 1.000000 1.000000 1.000000 +vn 0.002714 0.286375 -0.958114 +v -161.685715 -146.962601 24.657799 1.000000 1.000000 1.000000 +vn -0.292977 -0.141648 -0.945569 +v -161.810608 -147.177475 24.652599 1.000000 1.000000 1.000000 +vn -0.138018 0.213642 -0.967113 +v -159.709427 -147.749573 24.311598 1.000000 1.000000 1.000000 +vn -0.203748 -0.242080 -0.948622 +v -159.741623 -147.999329 24.306599 1.000000 1.000000 1.000000 +vn -0.216642 0.181357 -0.959258 +v -157.675217 -147.608643 23.976999 1.000000 1.000000 1.000000 +vn -0.396786 0.554372 -0.731596 +v -157.095840 -147.138412 23.997599 1.000000 1.000000 1.000000 +vn -0.264441 0.112520 -0.957815 +v -156.377441 -147.000275 23.745598 1.000000 1.000000 1.000000 +vn -0.197298 0.690350 -0.696053 +v -158.320251 -147.512360 24.214998 1.000000 1.000000 1.000000 +vn -0.337197 0.811491 -0.477264 +v -157.796234 -147.131439 24.447599 1.000000 1.000000 1.000000 +vn -0.603446 0.466479 -0.646722 +v -155.937119 -146.366791 23.764999 1.000000 1.000000 1.000000 +vn -0.541706 0.705051 -0.457666 +v -156.616913 -146.578888 24.216198 1.000000 1.000000 1.000000 +vn -0.772953 0.426428 -0.469790 +v -155.226425 -145.141678 23.869198 1.000000 1.000000 1.000000 +vn -0.676738 0.593706 -0.435360 +v -156.089035 -146.168655 24.099798 1.000000 1.000000 1.000000 +vn -0.539330 0.810347 -0.229044 +v -156.689011 -146.449112 24.613798 1.000000 1.000000 1.000000 +vn -0.829628 0.509222 -0.228935 +v -155.342300 -145.056580 24.266598 1.000000 1.000000 1.000000 +vn -0.683788 0.729614 0.009863 +v -156.211349 -146.009583 24.951998 1.000000 1.000000 1.000000 +vn -0.872810 0.402127 -0.276579 +v -155.030731 -144.477509 24.151999 1.000000 1.000000 1.000000 +vn -0.837961 0.543588 0.048301 +v -155.384796 -145.025864 24.721399 1.000000 1.000000 1.000000 +vn -0.559987 0.828479 0.006117 +v -156.716049 -146.403076 25.068598 1.000000 1.000000 1.000000 +vn -0.410712 0.911141 0.033723 +v -157.267090 -146.712845 25.184799 1.000000 1.000000 1.000000 +vn -0.306838 0.851925 0.424351 +v -157.196274 -146.888657 26.008999 1.000000 1.000000 1.000000 +vn -0.116498 0.878868 0.462623 +v -157.800110 -147.117477 26.124199 1.000000 1.000000 1.000000 +vn 0.002353 0.945421 0.325842 +v -159.001328 -147.293289 26.342999 1.000000 1.000000 1.000000 +vn -0.192294 0.981321 0.005655 +v -158.380753 -147.053299 25.402199 1.000000 1.000000 1.000000 +vn -0.313996 0.917262 -0.245022 +v -157.833588 -146.986328 24.845198 1.000000 1.000000 1.000000 +vn 0.226141 0.643297 0.731457 +v -159.675964 -147.498413 26.806599 1.000000 1.000000 1.000000 +vn -0.031331 0.668234 0.743291 +v -157.737015 -147.364456 26.471798 1.000000 1.000000 1.000000 +vn 0.222301 0.861611 0.456300 +v -159.642487 -147.244461 26.458799 1.000000 1.000000 1.000000 +vn 0.058464 0.910455 -0.409455 +v -159.645065 -147.259811 24.782398 1.000000 1.000000 1.000000 +vn 0.005503 0.999942 -0.009251 +v -159.001328 -147.102142 25.518599 1.000000 1.000000 1.000000 +vn 0.353485 0.870857 0.341551 +v -160.268204 -147.099335 26.573999 1.000000 1.000000 1.000000 +vn 0.307812 0.842385 -0.442311 +v -160.879761 -146.871902 25.013599 1.000000 1.000000 1.000000 +vn 0.276843 0.959526 0.051645 +v -160.219284 -146.915161 25.749798 1.000000 1.000000 1.000000 +vn 0.458086 0.809282 0.367722 +v -160.873322 -146.857956 26.690199 1.000000 1.000000 1.000000 +vn 0.486615 0.494227 0.720379 +v -161.560837 -146.747711 27.152599 1.000000 1.000000 1.000000 +vn 0.425484 0.856880 -0.291067 +v -160.821823 -146.733765 25.411198 1.000000 1.000000 1.000000 +vn 0.576128 0.815880 0.049162 +v -161.340683 -146.369583 25.980598 1.000000 1.000000 1.000000 +vn 0.565030 0.711034 0.418535 +v -161.434662 -146.531433 26.804998 1.000000 1.000000 1.000000 +vn 0.701420 0.617811 0.355416 +v -161.950943 -146.121216 26.920198 1.000000 1.000000 1.000000 +vn 0.643287 0.273055 0.715278 +v -163.000229 -145.221222 27.499798 1.000000 1.000000 1.000000 +vn 0.539365 0.808547 -0.235240 +v -161.367706 -146.417023 25.525799 1.000000 1.000000 1.000000 +vn 0.760820 0.648892 0.009671 +v -162.276672 -145.507263 26.211199 1.000000 1.000000 1.000000 +vn 0.747248 0.575837 0.331712 +v -162.407990 -145.635635 27.035599 1.000000 1.000000 1.000000 +vn 0.449937 0.751026 -0.483236 +v -161.442383 -146.544006 25.128399 1.000000 1.000000 1.000000 +vn 0.622481 0.648551 -0.438063 +v -162.418304 -145.643997 25.358999 1.000000 1.000000 1.000000 +vn 0.269423 0.606344 -0.748170 +v -161.568558 -146.761673 24.793598 1.000000 1.000000 1.000000 +vn 0.117229 0.719882 -0.684125 +v -160.337738 -147.360275 24.562599 1.000000 1.000000 1.000000 +vn 0.730247 0.515563 -0.448256 +v -162.814835 -145.087280 25.475401 1.000000 1.000000 1.000000 +vn 0.831618 0.508852 -0.222443 +v -162.697678 -145.004944 25.872999 1.000000 1.000000 1.000000 +vn 0.829612 0.325231 -0.453837 +v -163.364594 -143.828690 25.706799 1.000000 1.000000 1.000000 +vn 0.830250 0.083483 -0.551104 +v -163.569305 -142.529633 25.925598 1.000000 1.000000 1.000000 +vn 0.924343 0.302581 -0.232454 +v -163.231979 -143.784027 26.104399 1.000000 1.000000 1.000000 +vn 0.920405 0.389581 0.032879 +v -162.960327 -144.388214 26.443998 1.000000 1.000000 1.000000 +vn 0.849966 0.526803 0.005974 +v -162.655197 -144.974243 26.327799 1.000000 1.000000 1.000000 +vn 0.923641 -0.023568 -0.382535 +v -163.544846 -141.830566 26.041599 1.000000 1.000000 1.000000 +vn 0.980580 0.195997 0.006961 +v -163.311813 -143.193802 26.661398 1.000000 1.000000 1.000000 +vn 0.751119 -0.081880 -0.655069 +v -163.663300 -141.084061 25.821798 1.000000 1.000000 1.000000 +vn 0.873672 -0.243538 -0.421173 +v -163.229401 -140.481277 26.272799 1.000000 1.000000 1.000000 +vn 0.999517 0.030105 -0.007671 +v -163.378754 -142.522644 26.777798 1.000000 1.000000 1.000000 +vn 0.646280 -0.221430 -0.730267 +v -163.153442 -139.729187 26.052799 1.000000 1.000000 1.000000 +vn 0.800384 -0.375164 -0.467587 +v -162.947449 -139.860352 26.387598 1.000000 1.000000 1.000000 +vn 0.897438 -0.344670 -0.275333 +v -163.100662 -140.538483 26.670399 1.000000 1.000000 1.000000 +vn 0.977275 -0.206030 0.049857 +v -163.247437 -141.197083 27.008999 1.000000 1.000000 1.000000 +vn 0.634422 -0.426087 -0.644949 +v -162.315292 -138.585007 26.283398 1.000000 1.000000 1.000000 +vn 0.862294 -0.452626 -0.227111 +v -162.827713 -139.935699 26.784998 1.000000 1.000000 1.000000 +vn 0.872367 -0.486557 0.047308 +v -162.782654 -139.963608 27.239798 1.000000 1.000000 1.000000 +vn 0.953426 0.028581 0.300271 +v -163.555145 -142.529633 27.602198 1.000000 1.000000 1.000000 +vn 0.886947 -0.166799 0.430701 +v -163.531967 -141.833359 27.717999 1.000000 1.000000 1.000000 +vn 0.891273 0.128014 0.435023 +v -163.351715 -143.824493 27.383398 1.000000 1.000000 1.000000 +vn 0.680271 -0.181193 0.710212 +v -163.766281 -141.805435 28.065798 1.000000 1.000000 1.000000 +vn 0.904313 -0.280651 0.321642 +v -163.418671 -141.151031 27.833199 1.000000 1.000000 1.000000 +vn 0.216774 -0.173034 0.960765 +v -164.012192 -141.777542 28.220398 1.000000 1.000000 1.000000 +vn 0.695305 0.049254 0.717026 +v -163.577026 -143.901230 27.730997 1.000000 1.000000 1.000000 +vn 0.548701 -0.429333 0.717356 +v -163.139282 -139.738953 28.411798 1.000000 1.000000 1.000000 +vn 0.866097 0.296439 0.402493 +v -163.119965 -144.470535 27.268198 1.000000 1.000000 1.000000 +vn 0.811125 0.393767 0.432462 +v -162.803253 -145.080292 27.151999 1.000000 1.000000 1.000000 +vn 0.278493 -0.080389 0.957068 +v -163.812637 -143.980774 27.885599 1.000000 1.000000 1.000000 +vn 0.283901 0.006593 0.958831 +v -163.204941 -145.367737 27.654398 1.000000 1.000000 1.000000 +vn 0.259613 0.103070 0.960197 +v -161.692154 -146.973755 27.307198 1.000000 1.000000 1.000000 +vn 0.193517 0.192899 0.961947 +v -159.710724 -147.762131 26.961199 1.000000 1.000000 1.000000 +vn 0.098903 0.256044 0.961592 +v -157.672653 -147.621185 26.626398 1.000000 1.000000 1.000000 +vn -0.281345 0.618804 0.733435 +v -156.501038 -146.783997 26.240599 1.000000 1.000000 1.000000 +vn 0.308501 -0.204121 0.929065 +v -156.247406 -147.231888 26.391399 1.000000 1.000000 1.000000 +vn 0.005838 0.265650 0.964052 +v -156.372284 -147.011444 26.395199 1.000000 1.000000 1.000000 +vn 0.230245 -0.269562 0.935053 +v -157.609558 -147.870956 26.622599 1.000000 1.000000 1.000000 +vn 0.333402 -0.045464 0.941688 +v -154.641907 -145.572845 26.044197 1.000000 1.000000 1.000000 +vn -0.102175 0.248555 0.963214 +v -154.838898 -145.427734 26.047998 1.000000 1.000000 1.000000 +vn 0.364975 0.076306 0.927885 +v -153.808914 -143.352875 25.698198 1.000000 1.000000 1.000000 +vn -0.516801 0.463981 0.719471 +v -155.042313 -145.277039 25.893398 1.000000 1.000000 1.000000 +vn 0.296214 0.202335 0.933444 +v -153.871994 -141.035233 25.363398 1.000000 1.000000 1.000000 +vn 0.231514 0.278075 0.932242 +v -154.415314 -139.538025 25.132198 1.000000 1.000000 1.000000 +vn 0.065820 0.309581 0.948592 +v -155.890762 -137.742233 24.784998 1.000000 1.000000 1.000000 +vn -0.829860 0.433011 0.351900 +v -154.917435 -144.537506 25.430998 1.000000 1.000000 1.000000 +vn -0.647697 0.672431 0.358226 +v -155.634567 -145.678894 25.660999 1.000000 1.000000 1.000000 +vn -0.736699 0.535969 0.412325 +v -155.238007 -145.133316 25.545799 1.000000 1.000000 1.000000 +vn -0.606735 0.720774 0.335199 +v -156.098053 -146.157486 25.776398 1.000000 1.000000 1.000000 +vn -0.415591 0.791056 0.448904 +v -156.623352 -146.566330 25.892799 1.000000 1.000000 1.000000 +vn 0.856874 -0.378130 0.350406 +v -163.217819 -140.486847 27.949398 1.000000 1.000000 1.000000 +vn -0.068658 0.812773 -0.578521 +v -159.001328 -147.308640 24.666401 1.000000 1.000000 1.000000 +vn -0.597764 0.288790 -0.747850 +v -155.434998 -145.846329 18.497597 1.000000 1.000000 1.000000 +vn -0.653791 0.603549 -0.456383 +v -156.078735 -146.158890 18.948595 1.000000 1.000000 1.000000 +vn -0.839115 0.490106 -0.235970 +v -155.362900 -145.091461 19.124798 1.000000 1.000000 1.000000 +vn -0.290939 0.253847 -0.922451 +v -156.991562 -147.347702 18.709797 1.000000 1.000000 1.000000 +vn -0.446149 0.704410 -0.552048 +v -157.174393 -146.892838 19.180399 1.000000 1.000000 1.000000 +vn -0.676529 0.694780 -0.244109 +v -156.167572 -146.043076 19.345997 1.000000 1.000000 1.000000 +vn -0.894898 0.445280 0.029717 +v -155.093811 -144.490067 19.465199 1.000000 1.000000 1.000000 +vn -0.783578 0.621284 0.003371 +v -155.753006 -145.535172 19.684599 1.000000 1.000000 1.000000 +vn -0.564029 0.822720 0.070728 +v -156.700592 -146.390518 19.916199 1.000000 1.000000 1.000000 +vn -0.451538 0.865146 -0.218256 +v -157.229752 -146.756088 19.577797 1.000000 1.000000 1.000000 +vn -0.460248 0.796797 0.391518 +v -156.606613 -146.553757 20.740597 1.000000 1.000000 1.000000 +vn -0.295913 0.841527 0.451961 +v -157.179535 -146.880280 20.856998 1.000000 1.000000 1.000000 +vn -0.178005 0.886645 0.426820 +v -157.787231 -147.114685 20.973198 1.000000 1.000000 1.000000 +vn -0.435174 0.900332 0.005112 +v -157.250351 -146.704468 20.032597 1.000000 1.000000 1.000000 +vn -0.555142 0.701830 0.446377 +v -156.087753 -146.147720 20.625198 1.000000 1.000000 1.000000 +vn -0.170400 0.653876 0.737164 +v -157.085556 -147.114685 21.204597 1.000000 1.000000 1.000000 +vn -0.358277 0.573018 0.737080 +v -155.935822 -146.344467 20.972797 1.000000 1.000000 1.000000 +vn 0.014618 0.886312 0.462857 +v -158.414230 -147.251434 21.088398 1.000000 1.000000 1.000000 +vn 0.067983 0.665965 0.742878 +v -158.383331 -147.505386 21.435999 1.000000 1.000000 1.000000 +vn -0.273368 0.961342 0.033036 +v -157.834869 -146.929108 20.148800 1.000000 1.000000 1.000000 +vn 0.140647 0.935205 0.324977 +v -159.616730 -147.248642 21.305199 1.000000 1.000000 1.000000 +vn 0.317639 0.607112 0.728368 +v -160.310684 -147.351898 21.768799 1.000000 1.000000 1.000000 +vn 0.135281 0.240971 0.961058 +v -158.351135 -147.769104 21.590599 1.000000 1.000000 1.000000 +vn 0.551921 0.426126 0.716798 +v -162.088699 -146.329117 22.115799 1.000000 1.000000 1.000000 +vn 0.492608 0.791106 0.362613 +v -160.847565 -146.870514 21.536400 1.000000 1.000000 1.000000 +vn 0.329856 0.842902 0.425101 +v -160.246307 -147.106323 21.421200 1.000000 1.000000 1.000000 +vn 0.674546 0.187918 0.713915 +v -163.322098 -144.604492 22.462997 1.000000 1.000000 1.000000 +vn 0.696601 -0.038251 0.716438 +v -163.727661 -143.211945 22.694199 1.000000 1.000000 1.000000 +vn 0.900741 0.015442 0.434082 +v -163.495911 -143.170090 22.346600 1.000000 1.000000 1.000000 +vn 0.897883 0.184757 0.399589 +v -163.346573 -143.844025 22.231400 1.000000 1.000000 1.000000 +vn 0.949239 -0.092017 0.300797 +v -163.534546 -141.855682 22.565399 1.000000 1.000000 1.000000 +vn 0.911298 0.411711 0.005544 +v -162.950027 -144.410538 21.291000 1.000000 1.000000 1.000000 +vn 0.962872 0.267857 0.033602 +v -163.177902 -143.785416 21.407200 1.000000 1.000000 1.000000 +vn 0.856499 0.285742 0.429838 +v -163.109680 -144.494247 22.115200 1.000000 1.000000 1.000000 +vn 0.840554 0.541642 0.009669 +v -162.641022 -144.995178 21.174400 1.000000 1.000000 1.000000 +vn 0.891370 0.396174 -0.220241 +v -162.996368 -144.434250 20.836197 1.000000 1.000000 1.000000 +vn 0.955504 0.182734 -0.231562 +v -163.371033 -143.146362 21.067398 1.000000 1.000000 1.000000 +vn 0.997446 0.071073 0.007072 +v -163.377472 -142.549164 21.624397 1.000000 1.000000 1.000000 +vn 0.995234 -0.097217 -0.007682 +v -163.358170 -141.875214 21.740997 1.000000 1.000000 1.000000 +vn 0.865152 0.216173 -0.452528 +v -163.508789 -143.171478 20.669998 1.000000 1.000000 1.000000 +vn 0.793580 0.415763 -0.444266 +v -163.121262 -144.499832 20.438599 1.000000 1.000000 1.000000 +vn 0.706501 0.559012 -0.434006 +v -162.799393 -145.109604 20.322195 1.000000 1.000000 1.000000 +vn 0.735707 0.106089 -0.668940 +v -163.804916 -142.568695 20.437399 1.000000 1.000000 1.000000 +vn 0.626362 0.302726 -0.718350 +v -163.587326 -143.924957 20.219997 1.000000 1.000000 1.000000 +vn 0.833834 -0.020294 -0.551642 +v -163.547424 -141.854279 20.888798 1.000000 1.000000 1.000000 +vn 0.561868 0.513203 -0.648789 +v -162.997665 -145.253311 19.987400 1.000000 1.000000 1.000000 +vn 0.217038 0.180855 -0.959263 +v -163.959412 -143.253799 20.199398 1.000000 1.000000 1.000000 +vn 0.148941 0.232268 -0.961181 +v -163.533249 -144.714706 19.967999 1.000000 1.000000 1.000000 +vn 0.243798 0.105110 -0.964113 +v -163.880875 -141.046387 20.533997 1.000000 1.000000 1.000000 +vn 0.020301 0.243396 -0.969714 +v -162.239334 -146.524460 19.620800 1.000000 1.000000 1.000000 +vn 0.296461 0.686268 -0.664189 +v -161.550537 -146.774231 19.641197 1.000000 1.000000 1.000000 +vn -0.084467 0.274248 -0.957942 +v -160.375061 -147.597473 19.273998 1.000000 1.000000 1.000000 +vn 0.591191 0.705324 -0.391167 +v -161.945801 -146.144928 20.091599 1.000000 1.000000 1.000000 +vn 0.328302 0.683806 -0.651634 +v -161.424362 -146.555161 19.975998 1.000000 1.000000 1.000000 +vn 0.204387 0.847604 -0.489687 +v -160.250183 -147.120270 19.744598 1.000000 1.000000 1.000000 +vn 0.072609 0.654629 -0.752455 +v -160.314545 -147.368637 19.409798 1.000000 1.000000 1.000000 +vn -0.103673 0.709653 -0.696882 +v -158.967850 -147.565384 19.177399 1.000000 1.000000 1.000000 +vn -0.197467 0.164529 -0.966404 +v -158.352432 -147.756546 18.941200 1.000000 1.000000 1.000000 +vn 0.039369 0.906662 -0.420016 +v -159.618027 -147.263992 19.628597 1.000000 1.000000 1.000000 +vn 0.341619 0.913634 -0.220383 +v -160.211563 -146.975159 20.141998 1.000000 1.000000 1.000000 +vn 0.316733 0.947796 0.036924 +v -160.197388 -146.922134 20.596798 1.000000 1.000000 1.000000 +vn 0.532716 0.845025 0.046339 +v -161.323944 -146.380737 20.828197 1.000000 1.000000 1.000000 +vn -0.212960 0.850322 -0.481249 +v -158.411652 -147.265381 19.411797 1.000000 1.000000 1.000000 +vn -0.052707 0.997678 -0.043141 +v -158.971710 -147.100739 20.364397 1.000000 1.000000 1.000000 +vn -0.191968 0.950981 -0.242452 +v -158.429688 -147.116089 19.809200 1.000000 1.000000 1.000000 +vn 0.551734 0.762777 0.337285 +v -161.417923 -146.542603 21.652599 1.000000 1.000000 1.000000 +vn 0.668689 0.600612 0.438316 +v -161.936783 -146.133774 21.768200 1.000000 1.000000 1.000000 +vn 0.774762 0.522881 0.355443 +v -162.396408 -145.650986 21.883400 1.000000 1.000000 1.000000 +vn 0.689361 0.724251 0.015542 +v -161.822205 -145.987259 20.943798 1.000000 1.000000 1.000000 +vn 0.680412 0.686647 -0.256038 +v -161.855667 -146.030518 20.488998 1.000000 1.000000 1.000000 +vn 0.818144 0.473183 0.326708 +v -162.789093 -145.102615 21.998798 1.000000 1.000000 1.000000 +vn -0.161833 0.065212 -0.984661 +v -155.786484 -146.539810 18.477997 1.000000 1.000000 1.000000 +vn -0.124290 0.282153 -0.951284 +v -163.140564 -138.838959 20.875000 1.000000 1.000000 1.000000 +vn 0.003562 0.297189 -0.954812 +v -161.439804 -137.308289 21.222198 1.000000 1.000000 1.000000 +vn 0.095440 0.296688 -0.950193 +v -160.045471 -136.772476 21.453598 1.000000 1.000000 1.000000 +vn 0.221814 0.229056 -0.947804 +v -157.912109 -136.783630 21.788200 1.000000 1.000000 1.000000 +vn 0.302126 0.122178 -0.945406 +v -155.899780 -137.757584 22.134197 1.000000 1.000000 1.000000 +vn 0.512758 0.447093 -0.732930 +v -155.754288 -137.542694 22.285198 1.000000 1.000000 1.000000 +vn 0.317970 0.002711 -0.948097 +v -154.429474 -139.547791 22.481400 1.000000 1.000000 1.000000 +vn 0.657243 0.218466 -0.721321 +v -154.215759 -139.415237 22.632397 1.000000 1.000000 1.000000 +vn 0.314702 -0.080921 -0.945735 +v -153.888733 -141.039413 22.712799 1.000000 1.000000 1.000000 +vn 0.554189 0.289054 -0.780591 +v -154.649628 -138.710602 22.515999 1.000000 1.000000 1.000000 +vn 0.692119 0.034871 -0.720941 +v -153.649261 -140.978012 22.863800 1.000000 1.000000 1.000000 +vn 0.249987 -0.194974 -0.948415 +v -153.825638 -143.350082 23.047398 1.000000 1.000000 1.000000 +vn 0.628619 -0.091730 -0.772285 +v -153.502487 -142.557526 23.082600 1.000000 1.000000 1.000000 +vn 0.902552 0.126284 -0.411645 +v -153.418808 -140.918015 23.208199 1.000000 1.000000 1.000000 +vn 0.845729 0.240112 -0.476539 +v -153.659561 -140.085007 23.093197 1.000000 1.000000 1.000000 +vn 0.650613 -0.226397 -0.724878 +v -153.583603 -143.396118 23.198399 1.000000 1.000000 1.000000 +vn 0.889228 -0.072412 -0.451697 +v -153.265594 -142.567307 23.426998 1.000000 1.000000 1.000000 +vn 0.974967 0.082531 -0.206463 +v -153.165161 -141.667313 23.703598 1.000000 1.000000 1.000000 +vn 0.937089 0.305694 -0.168566 +v -153.535965 -140.031982 23.486198 1.000000 1.000000 1.000000 +vn 0.817279 0.361471 -0.448768 +v -154.009766 -139.289658 22.976997 1.000000 1.000000 1.000000 +vn 0.882596 0.437583 -0.171890 +v -153.893890 -139.218491 23.369999 1.000000 1.000000 1.000000 +vn 0.958220 0.235670 0.162089 +v -153.277191 -140.881744 24.416798 1.000000 1.000000 1.000000 +vn 0.922888 0.355115 0.148897 +v -153.523087 -140.026382 24.301798 1.000000 1.000000 1.000000 +vn 0.984278 -0.051625 -0.168911 +v -153.132980 -142.571487 23.820198 1.000000 1.000000 1.000000 +vn 0.872112 -0.201318 -0.445973 +v -153.350571 -143.440781 23.542999 1.000000 1.000000 1.000000 +vn 0.820618 -0.312588 -0.478409 +v -153.546265 -144.287735 23.658001 1.000000 1.000000 1.000000 +vn 0.968752 -0.180517 -0.170095 +v -153.219254 -143.465897 23.935999 1.000000 1.000000 1.000000 +vn 0.936750 -0.305832 -0.170197 +v -153.420090 -144.332397 24.051197 1.000000 1.000000 1.000000 +vn 0.982481 0.114243 0.147242 +v -153.152298 -141.665909 24.518999 1.000000 1.000000 1.000000 +vn 0.878079 0.163723 0.449635 +v -153.302933 -141.684052 24.987398 1.000000 1.000000 1.000000 +vn 0.821188 0.345437 0.454230 +v -153.664703 -140.086395 24.769999 1.000000 1.000000 1.000000 +vn 0.989165 -0.010957 0.146398 +v -153.120117 -142.571487 24.635599 1.000000 1.000000 1.000000 +vn 0.896341 0.031182 0.442267 +v -153.270737 -142.565903 25.103998 1.000000 1.000000 1.000000 +vn 0.635885 0.171026 0.752596 +v -153.538544 -141.711960 25.325199 1.000000 1.000000 1.000000 +vn 0.594420 0.312332 0.741022 +v -153.884872 -140.181274 25.107798 1.000000 1.000000 1.000000 +vn 0.744615 0.461618 0.482138 +v -154.014908 -139.292450 24.653799 1.000000 1.000000 1.000000 +vn 0.440562 0.457075 0.772650 +v -154.653503 -138.714783 24.875198 1.000000 1.000000 1.000000 +vn 0.866160 0.476599 0.150400 +v -153.882309 -139.211517 24.185598 1.000000 1.000000 1.000000 +vn 0.687916 0.565647 0.454768 +v -154.465530 -138.557114 24.537399 1.000000 1.000000 1.000000 +vn 0.792653 0.590539 0.151542 +v -154.345795 -138.456635 24.068998 1.000000 1.000000 1.000000 +vn 0.586884 0.645769 0.488415 +v -155.002411 -137.905487 24.421997 1.000000 1.000000 1.000000 +vn 0.730019 0.660737 -0.174640 +v -154.905853 -137.796646 23.138199 1.000000 1.000000 1.000000 +vn 0.702543 0.694859 0.153638 +v -154.896835 -137.786880 23.953798 1.000000 1.000000 1.000000 +vn 0.814578 0.553417 -0.173760 +v -154.356094 -138.465012 23.253597 1.000000 1.000000 1.000000 +vn 0.759450 0.466691 -0.453250 +v -154.461670 -138.554321 22.860397 1.000000 1.000000 1.000000 +vn 0.628899 0.757296 -0.176035 +v -155.536713 -137.218994 23.022797 1.000000 1.000000 1.000000 +vn 0.678429 0.551874 -0.484943 +v -154.998550 -137.899902 22.745197 1.000000 1.000000 1.000000 +vn 0.596290 0.787765 0.154483 +v -155.528992 -137.207825 23.838398 1.000000 1.000000 1.000000 +vn 0.499875 0.733150 0.461103 +v -155.617828 -137.340378 24.306599 1.000000 1.000000 1.000000 +vn 0.513118 0.839593 -0.178308 +v -156.231949 -136.745956 22.908199 1.000000 1.000000 1.000000 +vn 0.598849 0.656213 -0.459090 +v -155.615250 -137.334793 22.629799 1.000000 1.000000 1.000000 +vn 0.497898 0.732795 -0.463798 +v -156.295044 -136.872940 22.514999 1.000000 1.000000 1.000000 +vn 0.475796 0.865561 0.156278 +v -156.225510 -136.733414 23.723799 1.000000 1.000000 1.000000 +vn 0.384122 0.905649 -0.179586 +v -156.991562 -136.377594 22.792000 1.000000 1.000000 1.000000 +vn 0.383258 0.482939 -0.787327 +v -156.407043 -137.098984 22.170597 1.000000 1.000000 1.000000 +vn 0.382551 0.779637 -0.495803 +v -157.037918 -136.512939 22.398800 1.000000 1.000000 1.000000 +vn 0.273664 0.611274 -0.742598 +v -157.861908 -136.522720 21.939198 1.000000 1.000000 1.000000 +vn 0.261447 0.843403 -0.469379 +v -157.811691 -136.271561 22.283798 1.000000 1.000000 1.000000 +vn 0.244490 0.952653 -0.180769 +v -157.784653 -136.130615 22.676800 1.000000 1.000000 1.000000 +vn 0.342601 0.926304 0.156798 +v -156.987701 -136.365036 23.607599 1.000000 1.000000 1.000000 +vn 0.200281 0.967000 0.157473 +v -157.782074 -136.116669 23.492397 1.000000 1.000000 1.000000 +vn 0.096107 0.978684 -0.181496 +v -158.606064 -136.006439 22.560999 1.000000 1.000000 1.000000 +vn 0.114876 0.870364 -0.478822 +v -158.615082 -136.150146 22.167797 1.000000 1.000000 1.000000 +vn 0.049512 0.986264 0.157583 +v -158.606064 -135.992477 23.376400 1.000000 1.000000 1.000000 +vn -0.096352 0.982825 0.157387 +v -159.442932 -135.996674 23.259800 1.000000 1.000000 1.000000 +vn -0.061566 0.973602 -0.219794 +v -159.441635 -136.010620 22.444395 1.000000 1.000000 1.000000 +vn 0.126375 0.857617 0.498521 +v -157.812973 -136.277130 23.960598 1.000000 1.000000 1.000000 +vn -0.002539 0.882816 0.469711 +v -158.616364 -136.155746 23.844801 1.000000 1.000000 1.000000 +vn -0.155335 0.866407 0.474563 +v -159.431335 -136.159927 23.728201 1.000000 1.000000 1.000000 +vn -0.237661 0.956099 0.171440 +v -160.169067 -136.104111 23.157597 1.000000 1.000000 1.000000 +vn -0.111598 0.891778 -0.438495 +v -160.140747 -136.258987 21.948997 1.000000 1.000000 1.000000 +vn -0.316501 0.931655 -0.178456 +v -160.962158 -136.355270 22.226997 1.000000 1.000000 1.000000 +vn -0.372926 0.914536 0.156682 +v -160.966019 -136.342712 23.042599 1.000000 1.000000 1.000000 +vn -0.359543 0.805013 0.471893 +v -160.915802 -136.497589 23.510799 1.000000 1.000000 1.000000 +vn -0.169271 0.616182 0.769199 +v -159.413315 -136.415268 24.065998 1.000000 1.000000 1.000000 +vn -0.325960 0.574101 0.751104 +v -160.837280 -136.738983 23.848598 1.000000 1.000000 1.000000 +vn -0.487352 0.722314 0.490664 +v -161.661255 -136.849228 23.394600 1.000000 1.000000 1.000000 +vn -0.463242 0.867837 -0.179624 +v -161.725632 -136.715271 22.110798 1.000000 1.000000 1.000000 +vn -0.504611 0.849276 0.155235 +v -161.730774 -136.704102 22.926399 1.000000 1.000000 1.000000 +vn -0.244388 0.830660 -0.500279 +v -160.918381 -136.492020 21.834000 1.000000 1.000000 1.000000 +vn -0.622852 0.767169 0.153319 +v -162.442749 -137.179916 22.809799 1.000000 1.000000 1.000000 +vn -0.378388 0.798574 -0.468083 +v -161.663834 -136.843628 21.717800 1.000000 1.000000 1.000000 +vn -0.585413 0.790823 -0.178577 +v -162.435028 -137.191071 21.994400 1.000000 1.000000 1.000000 +vn -0.593868 0.661439 0.458060 +v -162.353912 -137.312469 23.278198 1.000000 1.000000 1.000000 +vn -0.480359 0.422034 0.768858 +v -162.214874 -137.521774 23.615999 1.000000 1.000000 1.000000 +vn -0.674217 0.558441 0.483295 +v -162.974487 -137.871994 23.162800 1.000000 1.000000 1.000000 +vn -0.725285 0.671530 0.151690 +v -163.078781 -137.753387 22.694599 1.000000 1.000000 1.000000 +vn -0.756571 0.474361 0.450092 +v -163.515228 -138.519440 23.047398 1.000000 1.000000 1.000000 +vn -0.811368 0.564781 0.150682 +v -163.634964 -138.417572 22.579197 1.000000 1.000000 1.000000 +vn -0.070336 0.625175 0.777309 +v -158.631821 -136.412476 24.182598 1.000000 1.000000 1.000000 +vn 0.130211 0.612153 0.779945 +v -157.120316 -136.759918 24.413601 1.000000 1.000000 1.000000 +vn 0.327264 0.584455 0.742503 +v -155.758148 -137.546890 24.644398 1.000000 1.000000 1.000000 +vn 0.375329 0.783875 0.494639 +v -156.297623 -136.878525 24.191998 1.000000 1.000000 1.000000 +vn 0.263977 0.843919 0.467030 +v -157.039200 -136.518524 24.075798 1.000000 1.000000 1.000000 +vn -0.692008 0.700047 -0.176236 +v -163.069763 -137.763168 21.878998 1.000000 1.000000 1.000000 +vn -0.783023 0.597198 -0.173867 +v -163.624664 -138.427338 21.763599 1.000000 1.000000 1.000000 +vn -0.491946 0.736274 -0.464640 +v -162.356491 -137.308289 21.601200 1.000000 1.000000 1.000000 +vn -0.580389 0.650402 -0.490027 +v -162.978348 -137.867813 21.486000 1.000000 1.000000 1.000000 +vn -0.857700 0.484075 -0.173268 +v -164.085587 -139.164078 21.648998 1.000000 1.000000 1.000000 +vn -0.682721 0.570803 -0.456153 +v -163.520386 -138.515259 21.370598 1.000000 1.000000 1.000000 +vn -0.301919 0.531419 -0.791479 +v -162.218735 -137.516190 21.256798 1.000000 1.000000 1.000000 +vn -0.465834 0.490767 -0.736306 +v -163.333694 -138.674316 21.025997 1.000000 1.000000 1.000000 +vn -0.755654 0.472426 -0.453652 +v -163.969711 -139.236633 21.255798 1.000000 1.000000 1.000000 +vn -0.503172 0.364783 -0.783423 +v -163.764999 -139.365005 20.911400 1.000000 1.000000 1.000000 +vn -0.220147 0.633280 -0.741951 +v -161.553116 -137.071075 21.373199 1.000000 1.000000 1.000000 +vn -0.015658 0.665764 -0.745998 +v -160.093109 -136.511551 21.604597 1.000000 1.000000 1.000000 +vn 0.124963 0.602278 -0.788445 +v -158.631821 -136.405502 21.823399 1.000000 1.000000 1.000000 +vn 0.642282 -0.093578 0.760735 +v -153.776733 -144.206818 25.672798 1.000000 1.000000 1.000000 +vn 0.646672 0.086761 0.757818 +v -153.507645 -142.557526 25.441799 1.000000 1.000000 1.000000 +vn 0.877277 -0.081200 0.473066 +v -153.355713 -143.439392 25.219801 1.000000 1.000000 1.000000 +vn 0.628087 -0.276113 0.727509 +v -154.456512 -145.709595 25.903599 1.000000 1.000000 1.000000 +vn 0.824863 -0.305050 0.475968 +v -153.857834 -145.102615 25.451199 1.000000 1.000000 1.000000 +vn 0.873200 -0.202788 0.443169 +v -153.551422 -144.286346 25.334999 1.000000 1.000000 1.000000 +vn 0.952223 -0.267667 0.147059 +v -153.408508 -144.337982 24.866798 1.000000 1.000000 1.000000 +vn 0.978943 -0.141505 0.147126 +v -153.206375 -143.468689 24.751598 1.000000 1.000000 1.000000 +vn 0.908284 -0.391064 0.148623 +v -153.721375 -145.175171 24.982998 1.000000 1.000000 1.000000 +vn 0.887814 -0.426904 -0.171873 +v -153.732941 -145.168198 24.167398 1.000000 1.000000 1.000000 +vn 0.913201 -0.139517 -0.382882 +v -163.436691 -141.166382 21.004597 1.000000 1.000000 1.000000 +vn 0.733002 -0.175620 -0.657165 +v -163.459869 -140.408707 20.785000 1.000000 1.000000 1.000000 +vn 0.047993 0.268919 0.961966 +v -156.986420 -147.358871 21.359200 1.000000 1.000000 1.000000 +vn -0.035210 0.272093 0.961626 +v -155.778763 -146.549576 21.127399 1.000000 1.000000 1.000000 +vn -0.497155 0.461019 0.735050 +v -155.066788 -145.314713 20.751598 1.000000 1.000000 1.000000 +vn -0.697263 0.556324 0.452026 +v -155.259903 -145.169601 20.403999 1.000000 1.000000 1.000000 +vn -0.111668 0.252084 0.961241 +v -154.863358 -145.466797 20.906197 1.000000 1.000000 1.000000 +vn 0.258538 0.194150 0.946289 +v -153.927353 -140.803604 20.208199 1.000000 1.000000 1.000000 +vn 0.195548 0.249237 0.948494 +v -154.520889 -139.345474 20.003998 1.000000 1.000000 1.000000 +vn 0.119415 0.286645 0.950566 +v -155.442734 -138.139908 19.811199 1.000000 1.000000 1.000000 +vn 0.901113 0.062928 0.428994 +v -163.507507 -143.089157 42.627380 1.000000 1.000000 1.000000 +vn 0.939515 0.300823 0.163761 +v -163.192078 -143.731003 41.720577 1.000000 1.000000 1.000000 +vn 0.937024 -0.064717 0.343216 +v -163.557724 -142.378922 42.707779 1.000000 1.000000 1.000000 +vn 0.897514 0.227359 0.377858 +v -163.360733 -143.786819 42.544979 1.000000 1.000000 1.000000 +vn 0.764306 0.080055 0.639866 +v -163.740540 -143.126816 42.975178 1.000000 1.000000 1.000000 +vn 0.990133 0.140120 0.001867 +v -163.332413 -143.061249 41.803177 1.000000 1.000000 1.000000 +vn 0.844322 0.524815 -0.108119 +v -162.684814 -144.925415 41.556976 1.000000 1.000000 1.000000 +vn 0.957750 0.189242 -0.216570 +v -163.382614 -143.069626 41.348377 1.000000 1.000000 1.000000 +vn 0.835979 -0.189784 0.514899 +v -163.512650 -141.668701 42.785580 1.000000 1.000000 1.000000 +vn 0.770679 0.207914 0.602350 +v -163.358170 -144.516571 42.813980 1.000000 1.000000 1.000000 +vn 0.852403 -0.299218 0.428810 +v -163.376190 -140.983597 42.859779 1.000000 1.000000 1.000000 +vn 0.654733 0.500226 0.566656 +v -162.617859 -145.765411 42.640778 1.000000 1.000000 1.000000 +vn 0.817783 0.385580 0.427270 +v -162.832870 -145.028671 42.381180 1.000000 1.000000 1.000000 +vn 0.779533 0.626361 0.000140 +v -162.306290 -145.470978 41.468781 1.000000 1.000000 1.000000 +vn 0.738317 0.509989 0.441361 +v -162.440186 -145.597961 42.293179 1.000000 1.000000 1.000000 +vn 0.675726 0.737136 0.005026 +v -161.858246 -145.953766 41.378178 1.000000 1.000000 1.000000 +vn 0.493993 0.699009 0.517067 +v -161.571136 -146.739349 42.457378 1.000000 1.000000 1.000000 +vn 0.669737 0.619842 0.408959 +v -161.972824 -146.098892 42.202579 1.000000 1.000000 1.000000 +vn 0.538067 0.841506 0.048495 +v -161.349686 -146.361206 41.285378 1.000000 1.000000 1.000000 +vn 0.671508 0.695669 -0.255190 +v -161.891708 -145.995636 40.923378 1.000000 1.000000 1.000000 +vn 0.716925 0.628222 -0.302251 +v -162.344910 -145.508652 41.013977 1.000000 1.000000 1.000000 +vn 0.545757 0.718016 -0.431975 +v -161.981842 -146.110046 40.525978 1.000000 1.000000 1.000000 +vn 0.247568 0.935569 -0.251837 +v -160.228287 -146.970978 40.641579 1.000000 1.000000 1.000000 +vn 0.301689 0.951532 0.059745 +v -160.214127 -146.916550 41.096378 1.000000 1.000000 1.000000 +vn 0.555117 0.717852 0.420160 +v -161.444962 -146.523071 42.109779 1.000000 1.000000 1.000000 +vn 0.464468 0.781034 0.417439 +v -160.874619 -146.856552 42.016579 1.000000 1.000000 1.000000 +vn 0.298184 0.856350 0.421605 +v -160.263046 -147.102142 41.920578 1.000000 1.000000 1.000000 +vn 0.030676 0.998064 0.054103 +v -158.967850 -147.100739 40.896378 1.000000 1.000000 1.000000 +vn -0.017800 0.970179 -0.241737 +v -158.966568 -147.156540 40.441578 1.000000 1.000000 1.000000 +vn 0.299614 0.605350 0.737416 +v -160.328720 -147.347702 42.268181 1.000000 1.000000 1.000000 +vn 0.086167 0.901842 0.423386 +v -158.966568 -147.291901 41.720779 1.000000 1.000000 1.000000 +vn -0.218090 0.974397 0.054652 +v -158.200516 -147.021194 40.770378 1.000000 1.000000 1.000000 +vn -0.119201 0.914114 0.387540 +v -158.168320 -147.209564 41.594578 1.000000 1.000000 1.000000 +vn 0.109821 0.657406 0.745491 +v -158.963989 -147.548645 42.068378 1.000000 1.000000 1.000000 +vn -0.118555 0.663612 0.738623 +v -157.461502 -147.272354 41.837357 1.000000 1.000000 1.000000 +vn -0.306453 0.602648 0.736819 +v -156.237091 -146.594223 41.619957 1.000000 1.000000 1.000000 +vn -0.225649 0.862205 0.453525 +v -157.537460 -147.030975 41.489777 1.000000 1.000000 1.000000 +vn -0.401200 0.826604 0.394671 +v -156.933624 -146.753296 41.382179 1.000000 1.000000 1.000000 +vn -0.020941 0.268724 0.962990 +v -156.094193 -146.811905 41.774578 1.000000 1.000000 1.000000 +vn -0.127040 0.227363 0.965488 +v -154.513168 -144.830521 41.389977 1.000000 1.000000 1.000000 +vn -0.717946 0.610526 0.334382 +v -155.517395 -145.917496 41.464977 1.000000 1.000000 1.000000 +vn -0.576806 0.396327 0.714297 +v -154.733322 -144.709137 41.235378 1.000000 1.000000 1.000000 +vn -0.232435 0.165776 0.958380 +v -153.973709 -142.617523 41.043777 1.000000 1.000000 1.000000 +vn -0.687127 0.158362 0.709068 +v -154.219620 -142.604980 40.889179 1.000000 1.000000 1.000000 +vn -0.270267 0.084943 0.959031 +v -154.106323 -141.088242 40.812378 1.000000 1.000000 1.000000 +vn -0.290719 -0.010820 0.956747 +v -154.974091 -139.084549 40.477779 1.000000 1.000000 1.000000 +vn -0.607902 0.647989 0.458875 +v -155.688644 -145.743073 41.117378 1.000000 1.000000 1.000000 +vn -0.721553 0.558708 0.408909 +v -155.276642 -145.194702 41.003178 1.000000 1.000000 1.000000 +vn -0.412143 0.708290 0.573117 +v -156.372284 -146.386337 41.272377 1.000000 1.000000 1.000000 +vn -0.708527 0.705101 -0.028656 +v -155.991196 -145.800278 40.337177 1.000000 1.000000 1.000000 +vn -0.500908 0.863814 0.053996 +v -157.013458 -146.583069 40.557777 1.000000 1.000000 1.000000 +vn -0.703872 0.673410 0.226014 +v -155.785202 -145.645401 40.723579 1.000000 1.000000 1.000000 +vn -0.910407 0.413588 -0.010232 +v -155.100266 -144.506821 40.063377 1.000000 1.000000 1.000000 +vn -0.958488 0.281267 0.046789 +v -154.859497 -143.887283 39.947178 1.000000 1.000000 1.000000 +vn -0.895716 0.308504 0.320186 +v -154.692123 -143.948685 40.771580 1.000000 1.000000 1.000000 +vn -0.775752 0.458220 0.433871 +v -154.943176 -144.593323 40.887779 1.000000 1.000000 1.000000 +vn -0.854630 0.508246 -0.106269 +v -155.422134 -145.084473 40.178780 1.000000 1.000000 1.000000 +vn -0.237563 0.938197 -0.251695 +v -158.191498 -147.075623 40.315578 1.000000 1.000000 1.000000 +vn -0.388779 0.810891 -0.437386 +v -157.532303 -147.044922 39.813179 1.000000 1.000000 1.000000 +vn -0.240631 0.839019 -0.488000 +v -158.165741 -147.223526 39.917976 1.000000 1.000000 1.000000 +vn -0.057008 0.868682 -0.492079 +v -158.965271 -147.307251 40.044178 1.000000 1.000000 1.000000 +vn 0.155014 0.858711 -0.488453 +v -160.266922 -147.116089 40.243980 1.000000 1.000000 1.000000 +vn 0.057234 0.561373 -0.825581 +v -160.332581 -147.363052 39.909180 1.000000 1.000000 1.000000 +vn -0.275469 0.607862 -0.744729 +v -158.121979 -147.477478 39.583378 1.000000 1.000000 1.000000 +vn -0.124556 0.782465 -0.610111 +v -158.963989 -147.565384 39.709377 1.000000 1.000000 1.000000 +vn -0.420051 0.457632 -0.783665 +v -156.819046 -146.996078 39.370781 1.000000 1.000000 1.000000 +vn -0.001995 0.250132 -0.968210 +v -161.067719 -147.322601 39.869377 1.000000 1.000000 1.000000 +vn 0.363105 0.644882 -0.672519 +v -161.580139 -146.753296 40.098377 1.000000 1.000000 1.000000 +vn 0.143332 0.315758 -0.937951 +v -162.795532 -145.931442 40.145981 1.000000 1.000000 1.000000 +vn 0.587806 0.294864 -0.753352 +v -163.601486 -143.864960 40.533577 1.000000 1.000000 1.000000 +vn 0.817059 0.377382 -0.435887 +v -163.156021 -144.416107 40.789780 1.000000 1.000000 1.000000 +vn 0.880416 0.184206 -0.436962 +v -163.520386 -143.091949 40.950779 1.000000 1.000000 1.000000 +vn 0.620591 0.099803 -0.777757 +v -163.810059 -142.380325 40.696381 1.000000 1.000000 1.000000 +vn 0.927229 -0.109347 -0.358176 +v -163.526825 -141.665909 41.108978 1.000000 1.000000 1.000000 +vn 0.983736 0.066507 -0.166854 +v -163.432831 -142.377533 41.428577 1.000000 1.000000 1.000000 +vn 0.187536 0.005238 -0.982244 +v -163.978729 -141.597549 40.638378 1.000000 1.000000 1.000000 +vn 0.647835 -0.189951 -0.737718 +v -163.374893 -140.200806 40.921978 1.000000 1.000000 1.000000 +vn -0.229794 0.228605 -0.946010 +v -163.421249 -139.271530 40.852978 1.000000 1.000000 1.000000 +vn 0.346893 -0.037549 -0.937153 +v -163.574463 -140.103134 40.785980 1.000000 1.000000 1.000000 +vn 0.774283 -0.303208 -0.555473 +v -163.158600 -140.308258 41.256779 1.000000 1.000000 1.000000 +vn 0.654781 -0.408729 -0.635769 +v -162.623001 -138.932449 41.063778 1.000000 1.000000 1.000000 +vn 0.225215 -0.114477 -0.967560 +v -162.272812 -138.222229 40.995579 1.000000 1.000000 1.000000 +vn -0.110621 0.262277 -0.958631 +v -162.424728 -138.031067 40.990578 1.000000 1.000000 1.000000 +vn -0.023159 0.313174 -0.949413 +v -160.442017 -136.877121 41.178379 1.000000 1.000000 1.000000 +vn 0.214110 -0.228541 -0.949698 +v -161.063858 -137.390610 41.122379 1.000000 1.000000 1.000000 +vn 0.081960 0.262915 -0.961332 +v -158.930511 -136.659454 41.294579 1.000000 1.000000 1.000000 +vn 0.080368 -0.193248 -0.977853 +v -158.933090 -136.913406 41.299580 1.000000 1.000000 1.000000 +vn 0.151737 0.250877 -0.956053 +v -157.447327 -136.914795 41.400578 1.000000 1.000000 1.000000 +vn 0.155544 0.118713 -0.980670 +v -156.061996 -137.633392 41.499977 1.000000 1.000000 1.000000 +vn 0.425939 0.516692 -0.742702 +v -155.924240 -137.412933 41.650978 1.000000 1.000000 1.000000 +vn 0.220736 0.132800 -0.966250 +v -154.979233 -138.688263 41.586178 1.000000 1.000000 1.000000 +vn 0.557172 0.384422 -0.736057 +v -154.789963 -138.516647 41.737179 1.000000 1.000000 1.000000 +vn -0.146928 -0.100086 -0.984071 +v -155.158188 -138.851532 41.591377 1.000000 1.000000 1.000000 +vn -0.371577 -0.474642 -0.797900 +v -155.813522 -138.460831 41.682777 1.000000 1.000000 1.000000 +vn 0.624989 0.609874 -0.487280 +v -155.191666 -137.701767 42.037376 1.000000 1.000000 1.000000 +vn 0.663287 0.197881 -0.721730 +v -153.954407 -139.981735 41.818977 1.000000 1.000000 1.000000 +vn 0.287677 0.055626 -0.956111 +v -154.180984 -140.087799 41.667976 1.000000 1.000000 1.000000 +vn 0.716431 0.528172 -0.455808 +v -154.608429 -138.350601 42.081779 1.000000 1.000000 1.000000 +vn 0.771456 0.414162 -0.483038 +v -154.119202 -139.085938 42.123978 1.000000 1.000000 1.000000 +vn 0.288878 -0.037994 -0.956612 +v -153.745819 -142.360794 41.768978 1.000000 1.000000 1.000000 +vn -0.222511 -0.142796 -0.964416 +v -154.394714 -140.188248 41.673180 1.000000 1.000000 1.000000 +vn 0.684187 -0.027290 -0.728796 +v -153.498627 -142.360794 41.919979 1.000000 1.000000 1.000000 +vn 0.113300 -0.728593 -0.675511 +v -154.150101 -144.960297 41.896378 1.000000 1.000000 1.000000 +vn -0.212619 -0.038670 -0.976370 +v -153.978867 -142.360794 41.773979 1.000000 1.000000 1.000000 +vn 0.610280 -0.153340 -0.777204 +v -153.681442 -143.891464 41.974960 1.000000 1.000000 1.000000 +vn -0.458376 -0.520113 -0.720676 +v -154.468094 -144.795654 41.874977 1.000000 1.000000 1.000000 +vn 0.896806 -0.042729 -0.440355 +v -153.261734 -142.360794 42.264580 1.000000 1.000000 1.000000 +vn 0.857303 0.298077 -0.419740 +v -153.736801 -139.878494 42.163578 1.000000 1.000000 1.000000 +vn 0.828927 0.124616 -0.545299 +v -153.323532 -141.444061 42.230179 1.000000 1.000000 1.000000 +vn 0.870149 -0.215221 -0.443306 +v -153.452286 -143.957047 42.319378 1.000000 1.000000 1.000000 +vn 0.949396 -0.228744 -0.215231 +v -153.323532 -143.993332 42.712578 1.000000 1.000000 1.000000 +vn 0.341632 -0.904224 -0.256254 +v -153.766418 -145.175171 42.640179 1.000000 1.000000 1.000000 +vn 0.984036 -0.022167 -0.176585 +v -153.129120 -142.360794 42.657578 1.000000 1.000000 1.000000 +vn 0.972644 0.107450 -0.205954 +v -153.192215 -141.423126 42.623177 1.000000 1.000000 1.000000 +vn 0.933613 0.264845 -0.241297 +v -153.354431 -140.606842 42.590778 1.000000 1.000000 1.000000 +vn 0.864563 0.471510 -0.173808 +v -154.005890 -139.010590 42.517178 1.000000 1.000000 1.000000 +vn 0.779620 0.592683 -0.202283 +v -154.506729 -138.257111 42.474979 1.000000 1.000000 1.000000 +vn 0.688860 0.696237 -0.201804 +v -155.104126 -137.594330 42.430580 1.000000 1.000000 1.000000 +vn 0.582905 0.789281 -0.193024 +v -155.716949 -137.080841 42.388580 1.000000 1.000000 1.000000 +vn 0.453535 0.879147 0.146307 +v -156.446960 -136.568756 42.745377 1.000000 1.000000 1.000000 +vn 0.539050 0.703694 -0.462861 +v -155.791626 -137.199448 41.995579 1.000000 1.000000 1.000000 +vn 0.459026 0.857561 -0.232131 +v -156.467560 -136.616211 42.339779 1.000000 1.000000 1.000000 +vn 0.424951 0.756659 -0.496874 +v -156.524200 -136.745956 41.946777 1.000000 1.000000 1.000000 +vn 0.323000 0.917132 -0.233537 +v -157.264511 -136.277130 42.289177 1.000000 1.000000 1.000000 +vn 0.340600 0.939430 0.038233 +v -157.250351 -136.226898 42.694580 1.000000 1.000000 1.000000 +vn 0.308176 0.827828 -0.468752 +v -157.303131 -136.413879 41.895981 1.000000 1.000000 1.000000 +vn 0.177359 0.955614 -0.235258 +v -158.096222 -136.067825 42.236378 1.000000 1.000000 1.000000 +vn 0.255596 0.611737 -0.748631 +v -157.373947 -136.659454 41.551579 1.000000 1.000000 1.000000 +vn 0.176329 0.847215 -0.501134 +v -158.116821 -136.210159 41.843178 1.000000 1.000000 1.000000 +vn 0.074245 0.660725 -0.746947 +v -158.926651 -136.392944 41.445580 1.000000 1.000000 1.000000 +vn 0.028574 0.971526 -0.235204 +v -158.921494 -135.992477 42.183178 1.000000 1.000000 1.000000 +vn 0.172199 0.982885 -0.065462 +v -158.089783 -136.016205 42.641777 1.000000 1.000000 1.000000 +vn 0.043155 0.880522 -0.472036 +v -158.924072 -136.136200 41.790176 1.000000 1.000000 1.000000 +vn -0.121703 0.964338 -0.235032 +v -159.776382 -136.046906 42.126179 1.000000 1.000000 1.000000 +vn -0.010489 0.999671 0.023412 +v -158.921494 -135.940857 42.588779 1.000000 1.000000 1.000000 +vn -0.144192 0.988294 0.049831 +v -159.781525 -135.995270 42.531776 1.000000 1.000000 1.000000 +vn -0.276579 0.944566 -0.176913 +v -160.611969 -136.233887 42.067177 1.000000 1.000000 1.000000 +vn -0.092744 0.876362 -0.472640 +v -159.758362 -136.189224 41.733177 1.000000 1.000000 1.000000 +vn -0.045007 0.644547 -0.763239 +v -159.727463 -136.444580 41.388580 1.000000 1.000000 1.000000 +vn -0.220994 0.835609 -0.502911 +v -160.574631 -136.373413 41.673981 1.000000 1.000000 1.000000 +vn -0.226899 0.564082 -0.793932 +v -161.260849 -136.917587 41.268181 1.000000 1.000000 1.000000 +vn -0.410243 0.881864 -0.232414 +v -161.412781 -136.550613 42.005779 1.000000 1.000000 1.000000 +vn -0.355440 0.808153 -0.469629 +v -161.358704 -136.683182 41.612778 1.000000 1.000000 1.000000 +vn -0.393546 0.540602 -0.743553 +v -162.585663 -137.827347 41.141579 1.000000 1.000000 1.000000 +vn -0.461927 0.735083 -0.496263 +v -162.089996 -137.111542 41.549580 1.000000 1.000000 1.000000 +vn -0.669701 0.584426 -0.458199 +v -163.328552 -138.265488 41.418381 1.000000 1.000000 1.000000 +vn -0.577434 0.673597 -0.461343 +v -162.740173 -137.632004 41.485977 1.000000 1.000000 1.000000 +vn -0.476931 0.453220 -0.753080 +v -163.149582 -138.434311 41.073978 1.000000 1.000000 1.000000 +vn -0.653116 0.739467 -0.163185 +v -162.826431 -137.523163 41.879177 1.000000 1.000000 1.000000 +vn -0.565461 0.811495 -0.147408 +v -162.162094 -136.988754 41.942780 1.000000 1.000000 1.000000 +vn -0.444417 0.894992 0.038511 +v -161.432083 -136.504578 42.411377 1.000000 1.000000 1.000000 +vn -0.656055 0.733974 0.175709 +v -162.834152 -137.512009 42.694580 1.000000 1.000000 1.000000 +vn -0.758999 0.627376 -0.174127 +v -163.428970 -138.170609 41.811577 1.000000 1.000000 1.000000 +vn -0.768813 0.618837 0.161145 +v -163.437988 -138.162231 42.627178 1.000000 1.000000 1.000000 +vn -0.839837 0.514819 -0.172150 +v -163.938812 -138.908737 41.741577 1.000000 1.000000 1.000000 +vn -0.858545 0.488637 0.155350 +v -163.950409 -138.901749 42.557178 1.000000 1.000000 1.000000 +vn -0.731956 0.478351 -0.485202 +v -163.828094 -138.986877 41.348579 1.000000 1.000000 1.000000 +vn -0.553287 0.285194 -0.782648 +v -164.010910 -139.888260 40.931976 1.000000 1.000000 1.000000 +vn 0.943966 -0.245669 -0.220399 +v -163.255157 -141.021271 41.580578 1.000000 1.000000 1.000000 +vn 0.992766 0.038867 -0.113602 +v -163.381332 -142.377533 41.883377 1.000000 1.000000 1.000000 +vn 0.988772 -0.124177 0.083127 +v -163.337555 -141.695221 41.961178 1.000000 1.000000 1.000000 +vn -0.104321 0.865168 -0.490511 +v -162.629440 -145.776566 40.281776 1.000000 1.000000 1.000000 +vn 0.335928 0.758887 -0.557892 +v -160.879761 -146.870514 40.339977 1.000000 1.000000 1.000000 +vn -0.579690 0.678762 -0.450824 +v -156.364563 -146.397491 39.595779 1.000000 1.000000 1.000000 +vn -0.553528 0.416630 -0.721128 +v -155.696365 -146.136566 39.150177 1.000000 1.000000 1.000000 +vn -0.711194 0.535501 -0.455457 +v -155.679626 -145.752838 39.440781 1.000000 1.000000 1.000000 +vn -0.732446 0.632991 -0.250690 +v -155.780045 -145.649597 39.838181 1.000000 1.000000 1.000000 +vn -0.713154 0.301429 -0.632892 +v -155.070648 -145.352386 38.991779 1.000000 1.000000 1.000000 +vn -0.799135 0.408485 -0.441048 +v -155.266342 -145.203094 39.326576 1.000000 1.000000 1.000000 +vn -0.865360 0.190882 -0.463375 +v -154.679245 -143.952866 39.094978 1.000000 1.000000 1.000000 +vn -0.946615 0.240707 -0.214429 +v -154.810562 -143.904037 39.492378 1.000000 1.000000 1.000000 +vn -0.674789 0.088179 -0.732724 +v -154.453949 -144.036575 38.760178 1.000000 1.000000 1.000000 +vn -0.796016 -0.383277 -0.468462 +v -154.792542 -144.622635 42.119778 1.000000 1.000000 1.000000 +vn -0.925946 -0.332225 -0.179584 +v -155.004974 -144.508209 42.600380 1.000000 1.000000 1.000000 +vn 0.120558 -0.241400 0.962908 +v -163.351715 -139.603607 28.566399 1.000000 1.000000 1.000000 +vn -0.336241 0.024735 0.941451 +v -163.559006 -139.472443 28.562599 1.000000 1.000000 1.000000 +vn -0.358243 -0.099166 0.928347 +v -164.249084 -141.749634 28.216599 1.000000 1.000000 1.000000 +vn 0.013823 -0.265475 0.964019 +v -161.922607 -137.909668 28.913601 1.000000 1.000000 1.000000 +vn -0.647489 0.053011 0.760229 +v -164.335358 -140.899872 28.191198 1.000000 1.000000 1.000000 +vn -0.080220 -0.261149 0.961960 +v -160.663467 -137.205032 29.144798 1.000000 1.000000 1.000000 +vn -0.179063 -0.203794 0.962499 +v -158.639542 -136.913406 29.479597 1.000000 1.000000 1.000000 +vn -0.251233 -0.118531 0.960642 +v -156.611755 -137.553864 29.825598 1.000000 1.000000 1.000000 +vn -0.450227 -0.524808 0.722407 +v -156.728928 -137.789673 29.670998 1.000000 1.000000 1.000000 +vn -0.622219 -0.312747 0.717658 +v -155.198105 -139.205933 30.018198 1.000000 1.000000 1.000000 +vn -0.690255 -0.092854 0.717584 +v -154.538910 -140.481277 30.249399 1.000000 1.000000 1.000000 +vn -0.881148 -0.184545 0.435341 +v -154.759079 -140.573364 29.901798 1.000000 1.000000 1.000000 +vn -0.844969 -0.351666 0.402938 +v -155.030731 -139.945465 29.786598 1.000000 1.000000 1.000000 +vn -0.949917 -0.089460 0.299424 +v -154.473251 -141.850098 30.120598 1.000000 1.000000 1.000000 +vn -0.813564 -0.581438 0.006583 +v -155.525116 -139.478027 28.846201 1.000000 1.000000 1.000000 +vn -0.893342 -0.448137 0.033367 +v -155.185226 -140.038956 28.962399 1.000000 1.000000 1.000000 +vn -0.783399 -0.445671 0.433202 +v -155.384796 -139.362213 29.670597 1.000000 1.000000 1.000000 +vn -0.714784 -0.699275 0.009885 +v -155.937119 -138.972916 28.729799 1.000000 1.000000 1.000000 +vn -0.796363 -0.562201 -0.223017 +v -155.485214 -139.444534 28.391399 1.000000 1.000000 1.000000 +vn -0.902818 -0.361542 -0.232823 +v -154.876236 -140.622192 28.622799 1.000000 1.000000 1.000000 +vn -0.966011 -0.258394 0.007398 +v -154.757797 -141.205444 29.179798 1.000000 1.000000 1.000000 +vn -0.895483 0.111403 0.430929 +v -154.452652 -142.547760 30.236597 1.000000 1.000000 1.000000 +vn -0.920307 0.222548 0.321726 +v -154.523453 -143.235657 30.351599 1.000000 1.000000 1.000000 +vn -0.995710 -0.092210 -0.007653 +v -154.649628 -141.869629 29.296398 1.000000 1.000000 1.000000 +vn -0.923627 -0.035160 -0.381678 +v -154.439774 -142.547760 28.559998 1.000000 1.000000 1.000000 +vn -0.699689 -0.243381 -0.671715 +v -154.343216 -141.093826 27.992598 1.000000 1.000000 1.000000 +vn -0.822920 -0.136721 -0.551462 +v -154.460373 -141.848709 28.443998 1.000000 1.000000 1.000000 +vn -0.755216 0.034456 -0.654570 +v -154.274979 -143.284500 28.340399 1.000000 1.000000 1.000000 +vn -0.887890 0.188144 -0.419826 +v -154.668961 -143.917984 28.791199 1.000000 1.000000 1.000000 +vn -0.215765 -0.149027 -0.965006 +v -153.982727 -142.567307 28.089199 1.000000 1.000000 1.000000 +vn -0.917703 0.286541 -0.275164 +v -154.801559 -143.870544 29.188799 1.000000 1.000000 1.000000 +vn -0.805986 -0.377624 -0.455836 +v -154.746201 -140.567780 28.225199 1.000000 1.000000 1.000000 +vn -0.172804 -0.217953 -0.960539 +v -154.320038 -140.389175 27.754599 1.000000 1.000000 1.000000 +vn -0.551053 -0.417134 -0.722731 +v -154.810562 -139.812897 27.775398 1.000000 1.000000 1.000000 +vn -0.693015 -0.562803 -0.450537 +v -155.374481 -139.352448 27.993799 1.000000 1.000000 1.000000 +vn -0.095197 -0.255982 -0.961983 +v -155.011429 -139.052444 27.523199 1.000000 1.000000 1.000000 +vn -0.444077 -0.611397 -0.654973 +v -155.637131 -138.642227 27.542599 1.000000 1.000000 1.000000 +vn -0.575744 -0.689416 -0.439572 +v -155.804504 -138.826416 27.877398 1.000000 1.000000 1.000000 +vn -0.480674 -0.844384 -0.236577 +v -156.901443 -138.134323 28.044197 1.000000 1.000000 1.000000 +vn -0.394128 -0.780266 -0.485642 +v -156.834488 -138.001770 27.646799 1.000000 1.000000 1.000000 +vn -0.223614 -0.622322 -0.750141 +v -156.722473 -137.774323 27.311998 1.000000 1.000000 1.000000 +vn -0.362334 -0.885603 -0.290553 +v -157.465363 -137.858047 27.929598 1.000000 1.000000 1.000000 +vn -0.244468 -0.861964 -0.444131 +v -157.417725 -137.717117 27.531998 1.000000 1.000000 1.000000 +vn -0.517077 -0.854489 0.049794 +v -156.925903 -138.183151 28.498999 1.000000 1.000000 1.000000 +vn -0.706490 -0.625512 0.331071 +v -155.813522 -138.836166 29.553999 1.000000 1.000000 1.000000 +vn -0.514333 -0.747501 0.420362 +v -156.840927 -138.014328 29.323399 1.000000 1.000000 1.000000 +vn -0.205815 -0.977179 0.052554 +v -158.078201 -137.721313 28.268198 1.000000 1.000000 1.000000 +vn -0.657160 -0.663841 0.357011 +v -156.300186 -138.386871 29.438599 1.000000 1.000000 1.000000 +vn -0.288953 -0.894100 0.342185 +v -158.040863 -137.534332 29.092398 1.000000 1.000000 1.000000 +vn 0.068385 -0.997624 -0.008390 +v -159.305176 -137.625031 28.036999 1.000000 1.000000 1.000000 +vn -0.398266 -0.840322 0.367754 +v -157.421585 -137.729675 29.208599 1.000000 1.000000 1.000000 +vn -0.178341 -0.656816 0.732658 +v -158.657562 -137.179916 29.324999 1.000000 1.000000 1.000000 +vn 0.080155 -0.663924 0.743492 +v -160.582352 -137.457581 28.990198 1.000000 1.000000 1.000000 +vn 0.181880 -0.868256 0.461575 +v -160.505096 -137.698975 28.642599 1.000000 1.000000 1.000000 +vn 0.324894 -0.597691 0.732946 +v -161.779709 -138.127335 28.758999 1.000000 1.000000 1.000000 +vn 0.368316 -0.828012 0.422776 +v -161.092194 -137.972473 28.527399 1.000000 1.000000 1.000000 +vn 0.470700 -0.760282 0.447676 +v -161.643234 -138.336639 28.411198 1.000000 1.000000 1.000000 +vn 0.655977 -0.677607 0.332480 +v -162.141479 -138.781754 28.294798 1.000000 1.000000 1.000000 +vn 0.693016 -0.626968 0.355866 +v -162.574081 -139.295242 28.179398 1.000000 1.000000 1.000000 +vn 0.731948 -0.681297 0.009321 +v -162.020462 -138.921280 27.470398 1.000000 1.000000 1.000000 +vn 0.771638 -0.486590 0.409639 +v -162.935867 -139.867325 28.064198 1.000000 1.000000 1.000000 +vn 0.616038 -0.787700 0.005109 +v -161.540237 -138.491531 27.586998 1.000000 1.000000 1.000000 +vn 0.594918 -0.770857 -0.227710 +v -161.571136 -138.446884 27.132198 1.000000 1.000000 1.000000 +vn 0.475117 -0.879303 0.033009 +v -161.011078 -138.142685 27.703199 1.000000 1.000000 1.000000 +vn 0.068059 -0.943369 0.324688 +v -159.318054 -137.433868 28.861399 1.000000 1.000000 1.000000 +vn 0.263899 -0.964531 0.006130 +v -159.921875 -137.719910 27.920597 1.000000 1.000000 1.000000 +vn 0.379867 -0.892178 -0.244375 +v -160.463898 -137.827347 27.363598 1.000000 1.000000 1.000000 +vn -0.158744 -0.875190 0.456993 +v -158.674301 -137.435257 28.977198 1.000000 1.000000 1.000000 +vn 0.009081 -0.911571 -0.411042 +v -158.673004 -137.421310 27.300798 1.000000 1.000000 1.000000 +vn 0.394671 -0.786174 -0.475569 +v -160.508957 -137.685028 26.965998 1.000000 1.000000 1.000000 +vn 0.128159 -0.805659 -0.578351 +v -159.318054 -137.419907 27.184799 1.000000 1.000000 1.000000 +vn 0.247155 -0.675021 -0.695170 +v -160.010712 -137.266418 26.733398 1.000000 1.000000 1.000000 +vn -0.063758 -0.726141 -0.684583 +v -157.988068 -137.267822 27.080999 1.000000 1.000000 1.000000 +vn 0.435800 -0.526817 -0.729755 +v -161.208069 -137.729675 26.516199 1.000000 1.000000 1.000000 +vn 0.590207 -0.666985 -0.454739 +v -161.650955 -138.324097 26.734598 1.000000 1.000000 1.000000 +vn 0.716044 -0.547756 -0.432716 +v -162.151794 -138.771988 26.618198 1.000000 1.000000 1.000000 +vn -0.843495 0.251611 0.474562 +v -164.310898 -140.001282 27.969599 1.000000 1.000000 1.000000 +vn -0.884502 0.147515 0.442601 +v -164.564529 -140.837082 27.853399 1.000000 1.000000 1.000000 +vn -0.880818 0.025453 0.472770 +v -164.707443 -141.696609 27.738199 1.000000 1.000000 1.000000 +vn -0.640196 -0.127115 0.757622 +v -164.500153 -142.564499 27.960199 1.000000 1.000000 1.000000 +vn -0.967241 0.206804 0.147229 +v -164.711304 -140.796616 27.385199 1.000000 1.000000 1.000000 +vn -0.985962 0.078926 0.147140 +v -164.858063 -141.678467 27.269999 1.000000 1.000000 1.000000 +vn -0.892435 -0.087571 0.442597 +v -164.735764 -142.574280 27.622398 1.000000 1.000000 1.000000 +vn -0.623001 -0.210733 0.753301 +v -164.416473 -143.407288 27.843599 1.000000 1.000000 1.000000 +vn -0.280618 -0.220793 0.934079 +v -164.040527 -144.057510 27.881798 1.000000 1.000000 1.000000 +vn -0.865550 -0.218796 0.450502 +v -164.649506 -143.451935 27.505798 1.000000 1.000000 1.000000 +vn -0.571496 -0.349838 0.742298 +v -163.973572 -144.908661 27.626198 1.000000 1.000000 1.000000 +vn -0.987734 -0.051160 0.147524 +v -164.887695 -142.579849 27.153999 1.000000 1.000000 1.000000 +vn -0.973253 -0.176028 0.147623 +v -164.798859 -143.481247 27.037399 1.000000 1.000000 1.000000 +vn -0.940989 -0.296576 0.163040 +v -164.625031 -144.254257 26.935198 1.000000 1.000000 1.000000 +vn -0.796480 -0.397632 0.455532 +v -164.187302 -145.018890 27.288399 1.000000 1.000000 1.000000 +vn -0.985583 -0.010596 -0.168859 +v -164.874802 -142.579849 26.338598 1.000000 1.000000 1.000000 +vn -0.967622 -0.143943 -0.207338 +v -164.785965 -143.478455 26.221998 1.000000 1.000000 1.000000 +vn -0.915241 -0.365551 -0.169431 +v -164.313477 -145.083084 26.004599 1.000000 1.000000 1.000000 +vn -0.897649 -0.414413 0.149960 +v -164.325058 -145.088669 26.820198 1.000000 1.000000 1.000000 +vn -0.711854 -0.509429 0.483473 +v -163.788177 -145.786331 27.172199 1.000000 1.000000 1.000000 +vn -0.832969 -0.532394 0.150731 +v -163.915634 -145.875626 26.703999 1.000000 1.000000 1.000000 +vn -0.851723 -0.494864 -0.172274 +v -163.904053 -145.868652 25.888399 1.000000 1.000000 1.000000 +vn -0.827765 -0.293474 -0.478203 +v -164.192444 -145.021683 25.611597 1.000000 1.000000 1.000000 +vn -0.892347 -0.182779 -0.412684 +v -164.484711 -144.206818 25.726599 1.000000 1.000000 1.000000 +vn -0.791133 -0.413380 -0.450806 +v -163.793335 -145.789124 25.495398 1.000000 1.000000 1.000000 +vn -0.775573 -0.606957 -0.173465 +v -163.395493 -146.584457 25.771999 1.000000 1.000000 1.000000 +vn -0.751104 -0.642497 0.151792 +v -163.405792 -146.594223 26.587399 1.000000 1.000000 1.000000 +vn -0.647685 -0.610422 0.455948 +v -163.292496 -146.485397 27.055798 1.000000 1.000000 1.000000 +vn -0.683620 -0.708687 -0.174434 +v -162.804550 -147.210968 25.656601 1.000000 1.000000 1.000000 +vn -0.653343 -0.741285 0.153751 +v -162.813553 -147.222137 26.472198 1.000000 1.000000 1.000000 +vn -0.540143 -0.684449 0.489668 +v -162.715714 -147.096542 26.940399 1.000000 1.000000 1.000000 +vn -0.726610 -0.516008 -0.453623 +v -163.296356 -146.489578 25.378798 1.000000 1.000000 1.000000 +vn -0.640578 -0.259135 -0.722848 +v -163.595062 -145.646805 25.150799 1.000000 1.000000 1.000000 +vn -0.532779 -0.323686 -0.781904 +v -163.118683 -146.319351 25.034401 1.000000 1.000000 1.000000 +vn -0.638848 -0.596437 -0.485938 +v -162.719574 -147.102142 25.263599 1.000000 1.000000 1.000000 +vn -0.574633 -0.798909 -0.177597 +v -162.140198 -147.741196 25.541199 1.000000 1.000000 1.000000 +vn -0.479929 -0.479523 -0.734660 +v -161.941925 -147.402130 24.803598 1.000000 1.000000 1.000000 +vn -0.551096 -0.695047 -0.461740 +v -162.068100 -147.619797 25.148199 1.000000 1.000000 1.000000 +vn -0.347587 -0.506830 -0.788864 +v -161.263428 -147.796997 24.688999 1.000000 1.000000 1.000000 +vn -0.444874 -0.765164 -0.465415 +v -161.361282 -148.031433 25.033398 1.000000 1.000000 1.000000 +vn -0.451919 -0.874070 -0.178244 +v -161.415344 -148.162582 25.426598 1.000000 1.000000 1.000000 +vn -0.539634 -0.827383 0.155669 +v -162.146637 -147.753754 26.356798 1.000000 1.000000 1.000000 +vn -0.411784 -0.897774 0.156320 +v -161.420502 -148.175140 26.242199 1.000000 1.000000 1.000000 +vn -0.274372 -0.948620 0.157605 +v -160.637711 -148.486298 26.125998 1.000000 1.000000 1.000000 +vn -0.317133 -0.931255 -0.179416 +v -160.635132 -148.473740 25.310398 1.000000 1.000000 1.000000 +vn -0.324740 -0.804676 -0.497032 +v -160.597794 -148.335602 24.917398 1.000000 1.000000 1.000000 +vn -0.174040 -0.967997 -0.180811 +v -159.827881 -148.660721 25.195198 1.000000 1.000000 1.000000 +vn -0.201629 -0.860857 0.467194 +v -160.596512 -148.328629 26.594198 1.000000 1.000000 1.000000 +vn -0.062619 -0.864787 0.498220 +v -159.808578 -148.512817 26.478998 1.000000 1.000000 1.000000 +vn -0.128894 -0.979068 0.157521 +v -159.830460 -148.674683 26.010799 1.000000 1.000000 1.000000 +vn -0.317481 -0.808683 0.495214 +v -161.358704 -148.025833 26.710398 1.000000 1.000000 1.000000 +vn -0.084783 -0.620132 0.779903 +v -160.530853 -148.083054 26.931999 1.000000 1.000000 1.000000 +vn 0.067641 -0.880179 0.469798 +v -159.000031 -148.574219 26.363199 1.000000 1.000000 1.000000 +vn 0.116939 -0.618946 0.776679 +v -159.000031 -148.317459 26.700998 1.000000 1.000000 1.000000 +vn -0.024442 -0.983123 -0.181305 +v -159.000031 -148.724899 25.079399 1.000000 1.000000 1.000000 +vn 0.022567 -0.987105 0.158474 +v -159.000031 -148.738861 25.894798 1.000000 1.000000 1.000000 +vn 0.218772 -0.852522 0.474705 +v -158.187637 -148.510025 26.246599 1.000000 1.000000 1.000000 +vn 0.214468 -0.602877 0.768468 +v -158.221100 -148.256073 26.584398 1.000000 1.000000 1.000000 +vn 0.094679 -0.342538 0.934721 +v -159.744202 -148.018875 26.957399 1.000000 1.000000 1.000000 +vn 0.366740 -0.550393 0.750046 +v -156.821625 -147.827713 26.366999 1.000000 1.000000 1.000000 +vn -0.042887 -0.313223 0.948711 +v -161.819611 -147.192825 27.303398 1.000000 1.000000 1.000000 +vn 0.509339 -0.389997 0.767122 +v -155.495514 -146.945862 26.134399 1.000000 1.000000 1.000000 +vn 0.537275 -0.686946 0.489326 +v -156.006638 -147.657471 25.912998 1.000000 1.000000 1.000000 +vn 0.638598 -0.620074 0.455743 +v -155.344879 -147.143997 25.796598 1.000000 1.000000 1.000000 +vn 0.710938 -0.512697 0.481362 +v -154.760361 -146.539810 25.681198 1.000000 1.000000 1.000000 +vn 0.416578 -0.777506 0.471112 +v -156.727631 -148.063522 26.029198 1.000000 1.000000 1.000000 +vn 0.437368 -0.885650 0.155991 +v -156.667114 -148.214218 25.560999 1.000000 1.000000 1.000000 +vn 0.563664 -0.811386 0.154713 +v -155.926819 -147.796997 25.444799 1.000000 1.000000 1.000000 +vn 0.674693 -0.722106 0.152815 +v -155.247025 -147.269577 25.328199 1.000000 1.000000 1.000000 +vn 0.523798 -0.832950 -0.178412 +v -155.933258 -147.785843 24.629198 1.000000 1.000000 1.000000 +vn 0.307493 -0.936038 0.171119 +v -157.447327 -148.510025 25.675999 1.000000 1.000000 1.000000 +vn 0.383121 -0.906415 -0.177848 +v -156.672272 -148.201645 24.745398 1.000000 1.000000 1.000000 +vn 0.304384 -0.811630 -0.498605 +v -156.725067 -148.069092 24.352398 1.000000 1.000000 1.000000 +vn 0.434879 -0.770397 -0.466228 +v -156.002777 -147.663055 24.236198 1.000000 1.000000 1.000000 +vn 0.639556 -0.747991 -0.177421 +v -155.256042 -147.259811 24.512798 1.000000 1.000000 1.000000 +vn 0.737987 -0.651741 -0.174954 +v -154.658646 -146.640274 24.397398 1.000000 1.000000 1.000000 +vn 0.769068 -0.621154 0.150672 +v -154.648346 -146.650040 25.212999 1.000000 1.000000 1.000000 +vn 0.543217 -0.700236 -0.463233 +v -155.341019 -147.148178 24.119598 1.000000 1.000000 1.000000 +vn 0.265948 -0.616745 -0.740876 +v -156.127670 -147.443985 23.891598 1.000000 1.000000 1.000000 +vn 0.339551 -0.509434 -0.790685 +v -155.491653 -146.950043 23.775198 1.000000 1.000000 1.000000 +vn 0.624310 -0.610045 -0.487937 +v -154.756500 -146.544006 24.004398 1.000000 1.000000 1.000000 +vn 0.821215 -0.543757 -0.173017 +v -154.146225 -145.938431 24.281998 1.000000 1.000000 1.000000 +vn 0.499171 -0.459039 -0.734923 +v -154.452652 -145.712387 23.544399 1.000000 1.000000 1.000000 +vn 0.719764 -0.524188 -0.455155 +v -154.255661 -145.857498 23.888998 1.000000 1.000000 1.000000 +vn 0.018271 -0.296689 -0.954799 +v -156.256409 -147.216553 23.740599 1.000000 1.000000 1.000000 +vn 0.144397 -0.273534 -0.950962 +v -154.656082 -145.563080 23.393398 1.000000 1.000000 1.000000 +vn 0.527061 -0.331219 -0.782624 +v -154.065125 -144.990997 23.429798 1.000000 1.000000 1.000000 +vn 0.785756 -0.422236 -0.452000 +v -153.852692 -145.105408 23.774199 1.000000 1.000000 1.000000 +vn -0.073444 -0.300795 -0.950857 +v -157.613419 -147.852814 23.971998 1.000000 1.000000 1.000000 +vn -0.227983 -0.627478 -0.744510 +v -159.776382 -148.264450 24.457598 1.000000 1.000000 1.000000 +vn -0.079764 -0.607914 -0.789986 +v -159.000031 -148.323059 24.341799 1.000000 1.000000 1.000000 +vn -0.198943 -0.860129 -0.469681 +v -159.809860 -148.518402 24.802198 1.000000 1.000000 1.000000 +vn -0.050443 -0.875623 -0.480354 +v -159.000031 -148.581192 24.686199 1.000000 1.000000 1.000000 +vn 0.176666 -0.881349 -0.438192 +v -157.485962 -148.357925 24.467398 1.000000 1.000000 1.000000 +vn 0.133892 -0.966190 -0.220339 +v -158.167038 -148.659332 24.962799 1.000000 1.000000 1.000000 +vn 0.064356 -0.663312 -0.745570 +v -157.549042 -148.110962 24.122999 1.000000 1.000000 1.000000 +vn 0.169652 -0.972723 0.158200 +v -158.165741 -148.673279 25.778198 1.000000 1.000000 1.000000 +vn 0.847018 -0.509976 0.149947 +v -154.135941 -145.946793 25.097601 1.000000 1.000000 1.000000 +vn 0.786865 -0.424161 0.448253 +v -154.260818 -145.853302 25.565798 1.000000 1.000000 1.000000 +vn -0.210939 -0.292299 0.932773 +v -163.404510 -145.510056 27.650599 1.000000 1.000000 1.000000 +vn -0.406960 -0.484970 0.774072 +v -163.114822 -146.315170 27.393599 1.000000 1.000000 1.000000 +vn -0.284080 -0.604973 0.743845 +v -161.939346 -147.397949 27.162798 1.000000 1.000000 1.000000 +vn -0.446608 -0.765579 0.463065 +v -162.065521 -147.614227 26.824999 1.000000 1.000000 1.000000 +vn -0.688562 -0.078815 -0.720882 +v -164.259399 -144.131470 25.382198 1.000000 1.000000 1.000000 +vn -0.633587 0.052011 -0.771921 +v -164.505310 -142.565903 25.600998 1.000000 1.000000 1.000000 +vn -0.892082 0.015917 -0.451594 +v -164.742203 -142.574280 25.945398 1.000000 1.000000 1.000000 +vn -0.883238 0.146063 -0.445596 +v -164.712585 -141.695221 26.061398 1.000000 1.000000 1.000000 +vn -0.978248 0.119096 -0.169844 +v -164.845200 -141.679871 26.454399 1.000000 1.000000 1.000000 +vn -0.954272 0.245688 -0.170304 +v -164.698425 -140.800797 26.569599 1.000000 1.000000 1.000000 +vn -0.087015 -0.729844 -0.678053 +v -158.262314 -137.212006 41.488579 1.000000 1.000000 1.000000 +vn -0.243280 -0.846482 -0.473585 +v -157.650757 -137.629211 41.876179 1.000000 1.000000 1.000000 +vn 0.025623 -0.910457 -0.412809 +v -158.939514 -137.408737 41.770180 1.000000 1.000000 1.000000 +vn -0.200073 -0.564522 -0.800803 +v -156.928482 -137.659897 41.592178 1.000000 1.000000 1.000000 +vn 0.243410 -0.697104 -0.674387 +v -160.318420 -137.348740 41.319378 1.000000 1.000000 1.000000 +vn -0.508440 -0.730502 -0.455911 +v -156.448242 -138.254318 41.975777 1.000000 1.000000 1.000000 +vn -0.602941 -0.293004 -0.742031 +v -154.595551 -140.283142 41.808979 1.000000 1.000000 1.000000 +vn -0.718159 -0.575321 -0.391476 +v -155.507095 -139.169662 42.061977 1.000000 1.000000 1.000000 +vn -0.285927 -0.933193 -0.217707 +v -157.691956 -137.772934 42.273579 1.000000 1.000000 1.000000 +vn -0.745654 -0.635011 -0.201893 +v -155.613953 -139.267334 42.459377 1.000000 1.000000 1.000000 +vn -0.458195 -0.888488 -0.025409 +v -157.113876 -138.078506 42.779179 1.000000 1.000000 1.000000 +vn -0.774971 -0.311676 -0.549798 +v -154.814438 -140.384995 42.143780 1.000000 1.000000 1.000000 +vn -0.857276 -0.482532 -0.179558 +v -155.236725 -139.833847 42.501778 1.000000 1.000000 1.000000 +vn -0.639509 -0.762341 0.099319 +v -156.098053 -138.808273 42.869778 1.000000 1.000000 1.000000 +vn -0.315790 -0.944244 -0.093167 +v -157.707397 -137.825958 42.728378 1.000000 1.000000 1.000000 +vn -0.898091 -0.174241 -0.403823 +v -154.484833 -141.631027 42.210381 1.000000 1.000000 1.000000 +vn -0.751652 -0.151723 -0.641872 +v -154.249222 -141.593353 41.875580 1.000000 1.000000 1.000000 +vn -0.926404 0.028482 -0.375452 +v -154.435913 -142.359390 42.244579 1.000000 1.000000 1.000000 +vn -0.765359 0.138300 -0.628569 +v -154.357376 -143.696121 41.964779 1.000000 1.000000 1.000000 +vn -0.971620 0.045176 -0.232194 +v -154.574966 -142.359390 42.642178 1.000000 1.000000 1.000000 +vn -0.866696 0.185055 -0.463241 +v -154.587845 -143.630539 42.299580 1.000000 1.000000 1.000000 +vn -0.945694 0.208435 -0.249436 +v -154.721741 -143.591461 42.696980 1.000000 1.000000 1.000000 +vn -0.163065 -0.986365 0.022234 +v -158.327972 -137.671066 42.675579 1.000000 1.000000 1.000000 +vn 0.114064 -0.993473 -0.000097 +v -159.579407 -137.654327 42.565578 1.000000 1.000000 1.000000 +vn -0.020019 -0.965142 -0.260961 +v -158.942108 -137.559448 42.167778 1.000000 1.000000 1.000000 +vn 0.333304 -0.942008 0.039118 +v -160.201248 -137.795258 42.506378 1.000000 1.000000 1.000000 +vn 0.101738 -0.959271 -0.263531 +v -159.585846 -137.599899 42.110779 1.000000 1.000000 1.000000 +vn 0.559400 -0.826845 0.058294 +v -161.357422 -138.357574 42.381977 1.000000 1.000000 1.000000 +vn 0.554976 -0.802129 -0.220434 +v -161.384445 -138.310135 41.927177 1.000000 1.000000 1.000000 +vn 0.155674 -0.908401 -0.388037 +v -159.603867 -137.450607 41.713379 1.000000 1.000000 1.000000 +vn 0.375842 -0.738711 -0.559507 +v -160.877182 -137.842697 41.592979 1.000000 1.000000 1.000000 +vn 0.438399 -0.520368 -0.732819 +v -161.586578 -137.965485 41.194977 1.000000 1.000000 1.000000 +vn 0.632221 -0.644538 -0.429961 +v -161.975403 -138.598969 41.466179 1.000000 1.000000 1.000000 +vn 0.789352 -0.608320 -0.082883 +v -162.301132 -139.238037 42.250977 1.000000 1.000000 1.000000 +vn 0.735123 -0.505022 -0.452268 +v -162.444046 -139.102692 41.398579 1.000000 1.000000 1.000000 +vn 0.767623 -0.597430 -0.232019 +v -162.339767 -139.201752 41.796181 1.000000 1.000000 1.000000 +vn 0.864557 -0.501820 -0.026799 +v -162.680954 -139.787796 42.180977 1.000000 1.000000 1.000000 +vn 0.929998 -0.366870 0.022578 +v -162.986084 -140.393356 42.108978 1.000000 1.000000 1.000000 +vn 0.652261 0.087287 0.752952 +v -153.506363 -142.358002 20.276600 1.000000 1.000000 1.000000 +vn 0.874030 -0.184907 0.449312 +v -153.573303 -144.358902 20.197399 1.000000 1.000000 1.000000 +vn 0.634457 0.260153 0.727863 +v -153.712357 -140.738007 20.067600 1.000000 1.000000 1.000000 +vn 0.890961 0.032764 0.452896 +v -153.269455 -142.358002 19.938795 1.000000 1.000000 1.000000 +vn 0.865140 0.167490 0.472736 +v -153.323532 -141.502655 19.833000 1.000000 1.000000 1.000000 +vn 0.539459 0.412137 0.734253 +v -154.331635 -139.218491 19.863598 1.000000 1.000000 1.000000 +vn 0.851145 0.276654 0.446111 +v -153.484467 -140.668259 19.729797 1.000000 1.000000 1.000000 +vn 0.790812 0.381872 0.478320 +v -153.752258 -139.858963 19.627800 1.000000 1.000000 1.000000 +vn 0.982521 0.141654 0.120779 +v -153.172897 -141.480331 19.364799 1.000000 1.000000 1.000000 +vn 0.988928 0.017325 0.147378 +v -153.117538 -142.358002 19.470398 1.000000 1.000000 1.000000 +vn 0.973953 -0.108311 0.199211 +v -153.174179 -143.242630 19.578800 1.000000 1.000000 1.000000 +vn 0.985657 -0.001895 -0.168749 +v -153.130417 -142.358002 18.654999 1.000000 1.000000 1.000000 +vn 0.962911 0.212564 -0.166192 +v -153.350571 -140.627792 18.445999 1.000000 1.000000 1.000000 +vn 0.952342 0.266412 0.148557 +v -153.337692 -140.623596 19.261597 1.000000 1.000000 1.000000 +vn 0.912825 0.370975 -0.170672 +v -153.624802 -139.798950 18.343998 1.000000 1.000000 1.000000 +vn 0.909091 0.388968 0.149186 +v -153.613220 -139.793365 19.159397 1.000000 1.000000 1.000000 +vn 0.877746 0.174476 -0.446230 +v -153.478027 -140.666855 18.052998 1.000000 1.000000 1.000000 +vn 0.895060 0.040915 -0.444066 +v -153.317093 -141.501266 18.155998 1.000000 1.000000 1.000000 +vn 0.681442 0.072355 -0.728287 +v -153.707199 -140.736618 17.708397 1.000000 1.000000 1.000000 +vn 0.832838 0.278195 -0.478528 +v -153.747116 -139.856171 17.950798 1.000000 1.000000 1.000000 +vn 0.857030 -0.046693 -0.513147 +v -153.263016 -142.358002 18.261799 1.000000 1.000000 1.000000 +vn 0.869779 -0.196726 -0.452530 +v -153.318375 -143.220306 18.370197 1.000000 1.000000 1.000000 +vn 0.972856 -0.151671 -0.174776 +v -153.185776 -143.241241 18.763199 1.000000 1.000000 1.000000 +vn 0.945636 -0.258741 0.197040 +v -153.429108 -144.411926 19.729000 1.000000 1.000000 1.000000 +vn 0.632802 0.259920 -0.729385 +v -154.326477 -139.215714 17.504398 1.000000 1.000000 1.000000 +vn 0.819017 0.440152 -0.368073 +v -154.124344 -139.080368 17.848797 1.000000 1.000000 1.000000 +vn 0.546599 0.409813 -0.730262 +v -155.288223 -137.957123 17.311398 1.000000 1.000000 1.000000 +vn 0.766260 0.502346 -0.400617 +v -154.587845 -138.382690 17.750999 1.000000 1.000000 1.000000 +vn 0.848773 0.517036 0.110717 +v -154.000748 -138.996628 19.057400 1.000000 1.000000 1.000000 +vn 0.720561 0.672052 -0.170701 +v -155.038452 -137.661301 18.049000 1.000000 1.000000 1.000000 +vn 0.788815 0.604620 0.110480 +v -154.475830 -138.282227 18.959599 1.000000 1.000000 1.000000 +vn 0.661852 0.593947 -0.457360 +v -155.127289 -137.767349 17.655998 1.000000 1.000000 1.000000 +vn 0.747036 0.487573 0.451896 +v -154.129486 -139.083145 19.525799 1.000000 1.000000 1.000000 +vn 0.660606 0.574547 0.483213 +v -154.591690 -138.386871 19.427799 1.000000 1.000000 1.000000 +vn 0.683213 0.714170 0.152257 +v -155.029449 -137.651535 18.864597 1.000000 1.000000 1.000000 +vn 0.587576 0.666767 0.458451 +v -155.131149 -137.771530 19.332798 1.000000 1.000000 1.000000 +vn 0.610423 0.770297 -0.184461 +v -155.670609 -137.115723 17.955200 1.000000 1.000000 1.000000 +vn 0.562434 0.683278 -0.465618 +v -155.746567 -137.234329 17.562199 1.000000 1.000000 1.000000 +vn 0.453873 0.860296 -0.232140 +v -156.377441 -136.665039 17.862198 1.000000 1.000000 1.000000 +vn 0.458087 0.888769 -0.015682 +v -156.356842 -136.618988 18.267799 1.000000 1.000000 1.000000 +vn 0.576816 0.800915 0.160680 +v -155.664169 -137.104568 18.770798 1.000000 1.000000 1.000000 +vn 0.475433 0.730573 0.490130 +v -155.749146 -137.238525 19.238998 1.000000 1.000000 1.000000 +vn 0.405658 0.534974 0.741110 +v -155.292084 -137.961304 19.670597 1.000000 1.000000 1.000000 +vn 0.370998 0.808967 0.455997 +v -156.439240 -136.798981 19.146000 1.000000 1.000000 1.000000 +vn 0.240234 0.607945 0.756763 +v -156.546097 -137.027832 19.483797 1.000000 1.000000 1.000000 +vn 0.371577 0.909494 0.186418 +v -156.737930 -136.471085 18.632999 1.000000 1.000000 1.000000 +vn 0.097993 0.645316 0.757604 +v -157.604401 -136.595261 19.349998 1.000000 1.000000 1.000000 +vn 0.201865 0.858353 0.471678 +v -157.545181 -136.348297 19.012199 1.000000 1.000000 1.000000 +vn -0.111117 0.617496 0.778686 +v -159.091446 -136.398529 19.179199 1.000000 1.000000 1.000000 +vn 0.061744 0.865798 0.496570 +v -158.312515 -136.187820 18.925999 1.000000 1.000000 1.000000 +vn -0.356891 0.523823 0.773459 +v -161.313629 -136.951080 18.933399 1.000000 1.000000 1.000000 +vn -0.537134 0.663433 0.520907 +v -162.098999 -137.125504 18.518997 1.000000 1.000000 1.000000 +vn -0.768578 0.425316 0.477906 +v -163.776596 -138.917099 18.298798 1.000000 1.000000 1.000000 +vn -0.600500 0.605205 0.522615 +v -162.722137 -137.623642 18.445000 1.000000 1.000000 1.000000 +vn -0.714018 0.534054 0.452730 +v -163.283478 -138.220825 18.371799 1.000000 1.000000 1.000000 +vn -0.772668 0.616427 0.151667 +v -163.396790 -138.112000 17.903599 1.000000 1.000000 1.000000 +vn -0.848689 0.507163 0.150045 +v -163.902756 -138.826416 17.830597 1.000000 1.000000 1.000000 +vn -0.679951 0.717295 0.152165 +v -162.819992 -137.499451 17.976597 1.000000 1.000000 1.000000 +vn -0.574192 0.807210 0.136804 +v -162.181396 -136.987366 18.050598 1.000000 1.000000 1.000000 +vn -0.634366 0.750823 -0.183971 +v -162.810974 -137.509216 17.161198 1.000000 1.000000 1.000000 +vn -0.453657 0.877414 0.156014 +v -161.477142 -136.570145 18.127399 1.000000 1.000000 1.000000 +vn -0.443796 0.876033 -0.188711 +v -161.472000 -136.582718 17.311798 1.000000 1.000000 1.000000 +vn -0.752110 0.635488 -0.174600 +v -163.387772 -138.120361 17.087997 1.000000 1.000000 1.000000 +vn -0.549283 0.687766 -0.474621 +v -162.725998 -137.619446 16.767998 1.000000 1.000000 1.000000 +vn -0.826802 0.519875 -0.214778 +v -163.892456 -138.833389 17.014999 1.000000 1.000000 1.000000 +vn -0.654150 0.576308 -0.489855 +v -163.288635 -138.216644 16.695000 1.000000 1.000000 1.000000 +vn -0.472165 0.284255 -0.834422 +v -163.770157 -139.239426 16.326797 1.000000 1.000000 1.000000 +vn -0.288963 0.331239 -0.898210 +v -162.760773 -138.112000 16.326797 1.000000 1.000000 1.000000 +vn -0.328917 0.618222 -0.713874 +v -161.974121 -137.336197 16.497597 1.000000 1.000000 1.000000 +vn -0.070119 0.252800 -0.964974 +v -161.841507 -137.560837 16.346600 1.000000 1.000000 1.000000 +vn -0.367808 0.790395 -0.489891 +v -161.415344 -136.713882 16.918800 1.000000 1.000000 1.000000 +vn -0.120330 0.646437 -0.753419 +v -160.591370 -136.648285 16.655399 1.000000 1.000000 1.000000 +vn 0.025912 0.292840 -0.955810 +v -160.520554 -136.903641 16.504398 1.000000 1.000000 1.000000 +vn -0.230286 0.851569 -0.470954 +v -160.659607 -136.402710 16.999798 1.000000 1.000000 1.000000 +vn -0.289310 0.939892 -0.181392 +v -160.698227 -136.264572 17.392998 1.000000 1.000000 1.000000 +vn -0.095003 0.860356 -0.500761 +v -159.885818 -136.210159 17.081200 1.000000 1.000000 1.000000 +vn 0.051033 0.602379 -0.796577 +v -159.091446 -136.392944 16.820000 1.000000 1.000000 1.000000 +vn 0.151665 0.246941 -0.957088 +v -158.370468 -136.701309 16.753597 1.000000 1.000000 1.000000 +vn -0.146542 0.972383 -0.181649 +v -159.906418 -136.067825 17.474400 1.000000 1.000000 1.000000 +vn 0.033967 0.880688 -0.472477 +v -159.095306 -136.136200 17.164600 1.000000 1.000000 1.000000 +vn -0.321884 0.933719 0.156717 +v -160.702087 -136.250626 18.208397 1.000000 1.000000 1.000000 +vn -0.180228 0.970825 0.158167 +v -159.907715 -136.053879 18.289799 1.000000 1.000000 1.000000 +vn -0.034077 0.986937 0.157462 +v -159.097885 -135.978531 18.373199 1.000000 1.000000 1.000000 +vn 0.001270 0.983374 -0.181586 +v -159.096588 -135.992477 17.557598 1.000000 1.000000 1.000000 +vn 0.165610 0.866324 -0.471229 +v -158.311234 -136.180847 17.248997 1.000000 1.000000 1.000000 +vn 0.182798 0.642097 -0.744511 +v -158.340851 -136.436203 16.904598 1.000000 1.000000 1.000000 +vn 0.228200 0.206428 -0.951479 +v -156.979980 -137.100388 16.928799 1.000000 1.000000 1.000000 +vn 0.357596 0.566638 -0.742325 +v -156.884705 -136.853409 17.079800 1.000000 1.000000 1.000000 +vn 0.307481 0.854698 -0.418266 +v -157.543884 -136.341309 17.335400 1.000000 1.000000 1.000000 +vn 0.169631 0.969522 -0.176783 +v -158.295776 -136.038528 17.642197 1.000000 1.000000 1.000000 +vn 0.113217 0.980943 0.157904 +v -158.294495 -136.024582 18.457600 1.000000 1.000000 1.000000 +vn 0.265555 0.956435 0.121296 +v -157.506561 -136.189224 18.543999 1.000000 1.000000 1.000000 +vn 0.408608 0.800861 -0.437792 +v -156.794571 -136.616211 17.424400 1.000000 1.000000 1.000000 +vn -0.065279 0.880747 0.469067 +v -159.095306 -136.141785 18.841400 1.000000 1.000000 1.000000 +vn -0.210922 0.820783 0.530874 +v -159.884537 -136.217133 18.758198 1.000000 1.000000 1.000000 +vn -0.297340 0.792055 0.533140 +v -160.658310 -136.408295 18.676800 1.000000 1.000000 1.000000 +vn -0.434780 0.772289 0.463181 +v -161.412781 -136.719452 18.595798 1.000000 1.000000 1.000000 +vn 0.427667 0.459483 -0.778445 +v -155.880463 -137.445023 17.217598 1.000000 1.000000 1.000000 +vn -0.208657 -0.177478 0.961750 +v -157.896667 -137.033401 39.899178 1.000000 1.000000 1.000000 +vn -0.113936 -0.242797 0.963363 +v -160.008133 -137.009689 39.553177 1.000000 1.000000 1.000000 +vn -0.264479 -0.092393 0.959955 +v -155.974457 -137.997574 40.246380 1.000000 1.000000 1.000000 +vn -0.513082 -0.461038 0.724010 +v -156.123810 -138.211060 40.091778 1.000000 1.000000 1.000000 +vn -0.641030 -0.263450 0.720885 +v -155.171066 -139.245010 40.323177 1.000000 1.000000 1.000000 +vn -0.699594 -0.053001 0.712572 +v -154.345795 -141.149628 40.657780 1.000000 1.000000 1.000000 +vn -0.803079 -0.401722 0.440096 +v -155.360321 -139.398499 39.975380 1.000000 1.000000 1.000000 +vn -0.721446 -0.558289 0.409669 +v -155.778763 -138.873856 39.860378 1.000000 1.000000 1.000000 +vn -0.904075 0.251427 0.345589 +v -154.529907 -143.277527 40.656178 1.000000 1.000000 1.000000 +vn -0.910300 0.098489 0.402061 +v -154.455231 -142.592407 40.541378 1.000000 1.000000 1.000000 +vn -0.918610 -0.001145 0.395164 +v -154.470673 -141.893356 40.425377 1.000000 1.000000 1.000000 +vn -0.997315 0.048661 0.054722 +v -154.631607 -142.582642 39.717178 1.000000 1.000000 1.000000 +vn -0.980474 -0.193548 0.034781 +v -154.747482 -141.254288 39.485779 1.000000 1.000000 1.000000 +vn -0.904804 -0.138482 0.402681 +v -154.574966 -141.209641 40.310181 1.000000 1.000000 1.000000 +vn -0.863633 -0.502523 -0.040113 +v -155.201965 -140.006851 39.253380 1.000000 1.000000 1.000000 +vn -0.964010 -0.166462 -0.207306 +v -154.697266 -141.241730 39.030979 1.000000 1.000000 1.000000 +vn -0.831334 -0.389284 -0.396664 +v -154.755203 -140.538483 38.517578 1.000000 1.000000 1.000000 +vn -0.895984 -0.325356 0.302253 +v -154.768082 -140.544067 40.194180 1.000000 1.000000 1.000000 +vn -0.744112 -0.667250 0.032782 +v -155.903641 -139.009201 39.035980 1.000000 1.000000 1.000000 +vn -0.626384 -0.779497 0.005248 +v -156.371002 -138.568268 38.919777 1.000000 1.000000 1.000000 +vn -0.769643 -0.594208 -0.233595 +v -155.460754 -139.479416 38.696381 1.000000 1.000000 1.000000 +vn -0.614913 -0.754893 -0.228075 +v -156.340103 -138.523621 38.464981 1.000000 1.000000 1.000000 +vn -0.675161 -0.573860 -0.463511 +v -155.350037 -139.388733 38.298779 1.000000 1.000000 1.000000 +vn -0.512011 -0.726650 -0.458067 +v -156.256409 -138.403625 38.067581 1.000000 1.000000 1.000000 +vn -0.358627 -0.819756 -0.446527 +v -156.802307 -138.021301 37.950981 1.000000 1.000000 1.000000 +vn -0.494267 -0.869255 0.009851 +v -156.893723 -138.202682 38.803379 1.000000 1.000000 1.000000 +vn -0.634787 -0.634942 0.440334 +v -156.265427 -138.414780 39.744179 1.000000 1.000000 1.000000 +vn -0.507335 -0.793205 0.336804 +v -156.808746 -138.033859 39.627579 1.000000 1.000000 1.000000 +vn -0.251782 -0.966499 0.049847 +v -158.042145 -137.729675 38.572578 1.000000 1.000000 1.000000 +vn -0.218842 -0.945907 -0.239518 +v -158.030563 -137.675262 38.117779 1.000000 1.000000 1.000000 +vn -0.282563 -0.623961 0.728581 +v -157.950729 -137.292938 39.744579 1.000000 1.000000 1.000000 +vn -0.446587 -0.817404 0.363883 +v -157.389404 -137.743637 39.512379 1.000000 1.000000 1.000000 +vn -0.280211 -0.859867 0.426744 +v -158.003525 -137.542694 39.396980 1.000000 1.000000 1.000000 +vn -0.138993 -0.917352 0.373023 +v -158.633102 -137.439438 39.282181 1.000000 1.000000 1.000000 +vn -0.017614 -0.938066 0.346009 +v -159.278122 -137.432480 39.166176 1.000000 1.000000 1.000000 +vn 0.020255 -0.678730 0.734109 +v -159.959198 -137.270599 39.398579 1.000000 1.000000 1.000000 +vn 0.087488 -0.994845 0.051270 +v -159.266541 -137.623642 38.341778 1.000000 1.000000 1.000000 +vn 0.355448 -0.934658 -0.008449 +v -160.472916 -137.888748 38.110779 1.000000 1.000000 1.000000 +vn 0.102560 -0.882946 0.458135 +v -159.911575 -137.521774 39.050980 1.000000 1.000000 1.000000 +vn -0.090371 -0.951343 -0.294585 +v -158.642120 -137.574799 38.003178 1.000000 1.000000 1.000000 +vn 0.016029 -0.894885 -0.446009 +v -158.631821 -137.424088 37.605778 1.000000 1.000000 1.000000 +vn 0.272847 -0.871112 -0.408312 +v -159.914154 -137.507828 37.374378 1.000000 1.000000 1.000000 +vn 0.526911 -0.849896 0.006395 +v -161.041977 -138.160828 37.994179 1.000000 1.000000 1.000000 +vn 0.337022 -0.884265 0.323252 +v -160.532135 -137.708740 38.934978 1.000000 1.000000 1.000000 +vn 0.700814 -0.712591 0.032777 +v -161.987000 -138.885010 37.776779 1.000000 1.000000 1.000000 +vn 0.615031 -0.750984 -0.240333 +v -161.537659 -138.421768 37.437180 1.000000 1.000000 1.000000 +vn 0.424332 -0.782241 0.456115 +v -161.609756 -138.310135 38.716179 1.000000 1.000000 1.000000 +vn 0.782575 -0.581195 -0.223135 +v -162.449203 -139.342682 37.205780 1.000000 1.000000 1.000000 +vn 0.806658 -0.590996 0.005143 +v -162.409286 -139.377563 37.660576 1.000000 1.000000 1.000000 +vn 0.587400 -0.694431 0.415605 +v -162.106735 -138.745468 38.601181 1.000000 1.000000 1.000000 +vn 0.269968 -0.616887 0.739302 +v -161.743652 -138.100830 39.063980 1.000000 1.000000 1.000000 +vn 0.664086 -0.604158 0.440435 +v -162.547043 -139.257568 38.484978 1.000000 1.000000 1.000000 +vn 0.482587 -0.489842 0.726061 +v -162.729858 -139.095703 38.832581 1.000000 1.000000 1.000000 +vn -0.001063 -0.272511 0.962152 +v -161.885284 -137.881775 39.218578 1.000000 1.000000 1.000000 +vn 0.091252 -0.252421 0.963305 +v -162.921707 -138.928268 38.987179 1.000000 1.000000 1.000000 +vn 0.813511 -0.480155 0.328102 +v -162.915268 -139.832443 38.368378 1.000000 1.000000 1.000000 +vn 0.750752 -0.486635 -0.446719 +v -162.557343 -139.247787 36.808380 1.000000 1.000000 1.000000 +vn 0.600577 -0.648705 -0.467428 +v -161.617477 -138.298965 37.039581 1.000000 1.000000 1.000000 +vn 0.355268 -0.737333 -0.574565 +v -160.535995 -137.694794 37.258377 1.000000 1.000000 1.000000 +vn 0.431111 -0.583701 -0.688067 +v -161.241531 -137.749207 36.807178 1.000000 1.000000 1.000000 +vn 0.150286 -0.713807 -0.684027 +v -159.292297 -137.160385 37.154778 1.000000 1.000000 1.000000 +vn -0.033863 -0.658256 -0.752032 +v -157.948166 -137.277588 37.385578 1.000000 1.000000 1.000000 +vn -0.251503 -0.705998 -0.662052 +v -156.687714 -137.795258 37.616379 1.000000 1.000000 1.000000 +vn -0.153382 -0.858372 -0.489562 +v -157.999664 -137.528748 37.720379 1.000000 1.000000 1.000000 +vn -0.412044 -0.544224 -0.730780 +v -155.599808 -138.681290 37.848976 1.000000 1.000000 1.000000 +vn -0.607431 -0.417629 -0.675732 +v -154.829895 -139.776627 38.066376 1.000000 1.000000 1.000000 +vn -0.633440 -0.252906 -0.731295 +v -154.330338 -141.146851 38.298779 1.000000 1.000000 1.000000 +vn -0.674765 -0.088918 -0.732657 +v -154.204178 -142.604980 38.530178 1.000000 1.000000 1.000000 +vn -0.853667 -0.236569 -0.463992 +v -154.562088 -141.206848 38.633579 1.000000 1.000000 1.000000 +vn -0.886347 -0.039252 -0.461354 +v -154.442352 -142.592407 38.864979 1.000000 1.000000 1.000000 +vn -0.974777 0.003393 -0.223156 +v -154.580124 -142.585449 39.262379 1.000000 1.000000 1.000000 +vn -0.361689 0.095048 0.927441 +v -163.107101 -138.766403 38.983379 1.000000 1.000000 1.000000 +vn -0.329701 -0.060043 0.942174 +v -164.107468 -140.912430 38.636177 1.000000 1.000000 1.000000 +vn -0.318237 -0.185211 0.929743 +v -164.206604 -143.305435 38.290176 1.000000 1.000000 1.000000 +vn -0.687308 0.064992 0.723452 +v -164.323776 -140.851044 38.495579 1.000000 1.000000 1.000000 +vn -0.639128 -0.110051 0.761186 +v -164.500153 -142.512878 38.264778 1.000000 1.000000 1.000000 +vn -0.841049 0.258349 0.475282 +v -164.294159 -139.958023 38.273178 1.000000 1.000000 1.000000 +vn -0.882912 0.154061 0.443545 +v -164.552933 -140.785461 38.157978 1.000000 1.000000 1.000000 +vn -0.880427 0.032032 0.473098 +v -164.701004 -141.639404 38.043179 1.000000 1.000000 1.000000 +vn -0.965631 0.214132 0.147321 +v -164.699722 -140.743591 37.689579 1.000000 1.000000 1.000000 +vn -0.985335 0.086278 0.147209 +v -164.851639 -141.621262 37.574978 1.000000 1.000000 1.000000 +vn -0.892994 -0.078884 0.443101 +v -164.737061 -142.519852 37.926979 1.000000 1.000000 1.000000 +vn -0.988155 -0.042512 0.147455 +v -164.888977 -142.524033 37.458778 1.000000 1.000000 1.000000 +vn -0.858243 -0.195578 0.474518 +v -164.659805 -143.387756 37.811981 1.000000 1.000000 1.000000 +vn -0.974215 -0.170653 0.147591 +v -164.809158 -143.415649 37.343578 1.000000 1.000000 1.000000 +vn -0.839836 -0.308383 0.446739 +v -164.469254 -144.241699 37.695976 1.000000 1.000000 1.000000 +vn -0.582834 -0.283058 0.761698 +v -164.243942 -144.164948 38.033779 1.000000 1.000000 1.000000 +vn -0.951466 -0.257002 -0.169299 +v -164.601868 -144.287735 36.412178 1.000000 1.000000 1.000000 +vn -0.943159 -0.297046 0.149045 +v -164.614746 -144.291931 37.227779 1.000000 1.000000 1.000000 +vn -0.977162 -0.129573 -0.168420 +v -164.796280 -143.412872 36.528179 1.000000 1.000000 1.000000 +vn -0.896078 -0.417901 0.149678 +v -164.304459 -145.134705 37.111179 1.000000 1.000000 1.000000 +vn -0.778163 -0.431520 0.456348 +v -164.167984 -145.062149 37.579376 1.000000 1.000000 1.000000 +vn -0.899345 -0.384311 -0.208529 +v -164.292877 -145.127731 36.295578 1.000000 1.000000 1.000000 +vn -0.832649 -0.528613 0.165120 +v -163.943954 -145.826797 37.008980 1.000000 1.000000 1.000000 +vn -0.661861 -0.590613 0.461645 +v -163.333694 -146.435165 37.361977 1.000000 1.000000 1.000000 +vn -0.543467 -0.360527 0.758066 +v -163.954269 -144.950531 37.917179 1.000000 1.000000 1.000000 +vn -0.453829 -0.484257 0.748020 +v -163.154739 -146.267731 37.699776 1.000000 1.000000 1.000000 +vn -0.788615 -0.590475 -0.171538 +v -163.437988 -146.534225 36.078178 1.000000 1.000000 1.000000 +vn -0.757752 -0.634522 0.152292 +v -163.446991 -146.544006 36.893776 1.000000 1.000000 1.000000 +vn -0.546139 -0.679402 0.490047 +v -162.758194 -147.057480 37.245979 1.000000 1.000000 1.000000 +vn -0.253612 -0.574241 0.778414 +v -161.977982 -147.370026 37.467178 1.000000 1.000000 1.000000 +vn -0.206941 -0.283208 0.936466 +v -163.430267 -145.466797 37.955578 1.000000 1.000000 1.000000 +vn -0.119391 -0.336357 0.934136 +v -162.456924 -146.680740 37.724178 1.000000 1.000000 1.000000 +vn -0.660001 -0.735333 0.153894 +v -162.857330 -147.181671 36.777580 1.000000 1.000000 1.000000 +vn -0.453025 -0.761705 0.463222 +v -162.105438 -147.586319 37.129379 1.000000 1.000000 1.000000 +vn -0.689375 -0.702975 -0.174896 +v -162.848312 -147.171890 35.961979 1.000000 1.000000 1.000000 +vn -0.547013 -0.822604 0.155237 +v -162.187836 -147.724457 36.661179 1.000000 1.000000 1.000000 +vn -0.324974 -0.805398 0.495707 +v -161.398605 -148.006302 37.013977 1.000000 1.000000 1.000000 +vn -0.459567 -0.869838 -0.179389 +v -161.456543 -148.143051 35.730179 1.000000 1.000000 1.000000 +vn -0.420346 -0.893733 0.156688 +v -161.461700 -148.155609 36.545776 1.000000 1.000000 1.000000 +vn -0.581748 -0.793891 -0.176934 +v -162.180115 -147.711899 35.845581 1.000000 1.000000 1.000000 +vn -0.721440 -0.495466 -0.483774 +v -163.337555 -146.439346 35.685181 1.000000 1.000000 1.000000 +vn -0.651451 -0.605137 -0.457626 +v -162.762054 -147.063065 35.569000 1.000000 1.000000 1.000000 +vn -0.558001 -0.690048 -0.460943 +v -162.108017 -147.591904 35.452599 1.000000 1.000000 1.000000 +vn -0.546110 -0.413145 -0.728749 +v -162.606262 -146.867722 35.224396 1.000000 1.000000 1.000000 +vn -0.814280 -0.403239 -0.417549 +v -163.821640 -145.741684 35.800377 1.000000 1.000000 1.000000 +vn -0.642990 -0.249087 -0.724238 +v -163.622086 -145.602142 35.455799 1.000000 1.000000 1.000000 +vn -0.866671 -0.208087 -0.453412 +v -164.475693 -144.244492 36.019180 1.000000 1.000000 1.000000 +vn -0.625730 -0.107224 -0.772635 +v -164.249084 -144.166351 35.674576 1.000000 1.000000 1.000000 +vn -0.892562 -0.079286 -0.443900 +v -164.666245 -143.389145 36.134979 1.000000 1.000000 1.000000 +vn -0.878823 0.040902 -0.475393 +v -164.742203 -142.519852 36.250179 1.000000 1.000000 1.000000 +vn -0.881605 0.152578 -0.446646 +v -164.706146 -141.639404 36.366379 1.000000 1.000000 1.000000 +vn -0.985422 -0.002082 -0.170115 +v -164.876099 -142.524033 36.643181 1.000000 1.000000 1.000000 +vn -0.977353 0.126213 -0.169857 +v -164.838760 -141.622665 36.759377 1.000000 1.000000 1.000000 +vn -0.952442 0.253328 -0.169347 +v -164.686844 -140.747787 36.874176 1.000000 1.000000 1.000000 +vn -0.422905 -0.450183 -0.786439 +v -161.980545 -147.375626 35.107998 1.000000 1.000000 1.000000 +vn -0.325263 -0.586859 -0.741485 +v -160.577194 -148.074677 34.877396 1.000000 1.000000 1.000000 +vn -0.447414 -0.745484 -0.494039 +v -161.399902 -148.011902 35.337196 1.000000 1.000000 1.000000 +vn -0.333423 -0.818728 -0.467454 +v -160.645432 -148.321655 35.221798 1.000000 1.000000 1.000000 +vn -0.325840 -0.928297 -0.179143 +v -160.682770 -148.458405 35.614979 1.000000 1.000000 1.000000 +vn -0.187730 -0.580009 -0.792683 +v -159.826599 -148.256073 34.762596 1.000000 1.000000 1.000000 +vn -0.206556 -0.857748 -0.470748 +v -159.861359 -148.510025 35.107201 1.000000 1.000000 1.000000 +vn -0.036535 -0.663978 -0.746859 +v -158.277756 -148.271423 34.531197 1.000000 1.000000 1.000000 +vn -0.124803 -0.284510 -0.950515 +v -158.309937 -148.006302 34.380196 1.000000 1.000000 1.000000 +vn -0.078226 -0.862347 -0.500238 +v -159.050247 -148.579788 34.990997 1.000000 1.000000 1.000000 +vn -0.182235 -0.966433 -0.181103 +v -159.881958 -148.652359 35.500198 1.000000 1.000000 1.000000 +vn -0.034648 -0.982794 -0.181427 +v -159.051544 -148.723511 35.383999 1.000000 1.000000 1.000000 +vn -0.136575 -0.977981 0.157796 +v -159.883240 -148.666306 36.315781 1.000000 1.000000 1.000000 +vn 0.012261 -0.987280 0.158518 +v -159.051544 -148.737457 36.199577 1.000000 1.000000 1.000000 +vn -0.282843 -0.946155 0.157452 +v -160.686630 -148.472351 36.430378 1.000000 1.000000 1.000000 +vn 0.114875 -0.976481 -0.182453 +v -158.228836 -148.669083 35.268997 1.000000 1.000000 1.000000 +vn 0.060269 -0.879547 -0.471980 +v -158.245575 -148.525375 34.875801 1.000000 1.000000 1.000000 +vn 0.262640 -0.947636 -0.181674 +v -157.415146 -148.487701 35.153000 1.000000 1.000000 1.000000 +vn 0.162050 -0.974052 0.157993 +v -158.226257 -148.683044 36.084381 1.000000 1.000000 1.000000 +vn 0.057666 -0.880961 0.469662 +v -159.050247 -148.572815 36.667778 1.000000 1.000000 1.000000 +vn 0.191826 -0.845652 0.498072 +v -158.246857 -148.519791 36.552780 1.000000 1.000000 1.000000 +vn 0.308733 -0.938097 0.157029 +v -157.412567 -148.500259 35.968578 1.000000 1.000000 1.000000 +vn 0.320579 -0.824842 0.465688 +v -157.452484 -148.342590 36.436779 1.000000 1.000000 1.000000 +vn 0.100057 -0.617660 0.780054 +v -159.048965 -148.316071 37.005577 1.000000 1.000000 1.000000 +vn 0.292307 -0.563214 0.772882 +v -157.516861 -148.095612 36.774578 1.000000 1.000000 1.000000 +vn -0.069638 -0.864050 0.498566 +v -159.860077 -148.504440 36.783981 1.000000 1.000000 1.000000 +vn -0.097474 -0.656573 0.747937 +v -160.575912 -148.069092 37.236378 1.000000 1.000000 1.000000 +vn 0.050522 -0.313175 0.948351 +v -160.511536 -147.836075 37.376976 1.000000 1.000000 1.000000 +vn 0.379905 -0.522043 0.763638 +v -156.781708 -147.808167 36.657978 1.000000 1.000000 1.000000 +vn 0.453802 -0.757677 0.469030 +v -156.686432 -148.042587 36.320179 1.000000 1.000000 1.000000 +vn 0.508469 -0.433245 0.744149 +v -155.540573 -146.986328 36.440578 1.000000 1.000000 1.000000 +vn 0.617922 -0.634444 0.464385 +v -155.391220 -147.185852 36.102779 1.000000 1.000000 1.000000 +vn 0.706147 -0.518235 0.482482 +v -154.797699 -146.584457 35.986778 1.000000 1.000000 1.000000 +vn 0.559801 -0.811218 0.168964 +v -155.973175 -147.827713 35.749779 1.000000 1.000000 1.000000 +vn 0.666857 -0.729286 0.153117 +v -155.295959 -147.314224 35.634579 1.000000 1.000000 1.000000 +vn 0.763721 -0.627616 0.151092 +v -154.686981 -146.696091 35.518398 1.000000 1.000000 1.000000 +vn 0.783238 -0.430301 0.448753 +v -154.289139 -145.896561 35.870178 1.000000 1.000000 1.000000 +vn 0.843128 -0.516366 0.150003 +v -154.164246 -145.990051 35.402000 1.000000 1.000000 1.000000 +vn 0.622484 -0.762934 -0.174487 +v -155.303680 -147.303055 34.819000 1.000000 1.000000 1.000000 +vn 0.732587 -0.657710 -0.175311 +v -154.695984 -146.686325 34.702797 1.000000 1.000000 1.000000 +vn 0.405598 -0.887493 -0.218739 +v -156.629776 -148.180725 35.036400 1.000000 1.000000 1.000000 +vn 0.422502 -0.796177 -0.433122 +v -156.047852 -147.692352 34.541199 1.000000 1.000000 1.000000 +vn 0.522975 -0.695575 -0.492618 +v -155.387360 -147.191437 34.425999 1.000000 1.000000 1.000000 +vn 0.206295 -0.853213 -0.479030 +v -157.451187 -148.348160 34.759998 1.000000 1.000000 1.000000 +vn 0.440773 -0.883863 0.156539 +v -156.624634 -148.193283 35.851978 1.000000 1.000000 1.000000 +vn 0.101331 -0.605474 -0.789388 +v -157.515579 -148.101196 34.415398 1.000000 1.000000 1.000000 +vn 0.253716 -0.619236 -0.743085 +v -156.170151 -147.471893 34.196598 1.000000 1.000000 1.000000 +vn 0.017167 -0.306986 -0.951559 +v -156.297623 -147.243057 34.045601 1.000000 1.000000 1.000000 +vn 0.432210 -0.522812 -0.734753 +v -154.967636 -146.414230 33.965199 1.000000 1.000000 1.000000 +vn 0.103196 -0.280118 -0.954403 +v -155.147888 -146.232849 33.814198 1.000000 1.000000 1.000000 +vn 0.470378 -0.401751 -0.785710 +v -154.478409 -145.752838 33.848801 1.000000 1.000000 1.000000 +vn -0.191865 -0.174816 -0.965726 +v -154.003311 -141.823578 33.126198 1.000000 1.000000 1.000000 +vn -0.139200 -0.237994 -0.961240 +v -154.611008 -139.715225 32.791397 1.000000 1.000000 1.000000 +vn -0.056561 -0.265825 -0.962361 +v -155.463318 -138.494308 32.560196 1.000000 1.000000 1.000000 +vn 0.766737 -0.424981 -0.481150 +v -153.871994 -145.147278 34.077999 1.000000 1.000000 1.000000 +vn 0.715281 -0.530163 -0.455303 +v -154.283997 -145.899353 34.193398 1.000000 1.000000 1.000000 +vn 0.633624 -0.623051 -0.458615 +v -154.793839 -146.588654 34.309799 1.000000 1.000000 1.000000 +vn 0.817049 -0.549730 -0.173863 +v -154.174561 -145.981674 34.586399 1.000000 1.000000 1.000000 +vn -0.208886 -0.858604 0.468151 +v -160.642868 -148.314682 36.898781 1.000000 1.000000 1.000000 +vn 0.595383 -0.802768 0.032888 +v -161.522217 -138.477585 32.739998 1.000000 1.000000 1.000000 +vn 0.400641 -0.916210 0.006784 +v -160.496078 -137.898514 32.957397 1.000000 1.000000 1.000000 +vn 0.205808 -0.923687 0.323181 +v -159.933456 -137.525955 33.898201 1.000000 1.000000 1.000000 +vn 0.503637 -0.829130 -0.242679 +v -161.018814 -138.085480 32.400398 1.000000 1.000000 1.000000 +vn 0.307085 -0.833673 0.459008 +v -161.076736 -137.964096 33.679398 1.000000 1.000000 1.000000 +vn 0.719194 -0.694790 0.005085 +v -162.002441 -138.903152 32.623798 1.000000 1.000000 1.000000 +vn 0.696208 -0.681233 -0.226311 +v -162.038498 -138.862686 32.168999 1.000000 1.000000 1.000000 +vn -0.029105 -0.888134 0.458661 +v -159.296158 -137.432480 34.014198 1.000000 1.000000 1.000000 +vn -0.080335 -0.674517 0.733875 +v -159.310318 -137.177124 34.361801 1.000000 1.000000 1.000000 +vn 0.482965 -0.768410 0.419871 +v -161.623932 -138.321304 33.564400 1.000000 1.000000 1.000000 +vn 0.176696 -0.646368 0.742285 +v -161.183609 -137.736649 34.027199 1.000000 1.000000 1.000000 +vn 0.816565 -0.577170 0.009851 +v -162.423447 -139.398499 32.507401 1.000000 1.000000 1.000000 +vn 0.573403 -0.688294 0.444366 +v -162.124756 -138.763611 33.448196 1.000000 1.000000 1.000000 +vn 0.408425 -0.549052 0.729199 +v -162.285690 -138.576645 33.795799 1.000000 1.000000 1.000000 +vn -0.147927 -0.224985 0.963068 +v -159.327057 -136.910614 34.516399 1.000000 1.000000 1.000000 +vn -0.041185 -0.269543 0.962107 +v -161.295609 -137.498047 34.181599 1.000000 1.000000 1.000000 +vn -0.231868 -0.148623 0.961326 +v -157.238754 -137.245499 34.862396 1.000000 1.000000 1.000000 +vn -0.370526 -0.579789 0.725642 +v -157.325027 -137.496658 34.707798 1.000000 1.000000 1.000000 +vn -0.573197 -0.390494 0.720389 +v -155.629410 -138.674316 35.055000 1.000000 1.000000 1.000000 +vn -0.671604 -0.179358 0.718874 +v -154.815720 -139.839417 35.286400 1.000000 1.000000 1.000000 +vn -0.790584 -0.457779 0.406712 +v -155.370621 -139.381744 34.823601 1.000000 1.000000 1.000000 +vn -0.715594 -0.545027 0.436888 +v -155.795502 -138.855713 34.707397 1.000000 1.000000 1.000000 +vn -0.613928 -0.714185 0.336202 +v -156.286026 -138.399445 34.590797 1.000000 1.000000 1.000000 +vn -0.558595 -0.747052 0.360396 +v -156.825485 -138.024094 34.475601 1.000000 1.000000 1.000000 +vn -0.704387 0.049183 0.708110 +v -154.237640 -141.848709 35.620979 1.000000 1.000000 1.000000 +vn -0.941835 0.104546 0.319401 +v -154.453949 -142.567307 35.388397 1.000000 1.000000 1.000000 +vn -0.903277 -0.003899 0.429040 +v -154.471970 -141.873825 35.273399 1.000000 1.000000 1.000000 +vn -0.930781 -0.208842 0.300053 +v -154.580124 -141.185913 35.157398 1.000000 1.000000 1.000000 +vn -0.849442 -0.294403 0.437922 +v -155.022995 -139.963608 34.938599 1.000000 1.000000 1.000000 +vn -0.912972 0.208986 0.350439 +v -154.527328 -143.260773 35.504601 1.000000 1.000000 1.000000 +vn -0.998590 0.018241 0.049843 +v -154.631607 -142.558929 34.564198 1.000000 1.000000 1.000000 +vn -0.976104 -0.217145 -0.008359 +v -154.751343 -141.231964 34.333199 1.000000 1.000000 1.000000 +vn -0.924912 -0.380125 0.006553 +v -154.941895 -140.590118 34.216599 1.000000 1.000000 1.000000 +vn -0.911699 -0.151123 -0.382055 +v -154.457809 -141.872421 33.596798 1.000000 1.000000 1.000000 +vn -0.905118 0.074023 -0.418667 +v -154.514450 -143.263580 33.827999 1.000000 1.000000 1.000000 +vn -0.826790 -0.561579 0.032363 +v -155.512253 -139.497559 33.999199 1.000000 1.000000 1.000000 +vn -0.847880 -0.475264 -0.234997 +v -155.132431 -140.029190 33.659599 1.000000 1.000000 1.000000 +vn -0.727243 -0.686363 0.004968 +v -155.920380 -138.991058 33.882999 1.000000 1.000000 1.000000 +vn -0.712999 -0.663792 -0.225860 +v -155.883041 -138.951981 33.428200 1.000000 1.000000 1.000000 +vn -0.748062 -0.478834 -0.459479 +v -155.010132 -139.956635 33.262001 1.000000 1.000000 1.000000 +vn -0.797051 -0.240870 -0.553798 +v -154.567245 -141.183121 33.480797 1.000000 1.000000 1.000000 +vn -0.611176 -0.791443 0.009023 +v -156.391602 -138.552917 33.766598 1.000000 1.000000 1.000000 +vn -0.473013 -0.761537 -0.443080 +v -156.277023 -138.386871 32.914200 1.000000 1.000000 1.000000 +vn -0.609584 -0.650127 -0.453589 +v -155.785202 -138.845947 33.030800 1.000000 1.000000 1.000000 +vn -0.389915 -0.919479 0.050255 +v -157.469223 -137.915253 33.535797 1.000000 1.000000 1.000000 +vn -0.402041 -0.812055 0.423001 +v -157.407425 -137.735260 34.360199 1.000000 1.000000 1.000000 +vn -0.059723 -0.996867 0.051850 +v -158.669144 -137.629211 33.305000 1.000000 1.000000 1.000000 +vn -0.354988 -0.903776 -0.239108 +v -157.451187 -137.863632 33.081001 1.000000 1.000000 1.000000 +vn -0.228440 -0.928434 -0.292960 +v -158.044724 -137.672470 32.966400 1.000000 1.000000 1.000000 +vn -0.271691 -0.888460 0.369896 +v -158.017685 -137.539902 34.245399 1.000000 1.000000 1.000000 +vn -0.155473 -0.925668 0.344915 +v -158.656281 -137.438049 34.129196 1.000000 1.000000 1.000000 +vn 0.213473 -0.976915 -0.008144 +v -159.897415 -137.714325 33.073997 1.000000 1.000000 1.000000 +vn 0.142616 -0.900513 -0.410776 +v -159.296158 -137.418518 32.337601 1.000000 1.000000 1.000000 +vn -0.114790 -0.887776 -0.445731 +v -158.015121 -137.525955 32.568798 1.000000 1.000000 1.000000 +vn 0.342834 -0.634840 -0.692418 +v -160.641571 -137.461761 31.770399 1.000000 1.000000 1.000000 +vn 0.244535 -0.778720 -0.577753 +v -159.936035 -137.512009 32.221596 1.000000 1.000000 1.000000 +vn 0.043977 -0.726229 -0.686045 +v -158.636963 -137.165955 32.117996 1.000000 1.000000 1.000000 +vn 0.502940 -0.723346 -0.473099 +v -161.081894 -137.950134 32.002800 1.000000 1.000000 1.000000 +vn 0.677364 -0.581039 -0.451190 +v -162.133759 -138.752457 31.771599 1.000000 1.000000 1.000000 +vn -0.351854 -0.665029 -0.658738 +v -156.135391 -138.180359 32.579597 1.000000 1.000000 1.000000 +vn -0.130582 -0.646906 -0.751306 +v -157.318588 -137.479904 32.348801 1.000000 1.000000 1.000000 +vn -0.276742 -0.827257 -0.488936 +v -157.402267 -137.721313 32.683598 1.000000 1.000000 1.000000 +vn -0.486164 -0.484964 -0.726949 +v -155.169785 -139.217102 32.812199 1.000000 1.000000 1.000000 +vn -0.659804 -0.330526 -0.674842 +v -154.545349 -140.417099 33.029598 1.000000 1.000000 1.000000 +vn -0.752976 -0.060786 -0.655235 +v -154.202881 -142.578461 33.377197 1.000000 1.000000 1.000000 +vn -0.679421 0.094878 -0.727589 +v -154.447495 -144.015656 33.607998 1.000000 1.000000 1.000000 +vn -0.947470 0.166902 -0.272846 +v -154.650925 -143.237061 34.225601 1.000000 1.000000 1.000000 +vn 0.053250 -0.261662 0.963689 +v -162.454346 -138.382690 33.950401 1.000000 1.000000 1.000000 +vn -0.335674 -0.018126 0.941804 +v -163.878311 -140.171509 33.599396 1.000000 1.000000 1.000000 +vn 0.155113 -0.223499 0.962283 +v -163.658142 -140.270584 33.603199 1.000000 1.000000 1.000000 +vn -0.672431 0.150846 0.724625 +v -164.085587 -140.079422 33.458801 1.000000 1.000000 1.000000 +vn -0.648574 -0.028726 0.760610 +v -164.467972 -141.700790 33.227997 1.000000 1.000000 1.000000 +vn -0.340482 -0.143279 0.929270 +v -164.276138 -142.529633 33.253399 1.000000 1.000000 1.000000 +vn -0.856267 0.264151 0.443882 +v -164.304459 -139.981735 33.121201 1.000000 1.000000 1.000000 +vn -0.869460 0.142391 0.473038 +v -164.556808 -140.806381 33.006401 1.000000 1.000000 1.000000 +vn -0.966371 0.210264 0.148039 +v -164.703583 -140.764526 32.538200 1.000000 1.000000 1.000000 +vn -0.896032 0.035016 0.442606 +v -164.703583 -141.671494 32.890198 1.000000 1.000000 1.000000 +vn -0.985596 0.083174 0.147251 +v -164.854218 -141.653351 32.421997 1.000000 1.000000 1.000000 +vn -0.876508 -0.084958 0.473830 +v -164.737061 -142.543579 32.775200 1.000000 1.000000 1.000000 +vn -0.988013 -0.045642 0.147471 +v -164.888977 -142.549164 32.306801 1.000000 1.000000 1.000000 +vn -0.873348 -0.199715 0.444272 +v -164.655945 -143.418457 32.659199 1.000000 1.000000 1.000000 +vn -0.616037 -0.206650 0.760128 +v -164.422897 -143.373795 32.996998 1.000000 1.000000 1.000000 +vn -0.973308 -0.175801 0.147532 +v -164.805283 -143.446365 32.190998 1.000000 1.000000 1.000000 +vn -0.828988 -0.327781 0.453144 +v -164.458954 -144.275192 32.542599 1.000000 1.000000 1.000000 +vn -0.588231 -0.288014 0.755667 +v -164.233643 -144.195663 32.880398 1.000000 1.000000 1.000000 +vn -0.517641 -0.420401 0.745192 +v -163.606644 -145.618896 32.662998 1.000000 1.000000 1.000000 +vn -0.245333 -0.253934 0.935590 +v -163.779160 -144.784485 32.918800 1.000000 1.000000 1.000000 +vn -0.166483 -0.316989 0.933703 +v -162.966766 -146.130981 32.687401 1.000000 1.000000 1.000000 +vn -0.333725 -0.534430 0.776539 +v -162.579239 -146.884460 32.430397 1.000000 1.000000 1.000000 +vn 0.003788 -0.315868 0.948796 +v -161.186172 -147.562592 32.340199 1.000000 1.000000 1.000000 +vn -0.192785 -0.636720 0.746606 +v -161.278870 -147.784454 32.199600 1.000000 1.000000 1.000000 +vn 0.007718 -0.624960 0.780619 +v -159.796982 -148.254684 31.968798 1.000000 1.000000 1.000000 +vn 0.144150 -0.326483 0.934147 +v -159.025787 -148.074677 31.994198 1.000000 1.000000 1.000000 +vn -0.438131 -0.751782 0.492813 +v -162.084839 -147.600266 31.977198 1.000000 1.000000 1.000000 +vn -0.331942 -0.820388 0.465594 +v -161.376724 -148.017471 31.861998 1.000000 1.000000 1.000000 +vn -0.196295 -0.844998 0.497440 +v -160.624832 -148.320251 31.747198 1.000000 1.000000 1.000000 +vn -0.556327 -0.692440 0.459377 +v -162.733734 -147.079803 32.092598 1.000000 1.000000 1.000000 +vn -0.656099 -0.738870 0.153639 +v -162.831573 -147.203995 31.624399 1.000000 1.000000 1.000000 +vn -0.543952 -0.824572 0.155555 +v -162.167236 -147.738403 31.508999 1.000000 1.000000 1.000000 +vn -0.416571 -0.895520 0.156567 +v -161.439804 -148.166779 31.393599 1.000000 1.000000 1.000000 +vn -0.278177 -0.947573 0.157237 +v -160.667328 -148.477936 31.278999 1.000000 1.000000 1.000000 +vn -0.072812 -0.880273 0.468847 +v -159.830460 -148.508621 31.630999 1.000000 1.000000 1.000000 +vn -0.455494 -0.872114 -0.178724 +v -161.434662 -148.154221 30.578199 1.000000 1.000000 1.000000 +vn -0.320923 -0.929767 -0.180393 +v -160.663467 -148.463974 30.463398 1.000000 1.000000 1.000000 +vn -0.578510 -0.796320 -0.176638 +v -162.159515 -147.727249 30.693398 1.000000 1.000000 1.000000 +vn -0.549463 -0.676575 -0.490242 +v -162.088699 -147.605850 30.300398 1.000000 1.000000 1.000000 +vn -0.447035 -0.763913 -0.465400 +v -161.379303 -148.023056 30.184998 1.000000 1.000000 1.000000 +vn -0.178962 -0.967032 -0.181169 +v -159.851059 -148.656540 30.347198 1.000000 1.000000 1.000000 +vn -0.329629 -0.820021 -0.467878 +v -160.626129 -148.325836 30.070398 1.000000 1.000000 1.000000 +vn -0.406692 -0.537711 -0.738559 +v -161.281448 -147.788635 29.840599 1.000000 1.000000 1.000000 +vn -0.648519 -0.607594 -0.458534 +v -162.737595 -147.084000 30.415798 1.000000 1.000000 1.000000 +vn -0.482356 -0.389844 -0.784445 +v -162.583099 -146.888657 30.071199 1.000000 1.000000 1.000000 +vn -0.685778 -0.706455 -0.175015 +v -162.823853 -147.194214 30.808798 1.000000 1.000000 1.000000 +vn -0.728434 -0.513100 -0.453996 +v -163.318237 -146.464462 30.532198 1.000000 1.000000 1.000000 +vn -0.598310 -0.338541 -0.726234 +v -163.139282 -146.294235 30.187599 1.000000 1.000000 1.000000 +vn -0.671378 -0.164663 -0.722591 +v -163.987732 -144.889130 30.418999 1.000000 1.000000 1.000000 +vn -0.782334 -0.397294 -0.479699 +v -163.810059 -145.762604 30.648399 1.000000 1.000000 1.000000 +vn -0.778623 -0.603236 -0.172781 +v -163.417389 -146.559357 30.925198 1.000000 1.000000 1.000000 +vn -0.753895 -0.639141 0.152126 +v -163.427673 -146.567719 31.740799 1.000000 1.000000 1.000000 +vn -0.835758 -0.527916 0.151044 +v -163.932373 -145.849121 31.856998 1.000000 1.000000 1.000000 +vn -0.860210 -0.480865 -0.169728 +v -163.920792 -145.840759 31.041401 1.000000 1.000000 1.000000 +vn -0.861061 -0.295265 -0.413996 +v -164.201462 -144.999359 30.763599 1.000000 1.000000 1.000000 +vn -0.894832 -0.415104 0.164211 +v -164.334061 -145.066345 31.972198 1.000000 1.000000 1.000000 +vn -0.941426 -0.265449 -0.207975 +v -164.591553 -144.321228 31.258799 1.000000 1.000000 1.000000 +vn -0.736131 -0.497525 0.458890 +v -163.804916 -145.758423 32.325199 1.000000 1.000000 1.000000 +vn -0.635416 -0.599326 0.486883 +v -163.313095 -146.460281 32.209000 1.000000 1.000000 1.000000 +vn -0.942696 -0.298648 0.148776 +v -164.603149 -144.326813 32.074398 1.000000 1.000000 1.000000 +vn -0.976231 -0.134709 -0.169785 +v -164.792419 -143.443573 31.375399 1.000000 1.000000 1.000000 +vn -0.985458 -0.005465 -0.169833 +v -164.876099 -142.549164 31.491398 1.000000 1.000000 1.000000 +vn -0.894779 0.032774 -0.445305 +v -164.742203 -142.544968 31.098198 1.000000 1.000000 1.000000 +vn -0.886747 -0.096439 -0.452083 +v -164.661087 -143.418457 30.982397 1.000000 1.000000 1.000000 +vn -0.977987 0.122834 -0.168681 +v -164.841339 -141.656143 31.606398 1.000000 1.000000 1.000000 +vn -0.866877 0.151113 -0.475067 +v -164.710007 -141.671494 31.213398 1.000000 1.000000 1.000000 +vn -0.953642 0.248634 -0.169555 +v -164.691986 -140.768707 31.722601 1.000000 1.000000 1.000000 +vn -0.635858 -0.027697 -0.771309 +v -164.428055 -143.375198 30.637798 1.000000 1.000000 1.000000 +vn -0.270791 -0.549061 -0.790699 +v -160.559174 -148.080261 29.725798 1.000000 1.000000 1.000000 +vn -0.134160 -0.652540 -0.745784 +v -159.027069 -148.323059 29.494398 1.000000 1.000000 1.000000 +vn -0.204331 -0.842285 -0.498803 +v -159.831741 -148.514206 29.954199 1.000000 1.000000 1.000000 +vn -0.070791 -0.878632 -0.472223 +v -159.028351 -148.579788 29.838999 1.000000 1.000000 1.000000 +vn -0.030097 -0.982738 -0.182541 +v -159.028351 -148.724899 30.232199 1.000000 1.000000 1.000000 +vn 0.010842 -0.612807 -0.790158 +v -158.250717 -148.267242 29.378599 1.000000 1.000000 1.000000 +vn 0.078796 -0.873846 -0.479775 +v -158.218536 -148.522583 29.723198 1.000000 1.000000 1.000000 +vn 0.121129 -0.975883 -0.181603 +v -158.200516 -148.664902 30.116198 1.000000 1.000000 1.000000 +vn -0.132921 -0.978503 0.157686 +v -159.852341 -148.670486 31.162798 1.000000 1.000000 1.000000 +vn 0.016726 -0.987221 0.158475 +v -159.028351 -148.738861 31.047598 1.000000 1.000000 1.000000 +vn 0.065526 -0.864220 0.498829 +v -159.028351 -148.574219 31.515999 1.000000 1.000000 1.000000 +vn 0.167856 -0.973070 0.157985 +v -158.199219 -148.678864 30.931799 1.000000 1.000000 1.000000 +vn 0.196159 -0.861307 0.468692 +v -158.219818 -148.515610 31.399998 1.000000 1.000000 1.000000 +vn 0.206819 -0.597460 0.774770 +v -158.252014 -148.261658 31.737799 1.000000 1.000000 1.000000 +vn 0.340073 -0.813229 0.472239 +v -157.421585 -148.332809 31.283398 1.000000 1.000000 1.000000 +vn 0.300048 -0.567736 0.766581 +v -157.487244 -148.085846 31.621199 1.000000 1.000000 1.000000 +vn 0.309116 -0.938114 0.156174 +v -157.380386 -148.490494 30.815199 1.000000 1.000000 1.000000 +vn 0.439125 -0.882353 0.169183 +v -156.689011 -148.223969 30.712999 1.000000 1.000000 1.000000 +vn 0.523233 -0.712264 0.467874 +v -156.031113 -147.674225 31.065998 1.000000 1.000000 1.000000 +vn 0.442346 -0.496229 0.747052 +v -156.154709 -147.455154 31.403799 1.000000 1.000000 1.000000 +vn 0.628487 -0.607304 0.485990 +v -155.368057 -147.166321 30.949799 1.000000 1.000000 1.000000 +vn 0.559268 -0.319671 0.764872 +v -154.952194 -146.384933 31.171198 1.000000 1.000000 1.000000 +vn 0.558645 -0.814980 0.154023 +v -155.952560 -147.815140 30.597799 1.000000 1.000000 1.000000 +vn 0.671213 -0.725461 0.152248 +v -155.272781 -147.293289 30.481598 1.000000 1.000000 1.000000 +vn 0.718211 -0.528552 0.452555 +v -154.777100 -146.559357 30.833399 1.000000 1.000000 1.000000 +vn 0.508798 -0.842679 -0.176115 +v -155.960297 -147.802597 29.782198 1.000000 1.000000 1.000000 +vn 0.635487 -0.751549 -0.177005 +v -155.280502 -147.282135 29.665998 1.000000 1.000000 1.000000 +vn 0.766835 -0.623866 0.150850 +v -154.665085 -146.669571 30.365198 1.000000 1.000000 1.000000 +vn 0.418716 -0.761001 -0.495534 +v -156.028534 -147.679794 29.389198 1.000000 1.000000 1.000000 +vn 0.540694 -0.703110 -0.461830 +v -155.364182 -147.170502 29.272999 1.000000 1.000000 1.000000 +vn 0.735750 -0.654283 -0.174886 +v -154.675385 -146.659821 29.549599 1.000000 1.000000 1.000000 +vn 0.819104 -0.546930 -0.173023 +v -154.160385 -145.959351 29.434198 1.000000 1.000000 1.000000 +vn 0.844994 -0.513329 0.149929 +v -154.150101 -145.967728 30.249798 1.000000 1.000000 1.000000 +vn 0.773670 -0.415204 0.478581 +v -154.274979 -145.874237 30.717999 1.000000 1.000000 1.000000 +vn 0.636082 -0.620850 -0.458198 +v -154.773224 -146.563538 29.156399 1.000000 1.000000 1.000000 +vn 0.352812 -0.575314 -0.737928 +v -155.514832 -146.972366 28.928398 1.000000 1.000000 1.000000 +vn 0.409155 -0.459450 -0.788352 +v -154.947037 -146.389114 28.811998 1.000000 1.000000 1.000000 +vn 0.702560 -0.521166 -0.484557 +v -154.269821 -145.878418 29.041199 1.000000 1.000000 1.000000 +vn 0.559058 -0.389766 -0.731804 +v -154.072845 -145.009140 28.581198 1.000000 1.000000 1.000000 +vn 0.784681 -0.425419 -0.450882 +v -153.860413 -145.123550 28.925798 1.000000 1.000000 1.000000 +vn 0.061669 -0.291296 -0.954643 +v -155.670609 -146.765854 28.777399 1.000000 1.000000 1.000000 +vn 0.181264 -0.251890 -0.950629 +v -154.294296 -144.890518 28.430199 1.000000 1.000000 1.000000 +vn -0.028138 -0.307136 -0.951250 +v -156.936203 -147.596085 29.008799 1.000000 1.000000 1.000000 +vn 0.160678 -0.646878 -0.745474 +v -156.839645 -147.841660 29.159798 1.000000 1.000000 1.000000 +vn 0.303693 -0.847205 -0.435908 +v -156.745651 -148.078873 29.504198 1.000000 1.000000 1.000000 +vn 0.273509 -0.936549 -0.219245 +v -157.384247 -148.476547 29.999598 1.000000 1.000000 1.000000 +vn 0.743388 -0.582727 0.328333 +v -162.562500 -139.278503 33.331596 1.000000 1.000000 1.000000 +vn 0.771677 -0.529273 0.352682 +v -162.925568 -139.850571 33.216400 1.000000 1.000000 1.000000 +vn 0.894440 -0.391456 0.216192 +v -163.027283 -140.372437 42.539577 1.000000 1.000000 1.000000 +vn -0.234449 0.796509 -0.557322 +v -155.056473 -144.490067 16.326599 1.000000 1.000000 1.000000 +vn -0.359472 -0.563882 0.743516 +v -1.944058 159.645279 6.000000 1.000000 1.000000 1.000000 +vn -0.543791 -0.482723 0.686491 +v -6.943540 155.999268 6.000000 1.000000 1.000000 1.000000 +vn -0.442026 -0.578177 0.685801 +v -5.551734 154.701614 6.000000 1.000000 1.000000 1.000000 +vn -0.319962 -0.654239 0.685271 +v -3.958540 153.713715 6.000000 1.000000 1.000000 1.000000 +vn -0.512750 -0.432008 0.741928 +v -2.837080 160.432236 6.000000 1.000000 1.000000 1.000000 +vn -0.623434 -0.373316 0.686997 +v -8.083668 157.557861 6.000000 1.000000 1.000000 1.000000 +vn -0.616507 -0.267922 0.740363 +v -3.476198 161.470383 6.000000 1.000000 1.000000 1.000000 +vn -0.680235 -0.254288 0.687472 +v -8.930908 159.322952 6.000000 1.000000 1.000000 1.000000 +vn -0.714238 -0.129699 0.687781 +v -9.454616 161.230377 6.000000 1.000000 1.000000 1.000000 +vn -0.667449 -0.086903 0.739568 +v -3.804674 162.666183 6.000000 1.000000 1.000000 1.000000 +vn -0.725825 -0.002487 0.687875 +v -9.635908 163.210358 6.000000 1.000000 1.000000 1.000000 +vn -0.665724 0.099125 0.739585 +v -3.793280 163.913605 6.000000 1.000000 1.000000 1.000000 +vn -0.715114 0.124842 0.687770 +v -9.468174 165.191727 6.000000 1.000000 1.000000 1.000000 +vn -0.611265 0.279423 0.740458 +v -3.443058 165.102432 6.000000 1.000000 1.000000 1.000000 +vn -0.681946 0.249553 0.687512 +v -8.957532 167.101944 6.000000 1.000000 1.000000 1.000000 +vn -0.504034 0.441938 0.742052 +v -2.785104 166.126602 6.000000 1.000000 1.000000 1.000000 +vn -0.626108 0.368751 0.687031 +v -8.122408 168.874023 6.000000 1.000000 1.000000 1.000000 +vn -0.347923 0.571047 0.743542 +v -1.877894 166.894043 6.000000 1.000000 1.000000 1.000000 +vn -0.446369 0.574817 0.685814 +v -5.610082 171.751190 6.000000 1.000000 1.000000 1.000000 +vn -0.152914 0.649268 0.745029 +v -0.802052 167.339157 6.000000 1.000000 1.000000 1.000000 +vn -0.187951 0.704069 0.684807 +v -2.291162 173.410248 6.000000 1.000000 1.000000 1.000000 +vn 0.061012 0.663973 0.745264 +v 0.346860 167.420074 6.000000 1.000000 1.000000 1.000000 +vn -0.040277 0.727766 0.684642 +v -0.475094 173.700470 6.000000 1.000000 1.000000 1.000000 +vn -0.166659 -0.646079 0.744853 +v -0.876536 159.177841 6.000000 1.000000 1.000000 1.000000 +vn -0.182199 -0.705484 0.684906 +v -2.221548 153.070465 6.000000 1.000000 1.000000 1.000000 +vn -0.034722 -0.728047 0.684648 +v -0.403534 152.794189 6.000000 1.000000 1.000000 1.000000 +vn 0.046395 -0.665190 0.745231 +v 0.270668 159.071793 6.000000 1.000000 1.000000 1.000000 +vn 0.441800 0.502958 0.742864 +v 2.458084 166.496368 6.000000 1.000000 1.000000 1.000000 +vn 0.383341 0.618988 0.685495 +v 4.817148 172.331650 6.000000 1.000000 1.000000 1.000000 +vn 0.266934 0.612327 0.744178 +v 1.466736 167.129852 6.000000 1.000000 1.000000 1.000000 +vn 0.571272 0.352963 0.740989 +v 3.232800 165.572662 6.000000 1.000000 1.000000 1.000000 +vn 0.586505 0.429450 0.686720 +v 7.588154 169.748886 6.000000 1.000000 1.000000 1.000000 +vn 0.252684 0.683246 0.685074 +v 3.144480 173.150726 6.000000 1.000000 1.000000 1.000000 +vn 0.109264 0.720527 0.684764 +v 1.358884 173.612564 6.000000 1.000000 1.000000 1.000000 +vn 0.648519 0.178770 0.739908 +v 3.722068 164.443832 6.000000 1.000000 1.000000 1.000000 +vn 0.654718 0.314638 0.687275 +v 8.586364 168.078674 6.000000 1.000000 1.000000 1.000000 +vn 0.673176 -0.006180 0.739456 +v 3.882398 163.207565 6.000000 1.000000 1.000000 1.000000 +vn 0.722823 0.066277 0.687848 +v 9.629056 164.281967 6.000000 1.000000 1.000000 1.000000 +vn 0.700049 0.192510 0.687657 +v 9.274948 166.234055 6.000000 1.000000 1.000000 1.000000 +vn 0.701358 -0.187732 0.687644 +v 9.295136 160.337357 6.000000 1.000000 1.000000 1.000000 +vn 0.723257 -0.061313 0.687851 +v 9.635868 162.292221 6.000000 1.000000 1.000000 1.000000 +vn 0.645104 -0.190677 0.739921 +v 3.699550 161.975479 6.000000 1.000000 1.000000 1.000000 +vn 0.656863 -0.310019 0.687328 +v 8.619196 158.488541 6.000000 1.000000 1.000000 1.000000 +vn 0.564107 -0.363843 0.741217 +v 3.189772 160.856430 6.000000 1.000000 1.000000 1.000000 +vn 0.589602 -0.425195 0.686716 +v 7.632444 156.809952 6.000000 1.000000 1.000000 1.000000 +vn 0.499549 -0.528705 0.686237 +v 6.370572 155.365784 6.000000 1.000000 1.000000 1.000000 +vn 0.431868 -0.511711 0.742726 +v 2.398358 159.950867 6.000000 1.000000 1.000000 1.000000 +vn 0.388226 -0.615909 0.685519 +v 4.879180 154.204865 6.000000 1.000000 1.000000 1.000000 +vn 0.254070 -0.617345 0.744536 +v 1.395630 159.336914 6.000000 1.000000 1.000000 1.000000 +vn 0.258090 -0.681251 0.685045 +v 3.212162 153.371857 6.000000 1.000000 1.000000 1.000000 +vn 0.114803 -0.719682 0.684746 +v 1.429786 152.896042 6.000000 1.000000 1.000000 1.000000 +vn 0.495601 0.532489 0.686175 +v 6.316434 171.183289 6.000000 1.000000 1.000000 1.000000 +vn 0.700049 0.192510 -0.687657 +v 9.274948 166.234055 0.000000 1.000000 1.000000 1.000000 +vn 0.722823 0.066277 -0.687848 +v 9.629056 164.281967 0.000000 1.000000 1.000000 1.000000 +vn 0.654718 0.314638 -0.687275 +v 8.586364 168.078674 0.000000 1.000000 1.000000 1.000000 +vn 0.586505 0.429450 -0.686720 +v 7.588154 169.748886 0.000000 1.000000 1.000000 1.000000 +vn 0.495601 0.532489 -0.686175 +v 6.316434 171.183289 0.000000 1.000000 1.000000 1.000000 +vn 0.383341 0.618988 -0.685495 +v 4.817148 172.331650 0.000000 1.000000 1.000000 1.000000 +vn 0.252684 0.683246 -0.685074 +v 3.144480 173.150726 0.000000 1.000000 1.000000 1.000000 +vn 0.109264 0.720527 -0.684764 +v 1.358884 173.612564 0.000000 1.000000 1.000000 1.000000 +vn -0.040277 0.727766 -0.684642 +v -0.475094 173.700470 0.000000 1.000000 1.000000 1.000000 +vn -0.187951 0.704070 -0.684807 +v -2.291162 173.410248 0.000000 1.000000 1.000000 1.000000 +vn -0.325208 0.651536 -0.685376 +v -4.023700 172.751648 0.000000 1.000000 1.000000 1.000000 +vn -0.446369 0.574817 -0.685814 +v -5.610082 171.751190 0.000000 1.000000 1.000000 1.000000 +vn -0.325208 0.651536 0.685376 +v -4.023700 172.751648 6.000000 1.000000 1.000000 1.000000 +vn -0.547376 0.478648 -0.686495 +v -6.992966 170.442368 0.000000 1.000000 1.000000 1.000000 +vn -0.626108 0.368751 -0.687031 +v -8.122408 168.874023 0.000000 1.000000 1.000000 1.000000 +vn -0.547376 0.478648 0.686495 +v -6.992966 170.442368 6.000000 1.000000 1.000000 1.000000 +vn -0.681946 0.249553 -0.687512 +v -8.957532 167.101944 0.000000 1.000000 1.000000 1.000000 +vn -0.715114 0.124841 -0.687769 +v -9.468174 165.191727 0.000000 1.000000 1.000000 1.000000 +vn 0.723257 -0.061313 -0.687851 +v 9.635868 162.292221 0.000000 1.000000 1.000000 1.000000 +vn 0.701358 -0.187732 -0.687644 +v 9.295136 160.337357 0.000000 1.000000 1.000000 1.000000 +vn 0.656863 -0.310019 -0.687328 +v 8.619196 158.488541 0.000000 1.000000 1.000000 1.000000 +vn 0.589602 -0.425195 -0.686716 +v 7.632444 156.809952 0.000000 1.000000 1.000000 1.000000 +vn 0.499549 -0.528705 -0.686237 +v 6.370572 155.365784 0.000000 1.000000 1.000000 1.000000 +vn 0.388226 -0.615909 -0.685519 +v 4.879180 154.204865 0.000000 1.000000 1.000000 1.000000 +vn 0.258090 -0.681251 -0.685045 +v 3.212162 153.371857 0.000000 1.000000 1.000000 1.000000 +vn 0.114803 -0.719682 -0.684746 +v 1.429786 152.896042 0.000000 1.000000 1.000000 1.000000 +vn -0.034722 -0.728047 -0.684648 +v -0.403534 152.794189 0.000000 1.000000 1.000000 1.000000 +vn -0.182199 -0.705484 -0.684906 +v -2.221548 153.070465 0.000000 1.000000 1.000000 1.000000 +vn -0.319962 -0.654239 -0.685271 +v -3.958540 153.713715 0.000000 1.000000 1.000000 1.000000 +vn -0.442026 -0.578178 -0.685801 +v -5.551734 154.701614 0.000000 1.000000 1.000000 1.000000 +vn -0.543792 -0.482723 -0.686491 +v -6.943540 155.999268 0.000000 1.000000 1.000000 1.000000 +vn -0.623434 -0.373316 -0.686997 +v -8.083668 157.557861 0.000000 1.000000 1.000000 1.000000 +vn -0.680235 -0.254288 -0.687472 +v -8.930908 159.322952 0.000000 1.000000 1.000000 1.000000 +vn -0.714238 -0.129699 -0.687781 +v -9.454616 161.230377 0.000000 1.000000 1.000000 1.000000 +vn -0.725825 -0.002487 -0.687875 +v -9.635908 163.210358 0.000000 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v 0.020138 163.249435 0.000000 1.000000 1.000000 1.000000 +vn 0.705804 -0.208618 0.676993 +v 3.699550 161.975479 43.157181 1.000000 1.000000 1.000000 +vn 0.735598 -0.006753 0.677385 +v 3.882398 163.207565 43.157181 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 1.000000 +v 0.020140 163.249435 43.157181 1.000000 1.000000 1.000000 +vn 0.619337 -0.399466 0.675906 +v 3.189772 160.856430 43.157181 1.000000 1.000000 1.000000 +vn 0.709516 0.195584 0.677004 +v 3.722068 164.443832 43.157181 1.000000 1.000000 1.000000 +vn 0.626822 0.387284 0.676096 +v 3.232800 165.572662 43.157181 1.000000 1.000000 1.000000 +vn 0.487206 0.554649 0.674533 +v 2.458084 166.496368 43.157181 1.000000 1.000000 1.000000 +vn 0.295409 0.677647 0.673445 +v 1.466736 167.129852 43.157181 1.000000 1.000000 1.000000 +vn 0.067717 0.736945 0.672552 +v 0.346862 167.420074 43.157181 1.000000 1.000000 1.000000 +vn -0.169613 0.720171 0.672745 +v -0.802050 167.339157 43.157181 1.000000 1.000000 1.000000 +vn -0.384381 0.630885 0.673970 +v -1.877894 166.894043 43.157181 1.000000 1.000000 1.000000 +vn -0.554626 0.486297 0.675207 +v -2.785104 166.126602 43.157181 1.000000 1.000000 1.000000 +vn -0.669746 0.306156 0.676542 +v -3.443058 165.102432 43.157181 1.000000 1.000000 1.000000 +vn -0.727706 0.108354 0.677277 +v -3.793280 163.913605 43.157181 1.000000 1.000000 1.000000 +vn -0.729557 -0.094989 0.677292 +v -3.804674 162.666183 43.157181 1.000000 1.000000 1.000000 +vn -0.675317 -0.293479 0.676622 +v -3.476198 161.470383 43.157181 1.000000 1.000000 1.000000 +vn -0.564028 -0.475212 0.675312 +v -2.837080 160.432236 43.157181 1.000000 1.000000 1.000000 +vn -0.397113 -0.622926 0.673992 +v -1.944058 159.645279 43.157181 1.000000 1.000000 1.000000 +vn -0.184771 -0.716296 0.672889 +v -0.876534 159.177841 43.157181 1.000000 1.000000 1.000000 +vn 0.281442 -0.683856 0.673150 +v 1.395630 159.336914 43.157181 1.000000 1.000000 1.000000 +vn 0.476078 -0.564094 0.674647 +v 2.398358 159.950867 43.157181 1.000000 1.000000 1.000000 +vn 0.051490 -0.738232 0.672579 +v 0.270668 159.071793 43.157181 1.000000 1.000000 1.000000 +vn -0.359433 -0.563774 0.743617 +v -160.968597 -145.962143 6.000000 1.000000 1.000000 1.000000 +vn -0.543931 -0.482750 0.686361 +v -165.967880 -149.608154 6.000000 1.000000 1.000000 1.000000 +vn -0.441944 -0.578123 0.685901 +v -164.576126 -150.904419 6.000000 1.000000 1.000000 1.000000 +vn -0.320129 -0.654200 0.685230 +v -162.982208 -151.893707 6.000000 1.000000 1.000000 1.000000 +vn -0.166552 -0.646161 0.744806 +v -159.899979 -146.429581 6.000000 1.000000 1.000000 1.000000 +vn -0.512833 -0.432118 0.741806 +v -161.860825 -145.175171 6.000000 1.000000 1.000000 1.000000 +vn -0.623520 -0.373043 0.687067 +v -167.107315 -148.048172 6.000000 1.000000 1.000000 1.000000 +vn -0.616369 -0.268013 0.740444 +v -162.500702 -144.137054 6.000000 1.000000 1.000000 1.000000 +vn -0.680163 -0.254370 0.687513 +v -167.954453 -146.283066 6.000000 1.000000 1.000000 1.000000 +vn -0.667457 -0.086804 0.739572 +v -162.829010 -142.941254 6.000000 1.000000 1.000000 1.000000 +vn -0.714228 -0.129867 0.687759 +v -168.478455 -144.377045 6.000000 1.000000 1.000000 1.000000 +vn -0.665742 0.099174 0.739562 +v -162.817413 -141.693817 6.000000 1.000000 1.000000 1.000000 +vn -0.725819 -0.002599 0.687881 +v -168.660004 -142.397064 6.000000 1.000000 1.000000 1.000000 +vn -0.611276 0.279404 0.740456 +v -162.467224 -140.504990 6.000000 1.000000 1.000000 1.000000 +vn -0.681919 0.249762 0.687464 +v -167.981506 -138.504089 6.000000 1.000000 1.000000 1.000000 +vn -0.715145 0.124800 0.687745 +v -168.492630 -140.415695 6.000000 1.000000 1.000000 1.000000 +vn -0.504242 0.441821 0.741980 +v -161.809326 -139.480820 6.000000 1.000000 1.000000 1.000000 +vn -0.625983 0.368834 0.687100 +v -167.145935 -136.733414 6.000000 1.000000 1.000000 1.000000 +vn -0.347756 0.570912 0.743724 +v -160.901642 -138.711990 6.000000 1.000000 1.000000 1.000000 +vn -0.446540 0.574602 0.685882 +v -164.634048 -133.856232 6.000000 1.000000 1.000000 1.000000 +vn -0.547427 0.478605 0.686485 +v -166.016815 -135.165054 6.000000 1.000000 1.000000 1.000000 +vn -0.152651 0.649445 0.744929 +v -159.826599 -138.268280 6.000000 1.000000 1.000000 1.000000 +vn -0.187675 0.704057 0.684896 +v -161.314926 -132.197174 6.000000 1.000000 1.000000 1.000000 +vn -0.325243 0.651682 0.685221 +v -163.047867 -132.854370 6.000000 1.000000 1.000000 1.000000 +vn 0.060632 0.664181 0.745109 +v -158.676880 -138.187347 6.000000 1.000000 1.000000 1.000000 +vn -0.040579 0.727678 0.684718 +v -159.499573 -131.906952 6.000000 1.000000 1.000000 1.000000 +vn 0.266744 0.612078 0.744452 +v -157.556763 -138.476166 6.000000 1.000000 1.000000 1.000000 +vn 0.252953 0.683222 0.684998 +v -155.879181 -132.455322 6.000000 1.000000 1.000000 1.000000 +vn 0.108993 0.720646 0.684682 +v -157.664917 -131.993454 6.000000 1.000000 1.000000 1.000000 +vn 0.442239 0.502645 0.742814 +v -156.565414 -139.111053 6.000000 1.000000 1.000000 1.000000 +vn 0.383600 0.618769 0.685548 +v -154.206741 -133.275772 6.000000 1.000000 1.000000 1.000000 +vn 0.571447 0.352829 0.740918 +v -155.791626 -140.034775 6.000000 1.000000 1.000000 1.000000 +vn 0.586545 0.429449 0.686687 +v -151.436081 -135.858521 6.000000 1.000000 1.000000 1.000000 +vn 0.495601 0.532444 0.686209 +v -152.708115 -134.424118 6.000000 1.000000 1.000000 1.000000 +vn 0.648541 0.178939 0.739848 +v -155.302383 -141.163589 6.000000 1.000000 1.000000 1.000000 +vn 0.654643 0.314669 0.687333 +v -150.438293 -137.528748 6.000000 1.000000 1.000000 1.000000 +vn 0.673115 -0.006013 0.739513 +v -155.141449 -142.399857 6.000000 1.000000 1.000000 1.000000 +vn 0.722759 0.066430 0.687900 +v -149.395432 -141.324051 6.000000 1.000000 1.000000 1.000000 +vn 0.700055 0.192635 0.687616 +v -149.749481 -139.371979 6.000000 1.000000 1.000000 1.000000 +vn 0.701314 -0.187713 0.687694 +v -149.728882 -145.268661 6.000000 1.000000 1.000000 1.000000 +vn 0.723334 -0.061233 0.687778 +v -149.387695 -143.313797 6.000000 1.000000 1.000000 1.000000 +vn 0.644988 -0.190819 0.739986 +v -155.324280 -143.631943 6.000000 1.000000 1.000000 1.000000 +vn 0.656915 -0.309994 0.687289 +v -150.404816 -147.118866 6.000000 1.000000 1.000000 1.000000 +vn 0.564227 -0.363915 0.741089 +v -155.834122 -144.749603 6.000000 1.000000 1.000000 1.000000 +vn 0.589571 -0.425212 0.686732 +v -151.391022 -148.796066 6.000000 1.000000 1.000000 1.000000 +vn 0.431574 -0.511667 0.742927 +v -156.625916 -145.656570 6.000000 1.000000 1.000000 1.000000 +vn 0.499476 -0.528837 0.686189 +v -152.654037 -150.241638 6.000000 1.000000 1.000000 1.000000 +vn 0.254276 -0.617627 0.744232 +v -157.628860 -146.269119 6.000000 1.000000 1.000000 1.000000 +vn 0.388054 -0.615975 0.685557 +v -154.144943 -151.401154 6.000000 1.000000 1.000000 1.000000 +vn 0.046835 -0.664971 0.745399 +v -158.752838 -146.535629 6.000000 1.000000 1.000000 1.000000 +vn 0.115105 -0.719715 0.684661 +v -157.594101 -152.711380 6.000000 1.000000 1.000000 1.000000 +vn 0.258312 -0.681075 0.685137 +v -155.812241 -152.234161 6.000000 1.000000 1.000000 1.000000 +vn -0.034726 -0.728047 0.684647 +v -159.427475 -152.813232 6.000000 1.000000 1.000000 1.000000 +vn -0.182214 -0.705482 0.684904 +v -161.245392 -152.536957 6.000000 1.000000 1.000000 1.000000 +vn 0.700055 0.192635 -0.687616 +v -149.749481 -139.371979 0.000000 1.000000 1.000000 1.000000 +vn 0.722759 0.066430 -0.687900 +v -149.395432 -141.324051 0.000000 1.000000 1.000000 1.000000 +vn 0.654643 0.314668 -0.687333 +v -150.438293 -137.528748 0.000000 1.000000 1.000000 1.000000 +vn 0.723334 -0.061233 -0.687778 +v -149.387695 -143.313797 0.000000 1.000000 1.000000 1.000000 +vn 0.701314 -0.187713 -0.687694 +v -149.728882 -145.268661 0.000000 1.000000 1.000000 1.000000 +vn 0.586545 0.429449 -0.686687 +v -151.436081 -135.858521 0.000000 1.000000 1.000000 1.000000 +vn 0.495601 0.532444 -0.686209 +v -152.708115 -134.424118 0.000000 1.000000 1.000000 1.000000 +vn 0.383600 0.618769 -0.685548 +v -154.206741 -133.275772 0.000000 1.000000 1.000000 1.000000 +vn 0.252953 0.683222 -0.684998 +v -155.879181 -132.455322 0.000000 1.000000 1.000000 1.000000 +vn 0.108993 0.720646 -0.684682 +v -157.664917 -131.993454 0.000000 1.000000 1.000000 1.000000 +vn -0.040579 0.727678 -0.684718 +v -159.499573 -131.906952 0.000000 1.000000 1.000000 1.000000 +vn -0.187675 0.704057 -0.684896 +v -161.314926 -132.197174 0.000000 1.000000 1.000000 1.000000 +vn -0.325243 0.651682 -0.685221 +v -163.047867 -132.854370 0.000000 1.000000 1.000000 1.000000 +vn -0.446540 0.574602 -0.685882 +v -164.634048 -133.856232 0.000000 1.000000 1.000000 1.000000 +vn -0.547427 0.478605 -0.686485 +v -166.016815 -135.165054 0.000000 1.000000 1.000000 1.000000 +vn -0.625983 0.368834 -0.687100 +v -167.145935 -136.733414 0.000000 1.000000 1.000000 1.000000 +vn -0.681919 0.249762 -0.687463 +v -167.981506 -138.504089 0.000000 1.000000 1.000000 1.000000 +vn 0.656915 -0.309994 -0.687289 +v -150.404816 -147.118866 0.000000 1.000000 1.000000 1.000000 +vn 0.589571 -0.425212 -0.686732 +v -151.391022 -148.796066 0.000000 1.000000 1.000000 1.000000 +vn 0.499476 -0.528837 -0.686189 +v -152.654037 -150.241638 0.000000 1.000000 1.000000 1.000000 +vn 0.388054 -0.615975 -0.685557 +v -154.144943 -151.401154 0.000000 1.000000 1.000000 1.000000 +vn 0.258312 -0.681075 -0.685137 +v -155.812241 -152.234161 0.000000 1.000000 1.000000 1.000000 +vn 0.115105 -0.719715 -0.684661 +v -157.594101 -152.711380 0.000000 1.000000 1.000000 1.000000 +vn -0.034726 -0.728047 -0.684647 +v -159.427475 -152.813232 0.000000 1.000000 1.000000 1.000000 +vn -0.182214 -0.705482 -0.684904 +v -161.245392 -152.536957 0.000000 1.000000 1.000000 1.000000 +vn -0.320129 -0.654200 -0.685230 +v -162.982208 -151.893707 0.000000 1.000000 1.000000 1.000000 +vn -0.441944 -0.578123 -0.685901 +v -164.576126 -150.904419 0.000000 1.000000 1.000000 1.000000 +vn -0.543931 -0.482750 -0.686361 +v -165.967880 -149.608154 0.000000 1.000000 1.000000 1.000000 +vn -0.623520 -0.373043 -0.687067 +v -167.107315 -148.048172 0.000000 1.000000 1.000000 1.000000 +vn -0.680163 -0.254370 -0.687513 +v -167.954453 -146.283066 0.000000 1.000000 1.000000 1.000000 +vn -0.714228 -0.129867 -0.687759 +v -168.478455 -144.377045 0.000000 1.000000 1.000000 1.000000 +vn -0.725819 -0.002599 -0.687881 +v -168.660004 -142.397064 0.000000 1.000000 1.000000 1.000000 +vn -0.715145 0.124800 -0.687745 +v -168.492630 -140.415695 0.000000 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v -159.003891 -142.358002 0.000000 1.000000 1.000000 1.000000 +vn 0.705799 -0.208810 0.676939 +v -155.324280 -143.631943 43.157181 1.000000 1.000000 1.000000 +vn 0.735643 -0.006572 0.677337 +v -155.141449 -142.399857 43.157181 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 1.000000 +v -159.003891 -142.358002 43.157181 1.000000 1.000000 1.000000 +vn 0.619258 -0.399409 0.676012 +v -155.834122 -144.749603 43.157181 1.000000 1.000000 1.000000 +vn 0.709425 0.195738 0.677055 +v -155.302383 -141.163589 43.157181 1.000000 1.000000 1.000000 +vn 0.626894 0.387064 0.676155 +v -155.791626 -140.034775 43.157181 1.000000 1.000000 1.000000 +vn 0.487626 0.554231 0.674574 +v -156.565414 -139.111053 43.157181 1.000000 1.000000 1.000000 +vn 0.295415 0.677868 0.673220 +v -157.556763 -138.476166 43.157181 1.000000 1.000000 1.000000 +vn 0.067268 0.736870 0.672679 +v -158.676880 -138.187347 43.157181 1.000000 1.000000 1.000000 +vn -0.169276 0.720173 0.672827 +v -159.826599 -138.268280 43.157181 1.000000 1.000000 1.000000 +vn -0.384383 0.631044 0.673820 +v -160.901642 -138.711990 43.157181 1.000000 1.000000 1.000000 +vn -0.554748 0.486074 0.675268 +v -161.809326 -139.480820 43.157181 1.000000 1.000000 1.000000 +vn -0.669754 0.306134 0.676543 +v -162.467224 -140.504990 43.157181 1.000000 1.000000 1.000000 +vn -0.727681 0.108401 0.677296 +v -162.817413 -141.693817 43.157181 1.000000 1.000000 1.000000 +vn -0.729574 -0.094883 0.677288 +v -162.829010 -142.941254 43.157181 1.000000 1.000000 1.000000 +vn -0.675314 -0.293644 0.676553 +v -162.500702 -144.137054 43.157181 1.000000 1.000000 1.000000 +vn -0.563936 -0.475178 0.675412 +v -161.860825 -145.175171 43.157181 1.000000 1.000000 1.000000 +vn -0.397177 -0.622976 0.673908 +v -160.968597 -145.962143 43.157181 1.000000 1.000000 1.000000 +vn -0.184629 -0.716296 0.672927 +v -159.899979 -146.429581 43.157181 1.000000 1.000000 1.000000 +vn 0.281441 -0.683610 0.673401 +v -157.628860 -146.269119 43.157181 1.000000 1.000000 1.000000 +vn 0.476011 -0.564350 0.674480 +v -156.625916 -145.656570 43.157181 1.000000 1.000000 1.000000 +vn 0.052001 -0.738322 0.672441 +v -158.752838 -146.535629 43.157181 1.000000 1.000000 1.000000 +vn -0.260757 -0.614700 0.744412 +v 157.590240 -146.253769 6.000000 1.000000 1.000000 1.000000 +vn -0.460543 -0.563401 0.685915 +v 153.184494 -150.709076 6.000000 1.000000 1.000000 1.000000 +vn -0.341675 -0.643067 0.685363 +v 154.747482 -151.751389 6.000000 1.000000 1.000000 1.000000 +vn -0.206218 -0.698788 0.684960 +v 156.464981 -152.454636 6.000000 1.000000 1.000000 1.000000 +vn -0.054198 -0.664722 0.745122 +v 158.711639 -146.531433 6.000000 1.000000 1.000000 1.000000 +vn -0.437310 -0.506836 0.742885 +v 156.592438 -145.628662 6.000000 1.000000 1.000000 1.000000 +vn -0.558647 -0.465291 0.686599 +v 151.831345 -149.363968 6.000000 1.000000 1.000000 1.000000 +vn -0.568136 -0.358049 0.740961 +v 155.810944 -144.713318 6.000000 1.000000 1.000000 1.000000 +vn -0.634563 -0.353961 0.687053 +v 150.736984 -147.766312 6.000000 1.000000 1.000000 1.000000 +vn -0.646836 -0.184172 0.740056 +v 155.311401 -143.588684 6.000000 1.000000 1.000000 1.000000 +vn -0.687500 -0.233693 0.687554 +v 149.942596 -145.973297 6.000000 1.000000 1.000000 1.000000 +vn -0.673278 0.000741 0.739389 +v 155.141449 -142.353821 6.000000 1.000000 1.000000 1.000000 +vn -0.717689 -0.108629 0.687839 +v 149.475250 -144.049149 6.000000 1.000000 1.000000 1.000000 +vn -0.646604 0.185369 0.739960 +v 155.313980 -141.120331 6.000000 1.000000 1.000000 1.000000 +vn -0.711182 0.145841 0.687715 +v 149.576965 -140.089188 6.000000 1.000000 1.000000 1.000000 +vn -0.725591 0.018673 0.687872 +v 149.351654 -142.063583 6.000000 1.000000 1.000000 1.000000 +vn -0.567342 0.359059 0.741080 +v 155.814804 -139.997086 6.000000 1.000000 1.000000 1.000000 +vn -0.674193 0.270085 0.687399 +v 150.143448 -138.197113 6.000000 1.000000 1.000000 1.000000 +vn -0.436768 0.507655 0.742644 +v 156.598892 -139.083145 6.000000 1.000000 1.000000 1.000000 +vn -0.532101 0.495855 0.686291 +v 152.204712 -134.926453 6.000000 1.000000 1.000000 1.000000 +vn -0.614482 0.387799 0.687039 +v 151.030533 -136.455734 6.000000 1.000000 1.000000 1.000000 +vn -0.260137 0.614816 0.744534 +v 157.595398 -138.459442 6.000000 1.000000 1.000000 1.000000 +vn -0.303218 0.662268 0.685172 +v 155.240601 -132.720428 6.000000 1.000000 1.000000 1.000000 +vn -0.427388 0.589069 0.685812 +v 153.626083 -133.666458 6.000000 1.000000 1.000000 1.000000 +vn -0.052908 0.664687 0.745246 +v 158.718079 -138.183151 6.000000 1.000000 1.000000 1.000000 +vn -0.163799 0.709987 0.684900 +v 156.991562 -132.123230 6.000000 1.000000 1.000000 1.000000 +vn 0.160268 0.647739 0.744815 +v 159.866501 -138.278046 6.000000 1.000000 1.000000 1.000000 +vn 0.133828 0.716352 0.684784 +v 160.645432 -132.045090 6.000000 1.000000 1.000000 1.000000 +vn -0.015525 0.728773 0.684579 +v 158.815918 -131.894394 6.000000 1.000000 1.000000 1.000000 +vn 0.353985 0.567192 0.743632 +v 160.937698 -138.734314 6.000000 1.000000 1.000000 1.000000 +vn 0.275792 0.674239 0.685084 +v 162.417007 -132.568344 6.000000 1.000000 1.000000 1.000000 +vn 0.508881 0.436399 0.742021 +v 161.837631 -139.512909 6.000000 1.000000 1.000000 1.000000 +vn 0.512347 0.516372 0.686193 +v 165.530136 -134.644592 6.000000 1.000000 1.000000 1.000000 +vn 0.403459 0.605834 0.685701 +v 164.064987 -133.445999 6.000000 1.000000 1.000000 1.000000 +vn 0.614244 0.273215 0.740309 +v 162.485245 -140.545456 6.000000 1.000000 1.000000 1.000000 +vn 0.599507 0.410870 0.686861 +v 166.758392 -136.122253 6.000000 1.000000 1.000000 1.000000 +vn 0.666602 0.092523 0.739649 +v 162.823853 -141.737076 6.000000 1.000000 1.000000 1.000000 +vn 0.705468 0.171681 0.687634 +v 168.342010 -139.692902 6.000000 1.000000 1.000000 1.000000 +vn 0.663781 0.294793 0.687380 +v 167.707260 -137.825958 6.000000 1.000000 1.000000 1.000000 +vn 0.721156 -0.082542 0.687838 +v 168.586609 -143.644501 6.000000 1.000000 1.000000 1.000000 +vn 0.724422 0.044898 0.687893 +v 168.638123 -141.656143 6.000000 1.000000 1.000000 1.000000 +vn 0.666600 -0.093558 0.739521 +v 162.822571 -142.985901 6.000000 1.000000 1.000000 1.000000 +vn 0.695523 -0.208405 0.687616 +v 168.188797 -145.586792 6.000000 1.000000 1.000000 1.000000 +vn 0.613449 -0.274334 0.740555 +v 162.482681 -144.177521 6.000000 1.000000 1.000000 1.000000 +vn 0.647267 -0.329860 0.687195 +v 167.458786 -147.413300 6.000000 1.000000 1.000000 1.000000 +vn 0.508242 -0.437580 0.741764 +v 161.832489 -145.207275 6.000000 1.000000 1.000000 1.000000 +vn 0.576074 -0.443444 0.686656 +v 166.423645 -149.055603 6.000000 1.000000 1.000000 1.000000 +vn 0.353252 -0.567549 0.743708 +v 160.932541 -145.984467 6.000000 1.000000 1.000000 1.000000 +vn 0.482337 -0.544642 0.686087 +v 165.119431 -150.456512 6.000000 1.000000 1.000000 1.000000 +vn 0.158958 -0.647934 0.744925 +v 159.860077 -146.439346 6.000000 1.000000 1.000000 1.000000 +vn 0.235069 -0.689632 0.684945 +v 161.904587 -152.340210 6.000000 1.000000 1.000000 1.000000 +vn 0.367667 -0.628421 0.685498 +v 163.595062 -151.564407 6.000000 1.000000 1.000000 1.000000 +vn 0.090162 -0.723193 0.684736 +v 160.108551 -152.754623 6.000000 1.000000 1.000000 1.000000 +vn -0.059701 -0.726452 0.684619 +v 158.273895 -152.793701 6.000000 1.000000 1.000000 1.000000 +vn 0.663781 0.294793 -0.687380 +v 167.707260 -137.825958 0.000000 1.000000 1.000000 1.000000 +vn 0.705468 0.171681 -0.687634 +v 168.342010 -139.692902 0.000000 1.000000 1.000000 1.000000 +vn 0.724423 0.044898 -0.687892 +v 168.638123 -141.656143 0.000000 1.000000 1.000000 1.000000 +vn 0.721156 -0.082542 -0.687838 +v 168.586609 -143.644501 0.000000 1.000000 1.000000 1.000000 +vn 0.695523 -0.208405 -0.687616 +v 168.188797 -145.586792 0.000000 1.000000 1.000000 1.000000 +vn 0.647267 -0.329860 -0.687195 +v 167.458786 -147.413300 0.000000 1.000000 1.000000 1.000000 +vn 0.576074 -0.443444 -0.686656 +v 166.423645 -149.055603 0.000000 1.000000 1.000000 1.000000 +vn 0.482337 -0.544642 -0.686087 +v 165.119431 -150.456512 0.000000 1.000000 1.000000 1.000000 +vn 0.367667 -0.628421 -0.685498 +v 163.595062 -151.564407 0.000000 1.000000 1.000000 1.000000 +vn 0.235069 -0.689632 -0.684945 +v 161.904587 -152.340210 0.000000 1.000000 1.000000 1.000000 +vn 0.090162 -0.723193 -0.684736 +v 160.108551 -152.754623 0.000000 1.000000 1.000000 1.000000 +vn -0.059701 -0.726452 -0.684619 +v 158.273895 -152.793701 0.000000 1.000000 1.000000 1.000000 +vn -0.206218 -0.698788 -0.684960 +v 156.464981 -152.454636 0.000000 1.000000 1.000000 1.000000 +vn -0.341675 -0.643067 -0.685363 +v 154.747482 -151.751389 0.000000 1.000000 1.000000 1.000000 +vn -0.460543 -0.563401 -0.685915 +v 153.184494 -150.709076 0.000000 1.000000 1.000000 1.000000 +vn -0.558647 -0.465291 -0.686599 +v 151.831345 -149.363968 0.000000 1.000000 1.000000 1.000000 +vn -0.634563 -0.353961 -0.687053 +v 150.736984 -147.766312 0.000000 1.000000 1.000000 1.000000 +vn -0.687500 -0.233693 -0.687554 +v 149.942596 -145.973297 0.000000 1.000000 1.000000 1.000000 +vn -0.717689 -0.108629 -0.687839 +v 149.475250 -144.049149 0.000000 1.000000 1.000000 1.000000 +vn -0.725591 0.018673 -0.687872 +v 149.351654 -142.063583 0.000000 1.000000 1.000000 1.000000 +vn -0.711182 0.145841 -0.687715 +v 149.576965 -140.089188 0.000000 1.000000 1.000000 1.000000 +vn -0.674193 0.270085 -0.687399 +v 150.143448 -138.197113 0.000000 1.000000 1.000000 1.000000 +vn -0.614482 0.387799 -0.687039 +v 151.030533 -136.455734 0.000000 1.000000 1.000000 1.000000 +vn -0.532101 0.495855 -0.686291 +v 152.204712 -134.926453 0.000000 1.000000 1.000000 1.000000 +vn -0.427388 0.589069 -0.685812 +v 153.626083 -133.666458 0.000000 1.000000 1.000000 1.000000 +vn -0.303218 0.662268 -0.685172 +v 155.240601 -132.720428 0.000000 1.000000 1.000000 1.000000 +vn -0.163799 0.709988 -0.684900 +v 156.991562 -132.123230 0.000000 1.000000 1.000000 1.000000 +vn -0.015525 0.728773 -0.684579 +v 158.815918 -131.894394 0.000000 1.000000 1.000000 1.000000 +vn 0.133828 0.716352 -0.684784 +v 160.645432 -132.045090 0.000000 1.000000 1.000000 1.000000 +vn 0.275792 0.674239 -0.685084 +v 162.417007 -132.568344 0.000000 1.000000 1.000000 1.000000 +vn 0.403459 0.605834 -0.685701 +v 164.064987 -133.445999 0.000000 1.000000 1.000000 1.000000 +vn 0.512347 0.516372 -0.686193 +v 165.530136 -134.644592 0.000000 1.000000 1.000000 1.000000 +vn 0.599507 0.410870 -0.686861 +v 166.758392 -136.122253 0.000000 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v 159.003891 -142.358002 0.000000 1.000000 1.000000 1.000000 +vn 0.728538 -0.102251 0.677331 +v 162.822571 -142.985901 43.157120 1.000000 1.000000 1.000000 +vn 0.728792 0.101155 0.677222 +v 162.823853 -141.737076 43.157120 1.000000 1.000000 1.000000 +vn 0.000002 -0.000002 1.000000 +v 159.003891 -142.358002 43.157120 1.000000 1.000000 1.000000 +vn 0.672314 -0.300659 0.676461 +v 162.482681 -144.177521 43.157120 1.000000 1.000000 1.000000 +vn 0.672742 0.299234 0.676666 +v 162.485245 -140.545456 43.157120 1.000000 1.000000 1.000000 +vn 0.559914 0.480163 0.675234 +v 161.837631 -139.512909 43.157120 1.000000 1.000000 1.000000 +vn 0.391171 0.626776 0.673897 +v 160.937698 -138.734314 43.157120 1.000000 1.000000 1.000000 +vn 0.177673 0.718061 0.672919 +v 159.866501 -138.278046 43.157120 1.000000 1.000000 1.000000 +vn -0.058714 0.737700 0.672570 +v 158.718079 -138.183151 43.157139 1.000000 1.000000 1.000000 +vn -0.288161 0.681049 0.673154 +v 157.595398 -138.459442 43.157139 1.000000 1.000000 1.000000 +vn -0.481372 0.559498 0.674717 +v 156.598892 -139.083145 43.157139 1.000000 1.000000 1.000000 +vn -0.622660 0.394068 0.676021 +v 155.814804 -139.997086 43.157139 1.000000 1.000000 1.000000 +vn -0.707518 0.202832 0.676962 +v 155.313980 -141.120331 43.157139 1.000000 1.000000 1.000000 +vn -0.735572 0.000805 0.677446 +v 155.141449 -142.353821 43.157139 1.000000 1.000000 1.000000 +vn -0.707956 -0.201579 0.676878 +v 155.311401 -143.588684 43.157120 1.000000 1.000000 1.000000 +vn -0.623332 -0.392834 0.676120 +v 155.810944 -144.713318 43.157120 1.000000 1.000000 1.000000 +vn -0.482281 -0.558957 0.674516 +v 156.592438 -145.628662 43.157120 1.000000 1.000000 1.000000 +vn -0.288754 -0.680700 0.673253 +v 157.590240 -146.253769 43.157120 1.000000 1.000000 1.000000 +vn -0.060132 -0.737497 0.672669 +v 158.711639 -146.531433 43.157120 1.000000 1.000000 1.000000 +vn 0.390442 -0.627299 0.673834 +v 160.932541 -145.984467 43.157120 1.000000 1.000000 1.000000 +vn 0.558824 -0.481129 0.675448 +v 161.832489 -145.207275 43.157120 1.000000 1.000000 1.000000 +vn 0.176268 -0.718491 0.672830 +v 159.860077 -146.439346 43.157120 1.000000 1.000000 1.000000 +vn 0.680717 0.530875 0.504773 +v 144.822296 164.012665 45.911160 1.000000 1.000000 1.000000 +vn 0.677648 0.504397 0.535142 +v 144.980652 164.228943 45.472580 1.000000 1.000000 1.000000 +vn 0.531075 0.600886 0.597408 +v 144.710281 164.622437 45.449158 1.000000 1.000000 1.000000 +vn 0.427625 0.665301 0.611974 +v 144.503006 164.305695 46.031960 1.000000 1.000000 1.000000 +vn 0.780984 0.315656 0.538911 +v 144.826157 163.952667 45.970757 1.000000 1.000000 1.000000 +vn 0.818545 0.341869 0.461638 +v 144.854477 163.983383 45.898956 1.000000 1.000000 1.000000 +vn 0.397648 0.692953 0.601409 +v 144.675522 164.641968 45.449158 1.000000 1.000000 1.000000 +vn 0.433392 0.480417 0.762477 +v 144.733459 164.658707 45.398758 1.000000 1.000000 1.000000 +vn 0.461814 0.460010 0.758366 +v 144.477249 164.055923 46.284958 1.000000 1.000000 1.000000 +vn 0.715577 0.108841 0.690003 +v 144.822296 163.587097 46.091560 1.000000 1.000000 1.000000 +vn 0.501334 0.132126 0.855106 +v 144.477249 163.587097 46.434559 1.000000 1.000000 1.000000 +vn 0.287991 0.147529 0.946201 +v 144.474670 163.587097 46.435356 1.000000 1.000000 1.000000 +vn 0.138473 0.317358 0.938141 +v 144.071701 164.089417 46.395958 1.000000 1.000000 1.000000 +vn 0.131588 0.546324 0.827173 +v 144.071701 164.092209 46.394958 1.000000 1.000000 1.000000 +vn 0.501334 -0.132127 0.855106 +v 144.477249 162.853149 46.434559 1.000000 1.000000 1.000000 +vn 0.287880 -0.147655 0.946215 +v 144.474670 162.853149 46.435356 1.000000 1.000000 1.000000 +vn 0.141624 0.150240 0.978453 +v 144.071701 163.587097 46.556160 1.000000 1.000000 1.000000 +vn 0.141612 -0.150623 0.978396 +v 144.071701 162.853149 46.556160 1.000000 1.000000 1.000000 +vn 0.468939 -0.449532 0.760274 +v 144.477249 162.384323 46.284958 1.000000 1.000000 1.000000 +vn 0.138861 -0.266033 0.953910 +v 144.071701 162.352219 46.395958 1.000000 1.000000 1.000000 +vn 0.715576 -0.108839 0.690004 +v 144.822296 162.853149 46.091560 1.000000 1.000000 1.000000 +vn 0.822089 -0.089748 0.562241 +v 144.826157 162.853149 46.087357 1.000000 1.000000 1.000000 +vn 0.822191 0.089954 0.562059 +v 144.826157 163.587097 46.087357 1.000000 1.000000 1.000000 +vn 0.780330 -0.316525 0.539348 +v 144.826157 162.487564 45.970757 1.000000 1.000000 1.000000 +vn 0.926817 -0.059082 0.370835 +v 145.063049 162.853149 45.574558 1.000000 1.000000 1.000000 +vn 0.926744 0.065631 0.369917 +v 145.063049 163.587097 45.574558 1.000000 1.000000 1.000000 +vn 0.905774 0.148683 0.396821 +v 144.880234 163.933136 45.858559 1.000000 1.000000 1.000000 +vn 0.916485 0.097959 0.387891 +v 145.077209 163.613617 45.529358 1.000000 1.000000 1.000000 +vn 0.774880 0.359808 0.519711 +v 144.989670 164.216400 45.473358 1.000000 1.000000 1.000000 +vn 0.813970 0.076904 0.575795 +v 145.119705 163.613617 45.437958 1.000000 1.000000 1.000000 +vn 0.918675 -0.079344 0.386964 +v 145.077209 162.826645 45.529358 1.000000 1.000000 1.000000 +vn 0.657567 0.281425 0.698860 +v 145.028290 164.235931 45.410358 1.000000 1.000000 1.000000 +vn 0.499222 0.047551 0.865168 +v 145.180222 163.613617 45.377357 1.000000 1.000000 1.000000 +vn 0.815913 -0.057644 0.575294 +v 145.119705 162.826645 45.437958 1.000000 1.000000 1.000000 +vn 0.799549 -0.317299 0.509944 +v 145.016708 162.307571 45.480358 1.000000 1.000000 1.000000 +vn 0.681198 -0.258072 0.685105 +v 145.056610 162.292221 45.413757 1.000000 1.000000 1.000000 +vn 0.389209 -0.148274 0.909138 +v 145.108124 162.272690 45.370956 1.000000 1.000000 1.000000 +vn 0.502486 -0.036253 0.863825 +v 145.180222 162.826645 45.377357 1.000000 1.000000 1.000000 +vn 0.734799 -0.446424 0.510663 +v 144.969070 162.223862 45.474758 1.000000 1.000000 1.000000 +vn 0.471134 -0.452063 0.757411 +v 144.782379 161.824783 45.399361 1.000000 1.000000 1.000000 +vn 0.256363 -0.246832 0.934533 +v 144.813278 161.784317 45.367157 1.000000 1.000000 1.000000 +vn 0.903240 -0.162916 0.397010 +v 144.880234 162.507111 45.858559 1.000000 1.000000 1.000000 +vn 0.822126 -0.349934 0.449061 +v 144.854477 162.456879 45.898956 1.000000 1.000000 1.000000 +vn 0.686263 -0.528712 0.499506 +v 144.822296 162.427567 45.911160 1.000000 1.000000 1.000000 +vn 0.580786 -0.564668 0.586377 +v 144.756638 161.858276 45.450359 1.000000 1.000000 1.000000 +vn 0.424437 -0.665491 0.613983 +v 144.503006 162.134552 46.031960 1.000000 1.000000 1.000000 +vn 0.454877 -0.663500 0.594016 +v 144.674240 161.801071 45.449558 1.000000 1.000000 1.000000 +vn 0.224383 -0.753929 0.617449 +v 144.477249 162.123398 46.026958 1.000000 1.000000 1.000000 +vn 0.126837 -0.496868 0.858507 +v 144.071701 162.348038 46.394958 1.000000 1.000000 1.000000 +vn -0.132555 -0.501252 0.855088 +v 141.749084 162.348038 46.394958 1.000000 1.000000 1.000000 +vn 0.104282 -0.798993 0.592229 +v 144.071701 161.944778 45.948959 1.000000 1.000000 1.000000 +vn -0.138856 -0.266033 0.953910 +v 141.749084 162.352219 46.395958 1.000000 1.000000 1.000000 +vn -0.141607 -0.150623 0.978397 +v 141.749084 162.853149 46.556160 1.000000 1.000000 1.000000 +vn -0.287875 -0.147655 0.946217 +v 141.346100 162.853149 46.435356 1.000000 1.000000 1.000000 +vn -0.461369 -0.460243 0.758495 +v 141.343521 162.384323 46.284958 1.000000 1.000000 1.000000 +vn -0.097926 -0.793172 0.601073 +v 141.749084 161.944778 45.948959 1.000000 1.000000 1.000000 +vn 0.058392 -0.804747 0.590740 +v 144.217178 161.660141 45.463360 1.000000 1.000000 1.000000 +vn -0.082869 -0.813298 0.575916 +v 141.603592 161.660141 45.463360 1.000000 1.000000 1.000000 +vn -0.212343 -0.745694 0.631546 +v 141.343521 162.123398 46.026958 1.000000 1.000000 1.000000 +vn -0.282881 -0.738180 0.612429 +v 141.295883 161.710373 45.449558 1.000000 1.000000 1.000000 +vn -0.427464 -0.665382 0.611998 +v 141.317780 162.134552 46.031960 1.000000 1.000000 1.000000 +vn -0.501334 -0.132126 0.855106 +v 141.343521 162.853149 46.434559 1.000000 1.000000 1.000000 +vn -0.397645 -0.692950 0.601414 +v 141.145248 161.798279 45.449158 1.000000 1.000000 1.000000 +vn -0.225270 -0.596707 0.770191 +v 141.281723 161.668518 45.398956 1.000000 1.000000 1.000000 +vn -0.433458 -0.480403 0.762448 +v 141.087311 161.781540 45.398758 1.000000 1.000000 1.000000 +vn -0.531066 -0.600890 0.597411 +v 141.110489 161.817810 45.449158 1.000000 1.000000 1.000000 +vn -0.235478 -0.262341 0.935803 +v 141.058990 161.739670 45.366959 1.000000 1.000000 1.000000 +vn -0.053026 -0.558094 0.828082 +v 141.603592 161.587585 45.387157 1.000000 1.000000 1.000000 +vn -0.064698 -0.678298 0.731933 +v 141.603592 161.614090 45.405560 1.000000 1.000000 1.000000 +vn -0.123281 -0.327309 0.936841 +v 141.264984 161.619675 45.367157 1.000000 1.000000 1.000000 +vn -0.367277 -0.158155 0.916567 +v 140.744843 162.182007 45.369957 1.000000 1.000000 1.000000 +vn -0.057222 -0.066117 0.996170 +v 141.029373 161.695023 45.356159 1.000000 1.000000 1.000000 +vn -0.031363 -0.082939 0.996061 +v 141.246964 161.568054 45.356159 1.000000 1.000000 1.000000 +vn -0.034326 -0.375340 0.926251 +v 141.603592 161.559677 45.368759 1.000000 1.000000 1.000000 +vn -0.008724 -0.097133 0.995233 +v 141.603592 161.499680 45.356159 1.000000 1.000000 1.000000 +vn 0.005062 -0.099827 0.994992 +v 144.217178 161.499680 45.356159 1.000000 1.000000 1.000000 +vn 0.017940 -0.380675 0.924535 +v 144.217178 161.559677 45.368759 1.000000 1.000000 1.000000 +vn -0.653908 -0.000009 0.756574 +v 128.876846 163.220123 45.356178 1.000000 1.000000 1.000000 +vn -0.595337 0.266478 0.757999 +v 128.672897 162.251755 45.356159 1.000000 1.000000 1.000000 +vn -0.264877 -0.355999 0.896161 +v 133.254272 159.715042 45.356159 1.000000 1.000000 1.000000 +vn -0.595335 -0.266482 0.758000 +v 128.672897 164.188477 45.356178 1.000000 1.000000 1.000000 +vn -0.090063 -0.039564 0.995150 +v 140.692062 162.155487 45.356159 1.000000 1.000000 1.000000 +vn -0.421824 -0.491900 0.761642 +v 128.101257 164.965683 45.356178 1.000000 1.000000 1.000000 +vn -0.153461 -0.625649 0.764861 +v 127.275223 165.396851 45.356178 1.000000 1.000000 1.000000 +vn -0.133643 -0.012492 0.990951 +v 140.568451 162.826645 45.356159 1.000000 1.000000 1.000000 +vn -0.048745 0.720042 0.692216 +v 126.816872 170.127029 45.356178 1.000000 1.000000 1.000000 +vn 0.153461 -0.625650 0.764860 +v 126.358528 165.396851 45.356178 1.000000 1.000000 1.000000 +vn -0.135663 0.009940 0.990705 +v 140.568451 163.613617 45.356159 1.000000 1.000000 1.000000 +vn -0.195813 0.708373 0.678133 +v 125.237137 169.912155 45.356178 1.000000 1.000000 1.000000 +vn -0.098851 0.038538 0.994356 +v 140.657288 164.189880 45.356159 1.000000 1.000000 1.000000 +vn -0.379972 0.197577 0.903651 +v 133.254272 170.127029 45.356178 1.000000 1.000000 1.000000 +vn -0.374055 0.631724 0.678975 +v 123.756149 169.278671 45.356178 1.000000 1.000000 1.000000 +vn 0.421823 -0.491903 0.761641 +v 125.532486 164.965683 45.356178 1.000000 1.000000 1.000000 +vn -0.520990 0.515880 0.680027 +v 122.466087 168.267044 45.356178 1.000000 1.000000 1.000000 +vn 0.595336 -0.266480 0.758000 +v 124.960846 164.188477 45.356178 1.000000 1.000000 1.000000 +vn -0.630320 0.372872 0.680928 +v 121.447563 166.941483 45.356178 1.000000 1.000000 1.000000 +vn -0.699861 0.213329 0.681679 +v 120.764168 165.382889 45.356178 1.000000 1.000000 1.000000 +vn 0.653916 -0.000001 0.756567 +v 124.756905 163.220123 45.356178 1.000000 1.000000 1.000000 +vn -0.729893 0.045895 0.682019 +v 120.458519 163.688950 45.356178 1.000000 1.000000 1.000000 +vn 0.595333 0.266481 0.758002 +v 124.960846 162.251755 45.356178 1.000000 1.000000 1.000000 +vn -0.720995 -0.123144 0.681910 +v 120.549805 161.965714 45.356178 1.000000 1.000000 1.000000 +vn -0.669075 -0.310847 0.675065 +v 121.032089 160.322021 45.356178 1.000000 1.000000 1.000000 +vn -0.532336 -0.521487 0.666835 +v 121.244400 160.001083 45.356178 1.000000 1.000000 1.000000 +vn -0.293966 -0.686650 0.664903 +v 121.551079 159.789001 45.356178 1.000000 1.000000 1.000000 +vn -0.074188 -0.724858 0.684892 +v 121.908607 159.715042 45.356178 1.000000 1.000000 1.000000 +vn -0.077337 -0.675120 0.733643 +v 122.196495 159.715042 45.356178 1.000000 1.000000 1.000000 +vn -0.280438 -0.587642 0.758967 +v 122.587112 159.624359 45.356178 1.000000 1.000000 1.000000 +vn -0.449260 -0.535336 0.715248 +v 122.910919 159.371796 45.356178 1.000000 1.000000 1.000000 +vn 0.421817 0.491907 0.761642 +v 125.532486 161.474564 45.356178 1.000000 1.000000 1.000000 +vn -0.410124 -0.611905 0.676292 +v 124.033859 158.358780 45.356178 1.000000 1.000000 1.000000 +vn 0.153465 0.625649 0.764861 +v 126.358528 161.043411 45.356178 1.000000 1.000000 1.000000 +vn -0.216985 -0.704904 0.675298 +v 125.370003 157.718323 45.356159 1.000000 1.000000 1.000000 +vn 0.000001 -0.737898 0.674912 +v 126.816872 157.499252 45.356159 1.000000 1.000000 1.000000 +vn -0.153451 0.625656 0.764858 +v 127.275223 161.043411 45.356159 1.000000 1.000000 1.000000 +vn 0.216929 -0.704903 0.675317 +v 128.263748 157.718323 45.356159 1.000000 1.000000 1.000000 +vn -0.421818 0.491907 0.761641 +v 128.101257 161.474564 45.356159 1.000000 1.000000 1.000000 +vn 0.410133 -0.611932 0.676262 +v 129.600418 158.358780 45.356159 1.000000 1.000000 1.000000 +vn 0.449614 -0.535169 0.715152 +v 130.723083 159.371796 45.356159 1.000000 1.000000 1.000000 +vn 0.077197 -0.675192 0.733591 +v 131.437637 159.715042 45.356159 1.000000 1.000000 1.000000 +vn 0.280505 -0.587384 0.759142 +v 131.046249 159.624359 45.356159 1.000000 1.000000 1.000000 +vn 0.264877 -0.355999 0.896161 +v 152.566498 159.715042 45.356159 1.000000 1.000000 1.000000 +vn -0.669754 -0.262908 0.694485 +v 133.254272 159.461090 45.308380 1.000000 1.000000 1.000000 +vn 0.669754 -0.262908 0.694485 +v 152.566498 159.461090 45.308380 1.000000 1.000000 1.000000 +vn -0.690247 -0.417223 0.591172 +v 133.254272 159.226669 45.168556 1.000000 1.000000 1.000000 +vn 0.690247 -0.417223 0.591172 +v 152.566498 159.226669 45.168556 1.000000 1.000000 1.000000 +vn -0.717685 -0.490139 0.494664 +v 133.254272 158.406219 44.489559 1.000000 1.000000 1.000000 +vn 0.717681 -0.490151 0.494657 +v 152.566498 158.406219 44.489559 1.000000 1.000000 1.000000 +vn -0.101696 -0.973456 0.205040 +v 134.219894 157.499252 43.739559 1.000000 1.000000 1.000000 +vn -0.397548 -0.889849 0.223886 +v 133.737091 157.620651 43.840157 1.000000 1.000000 1.000000 +vn -0.652017 -0.666225 0.361964 +v 133.383026 157.952728 44.114559 1.000000 1.000000 1.000000 +vn 0.101685 -0.973452 0.205063 +v 151.600876 157.499252 43.739559 1.000000 1.000000 1.000000 +vn 0.651809 -0.666327 0.362152 +v 152.437744 157.952728 44.114559 1.000000 1.000000 1.000000 +vn 0.397526 -0.889794 0.224142 +v 152.083694 157.620651 43.840157 1.000000 1.000000 1.000000 +vn 0.061983 -0.061038 0.996209 +v 144.846756 161.741074 45.356159 1.000000 1.000000 1.000000 +vn 0.039776 -0.080442 0.995965 +v 144.635605 161.595947 45.356159 1.000000 1.000000 1.000000 +vn -0.077197 -0.675192 0.733591 +v 154.383133 159.715042 45.356159 1.000000 1.000000 1.000000 +vn 0.135664 -0.009940 0.990705 +v 145.252319 162.826645 45.356159 1.000000 1.000000 1.000000 +vn 0.098873 -0.038546 0.994353 +v 145.163483 162.250366 45.356159 1.000000 1.000000 1.000000 +vn 0.018599 -0.089662 0.995799 +v 144.398712 161.516418 45.356159 1.000000 1.000000 1.000000 +vn -0.280506 -0.587384 0.759142 +v 154.774521 159.624359 45.356159 1.000000 1.000000 1.000000 +vn 0.153387 0.625710 0.764826 +v 158.545547 161.043411 45.356159 1.000000 1.000000 1.000000 +vn -0.449612 -0.535171 0.715151 +v 155.097687 159.371796 45.356159 1.000000 1.000000 1.000000 +vn 0.421730 0.491932 0.761674 +v 157.718994 161.474564 45.356159 1.000000 1.000000 1.000000 +vn -0.410150 -0.611910 0.676271 +v 156.220367 158.358780 45.356159 1.000000 1.000000 1.000000 +vn -0.216952 -0.704906 0.675307 +v 157.556763 157.718323 45.356159 1.000000 1.000000 1.000000 +vn 0.000000 -0.737892 0.674918 +v 159.003891 157.499252 45.356159 1.000000 1.000000 1.000000 +vn -0.153387 0.625710 0.764826 +v 159.462250 161.043411 45.356159 1.000000 1.000000 1.000000 +vn 0.595334 0.266300 0.758065 +v 157.147354 162.251755 45.356159 1.000000 1.000000 1.000000 +vn 0.654062 -0.000001 0.756441 +v 156.943924 163.220123 45.356159 1.000000 1.000000 1.000000 +vn 0.133644 0.012492 0.990951 +v 145.252319 163.613617 45.356159 1.000000 1.000000 1.000000 +vn 0.595336 -0.266299 0.758063 +v 157.147354 164.188477 45.356159 1.000000 1.000000 1.000000 +vn 0.369265 0.158468 0.915714 +v 145.075928 164.258255 45.369957 1.000000 1.000000 1.000000 +vn 0.090074 0.039566 0.995149 +v 145.128708 164.284760 45.356159 1.000000 1.000000 1.000000 +vn 0.156031 -0.313336 0.936736 +v 144.615005 161.646194 45.366959 1.000000 1.000000 1.000000 +vn 0.286369 -0.571660 0.768894 +v 144.594406 161.693619 45.398560 1.000000 1.000000 1.000000 +vn 0.075573 -0.354801 0.931883 +v 144.389709 161.573624 45.367760 1.000000 1.000000 1.000000 +vn 0.158208 -0.770702 0.617243 +v 144.374252 161.668518 45.454559 1.000000 1.000000 1.000000 +vn 0.135743 -0.644220 0.752698 +v 144.380692 161.625259 45.401360 1.000000 1.000000 1.000000 +vn 0.353840 -0.705881 0.613620 +v 144.577667 161.734100 45.448776 1.000000 1.000000 1.000000 +vn 0.033995 -0.681166 0.731339 +v 144.217178 161.614090 45.405560 1.000000 1.000000 1.000000 +vn 0.027024 -0.558805 0.828859 +v 144.217178 161.587585 45.387157 1.000000 1.000000 1.000000 +vn 0.057232 0.066132 0.996168 +v 144.791397 164.745224 45.356159 1.000000 1.000000 1.000000 +vn 0.048745 0.720043 0.692215 +v 159.003891 170.127029 45.356159 1.000000 1.000000 1.000000 +vn 0.235475 0.262322 0.935809 +v 144.761795 164.700577 45.366959 1.000000 1.000000 1.000000 +vn 0.031365 0.082953 0.996060 +v 144.573807 164.872192 45.356159 1.000000 1.000000 1.000000 +vn 0.379974 0.197579 0.903650 +v 152.566498 170.127029 45.356159 1.000000 1.000000 1.000000 +vn 0.421736 -0.491928 0.761673 +v 157.718994 164.965683 45.356159 1.000000 1.000000 1.000000 +vn 0.153391 -0.625707 0.764828 +v 158.545547 165.396851 45.356159 1.000000 1.000000 1.000000 +vn 0.195848 0.708373 0.678124 +v 160.583633 169.912155 45.356159 1.000000 1.000000 1.000000 +vn -0.153391 -0.625707 0.764828 +v 159.462250 165.396851 45.356159 1.000000 1.000000 1.000000 +vn 0.374081 0.631699 0.678984 +v 162.064240 169.278671 45.356159 1.000000 1.000000 1.000000 +vn -0.421736 -0.491928 0.761673 +v 160.288803 164.965683 45.356159 1.000000 1.000000 1.000000 +vn 0.521010 0.515867 0.680022 +v 163.354294 168.267044 45.356159 1.000000 1.000000 1.000000 +vn -0.595336 -0.266294 0.758065 +v 160.860443 164.188477 45.356159 1.000000 1.000000 1.000000 +vn 0.630289 0.372888 0.680949 +v 164.372696 166.941483 45.356159 1.000000 1.000000 1.000000 +vn 0.699772 0.213522 0.681710 +v 165.056351 165.382889 45.356159 1.000000 1.000000 1.000000 +vn -0.654067 -0.000001 0.756437 +v 161.063858 163.220123 45.356159 1.000000 1.000000 1.000000 +vn 0.729934 0.046030 0.681966 +v 165.362762 163.688950 45.356159 1.000000 1.000000 1.000000 +vn 0.720993 -0.123279 0.681888 +v 165.271347 161.965714 45.356159 1.000000 1.000000 1.000000 +vn -0.595334 0.266295 0.758067 +v 160.860443 162.251755 45.356159 1.000000 1.000000 1.000000 +vn 0.668988 -0.311019 0.675072 +v 164.788544 160.322021 45.356159 1.000000 1.000000 1.000000 +vn 0.294037 -0.686674 0.664847 +v 164.269684 159.789001 45.356159 1.000000 1.000000 1.000000 +vn 0.532333 -0.521416 0.666894 +v 164.576126 160.001083 45.356159 1.000000 1.000000 1.000000 +vn 0.074109 -0.724845 0.684915 +v 163.911774 159.715042 45.356159 1.000000 1.000000 1.000000 +vn 0.077197 -0.675193 0.733591 +v 163.624664 159.715042 45.356159 1.000000 1.000000 1.000000 +vn 0.280505 -0.587384 0.759142 +v 163.233276 159.624359 45.356159 1.000000 1.000000 1.000000 +vn 0.449612 -0.535171 0.715151 +v 162.910110 159.371796 45.356159 1.000000 1.000000 1.000000 +vn -0.421730 0.491932 0.761674 +v 160.288803 161.474564 45.356159 1.000000 1.000000 1.000000 +vn 0.410149 -0.611911 0.676271 +v 161.787430 158.358780 45.356159 1.000000 1.000000 1.000000 +vn 0.216950 -0.704907 0.675307 +v 160.451019 157.718323 45.356159 1.000000 1.000000 1.000000 +vn 0.008724 0.097133 0.995233 +v 144.217178 164.940567 45.356159 1.000000 1.000000 1.000000 +vn 0.034326 0.375340 0.926251 +v 144.217178 164.880569 45.368759 1.000000 1.000000 1.000000 +vn 0.123276 0.327312 0.936840 +v 144.555786 164.820572 45.367157 1.000000 1.000000 1.000000 +vn -0.004779 0.100070 0.994969 +v 141.603592 164.940567 45.356159 1.000000 1.000000 1.000000 +vn -0.016449 0.381096 0.924389 +v 141.603592 164.880569 45.368759 1.000000 1.000000 1.000000 +vn -0.074474 0.351867 0.933083 +v 141.431061 164.868011 45.367760 1.000000 1.000000 1.000000 +vn -0.019057 0.091753 0.995599 +v 141.422058 164.923828 45.356159 1.000000 1.000000 1.000000 +vn -0.040033 0.080517 0.995949 +v 141.185165 164.844299 45.356159 1.000000 1.000000 1.000000 +vn -0.156998 0.313156 0.936635 +v 141.205765 164.794052 45.366959 1.000000 1.000000 1.000000 +vn -0.061958 0.061015 0.996212 +v 140.974014 164.699188 45.356159 1.000000 1.000000 1.000000 +vn -0.256349 0.246799 0.934546 +v 141.007492 164.655914 45.367157 1.000000 1.000000 1.000000 +vn 0.225265 0.596707 0.770193 +v 144.539047 164.771729 45.398956 1.000000 1.000000 1.000000 +vn 0.283162 0.738290 0.612166 +v 144.524887 164.729874 45.449558 1.000000 1.000000 1.000000 +vn 0.213664 0.745410 0.631437 +v 144.477249 164.316864 46.026958 1.000000 1.000000 1.000000 +vn -0.141620 0.150240 0.978454 +v 141.749084 163.587097 46.556160 1.000000 1.000000 1.000000 +vn -0.126178 0.542205 0.830718 +v 141.749084 164.092209 46.394958 1.000000 1.000000 1.000000 +vn -0.138469 0.317358 0.938142 +v 141.749084 164.089417 46.395958 1.000000 1.000000 1.000000 +vn 0.098632 0.793225 0.600888 +v 144.071701 164.496857 45.948959 1.000000 1.000000 1.000000 +vn 0.082914 0.813885 0.575080 +v 144.217178 164.780106 45.463360 1.000000 1.000000 1.000000 +vn -0.105414 0.799034 0.591973 +v 141.749084 164.496857 45.948959 1.000000 1.000000 1.000000 +vn -0.058719 0.805061 0.590279 +v 141.603592 164.780106 45.463360 1.000000 1.000000 1.000000 +vn -0.033995 0.681166 0.731339 +v 141.603592 164.826157 45.405560 1.000000 1.000000 1.000000 +vn 0.064698 0.678298 0.731933 +v 144.217178 164.826157 45.405560 1.000000 1.000000 1.000000 +vn -0.225327 0.753608 0.617497 +v 141.343521 164.316864 46.026958 1.000000 1.000000 1.000000 +vn -0.158208 0.770715 0.617226 +v 141.446518 164.771729 45.454559 1.000000 1.000000 1.000000 +vn -0.469153 0.449624 0.760088 +v 141.343521 164.055923 46.284958 1.000000 1.000000 1.000000 +vn -0.287985 0.147529 0.946203 +v 141.346100 163.587097 46.435356 1.000000 1.000000 1.000000 +vn -0.501334 0.132127 0.855106 +v 141.343521 163.587097 46.434559 1.000000 1.000000 1.000000 +vn -0.424674 0.665368 0.613953 +v 141.317780 164.305695 46.031960 1.000000 1.000000 1.000000 +vn -0.780322 0.316519 0.539364 +v 140.994614 163.952667 45.970757 1.000000 1.000000 1.000000 +vn -0.715577 0.108841 0.690003 +v 140.998474 163.587097 46.091560 1.000000 1.000000 1.000000 +vn -0.686146 0.528806 0.499568 +v 140.998474 164.012665 45.911160 1.000000 1.000000 1.000000 +vn -0.580802 0.564701 0.586330 +v 141.064133 164.581970 45.450359 1.000000 1.000000 1.000000 +vn -0.454935 0.663524 0.593945 +v 141.146530 164.639175 45.449558 1.000000 1.000000 1.000000 +vn -0.822025 0.350053 0.449151 +v 140.966293 163.983383 45.898956 1.000000 1.000000 1.000000 +vn -0.734818 0.446425 0.510634 +v 140.851700 164.216400 45.474758 1.000000 1.000000 1.000000 +vn -0.471169 0.452086 0.757376 +v 141.038391 164.615448 45.399361 1.000000 1.000000 1.000000 +vn -0.353890 0.705968 0.613491 +v 141.243103 164.706161 45.448776 1.000000 1.000000 1.000000 +vn -0.286895 0.571075 0.769132 +v 141.226364 164.746613 45.398560 1.000000 1.000000 1.000000 +vn -0.134534 0.639983 0.756520 +v 141.440079 164.814987 45.401360 1.000000 1.000000 1.000000 +vn -0.025854 0.558246 0.829273 +v 141.603592 164.852661 45.387157 1.000000 1.000000 1.000000 +vn 0.053026 0.558094 0.828082 +v 144.217178 164.852661 45.387157 1.000000 1.000000 1.000000 +vn -0.681253 0.258078 0.685048 +v 140.764160 164.148026 45.413757 1.000000 1.000000 1.000000 +vn -0.799565 0.317266 0.509939 +v 140.804062 164.132675 45.480358 1.000000 1.000000 1.000000 +vn -0.903241 0.162889 0.397017 +v 140.940536 163.933136 45.858559 1.000000 1.000000 1.000000 +vn -0.918666 0.079353 0.386982 +v 140.743561 163.613617 45.529358 1.000000 1.000000 1.000000 +vn -0.926816 0.059078 0.370840 +v 140.757721 163.587097 45.574558 1.000000 1.000000 1.000000 +vn -0.926745 -0.065647 0.369911 +v 140.757721 162.853149 45.574558 1.000000 1.000000 1.000000 +vn -0.822088 0.089752 0.562241 +v 140.994614 163.587097 46.087357 1.000000 1.000000 1.000000 +vn -0.822192 -0.089951 0.562058 +v 140.994614 162.853149 46.087357 1.000000 1.000000 1.000000 +vn -0.916490 -0.097959 0.387880 +v 140.743561 162.826645 45.529358 1.000000 1.000000 1.000000 +vn -0.905773 -0.148698 0.396817 +v 140.940536 162.507111 45.858559 1.000000 1.000000 1.000000 +vn -0.715576 -0.108839 0.690004 +v 140.998474 162.853149 46.091560 1.000000 1.000000 1.000000 +vn -0.780989 -0.315670 0.538896 +v 140.994614 162.487564 45.970757 1.000000 1.000000 1.000000 +vn -0.818647 -0.341744 0.461551 +v 140.966293 162.456879 45.898956 1.000000 1.000000 1.000000 +vn -0.680811 -0.530791 0.504735 +v 140.998474 162.427567 45.911160 1.000000 1.000000 1.000000 +vn -0.680079 -0.504927 0.531546 +v 140.840118 162.211288 45.472580 1.000000 1.000000 1.000000 +vn -0.776155 -0.361055 0.516936 +v 140.831100 162.223862 45.473358 1.000000 1.000000 1.000000 +vn -0.658632 -0.279267 0.698723 +v 140.792480 162.205719 45.410358 1.000000 1.000000 1.000000 +vn -0.813992 -0.076991 0.575751 +v 140.701065 162.826645 45.437958 1.000000 1.000000 1.000000 +vn -0.499180 -0.047610 0.865189 +v 140.640549 162.826645 45.377357 1.000000 1.000000 1.000000 +vn -0.815914 0.057650 0.575292 +v 140.701065 163.613617 45.437958 1.000000 1.000000 1.000000 +vn -0.502483 0.036258 0.863826 +v 140.640549 163.613617 45.377357 1.000000 1.000000 1.000000 +vn -0.389227 0.148286 0.909128 +v 140.712662 164.167557 45.370956 1.000000 1.000000 1.000000 +vn 0.141597 0.150036 -0.978488 +v 141.749084 162.853149 45.856159 1.000000 1.000000 1.000000 +vn -0.141606 0.150036 -0.978487 +v 144.071701 162.853149 45.856159 1.000000 1.000000 1.000000 +vn 0.138142 0.344829 -0.928445 +v 141.749084 162.557343 45.761959 1.000000 1.000000 1.000000 +vn 0.288181 0.147499 -0.946148 +v 141.512177 162.853149 45.785156 1.000000 1.000000 1.000000 +vn -0.138152 0.344828 -0.928444 +v 144.071701 162.557343 45.761959 1.000000 1.000000 1.000000 +vn -0.288190 0.147500 -0.946145 +v 144.308594 162.853149 45.785156 1.000000 1.000000 1.000000 +vn 0.125185 0.567245 -0.813979 +v 141.749084 162.555939 45.761360 1.000000 1.000000 1.000000 +vn 0.469704 0.449849 -0.759615 +v 141.510895 162.576874 45.696556 1.000000 1.000000 1.000000 +vn 0.501244 0.132199 -0.855148 +v 141.510895 162.853149 45.784760 1.000000 1.000000 1.000000 +vn 0.435697 0.659742 -0.612298 +v 141.495438 162.430359 45.547760 1.000000 1.000000 1.000000 +vn 0.231132 0.753518 -0.615458 +v 141.510895 162.423386 45.544960 1.000000 1.000000 1.000000 +vn 0.103738 0.799112 -0.592164 +v 141.749084 162.318741 45.498959 1.000000 1.000000 1.000000 +vn 0.066230 0.812590 -0.579061 +v 141.603592 162.034088 45.013359 1.000000 1.000000 1.000000 +vn 0.192237 0.766410 -0.612912 +v 141.507034 162.025726 44.984959 1.000000 1.000000 1.000000 +vn 0.417849 0.667519 -0.616296 +v 141.324203 162.094086 44.967758 1.000000 1.000000 1.000000 +vn 0.540574 0.597749 -0.592009 +v 141.277863 162.128967 44.970158 1.000000 1.000000 1.000000 +vn 0.298866 0.560057 -0.772668 +v 141.379562 162.053619 44.964558 1.000000 1.000000 1.000000 +vn 0.438413 0.482901 -0.758024 +v 141.190308 162.015945 44.800159 1.000000 1.000000 1.000000 +vn 0.288937 0.572415 -0.767369 +v 141.322922 161.921066 44.797558 1.000000 1.000000 1.000000 +vn 0.031719 0.676226 -0.736011 +v 141.603592 161.883392 44.820759 1.000000 1.000000 1.000000 +vn 0.134047 0.635814 -0.760113 +v 141.483856 161.879211 44.807159 1.000000 1.000000 1.000000 +vn 0.159693 0.314187 -0.935834 +v 141.255966 161.764786 44.692158 1.000000 1.000000 1.000000 +vn 0.237470 0.270774 -0.932893 +v 141.087311 161.882004 44.692757 1.000000 1.000000 1.000000 +vn 0.316522 0.213000 -0.924362 +v 140.950836 162.056412 44.696758 1.000000 1.000000 1.000000 +vn 0.570325 0.380891 -0.727771 +v 141.087311 162.161072 44.814957 1.000000 1.000000 1.000000 +vn 0.066736 0.066747 -0.995536 +v 140.931519 161.782928 44.656158 1.000000 1.000000 1.000000 +vn 0.060558 0.082097 -0.994783 +v 140.980453 161.745255 44.656158 1.000000 1.000000 1.000000 +vn 0.093513 0.066332 -0.993406 +v 140.813080 161.950378 44.656158 1.000000 1.000000 1.000000 +vn 0.391427 0.142058 -0.909178 +v 140.851700 162.296417 44.704376 1.000000 1.000000 1.000000 +vn 0.091182 0.049762 -0.994590 +v 140.730682 162.066193 44.656158 1.000000 1.000000 1.000000 +vn 0.115242 0.041861 -0.992455 +v 140.674026 162.222458 44.656158 1.000000 1.000000 1.000000 +vn 0.109562 0.028974 -0.993558 +v 140.618668 162.374557 44.656158 1.000000 1.000000 1.000000 +vn 0.500358 0.033212 -0.865182 +v 140.806641 162.826645 44.726776 1.000000 1.000000 1.000000 +vn 0.039260 0.077270 -0.996237 +v 141.185165 161.593155 44.656158 1.000000 1.000000 1.000000 +vn 0.077392 0.355969 -0.931288 +v 141.456818 161.704788 44.694580 1.000000 1.000000 1.000000 +vn 0.027664 0.098491 -0.994753 +v 141.428497 161.522003 44.656158 1.000000 1.000000 1.000000 +vn 0.015541 0.093984 -0.995452 +v 141.485138 161.506653 44.656158 1.000000 1.000000 1.000000 +vn 0.016803 0.383412 -0.923424 +v 141.603592 161.699219 44.698158 1.000000 1.000000 1.000000 +vn 0.020289 0.554132 -0.832182 +v 141.603592 161.791290 44.759357 1.000000 1.000000 1.000000 +vn 0.002935 0.101623 -0.994819 +v 141.603592 161.499680 44.656158 1.000000 1.000000 1.000000 +vn -0.028420 0.549925 -0.834731 +v 144.217178 161.791290 44.759357 1.000000 1.000000 1.000000 +vn -0.018442 0.385549 -0.922503 +v 144.217178 161.699219 44.698158 1.000000 1.000000 1.000000 +vn -0.029565 0.683245 -0.729590 +v 144.217178 161.883392 44.820759 1.000000 1.000000 1.000000 +vn -0.047128 0.822486 -0.566830 +v 144.217178 162.034088 45.013359 1.000000 1.000000 1.000000 +vn -0.140945 0.639069 -0.756125 +v 144.340775 161.879211 44.806759 1.000000 1.000000 1.000000 +vn -0.075106 0.354855 -0.931900 +v 144.367813 161.704788 44.694580 1.000000 1.000000 1.000000 +vn -0.007562 0.098274 -0.995131 +v 144.217178 161.499680 44.656158 1.000000 1.000000 1.000000 +vn -0.016492 0.104435 -0.994395 +v 144.397430 161.528976 44.656158 1.000000 1.000000 1.000000 +vn -0.029963 0.082852 -0.996111 +v 144.537766 161.551300 44.656158 1.000000 1.000000 1.000000 +vn -0.157706 0.313850 -0.936284 +v 144.564804 161.764786 44.692158 1.000000 1.000000 1.000000 +vn -0.285570 0.572880 -0.768283 +v 144.497849 161.921066 44.797558 1.000000 1.000000 1.000000 +vn 0.654043 -0.000001 -0.756457 +v 156.943924 163.220123 44.656158 1.000000 1.000000 1.000000 +vn 0.595338 -0.266300 -0.758062 +v 157.147354 164.188477 44.656158 1.000000 1.000000 1.000000 +vn -0.051651 0.089847 -0.994615 +v 144.631744 161.605728 44.656158 1.000000 1.000000 1.000000 +vn 0.595334 0.266300 -0.758065 +v 157.147354 162.251755 44.656158 1.000000 1.000000 1.000000 +vn 0.379973 -0.197579 -0.903650 +v 152.566498 159.715042 44.656158 1.000000 1.000000 1.000000 +vn -0.077197 -0.675193 -0.733591 +v 154.383133 159.715042 44.656158 1.000000 1.000000 1.000000 +vn -0.379974 -0.197580 -0.903649 +v 133.254272 159.715042 44.656158 1.000000 1.000000 1.000000 +vn 0.077197 -0.675192 -0.733591 +v 131.437637 159.715042 44.656158 1.000000 1.000000 1.000000 +vn 0.280506 -0.587384 -0.759142 +v 131.046249 159.624359 44.656158 1.000000 1.000000 1.000000 +vn 0.138641 0.007429 -0.990315 +v 140.568451 162.826645 44.656158 1.000000 1.000000 1.000000 +vn 0.449614 -0.535169 -0.715152 +v 130.723083 159.371796 44.656158 1.000000 1.000000 1.000000 +vn -0.595324 0.266485 -0.758008 +v 128.672897 162.251755 44.656158 1.000000 1.000000 1.000000 +vn 0.142293 -0.002075 -0.989822 +v 140.568451 163.613617 44.656158 1.000000 1.000000 1.000000 +vn 0.131666 -0.015199 -0.991178 +v 140.572311 163.744766 44.656158 1.000000 1.000000 1.000000 +vn 0.134762 -0.023246 -0.990605 +v 140.603226 163.923370 44.656158 1.000000 1.000000 1.000000 +vn 0.099836 -0.036810 -0.994323 +v 140.641846 164.148026 44.656158 1.000000 1.000000 1.000000 +vn 0.081722 -0.052254 -0.995284 +v 140.791183 164.478714 44.656158 1.000000 1.000000 1.000000 +vn 0.078350 -0.069893 -0.994473 +v 140.977875 164.693588 44.656158 1.000000 1.000000 1.000000 +vn 0.056291 -0.070464 -0.995925 +v 141.015213 164.735458 44.656158 1.000000 1.000000 1.000000 +vn 0.051641 -0.089836 -0.994617 +v 141.189026 164.834534 44.656158 1.000000 1.000000 1.000000 +vn 0.029956 -0.082823 -0.996114 +v 141.283005 164.888947 44.656158 1.000000 1.000000 1.000000 +vn -0.653899 0.000008 -0.756582 +v 128.876846 163.220123 44.656178 1.000000 1.000000 1.000000 +vn -0.595337 -0.266483 -0.757998 +v 128.672897 164.188477 44.656178 1.000000 1.000000 1.000000 +vn 0.007563 -0.098280 -0.995130 +v 141.603592 164.940567 44.656158 1.000000 1.000000 1.000000 +vn -0.421825 -0.491902 -0.761640 +v 128.101257 164.965683 44.656178 1.000000 1.000000 1.000000 +vn -0.002363 -0.102014 -0.994780 +v 144.217178 164.940567 44.656158 1.000000 1.000000 1.000000 +vn -0.230702 0.408902 -0.882936 +v 133.254272 170.127029 44.656178 1.000000 1.000000 1.000000 +vn -0.048745 0.720043 -0.692216 +v 126.816872 170.127029 44.656178 1.000000 1.000000 1.000000 +vn -0.153462 -0.625650 -0.764861 +v 127.275223 165.396851 44.656178 1.000000 1.000000 1.000000 +vn -0.195813 0.708373 -0.678133 +v 125.237137 169.912155 44.656178 1.000000 1.000000 1.000000 +vn 0.153461 -0.625650 -0.764860 +v 126.358528 165.396851 44.656178 1.000000 1.000000 1.000000 +vn -0.374055 0.631724 -0.678975 +v 123.756149 169.278671 44.656178 1.000000 1.000000 1.000000 +vn 0.421823 -0.491903 -0.761641 +v 125.532486 164.965683 44.656178 1.000000 1.000000 1.000000 +vn -0.520990 0.515880 -0.680027 +v 122.466087 168.267044 44.656178 1.000000 1.000000 1.000000 +vn 0.595336 -0.266480 -0.758000 +v 124.960846 164.188477 44.656178 1.000000 1.000000 1.000000 +vn -0.630320 0.372872 -0.680928 +v 121.447563 166.941483 44.656178 1.000000 1.000000 1.000000 +vn 0.653916 -0.000001 -0.756567 +v 124.756905 163.220123 44.656178 1.000000 1.000000 1.000000 +vn -0.699861 0.213329 -0.681679 +v 120.764168 165.382889 44.656178 1.000000 1.000000 1.000000 +vn 0.595333 0.266481 -0.758002 +v 124.960846 162.251755 44.656178 1.000000 1.000000 1.000000 +vn -0.720995 -0.123144 -0.681910 +v 120.549805 161.965714 44.656178 1.000000 1.000000 1.000000 +vn -0.729893 0.045895 -0.682019 +v 120.458519 163.688950 44.656178 1.000000 1.000000 1.000000 +vn -0.669075 -0.310847 -0.675065 +v 121.032089 160.322021 44.656178 1.000000 1.000000 1.000000 +vn -0.532336 -0.521487 -0.666835 +v 121.244400 160.001083 44.656178 1.000000 1.000000 1.000000 +vn -0.293966 -0.686650 -0.664903 +v 121.551079 159.789001 44.656178 1.000000 1.000000 1.000000 +vn -0.074188 -0.724858 -0.684892 +v 121.908607 159.715042 44.656178 1.000000 1.000000 1.000000 +vn -0.077337 -0.675120 -0.733643 +v 122.196495 159.715042 44.656178 1.000000 1.000000 1.000000 +vn -0.280438 -0.587642 -0.758967 +v 122.587112 159.624359 44.656178 1.000000 1.000000 1.000000 +vn -0.449260 -0.535336 -0.715248 +v 122.910919 159.371796 44.656178 1.000000 1.000000 1.000000 +vn -0.410132 -0.611903 -0.676289 +v 124.033859 158.358780 44.656178 1.000000 1.000000 1.000000 +vn 0.421816 0.491909 -0.761641 +v 125.532486 161.474564 44.656178 1.000000 1.000000 1.000000 +vn -0.216990 -0.704896 -0.675305 +v 125.370003 157.718323 44.656158 1.000000 1.000000 1.000000 +vn 0.153451 0.625659 -0.764856 +v 126.358528 161.043411 44.656178 1.000000 1.000000 1.000000 +vn -0.000001 -0.737896 -0.674914 +v 126.816872 157.499252 44.656158 1.000000 1.000000 1.000000 +vn -0.153465 0.625650 -0.764860 +v 127.275223 161.043411 44.656158 1.000000 1.000000 1.000000 +vn 0.216929 -0.704903 -0.675317 +v 128.263748 157.718323 44.656158 1.000000 1.000000 1.000000 +vn 0.410133 -0.611932 -0.676262 +v 129.600418 158.358780 44.656158 1.000000 1.000000 1.000000 +vn -0.421818 0.491907 -0.761641 +v 128.101257 161.474564 44.656158 1.000000 1.000000 1.000000 +vn 0.421736 -0.491928 -0.761673 +v 157.718994 164.965683 44.656158 1.000000 1.000000 1.000000 +vn 0.230708 0.408910 -0.882931 +v 152.566498 170.127029 44.656158 1.000000 1.000000 1.000000 +vn -0.029134 -0.099001 -0.994661 +v 144.392273 164.918243 44.656158 1.000000 1.000000 1.000000 +vn -0.015753 -0.092606 -0.995578 +v 144.335632 164.934998 44.656158 1.000000 1.000000 1.000000 +vn 0.153391 -0.625707 -0.764828 +v 158.545547 165.396851 44.656158 1.000000 1.000000 1.000000 +vn 0.048745 0.720043 -0.692216 +v 159.003891 170.127029 44.656158 1.000000 1.000000 1.000000 +vn -0.153391 -0.625707 -0.764828 +v 159.462250 165.396851 44.656158 1.000000 1.000000 1.000000 +vn 0.195848 0.708373 -0.678124 +v 160.583633 169.912155 44.656158 1.000000 1.000000 1.000000 +vn 0.374081 0.631699 -0.678985 +v 162.064240 169.278671 44.656158 1.000000 1.000000 1.000000 +vn -0.421736 -0.491928 -0.761673 +v 160.288803 164.965683 44.656158 1.000000 1.000000 1.000000 +vn 0.521010 0.515868 -0.680022 +v 163.354294 168.267044 44.656158 1.000000 1.000000 1.000000 +vn -0.595336 -0.266294 -0.758065 +v 160.860443 164.188477 44.656158 1.000000 1.000000 1.000000 +vn 0.630289 0.372888 -0.680949 +v 164.372696 166.941483 44.656158 1.000000 1.000000 1.000000 +vn 0.699772 0.213522 -0.681710 +v 165.056351 165.382889 44.656158 1.000000 1.000000 1.000000 +vn -0.654067 -0.000001 -0.756437 +v 161.063858 163.220123 44.656158 1.000000 1.000000 1.000000 +vn 0.729934 0.046030 -0.681966 +v 165.362762 163.688950 44.656158 1.000000 1.000000 1.000000 +vn 0.720993 -0.123279 -0.681888 +v 165.271347 161.965714 44.656158 1.000000 1.000000 1.000000 +vn -0.595334 0.266295 -0.758067 +v 160.860443 162.251755 44.656158 1.000000 1.000000 1.000000 +vn 0.668988 -0.311019 -0.675072 +v 164.788544 160.322021 44.656158 1.000000 1.000000 1.000000 +vn 0.532333 -0.521416 -0.666894 +v 164.576126 160.001083 44.656158 1.000000 1.000000 1.000000 +vn 0.294037 -0.686674 -0.664847 +v 164.269684 159.789001 44.656158 1.000000 1.000000 1.000000 +vn 0.074109 -0.724845 -0.684914 +v 163.911774 159.715042 44.656158 1.000000 1.000000 1.000000 +vn 0.077197 -0.675192 -0.733591 +v 163.624664 159.715042 44.656158 1.000000 1.000000 1.000000 +vn 0.280506 -0.587384 -0.759142 +v 163.233276 159.624359 44.656158 1.000000 1.000000 1.000000 +vn 0.449612 -0.535171 -0.715151 +v 162.910110 159.371796 44.656158 1.000000 1.000000 1.000000 +vn -0.421730 0.491932 -0.761674 +v 160.288803 161.474564 44.656158 1.000000 1.000000 1.000000 +vn 0.410149 -0.611911 -0.676271 +v 161.787430 158.358780 44.656158 1.000000 1.000000 1.000000 +vn -0.153387 0.625710 -0.764826 +v 159.462250 161.043411 44.656158 1.000000 1.000000 1.000000 +vn 0.216950 -0.704906 -0.675307 +v 160.451019 157.718323 44.656158 1.000000 1.000000 1.000000 +vn 0.000000 -0.737892 -0.674918 +v 159.003891 157.499252 44.656158 1.000000 1.000000 1.000000 +vn 0.153387 0.625710 -0.764826 +v 158.545547 161.043411 44.656158 1.000000 1.000000 1.000000 +vn -0.216951 -0.704906 -0.675307 +v 157.556763 157.718323 44.656158 1.000000 1.000000 1.000000 +vn 0.421730 0.491932 -0.761674 +v 157.718994 161.474564 44.656158 1.000000 1.000000 1.000000 +vn -0.410150 -0.611910 -0.676271 +v 156.220367 158.358780 44.656158 1.000000 1.000000 1.000000 +vn -0.449612 -0.535171 -0.715151 +v 155.097687 159.371796 44.656158 1.000000 1.000000 1.000000 +vn -0.280505 -0.587384 -0.759142 +v 154.774521 159.624359 44.656158 1.000000 1.000000 1.000000 +vn -0.039263 -0.077277 -0.996236 +v 144.635605 164.847076 44.656158 1.000000 1.000000 1.000000 +vn -0.060166 -0.083150 -0.994719 +v 144.840317 164.694992 44.656158 1.000000 1.000000 1.000000 +vn -0.159693 -0.314193 -0.935832 +v 144.564804 164.675461 44.692158 1.000000 1.000000 1.000000 +vn -0.077607 -0.355649 -0.931392 +v 144.363953 164.735458 44.694580 1.000000 1.000000 1.000000 +vn -0.065614 -0.066508 -0.995626 +v 144.889252 164.658707 44.656158 1.000000 1.000000 1.000000 +vn -0.237154 -0.270727 -0.932987 +v 144.733459 164.558243 44.692757 1.000000 1.000000 1.000000 +vn -0.134048 -0.635832 -0.760098 +v 144.336914 164.561035 44.807159 1.000000 1.000000 1.000000 +vn -0.288955 -0.572404 -0.767371 +v 144.497849 164.519180 44.797558 1.000000 1.000000 1.000000 +vn -0.016610 -0.383126 -0.923547 +v 144.217178 164.741043 44.698158 1.000000 1.000000 1.000000 +vn 0.018458 -0.385479 -0.922532 +v 141.603592 164.741043 44.698158 1.000000 1.000000 1.000000 +vn 0.016490 -0.104410 -0.994398 +v 141.423340 164.911270 44.656158 1.000000 1.000000 1.000000 +vn 0.075109 -0.354846 -0.931903 +v 141.452957 164.735458 44.694580 1.000000 1.000000 1.000000 +vn 0.157709 -0.313843 -0.936285 +v 141.255966 164.675461 44.692158 1.000000 1.000000 1.000000 +vn 0.243054 -0.269019 -0.931962 +v 141.084732 164.555450 44.692757 1.000000 1.000000 1.000000 +vn 0.327497 -0.202037 -0.922999 +v 140.949554 164.379639 44.696758 1.000000 1.000000 1.000000 +vn -0.316506 -0.212842 -0.924404 +v 144.869934 164.383835 44.696758 1.000000 1.000000 1.000000 +vn -0.438420 -0.482909 -0.758015 +v 144.630463 164.424286 44.800159 1.000000 1.000000 1.000000 +vn -0.093759 -0.066229 -0.993390 +v 145.007690 164.489883 44.656158 1.000000 1.000000 1.000000 +vn -0.091179 -0.049759 -0.994591 +v 145.090088 164.374069 44.656158 1.000000 1.000000 1.000000 +vn -0.115244 -0.041862 -0.992455 +v 145.146744 164.217789 44.656158 1.000000 1.000000 1.000000 +vn -0.391428 -0.142057 -0.909178 +v 144.969070 164.143829 44.704376 1.000000 1.000000 1.000000 +vn -0.109560 -0.028975 -0.993558 +v 145.202103 164.065704 44.656158 1.000000 1.000000 1.000000 +vn -0.817047 -0.049626 -0.574431 +v 144.809418 163.613617 44.928757 1.000000 1.000000 1.000000 +vn -0.688610 -0.243789 -0.682922 +v 144.802979 164.074066 44.844158 1.000000 1.000000 1.000000 +vn -0.500357 -0.033213 -0.865182 +v 145.014130 163.613617 44.726776 1.000000 1.000000 1.000000 +vn -0.570311 -0.380917 -0.727769 +v 144.733459 164.279190 44.814957 1.000000 1.000000 1.000000 +vn -0.138641 -0.007429 -0.990315 +v 145.252319 163.613617 44.656158 1.000000 1.000000 1.000000 +vn -0.816674 0.038577 -0.575809 +v 144.809418 162.826645 44.928757 1.000000 1.000000 1.000000 +vn -0.500905 0.024278 -0.865161 +v 145.014130 162.826645 44.726776 1.000000 1.000000 1.000000 +vn -0.142294 0.002075 -0.989822 +v 145.252319 162.826645 44.656158 1.000000 1.000000 1.000000 +vn -0.748897 0.159925 -0.643100 +v 144.826157 162.589432 44.882359 1.000000 1.000000 1.000000 +vn -0.131666 0.015199 -0.991178 +v 145.248459 162.695480 44.656158 1.000000 1.000000 1.000000 +vn -0.444687 0.090858 -0.891066 +v 145.014130 162.554550 44.714359 1.000000 1.000000 1.000000 +vn -0.134762 0.023246 -0.990605 +v 145.217545 162.516876 44.656158 1.000000 1.000000 1.000000 +vn -0.099837 0.036810 -0.994323 +v 145.178925 162.292221 44.656158 1.000000 1.000000 1.000000 +vn -0.327492 0.202034 -0.923001 +v 144.871216 162.060593 44.696758 1.000000 1.000000 1.000000 +vn -0.081727 0.052255 -0.995284 +v 145.029587 161.961533 44.656158 1.000000 1.000000 1.000000 +vn -0.078338 0.069895 -0.994474 +v 144.842896 161.746643 44.656158 1.000000 1.000000 1.000000 +vn -0.243033 0.269017 -0.931968 +v 144.736038 161.884781 44.692757 1.000000 1.000000 1.000000 +vn -0.582478 0.345709 -0.735666 +v 144.734741 162.165253 44.815376 1.000000 1.000000 1.000000 +vn -0.056288 0.070474 -0.995924 +v 144.805557 161.704788 44.656158 1.000000 1.000000 1.000000 +vn -0.433597 0.486169 -0.758705 +v 144.631744 162.017349 44.800159 1.000000 1.000000 1.000000 +vn -0.713489 0.416683 -0.563302 +v 144.621445 162.251755 45.002159 1.000000 1.000000 1.000000 +vn -0.454708 0.663423 -0.594231 +v 144.496567 162.095490 44.967758 1.000000 1.000000 1.000000 +vn -0.526415 0.604947 -0.597434 +v 144.545486 162.130371 44.970360 1.000000 1.000000 1.000000 +vn -0.442763 0.660286 -0.606616 +v 144.325333 162.430359 45.547760 1.000000 1.000000 1.000000 +vn -0.801769 0.342561 -0.489712 +v 144.644623 162.387100 45.053558 1.000000 1.000000 1.000000 +vn -0.775171 0.315982 -0.547052 +v 144.514587 162.638275 45.511757 1.000000 1.000000 1.000000 +vn -0.462029 0.460710 -0.757809 +v 144.309875 162.576874 45.696556 1.000000 1.000000 1.000000 +vn -0.218992 0.746038 -0.628864 +v 144.309875 162.423386 45.544960 1.000000 1.000000 1.000000 +vn -0.674912 0.542435 -0.500258 +v 144.513306 162.603378 45.476776 1.000000 1.000000 1.000000 +vn -0.101014 0.793904 -0.599594 +v 144.071701 162.318741 45.498959 1.000000 1.000000 1.000000 +vn -0.193884 0.775639 -0.600660 +v 144.316315 162.025726 44.984360 1.000000 1.000000 1.000000 +vn -0.359184 0.707244 -0.608927 +v 144.441208 162.053619 44.964558 1.000000 1.000000 1.000000 +vn -0.130745 0.571456 -0.810151 +v 144.071701 162.555939 45.761360 1.000000 1.000000 1.000000 +vn -0.791799 0.096460 -0.603117 +v 144.513306 162.853149 45.582760 1.000000 1.000000 1.000000 +vn -0.501244 0.132198 -0.855148 +v 144.309875 162.853149 45.784760 1.000000 1.000000 1.000000 +vn -0.141606 -0.150036 -0.978487 +v 144.071701 163.587097 45.856159 1.000000 1.000000 1.000000 +vn -0.288189 -0.147499 -0.946145 +v 144.308594 163.587097 45.785156 1.000000 1.000000 1.000000 +vn -0.501244 -0.132199 -0.855148 +v 144.309875 163.587097 45.784760 1.000000 1.000000 1.000000 +vn -0.138110 -0.346650 -0.927771 +v 144.071701 163.882904 45.761959 1.000000 1.000000 1.000000 +vn -0.469701 -0.449856 -0.759612 +v 144.309875 163.863373 45.696556 1.000000 1.000000 1.000000 +vn -0.791799 -0.096459 -0.603117 +v 144.513306 163.587097 45.582760 1.000000 1.000000 1.000000 +vn -0.435697 -0.659742 -0.612298 +v 144.325333 164.009888 45.547760 1.000000 1.000000 1.000000 +vn -0.777137 -0.313443 -0.545721 +v 144.514587 163.801971 45.511757 1.000000 1.000000 1.000000 +vn -0.125131 -0.568854 -0.812864 +v 144.071701 163.884293 45.761360 1.000000 1.000000 1.000000 +vn -0.231131 -0.753514 -0.615464 +v 144.309875 164.016861 45.544960 1.000000 1.000000 1.000000 +vn -0.891094 0.070770 -0.448266 +v 144.514587 162.853149 45.580360 1.000000 1.000000 1.000000 +vn -0.891340 -0.071354 -0.447684 +v 144.514587 163.587097 45.580360 1.000000 1.000000 1.000000 +vn -0.931188 0.068613 -0.358025 +v 144.654922 162.853149 45.278759 1.000000 1.000000 1.000000 +vn -0.900698 0.161400 -0.403352 +v 144.548065 162.649429 45.445759 1.000000 1.000000 1.000000 +vn -0.930891 -0.061472 -0.360089 +v 144.654922 163.587097 45.278759 1.000000 1.000000 1.000000 +vn -0.919079 0.078283 -0.386221 +v 144.667801 162.826645 45.233559 1.000000 1.000000 1.000000 +vn -0.813915 0.350619 -0.463258 +v 144.532608 162.620132 45.469559 1.000000 1.000000 1.000000 +vn -0.873517 0.205680 -0.441208 +v 144.684525 162.615952 45.140556 1.000000 1.000000 1.000000 +vn -0.922744 -0.080890 -0.376828 +v 144.667801 163.613617 45.233559 1.000000 1.000000 1.000000 +vn -0.796677 -0.321595 -0.511745 +v 144.670364 164.018250 45.062157 1.000000 1.000000 1.000000 +vn -0.758175 -0.393433 -0.519982 +v 144.656219 164.065704 45.045357 1.000000 1.000000 1.000000 +vn -0.901513 -0.146208 -0.407306 +v 144.548065 163.790817 45.445759 1.000000 1.000000 1.000000 +vn -0.812133 -0.344203 -0.471132 +v 144.532608 163.820114 45.469559 1.000000 1.000000 1.000000 +vn -0.675081 -0.528576 -0.514657 +v 144.513306 163.836868 45.476776 1.000000 1.000000 1.000000 +vn -0.666331 -0.482809 -0.568241 +v 144.620163 164.191269 45.001358 1.000000 1.000000 1.000000 +vn -0.540567 -0.597762 -0.592003 +v 144.542908 164.311279 44.970158 1.000000 1.000000 1.000000 +vn -0.417854 -0.667541 -0.616269 +v 144.496567 164.346161 44.967758 1.000000 1.000000 1.000000 +vn -0.192221 -0.766415 -0.612910 +v 144.313736 164.414536 44.984959 1.000000 1.000000 1.000000 +vn -0.298910 -0.560135 -0.772594 +v 144.441208 164.386612 44.964558 1.000000 1.000000 1.000000 +vn 0.141597 -0.150036 -0.978488 +v 141.749084 163.587097 45.856159 1.000000 1.000000 1.000000 +vn 0.138103 -0.346650 -0.927772 +v 141.749084 163.882904 45.761959 1.000000 1.000000 1.000000 +vn 0.130667 -0.573059 -0.809030 +v 141.749084 163.884293 45.761360 1.000000 1.000000 1.000000 +vn -0.103743 -0.799104 -0.592174 +v 144.071701 164.121506 45.498959 1.000000 1.000000 1.000000 +vn 0.100998 -0.793896 -0.599607 +v 141.749084 164.121506 45.498959 1.000000 1.000000 1.000000 +vn 0.462015 -0.460716 -0.757815 +v 141.510895 163.863373 45.696556 1.000000 1.000000 1.000000 +vn 0.047063 -0.822501 -0.566813 +v 141.603592 164.406158 45.013359 1.000000 1.000000 1.000000 +vn -0.066171 -0.812591 -0.579066 +v 144.217178 164.406158 45.013359 1.000000 1.000000 1.000000 +vn -0.031699 -0.676254 -0.735986 +v 144.217178 164.556854 44.820759 1.000000 1.000000 1.000000 +vn 0.029563 -0.683272 -0.729565 +v 141.603592 164.556854 44.820759 1.000000 1.000000 1.000000 +vn -0.020257 -0.554119 -0.832191 +v 144.217178 164.648941 44.759357 1.000000 1.000000 1.000000 +vn 0.140941 -0.639076 -0.756120 +v 141.479996 164.561035 44.806759 1.000000 1.000000 1.000000 +vn 0.028415 -0.549900 -0.834747 +v 141.603592 164.648941 44.759357 1.000000 1.000000 1.000000 +vn 0.285351 -0.573576 -0.767845 +v 141.322922 164.519180 44.797558 1.000000 1.000000 1.000000 +vn 0.434471 -0.486272 -0.758138 +v 141.189026 164.422897 44.800159 1.000000 1.000000 1.000000 +vn 0.353122 -0.710174 -0.609063 +v 141.379562 164.386612 44.964558 1.000000 1.000000 1.000000 +vn 0.454975 -0.662540 -0.595012 +v 141.324203 164.346161 44.967758 1.000000 1.000000 1.000000 +vn 0.713501 -0.416661 -0.563303 +v 141.199326 164.188477 45.002159 1.000000 1.000000 1.000000 +vn 0.582477 -0.345712 -0.735666 +v 141.086029 164.274994 44.815376 1.000000 1.000000 1.000000 +vn 0.532491 -0.600062 -0.596974 +v 141.275284 164.309875 44.970360 1.000000 1.000000 1.000000 +vn 0.218578 -0.745889 -0.629184 +v 141.510895 164.016861 45.544960 1.000000 1.000000 1.000000 +vn 0.442837 -0.659949 -0.606928 +v 141.495438 164.009888 45.547760 1.000000 1.000000 1.000000 +vn 0.193909 -0.775649 -0.600640 +v 141.504456 164.414536 44.984360 1.000000 1.000000 1.000000 +vn 0.775171 -0.315982 -0.547052 +v 141.306183 163.801971 45.511757 1.000000 1.000000 1.000000 +vn 0.791799 -0.096460 -0.603117 +v 141.307465 163.587097 45.582760 1.000000 1.000000 1.000000 +vn 0.501244 -0.132198 -0.855148 +v 141.510895 163.587097 45.784760 1.000000 1.000000 1.000000 +vn 0.288181 -0.147500 -0.946148 +v 141.512177 163.587097 45.785156 1.000000 1.000000 1.000000 +vn 0.791799 0.096459 -0.603117 +v 141.307465 162.853149 45.582760 1.000000 1.000000 1.000000 +vn 0.891094 -0.070770 -0.448266 +v 141.306183 163.587097 45.580360 1.000000 1.000000 1.000000 +vn 0.891340 0.071354 -0.447684 +v 141.306183 162.853149 45.580360 1.000000 1.000000 1.000000 +vn 0.777137 0.313443 -0.545721 +v 141.306183 162.638275 45.511757 1.000000 1.000000 1.000000 +vn 0.931186 -0.068596 -0.358032 +v 141.165848 163.587097 45.278759 1.000000 1.000000 1.000000 +vn 0.900698 -0.161402 -0.403351 +v 141.272705 163.790817 45.445759 1.000000 1.000000 1.000000 +vn 0.930892 0.061475 -0.360086 +v 141.165848 162.853149 45.278759 1.000000 1.000000 1.000000 +vn 0.919074 -0.078287 -0.386231 +v 141.152969 163.613617 45.233559 1.000000 1.000000 1.000000 +vn 0.922756 0.080872 -0.376803 +v 141.152969 162.826645 45.233559 1.000000 1.000000 1.000000 +vn 0.901513 0.146209 -0.407305 +v 141.272705 162.649429 45.445759 1.000000 1.000000 1.000000 +vn 0.796641 0.321658 -0.511761 +v 141.150406 162.421997 45.062157 1.000000 1.000000 1.000000 +vn 0.817047 0.049625 -0.574431 +v 141.011353 162.826645 44.928757 1.000000 1.000000 1.000000 +vn 0.688603 0.243799 -0.682926 +v 141.017792 162.366180 44.844158 1.000000 1.000000 1.000000 +vn 0.873514 -0.205694 -0.441207 +v 141.136246 163.824295 45.140556 1.000000 1.000000 1.000000 +vn 0.816674 -0.038579 -0.575809 +v 141.011353 163.613617 44.928757 1.000000 1.000000 1.000000 +vn 0.758165 0.393461 -0.519976 +v 141.164551 162.374557 45.045357 1.000000 1.000000 1.000000 +vn 0.812133 0.344207 -0.471128 +v 141.288162 162.620132 45.469559 1.000000 1.000000 1.000000 +vn 0.675084 0.528577 -0.514653 +v 141.307465 162.603378 45.476776 1.000000 1.000000 1.000000 +vn 0.666357 0.482792 -0.568225 +v 141.200607 162.248978 45.001358 1.000000 1.000000 1.000000 +vn 0.500905 -0.024280 -0.865161 +v 140.806641 163.613617 44.726776 1.000000 1.000000 1.000000 +vn 0.748894 -0.159931 -0.643102 +v 140.994614 163.850815 44.882359 1.000000 1.000000 1.000000 +vn 0.444686 -0.090860 -0.891066 +v 140.806641 163.885696 44.714359 1.000000 1.000000 1.000000 +vn 0.801766 -0.342568 -0.489713 +v 141.176147 164.053131 45.053558 1.000000 1.000000 1.000000 +vn 0.674913 -0.542440 -0.500251 +v 141.307465 163.836868 45.476776 1.000000 1.000000 1.000000 +vn 0.813916 -0.350624 -0.463254 +v 141.288162 163.820114 45.469559 1.000000 1.000000 1.000000 +vn 0.736183 0.333970 0.588641 +v 152.566498 162.801529 54.648766 1.000000 1.000000 1.000000 +vn 0.680189 -0.361672 -0.637602 +v 152.566498 162.576874 54.027565 1.000000 1.000000 1.000000 +vn 0.774680 0.070909 0.628365 +v 152.566498 162.987106 54.572166 1.000000 1.000000 1.000000 +vn 0.736980 0.322997 0.593746 +v 152.566498 160.606659 56.285168 1.000000 1.000000 1.000000 +vn 0.649986 -0.084999 -0.755178 +v 152.566498 162.948029 53.874367 1.000000 1.000000 1.000000 +vn 0.717924 -0.465759 -0.517353 +v 152.566498 160.380615 55.664165 1.000000 1.000000 1.000000 +vn 0.738928 -0.200846 0.643153 +v 152.566498 163.179657 54.604568 1.000000 1.000000 1.000000 +vn 0.677891 0.219344 -0.701678 +v 152.566498 163.331757 53.939167 1.000000 1.000000 1.000000 +vn 0.672540 -0.202138 0.711920 +v 152.566498 169.822845 57.721180 1.000000 1.000000 1.000000 +vn 0.745165 0.182448 -0.641438 +v 152.566498 169.974945 57.055767 1.000000 1.000000 1.000000 +vn 0.641982 0.159328 0.749982 +v 152.566498 170.277725 57.773560 1.000000 1.000000 1.000000 +vn 0.786558 -0.128474 -0.604004 +v 152.566498 170.202362 57.082169 1.000000 1.000000 1.000000 +vn 0.655553 0.532502 0.535436 +v 152.566498 170.700500 57.523968 1.000000 1.000000 1.000000 +vn 0.766657 -0.452621 -0.455379 +v 152.566498 170.413071 56.957367 1.000000 1.000000 1.000000 +vn 0.667592 0.698883 0.256677 +v 152.566498 170.997726 57.026768 1.000000 1.000000 1.000000 +vn 0.751648 -0.618898 -0.228014 +v 152.566498 170.562363 56.708767 1.000000 1.000000 1.000000 +vn 0.186660 0.893751 0.407882 +v 152.566498 171.103760 56.390568 1.000000 1.000000 1.000000 +vn 0.376631 -0.898656 0.224872 +v 152.566498 170.615402 56.390568 1.000000 1.000000 1.000000 +vn 0.701763 0.055566 0.710240 +v 152.437744 160.142014 56.631168 1.000000 1.000000 1.000000 +vn 0.652507 -0.650450 -0.388781 +v 152.437744 159.917374 56.010166 1.000000 1.000000 1.000000 +vn 0.446206 -0.231505 0.864468 +v 152.083694 159.802948 56.884567 1.000000 1.000000 1.000000 +vn 0.395595 -0.880577 -0.260939 +v 152.083694 159.576904 56.263367 1.000000 1.000000 1.000000 +vn 0.124444 -0.318491 0.939722 +v 151.600876 159.678757 56.977165 1.000000 1.000000 1.000000 +vn 0.100795 -0.963938 -0.246298 +v 151.600876 159.452728 56.356167 1.000000 1.000000 1.000000 +vn -0.124370 -0.318507 0.939726 +v 134.219894 159.678757 56.977165 1.000000 1.000000 1.000000 +vn -0.100838 -0.963925 -0.246335 +v 134.219894 159.452728 56.356167 1.000000 1.000000 1.000000 +vn -0.446053 -0.232173 0.864368 +v 133.737091 159.802948 56.884567 1.000000 1.000000 1.000000 +vn -0.395072 -0.880504 -0.261976 +v 133.737091 159.576904 56.263367 1.000000 1.000000 1.000000 +vn 0.779439 -0.386271 0.493223 +v 152.566498 170.371201 45.449959 1.000000 1.000000 1.000000 +vn 0.646671 0.470305 -0.600524 +v 152.566498 170.615402 44.843758 1.000000 1.000000 1.000000 +vn 0.757617 -0.601928 0.252389 +v 152.566498 170.549805 45.706158 1.000000 1.000000 1.000000 +vn 0.662715 0.690628 -0.289555 +v 152.566498 170.972595 45.356159 1.000000 1.000000 1.000000 +vn 0.380805 -0.898329 -0.219073 +v 152.566498 170.615402 46.056160 1.000000 1.000000 1.000000 +vn 0.182636 0.891976 -0.413549 +v 152.566498 171.103760 46.056160 1.000000 1.000000 1.000000 +vn 0.745323 0.336453 -0.575580 +v 152.566498 159.470871 44.562359 1.000000 1.000000 1.000000 +vn 0.737243 0.352946 -0.576109 +v 152.566498 158.650406 43.883358 1.000000 1.000000 1.000000 +vn 0.704403 0.092581 -0.703736 +v 152.437744 158.196915 43.508358 1.000000 1.000000 1.000000 +vn 0.451600 -0.192867 -0.871126 +v 152.083694 157.864838 43.233757 1.000000 1.000000 1.000000 +vn 0.126766 -0.278679 -0.951981 +v 151.600876 157.743439 43.133358 1.000000 1.000000 1.000000 +vn -0.126794 -0.278690 -0.951975 +v 134.219894 157.743439 43.133358 1.000000 1.000000 1.000000 +vn -0.451567 -0.192898 -0.871136 +v 133.737091 157.864838 43.233757 1.000000 1.000000 1.000000 +vn -0.745323 0.336453 -0.575580 +v 133.254272 159.470871 44.562359 1.000000 1.000000 1.000000 +vn -0.704405 0.092591 -0.703733 +v 133.383026 158.196915 43.508358 1.000000 1.000000 1.000000 +vn -0.737244 0.352946 -0.576109 +v 133.254272 158.650406 43.883358 1.000000 1.000000 1.000000 +vn -0.646673 0.470306 -0.600522 +v 133.254272 170.615402 44.843781 1.000000 1.000000 1.000000 +vn -0.662715 0.690627 -0.289557 +v 133.254272 170.972595 45.356178 1.000000 1.000000 1.000000 +vn -0.182637 0.891976 -0.413549 +v 133.254272 171.103760 46.056179 1.000000 1.000000 1.000000 +vn -0.186660 0.893751 0.407882 +v 133.254272 171.103760 56.390572 1.000000 1.000000 1.000000 +vn 0.275270 0.614408 0.739412 +v 133.028961 171.169342 56.390572 1.000000 1.000000 1.000000 +vn 0.275270 0.614408 -0.739411 +v 133.028961 171.169342 46.056179 1.000000 1.000000 1.000000 +vn -0.275271 0.614408 -0.739411 +v 152.791809 171.169342 46.056160 1.000000 1.000000 1.000000 +vn -0.667592 0.698883 0.256677 +v 133.254272 170.997726 57.026772 1.000000 1.000000 1.000000 +vn -0.275270 0.614408 0.739411 +v 152.791809 171.169342 56.390568 1.000000 1.000000 1.000000 +vn -0.223443 0.640116 -0.735068 +v 154.080566 171.975845 46.056160 1.000000 1.000000 1.000000 +vn -0.223301 0.640162 0.735071 +v 154.080566 171.975845 56.390568 1.000000 1.000000 1.000000 +vn 0.281215 0.957452 -0.064840 +v 154.917435 172.499100 47.556160 1.000000 1.000000 1.000000 +vn 0.089260 0.798546 -0.595278 +v 154.499008 172.238174 46.257156 1.000000 1.000000 1.000000 +vn 0.281210 0.957451 0.064867 +v 154.917435 172.499100 54.890568 1.000000 1.000000 1.000000 +vn 0.266450 0.921971 0.281022 +v 154.805420 172.429321 55.640568 1.000000 1.000000 1.000000 +vn 0.088747 0.798722 0.595120 +v 154.499008 172.238174 56.189568 1.000000 1.000000 1.000000 +vn 0.267159 0.921692 -0.281264 +v 154.805420 172.429321 46.806160 1.000000 1.000000 1.000000 +vn -0.655554 0.532508 0.535428 +v 133.254272 170.700500 57.523972 1.000000 1.000000 1.000000 +vn -0.641976 0.159323 0.749989 +v 133.254272 170.277725 57.773579 1.000000 1.000000 1.000000 +vn -0.672544 -0.202151 0.711912 +v 133.254272 169.822845 57.721180 1.000000 1.000000 1.000000 +vn -0.738929 -0.200846 0.643153 +v 133.254272 163.179657 54.604568 1.000000 1.000000 1.000000 +vn -0.774680 0.070909 0.628365 +v 133.254272 162.987106 54.572166 1.000000 1.000000 1.000000 +vn -0.736183 0.333970 0.588641 +v 133.254272 162.801529 54.648766 1.000000 1.000000 1.000000 +vn -0.702370 0.055555 0.709641 +v 133.383026 160.142014 56.631168 1.000000 1.000000 1.000000 +vn -0.737040 0.322897 0.593725 +v 133.254272 160.606659 56.285168 1.000000 1.000000 1.000000 +vn -0.680189 -0.361672 -0.637602 +v 133.254272 162.576874 54.027565 1.000000 1.000000 1.000000 +vn -0.651856 -0.650558 -0.389690 +v 133.383026 159.917374 56.010166 1.000000 1.000000 1.000000 +vn -0.717927 -0.465849 -0.517268 +v 133.254272 160.380615 55.664165 1.000000 1.000000 1.000000 +vn -0.649986 -0.084999 -0.755177 +v 133.254272 162.948029 53.874367 1.000000 1.000000 1.000000 +vn -0.677891 0.219344 -0.701678 +v 133.254272 163.331757 53.939167 1.000000 1.000000 1.000000 +vn -0.745165 0.182448 -0.641437 +v 133.254272 169.974945 57.055771 1.000000 1.000000 1.000000 +vn -0.786558 -0.128474 -0.604005 +v 133.254272 170.202362 57.082172 1.000000 1.000000 1.000000 +vn -0.766658 -0.452621 -0.455379 +v 133.254272 170.413071 56.957371 1.000000 1.000000 1.000000 +vn -0.751648 -0.618898 -0.228014 +v 133.254272 170.562363 56.708771 1.000000 1.000000 1.000000 +vn -0.376631 -0.898656 0.224872 +v 133.254272 170.615402 56.390572 1.000000 1.000000 1.000000 +vn 0.205032 -0.706775 -0.677076 +v 152.799530 170.648880 46.056160 1.000000 1.000000 1.000000 +vn 0.205032 -0.706775 0.677075 +v 152.799530 170.648880 56.390568 1.000000 1.000000 1.000000 +vn -0.380805 -0.898329 -0.219073 +v 133.254272 170.615402 46.056179 1.000000 1.000000 1.000000 +vn -0.205032 -0.706775 0.677076 +v 133.021240 170.648880 56.390572 1.000000 1.000000 1.000000 +vn -0.757616 -0.601928 0.252390 +v 133.254272 170.549805 45.706177 1.000000 1.000000 1.000000 +vn -0.205032 -0.706775 -0.677076 +v 133.021240 170.648880 46.056179 1.000000 1.000000 1.000000 +vn -0.340113 -0.636752 0.692004 +v 132.803665 170.746567 56.390572 1.000000 1.000000 1.000000 +vn -0.340113 -0.636752 -0.692004 +v 132.803665 170.746567 46.056179 1.000000 1.000000 1.000000 +vn -0.779439 -0.386271 0.493224 +v 133.254272 170.371201 45.449978 1.000000 1.000000 1.000000 +vn 0.340113 -0.636753 -0.692004 +v 153.017105 170.746567 46.056160 1.000000 1.000000 1.000000 +vn 0.340113 -0.636752 0.692004 +v 153.017105 170.746567 56.390568 1.000000 1.000000 1.000000 +vn 0.471444 -0.496527 -0.728836 +v 154.305878 171.553055 46.056160 1.000000 1.000000 1.000000 +vn 0.471419 -0.496468 0.728892 +v 154.305878 171.553055 56.390568 1.000000 1.000000 1.000000 +vn 0.970369 -0.233725 -0.061285 +v 155.142746 172.076309 47.556160 1.000000 1.000000 1.000000 +vn 0.935905 -0.225491 -0.270622 +v 155.030731 172.006546 46.806160 1.000000 1.000000 1.000000 +vn 0.749395 -0.314561 -0.582631 +v 154.724319 171.813995 46.257156 1.000000 1.000000 1.000000 +vn 0.970376 -0.233711 0.061236 +v 155.142746 172.076309 54.890568 1.000000 1.000000 1.000000 +vn 0.749007 -0.313899 0.583486 +v 154.724319 171.813995 56.189568 1.000000 1.000000 1.000000 +vn 0.936273 -0.224042 0.270551 +v 155.030731 172.006546 55.640568 1.000000 1.000000 1.000000 +vn 0.223438 0.640117 0.735069 +v 131.740204 171.975845 56.390572 1.000000 1.000000 1.000000 +vn -0.471447 -0.496523 0.728837 +v 131.514893 171.553055 56.390572 1.000000 1.000000 1.000000 +vn -0.471419 -0.496468 -0.728892 +v 131.514893 171.553055 46.056179 1.000000 1.000000 1.000000 +vn 0.223300 0.640162 -0.735071 +v 131.740204 171.975845 46.056179 1.000000 1.000000 1.000000 +vn -0.749010 -0.313891 -0.583487 +v 131.096451 171.813995 46.257179 1.000000 1.000000 1.000000 +vn -0.088720 0.798736 -0.595105 +v 131.321777 172.238174 46.257179 1.000000 1.000000 1.000000 +vn -0.936272 -0.224040 -0.270555 +v 130.790039 172.006546 46.806179 1.000000 1.000000 1.000000 +vn -0.266450 0.921969 -0.281028 +v 131.015350 172.429321 46.806179 1.000000 1.000000 1.000000 +vn -0.970376 -0.233711 -0.061236 +v 130.678024 172.076309 47.556179 1.000000 1.000000 1.000000 +vn -0.281210 0.957451 -0.064867 +v 130.903336 172.499100 47.556179 1.000000 1.000000 1.000000 +vn -0.970369 -0.233725 0.061285 +v 130.678024 172.076309 54.890572 1.000000 1.000000 1.000000 +vn -0.281216 0.957452 0.064839 +v 130.903336 172.499100 54.890572 1.000000 1.000000 1.000000 +vn -0.935904 -0.225491 0.270624 +v 130.790039 172.006546 55.640572 1.000000 1.000000 1.000000 +vn -0.267173 0.921687 0.281268 +v 131.015350 172.429321 55.640572 1.000000 1.000000 1.000000 +vn -0.749395 -0.314556 0.582633 +v 131.096451 171.813995 56.189571 1.000000 1.000000 1.000000 +vn -0.089234 0.798554 0.595273 +v 131.321777 172.238174 56.189571 1.000000 1.000000 1.000000 +vn 0.680701 0.530898 0.504771 +v -140.998474 164.012665 45.911198 1.000000 1.000000 1.000000 +vn 0.679609 0.505441 0.531660 +v -140.840118 164.228943 45.472599 1.000000 1.000000 1.000000 +vn 0.531083 0.600877 0.597409 +v -141.110489 164.622437 45.449200 1.000000 1.000000 1.000000 +vn 0.427707 0.665264 0.611957 +v -141.317780 164.305695 46.031998 1.000000 1.000000 1.000000 +vn 0.780983 0.315664 0.538908 +v -140.994614 163.952667 45.970798 1.000000 1.000000 1.000000 +vn 0.818541 0.341882 0.461636 +v -140.966293 163.983383 45.898998 1.000000 1.000000 1.000000 +vn 0.397649 0.692950 0.601411 +v -141.145248 164.641968 45.449200 1.000000 1.000000 1.000000 +vn 0.433470 0.480414 0.762434 +v -141.087311 164.658707 45.398800 1.000000 1.000000 1.000000 +vn 0.212528 0.745637 0.631551 +v -141.343521 164.316864 46.027000 1.000000 1.000000 1.000000 +vn 0.461368 0.460245 0.758495 +v -141.343521 164.055923 46.285000 1.000000 1.000000 1.000000 +vn 0.282873 0.738184 0.612428 +v -141.295883 164.729874 45.449600 1.000000 1.000000 1.000000 +vn 0.097908 0.793173 0.601075 +v -141.749084 164.495453 45.948997 1.000000 1.000000 1.000000 +vn 0.082864 0.813292 0.575925 +v -141.603592 164.780106 45.463398 1.000000 1.000000 1.000000 +vn 0.225272 0.596707 0.770190 +v -141.281723 164.771729 45.398998 1.000000 1.000000 1.000000 +vn -0.104255 0.798995 0.592231 +v -144.071701 164.495453 45.948997 1.000000 1.000000 1.000000 +vn -0.058386 0.804746 0.590741 +v -144.217178 164.780106 45.463398 1.000000 1.000000 1.000000 +vn 0.132551 0.501260 0.855084 +v -141.749084 164.092209 46.394997 1.000000 1.000000 1.000000 +vn -0.033994 0.681130 0.731373 +v -144.217178 164.826157 45.405598 1.000000 1.000000 1.000000 +vn 0.064691 0.678261 0.731968 +v -141.603592 164.826157 45.405598 1.000000 1.000000 1.000000 +vn -0.224580 0.753873 0.617446 +v -144.477249 164.316864 46.027000 1.000000 1.000000 1.000000 +vn -0.158218 0.770712 0.617228 +v -144.374252 164.771729 45.454597 1.000000 1.000000 1.000000 +vn -0.126828 0.496873 0.858506 +v -144.071701 164.092209 46.394997 1.000000 1.000000 1.000000 +vn 0.138852 0.266034 0.953911 +v -141.749084 164.088028 46.395996 1.000000 1.000000 1.000000 +vn -0.138857 0.266033 0.953910 +v -144.071701 164.088028 46.395996 1.000000 1.000000 1.000000 +vn 0.141603 0.150623 0.978397 +v -141.749084 163.587097 46.556198 1.000000 1.000000 1.000000 +vn 0.287871 0.147655 0.946218 +v -141.346100 163.587097 46.435398 1.000000 1.000000 1.000000 +vn 0.715432 0.108863 0.690149 +v -140.998474 163.587097 46.091599 1.000000 1.000000 1.000000 +vn 0.501336 0.132126 0.855105 +v -141.343521 163.587097 46.434601 1.000000 1.000000 1.000000 +vn 0.715431 -0.108860 0.690151 +v -140.998474 162.853149 46.091599 1.000000 1.000000 1.000000 +vn 0.822054 0.089986 0.562255 +v -140.994614 163.587097 46.087399 1.000000 1.000000 1.000000 +vn 0.501336 -0.132126 0.855105 +v -141.343521 162.853149 46.434601 1.000000 1.000000 1.000000 +vn 0.905777 0.148677 0.396816 +v -140.940536 163.933136 45.858597 1.000000 1.000000 1.000000 +vn 0.821951 -0.089779 0.562438 +v -140.994614 162.853149 46.087399 1.000000 1.000000 1.000000 +vn 0.926743 0.065632 0.369918 +v -140.757721 163.587097 45.574600 1.000000 1.000000 1.000000 +vn 0.916485 0.097960 0.387891 +v -140.743561 163.613617 45.529400 1.000000 1.000000 1.000000 +vn 0.775691 0.361849 0.517077 +v -140.831100 164.216400 45.473396 1.000000 1.000000 1.000000 +vn 0.813992 0.076991 0.575752 +v -140.701065 163.613617 45.438000 1.000000 1.000000 1.000000 +vn 0.658558 0.279291 0.698783 +v -140.792480 164.234543 45.410400 1.000000 1.000000 1.000000 +vn 0.918675 -0.079344 0.386964 +v -140.743561 162.826645 45.529400 1.000000 1.000000 1.000000 +vn 0.926817 -0.059083 0.370835 +v -140.757721 162.853149 45.574600 1.000000 1.000000 1.000000 +vn 0.799547 -0.317299 0.509946 +v -140.804062 162.307571 45.480400 1.000000 1.000000 1.000000 +vn 0.903243 -0.162917 0.397001 +v -140.940536 162.507111 45.858597 1.000000 1.000000 1.000000 +vn 0.780327 -0.316536 0.539346 +v -140.994614 162.487564 45.970798 1.000000 1.000000 1.000000 +vn 0.681245 -0.258079 0.685055 +v -140.764160 162.292221 45.413799 1.000000 1.000000 1.000000 +vn 0.815914 -0.057648 0.575291 +v -140.701065 162.826645 45.438000 1.000000 1.000000 1.000000 +vn 0.734797 -0.446426 0.510663 +v -140.851700 162.223862 45.474800 1.000000 1.000000 1.000000 +vn 0.822121 -0.349940 0.449064 +v -140.966293 162.456879 45.898998 1.000000 1.000000 1.000000 +vn 0.686244 -0.528735 0.499509 +v -140.998474 162.427567 45.911198 1.000000 1.000000 1.000000 +vn 0.580789 -0.564660 0.586381 +v -141.064133 161.858276 45.450397 1.000000 1.000000 1.000000 +vn 0.471117 -0.452053 0.757428 +v -141.038391 161.824783 45.399399 1.000000 1.000000 1.000000 +vn 0.424520 -0.665454 0.613966 +v -141.317780 162.134552 46.031998 1.000000 1.000000 1.000000 +vn 0.468935 -0.449537 0.760274 +v -141.343521 162.384323 46.285000 1.000000 1.000000 1.000000 +vn 0.256368 -0.246846 0.934528 +v -141.007492 161.784317 45.367199 1.000000 1.000000 1.000000 +vn 0.389258 -0.148293 0.909113 +v -140.712662 162.272690 45.370998 1.000000 1.000000 1.000000 +vn 0.502505 -0.036259 0.863813 +v -140.640549 162.826645 45.377399 1.000000 1.000000 1.000000 +vn 0.499202 0.047612 0.865177 +v -140.640549 163.613617 45.377399 1.000000 1.000000 1.000000 +vn 0.135687 -0.009941 0.990702 +v -140.568451 162.826645 45.356197 1.000000 1.000000 1.000000 +vn 0.133666 0.012494 0.990948 +v -140.568451 163.613617 45.356197 1.000000 1.000000 1.000000 +vn 0.367312 0.158178 0.916549 +v -140.744843 164.258255 45.369999 1.000000 1.000000 1.000000 +vn 0.235489 0.262362 0.935795 +v -141.058990 164.700577 45.366997 1.000000 1.000000 1.000000 +vn 0.123298 0.327342 0.936827 +v -141.264984 164.820572 45.367199 1.000000 1.000000 1.000000 +vn 0.053022 0.558097 0.828080 +v -141.603592 164.852661 45.387199 1.000000 1.000000 1.000000 +vn 0.034328 0.375384 0.926234 +v -141.603592 164.880569 45.368797 1.000000 1.000000 1.000000 +vn -0.027026 0.558805 0.828859 +v -144.217178 164.852661 45.387199 1.000000 1.000000 1.000000 +vn -0.017942 0.380718 0.924517 +v -144.217178 164.880569 45.368797 1.000000 1.000000 1.000000 +vn -0.075582 0.354797 0.931883 +v -144.389709 164.866623 45.367798 1.000000 1.000000 1.000000 +vn -0.135768 0.644211 0.752701 +v -144.380692 164.814987 45.401398 1.000000 1.000000 1.000000 +vn -0.286379 0.571666 0.768886 +v -144.594406 164.746613 45.398598 1.000000 1.000000 1.000000 +vn -0.353846 0.705936 0.613553 +v -144.577667 164.706161 45.448799 1.000000 1.000000 1.000000 +vn -0.424680 0.665373 0.613943 +v -144.503006 164.305695 46.031998 1.000000 1.000000 1.000000 +vn -0.468944 0.449525 0.760275 +v -144.477249 164.055923 46.285000 1.000000 1.000000 1.000000 +vn -0.454916 0.663540 0.593941 +v -144.674240 164.639175 45.449600 1.000000 1.000000 1.000000 +vn 0.098877 -0.038547 0.994353 +v -140.657288 162.250366 45.356197 1.000000 1.000000 1.000000 +vn -0.005062 0.099826 0.994992 +v -144.217178 164.940567 45.356197 1.000000 1.000000 1.000000 +vn 0.008724 0.097133 0.995233 +v -141.603592 164.940567 45.356197 1.000000 1.000000 1.000000 +vn 0.031375 0.082976 0.996058 +v -141.246964 164.872192 45.356197 1.000000 1.000000 1.000000 +vn -0.018599 0.089660 0.995799 +v -144.398712 164.923828 45.356197 1.000000 1.000000 1.000000 +vn -0.039775 0.080443 0.995965 +v -144.635605 164.844299 45.356197 1.000000 1.000000 1.000000 +vn -0.379957 0.197596 0.903653 +v -152.566498 170.127029 45.356216 1.000000 1.000000 1.000000 +vn -0.061975 0.061035 0.996210 +v -144.846756 164.699188 45.356197 1.000000 1.000000 1.000000 +vn -0.156004 0.313291 0.936756 +v -144.615005 164.794052 45.366997 1.000000 1.000000 1.000000 +vn -0.049065 0.720111 0.692122 +v -159.003891 170.127029 45.356216 1.000000 1.000000 1.000000 +vn -0.098897 0.038555 0.994351 +v -145.163483 164.189880 45.356197 1.000000 1.000000 1.000000 +vn 0.379973 0.197579 0.903650 +v -133.254272 170.127029 45.356197 1.000000 1.000000 1.000000 +vn 0.057223 0.066121 0.996170 +v -141.029373 164.745224 45.356197 1.000000 1.000000 1.000000 +vn 0.048749 0.720043 0.692215 +v -126.816872 170.127029 45.356197 1.000000 1.000000 1.000000 +vn 0.090098 0.039577 0.995146 +v -140.692062 164.284760 45.356197 1.000000 1.000000 1.000000 +vn 0.595336 -0.266483 0.757999 +v -128.672897 164.188477 45.356197 1.000000 1.000000 1.000000 +vn 0.421824 -0.491903 0.761640 +v -128.101257 164.965683 45.356197 1.000000 1.000000 1.000000 +vn 0.153462 -0.625650 0.764861 +v -127.275223 165.396851 45.356197 1.000000 1.000000 1.000000 +vn 0.195804 0.708371 0.678138 +v -125.237267 169.912155 45.356197 1.000000 1.000000 1.000000 +vn 0.653914 -0.000001 0.756569 +v -128.876846 163.220123 45.356197 1.000000 1.000000 1.000000 +vn 0.595334 0.266484 0.758000 +v -128.672897 162.251755 45.356197 1.000000 1.000000 1.000000 +vn 0.421818 0.491907 0.761641 +v -128.101257 161.474564 45.356197 1.000000 1.000000 1.000000 +vn -0.077197 -0.675192 0.733591 +v -131.437637 159.715042 45.356197 1.000000 1.000000 1.000000 +vn 0.153458 0.625653 0.764859 +v -127.275223 161.043411 45.356197 1.000000 1.000000 1.000000 +vn 0.264863 -0.356020 0.896157 +v -133.254272 159.715042 45.356197 1.000000 1.000000 1.000000 +vn -0.280506 -0.587384 0.759142 +v -131.046249 159.624359 45.356197 1.000000 1.000000 1.000000 +vn -0.449614 -0.535169 0.715152 +v -130.723083 159.371796 45.356197 1.000000 1.000000 1.000000 +vn -0.410133 -0.611932 0.676262 +v -129.600418 158.358780 45.356197 1.000000 1.000000 1.000000 +vn -0.216929 -0.704903 0.675317 +v -128.263748 157.718323 45.356197 1.000000 1.000000 1.000000 +vn 0.000000 -0.737897 0.674913 +v -126.816872 157.499252 45.356197 1.000000 1.000000 1.000000 +vn -0.153457 0.625654 0.764858 +v -126.358528 161.043411 45.356197 1.000000 1.000000 1.000000 +vn 0.216988 -0.704900 0.675302 +v -125.370003 157.718323 45.356197 1.000000 1.000000 1.000000 +vn -0.421817 0.491907 0.761642 +v -125.532486 161.474564 45.356197 1.000000 1.000000 1.000000 +vn 0.410128 -0.611904 0.676291 +v -124.033859 158.358780 45.356197 1.000000 1.000000 1.000000 +vn -0.595334 0.266481 0.758001 +v -124.960846 162.251755 45.356197 1.000000 1.000000 1.000000 +vn 0.449260 -0.535336 0.715248 +v -122.910919 159.371796 45.356197 1.000000 1.000000 1.000000 +vn 0.280438 -0.587642 0.758967 +v -122.587112 159.624359 45.356197 1.000000 1.000000 1.000000 +vn 0.077337 -0.675120 0.733643 +v -122.196495 159.715042 45.356197 1.000000 1.000000 1.000000 +vn 0.074188 -0.724858 0.684892 +v -121.908607 159.715042 45.356197 1.000000 1.000000 1.000000 +vn 0.293966 -0.686650 0.664903 +v -121.551079 159.789001 45.356197 1.000000 1.000000 1.000000 +vn 0.720995 -0.123144 0.681910 +v -120.549805 161.965714 45.356197 1.000000 1.000000 1.000000 +vn -0.653916 -0.000001 0.756567 +v -124.756905 163.220123 45.356197 1.000000 1.000000 1.000000 +vn 0.669075 -0.310847 0.675066 +v -121.032089 160.322021 45.356197 1.000000 1.000000 1.000000 +vn 0.532336 -0.521487 0.666835 +v -121.244400 160.001083 45.356197 1.000000 1.000000 1.000000 +vn 0.729893 0.045895 0.682019 +v -120.458519 163.688950 45.356197 1.000000 1.000000 1.000000 +vn 0.699856 0.213454 0.681644 +v -120.764168 165.382889 45.356197 1.000000 1.000000 1.000000 +vn -0.595336 -0.266480 0.758000 +v -124.960846 164.188477 45.356197 1.000000 1.000000 1.000000 +vn 0.630284 0.372774 0.681016 +v -121.447563 166.940079 45.356197 1.000000 1.000000 1.000000 +vn -0.421823 -0.491903 0.761641 +v -125.532486 164.965683 45.356197 1.000000 1.000000 1.000000 +vn 0.521157 0.515781 0.679975 +v -122.466087 168.267044 45.356197 1.000000 1.000000 1.000000 +vn 0.374046 0.631733 0.678972 +v -123.756149 169.278671 45.356197 1.000000 1.000000 1.000000 +vn -0.153461 -0.625650 0.764860 +v -126.358528 165.396851 45.356197 1.000000 1.000000 1.000000 +vn 0.062000 -0.061058 0.996207 +v -140.974014 161.741074 45.356197 1.000000 1.000000 1.000000 +vn 0.039776 -0.080442 0.995965 +v -141.185165 161.595947 45.356197 1.000000 1.000000 1.000000 +vn 0.018599 -0.089662 0.995799 +v -141.422058 161.516418 45.356197 1.000000 1.000000 1.000000 +vn 0.005062 -0.099827 0.994992 +v -141.603592 161.499680 45.356197 1.000000 1.000000 1.000000 +vn -0.264862 -0.356024 0.896156 +v -152.566498 159.715042 45.356197 1.000000 1.000000 1.000000 +vn -0.669769 -0.262903 0.694472 +v -152.566498 159.461090 45.308399 1.000000 1.000000 1.000000 +vn 0.669768 -0.262903 0.694473 +v -133.254272 159.461090 45.308399 1.000000 1.000000 1.000000 +vn -0.008724 -0.097133 0.995233 +v -144.217178 161.499680 45.356197 1.000000 1.000000 1.000000 +vn -0.595333 0.266298 0.758066 +v -157.147354 162.251755 45.356216 1.000000 1.000000 1.000000 +vn 0.077197 -0.675195 0.733588 +v -154.383133 159.715042 45.356197 1.000000 1.000000 1.000000 +vn 0.280506 -0.587386 0.759140 +v -154.774521 159.624359 45.356197 1.000000 1.000000 1.000000 +vn -0.421728 0.491932 0.761675 +v -157.718994 161.474564 45.356216 1.000000 1.000000 1.000000 +vn 0.410156 -0.611910 0.676268 +v -156.220367 158.358780 45.356197 1.000000 1.000000 1.000000 +vn 0.449614 -0.535172 0.715149 +v -155.097687 159.371796 45.356197 1.000000 1.000000 1.000000 +vn -0.654058 -0.000001 0.756444 +v -156.943924 163.220123 45.356216 1.000000 1.000000 1.000000 +vn -0.034328 -0.375384 0.926234 +v -144.217178 161.559677 45.368797 1.000000 1.000000 1.000000 +vn -0.031372 -0.082964 0.996059 +v -144.573807 161.568054 45.356197 1.000000 1.000000 1.000000 +vn 0.017942 -0.380718 0.924517 +v -141.603592 161.559677 45.368797 1.000000 1.000000 1.000000 +vn 0.075577 -0.354803 0.931881 +v -141.431061 161.573624 45.367798 1.000000 1.000000 1.000000 +vn -0.053022 -0.558097 0.828080 +v -144.217178 161.587585 45.387199 1.000000 1.000000 1.000000 +vn -0.123293 -0.327346 0.936826 +v -144.555786 161.619675 45.367199 1.000000 1.000000 1.000000 +vn -0.235490 -0.262338 0.935801 +v -144.761795 161.739670 45.366997 1.000000 1.000000 1.000000 +vn -0.057231 -0.066130 0.996168 +v -144.791397 161.695023 45.356197 1.000000 1.000000 1.000000 +vn -0.225267 -0.596707 0.770192 +v -144.539047 161.668518 45.398998 1.000000 1.000000 1.000000 +vn 0.027026 -0.558805 0.828859 +v -141.603592 161.587585 45.387199 1.000000 1.000000 1.000000 +vn -0.064691 -0.678261 0.731968 +v -144.217178 161.614090 45.405598 1.000000 1.000000 1.000000 +vn 0.033994 -0.681130 0.731373 +v -141.603592 161.614090 45.405598 1.000000 1.000000 1.000000 +vn 0.135747 -0.644217 0.752700 +v -141.440079 161.625259 45.401398 1.000000 1.000000 1.000000 +vn -0.082864 -0.813300 0.575914 +v -144.217178 161.660141 45.463398 1.000000 1.000000 1.000000 +vn -0.282878 -0.738182 0.612428 +v -144.524887 161.710373 45.449600 1.000000 1.000000 1.000000 +vn -0.433410 -0.480430 0.762459 +v -144.733459 161.781540 45.398800 1.000000 1.000000 1.000000 +vn 0.058392 -0.804747 0.590740 +v -141.603592 161.660141 45.463398 1.000000 1.000000 1.000000 +vn -0.097927 -0.793172 0.601073 +v -144.071701 161.944778 45.948997 1.000000 1.000000 1.000000 +vn 0.158217 -0.770698 0.617246 +v -141.446518 161.668518 45.454597 1.000000 1.000000 1.000000 +vn 0.286347 -0.571629 0.768925 +v -141.226364 161.693619 45.398598 1.000000 1.000000 1.000000 +vn 0.224463 -0.753907 0.617447 +v -141.343521 162.123398 46.027000 1.000000 1.000000 1.000000 +vn 0.353795 -0.705849 0.613682 +v -141.243103 161.734100 45.448799 1.000000 1.000000 1.000000 +vn 0.104275 -0.798993 0.592230 +v -141.749084 161.944778 45.948997 1.000000 1.000000 1.000000 +vn -0.132556 -0.501252 0.855088 +v -144.071701 162.348038 46.394997 1.000000 1.000000 1.000000 +vn 0.126828 -0.496870 0.858508 +v -141.749084 162.348038 46.394997 1.000000 1.000000 1.000000 +vn -0.138857 -0.266033 0.953910 +v -144.071701 162.352219 46.395996 1.000000 1.000000 1.000000 +vn -0.461368 -0.460239 0.758498 +v -144.477249 162.384323 46.285000 1.000000 1.000000 1.000000 +vn 0.138852 -0.266033 0.953911 +v -141.749084 162.352219 46.395996 1.000000 1.000000 1.000000 +vn -0.141608 -0.150623 0.978397 +v -144.071701 162.853149 46.556198 1.000000 1.000000 1.000000 +vn -0.287876 -0.147655 0.946216 +v -144.474670 162.853149 46.435398 1.000000 1.000000 1.000000 +vn 0.141603 -0.150623 0.978397 +v -141.749084 162.853149 46.556198 1.000000 1.000000 1.000000 +vn 0.287871 -0.147655 0.946218 +v -141.346100 162.853149 46.435398 1.000000 1.000000 1.000000 +vn 0.454859 -0.663512 0.594016 +v -141.146530 161.801071 45.449600 1.000000 1.000000 1.000000 +vn 0.156030 -0.313336 0.936736 +v -141.205765 161.646194 45.366997 1.000000 1.000000 1.000000 +vn -0.780994 -0.315667 0.538891 +v -144.826157 162.487564 45.970798 1.000000 1.000000 1.000000 +vn -0.427470 -0.665388 0.611988 +v -144.503006 162.134552 46.031998 1.000000 1.000000 1.000000 +vn -0.212327 -0.745694 0.631552 +v -144.477249 162.123398 46.027000 1.000000 1.000000 1.000000 +vn -0.715431 -0.108860 0.690150 +v -144.822296 162.853149 46.091599 1.000000 1.000000 1.000000 +vn -0.501336 -0.132126 0.855105 +v -144.477249 162.853149 46.434601 1.000000 1.000000 1.000000 +vn -0.397645 -0.692951 0.601413 +v -144.675522 161.798279 45.449200 1.000000 1.000000 1.000000 +vn -0.531079 -0.600884 0.597406 +v -144.710281 161.817810 45.449200 1.000000 1.000000 1.000000 +vn -0.680812 -0.530804 0.504720 +v -144.822296 162.427567 45.911198 1.000000 1.000000 1.000000 +vn -0.677745 -0.504268 0.535141 +v -144.980652 162.211288 45.472599 1.000000 1.000000 1.000000 +vn -0.657571 -0.281413 0.698861 +v -145.028290 162.204330 45.410400 1.000000 1.000000 1.000000 +vn -0.369289 -0.158469 0.915704 +v -145.075928 162.182007 45.369999 1.000000 1.000000 1.000000 +vn -0.818642 -0.341757 0.461549 +v -144.854477 162.456879 45.898998 1.000000 1.000000 1.000000 +vn -0.774983 -0.359640 0.519674 +v -144.989670 162.223862 45.473396 1.000000 1.000000 1.000000 +vn -0.905777 -0.148692 0.396811 +v -144.880234 162.507111 45.858597 1.000000 1.000000 1.000000 +vn -0.916489 -0.097960 0.387881 +v -145.077209 162.826645 45.529400 1.000000 1.000000 1.000000 +vn -0.813969 -0.076904 0.575795 +v -145.119705 162.826645 45.438000 1.000000 1.000000 1.000000 +vn -0.926745 -0.065648 0.369911 +v -145.063049 162.853149 45.574600 1.000000 1.000000 1.000000 +vn -0.822055 -0.089983 0.562254 +v -144.826157 162.853149 46.087399 1.000000 1.000000 1.000000 +vn -0.821951 0.089783 0.562438 +v -144.826157 163.587097 46.087399 1.000000 1.000000 1.000000 +vn -0.715432 0.108863 0.690149 +v -144.822296 163.587097 46.091599 1.000000 1.000000 1.000000 +vn -0.918666 0.079353 0.386982 +v -145.077209 163.613617 45.529400 1.000000 1.000000 1.000000 +vn -0.926816 0.059078 0.370840 +v -145.063049 163.587097 45.574600 1.000000 1.000000 1.000000 +vn -0.799564 0.317266 0.509941 +v -145.016708 164.132675 45.480400 1.000000 1.000000 1.000000 +vn -0.815913 0.057645 0.575294 +v -145.119705 163.613617 45.438000 1.000000 1.000000 1.000000 +vn -0.681205 0.258072 0.685097 +v -145.056610 164.148026 45.413799 1.000000 1.000000 1.000000 +vn -0.780325 0.316518 0.539360 +v -144.826157 163.952667 45.970798 1.000000 1.000000 1.000000 +vn -0.903244 0.162890 0.397009 +v -144.880234 163.933136 45.858597 1.000000 1.000000 1.000000 +vn -0.686144 0.528818 0.499558 +v -144.822296 164.012665 45.911198 1.000000 1.000000 1.000000 +vn -0.822021 0.350060 0.449154 +v -144.854477 163.983383 45.898998 1.000000 1.000000 1.000000 +vn -0.734816 0.446427 0.510634 +v -144.969070 164.216400 45.474800 1.000000 1.000000 1.000000 +vn -0.580810 0.564695 0.586327 +v -144.756638 164.581970 45.450397 1.000000 1.000000 1.000000 +vn -0.471153 0.452076 0.757392 +v -144.782379 164.615448 45.399399 1.000000 1.000000 1.000000 +vn -0.256353 0.246814 0.934540 +v -144.813278 164.655914 45.367199 1.000000 1.000000 1.000000 +vn -0.389237 0.148287 0.909124 +v -145.108124 164.167557 45.370998 1.000000 1.000000 1.000000 +vn -0.502508 0.036255 0.863812 +v -145.180222 163.613617 45.377399 1.000000 1.000000 1.000000 +vn -0.135686 0.009941 0.990702 +v -145.252319 163.613617 45.356197 1.000000 1.000000 1.000000 +vn -0.499245 -0.047552 0.865155 +v -145.180222 162.826645 45.377399 1.000000 1.000000 1.000000 +vn -0.133666 -0.012494 0.990948 +v -145.252319 162.826645 45.356197 1.000000 1.000000 1.000000 +vn -0.090087 -0.039574 0.995147 +v -145.128708 162.155487 45.356197 1.000000 1.000000 1.000000 +vn -0.153390 -0.625707 0.764828 +v -158.545547 165.396851 45.356216 1.000000 1.000000 1.000000 +vn 0.153391 -0.625707 0.764828 +v -159.462250 165.396851 45.356216 1.000000 1.000000 1.000000 +vn -0.421735 -0.491926 0.761675 +v -157.718994 164.965683 45.356216 1.000000 1.000000 1.000000 +vn -0.595335 -0.266299 0.758064 +v -157.147354 164.188477 45.356216 1.000000 1.000000 1.000000 +vn -0.373866 0.631915 0.678902 +v -162.064240 169.278671 45.356216 1.000000 1.000000 1.000000 +vn 0.421736 -0.491928 0.761673 +v -160.288803 164.965683 45.356216 1.000000 1.000000 1.000000 +vn -0.195830 0.708213 0.678296 +v -160.583633 169.910751 45.356216 1.000000 1.000000 1.000000 +vn -0.521176 0.515769 0.679969 +v -163.354294 168.267044 45.356216 1.000000 1.000000 1.000000 +vn 0.595336 -0.266294 0.758065 +v -160.860443 164.188477 45.356216 1.000000 1.000000 1.000000 +vn -0.630252 0.372790 0.681036 +v -164.372696 166.940079 45.356216 1.000000 1.000000 1.000000 +vn -0.699767 0.213648 0.681675 +v -165.056351 165.382889 45.356216 1.000000 1.000000 1.000000 +vn 0.654066 -0.000001 0.756437 +v -161.063858 163.220123 45.356216 1.000000 1.000000 1.000000 +vn -0.729934 0.046030 0.681966 +v -165.362762 163.688950 45.356216 1.000000 1.000000 1.000000 +vn -0.720993 -0.123279 0.681888 +v -165.271347 161.965714 45.356216 1.000000 1.000000 1.000000 +vn 0.595334 0.266295 0.758067 +v -160.860443 162.251755 45.356216 1.000000 1.000000 1.000000 +vn -0.668988 -0.311019 0.675072 +v -164.788544 160.322021 45.356216 1.000000 1.000000 1.000000 +vn -0.532333 -0.521416 0.666894 +v -164.576126 160.001083 45.356216 1.000000 1.000000 1.000000 +vn -0.294037 -0.686674 0.664847 +v -164.269684 159.789001 45.356216 1.000000 1.000000 1.000000 +vn -0.074109 -0.724845 0.684914 +v -163.911774 159.715042 45.356216 1.000000 1.000000 1.000000 +vn -0.077197 -0.675192 0.733591 +v -163.624664 159.715042 45.356216 1.000000 1.000000 1.000000 +vn -0.280506 -0.587384 0.759142 +v -163.233276 159.624359 45.356216 1.000000 1.000000 1.000000 +vn -0.449612 -0.535171 0.715151 +v -162.910110 159.371796 45.356216 1.000000 1.000000 1.000000 +vn 0.421730 0.491932 0.761674 +v -160.288803 161.474564 45.356216 1.000000 1.000000 1.000000 +vn -0.410149 -0.611911 0.676271 +v -161.787430 158.358780 45.356216 1.000000 1.000000 1.000000 +vn 0.153387 0.625710 0.764826 +v -159.462250 161.043411 45.356216 1.000000 1.000000 1.000000 +vn -0.216950 -0.704907 0.675307 +v -160.451019 157.718323 45.356216 1.000000 1.000000 1.000000 +vn 0.000000 -0.737892 0.674918 +v -159.003891 157.499252 45.356216 1.000000 1.000000 1.000000 +vn -0.153387 0.625710 0.764826 +v -158.545547 161.043411 45.356216 1.000000 1.000000 1.000000 +vn 0.216954 -0.704904 0.675308 +v -157.556763 157.718323 45.356216 1.000000 1.000000 1.000000 +vn -0.287876 0.147655 0.946217 +v -144.474670 163.587097 46.435398 1.000000 1.000000 1.000000 +vn -0.501336 0.132126 0.855105 +v -144.477249 163.587097 46.434601 1.000000 1.000000 1.000000 +vn -0.141608 0.150623 0.978397 +v -144.071701 163.587097 46.556198 1.000000 1.000000 1.000000 +vn -0.690328 -0.416912 0.591296 +v -152.566498 159.226669 45.168598 1.000000 1.000000 1.000000 +vn 0.690328 -0.416912 0.591296 +v -133.254272 159.226669 45.168598 1.000000 1.000000 1.000000 +vn -0.717546 -0.490328 0.494677 +v -152.566498 158.404831 44.489597 1.000000 1.000000 1.000000 +vn 0.717551 -0.490404 0.494595 +v -133.254272 158.404831 44.489597 1.000000 1.000000 1.000000 +vn -0.101702 -0.973531 0.204680 +v -151.600876 157.499252 43.739597 1.000000 1.000000 1.000000 +vn -0.397672 -0.889921 0.223377 +v -152.083694 157.620651 43.840199 1.000000 1.000000 1.000000 +vn -0.652701 -0.666353 0.360493 +v -152.437744 157.952728 44.114597 1.000000 1.000000 1.000000 +vn 0.101729 -0.973521 0.204716 +v -134.219894 157.499252 43.739597 1.000000 1.000000 1.000000 +vn 0.652148 -0.666580 0.361073 +v -133.383026 157.952728 44.114597 1.000000 1.000000 1.000000 +vn 0.397516 -0.889796 0.224153 +v -133.737091 157.620651 43.840199 1.000000 1.000000 1.000000 +vn 0.141599 0.150036 -0.978488 +v -144.071701 162.853149 45.856197 1.000000 1.000000 1.000000 +vn -0.141590 0.150037 -0.978489 +v -141.749084 162.853149 45.856197 1.000000 1.000000 1.000000 +vn 0.138143 0.344829 -0.928445 +v -144.071701 162.557343 45.761997 1.000000 1.000000 1.000000 +vn 0.289431 0.147424 -0.945778 +v -144.308594 162.853149 45.785198 1.000000 1.000000 1.000000 +vn -0.138136 0.344829 -0.928446 +v -141.749084 162.557343 45.761997 1.000000 1.000000 1.000000 +vn -0.289423 0.147425 -0.945780 +v -141.512177 162.853149 45.785198 1.000000 1.000000 1.000000 +vn 0.125189 0.567244 -0.813979 +v -144.071701 162.555939 45.761398 1.000000 1.000000 1.000000 +vn 0.469707 0.449850 -0.759612 +v -144.309875 162.576874 45.696598 1.000000 1.000000 1.000000 +vn 0.289431 -0.147425 -0.945778 +v -144.308594 163.587097 45.785198 1.000000 1.000000 1.000000 +vn 0.141599 -0.150036 -0.978488 +v -144.071701 163.587097 45.856197 1.000000 1.000000 1.000000 +vn 0.138104 -0.346650 -0.927772 +v -144.071701 163.882904 45.761997 1.000000 1.000000 1.000000 +vn 0.462020 -0.460714 -0.757813 +v -144.309875 163.863373 45.696598 1.000000 1.000000 1.000000 +vn -0.141590 -0.150037 -0.978489 +v -141.749084 163.587097 45.856197 1.000000 1.000000 1.000000 +vn 0.775172 -0.316029 -0.547023 +v -144.514587 163.801971 45.511799 1.000000 1.000000 1.000000 +vn 0.442772 -0.660289 -0.606606 +v -144.325333 164.009888 45.547798 1.000000 1.000000 1.000000 +vn 0.791799 -0.096455 -0.603117 +v -144.513306 163.587097 45.582798 1.000000 1.000000 1.000000 +vn 0.502436 -0.132108 -0.854463 +v -144.309875 163.587097 45.784798 1.000000 1.000000 1.000000 +vn 0.130670 -0.573056 -0.809032 +v -144.071701 163.884293 45.761398 1.000000 1.000000 1.000000 +vn -0.138095 -0.346651 -0.927773 +v -141.749084 163.882904 45.761997 1.000000 1.000000 1.000000 +vn 0.502436 0.132108 -0.854462 +v -144.309875 162.853149 45.784798 1.000000 1.000000 1.000000 +vn 0.791799 0.096455 -0.603117 +v -144.513306 162.853149 45.582798 1.000000 1.000000 1.000000 +vn 0.891095 -0.070766 -0.448266 +v -144.514587 163.587097 45.580399 1.000000 1.000000 1.000000 +vn 0.891341 0.071350 -0.447684 +v -144.514587 162.853149 45.580399 1.000000 1.000000 1.000000 +vn 0.777138 0.313490 -0.545693 +v -144.514587 162.638275 45.511799 1.000000 1.000000 1.000000 +vn 0.931187 -0.068594 -0.358031 +v -144.654922 163.587097 45.278797 1.000000 1.000000 1.000000 +vn 0.900695 -0.161413 -0.403354 +v -144.548065 163.790817 45.445801 1.000000 1.000000 1.000000 +vn 0.930892 0.061473 -0.360085 +v -144.654922 162.853149 45.278797 1.000000 1.000000 1.000000 +vn 0.919073 -0.078283 -0.386233 +v -144.667801 163.613617 45.233597 1.000000 1.000000 1.000000 +vn 0.922756 0.080870 -0.376804 +v -144.667801 162.826645 45.233597 1.000000 1.000000 1.000000 +vn 0.901510 0.146219 -0.407309 +v -144.548065 162.649429 45.445801 1.000000 1.000000 1.000000 +vn 0.796642 0.321656 -0.511760 +v -144.670364 162.421997 45.062199 1.000000 1.000000 1.000000 +vn 0.817059 0.049624 -0.574414 +v -144.809418 162.826645 44.928799 1.000000 1.000000 1.000000 +vn 0.688629 0.243798 -0.682900 +v -144.802979 162.366180 44.844200 1.000000 1.000000 1.000000 +vn 0.873513 -0.205695 -0.441208 +v -144.684525 163.824295 45.140598 1.000000 1.000000 1.000000 +vn 0.816686 -0.038576 -0.575792 +v -144.809418 163.613617 44.928799 1.000000 1.000000 1.000000 +vn 0.500351 0.033211 -0.865185 +v -145.014130 162.826645 44.726799 1.000000 1.000000 1.000000 +vn 0.391426 0.142036 -0.909182 +v -144.969070 162.296417 44.704399 1.000000 1.000000 1.000000 +vn 0.758154 0.393470 -0.519985 +v -144.656219 162.374557 45.045399 1.000000 1.000000 1.000000 +vn 0.570335 0.380890 -0.727764 +v -144.733459 162.161072 44.814999 1.000000 1.000000 1.000000 +vn 0.812056 0.344353 -0.471153 +v -144.532608 162.620132 45.469597 1.000000 1.000000 1.000000 +vn 0.675021 0.528699 -0.514611 +v -144.513306 162.603378 45.476799 1.000000 1.000000 1.000000 +vn 0.666351 0.482791 -0.568233 +v -144.620163 162.248978 45.001396 1.000000 1.000000 1.000000 +vn 0.438411 0.482897 -0.758028 +v -144.630463 162.015945 44.800198 1.000000 1.000000 1.000000 +vn 0.316526 0.212818 -0.924402 +v -144.869934 162.056412 44.696800 1.000000 1.000000 1.000000 +vn 0.540563 0.597761 -0.592009 +v -144.542908 162.128967 44.970200 1.000000 1.000000 1.000000 +vn 0.435705 0.659745 -0.612289 +v -144.325333 162.430359 45.547798 1.000000 1.000000 1.000000 +vn 0.231141 0.753518 -0.615454 +v -144.309875 162.423386 45.544998 1.000000 1.000000 1.000000 +vn 0.417845 0.667520 -0.616297 +v -144.496567 162.094086 44.967796 1.000000 1.000000 1.000000 +vn 0.192230 0.766409 -0.612916 +v -144.313736 162.025726 44.985001 1.000000 1.000000 1.000000 +vn 0.298871 0.560013 -0.772698 +v -144.441208 162.053619 44.964600 1.000000 1.000000 1.000000 +vn 0.288936 0.572415 -0.767370 +v -144.497849 161.921066 44.797600 1.000000 1.000000 1.000000 +vn 0.066221 0.812588 -0.579065 +v -144.217178 162.034088 45.013397 1.000000 1.000000 1.000000 +vn 0.031737 0.676233 -0.736004 +v -144.217178 161.883392 44.820801 1.000000 1.000000 1.000000 +vn 0.134041 0.635843 -0.760090 +v -144.336914 161.879211 44.807198 1.000000 1.000000 1.000000 +vn 0.159660 0.314223 -0.935827 +v -144.564804 161.764786 44.692200 1.000000 1.000000 1.000000 +vn 0.237163 0.270738 -0.932982 +v -144.733459 161.882004 44.692799 1.000000 1.000000 1.000000 +vn 0.077613 0.355650 -0.931391 +v -144.363953 161.704788 44.694599 1.000000 1.000000 1.000000 +vn 0.060174 0.083158 -0.994718 +v -144.840317 161.745255 44.656197 1.000000 1.000000 1.000000 +vn 0.039248 0.077270 -0.996237 +v -144.635605 161.593155 44.656197 1.000000 1.000000 1.000000 +vn 0.065621 0.066513 -0.995625 +v -144.889252 161.781540 44.656197 1.000000 1.000000 1.000000 +vn -0.379968 -0.197582 -0.903651 +v -152.566498 159.715042 44.656197 1.000000 1.000000 1.000000 +vn 0.029101 0.098952 -0.994667 +v -144.392273 161.522003 44.656197 1.000000 1.000000 1.000000 +vn 0.015758 0.092597 -0.995579 +v -144.335632 161.505264 44.656197 1.000000 1.000000 1.000000 +vn 0.002369 0.102004 -0.994781 +v -144.217178 161.499680 44.656197 1.000000 1.000000 1.000000 +vn 0.016645 0.383203 -0.923514 +v -144.217178 161.699219 44.698196 1.000000 1.000000 1.000000 +vn 0.379970 -0.197583 -0.903650 +v -133.254272 159.715042 44.656197 1.000000 1.000000 1.000000 +vn -0.007562 0.098274 -0.995131 +v -141.603592 161.499680 44.656197 1.000000 1.000000 1.000000 +vn 0.595334 0.266484 -0.758000 +v -128.672897 162.251755 44.656197 1.000000 1.000000 1.000000 +vn -0.077197 -0.675193 -0.733591 +v -131.437637 159.715042 44.656197 1.000000 1.000000 1.000000 +vn 0.653895 -0.000001 -0.756585 +v -128.876846 163.220123 44.656197 1.000000 1.000000 1.000000 +vn -0.280505 -0.587384 -0.759142 +v -131.046249 159.624359 44.656197 1.000000 1.000000 1.000000 +vn 0.421818 0.491907 -0.761641 +v -128.101257 161.474564 44.656197 1.000000 1.000000 1.000000 +vn -0.410133 -0.611932 -0.676262 +v -129.600418 158.358780 44.656197 1.000000 1.000000 1.000000 +vn -0.449614 -0.535169 -0.715152 +v -130.723083 159.371796 44.656197 1.000000 1.000000 1.000000 +vn 0.153458 0.625653 -0.764859 +v -127.275223 161.043411 44.656197 1.000000 1.000000 1.000000 +vn -0.216929 -0.704903 -0.675317 +v -128.263748 157.718323 44.656197 1.000000 1.000000 1.000000 +vn -0.153457 0.625654 -0.764859 +v -126.358528 161.043411 44.656197 1.000000 1.000000 1.000000 +vn 0.000000 -0.737897 -0.674913 +v -126.816872 157.499252 44.656197 1.000000 1.000000 1.000000 +vn -0.421817 0.491907 -0.761642 +v -125.532486 161.474564 44.656197 1.000000 1.000000 1.000000 +vn 0.410128 -0.611904 -0.676291 +v -124.033859 158.358780 44.656197 1.000000 1.000000 1.000000 +vn 0.216988 -0.704900 -0.675302 +v -125.370003 157.718323 44.656197 1.000000 1.000000 1.000000 +vn -0.595333 0.266481 -0.758002 +v -124.960846 162.251755 44.656197 1.000000 1.000000 1.000000 +vn 0.449260 -0.535336 -0.715248 +v -122.910919 159.371796 44.656197 1.000000 1.000000 1.000000 +vn 0.280438 -0.587642 -0.758967 +v -122.587112 159.624359 44.656197 1.000000 1.000000 1.000000 +vn 0.077337 -0.675120 -0.733643 +v -122.196495 159.715042 44.656197 1.000000 1.000000 1.000000 +vn 0.074188 -0.724858 -0.684892 +v -121.908607 159.715042 44.656197 1.000000 1.000000 1.000000 +vn 0.293966 -0.686650 -0.664903 +v -121.551079 159.789001 44.656197 1.000000 1.000000 1.000000 +vn 0.532336 -0.521487 -0.666835 +v -121.244400 160.001083 44.656197 1.000000 1.000000 1.000000 +vn 0.669075 -0.310847 -0.675065 +v -121.032089 160.322021 44.656197 1.000000 1.000000 1.000000 +vn 0.720995 -0.123144 -0.681910 +v -120.549805 161.965714 44.656197 1.000000 1.000000 1.000000 +vn -0.653916 -0.000001 -0.756567 +v -124.756905 163.220123 44.656197 1.000000 1.000000 1.000000 +vn 0.729893 0.045895 -0.682019 +v -120.458519 163.688950 44.656197 1.000000 1.000000 1.000000 +vn -0.595336 -0.266480 -0.758000 +v -124.960846 164.188477 44.656197 1.000000 1.000000 1.000000 +vn 0.699856 0.213454 -0.681644 +v -120.764168 165.382889 44.656197 1.000000 1.000000 1.000000 +vn -0.421823 -0.491903 -0.761641 +v -125.532486 164.965683 44.656197 1.000000 1.000000 1.000000 +vn 0.521157 0.515781 -0.679975 +v -122.466087 168.267044 44.656197 1.000000 1.000000 1.000000 +vn 0.630284 0.372774 -0.681016 +v -121.447563 166.940079 44.656197 1.000000 1.000000 1.000000 +vn -0.153461 -0.625650 -0.764860 +v -126.358528 165.396851 44.656197 1.000000 1.000000 1.000000 +vn 0.374046 0.631733 -0.678972 +v -123.756149 169.278671 44.656197 1.000000 1.000000 1.000000 +vn 0.153462 -0.625650 -0.764861 +v -127.275223 165.396851 44.656197 1.000000 1.000000 1.000000 +vn 0.048749 0.720044 -0.692214 +v -126.816872 170.127029 44.656197 1.000000 1.000000 1.000000 +vn 0.195804 0.708371 -0.678138 +v -125.237267 169.912155 44.656197 1.000000 1.000000 1.000000 +vn 0.421825 -0.491902 -0.761640 +v -128.101257 164.965683 44.656197 1.000000 1.000000 1.000000 +vn 0.230707 0.408912 -0.882930 +v -133.254272 170.127029 44.656197 1.000000 1.000000 1.000000 +vn 0.595333 -0.266481 -0.758002 +v -128.672897 164.188477 44.656197 1.000000 1.000000 1.000000 +vn -0.230705 0.408908 -0.882932 +v -152.566498 170.127029 44.656197 1.000000 1.000000 1.000000 +vn -0.029946 0.082841 -0.996113 +v -141.283005 161.551300 44.656197 1.000000 1.000000 1.000000 +vn -0.051657 0.089856 -0.994614 +v -141.189026 161.605728 44.656197 1.000000 1.000000 1.000000 +vn -0.093514 -0.066336 -0.993406 +v -140.813080 164.489883 44.656197 1.000000 1.000000 1.000000 +vn -0.066743 -0.066754 -0.995535 +v -140.931519 164.657318 44.656197 1.000000 1.000000 1.000000 +vn -0.027653 -0.098441 -0.994759 +v -141.428497 164.918243 44.656197 1.000000 1.000000 1.000000 +vn -0.060563 -0.082106 -0.994782 +v -140.980453 164.694992 44.656197 1.000000 1.000000 1.000000 +vn -0.039251 -0.077277 -0.996237 +v -141.185165 164.847076 44.656197 1.000000 1.000000 1.000000 +vn -0.056293 0.070481 -0.995923 +v -141.015213 161.704788 44.656197 1.000000 1.000000 1.000000 +vn -0.078346 0.069902 -0.994473 +v -140.977875 161.746643 44.656197 1.000000 1.000000 1.000000 +vn -0.081735 0.052260 -0.995283 +v -140.791183 161.961533 44.656197 1.000000 1.000000 1.000000 +vn -0.109530 -0.028970 -0.993561 +v -140.618668 164.065704 44.656197 1.000000 1.000000 1.000000 +vn -0.115209 -0.041849 -0.992459 +v -140.674026 164.217789 44.656197 1.000000 1.000000 1.000000 +vn -0.091174 -0.049745 -0.994592 +v -140.730682 164.374069 44.656197 1.000000 1.000000 1.000000 +vn -0.099841 0.036809 -0.994322 +v -140.641846 162.292221 44.656197 1.000000 1.000000 1.000000 +vn -0.134762 0.023246 -0.990605 +v -140.603226 162.516876 44.656197 1.000000 1.000000 1.000000 +vn -0.131651 0.015189 -0.991180 +v -140.572311 162.695480 44.656197 1.000000 1.000000 1.000000 +vn -0.142265 0.002075 -0.989827 +v -140.568451 162.826645 44.656197 1.000000 1.000000 1.000000 +vn -0.138613 -0.007428 -0.990319 +v -140.568451 163.613617 44.656197 1.000000 1.000000 1.000000 +vn -0.075128 0.354835 -0.931906 +v -141.452957 161.704788 44.694599 1.000000 1.000000 1.000000 +vn -0.157670 0.313866 -0.936284 +v -141.255966 161.764786 44.692200 1.000000 1.000000 1.000000 +vn -0.243036 0.269011 -0.931969 +v -141.084732 161.884781 44.692799 1.000000 1.000000 1.000000 +vn -0.285360 0.573593 -0.767828 +v -141.322922 161.921066 44.797600 1.000000 1.000000 1.000000 +vn -0.327474 0.202030 -0.923008 +v -140.949554 162.060593 44.696800 1.000000 1.000000 1.000000 +vn -0.434488 0.486249 -0.758144 +v -141.189026 162.017349 44.800198 1.000000 1.000000 1.000000 +vn -0.444692 0.090838 -0.891065 +v -140.806641 162.554550 44.714397 1.000000 1.000000 1.000000 +vn -0.582464 0.345703 -0.735680 +v -141.086029 162.165253 44.815399 1.000000 1.000000 1.000000 +vn -0.455048 0.662500 -0.595000 +v -141.324203 162.094086 44.967796 1.000000 1.000000 1.000000 +vn -0.532468 0.600082 -0.596975 +v -141.275284 162.130371 44.970398 1.000000 1.000000 1.000000 +vn -0.353134 0.710162 -0.609070 +v -141.379562 162.053619 44.964600 1.000000 1.000000 1.000000 +vn -0.218584 0.745895 -0.629176 +v -141.510895 162.423386 45.544998 1.000000 1.000000 1.000000 +vn -0.442841 0.659952 -0.606923 +v -141.495438 162.430359 45.547798 1.000000 1.000000 1.000000 +vn -0.193877 0.775637 -0.600666 +v -141.504456 162.025726 44.984398 1.000000 1.000000 1.000000 +vn -0.140959 0.639095 -0.756101 +v -141.479996 161.879211 44.806801 1.000000 1.000000 1.000000 +vn -0.462020 0.460712 -0.757814 +v -141.510895 162.576874 45.696598 1.000000 1.000000 1.000000 +vn -0.101009 0.793903 -0.599595 +v -141.749084 162.318741 45.499001 1.000000 1.000000 1.000000 +vn -0.047129 0.822484 -0.566833 +v -141.603592 162.034088 45.013397 1.000000 1.000000 1.000000 +vn -0.029565 0.683241 -0.729594 +v -141.603592 161.883392 44.820801 1.000000 1.000000 1.000000 +vn -0.028450 0.549948 -0.834714 +v -141.603592 161.791290 44.759399 1.000000 1.000000 1.000000 +vn 0.103749 0.799110 -0.592164 +v -144.071701 162.318741 45.499001 1.000000 1.000000 1.000000 +vn -0.130732 0.571455 -0.810154 +v -141.749084 162.555939 45.761398 1.000000 1.000000 1.000000 +vn -0.502436 0.132108 -0.854463 +v -141.510895 162.853149 45.784798 1.000000 1.000000 1.000000 +vn 0.020350 0.554140 -0.832174 +v -144.217178 161.791290 44.759399 1.000000 1.000000 1.000000 +vn -0.018484 0.385550 -0.922502 +v -141.603592 161.699219 44.698196 1.000000 1.000000 1.000000 +vn -0.016500 0.104397 -0.994399 +v -141.423340 161.528976 44.656197 1.000000 1.000000 1.000000 +vn -0.015552 -0.093961 -0.995454 +v -141.485138 164.933594 44.656197 1.000000 1.000000 1.000000 +vn -0.002936 -0.101630 -0.994818 +v -141.603592 164.940567 44.656197 1.000000 1.000000 1.000000 +vn 0.007563 -0.098281 -0.995130 +v -144.217178 164.940567 44.656197 1.000000 1.000000 1.000000 +vn -0.421736 -0.491928 -0.761673 +v -157.718994 164.965683 44.656197 1.000000 1.000000 1.000000 +vn -0.049065 0.720111 -0.692122 +v -159.003891 170.127029 44.656197 1.000000 1.000000 1.000000 +vn -0.595336 -0.266299 -0.758063 +v -157.147354 164.188477 44.656197 1.000000 1.000000 1.000000 +vn -0.654043 -0.000001 -0.756457 +v -156.943924 163.220123 44.656197 1.000000 1.000000 1.000000 +vn 0.018501 -0.385480 -0.922531 +v -144.217178 164.741043 44.698196 1.000000 1.000000 1.000000 +vn 0.016502 -0.104399 -0.994399 +v -144.397430 164.911270 44.656197 1.000000 1.000000 1.000000 +vn -0.153391 -0.625707 -0.764828 +v -158.545547 165.396851 44.656197 1.000000 1.000000 1.000000 +vn -0.195830 0.708213 -0.678296 +v -160.583633 169.910751 44.656197 1.000000 1.000000 1.000000 +vn 0.153391 -0.625707 -0.764828 +v -159.462250 165.396851 44.656197 1.000000 1.000000 1.000000 +vn -0.373866 0.631915 -0.678902 +v -162.064240 169.278671 44.656197 1.000000 1.000000 1.000000 +vn 0.421736 -0.491928 -0.761673 +v -160.288803 164.965683 44.656197 1.000000 1.000000 1.000000 +vn -0.521176 0.515769 -0.679969 +v -163.354294 168.267044 44.656197 1.000000 1.000000 1.000000 +vn 0.595336 -0.266294 -0.758065 +v -160.860443 164.188477 44.656197 1.000000 1.000000 1.000000 +vn -0.630252 0.372790 -0.681036 +v -164.372696 166.940079 44.656197 1.000000 1.000000 1.000000 +vn 0.654067 -0.000001 -0.756437 +v -161.063858 163.220123 44.656197 1.000000 1.000000 1.000000 +vn -0.699767 0.213648 -0.681675 +v -165.056351 165.382889 44.656197 1.000000 1.000000 1.000000 +vn 0.595334 0.266295 -0.758067 +v -160.860443 162.251755 44.656197 1.000000 1.000000 1.000000 +vn -0.720993 -0.123279 -0.681888 +v -165.271347 161.965714 44.656197 1.000000 1.000000 1.000000 +vn -0.729934 0.046030 -0.681966 +v -165.362762 163.688950 44.656197 1.000000 1.000000 1.000000 +vn -0.668988 -0.311019 -0.675072 +v -164.788544 160.322021 44.656197 1.000000 1.000000 1.000000 +vn -0.532333 -0.521416 -0.666894 +v -164.576126 160.001083 44.656197 1.000000 1.000000 1.000000 +vn -0.294037 -0.686674 -0.664847 +v -164.269684 159.789001 44.656197 1.000000 1.000000 1.000000 +vn -0.074109 -0.724845 -0.684914 +v -163.911774 159.715042 44.656197 1.000000 1.000000 1.000000 +vn -0.077197 -0.675192 -0.733591 +v -163.624664 159.715042 44.656197 1.000000 1.000000 1.000000 +vn -0.280505 -0.587384 -0.759142 +v -163.233276 159.624359 44.656197 1.000000 1.000000 1.000000 +vn -0.449612 -0.535171 -0.715151 +v -162.910110 159.371796 44.656197 1.000000 1.000000 1.000000 +vn -0.410149 -0.611911 -0.676271 +v -161.787430 158.358780 44.656197 1.000000 1.000000 1.000000 +vn 0.421730 0.491932 -0.761674 +v -160.288803 161.474564 44.656197 1.000000 1.000000 1.000000 +vn -0.216950 -0.704906 -0.675307 +v -160.451019 157.718323 44.656197 1.000000 1.000000 1.000000 +vn 0.153387 0.625710 -0.764826 +v -159.462250 161.043411 44.656197 1.000000 1.000000 1.000000 +vn 0.000000 -0.737892 -0.674918 +v -159.003891 157.499252 44.656197 1.000000 1.000000 1.000000 +vn -0.153387 0.625710 -0.764826 +v -158.545547 161.043411 44.656197 1.000000 1.000000 1.000000 +vn 0.216951 -0.704906 -0.675307 +v -157.556763 157.718323 44.656197 1.000000 1.000000 1.000000 +vn 0.410150 -0.611910 -0.676271 +v -156.220367 158.358780 44.656197 1.000000 1.000000 1.000000 +vn -0.421730 0.491932 -0.761674 +v -157.718994 161.474564 44.656197 1.000000 1.000000 1.000000 +vn 0.449612 -0.535171 -0.715151 +v -155.097687 159.371796 44.656197 1.000000 1.000000 1.000000 +vn -0.595335 0.266301 -0.758064 +v -157.147354 162.251755 44.656197 1.000000 1.000000 1.000000 +vn 0.280506 -0.587384 -0.759142 +v -154.774521 159.624359 44.656197 1.000000 1.000000 1.000000 +vn 0.138613 0.007428 -0.990319 +v -145.252319 162.826645 44.656197 1.000000 1.000000 1.000000 +vn 0.109532 0.028969 -0.993561 +v -145.202103 162.374557 44.656197 1.000000 1.000000 1.000000 +vn 0.142265 -0.002075 -0.989827 +v -145.252319 163.613617 44.656197 1.000000 1.000000 1.000000 +vn 0.500900 -0.024263 -0.865165 +v -145.014130 163.613617 44.726799 1.000000 1.000000 1.000000 +vn 0.077197 -0.675192 -0.733591 +v -154.383133 159.715042 44.656197 1.000000 1.000000 1.000000 +vn 0.115207 0.041848 -0.992460 +v -145.146744 162.222458 44.656197 1.000000 1.000000 1.000000 +vn 0.748901 -0.159928 -0.643094 +v -144.826157 163.850815 44.882401 1.000000 1.000000 1.000000 +vn 0.801763 -0.342570 -0.489715 +v -144.644623 164.053131 45.053596 1.000000 1.000000 1.000000 +vn 0.674850 -0.542559 -0.500207 +v -144.513306 163.836868 45.476799 1.000000 1.000000 1.000000 +vn 0.713507 -0.416664 -0.563293 +v -144.621445 164.188477 45.002197 1.000000 1.000000 1.000000 +vn 0.813840 -0.350768 -0.463278 +v -144.532608 163.820114 45.469597 1.000000 1.000000 1.000000 +vn 0.454663 -0.663443 -0.594243 +v -144.496567 164.344757 44.967796 1.000000 1.000000 1.000000 +vn 0.526437 -0.604928 -0.597433 +v -144.545486 164.309875 44.970398 1.000000 1.000000 1.000000 +vn 0.582462 -0.345706 -0.735680 +v -144.734741 164.274994 44.815399 1.000000 1.000000 1.000000 +vn 0.433635 -0.486145 -0.758699 +v -144.631744 164.422897 44.800198 1.000000 1.000000 1.000000 +vn 0.359191 -0.707244 -0.608923 +v -144.441208 164.386612 44.964600 1.000000 1.000000 1.000000 +vn 0.219001 -0.746039 -0.628860 +v -144.309875 164.016861 45.544998 1.000000 1.000000 1.000000 +vn 0.285559 -0.572884 -0.768284 +v -144.497849 164.519180 44.797600 1.000000 1.000000 1.000000 +vn 0.243056 -0.269013 -0.931963 +v -144.736038 164.555450 44.692799 1.000000 1.000000 1.000000 +vn 0.157672 -0.313860 -0.936286 +v -144.564804 164.675461 44.692200 1.000000 1.000000 1.000000 +vn 0.327479 -0.202033 -0.923006 +v -144.871216 164.379639 44.696800 1.000000 1.000000 1.000000 +vn 0.078358 -0.069900 -0.994472 +v -144.842896 164.693588 44.656197 1.000000 1.000000 1.000000 +vn 0.056296 -0.070471 -0.995924 +v -144.805557 164.735458 44.656197 1.000000 1.000000 1.000000 +vn 0.444691 -0.090840 -0.891066 +v -145.014130 163.885696 44.714397 1.000000 1.000000 1.000000 +vn 0.099839 -0.036809 -0.994322 +v -145.178925 164.148026 44.656197 1.000000 1.000000 1.000000 +vn 0.081729 -0.052259 -0.995284 +v -145.029587 164.478714 44.656197 1.000000 1.000000 1.000000 +vn 0.131651 -0.015190 -0.991180 +v -145.248459 163.744766 44.656197 1.000000 1.000000 1.000000 +vn 0.134762 -0.023246 -0.990605 +v -145.217545 163.923370 44.656197 1.000000 1.000000 1.000000 +vn 0.051646 -0.089845 -0.994616 +v -144.631744 164.834534 44.656197 1.000000 1.000000 1.000000 +vn 0.029943 -0.082843 -0.996113 +v -144.537766 164.888947 44.656197 1.000000 1.000000 1.000000 +vn 0.075131 -0.354826 -0.931909 +v -144.367813 164.735458 44.694599 1.000000 1.000000 1.000000 +vn 0.140954 -0.639101 -0.756096 +v -144.340775 164.561035 44.806801 1.000000 1.000000 1.000000 +vn -0.016869 -0.383346 -0.923451 +v -141.603592 164.741043 44.698196 1.000000 1.000000 1.000000 +vn -0.077413 -0.355959 -0.931290 +v -141.456818 164.735458 44.694599 1.000000 1.000000 1.000000 +vn -0.159661 -0.314229 -0.935825 +v -141.255966 164.675461 44.692200 1.000000 1.000000 1.000000 +vn -0.237471 -0.270769 -0.932894 +v -141.087311 164.558243 44.692799 1.000000 1.000000 1.000000 +vn -0.316533 -0.212986 -0.924362 +v -140.950836 164.383835 44.696800 1.000000 1.000000 1.000000 +vn 0.091178 0.049748 -0.994591 +v -145.090088 162.066193 44.656197 1.000000 1.000000 1.000000 +vn 0.093775 0.066237 -0.993388 +v -145.007690 161.950378 44.656197 1.000000 1.000000 1.000000 +vn -0.125120 -0.568854 -0.812865 +v -141.749084 163.884293 45.761398 1.000000 1.000000 1.000000 +vn -0.469689 -0.449862 -0.759616 +v -141.510895 163.863373 45.696598 1.000000 1.000000 1.000000 +vn -0.289422 -0.147425 -0.945780 +v -141.512177 163.587097 45.785198 1.000000 1.000000 1.000000 +vn -0.103739 -0.799102 -0.592177 +v -141.749084 164.121506 45.499001 1.000000 1.000000 1.000000 +vn -0.231127 -0.753516 -0.615462 +v -141.510895 164.016861 45.544998 1.000000 1.000000 1.000000 +vn 0.101007 -0.793895 -0.599607 +v -144.071701 164.121506 45.499001 1.000000 1.000000 1.000000 +vn 0.047062 -0.822500 -0.566814 +v -144.217178 164.406158 45.013397 1.000000 1.000000 1.000000 +vn -0.066162 -0.812588 -0.579071 +v -141.603592 164.406158 45.013397 1.000000 1.000000 1.000000 +vn 0.193902 -0.775647 -0.600644 +v -144.316315 164.414536 44.984398 1.000000 1.000000 1.000000 +vn 0.029563 -0.683269 -0.729568 +v -144.217178 164.556854 44.820801 1.000000 1.000000 1.000000 +vn 0.028445 -0.549924 -0.834730 +v -144.217178 164.648941 44.759399 1.000000 1.000000 1.000000 +vn -0.020319 -0.554128 -0.832183 +v -141.603592 164.648941 44.759399 1.000000 1.000000 1.000000 +vn -0.031716 -0.676261 -0.735979 +v -141.603592 164.556854 44.820801 1.000000 1.000000 1.000000 +vn -0.134042 -0.635861 -0.760075 +v -141.483856 164.561035 44.807198 1.000000 1.000000 1.000000 +vn -0.192214 -0.766414 -0.612914 +v -141.507034 164.414536 44.985001 1.000000 1.000000 1.000000 +vn -0.288953 -0.572404 -0.767372 +v -141.322922 164.519180 44.797600 1.000000 1.000000 1.000000 +vn -0.438418 -0.482905 -0.758018 +v -141.190308 164.424286 44.800198 1.000000 1.000000 1.000000 +vn -0.417850 -0.667542 -0.616271 +v -141.324203 164.346161 44.967796 1.000000 1.000000 1.000000 +vn -0.298915 -0.560091 -0.772624 +v -141.379562 164.386612 44.964600 1.000000 1.000000 1.000000 +vn -0.570321 -0.380916 -0.727762 +v -141.087311 164.279190 44.814999 1.000000 1.000000 1.000000 +vn -0.540556 -0.597774 -0.592002 +v -141.277863 164.311279 44.970200 1.000000 1.000000 1.000000 +vn -0.391428 -0.142035 -0.909181 +v -140.851700 164.143829 44.704399 1.000000 1.000000 1.000000 +vn -0.758164 -0.393442 -0.519991 +v -141.164551 164.065704 45.045399 1.000000 1.000000 1.000000 +vn -0.666325 -0.482808 -0.568249 +v -141.200607 164.191269 45.001396 1.000000 1.000000 1.000000 +vn -0.688637 -0.243788 -0.682896 +v -141.017792 164.074066 44.844200 1.000000 1.000000 1.000000 +vn -0.435705 -0.659745 -0.612289 +v -141.495438 164.009888 45.547798 1.000000 1.000000 1.000000 +vn -0.675018 -0.528699 -0.514615 +v -141.307465 163.836868 45.476799 1.000000 1.000000 1.000000 +vn -0.777138 -0.313490 -0.545692 +v -141.306183 163.801971 45.511799 1.000000 1.000000 1.000000 +vn -0.812056 -0.344349 -0.471157 +v -141.288162 163.820114 45.469597 1.000000 1.000000 1.000000 +vn -0.901510 -0.146217 -0.407310 +v -141.272705 163.790817 45.445801 1.000000 1.000000 1.000000 +vn -0.930891 -0.061470 -0.360088 +v -141.165848 163.587097 45.278797 1.000000 1.000000 1.000000 +vn -0.796678 -0.321592 -0.511744 +v -141.150406 164.018250 45.062199 1.000000 1.000000 1.000000 +vn -0.922744 -0.080889 -0.376829 +v -141.152969 163.613617 45.233597 1.000000 1.000000 1.000000 +vn -0.919078 0.078280 -0.386222 +v -141.152969 162.826645 45.233597 1.000000 1.000000 1.000000 +vn -0.817059 -0.049626 -0.574414 +v -141.011353 163.613617 44.928799 1.000000 1.000000 1.000000 +vn -0.500351 -0.033212 -0.865185 +v -140.806641 163.613617 44.726799 1.000000 1.000000 1.000000 +vn -0.816686 0.038574 -0.575792 +v -141.011353 162.826645 44.928799 1.000000 1.000000 1.000000 +vn -0.500900 0.024262 -0.865165 +v -140.806641 162.826645 44.726799 1.000000 1.000000 1.000000 +vn -0.748904 0.159922 -0.643092 +v -140.994614 162.589432 44.882401 1.000000 1.000000 1.000000 +vn -0.873516 0.205681 -0.441209 +v -141.136246 162.615952 45.140598 1.000000 1.000000 1.000000 +vn -0.713495 0.416686 -0.563292 +v -141.199326 162.251755 45.002197 1.000000 1.000000 1.000000 +vn -0.801767 0.342564 -0.489715 +v -141.176147 162.387100 45.053596 1.000000 1.000000 1.000000 +vn -0.775172 0.316029 -0.547023 +v -141.306183 162.638275 45.511799 1.000000 1.000000 1.000000 +vn -0.674849 0.542554 -0.500214 +v -141.307465 162.603378 45.476799 1.000000 1.000000 1.000000 +vn -0.791799 0.096455 -0.603118 +v -141.307465 162.853149 45.582798 1.000000 1.000000 1.000000 +vn -0.502436 -0.132108 -0.854462 +v -141.510895 163.587097 45.784798 1.000000 1.000000 1.000000 +vn -0.791799 -0.096455 -0.603117 +v -141.307465 163.587097 45.582798 1.000000 1.000000 1.000000 +vn -0.891095 0.070766 -0.448266 +v -141.306183 162.853149 45.580399 1.000000 1.000000 1.000000 +vn -0.891340 -0.071350 -0.447684 +v -141.306183 163.587097 45.580399 1.000000 1.000000 1.000000 +vn -0.931188 0.068611 -0.358025 +v -141.165848 162.853149 45.278797 1.000000 1.000000 1.000000 +vn -0.900695 0.161410 -0.403355 +v -141.272705 162.649429 45.445801 1.000000 1.000000 1.000000 +vn -0.813840 0.350763 -0.463282 +v -141.288162 162.620132 45.469597 1.000000 1.000000 1.000000 +vn 0.736183 0.333970 0.588641 +v -133.254272 162.801529 54.648804 1.000000 1.000000 1.000000 +vn 0.680189 -0.361672 -0.637602 +v -133.254272 162.576874 54.027603 1.000000 1.000000 1.000000 +vn 0.774680 0.070909 0.628365 +v -133.254272 162.987106 54.572205 1.000000 1.000000 1.000000 +vn 0.736980 0.322997 0.593746 +v -133.254272 160.606659 56.285206 1.000000 1.000000 1.000000 +vn 0.649986 -0.084999 -0.755178 +v -133.254272 162.948029 53.874405 1.000000 1.000000 1.000000 +vn 0.717924 -0.465759 -0.517353 +v -133.254272 160.380615 55.664204 1.000000 1.000000 1.000000 +vn 0.738928 -0.200846 0.643153 +v -133.254272 163.179657 54.604607 1.000000 1.000000 1.000000 +vn 0.677891 0.219344 -0.701678 +v -133.254272 163.331757 53.939205 1.000000 1.000000 1.000000 +vn 0.672545 -0.202151 0.711912 +v -133.254272 169.822845 57.721199 1.000000 1.000000 1.000000 +vn 0.745165 0.182448 -0.641438 +v -133.254272 169.974945 57.055805 1.000000 1.000000 1.000000 +vn 0.641979 0.159313 0.749988 +v -133.254272 170.277725 57.773598 1.000000 1.000000 1.000000 +vn 0.786558 -0.128474 -0.604004 +v -133.254272 170.202362 57.082207 1.000000 1.000000 1.000000 +vn 0.655355 0.533187 0.534997 +v -133.254272 170.700500 57.524006 1.000000 1.000000 1.000000 +vn 0.766657 -0.452621 -0.455379 +v -133.254272 170.413071 56.957405 1.000000 1.000000 1.000000 +vn 0.668015 0.698519 0.256569 +v -133.254272 170.996307 57.026806 1.000000 1.000000 1.000000 +vn 0.751648 -0.618898 -0.228014 +v -133.254272 170.562363 56.708805 1.000000 1.000000 1.000000 +vn 0.186224 0.893562 0.408495 +v -133.254272 171.103760 56.390606 1.000000 1.000000 1.000000 +vn 0.376631 -0.898656 0.224872 +v -133.254272 170.615402 56.390606 1.000000 1.000000 1.000000 +vn 0.701760 0.055557 0.710244 +v -133.383026 160.142014 56.631207 1.000000 1.000000 1.000000 +vn 0.652505 -0.650454 -0.388776 +v -133.383026 159.917374 56.010204 1.000000 1.000000 1.000000 +vn 0.446202 -0.231504 0.864471 +v -133.737091 159.802948 56.884605 1.000000 1.000000 1.000000 +vn 0.395588 -0.880579 -0.260941 +v -133.737091 159.576904 56.263405 1.000000 1.000000 1.000000 +vn 0.779440 -0.386272 0.493221 +v -133.254272 170.371201 45.449997 1.000000 1.000000 1.000000 +vn 0.646672 0.470306 -0.600523 +v -133.254272 170.615402 44.843800 1.000000 1.000000 1.000000 +vn 0.757615 -0.601929 0.252388 +v -133.254272 170.549805 45.706200 1.000000 1.000000 1.000000 +vn 0.662715 0.690627 -0.289557 +v -133.254272 170.972595 45.356197 1.000000 1.000000 1.000000 +vn 0.380805 -0.898329 -0.219073 +v -133.254272 170.615402 46.056198 1.000000 1.000000 1.000000 +vn 0.182636 0.891976 -0.413549 +v -133.254272 171.103760 46.056198 1.000000 1.000000 1.000000 +vn 0.745325 0.336448 -0.575581 +v -133.254272 159.470871 44.562401 1.000000 1.000000 1.000000 +vn 0.737199 0.352982 -0.576144 +v -133.254272 158.650406 43.883400 1.000000 1.000000 1.000000 +vn 0.704401 0.092571 -0.703740 +v -133.383026 158.196915 43.508400 1.000000 1.000000 1.000000 +vn 0.451596 -0.192865 -0.871128 +v -133.737091 157.864838 43.233799 1.000000 1.000000 1.000000 +vn 0.126769 -0.278678 -0.951981 +v -134.219894 157.743439 43.133400 1.000000 1.000000 1.000000 +vn -0.126790 -0.278688 -0.951975 +v -151.600876 157.743439 43.133400 1.000000 1.000000 1.000000 +vn -0.745325 0.336448 -0.575581 +v -152.566498 159.470871 44.562401 1.000000 1.000000 1.000000 +vn -0.451570 -0.192899 -0.871134 +v -152.083694 157.864838 43.233799 1.000000 1.000000 1.000000 +vn -0.704356 0.092573 -0.703785 +v -152.437744 158.196915 43.508400 1.000000 1.000000 1.000000 +vn -0.737150 0.353108 -0.576129 +v -152.566498 158.650406 43.883400 1.000000 1.000000 1.000000 +vn -0.646671 0.470312 -0.600519 +v -152.566498 170.615402 44.843800 1.000000 1.000000 1.000000 +vn -0.662716 0.690629 -0.289550 +v -152.566498 170.972595 45.356216 1.000000 1.000000 1.000000 +vn -0.182637 0.891976 -0.413549 +v -152.566498 171.103760 46.056217 1.000000 1.000000 1.000000 +vn -0.186225 0.893562 0.408495 +v -152.566498 171.103760 56.390610 1.000000 1.000000 1.000000 +vn 0.275270 0.614408 0.739412 +v -152.791809 171.169342 56.390610 1.000000 1.000000 1.000000 +vn 0.275270 0.614408 -0.739411 +v -152.791809 171.169342 46.056217 1.000000 1.000000 1.000000 +vn -0.275271 0.614408 -0.739411 +v -133.028961 171.169342 46.056198 1.000000 1.000000 1.000000 +vn -0.668015 0.698519 0.256569 +v -152.566498 170.996307 57.026810 1.000000 1.000000 1.000000 +vn -0.275270 0.614408 0.739411 +v -133.028961 171.169342 56.390606 1.000000 1.000000 1.000000 +vn -0.655357 0.533192 0.534989 +v -152.566498 170.700500 57.524010 1.000000 1.000000 1.000000 +vn -0.641976 0.159323 0.749989 +v -152.566498 170.277725 57.773617 1.000000 1.000000 1.000000 +vn 0.223301 0.640162 -0.735071 +v -154.080566 171.975845 46.056217 1.000000 1.000000 1.000000 +vn 0.223038 0.640381 0.734960 +v -154.080566 171.975845 56.390610 1.000000 1.000000 1.000000 +vn -0.281210 0.957451 -0.064867 +v -154.917435 172.499100 47.556217 1.000000 1.000000 1.000000 +vn -0.266450 0.921971 -0.281022 +v -154.805420 172.429321 46.806217 1.000000 1.000000 1.000000 +vn -0.088747 0.798722 -0.595120 +v -154.499008 172.238174 46.257217 1.000000 1.000000 1.000000 +vn -0.281195 0.957452 0.064919 +v -154.917435 172.499100 54.890610 1.000000 1.000000 1.000000 +vn -0.090369 0.797951 0.595910 +v -154.499008 172.236771 56.189610 1.000000 1.000000 1.000000 +vn -0.264895 0.922319 0.281352 +v -154.805420 172.429321 55.640610 1.000000 1.000000 1.000000 +vn -0.672544 -0.202151 0.711913 +v -152.566498 169.822845 57.721218 1.000000 1.000000 1.000000 +vn -0.738929 -0.200846 0.643153 +v -152.566498 163.179657 54.604610 1.000000 1.000000 1.000000 +vn -0.774680 0.070909 0.628365 +v -152.566498 162.987106 54.572208 1.000000 1.000000 1.000000 +vn -0.736183 0.333970 0.588642 +v -152.566498 162.801529 54.648808 1.000000 1.000000 1.000000 +vn -0.702373 0.055564 0.709637 +v -152.437744 160.142014 56.631207 1.000000 1.000000 1.000000 +vn -0.446057 -0.232174 0.864366 +v -152.083694 159.802948 56.884605 1.000000 1.000000 1.000000 +vn -0.737040 0.322896 0.593725 +v -152.566498 160.606659 56.285206 1.000000 1.000000 1.000000 +vn -0.124366 -0.318507 0.939727 +v -151.600876 159.678757 56.977203 1.000000 1.000000 1.000000 +vn 0.124447 -0.318491 0.939721 +v -134.219894 159.678757 56.977203 1.000000 1.000000 1.000000 +vn -0.100835 -0.963925 -0.246336 +v -151.600876 159.452728 56.356205 1.000000 1.000000 1.000000 +vn 0.100798 -0.963938 -0.246297 +v -134.219894 159.452728 56.356205 1.000000 1.000000 1.000000 +vn -0.395078 -0.880501 -0.261974 +v -152.083694 159.576904 56.263405 1.000000 1.000000 1.000000 +vn -0.651857 -0.650554 -0.389695 +v -152.437744 159.917374 56.010204 1.000000 1.000000 1.000000 +vn -0.717927 -0.465849 -0.517268 +v -152.566498 160.380615 55.664204 1.000000 1.000000 1.000000 +vn -0.680188 -0.361670 -0.637604 +v -152.566498 162.576874 54.027603 1.000000 1.000000 1.000000 +vn -0.649987 -0.084996 -0.755177 +v -152.566498 162.948029 53.874409 1.000000 1.000000 1.000000 +vn -0.677891 0.219344 -0.701678 +v -152.566498 163.331757 53.939209 1.000000 1.000000 1.000000 +vn -0.745165 0.182448 -0.641437 +v -152.566498 169.974945 57.055809 1.000000 1.000000 1.000000 +vn -0.786558 -0.128474 -0.604005 +v -152.566498 170.202362 57.082211 1.000000 1.000000 1.000000 +vn -0.766658 -0.452621 -0.455379 +v -152.566498 170.413071 56.957409 1.000000 1.000000 1.000000 +vn -0.751648 -0.618898 -0.228014 +v -152.566498 170.562363 56.708809 1.000000 1.000000 1.000000 +vn -0.376631 -0.898656 0.224872 +v -152.566498 170.615402 56.390610 1.000000 1.000000 1.000000 +vn 0.205032 -0.706775 -0.677076 +v -133.021240 170.648880 46.056198 1.000000 1.000000 1.000000 +vn 0.205032 -0.706775 0.677075 +v -133.021240 170.648880 56.390606 1.000000 1.000000 1.000000 +vn -0.380803 -0.898329 -0.219075 +v -152.566498 170.615402 46.056217 1.000000 1.000000 1.000000 +vn -0.205032 -0.706775 0.677076 +v -152.799530 170.648880 56.390610 1.000000 1.000000 1.000000 +vn -0.757616 -0.601930 0.252385 +v -152.566498 170.549805 45.706200 1.000000 1.000000 1.000000 +vn -0.205032 -0.706775 -0.677076 +v -152.799530 170.648880 46.056217 1.000000 1.000000 1.000000 +vn -0.340113 -0.636752 0.692004 +v -153.017105 170.746567 56.390610 1.000000 1.000000 1.000000 +vn -0.340113 -0.636752 -0.692004 +v -153.017105 170.746567 46.056217 1.000000 1.000000 1.000000 +vn -0.471419 -0.496468 -0.728892 +v -154.305878 171.553055 46.056217 1.000000 1.000000 1.000000 +vn -0.471505 -0.496444 0.728853 +v -154.305878 171.553055 56.390610 1.000000 1.000000 1.000000 +vn -0.970376 -0.233711 -0.061236 +v -155.142746 172.076309 47.556217 1.000000 1.000000 1.000000 +vn -0.749007 -0.313899 -0.583486 +v -154.724319 171.813995 46.257217 1.000000 1.000000 1.000000 +vn -0.970369 -0.233725 0.061285 +v -155.142746 172.076309 54.890610 1.000000 1.000000 1.000000 +vn -0.935904 -0.225491 0.270624 +v -155.030731 172.006546 55.640610 1.000000 1.000000 1.000000 +vn -0.749361 -0.314295 0.582817 +v -154.724319 171.813995 56.189610 1.000000 1.000000 1.000000 +vn -0.936273 -0.224042 -0.270551 +v -155.030731 172.006546 46.806217 1.000000 1.000000 1.000000 +vn -0.779449 -0.386249 0.493226 +v -152.566498 170.371201 45.449997 1.000000 1.000000 1.000000 +vn 0.340113 -0.636753 -0.692004 +v -132.803665 170.746567 46.056198 1.000000 1.000000 1.000000 +vn 0.340113 -0.636752 0.692004 +v -132.803665 170.746567 56.390606 1.000000 1.000000 1.000000 +vn 0.471419 -0.496468 0.728892 +v -131.514893 171.553055 56.390606 1.000000 1.000000 1.000000 +vn -0.223300 0.640162 0.735071 +v -131.740204 171.975845 56.390606 1.000000 1.000000 1.000000 +vn -0.223438 0.640117 -0.735069 +v -131.740204 171.975845 46.056198 1.000000 1.000000 1.000000 +vn 0.471447 -0.496523 -0.728837 +v -131.514893 171.553055 46.056198 1.000000 1.000000 1.000000 +vn 0.089234 0.798554 -0.595273 +v -131.321777 172.238174 46.257198 1.000000 1.000000 1.000000 +vn 0.749395 -0.314556 -0.582633 +v -131.096451 171.813995 46.257198 1.000000 1.000000 1.000000 +vn 0.267173 0.921687 -0.281268 +v -131.015350 172.429321 46.806198 1.000000 1.000000 1.000000 +vn 0.935904 -0.225491 -0.270624 +v -130.790039 172.006546 46.806198 1.000000 1.000000 1.000000 +vn 0.281216 0.957452 -0.064839 +v -130.903336 172.499100 47.556198 1.000000 1.000000 1.000000 +vn 0.970369 -0.233725 -0.061285 +v -130.678024 172.076309 47.556198 1.000000 1.000000 1.000000 +vn 0.281210 0.957451 0.064867 +v -130.903336 172.499100 54.890606 1.000000 1.000000 1.000000 +vn 0.970376 -0.233711 0.061236 +v -130.678024 172.076309 54.890606 1.000000 1.000000 1.000000 +vn 0.266450 0.921970 0.281028 +v -131.015350 172.429321 55.640606 1.000000 1.000000 1.000000 +vn 0.936272 -0.224040 0.270555 +v -130.790039 172.006546 55.640606 1.000000 1.000000 1.000000 +vn 0.088720 0.798736 0.595105 +v -131.321777 172.238174 56.189606 1.000000 1.000000 1.000000 +vn 0.749010 -0.313891 0.583487 +v -131.096451 171.813995 56.189606 1.000000 1.000000 1.000000 +vn -0.980379 -0.023898 -0.195666 +v 120.148102 -156.477371 47.908119 1.000000 1.000000 1.000000 +vn -0.021751 -0.978030 -0.207328 +v 120.512337 -156.872269 47.908119 1.000000 1.000000 1.000000 +vn -0.019355 -0.998582 -0.049589 +v 120.408310 -156.985291 49.056137 1.000000 1.000000 1.000000 +vn -0.998749 -0.019272 -0.046145 +v 120.044212 -156.590408 49.056137 1.000000 1.000000 1.000000 +vn -0.909915 0.035107 -0.413306 +v 120.444229 -156.156464 46.934738 1.000000 1.000000 1.000000 +vn 0.044261 -0.900837 -0.431896 +v 120.808327 -156.551331 46.934738 1.000000 1.000000 1.000000 +vn -0.744964 0.181872 -0.641834 +v 120.887253 -155.676453 46.284519 1.000000 1.000000 1.000000 +vn 0.199999 -0.727520 -0.656289 +v 121.251350 -156.071335 46.284519 1.000000 1.000000 1.000000 +vn -0.567699 0.387884 -0.726129 +v 121.409843 -155.109955 46.056137 1.000000 1.000000 1.000000 +vn 0.417870 -0.537561 -0.732402 +v 121.773941 -155.504837 46.056137 1.000000 1.000000 1.000000 +vn -0.998748 -0.019282 0.046168 +v 120.044212 -156.590408 53.392719 1.000000 1.000000 1.000000 +vn -0.019302 -0.998583 0.049596 +v 120.408310 -156.985291 53.392719 1.000000 1.000000 1.000000 +vn -0.021849 -0.978029 0.207321 +v 120.512337 -156.872269 54.540730 1.000000 1.000000 1.000000 +vn -0.980386 -0.023767 0.195650 +v 120.148102 -156.477371 54.540730 1.000000 1.000000 1.000000 +vn 0.044102 -0.900834 0.431919 +v 120.808327 -156.551331 55.513927 1.000000 1.000000 1.000000 +vn -0.909950 0.035232 0.413219 +v 120.444229 -156.156464 55.513927 1.000000 1.000000 1.000000 +vn 0.199819 -0.727471 0.656398 +v 121.251350 -156.071335 56.164330 1.000000 1.000000 1.000000 +vn -0.744996 0.181826 0.641810 +v 120.887253 -155.676453 56.164330 1.000000 1.000000 1.000000 +vn 0.417896 -0.537558 0.732390 +v 121.773941 -155.504837 56.392727 1.000000 1.000000 1.000000 +vn -0.567702 0.387878 0.726130 +v 121.409843 -155.109955 56.392727 1.000000 1.000000 1.000000 +vn 0.074499 0.966175 -0.246894 +v 144.197861 -138.559906 56.411129 1.000000 1.000000 1.000000 +vn 0.093916 0.304704 0.947805 +v 144.197861 -138.822220 57.117329 1.000000 1.000000 1.000000 +vn 0.353080 0.261198 0.898393 +v 144.936874 -138.961761 57.010128 1.000000 1.000000 1.000000 +vn 0.299936 0.921468 -0.246852 +v 144.936874 -138.700821 56.303928 1.000000 1.000000 1.000000 +vn -0.074770 0.966196 -0.246728 +v 128.748093 -138.559906 56.411133 1.000000 1.000000 1.000000 +vn -0.094290 0.304835 0.947726 +v 128.748093 -138.822220 57.117332 1.000000 1.000000 1.000000 +vn -0.299935 0.921583 -0.246421 +v 128.009079 -138.700821 56.303932 1.000000 1.000000 1.000000 +vn -0.352902 0.261332 0.898424 +v 128.009079 -138.961761 57.010132 1.000000 1.000000 1.000000 +vn -0.532002 0.781328 -0.326345 +v 127.382462 -139.101288 55.998531 1.000000 1.000000 1.000000 +vn -0.603390 0.069735 0.794392 +v 127.382462 -139.362213 56.704933 1.000000 1.000000 1.000000 +vn -0.677664 0.596065 -0.430671 +v 126.963898 -139.699890 55.541531 1.000000 1.000000 1.000000 +vn -0.725319 -0.161384 0.669229 +v 126.963898 -139.962204 56.247932 1.000000 1.000000 1.000000 +vn -0.715955 0.460083 -0.525102 +v 126.816872 -140.407318 55.002731 1.000000 1.000000 1.000000 +vn -0.731272 -0.354389 0.582795 +v 126.816872 -140.669647 55.708931 1.000000 1.000000 1.000000 +vn -0.680071 0.368179 -0.633993 +v 126.816872 -141.617081 54.080933 1.000000 1.000000 1.000000 +vn -0.735885 -0.340917 0.585021 +v 126.816872 -141.879395 54.787331 1.000000 1.000000 1.000000 +vn -0.775654 -0.076412 0.626516 +v 126.816872 -142.064987 54.707932 1.000000 1.000000 1.000000 +vn -0.649623 0.090766 -0.754819 +v 126.816872 -142.017532 53.911133 1.000000 1.000000 1.000000 +vn -0.739221 0.198185 0.643642 +v 126.816872 -142.258926 54.739532 1.000000 1.000000 1.000000 +vn -0.677604 -0.216472 -0.702846 +v 126.816872 -142.431961 53.978733 1.000000 1.000000 1.000000 +vn -0.672564 0.200236 0.712435 +v 126.816872 -148.871414 57.819317 1.000000 1.000000 1.000000 +vn -0.745143 -0.180710 -0.641954 +v 126.816872 -149.044434 57.058331 1.000000 1.000000 1.000000 +vn -0.642047 -0.160946 0.749581 +v 126.816872 -149.358383 57.874138 1.000000 1.000000 1.000000 +vn -0.786403 0.129743 -0.603934 +v 126.816872 -149.271881 57.084129 1.000000 1.000000 1.000000 +vn -0.655522 -0.533571 0.534408 +v 126.816872 -149.810471 57.606140 1.000000 1.000000 1.000000 +vn -0.766951 0.453554 -0.453954 +v 126.816872 -149.482574 56.958927 1.000000 1.000000 1.000000 +vn -0.667933 -0.698699 0.256292 +v 126.816872 -150.127213 57.073730 1.000000 1.000000 1.000000 +vn -0.751162 0.619827 -0.227089 +v 126.816872 -149.630478 56.710529 1.000000 1.000000 1.000000 +vn -0.205747 -0.895855 0.393843 +v 126.816872 -150.241638 56.392727 1.000000 1.000000 1.000000 +vn -0.396564 0.893398 0.211134 +v 126.816872 -149.683502 56.392727 1.000000 1.000000 1.000000 +vn 0.603531 0.069913 0.794269 +v 145.563873 -139.362213 56.704929 1.000000 1.000000 1.000000 +vn 0.532268 0.781215 -0.326182 +v 145.563873 -139.101288 55.998528 1.000000 1.000000 1.000000 +vn 0.725642 -0.161060 0.668957 +v 145.982315 -139.962204 56.247929 1.000000 1.000000 1.000000 +vn 0.677514 0.596109 -0.430847 +v 145.982315 -139.699890 55.541527 1.000000 1.000000 1.000000 +vn 0.731247 -0.354527 0.582742 +v 146.129089 -140.669647 55.708927 1.000000 1.000000 1.000000 +vn 0.716018 0.460038 -0.525055 +v 146.129089 -140.407318 55.002728 1.000000 1.000000 1.000000 +vn 0.735886 -0.340917 0.585020 +v 146.129089 -141.879395 54.787327 1.000000 1.000000 1.000000 +vn 0.680085 0.368140 -0.634002 +v 146.129089 -141.617081 54.080929 1.000000 1.000000 1.000000 +vn 0.775653 -0.076413 0.626517 +v 146.129089 -142.064987 54.707928 1.000000 1.000000 1.000000 +vn 0.649622 0.090766 -0.754820 +v 146.129089 -142.017532 53.911129 1.000000 1.000000 1.000000 +vn 0.739221 0.198185 0.643642 +v 146.129089 -142.258926 54.739529 1.000000 1.000000 1.000000 +vn 0.677604 -0.216472 -0.702846 +v 146.129089 -142.431961 53.978729 1.000000 1.000000 1.000000 +vn 0.672564 0.200236 0.712434 +v 146.129089 -148.871414 57.819317 1.000000 1.000000 1.000000 +vn 0.745144 -0.180710 -0.641954 +v 146.129089 -149.044434 57.058331 1.000000 1.000000 1.000000 +vn 0.786402 0.129744 -0.603935 +v 146.129089 -149.271881 57.084129 1.000000 1.000000 1.000000 +vn 0.642047 -0.160945 0.749581 +v 146.129089 -149.358383 57.874138 1.000000 1.000000 1.000000 +vn 0.766952 0.453554 -0.453953 +v 146.129089 -149.482574 56.958927 1.000000 1.000000 1.000000 +vn 0.655522 -0.533571 0.534409 +v 146.129089 -149.810471 57.606140 1.000000 1.000000 1.000000 +vn 0.751163 0.619827 -0.227089 +v 146.129089 -149.630478 56.710529 1.000000 1.000000 1.000000 +vn 0.667932 -0.698699 0.256292 +v 146.129089 -150.127213 57.073730 1.000000 1.000000 1.000000 +vn 0.726172 0.685165 -0.056767 +v 146.129089 -149.683502 56.392727 1.000000 1.000000 1.000000 +vn 0.688864 -0.722381 0.060267 +v 146.129089 -150.241638 56.392727 1.000000 1.000000 1.000000 +vn 0.687007 -0.723580 -0.066740 +v 146.129089 -150.241638 46.056137 1.000000 1.000000 1.000000 +vn 0.728527 0.682082 0.063349 +v 146.129089 -149.683502 46.056137 1.000000 1.000000 1.000000 +vn 0.757622 0.601928 0.252372 +v 146.129089 -149.617920 45.706120 1.000000 1.000000 1.000000 +vn 0.662472 -0.690832 -0.289623 +v 146.129089 -150.102097 45.306137 1.000000 1.000000 1.000000 +vn 0.779448 0.386248 0.493228 +v 146.129089 -149.439316 45.449921 1.000000 1.000000 1.000000 +vn 0.646784 -0.469880 -0.600736 +v 146.129089 -149.718384 44.757137 1.000000 1.000000 1.000000 +vn 0.379958 -0.197595 0.903653 +v 146.129089 -149.195145 45.356140 1.000000 1.000000 1.000000 +vn 0.230706 -0.408915 -0.882929 +v 146.129089 -149.195145 44.556137 1.000000 1.000000 1.000000 +vn 0.715714 0.480105 0.507202 +v 146.129089 -137.191071 44.256138 1.000000 1.000000 1.000000 +vn 0.731584 -0.377594 -0.567634 +v 146.129089 -137.470154 43.563316 1.000000 1.000000 1.000000 +vn 0.727146 -0.188362 -0.660136 +v 145.982315 -136.776657 42.989338 1.000000 1.000000 1.000000 +vn 0.677419 0.611002 0.409610 +v 145.982315 -136.497589 43.682137 1.000000 1.000000 1.000000 +vn 0.672516 0.373434 0.638960 +v 146.129089 -138.278046 45.155136 1.000000 1.000000 1.000000 +vn 0.745329 -0.336445 -0.575578 +v 146.129089 -138.557114 44.462337 1.000000 1.000000 1.000000 +vn 0.379973 0.197580 -0.903650 +v 146.129089 -138.801285 44.556137 1.000000 1.000000 1.000000 +vn 0.230706 0.408914 0.882929 +v 146.129089 -138.801285 45.356140 1.000000 1.000000 1.000000 +vn 0.607095 0.037344 -0.793751 +v 145.563873 -136.189224 42.502720 1.000000 1.000000 1.000000 +vn 0.533555 0.790868 0.299746 +v 145.563873 -135.910156 43.195538 1.000000 1.000000 1.000000 +vn 0.356941 0.228233 -0.905816 +v 144.936874 -135.795746 42.177521 1.000000 1.000000 1.000000 +vn 0.301895 0.928798 0.214928 +v 144.936874 -135.516678 42.870319 1.000000 1.000000 1.000000 +vn 0.095875 0.272971 -0.957233 +v 144.197861 -135.657608 42.063316 1.000000 1.000000 1.000000 +vn 0.075176 0.973973 0.213833 +v 144.197861 -135.378540 42.756138 1.000000 1.000000 1.000000 +vn -0.095877 0.272969 -0.957233 +v 128.748093 -135.657608 42.063339 1.000000 1.000000 1.000000 +vn -0.075177 0.973975 0.213825 +v 128.748093 -135.378540 42.756138 1.000000 1.000000 1.000000 +vn -0.357043 0.228218 -0.905780 +v 128.009079 -135.795746 42.177540 1.000000 1.000000 1.000000 +vn -0.302000 0.928764 0.214927 +v 128.009079 -135.516678 42.870338 1.000000 1.000000 1.000000 +vn -0.607126 0.037249 -0.793732 +v 127.382462 -136.189224 42.502739 1.000000 1.000000 1.000000 +vn -0.533563 0.790845 0.299792 +v 127.382462 -135.910156 43.195538 1.000000 1.000000 1.000000 +vn -0.727090 -0.188270 -0.660223 +v 126.963898 -136.776657 42.989338 1.000000 1.000000 1.000000 +vn -0.677339 0.611129 0.409553 +v 126.963898 -136.497589 43.682137 1.000000 1.000000 1.000000 +vn -0.731622 -0.377461 -0.567673 +v 126.816872 -137.470154 43.563339 1.000000 1.000000 1.000000 +vn -0.715725 0.480155 0.507138 +v 126.816872 -137.191071 44.256138 1.000000 1.000000 1.000000 +vn -0.745329 -0.336443 -0.575579 +v 126.816872 -138.557114 44.462337 1.000000 1.000000 1.000000 +vn -0.672516 0.373434 0.638960 +v 126.816872 -138.278046 45.155136 1.000000 1.000000 1.000000 +vn -0.750549 -0.120507 -0.649734 +v 126.816872 -138.801285 44.556137 1.000000 1.000000 1.000000 +vn -0.668272 0.135660 0.731443 +v 126.816872 -138.801285 45.356140 1.000000 1.000000 1.000000 +vn -0.668273 -0.135658 -0.731442 +v 126.816872 -149.195145 44.556137 1.000000 1.000000 1.000000 +vn -0.750540 0.120486 0.649748 +v 126.816872 -149.195145 45.356140 1.000000 1.000000 1.000000 +vn -0.779448 0.386248 0.493228 +v 126.816872 -149.439316 45.449921 1.000000 1.000000 1.000000 +vn -0.646784 -0.469880 -0.600736 +v 126.816872 -149.718384 44.757137 1.000000 1.000000 1.000000 +vn -0.757623 0.601927 0.252372 +v 126.816872 -149.617920 45.706120 1.000000 1.000000 1.000000 +vn -0.662472 -0.690832 -0.289623 +v 126.816872 -150.102097 45.306137 1.000000 1.000000 1.000000 +vn -0.400639 0.892925 -0.205360 +v 126.816872 -149.683502 46.056137 1.000000 1.000000 1.000000 +vn -0.202270 -0.894440 -0.398828 +v 126.816872 -150.241638 46.056137 1.000000 1.000000 1.000000 +vn 0.068640 0.723916 -0.686465 +v 164.245224 -138.801285 44.556118 1.000000 1.000000 1.000000 +vn 0.068640 0.723916 0.686465 +v 164.245224 -138.801285 45.356117 1.000000 1.000000 1.000000 +vn 0.273723 0.692486 0.667487 +v 164.332779 -138.818039 45.356117 1.000000 1.000000 1.000000 +vn 0.273723 0.692486 -0.667487 +v 164.332779 -138.818039 44.556118 1.000000 1.000000 1.000000 +vn 0.081268 0.673059 -0.735110 +v 163.260315 -138.801285 44.556118 1.000000 1.000000 1.000000 +vn 0.081268 0.673059 0.735110 +v 163.260315 -138.801285 45.356117 1.000000 1.000000 1.000000 +vn 0.292015 0.578743 -0.761436 +v 163.152161 -138.774780 44.556118 1.000000 1.000000 1.000000 +vn 0.292015 0.578743 0.761436 +v 163.152161 -138.774780 45.356117 1.000000 1.000000 1.000000 +vn 0.467028 0.519079 -0.715850 +v 163.063324 -138.700821 44.556118 1.000000 1.000000 1.000000 +vn 0.467028 0.519079 0.715850 +v 163.063324 -138.700821 45.356117 1.000000 1.000000 1.000000 +vn 0.429153 0.600294 -0.674889 +v 161.917465 -137.587357 44.556118 1.000000 1.000000 1.000000 +vn 0.429162 0.600291 0.674886 +v 161.917465 -137.587357 45.356117 1.000000 1.000000 1.000000 +vn 0.228404 0.702782 -0.673742 +v 160.525696 -136.879913 44.556137 1.000000 1.000000 1.000000 +vn 0.228410 0.702774 0.673749 +v 160.525696 -136.879913 45.356140 1.000000 1.000000 1.000000 +vn -0.000000 0.739365 -0.673304 +v 159.003891 -136.637131 44.556137 1.000000 1.000000 1.000000 +vn -0.000000 0.739362 0.673309 +v 159.003891 -136.637131 45.356140 1.000000 1.000000 1.000000 +vn -0.228408 0.702780 -0.673743 +v 157.482101 -136.879913 44.556137 1.000000 1.000000 1.000000 +vn -0.228406 0.702777 0.673747 +v 157.482101 -136.879913 45.356140 1.000000 1.000000 1.000000 +vn -0.429158 0.600294 -0.674885 +v 156.090332 -137.587357 44.556137 1.000000 1.000000 1.000000 +vn -0.429156 0.600291 0.674889 +v 156.090332 -137.587357 45.356140 1.000000 1.000000 1.000000 +vn -0.467030 0.519081 -0.715848 +v 154.944473 -138.700821 44.556137 1.000000 1.000000 1.000000 +vn -0.467027 0.519077 0.715853 +v 154.944473 -138.700821 45.356140 1.000000 1.000000 1.000000 +vn -0.292016 0.578745 -0.761434 +v 154.855637 -138.774780 44.556137 1.000000 1.000000 1.000000 +vn -0.292014 0.578740 0.761438 +v 154.855637 -138.774780 45.356140 1.000000 1.000000 1.000000 +vn -0.081268 0.673062 -0.735108 +v 154.747482 -138.801285 44.556137 1.000000 1.000000 1.000000 +vn -0.081268 0.673056 0.735113 +v 154.747482 -138.801285 45.356140 1.000000 1.000000 1.000000 +vn 0.497385 0.550249 0.670697 +v 164.410034 -138.866882 45.356117 1.000000 1.000000 1.000000 +vn 0.497385 0.550249 -0.670697 +v 164.410034 -138.866882 44.556118 1.000000 1.000000 1.000000 +vn 0.642272 0.363181 0.674971 +v 164.467972 -138.940826 45.356117 1.000000 1.000000 1.000000 +vn 0.642272 0.363181 -0.674971 +v 164.467972 -138.940826 44.556118 1.000000 1.000000 1.000000 +vn -0.305109 0.683193 -0.663442 +v 126.447365 -149.763031 46.056137 1.000000 1.000000 1.000000 +vn -0.305109 0.683193 0.663442 +v 126.447365 -149.763031 56.392727 1.000000 1.000000 1.000000 +vn -0.483745 0.544043 -0.685572 +v 126.134125 -149.990479 46.056137 1.000000 1.000000 1.000000 +vn -0.483745 0.544042 0.685572 +v 126.134125 -149.990479 56.392727 1.000000 1.000000 1.000000 +vn 0.389096 -0.623860 0.677792 +v 162.158218 -148.279785 45.356117 1.000000 1.000000 1.000000 +vn 0.538928 -0.498563 0.678964 +v 163.465012 -147.192825 45.356117 1.000000 1.000000 1.000000 +vn -0.314378 0.558138 0.767886 +v 159.961792 -144.335190 45.356117 1.000000 1.000000 1.000000 +vn 0.204544 -0.706954 0.677036 +v 160.636414 -148.962112 45.356117 1.000000 1.000000 1.000000 +vn -0.543587 0.348944 0.763381 +v 160.699509 -143.626358 45.356117 1.000000 1.000000 1.000000 +vn 0.646681 -0.345509 0.680020 +v 164.466675 -145.777954 45.356117 1.000000 1.000000 1.000000 +vn 0.000001 0.638125 0.769933 +v 159.003891 -144.590530 45.356117 1.000000 1.000000 1.000000 +vn 0.051169 -0.720556 0.691506 +v 159.003891 -149.195145 45.356117 1.000000 1.000000 1.000000 +vn 0.314380 0.558138 0.767885 +v 158.046005 -144.335190 45.356117 1.000000 1.000000 1.000000 +vn 0.543588 0.348944 0.763381 +v 157.308289 -143.626358 45.356117 1.000000 1.000000 1.000000 +vn 0.645137 0.072811 0.760590 +v 156.959381 -142.627304 45.356117 1.000000 1.000000 1.000000 +vn 0.611182 -0.215431 0.761608 +v 157.077820 -141.566849 45.356117 1.000000 1.000000 1.000000 +vn 0.443169 -0.466080 0.765749 +v 157.637878 -140.686386 45.356117 1.000000 1.000000 1.000000 +vn 0.163055 -0.617716 0.769311 +v 158.510788 -140.191040 45.356117 1.000000 1.000000 1.000000 +vn -0.163054 -0.617714 0.769313 +v 159.497009 -140.191040 45.356117 1.000000 1.000000 1.000000 +vn -0.443167 -0.466081 0.765749 +v 160.369904 -140.686386 45.356117 1.000000 1.000000 1.000000 +vn -0.611178 -0.215432 0.761610 +v 160.929977 -141.566849 45.356117 1.000000 1.000000 1.000000 +vn 0.711040 0.176107 0.680742 +v 165.097549 -140.590118 45.356117 1.000000 1.000000 1.000000 +vn 0.732342 0.000000 0.680937 +v 165.312546 -142.359390 45.356117 1.000000 1.000000 1.000000 +vn -0.645137 0.072810 0.760590 +v 161.048416 -142.627304 45.356117 1.000000 1.000000 1.000000 +vn 0.711043 -0.176367 0.680670 +v 165.097549 -144.128677 45.356117 1.000000 1.000000 1.000000 +vn -0.645137 0.072810 -0.760590 +v 161.048416 -142.627304 44.556118 1.000000 1.000000 1.000000 +vn -0.611178 -0.215432 -0.761610 +v 160.929977 -141.566849 44.556118 1.000000 1.000000 1.000000 +vn 0.711039 0.176107 -0.680742 +v 165.097549 -140.590118 44.556118 1.000000 1.000000 1.000000 +vn 0.732342 0.000000 -0.680937 +v 165.312546 -142.359390 44.556118 1.000000 1.000000 1.000000 +vn 0.711043 -0.176367 -0.680670 +v 165.097549 -144.128677 44.556118 1.000000 1.000000 1.000000 +vn -0.543587 0.348944 -0.763381 +v 160.699509 -143.626358 44.556118 1.000000 1.000000 1.000000 +vn -0.443168 -0.466080 -0.765749 +v 160.369904 -140.686386 44.556118 1.000000 1.000000 1.000000 +vn -0.163055 -0.617710 -0.769316 +v 159.497009 -140.191040 44.556118 1.000000 1.000000 1.000000 +vn 0.163053 -0.617711 -0.769316 +v 158.510788 -140.191040 44.556118 1.000000 1.000000 1.000000 +vn 0.443165 -0.466076 -0.765753 +v 157.637878 -140.686386 44.556118 1.000000 1.000000 1.000000 +vn 0.611180 -0.215427 -0.761610 +v 157.077820 -141.566849 44.556118 1.000000 1.000000 1.000000 +vn 0.645136 0.072810 -0.760591 +v 156.959381 -142.627304 44.556118 1.000000 1.000000 1.000000 +vn 0.543587 0.348944 -0.763382 +v 157.308289 -143.626358 44.556118 1.000000 1.000000 1.000000 +vn 0.051168 -0.720556 -0.691506 +v 159.003891 -149.195145 44.556118 1.000000 1.000000 1.000000 +vn 0.314380 0.558137 -0.767885 +v 158.046005 -144.335190 44.556118 1.000000 1.000000 1.000000 +vn 0.000001 0.638125 -0.769933 +v 159.003891 -144.590530 44.556118 1.000000 1.000000 1.000000 +vn 0.204544 -0.706954 -0.677036 +v 160.636414 -148.962112 44.556118 1.000000 1.000000 1.000000 +vn -0.314378 0.558138 -0.767886 +v 159.961792 -144.335190 44.556118 1.000000 1.000000 1.000000 +vn 0.389096 -0.623860 -0.677792 +v 162.158218 -148.279785 44.556118 1.000000 1.000000 1.000000 +vn 0.538928 -0.498563 -0.678964 +v 163.465012 -147.192825 44.556118 1.000000 1.000000 1.000000 +vn 0.646681 -0.345509 -0.680020 +v 164.466675 -145.777954 44.556118 1.000000 1.000000 1.000000 +vn 0.267550 -0.597151 -0.756193 +v 126.644478 -150.279312 46.056137 1.000000 1.000000 1.000000 +vn 0.267550 -0.597151 0.756193 +v 126.644478 -150.279312 56.392727 1.000000 1.000000 1.000000 +vn 0.453894 -0.510850 -0.730077 +v 126.498222 -150.385345 46.056137 1.000000 1.000000 1.000000 +vn 0.453892 -0.510853 0.730076 +v 126.498222 -150.385345 56.392727 1.000000 1.000000 1.000000 +vn 0.744929 0.181809 -0.641892 +v -120.887253 -155.676453 46.284557 1.000000 1.000000 1.000000 +vn -0.199872 -0.727438 -0.656418 +v -121.251350 -156.071335 46.284557 1.000000 1.000000 1.000000 +vn -0.417912 -0.537559 -0.732380 +v -121.773941 -155.504837 46.056160 1.000000 1.000000 1.000000 +vn 0.567680 0.387845 -0.726165 +v -121.409843 -155.109955 46.056160 1.000000 1.000000 1.000000 +vn 0.909909 0.035120 -0.413318 +v -120.444229 -156.156464 46.934757 1.000000 1.000000 1.000000 +vn -0.044085 -0.900819 -0.431952 +v -120.808327 -156.551331 46.934757 1.000000 1.000000 1.000000 +vn 0.980380 -0.024050 -0.195645 +v -120.148102 -156.477371 47.908157 1.000000 1.000000 1.000000 +vn 0.021844 -0.978035 -0.207291 +v -120.512337 -156.872269 47.908157 1.000000 1.000000 1.000000 +vn 0.998746 -0.019352 -0.046174 +v -120.044212 -156.590408 49.056160 1.000000 1.000000 1.000000 +vn 0.019302 -0.998583 -0.049597 +v -120.408310 -156.985291 49.056160 1.000000 1.000000 1.000000 +vn 0.998747 -0.019340 0.046161 +v -120.044212 -156.590408 53.392757 1.000000 1.000000 1.000000 +vn 0.019291 -0.998584 0.049580 +v -120.408310 -156.985291 53.392757 1.000000 1.000000 1.000000 +vn 0.980379 -0.023759 0.195686 +v -120.148102 -156.477371 54.540764 1.000000 1.000000 1.000000 +vn 0.021757 -0.978025 0.207350 +v -120.512337 -156.872269 54.540764 1.000000 1.000000 1.000000 +vn 0.909952 0.035080 0.413227 +v -120.444229 -156.156464 55.513962 1.000000 1.000000 1.000000 +vn -0.044086 -0.900839 0.431908 +v -120.808327 -156.551331 55.513962 1.000000 1.000000 1.000000 +vn 0.744918 0.181704 0.641935 +v -120.887253 -155.676453 56.164364 1.000000 1.000000 1.000000 +vn -0.199856 -0.727492 0.656363 +v -121.251350 -156.071335 56.164364 1.000000 1.000000 1.000000 +vn 0.567679 0.387846 0.726165 +v -121.409843 -155.109955 56.392761 1.000000 1.000000 1.000000 +vn -0.417909 -0.537566 0.732377 +v -121.773941 -155.504837 56.392761 1.000000 1.000000 1.000000 +vn -0.715944 0.460028 -0.525165 +v -146.129089 -140.407318 55.002766 1.000000 1.000000 1.000000 +vn -0.731349 -0.354400 0.582691 +v -146.129089 -140.669647 55.708965 1.000000 1.000000 1.000000 +vn -0.725367 -0.161494 0.669151 +v -145.982315 -139.962204 56.247967 1.000000 1.000000 1.000000 +vn -0.677745 0.595936 -0.430723 +v -145.982315 -139.699890 55.541565 1.000000 1.000000 1.000000 +vn -0.680069 0.368181 -0.633994 +v -146.129089 -141.617081 54.080967 1.000000 1.000000 1.000000 +vn -0.735907 -0.340948 0.584975 +v -146.129089 -141.879395 54.787365 1.000000 1.000000 1.000000 +vn -0.775654 -0.076412 0.626516 +v -146.129089 -142.064987 54.707966 1.000000 1.000000 1.000000 +vn -0.649622 0.090766 -0.754819 +v -146.129089 -142.017532 53.911167 1.000000 1.000000 1.000000 +vn -0.739221 0.198185 0.643642 +v -146.129089 -142.258926 54.739567 1.000000 1.000000 1.000000 +vn -0.677604 -0.216472 -0.702846 +v -146.129089 -142.431961 53.978767 1.000000 1.000000 1.000000 +vn -0.672559 0.200221 0.712443 +v -146.129089 -148.871414 57.819359 1.000000 1.000000 1.000000 +vn -0.745143 -0.180710 -0.641954 +v -146.129089 -149.044434 57.058369 1.000000 1.000000 1.000000 +vn -0.642051 -0.160962 0.749574 +v -146.129089 -149.358383 57.874157 1.000000 1.000000 1.000000 +vn -0.786403 0.129743 -0.603934 +v -146.129089 -149.271881 57.084167 1.000000 1.000000 1.000000 +vn -0.655524 -0.533566 0.534411 +v -146.129089 -149.810471 57.606159 1.000000 1.000000 1.000000 +vn -0.766951 0.453554 -0.453954 +v -146.129089 -149.482574 56.958965 1.000000 1.000000 1.000000 +vn -0.667931 -0.698699 0.256298 +v -146.129089 -150.127213 57.073769 1.000000 1.000000 1.000000 +vn -0.751162 0.619827 -0.227089 +v -146.129089 -149.630478 56.710567 1.000000 1.000000 1.000000 +vn -0.688864 -0.722381 0.060267 +v -146.129089 -150.241638 56.392765 1.000000 1.000000 1.000000 +vn -0.726172 0.685165 -0.056767 +v -146.129089 -149.683502 56.392765 1.000000 1.000000 1.000000 +vn -0.687007 -0.723580 -0.066740 +v -146.129089 -150.241638 46.056160 1.000000 1.000000 1.000000 +vn -0.728527 0.682081 0.063352 +v -146.129089 -149.683502 46.056160 1.000000 1.000000 1.000000 +vn -0.662472 -0.690832 -0.289622 +v -146.129089 -150.102097 45.306160 1.000000 1.000000 1.000000 +vn -0.757622 0.601927 0.252374 +v -146.129089 -149.617920 45.706158 1.000000 1.000000 1.000000 +vn -0.646783 -0.469880 -0.600737 +v -146.129089 -149.718384 44.757156 1.000000 1.000000 1.000000 +vn -0.779439 0.386271 0.493224 +v -146.129089 -149.439316 45.449959 1.000000 1.000000 1.000000 +vn -0.230707 -0.408910 -0.882931 +v -146.129089 -149.195145 44.556160 1.000000 1.000000 1.000000 +vn -0.379973 -0.197581 0.903650 +v -146.129089 -149.195145 45.356159 1.000000 1.000000 1.000000 +vn -0.603538 0.069967 0.794258 +v -145.563873 -139.362213 56.704967 1.000000 1.000000 1.000000 +vn -0.532007 0.781349 -0.326286 +v -145.563873 -139.101288 55.998566 1.000000 1.000000 1.000000 +vn -0.352829 0.261753 0.898330 +v -144.936874 -138.961761 57.010166 1.000000 1.000000 1.000000 +vn -0.299820 0.921617 -0.246436 +v -144.936874 -138.700821 56.303967 1.000000 1.000000 1.000000 +vn -0.094277 0.304900 0.947707 +v -144.197861 -138.822220 57.117367 1.000000 1.000000 1.000000 +vn -0.074766 0.966195 -0.246732 +v -144.197861 -138.559906 56.411167 1.000000 1.000000 1.000000 +vn 0.093935 0.304758 0.947786 +v -128.748093 -138.822220 57.117367 1.000000 1.000000 1.000000 +vn 0.074476 0.966167 -0.246930 +v -128.748093 -138.559906 56.411167 1.000000 1.000000 1.000000 +vn 0.353185 0.261185 0.898355 +v -128.009079 -138.961761 57.010166 1.000000 1.000000 1.000000 +vn 0.300105 0.921466 -0.246653 +v -128.009079 -138.700821 56.303967 1.000000 1.000000 1.000000 +vn 0.603563 0.069807 0.794254 +v -127.382462 -139.362213 56.704967 1.000000 1.000000 1.000000 +vn 0.532052 0.781109 -0.326788 +v -127.382462 -139.101288 55.998566 1.000000 1.000000 1.000000 +vn 0.725594 -0.160950 0.669035 +v -126.963898 -139.962204 56.247967 1.000000 1.000000 1.000000 +vn 0.676888 0.596512 -0.431273 +v -126.963898 -139.699890 55.541565 1.000000 1.000000 1.000000 +vn 0.731387 -0.354279 0.582717 +v -126.816872 -140.669647 55.708965 1.000000 1.000000 1.000000 +vn 0.715946 0.460123 -0.525080 +v -126.816872 -140.407318 55.002766 1.000000 1.000000 1.000000 +vn 0.735908 -0.340948 0.584974 +v -126.816872 -141.879395 54.787365 1.000000 1.000000 1.000000 +vn 0.680069 0.368181 -0.633994 +v -126.816872 -141.617081 54.080967 1.000000 1.000000 1.000000 +vn 0.775653 -0.076413 0.626517 +v -126.816872 -142.064987 54.707966 1.000000 1.000000 1.000000 +vn 0.649622 0.090766 -0.754819 +v -126.816872 -142.017532 53.911167 1.000000 1.000000 1.000000 +vn 0.739221 0.198185 0.643642 +v -126.816872 -142.258926 54.739567 1.000000 1.000000 1.000000 +vn 0.677604 -0.216472 -0.702846 +v -126.816872 -142.431961 53.978767 1.000000 1.000000 1.000000 +vn 0.672560 0.200221 0.712443 +v -126.816872 -148.871414 57.819359 1.000000 1.000000 1.000000 +vn 0.745144 -0.180710 -0.641954 +v -126.816872 -149.044434 57.058365 1.000000 1.000000 1.000000 +vn 0.786402 0.129744 -0.603935 +v -126.816872 -149.271881 57.084164 1.000000 1.000000 1.000000 +vn 0.642051 -0.160962 0.749574 +v -126.816872 -149.358383 57.874157 1.000000 1.000000 1.000000 +vn 0.766952 0.453554 -0.453953 +v -126.816872 -149.482574 56.958961 1.000000 1.000000 1.000000 +vn 0.655523 -0.533567 0.534411 +v -126.816872 -149.810471 57.606159 1.000000 1.000000 1.000000 +vn 0.751163 0.619827 -0.227089 +v -126.816872 -149.630478 56.710564 1.000000 1.000000 1.000000 +vn 0.667931 -0.698699 0.256297 +v -126.816872 -150.127213 57.073765 1.000000 1.000000 1.000000 +vn 0.396564 0.893398 0.211134 +v -126.816872 -149.683502 56.392761 1.000000 1.000000 1.000000 +vn 0.205747 -0.895855 0.393843 +v -126.816872 -150.241638 56.392761 1.000000 1.000000 1.000000 +vn -0.075180 0.973963 0.213877 +v -144.197861 -135.378540 42.756157 1.000000 1.000000 1.000000 +vn -0.095900 0.272962 -0.957233 +v -144.197861 -135.657608 42.063358 1.000000 1.000000 1.000000 +vn -0.356919 0.227800 -0.905934 +v -144.936874 -135.795746 42.177559 1.000000 1.000000 1.000000 +vn -0.301805 0.928729 0.215351 +v -144.936874 -135.516678 42.870358 1.000000 1.000000 1.000000 +vn 0.075163 0.973966 0.213871 +v -128.748093 -135.378540 42.756157 1.000000 1.000000 1.000000 +vn 0.095877 0.272969 -0.957233 +v -128.748093 -135.657608 42.063358 1.000000 1.000000 1.000000 +vn 0.301991 0.928771 0.214909 +v -128.009079 -135.516678 42.870358 1.000000 1.000000 1.000000 +vn 0.357043 0.228218 -0.905780 +v -128.009079 -135.795746 42.177559 1.000000 1.000000 1.000000 +vn 0.533778 0.790868 0.299348 +v -127.382462 -135.910156 43.195557 1.000000 1.000000 1.000000 +vn 0.607126 0.037249 -0.793732 +v -127.382462 -136.189224 42.502758 1.000000 1.000000 1.000000 +vn 0.677730 0.610919 0.409219 +v -126.963898 -136.497589 43.682159 1.000000 1.000000 1.000000 +vn 0.727090 -0.188269 -0.660223 +v -126.963898 -136.776657 42.989357 1.000000 1.000000 1.000000 +vn 0.715630 0.480168 0.507260 +v -126.816872 -137.191071 44.256157 1.000000 1.000000 1.000000 +vn 0.731622 -0.377462 -0.567673 +v -126.816872 -137.470154 43.563358 1.000000 1.000000 1.000000 +vn 0.672496 0.373483 0.638952 +v -126.816872 -138.278046 45.155159 1.000000 1.000000 1.000000 +vn 0.745327 -0.336448 -0.575579 +v -126.816872 -138.557114 44.462357 1.000000 1.000000 1.000000 +vn 0.668273 0.135658 0.731443 +v -126.816872 -138.801285 45.356159 1.000000 1.000000 1.000000 +vn 0.750550 -0.120510 -0.649732 +v -126.816872 -138.801285 44.556160 1.000000 1.000000 1.000000 +vn 0.750549 0.120506 0.649734 +v -126.816872 -149.195145 45.356159 1.000000 1.000000 1.000000 +vn 0.668274 -0.135655 -0.731442 +v -126.816872 -149.195145 44.556160 1.000000 1.000000 1.000000 +vn 0.779439 0.386271 0.493224 +v -126.816872 -149.439316 45.449959 1.000000 1.000000 1.000000 +vn 0.646783 -0.469880 -0.600737 +v -126.816872 -149.718384 44.757156 1.000000 1.000000 1.000000 +vn 0.757621 0.601928 0.252375 +v -126.816872 -149.617920 45.706158 1.000000 1.000000 1.000000 +vn 0.662472 -0.690832 -0.289622 +v -126.816872 -150.102097 45.306160 1.000000 1.000000 1.000000 +vn 0.400641 0.892925 -0.205358 +v -126.816872 -149.683502 46.056160 1.000000 1.000000 1.000000 +vn 0.202270 -0.894440 -0.398828 +v -126.816872 -150.241638 46.056160 1.000000 1.000000 1.000000 +vn -0.606790 0.037025 -0.794000 +v -145.563873 -136.189224 42.502758 1.000000 1.000000 1.000000 +vn -0.533454 0.790967 0.299663 +v -145.563873 -135.910156 43.195557 1.000000 1.000000 1.000000 +vn -0.727129 -0.188366 -0.660153 +v -145.982315 -136.776657 42.989357 1.000000 1.000000 1.000000 +vn -0.677803 0.610804 0.409269 +v -145.982315 -136.497589 43.682159 1.000000 1.000000 1.000000 +vn -0.731589 -0.377587 -0.567632 +v -146.129089 -137.470154 43.563358 1.000000 1.000000 1.000000 +vn -0.715619 0.480118 0.507323 +v -146.129089 -137.191071 44.256157 1.000000 1.000000 1.000000 +vn -0.745327 -0.336448 -0.575578 +v -146.129089 -138.557114 44.462357 1.000000 1.000000 1.000000 +vn -0.672496 0.373483 0.638952 +v -146.129089 -138.278046 45.155159 1.000000 1.000000 1.000000 +vn -0.230705 0.408915 0.882929 +v -146.129089 -138.801285 45.356159 1.000000 1.000000 1.000000 +vn -0.379977 0.197574 -0.903649 +v -146.129089 -138.801285 44.556160 1.000000 1.000000 1.000000 +vn -0.642272 0.363181 -0.674971 +v -164.467972 -138.940826 44.556179 1.000000 1.000000 1.000000 +vn -0.642272 0.363181 0.674971 +v -164.467972 -138.940826 45.356178 1.000000 1.000000 1.000000 +vn -0.497385 0.550249 0.670697 +v -164.410034 -138.866882 45.356178 1.000000 1.000000 1.000000 +vn -0.497385 0.550249 -0.670697 +v -164.410034 -138.866882 44.556179 1.000000 1.000000 1.000000 +vn -0.273723 0.692486 0.667487 +v -164.332779 -138.818039 45.356178 1.000000 1.000000 1.000000 +vn -0.273723 0.692486 -0.667487 +v -164.332779 -138.818039 44.556179 1.000000 1.000000 1.000000 +vn -0.068640 0.723916 0.686465 +v -164.245224 -138.801285 45.356178 1.000000 1.000000 1.000000 +vn -0.068640 0.723916 -0.686465 +v -164.245224 -138.801285 44.556179 1.000000 1.000000 1.000000 +vn -0.081268 0.673059 0.735110 +v -163.260315 -138.801285 45.356178 1.000000 1.000000 1.000000 +vn -0.081268 0.673059 -0.735110 +v -163.260315 -138.801285 44.556179 1.000000 1.000000 1.000000 +vn -0.292015 0.578743 -0.761436 +v -163.152161 -138.774780 44.556179 1.000000 1.000000 1.000000 +vn -0.292015 0.578743 0.761436 +v -163.152161 -138.774780 45.356178 1.000000 1.000000 1.000000 +vn -0.467028 0.519079 -0.715850 +v -163.063324 -138.700821 44.556179 1.000000 1.000000 1.000000 +vn -0.467028 0.519079 0.715850 +v -163.063324 -138.700821 45.356178 1.000000 1.000000 1.000000 +vn -0.429158 0.600293 0.674887 +v -161.917465 -137.587357 45.356178 1.000000 1.000000 1.000000 +vn -0.429158 0.600293 -0.674887 +v -161.917465 -137.587357 44.556179 1.000000 1.000000 1.000000 +vn -0.228407 0.702779 0.673745 +v -160.525696 -136.879913 45.356178 1.000000 1.000000 1.000000 +vn -0.228407 0.702779 -0.673745 +v -160.525696 -136.879913 44.556179 1.000000 1.000000 1.000000 +vn 0.000000 0.739364 0.673306 +v -159.003891 -136.637131 45.356178 1.000000 1.000000 1.000000 +vn 0.000000 0.739364 -0.673306 +v -159.003891 -136.637131 44.556179 1.000000 1.000000 1.000000 +vn 0.228407 0.702779 0.673745 +v -157.482101 -136.879913 45.356178 1.000000 1.000000 1.000000 +vn 0.228407 0.702779 -0.673745 +v -157.482101 -136.879913 44.556179 1.000000 1.000000 1.000000 +vn 0.429158 0.600293 0.674887 +v -156.090332 -137.587357 45.356178 1.000000 1.000000 1.000000 +vn 0.429158 0.600293 -0.674887 +v -156.090332 -137.587357 44.556179 1.000000 1.000000 1.000000 +vn 0.467028 0.519079 0.715850 +v -154.944473 -138.700821 45.356178 1.000000 1.000000 1.000000 +vn 0.467028 0.519079 -0.715850 +v -154.944473 -138.700821 44.556179 1.000000 1.000000 1.000000 +vn 0.292015 0.578743 -0.761436 +v -154.855637 -138.774780 44.556179 1.000000 1.000000 1.000000 +vn 0.292015 0.578743 0.761436 +v -154.855637 -138.774780 45.356178 1.000000 1.000000 1.000000 +vn 0.081267 0.673060 -0.735110 +v -154.747482 -138.801285 44.556179 1.000000 1.000000 1.000000 +vn 0.081270 0.673058 0.735111 +v -154.747482 -138.801285 45.356178 1.000000 1.000000 1.000000 +vn 0.305109 0.683193 0.663442 +v -126.447365 -149.763031 56.392761 1.000000 1.000000 1.000000 +vn 0.305109 0.683193 -0.663442 +v -126.447365 -149.763031 46.056160 1.000000 1.000000 1.000000 +vn 0.483732 0.544048 0.685576 +v -126.134125 -149.990479 56.392761 1.000000 1.000000 1.000000 +vn 0.483732 0.544048 -0.685576 +v -126.134125 -149.990479 46.056160 1.000000 1.000000 1.000000 +vn -0.051164 -0.720559 0.691503 +v -159.003891 -149.195145 45.356159 1.000000 1.000000 1.000000 +vn 0.000000 0.638124 0.769934 +v -159.003891 -144.590530 45.356178 1.000000 1.000000 1.000000 +vn -0.204540 -0.706954 0.677037 +v -160.636414 -148.962112 45.356178 1.000000 1.000000 1.000000 +vn -0.543587 0.348943 0.763382 +v -157.308289 -143.626358 45.356178 1.000000 1.000000 1.000000 +vn -0.314378 0.558136 0.767888 +v -158.046005 -144.335190 45.356178 1.000000 1.000000 1.000000 +vn 0.314378 0.558138 0.767886 +v -159.961792 -144.335190 45.356178 1.000000 1.000000 1.000000 +vn -0.389096 -0.623860 0.677792 +v -162.158218 -148.279785 45.356178 1.000000 1.000000 1.000000 +vn 0.543587 0.348944 0.763381 +v -160.699509 -143.626358 45.356178 1.000000 1.000000 1.000000 +vn -0.538928 -0.498563 0.678964 +v -163.465012 -147.192825 45.356178 1.000000 1.000000 1.000000 +vn 0.645137 0.072810 0.760590 +v -161.048416 -142.627304 45.356178 1.000000 1.000000 1.000000 +vn -0.711043 -0.176367 0.680670 +v -165.097549 -144.128677 45.356178 1.000000 1.000000 1.000000 +vn -0.646681 -0.345509 0.680020 +v -164.466675 -145.777954 45.356178 1.000000 1.000000 1.000000 +vn 0.611178 -0.215432 0.761610 +v -160.929977 -141.566849 45.356178 1.000000 1.000000 1.000000 +vn -0.711039 0.176107 0.680742 +v -165.097549 -140.590118 45.356178 1.000000 1.000000 1.000000 +vn -0.732342 0.000000 0.680937 +v -165.312546 -142.359390 45.356178 1.000000 1.000000 1.000000 +vn 0.443167 -0.466081 0.765749 +v -160.369904 -140.686386 45.356178 1.000000 1.000000 1.000000 +vn 0.163056 -0.617712 0.769314 +v -159.497009 -140.191040 45.356178 1.000000 1.000000 1.000000 +vn -0.163054 -0.617714 0.769314 +v -158.510788 -140.191040 45.356178 1.000000 1.000000 1.000000 +vn -0.443166 -0.466078 0.765751 +v -157.637878 -140.686386 45.356178 1.000000 1.000000 1.000000 +vn -0.611180 -0.215429 0.761609 +v -157.077820 -141.566849 45.356178 1.000000 1.000000 1.000000 +vn -0.645136 0.072810 0.760591 +v -156.959381 -142.627304 45.356178 1.000000 1.000000 1.000000 +vn -0.645137 0.072811 -0.760590 +v -156.959381 -142.627304 44.556179 1.000000 1.000000 1.000000 +vn -0.611181 -0.215429 -0.761609 +v -157.077820 -141.566849 44.556179 1.000000 1.000000 1.000000 +vn -0.543588 0.348944 -0.763381 +v -157.308289 -143.626358 44.556179 1.000000 1.000000 1.000000 +vn -0.443166 -0.466078 -0.765751 +v -157.637878 -140.686386 44.556179 1.000000 1.000000 1.000000 +vn -0.163054 -0.617714 -0.769314 +v -158.510788 -140.191040 44.556179 1.000000 1.000000 1.000000 +vn 0.163056 -0.617712 -0.769314 +v -159.497009 -140.191040 44.556179 1.000000 1.000000 1.000000 +vn 0.443167 -0.466081 -0.765749 +v -160.369904 -140.686386 44.556179 1.000000 1.000000 1.000000 +vn 0.611178 -0.215432 -0.761610 +v -160.929977 -141.566849 44.556179 1.000000 1.000000 1.000000 +vn -0.711040 0.176107 -0.680742 +v -165.097549 -140.590118 44.556179 1.000000 1.000000 1.000000 +vn -0.732342 0.000000 -0.680937 +v -165.312546 -142.359390 44.556179 1.000000 1.000000 1.000000 +vn 0.645137 0.072810 -0.760590 +v -161.048416 -142.627304 44.556179 1.000000 1.000000 1.000000 +vn -0.711043 -0.176367 -0.680670 +v -165.097549 -144.128677 44.556179 1.000000 1.000000 1.000000 +vn 0.543587 0.348944 -0.763381 +v -160.699509 -143.626358 44.556179 1.000000 1.000000 1.000000 +vn -0.646681 -0.345509 -0.680020 +v -164.466675 -145.777954 44.556179 1.000000 1.000000 1.000000 +vn -0.538928 -0.498563 -0.678964 +v -163.465012 -147.192825 44.556179 1.000000 1.000000 1.000000 +vn 0.314378 0.558138 -0.767886 +v -159.961792 -144.335190 44.556179 1.000000 1.000000 1.000000 +vn -0.389096 -0.623860 -0.677792 +v -162.158218 -148.279785 44.556179 1.000000 1.000000 1.000000 +vn -0.000003 0.638126 -0.769932 +v -159.003891 -144.590530 44.556179 1.000000 1.000000 1.000000 +vn -0.204548 -0.706954 -0.677035 +v -160.636414 -148.962112 44.556179 1.000000 1.000000 1.000000 +vn -0.314380 0.558139 -0.767884 +v -158.046005 -144.335190 44.556179 1.000000 1.000000 1.000000 +vn -0.051172 -0.720554 -0.691509 +v -159.003891 -149.195145 44.556160 1.000000 1.000000 1.000000 +vn -0.267550 -0.597151 -0.756193 +v -126.644478 -150.279312 46.056160 1.000000 1.000000 1.000000 +vn -0.267550 -0.597151 0.756193 +v -126.644478 -150.279312 56.392761 1.000000 1.000000 1.000000 +vn -0.453889 -0.510862 0.730072 +v -126.498222 -150.385345 56.392761 1.000000 1.000000 1.000000 +vn -0.453889 -0.510862 -0.730072 +v -126.498222 -150.385345 46.056160 1.000000 1.000000 1.000000 +vn 0.727024 0.088557 0.680877 +v 165.441299 163.220123 54.399963 1.000000 1.000000 1.000000 +vn 0.727024 -0.088557 0.680877 +v 165.441299 -142.358002 54.399925 1.000000 1.000000 1.000000 +vn 0.727024 0.088557 -0.680877 +v 165.441299 163.220123 46.399960 1.000000 1.000000 1.000000 +vn 0.665225 0.358094 -0.655167 +v 164.578690 166.708450 46.399960 1.000000 1.000000 1.000000 +vn 0.665226 0.358094 0.655166 +v 164.578690 166.708450 54.399963 1.000000 1.000000 1.000000 +vn 0.727024 -0.088557 -0.680878 +v 165.441299 -142.358002 46.399918 1.000000 1.000000 1.000000 +vn 0.665225 -0.358094 0.655167 +v 164.578690 -145.846329 54.399925 1.000000 1.000000 1.000000 +vn 0.665225 -0.358094 -0.655167 +v 164.578690 -145.846329 46.399918 1.000000 1.000000 1.000000 +vn 0.399227 -0.645168 0.651441 +v 162.222595 -148.399796 54.399925 1.000000 1.000000 1.000000 +vn 0.399228 -0.645168 -0.651441 +v 162.222595 -148.399796 46.399918 1.000000 1.000000 1.000000 +vn 0.103710 -0.728888 0.676733 +v 159.003891 -149.334671 54.399925 1.000000 1.000000 1.000000 +vn 0.103710 -0.728888 -0.676732 +v 159.003891 -149.334671 46.399918 1.000000 1.000000 1.000000 +vn 0.399228 0.645168 -0.651441 +v 162.222595 169.261917 46.399960 1.000000 1.000000 1.000000 +vn 0.399228 0.645168 0.651441 +v 162.222595 169.261917 54.399967 1.000000 1.000000 1.000000 +vn 0.103710 0.728888 -0.676733 +v 159.003891 170.196793 46.399960 1.000000 1.000000 1.000000 +vn -0.103710 0.728888 -0.676732 +v -159.003891 170.196793 46.400017 1.000000 1.000000 1.000000 +vn 0.103710 0.728888 0.676732 +v 159.003891 170.196793 54.399967 1.000000 1.000000 1.000000 +vn -0.103710 0.728888 0.676733 +v -159.003891 170.196793 54.400009 1.000000 1.000000 1.000000 +vn -0.103710 -0.728888 0.676732 +v -159.003891 -149.334671 54.399967 1.000000 1.000000 1.000000 +vn -0.727024 -0.088557 0.680878 +v -165.441299 -142.358002 54.399971 1.000000 1.000000 1.000000 +vn -0.727024 0.088557 0.680877 +v -165.441299 163.220123 54.400009 1.000000 1.000000 1.000000 +vn -0.665225 0.358094 0.655167 +v -164.578690 166.708450 54.400009 1.000000 1.000000 1.000000 +vn -0.399228 0.645168 0.651441 +v -162.222595 169.261917 54.400009 1.000000 1.000000 1.000000 +vn -0.665225 -0.358094 0.655167 +v -164.578690 -145.846329 54.399971 1.000000 1.000000 1.000000 +vn -0.399227 -0.645168 0.651442 +v -162.222595 -148.399796 54.399971 1.000000 1.000000 1.000000 +vn -0.103711 -0.728887 -0.676733 +v -159.003891 -149.334671 46.399960 1.000000 1.000000 1.000000 +vn -0.727024 0.088557 -0.680877 +v -165.441299 163.220123 46.400017 1.000000 1.000000 1.000000 +vn -0.399228 0.645168 -0.651441 +v -162.222595 169.261917 46.400017 1.000000 1.000000 1.000000 +vn -0.727025 -0.088557 -0.680876 +v -165.441299 -142.358002 46.399979 1.000000 1.000000 1.000000 +vn -0.665225 0.358094 -0.655167 +v -164.578690 166.708450 46.400017 1.000000 1.000000 1.000000 +vn -0.665227 -0.358094 -0.655166 +v -164.578690 -145.846329 46.399979 1.000000 1.000000 1.000000 +vn -0.399231 -0.645170 -0.651437 +v -162.222595 -148.399796 46.399979 1.000000 1.000000 1.000000 +vn 0.618988 -0.381308 0.686628 +v 164.355957 -146.234238 46.399918 1.000000 1.000000 1.000000 +vn 0.535122 -0.493764 0.685450 +v 163.557724 -147.293289 46.399918 1.000000 1.000000 1.000000 +vn 0.618988 -0.381308 -0.686628 +v 164.355957 -146.234238 43.199921 1.000000 1.000000 1.000000 +vn 0.678580 -0.260099 0.686934 +v 164.950775 -145.028671 46.399918 1.000000 1.000000 1.000000 +vn 0.678580 -0.260099 -0.686934 +v 164.950775 -145.028671 43.199921 1.000000 1.000000 1.000000 +vn 0.535122 -0.493764 -0.685450 +v 163.557724 -147.293289 43.199921 1.000000 1.000000 1.000000 +vn 0.426137 -0.590908 0.685007 +v 162.580521 -148.161194 46.399918 1.000000 1.000000 1.000000 +vn 0.426137 -0.590908 -0.685007 +v 162.580521 -148.161194 43.199921 1.000000 1.000000 1.000000 +vn 0.298346 -0.664639 0.685014 +v 161.468140 -148.803040 46.399918 1.000000 1.000000 1.000000 +vn 0.298346 -0.664639 -0.685014 +v 161.468140 -148.803040 43.199921 1.000000 1.000000 1.000000 +vn 0.153656 -0.713552 0.683545 +v 160.261765 -149.203506 46.399918 1.000000 1.000000 1.000000 +vn 0.153656 -0.713552 -0.683545 +v 160.261765 -149.203506 43.199921 1.000000 1.000000 1.000000 +vn 0.037229 -0.717438 0.695627 +v 159.001328 -149.334671 46.399918 1.000000 1.000000 1.000000 +vn 0.037229 -0.717438 -0.695627 +v 159.001328 -149.334671 43.199921 1.000000 1.000000 1.000000 +vn 0.000000 -0.707107 -0.707107 +v 151.600876 -149.334671 43.199921 1.000000 1.000000 1.000000 +vn 0.000001 -0.707108 0.707106 +v 151.600876 -149.334671 46.399918 1.000000 1.000000 1.000000 +vn -0.000000 -0.707107 -0.707107 +v 134.219894 -149.334671 43.199921 1.000000 1.000000 1.000000 +vn 0.000000 -0.707106 0.707107 +v 134.219894 -149.334671 46.399940 1.000000 1.000000 1.000000 +vn -0.000000 -0.707107 -0.707107 +v 63.408436 -149.334671 43.199940 1.000000 1.000000 1.000000 +vn 0.000000 -0.707107 0.707107 +v 63.408436 -149.334671 46.399940 1.000000 1.000000 1.000000 +vn 0.681268 -0.190397 0.706840 +v 165.161926 -144.276581 46.399918 1.000000 1.000000 1.000000 +vn 0.681268 -0.190397 -0.706840 +v 165.161926 -144.276581 43.199921 1.000000 1.000000 1.000000 +vn 0.714329 -0.131012 0.687437 +v 165.316422 -143.721237 46.399918 1.000000 1.000000 1.000000 +vn 0.714329 -0.131012 -0.687437 +v 165.316422 -143.721237 43.199921 1.000000 1.000000 1.000000 +vn 0.716358 -0.032775 0.696963 +v 165.441299 -142.359390 46.399918 1.000000 1.000000 1.000000 +vn 0.716358 -0.032775 -0.696963 +v 165.441299 -142.359390 43.199921 1.000000 1.000000 1.000000 +vn 0.707105 0.000000 0.707109 +v 165.441299 10.431098 46.399940 1.000000 1.000000 1.000000 +vn 0.707104 0.000000 -0.707109 +v 165.441299 10.431098 43.199940 1.000000 1.000000 1.000000 +vn 0.707107 0.000000 0.707107 +v 165.441299 161.301544 46.399960 1.000000 1.000000 1.000000 +vn 0.707107 0.000000 -0.707107 +v 165.441299 161.301544 43.199959 1.000000 1.000000 1.000000 +vn 0.723412 0.065810 0.687273 +v 165.441299 163.222916 46.399960 1.000000 1.000000 1.000000 +vn 0.723412 0.065810 -0.687273 +v 165.441299 163.222916 43.199959 1.000000 1.000000 1.000000 +vn 0.695533 0.127862 0.707026 +v 165.089828 165.138702 46.399960 1.000000 1.000000 1.000000 +vn 0.695533 0.127862 -0.707026 +v 165.089828 165.138702 43.199959 1.000000 1.000000 1.000000 +vn 0.694581 0.267302 0.667912 +v 164.950775 165.893585 46.399960 1.000000 1.000000 1.000000 +vn 0.694581 0.267302 -0.667912 +v 164.950775 165.893585 43.199959 1.000000 1.000000 1.000000 +vn 0.546648 0.507855 -0.665777 +v 163.555145 168.156815 43.199959 1.000000 1.000000 1.000000 +vn 0.546648 0.507855 0.665777 +v 163.555145 168.156815 46.399960 1.000000 1.000000 1.000000 +vn 0.304399 0.683325 -0.663633 +v 161.465561 169.667969 43.199959 1.000000 1.000000 1.000000 +vn 0.304399 0.683325 0.663633 +v 161.465561 169.667969 46.399960 1.000000 1.000000 1.000000 +vn 0.077190 0.725343 -0.684047 +v 159.002609 170.198181 43.199959 1.000000 1.000000 1.000000 +vn 0.077190 0.725343 0.684046 +v 159.002609 170.198181 46.399960 1.000000 1.000000 1.000000 +vn -0.000000 0.707107 -0.707107 +v 151.600876 170.198181 43.199959 1.000000 1.000000 1.000000 +vn 0.000000 0.707107 0.707107 +v 151.600876 170.198181 46.399960 1.000000 1.000000 1.000000 +vn -0.000001 0.707108 -0.707105 +v 134.219894 170.198181 43.199978 1.000000 1.000000 1.000000 +vn 0.000001 0.707106 0.707107 +v 134.219894 170.198181 46.399979 1.000000 1.000000 1.000000 +vn 0.000000 0.707105 -0.707108 +v 63.408436 170.198181 43.199978 1.000000 1.000000 1.000000 +vn 0.000000 0.707105 0.707108 +v 63.408436 170.198181 46.399979 1.000000 1.000000 1.000000 +vn -0.077150 0.725336 -0.684058 +v -159.001328 170.198181 43.199997 1.000000 1.000000 1.000000 +vn -0.077150 0.725336 0.684058 +v -159.001328 170.198181 46.400017 1.000000 1.000000 1.000000 +vn 0.000000 0.707107 -0.707107 +v -151.600876 170.198181 43.199997 1.000000 1.000000 1.000000 +vn -0.304400 0.683343 -0.663614 +v -161.465561 169.667969 43.199997 1.000000 1.000000 1.000000 +vn 0.000000 0.707107 0.707107 +v -151.600876 170.198181 46.400017 1.000000 1.000000 1.000000 +vn -0.304400 0.683343 0.663614 +v -161.465561 169.667969 46.400017 1.000000 1.000000 1.000000 +vn 0.000000 0.707107 -0.707106 +v -134.219894 170.198181 43.199997 1.000000 1.000000 1.000000 +vn 0.000000 0.707107 0.707106 +v -134.219894 170.198181 46.399998 1.000000 1.000000 1.000000 +vn 0.000000 0.707105 -0.707108 +v -63.408436 170.198181 43.199997 1.000000 1.000000 1.000000 +vn 0.000000 0.707105 0.707108 +v -63.408436 170.198181 46.399998 1.000000 1.000000 1.000000 +vn -0.414238 0.572997 0.707164 +v -163.188217 168.421936 46.400017 1.000000 1.000000 1.000000 +vn -0.414238 0.572997 -0.707164 +v -163.188217 168.421936 43.199997 1.000000 1.000000 1.000000 +vn -0.546568 0.507995 0.665736 +v -163.555145 168.156815 46.400017 1.000000 1.000000 1.000000 +vn -0.546568 0.507995 -0.665736 +v -163.555145 168.156815 43.199997 1.000000 1.000000 1.000000 +vn -0.694581 0.267303 -0.667912 +v -164.950775 165.893585 43.199997 1.000000 1.000000 1.000000 +vn -0.694581 0.267302 0.667912 +v -164.950775 165.893585 46.400017 1.000000 1.000000 1.000000 +vn -0.695533 0.127862 -0.707026 +v -165.089828 165.138702 43.199997 1.000000 1.000000 1.000000 +vn -0.695533 0.127862 0.707026 +v -165.089828 165.138702 46.400017 1.000000 1.000000 1.000000 +vn -0.723412 0.065810 -0.687273 +v -165.441299 163.222916 43.199997 1.000000 1.000000 1.000000 +vn -0.723412 0.065810 0.687273 +v -165.441299 163.222916 46.400017 1.000000 1.000000 1.000000 +vn -0.707107 0.000000 0.707107 +v -165.441299 161.301544 46.400017 1.000000 1.000000 1.000000 +vn -0.707107 0.000000 -0.707106 +v -165.441299 161.301544 43.199997 1.000000 1.000000 1.000000 +vn -0.707107 0.000000 0.707106 +v -165.441299 10.431056 46.399998 1.000000 1.000000 1.000000 +vn -0.707107 0.000000 -0.707107 +v -165.441299 10.431056 43.199997 1.000000 1.000000 1.000000 +vn -0.716358 -0.032776 0.696963 +v -165.441299 -142.359390 46.399979 1.000000 1.000000 1.000000 +vn -0.716358 -0.032775 -0.696963 +v -165.441299 -142.359390 43.199978 1.000000 1.000000 1.000000 +vn -0.714401 -0.131825 0.687207 +v -165.316422 -143.721237 46.399979 1.000000 1.000000 1.000000 +vn -0.714401 -0.131825 -0.687207 +v -165.316422 -143.721237 43.199978 1.000000 1.000000 1.000000 +vn -0.680806 -0.190476 0.707264 +v -165.160629 -144.276581 46.399979 1.000000 1.000000 1.000000 +vn -0.680806 -0.190476 -0.707264 +v -165.160629 -144.276581 43.199978 1.000000 1.000000 1.000000 +vn -0.678905 -0.259938 0.686673 +v -164.950775 -145.028671 46.399979 1.000000 1.000000 1.000000 +vn -0.678905 -0.259938 -0.686673 +v -164.950775 -145.028671 43.199978 1.000000 1.000000 1.000000 +vn -0.618586 -0.382092 0.686555 +v -164.354660 -146.234238 46.399979 1.000000 1.000000 1.000000 +vn -0.618586 -0.382092 -0.686555 +v -164.354660 -146.234238 43.199978 1.000000 1.000000 1.000000 +vn -0.535095 -0.493169 0.685899 +v -163.553848 -147.293289 46.399979 1.000000 1.000000 1.000000 +vn -0.535095 -0.493170 -0.685899 +v -163.553848 -147.293289 43.199978 1.000000 1.000000 1.000000 +vn -0.470567 -0.528128 0.706858 +v -163.188217 -147.619797 46.399979 1.000000 1.000000 1.000000 +vn -0.470567 -0.528128 -0.706858 +v -163.188217 -147.619797 43.199978 1.000000 1.000000 1.000000 +vn -0.426428 -0.590697 0.685008 +v -162.579239 -148.161194 46.399979 1.000000 1.000000 1.000000 +vn -0.426428 -0.590697 -0.685008 +v -162.579239 -148.161194 43.199978 1.000000 1.000000 1.000000 +vn -0.298439 -0.664686 0.684929 +v -161.468140 -148.803040 46.399979 1.000000 1.000000 1.000000 +vn -0.298439 -0.664686 -0.684929 +v -161.468140 -148.803040 43.199978 1.000000 1.000000 1.000000 +vn -0.153567 -0.713527 0.683591 +v -160.260483 -149.203506 46.399979 1.000000 1.000000 1.000000 +vn -0.153577 -0.713528 -0.683588 +v -160.260483 -149.203506 43.199978 1.000000 1.000000 1.000000 +vn -0.037262 -0.717450 0.695612 +v -159.001328 -149.334671 46.399960 1.000000 1.000000 1.000000 +vn -0.037272 -0.717444 -0.695618 +v -159.001328 -149.334671 43.199959 1.000000 1.000000 1.000000 +vn 0.000001 -0.707107 0.707107 +v -151.600876 -149.334671 46.399960 1.000000 1.000000 1.000000 +vn -0.000001 -0.707106 -0.707107 +v -151.600876 -149.334671 43.199959 1.000000 1.000000 1.000000 +vn 0.000000 -0.707107 0.707107 +v -134.219894 -149.334671 46.399960 1.000000 1.000000 1.000000 +vn 0.000000 -0.707107 -0.707107 +v -134.219894 -149.334671 43.199959 1.000000 1.000000 1.000000 +vn 0.000000 -0.707107 0.707107 +v -63.408436 -149.334671 46.399960 1.000000 1.000000 1.000000 +vn -0.000000 -0.707107 -0.707107 +v -63.408436 -149.334671 43.199959 1.000000 1.000000 1.000000 +vn 0.333951 -0.539761 0.772745 +v 125.851265 165.032669 46.399979 1.000000 1.000000 1.000000 +vn 0.197214 -0.679074 0.707082 +v 126.216522 165.138702 46.399979 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 1.000000 +v 63.408436 165.138702 46.399979 1.000000 1.000000 1.000000 +vn 0.564342 -0.303786 0.767615 +v 125.144432 164.266617 46.399979 1.000000 1.000000 1.000000 +vn 0.000001 -0.631202 0.775619 +v 126.816872 165.313126 46.399979 1.000000 1.000000 1.000000 +vn -0.197213 -0.679074 0.707082 +v 127.417229 165.138702 46.399979 1.000000 1.000000 1.000000 +vn 0.000002 -0.000002 1.000000 +v 134.219894 165.138702 46.399960 1.000000 1.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +v 151.600876 165.138702 46.399960 1.000000 1.000000 1.000000 +vn -0.333951 -0.539757 0.772748 +v 127.782486 165.032669 46.399979 1.000000 1.000000 1.000000 +vn -0.564340 -0.303783 0.767617 +v 128.489319 164.266617 46.399979 1.000000 1.000000 1.000000 +vn 0.000001 -0.000001 1.000000 +v 134.219894 161.301544 46.399960 1.000000 1.000000 1.000000 +vn -0.643628 -0.000007 0.765338 +v 128.748093 163.220123 46.399979 1.000000 1.000000 1.000000 +vn -0.564340 0.303782 0.767618 +v 128.489319 162.173615 46.399960 1.000000 1.000000 1.000000 +vn -0.334026 0.539760 0.772713 +v 127.782486 161.407593 46.399960 1.000000 1.000000 1.000000 +vn -0.197232 0.679031 0.707118 +v 127.417480 161.301544 46.399960 1.000000 1.000000 1.000000 +vn 0.000014 0.631234 0.775593 +v 126.816872 161.127121 46.399979 1.000000 1.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +v 134.219894 10.431098 46.399940 1.000000 1.000000 1.000000 +vn 0.197242 0.679026 0.707121 +v 126.216263 161.301544 46.399979 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 1.000000 +v 63.408436 161.301544 46.399979 1.000000 1.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +v 63.408436 10.431076 46.399960 1.000000 1.000000 1.000000 +vn 0.000002 0.631240 0.775588 +v 0.000000 161.127121 46.399979 1.000000 1.000000 1.000000 +vn -0.197239 0.679025 0.707122 +v 0.600632 161.301544 46.399979 1.000000 1.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +v 134.219894 -144.276581 46.399940 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 1.000000 +v 63.408436 -144.276581 46.399940 1.000000 1.000000 1.000000 +vn 0.197283 0.678924 0.707207 +v 158.402634 -144.276581 46.399918 1.000000 1.000000 1.000000 +vn 0.000002 -0.000002 1.000000 +v 151.600876 -144.276581 46.399940 1.000000 1.000000 1.000000 +vn 0.000000 0.631328 0.775516 +v 159.003891 -144.451004 46.399918 1.000000 1.000000 1.000000 +vn 0.334199 0.539745 0.772649 +v 158.038284 -144.170532 46.399918 1.000000 1.000000 1.000000 +vn 0.564341 0.303787 0.767615 +v 157.331451 -143.404495 46.399918 1.000000 1.000000 1.000000 +vn 0.643633 0.000001 0.765335 +v 157.072678 -142.358002 46.399918 1.000000 1.000000 1.000000 +vn 0.564341 -0.303784 0.767616 +v 157.331451 -141.311493 46.399918 1.000000 1.000000 1.000000 +vn 0.333998 -0.539760 0.772726 +v 158.038284 -140.545456 46.399918 1.000000 1.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +v 151.600876 10.431098 46.399940 1.000000 1.000000 1.000000 +vn 0.000001 -0.631228 0.775598 +v 159.003891 -140.264999 46.399918 1.000000 1.000000 1.000000 +vn -0.333996 -0.539760 0.772726 +v 159.969513 -140.545456 46.399918 1.000000 1.000000 1.000000 +vn -0.564339 -0.303784 0.767617 +v 160.676346 -141.311493 46.399918 1.000000 1.000000 1.000000 +vn -0.643631 0.000001 0.765336 +v 160.935120 -142.358002 46.399918 1.000000 1.000000 1.000000 +vn -0.564339 0.303786 0.767617 +v 160.676346 -143.404495 46.399918 1.000000 1.000000 1.000000 +vn -0.334194 0.539740 0.772654 +v 159.969513 -144.170532 46.399918 1.000000 1.000000 1.000000 +vn -0.197279 0.678927 0.707206 +v 159.605148 -144.276581 46.399918 1.000000 1.000000 1.000000 +vn -0.197278 0.678926 0.707206 +v 159.605148 161.301544 46.399960 1.000000 1.000000 1.000000 +vn 0.000000 0.631328 0.775516 +v 159.003891 161.127121 46.399960 1.000000 1.000000 1.000000 +vn 0.197282 0.678924 0.707207 +v 158.402634 161.301544 46.399960 1.000000 1.000000 1.000000 +vn -0.334192 0.539743 0.772653 +v 159.969513 161.407593 46.399960 1.000000 1.000000 1.000000 +vn -0.564336 0.303787 0.767618 +v 160.676346 162.173615 46.399960 1.000000 1.000000 1.000000 +vn -0.643631 -0.000001 0.765336 +v 160.935120 163.220123 46.399960 1.000000 1.000000 1.000000 +vn -0.564342 -0.303784 0.767616 +v 160.676346 164.266617 46.399960 1.000000 1.000000 1.000000 +vn -0.333851 -0.539771 0.772781 +v 159.969513 165.032669 46.399960 1.000000 1.000000 1.000000 +vn -0.197189 -0.679134 0.707031 +v 159.603867 165.138702 46.399960 1.000000 1.000000 1.000000 +vn 0.000002 -0.631147 0.775663 +v 159.003891 165.313126 46.399960 1.000000 1.000000 1.000000 +vn 0.197191 -0.679134 0.707030 +v 158.403931 165.138702 46.399960 1.000000 1.000000 1.000000 +vn 0.333851 -0.539771 0.772781 +v 158.038284 165.032669 46.399960 1.000000 1.000000 1.000000 +vn 0.564342 -0.303784 0.767616 +v 157.331451 164.266617 46.399960 1.000000 1.000000 1.000000 +vn 0.643631 -0.000001 0.765336 +v 157.072678 163.220123 46.399960 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 1.000000 +v 151.600876 161.301544 46.399960 1.000000 1.000000 1.000000 +vn 0.564336 0.303787 0.767618 +v 157.331451 162.173615 46.399960 1.000000 1.000000 1.000000 +vn 0.334196 0.539743 0.772652 +v 158.038284 161.407593 46.399960 1.000000 1.000000 1.000000 +vn -0.682729 -0.061990 0.728038 +v 146.127808 163.568954 46.399960 1.000000 1.000000 1.000000 +vn -0.682728 0.061991 0.728038 +v 146.127808 162.871292 46.399960 1.000000 1.000000 1.000000 +vn -0.616511 0.236486 0.750992 +v 146.029953 162.336884 46.399960 1.000000 1.000000 1.000000 +vn -0.481726 0.446910 0.753798 +v 145.751862 161.884781 46.399960 1.000000 1.000000 1.000000 +vn -0.266340 0.597394 0.756428 +v 145.333435 161.582001 46.399960 1.000000 1.000000 1.000000 +vn -0.072237 0.677724 0.731759 +v 144.841614 161.475952 46.399960 1.000000 1.000000 1.000000 +vn -0.616503 -0.236492 0.750996 +v 146.029953 164.103378 46.399960 1.000000 1.000000 1.000000 +vn -0.266346 -0.597388 0.756431 +v 145.333435 164.858246 46.399960 1.000000 1.000000 1.000000 +vn -0.481730 -0.446917 0.753791 +v 145.751862 164.555450 46.399960 1.000000 1.000000 1.000000 +vn -0.072237 -0.677725 0.731759 +v 144.841614 164.964294 46.399960 1.000000 1.000000 1.000000 +vn -0.582116 -0.360470 0.728836 +v 145.911499 -141.233368 46.399940 1.000000 1.000000 1.000000 +vn -0.143838 -0.667425 0.730654 +v 145.092667 -140.641739 46.399940 1.000000 1.000000 1.000000 +vn -0.278269 -0.621980 0.731921 +v 145.333435 -140.719879 46.399940 1.000000 1.000000 1.000000 +vn -0.400386 -0.554079 0.729854 +v 145.556152 -140.849640 46.399940 1.000000 1.000000 1.000000 +vn -0.501102 -0.464591 0.730104 +v 145.751862 -141.022659 46.399940 1.000000 1.000000 1.000000 +vn 0.400830 -0.552325 0.730939 +v 140.262039 -140.849640 46.399940 1.000000 1.000000 1.000000 +vn 0.277616 -0.622626 0.731619 +v 140.486053 -140.719879 46.399940 1.000000 1.000000 1.000000 +vn 0.143637 -0.667395 0.730720 +v 140.726822 -140.641739 46.399940 1.000000 1.000000 1.000000 +vn 0.038219 -0.693222 0.719710 +v 140.979156 -140.613831 46.399940 1.000000 1.000000 1.000000 +vn -0.038409 -0.693145 0.719774 +v 144.841614 -140.613831 46.399940 1.000000 1.000000 1.000000 +vn -0.639187 -0.245451 0.728830 +v 146.031250 -141.474747 46.399940 1.000000 1.000000 1.000000 +vn -0.673772 -0.121816 0.728830 +v 146.104630 -141.737076 46.399940 1.000000 1.000000 1.000000 +vn -0.696656 -0.029618 0.716794 +v 146.127808 -142.009171 46.399940 1.000000 1.000000 1.000000 +vn -0.696656 0.029618 0.716794 +v 146.127808 -142.706833 46.399940 1.000000 1.000000 1.000000 +vn -0.673769 0.121821 0.728831 +v 146.104630 -142.978928 46.399940 1.000000 1.000000 1.000000 +vn -0.638639 0.246080 0.729099 +v 146.031250 -143.241241 46.399940 1.000000 1.000000 1.000000 +vn -0.581940 0.361291 0.728570 +v 145.911499 -143.481247 46.399940 1.000000 1.000000 1.000000 +vn -0.503683 0.463290 0.729154 +v 145.751862 -143.691940 46.399940 1.000000 1.000000 1.000000 +vn -0.400333 0.552123 0.731364 +v 145.556152 -143.867752 46.399940 1.000000 1.000000 1.000000 +vn -0.278961 0.623070 0.730729 +v 145.333435 -143.996109 46.399940 1.000000 1.000000 1.000000 +vn -0.143482 0.666097 0.731935 +v 145.092667 -144.075653 46.399940 1.000000 1.000000 1.000000 +vn -0.036548 0.693904 0.719139 +v 144.841614 -144.102173 46.399940 1.000000 1.000000 1.000000 +vn 0.502165 -0.466111 0.728403 +v 140.068909 -141.022659 46.399940 1.000000 1.000000 1.000000 +vn 0.640242 -0.242608 0.728856 +v 139.788239 -141.474747 46.399940 1.000000 1.000000 1.000000 +vn 0.580203 -0.360655 0.730269 +v 139.906693 -141.233368 46.399940 1.000000 1.000000 1.000000 +vn 0.675195 -0.123751 0.727184 +v 139.716141 -141.737076 46.399940 1.000000 1.000000 1.000000 +vn 0.695399 -0.032821 0.717874 +v 139.690399 -142.009171 46.399940 1.000000 1.000000 1.000000 +vn 0.695399 0.032821 0.717874 +v 139.690399 -142.706833 46.399940 1.000000 1.000000 1.000000 +vn 0.675193 0.123755 0.727186 +v 139.716141 -142.978928 46.399940 1.000000 1.000000 1.000000 +vn 0.639701 0.243235 0.729123 +v 139.788239 -143.241241 46.399940 1.000000 1.000000 1.000000 +vn 0.580029 0.361470 0.730004 +v 139.906693 -143.481247 46.399940 1.000000 1.000000 1.000000 +vn 0.504749 0.464798 0.727455 +v 140.068909 -143.691940 46.399940 1.000000 1.000000 1.000000 +vn 0.400773 0.550358 0.732452 +v 140.262039 -143.867752 46.399940 1.000000 1.000000 1.000000 +vn 0.278310 0.623711 0.730430 +v 140.486053 -143.996109 46.399940 1.000000 1.000000 1.000000 +vn 0.143291 0.666068 0.731998 +v 140.726822 -144.075653 46.399940 1.000000 1.000000 1.000000 +vn 0.036368 0.693977 0.719078 +v 140.979156 -144.102173 46.399940 1.000000 1.000000 1.000000 +vn 0.672405 0.082498 0.735572 +v 139.690399 162.871292 46.399960 1.000000 1.000000 1.000000 +vn 0.564309 0.304403 0.767394 +v 139.864212 162.173615 46.399960 1.000000 1.000000 1.000000 +vn 0.094715 0.665647 0.740232 +v 140.979156 161.475952 46.399960 1.000000 1.000000 1.000000 +vn 0.334004 0.539757 0.772725 +v 140.335419 161.662933 46.399960 1.000000 1.000000 1.000000 +vn 0.672404 -0.082499 0.735572 +v 139.690399 163.568954 46.399960 1.000000 1.000000 1.000000 +vn 0.564318 -0.304399 0.767390 +v 139.864212 164.266617 46.399960 1.000000 1.000000 1.000000 +vn 0.334002 -0.539749 0.772731 +v 140.335419 164.777328 46.399960 1.000000 1.000000 1.000000 +vn 0.094708 -0.665651 0.740229 +v 140.979156 164.964294 46.399960 1.000000 1.000000 1.000000 +vn -0.564334 -0.303773 0.767626 +v 1.672502 164.266617 46.399979 1.000000 1.000000 1.000000 +vn -0.643645 -0.000001 0.765324 +v 1.931222 163.220123 46.399979 1.000000 1.000000 1.000000 +vn 0.334028 0.539759 0.772713 +v 125.851265 161.407593 46.399979 1.000000 1.000000 1.000000 +vn 0.564336 0.303789 0.767618 +v 125.144432 162.173615 46.399979 1.000000 1.000000 1.000000 +vn 0.643629 -0.000001 0.765338 +v 124.885651 163.220123 46.399979 1.000000 1.000000 1.000000 +vn -0.197211 -0.679075 0.707082 +v 0.600362 165.138702 46.399979 1.000000 1.000000 1.000000 +vn -0.333944 -0.539771 0.772741 +v 0.965626 165.032669 46.399979 1.000000 1.000000 1.000000 +vn 0.000002 -0.631202 0.775618 +v 0.000000 165.313126 46.399979 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 1.000000 +v -63.408436 165.138702 46.399998 1.000000 1.000000 1.000000 +vn -0.197215 -0.679074 0.707082 +v -126.216522 165.138702 46.399998 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 1.000000 +v -63.408436 161.301544 46.399998 1.000000 1.000000 1.000000 +vn 0.643642 -0.000001 0.765326 +v -1.931208 163.220123 46.399979 1.000000 1.000000 1.000000 +vn 0.564336 -0.303775 0.767623 +v -1.672476 164.266617 46.399979 1.000000 1.000000 1.000000 +vn -0.333951 -0.539761 0.772745 +v -125.851265 165.032669 46.399998 1.000000 1.000000 1.000000 +vn -0.564342 -0.303786 0.767615 +v -125.144432 164.266617 46.399998 1.000000 1.000000 1.000000 +vn 0.197214 -0.679075 0.707081 +v -0.600348 165.138702 46.399979 1.000000 1.000000 1.000000 +vn 0.333946 -0.539769 0.772742 +v -0.965610 165.032669 46.399979 1.000000 1.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +v -134.219894 165.138702 46.399998 1.000000 1.000000 1.000000 +vn 0.197213 -0.679074 0.707082 +v -127.417229 165.138702 46.399998 1.000000 1.000000 1.000000 +vn -0.000001 -0.631201 0.775619 +v -126.816872 165.313126 46.399998 1.000000 1.000000 1.000000 +vn 0.333951 -0.539761 0.772745 +v -127.782486 165.032669 46.399998 1.000000 1.000000 1.000000 +vn 0.564342 -0.303784 0.767616 +v -128.489319 164.266617 46.399998 1.000000 1.000000 1.000000 +vn 0.643631 -0.000001 0.765336 +v -128.748093 163.220123 46.399998 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 1.000000 +v -134.219894 161.301544 46.399998 1.000000 1.000000 1.000000 +vn 0.564336 0.303787 0.767618 +v -128.489319 162.173615 46.399998 1.000000 1.000000 1.000000 +vn 0.334026 0.539760 0.772714 +v -127.782486 161.407593 46.399998 1.000000 1.000000 1.000000 +vn 0.197241 0.679027 0.707120 +v -127.417480 161.301544 46.399998 1.000000 1.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +v -134.219894 10.431056 46.399979 1.000000 1.000000 1.000000 +vn 0.000000 0.631237 0.775590 +v -126.816872 161.127121 46.399998 1.000000 1.000000 1.000000 +vn -0.197242 0.679026 0.707121 +v -126.216263 161.301544 46.399998 1.000000 1.000000 1.000000 +vn 0.000000 -0.000000 1.000000 +v -63.408436 10.431076 46.399979 1.000000 1.000000 1.000000 +vn 0.197242 0.679025 0.707121 +v -0.600616 161.301544 46.399979 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 1.000000 +v -63.408436 -144.276581 46.399960 1.000000 1.000000 1.000000 +vn -0.643629 -0.000001 0.765338 +v -124.885651 163.220123 46.399998 1.000000 1.000000 1.000000 +vn -0.564336 0.303789 0.767618 +v -125.144432 162.173615 46.399998 1.000000 1.000000 1.000000 +vn -0.334028 0.539759 0.772713 +v -125.851265 161.407593 46.399998 1.000000 1.000000 1.000000 +vn 0.000001 -0.000002 1.000000 +v -151.600876 161.301544 46.399998 1.000000 1.000000 1.000000 +vn 0.000001 -0.000000 1.000000 +v -151.600876 10.431056 46.399979 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 1.000000 +v -134.219894 -144.276581 46.399960 1.000000 1.000000 1.000000 +vn -0.582116 -0.360470 0.728836 +v -139.909271 -141.233368 46.399960 1.000000 1.000000 1.000000 +vn -0.143838 -0.667425 0.730654 +v -140.728104 -140.641739 46.399960 1.000000 1.000000 1.000000 +vn -0.278269 -0.621980 0.731921 +v -140.487335 -140.719879 46.399960 1.000000 1.000000 1.000000 +vn -0.400386 -0.554079 0.729854 +v -140.264618 -140.849640 46.399960 1.000000 1.000000 1.000000 +vn -0.501102 -0.464591 0.730104 +v -140.068909 -141.022659 46.399960 1.000000 1.000000 1.000000 +vn 0.400830 -0.552326 0.730939 +v -145.558731 -140.849640 46.399960 1.000000 1.000000 1.000000 +vn 0.277616 -0.622626 0.731619 +v -145.334717 -140.719879 46.399960 1.000000 1.000000 1.000000 +vn 0.143637 -0.667395 0.730720 +v -145.093948 -140.641739 46.399960 1.000000 1.000000 1.000000 +vn 0.038219 -0.693223 0.719710 +v -144.841614 -140.613831 46.399960 1.000000 1.000000 1.000000 +vn -0.038409 -0.693145 0.719774 +v -140.979156 -140.613831 46.399960 1.000000 1.000000 1.000000 +vn 0.502165 -0.466111 0.728403 +v -145.751862 -141.022659 46.399960 1.000000 1.000000 1.000000 +vn 0.580203 -0.360655 0.730269 +v -145.914078 -141.233368 46.399960 1.000000 1.000000 1.000000 +vn 0.640242 -0.242608 0.728856 +v -146.032532 -141.474747 46.399960 1.000000 1.000000 1.000000 +vn 0.675195 -0.123751 0.727184 +v -146.104630 -141.737076 46.399960 1.000000 1.000000 1.000000 +vn 0.000001 -0.000000 1.000000 +v -151.600876 -144.276581 46.399960 1.000000 1.000000 1.000000 +vn 0.695399 -0.032821 0.717874 +v -146.130371 -142.009171 46.399960 1.000000 1.000000 1.000000 +vn 0.695399 0.032821 0.717874 +v -146.130371 -142.706833 46.399960 1.000000 1.000000 1.000000 +vn 0.675193 0.123755 0.727186 +v -146.104630 -142.978928 46.399960 1.000000 1.000000 1.000000 +vn 0.639701 0.243235 0.729123 +v -146.032532 -143.241241 46.399960 1.000000 1.000000 1.000000 +vn 0.580029 0.361470 0.730004 +v -145.914078 -143.481247 46.399960 1.000000 1.000000 1.000000 +vn 0.504749 0.464798 0.727455 +v -145.751862 -143.691940 46.399960 1.000000 1.000000 1.000000 +vn 0.400773 0.550358 0.732453 +v -145.558731 -143.867752 46.399960 1.000000 1.000000 1.000000 +vn 0.278310 0.623711 0.730430 +v -145.334717 -143.996109 46.399960 1.000000 1.000000 1.000000 +vn 0.143291 0.666068 0.731998 +v -145.093948 -144.075653 46.399960 1.000000 1.000000 1.000000 +vn 0.036368 0.693977 0.719078 +v -144.841614 -144.102173 46.399960 1.000000 1.000000 1.000000 +vn -0.333996 -0.539760 0.772726 +v -158.038284 -140.545456 46.399979 1.000000 1.000000 1.000000 +vn -0.564337 -0.303782 0.767620 +v -157.331451 -141.311493 46.399979 1.000000 1.000000 1.000000 +vn -0.643629 0.000001 0.765337 +v -157.072678 -142.358002 46.399979 1.000000 1.000000 1.000000 +vn -0.564338 0.303785 0.767618 +v -157.331451 -143.404495 46.399979 1.000000 1.000000 1.000000 +vn -0.333862 0.539769 0.772778 +v -158.038284 -144.170532 46.399979 1.000000 1.000000 1.000000 +vn -0.197203 0.679125 0.707036 +v -158.403931 -144.276581 46.399979 1.000000 1.000000 1.000000 +vn -0.000001 0.631146 0.775664 +v -159.003891 -144.451004 46.399979 1.000000 1.000000 1.000000 +vn 0.197200 0.679127 0.707036 +v -159.603867 -144.276581 46.399979 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 1.000000 +v -163.188217 -144.276581 46.399979 1.000000 1.000000 1.000000 +vn 0.333863 0.539773 0.772775 +v -159.969513 -144.170532 46.399979 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 1.000000 +v -163.188217 161.301544 46.400017 1.000000 1.000000 1.000000 +vn 0.000001 -0.000000 1.000000 +v -163.188217 10.431056 46.399998 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 1.000000 +v -163.188217 165.138702 46.400017 1.000000 1.000000 1.000000 +vn 0.197189 -0.679134 0.707031 +v -159.603867 165.138702 46.400017 1.000000 1.000000 1.000000 +vn 0.333851 -0.539771 0.772781 +v -159.969513 165.032669 46.400017 1.000000 1.000000 1.000000 +vn -0.000002 -0.631147 0.775663 +v -159.003891 165.313126 46.400017 1.000000 1.000000 1.000000 +vn -0.197191 -0.679134 0.707030 +v -158.403931 165.138702 46.400017 1.000000 1.000000 1.000000 +vn -0.333851 -0.539771 0.772781 +v -158.038284 165.032669 46.400017 1.000000 1.000000 1.000000 +vn 0.000001 -0.000002 1.000000 +v -151.600876 165.138702 46.400017 1.000000 1.000000 1.000000 +vn -0.094708 -0.665651 0.740229 +v -140.979156 164.964294 46.399998 1.000000 1.000000 1.000000 +vn -0.334002 -0.539749 0.772731 +v -140.335419 164.777328 46.399998 1.000000 1.000000 1.000000 +vn -0.564380 -0.303172 0.767830 +v -139.864212 164.266617 46.399998 1.000000 1.000000 1.000000 +vn -0.672995 -0.081389 0.735156 +v -139.692963 163.568954 46.399998 1.000000 1.000000 1.000000 +vn -0.682728 0.061991 0.728038 +v -139.692963 162.871292 46.399998 1.000000 1.000000 1.000000 +vn -0.616511 0.236486 0.750992 +v -139.790817 162.336884 46.399998 1.000000 1.000000 1.000000 +vn -0.481726 0.446910 0.753798 +v -140.068909 161.884781 46.399998 1.000000 1.000000 1.000000 +vn -0.266340 0.597394 0.756428 +v -140.487335 161.582001 46.399998 1.000000 1.000000 1.000000 +vn -0.072237 0.677724 0.731759 +v -140.979156 161.475952 46.399998 1.000000 1.000000 1.000000 +vn -0.564341 -0.303784 0.767616 +v -157.331451 164.266617 46.400017 1.000000 1.000000 1.000000 +vn 0.564319 -0.304400 0.767388 +v -145.956558 164.266617 46.399998 1.000000 1.000000 1.000000 +vn 0.334003 -0.539753 0.772728 +v -145.485352 164.777328 46.399998 1.000000 1.000000 1.000000 +vn 0.094706 -0.665676 0.740207 +v -144.841614 164.964294 46.399998 1.000000 1.000000 1.000000 +vn 0.682370 0.062746 0.728309 +v -146.130371 162.871292 46.399998 1.000000 1.000000 1.000000 +vn 0.672405 -0.082499 0.735571 +v -146.130371 163.568954 46.399998 1.000000 1.000000 1.000000 +vn -0.643629 -0.000001 0.765337 +v -157.072678 163.220123 46.400017 1.000000 1.000000 1.000000 +vn -0.564335 0.303786 0.767620 +v -157.331451 162.173615 46.400017 1.000000 1.000000 1.000000 +vn -0.333860 0.539772 0.772777 +v -158.038284 161.407593 46.400017 1.000000 1.000000 1.000000 +vn -0.197202 0.679126 0.707035 +v -158.403931 161.301544 46.400017 1.000000 1.000000 1.000000 +vn -0.000002 0.631147 0.775663 +v -159.003891 161.127121 46.400017 1.000000 1.000000 1.000000 +vn 0.197200 0.679127 0.707036 +v -159.603867 161.301544 46.400017 1.000000 1.000000 1.000000 +vn 0.333861 0.539776 0.772774 +v -159.969513 161.407593 46.400017 1.000000 1.000000 1.000000 +vn 0.564336 0.303787 0.767618 +v -160.676346 162.173615 46.400017 1.000000 1.000000 1.000000 +vn 0.643631 -0.000001 0.765336 +v -160.935120 163.220123 46.400017 1.000000 1.000000 1.000000 +vn 0.564342 -0.303784 0.767615 +v -160.676346 164.266617 46.400017 1.000000 1.000000 1.000000 +vn 0.564339 -0.303785 0.767617 +v -160.676346 -141.311493 46.399979 1.000000 1.000000 1.000000 +vn -0.000001 -0.631228 0.775597 +v -159.003891 -140.264999 46.399979 1.000000 1.000000 1.000000 +vn 0.333996 -0.539760 0.772726 +v -159.969513 -140.545456 46.399979 1.000000 1.000000 1.000000 +vn 0.564339 0.303786 0.767617 +v -160.676346 -143.404495 46.399979 1.000000 1.000000 1.000000 +vn 0.643631 0.000001 0.765336 +v -160.935120 -142.358002 46.399979 1.000000 1.000000 1.000000 +vn 0.481957 0.447403 0.753358 +v -145.751862 161.884781 46.399998 1.000000 1.000000 1.000000 +vn 0.616021 0.237843 0.750966 +v -146.031250 162.336884 46.399998 1.000000 1.000000 1.000000 +vn 0.072063 0.677812 0.731695 +v -144.841614 161.475952 46.399998 1.000000 1.000000 1.000000 +vn 0.266498 0.597008 0.756677 +v -145.334717 161.582001 46.399998 1.000000 1.000000 1.000000 +vn -0.639187 -0.245451 0.728830 +v -139.789520 -141.474747 46.399960 1.000000 1.000000 1.000000 +vn -0.673772 -0.121816 0.728830 +v -139.716141 -141.737076 46.399960 1.000000 1.000000 1.000000 +vn -0.696656 -0.029618 0.716794 +v -139.692963 -142.009171 46.399960 1.000000 1.000000 1.000000 +vn -0.696656 0.029618 0.716794 +v -139.692963 -142.706833 46.399960 1.000000 1.000000 1.000000 +vn -0.673769 0.121821 0.728831 +v -139.716141 -142.978928 46.399960 1.000000 1.000000 1.000000 +vn -0.638639 0.246080 0.729099 +v -139.789520 -143.241241 46.399960 1.000000 1.000000 1.000000 +vn -0.581940 0.361291 0.728570 +v -139.909271 -143.481247 46.399960 1.000000 1.000000 1.000000 +vn -0.503683 0.463290 0.729154 +v -140.068909 -143.691940 46.399960 1.000000 1.000000 1.000000 +vn -0.400333 0.552123 0.731364 +v -140.264618 -143.867752 46.399960 1.000000 1.000000 1.000000 +vn -0.278961 0.623069 0.730729 +v -140.487335 -143.996109 46.399960 1.000000 1.000000 1.000000 +vn -0.143482 0.666097 0.731935 +v -140.728104 -144.075653 46.399960 1.000000 1.000000 1.000000 +vn -0.036548 0.693904 0.719139 +v -140.979156 -144.102173 46.399960 1.000000 1.000000 1.000000 +vn -0.564328 0.303776 0.767629 +v 1.672502 162.173615 46.399979 1.000000 1.000000 1.000000 +vn -0.334023 0.539768 0.772709 +v 0.965626 161.407593 46.399979 1.000000 1.000000 1.000000 +vn 0.334025 0.539767 0.772709 +v -0.965610 161.407593 46.399979 1.000000 1.000000 1.000000 +vn 0.564331 0.303778 0.767626 +v -1.672476 162.173615 46.399979 1.000000 1.000000 1.000000 +vn 0.564318 -0.304399 -0.767390 +v -145.956558 164.266617 43.199997 1.000000 1.000000 1.000000 +vn 0.672404 -0.082499 -0.735572 +v -146.130371 163.568954 43.199997 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v -151.600876 165.138702 43.199997 1.000000 1.000000 1.000000 +vn 0.334002 -0.539749 -0.772731 +v -145.485352 164.777328 43.199997 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v -151.600876 161.301544 43.199997 1.000000 1.000000 1.000000 +vn 0.682369 0.062747 -0.728310 +v -146.130371 162.871292 43.199997 1.000000 1.000000 1.000000 +vn 0.616021 0.237843 -0.750966 +v -146.031250 162.336884 43.199997 1.000000 1.000000 1.000000 +vn 0.481957 0.447403 -0.753358 +v -145.751862 161.884781 43.199997 1.000000 1.000000 1.000000 +vn 0.266498 0.597008 -0.756677 +v -145.334717 161.582001 43.199997 1.000000 1.000000 1.000000 +vn 0.072063 0.677812 -0.731695 +v -144.841614 161.475952 43.199997 1.000000 1.000000 1.000000 +vn -0.333861 0.539776 -0.772774 +v -158.038284 161.407593 43.199997 1.000000 1.000000 1.000000 +vn -0.564336 0.303787 -0.767618 +v -157.331451 162.173615 43.199997 1.000000 1.000000 1.000000 +vn -0.643631 -0.000001 -0.765336 +v -157.072678 163.220123 43.199997 1.000000 1.000000 1.000000 +vn -0.197203 0.679127 -0.707035 +v -158.403931 161.301544 43.199997 1.000000 1.000000 1.000000 +vn -0.000001 0.000000 -1.000000 +v -151.600876 10.431056 43.199978 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v -134.219894 10.431056 43.199978 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v -134.219894 161.301544 43.199997 1.000000 1.000000 1.000000 +vn -0.564342 -0.303784 -0.767615 +v -157.331451 164.266617 43.199997 1.000000 1.000000 1.000000 +vn -0.333851 -0.539771 -0.772781 +v -158.038284 165.032669 43.199997 1.000000 1.000000 1.000000 +vn 0.094708 -0.665651 -0.740229 +v -144.841614 164.964294 43.199997 1.000000 1.000000 1.000000 +vn -0.197191 -0.679134 -0.707030 +v -158.403931 165.138702 43.199997 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v -134.219894 165.138702 43.199997 1.000000 1.000000 1.000000 +vn -0.000002 -0.631147 -0.775663 +v -159.003891 165.313126 43.199997 1.000000 1.000000 1.000000 +vn -0.000000 0.000000 -1.000000 +v -63.408436 165.138702 43.199997 1.000000 1.000000 1.000000 +vn -0.197214 -0.679074 -0.707082 +v -126.216522 165.138702 43.199997 1.000000 1.000000 1.000000 +vn -0.000001 -0.631202 -0.775619 +v -126.816872 165.313126 43.199997 1.000000 1.000000 1.000000 +vn 0.197213 -0.679074 -0.707082 +v -127.417229 165.138702 43.199997 1.000000 1.000000 1.000000 +vn 0.000002 -0.631201 -0.775619 +v 0.000000 165.313126 43.199978 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v 63.408436 165.138702 43.199978 1.000000 1.000000 1.000000 +vn 0.197215 -0.679074 -0.707082 +v 126.216522 165.138702 43.199978 1.000000 1.000000 1.000000 +vn 0.000001 -0.631201 -0.775619 +v 126.816872 165.313126 43.199978 1.000000 1.000000 1.000000 +vn -0.197214 -0.679074 -0.707082 +v 127.417229 165.138702 43.199978 1.000000 1.000000 1.000000 +vn -0.000002 0.000002 -1.000000 +v 134.219894 165.138702 43.199959 1.000000 1.000000 1.000000 +vn -0.000000 0.000000 -1.000000 +v 151.600876 165.138702 43.199959 1.000000 1.000000 1.000000 +vn 0.333951 -0.539761 -0.772745 +v 125.851265 165.032669 43.199978 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v 63.408436 161.301544 43.199978 1.000000 1.000000 1.000000 +vn 0.564342 -0.303786 -0.767615 +v 125.144432 164.266617 43.199978 1.000000 1.000000 1.000000 +vn 0.643629 -0.000001 -0.765338 +v 124.885651 163.220123 43.199978 1.000000 1.000000 1.000000 +vn 0.564336 0.303789 -0.767618 +v 125.144432 162.173615 43.199978 1.000000 1.000000 1.000000 +vn 0.334028 0.539759 -0.772713 +v 125.851265 161.407593 43.199978 1.000000 1.000000 1.000000 +vn 0.197242 0.679026 -0.707121 +v 126.216263 161.301544 43.199978 1.000000 1.000000 1.000000 +vn -0.334023 0.539768 -0.772709 +v 0.965626 161.407593 43.199978 1.000000 1.000000 1.000000 +vn -0.197239 0.679025 -0.707122 +v 0.600632 161.301544 43.199978 1.000000 1.000000 1.000000 +vn -0.000000 0.000000 -1.000000 +v 63.408436 10.431076 43.199959 1.000000 1.000000 1.000000 +vn -0.643645 -0.000001 -0.765324 +v 1.931222 163.220123 43.199978 1.000000 1.000000 1.000000 +vn -0.564334 -0.303773 -0.767626 +v 1.672502 164.266617 43.199978 1.000000 1.000000 1.000000 +vn -0.333944 -0.539771 -0.772741 +v 0.965626 165.032669 43.199978 1.000000 1.000000 1.000000 +vn -0.197211 -0.679075 -0.707082 +v 0.600362 165.138702 43.199978 1.000000 1.000000 1.000000 +vn -0.000000 0.000000 -1.000000 +v 134.219894 10.431098 43.199940 1.000000 1.000000 1.000000 +vn -0.000014 0.631241 -0.775587 +v 126.816872 161.127121 43.199978 1.000000 1.000000 1.000000 +vn -0.000000 0.000000 -1.000000 +v 134.219894 -144.276581 43.199921 1.000000 1.000000 1.000000 +vn -0.000000 0.000000 -1.000000 +v 63.408436 -144.276581 43.199940 1.000000 1.000000 1.000000 +vn 0.197282 0.678924 -0.707207 +v 158.402634 -144.276581 43.199921 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v 151.600876 -144.276581 43.199921 1.000000 1.000000 1.000000 +vn 0.334198 0.539740 -0.772653 +v 158.038284 -144.170532 43.199921 1.000000 1.000000 1.000000 +vn 0.000000 0.631328 -0.775516 +v 159.003891 -144.451004 43.199921 1.000000 1.000000 1.000000 +vn -0.197279 0.678927 -0.707206 +v 159.605148 -144.276581 43.199921 1.000000 1.000000 1.000000 +vn -0.334194 0.539740 -0.772655 +v 159.969513 -144.170532 43.199921 1.000000 1.000000 1.000000 +vn -0.564339 0.303786 -0.767617 +v 160.676346 -143.404495 43.199921 1.000000 1.000000 1.000000 +vn -0.643631 0.000001 -0.765336 +v 160.935120 -142.358002 43.199921 1.000000 1.000000 1.000000 +vn -0.564339 -0.303784 -0.767617 +v 160.676346 -141.311493 43.199921 1.000000 1.000000 1.000000 +vn -0.333996 -0.539760 -0.772726 +v 159.969513 -140.545456 43.199921 1.000000 1.000000 1.000000 +vn 0.000001 -0.631228 -0.775598 +v 159.003891 -140.264999 43.199921 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v 151.600876 10.431098 43.199940 1.000000 1.000000 1.000000 +vn 0.333998 -0.539760 -0.772726 +v 158.038284 -140.545456 43.199921 1.000000 1.000000 1.000000 +vn 0.564339 -0.303784 -0.767617 +v 157.331451 -141.311493 43.199921 1.000000 1.000000 1.000000 +vn 0.643631 0.000001 -0.765336 +v 157.072678 -142.358002 43.199921 1.000000 1.000000 1.000000 +vn 0.564339 0.303786 -0.767617 +v 157.331451 -143.404495 43.199921 1.000000 1.000000 1.000000 +vn -0.278961 0.623070 -0.730729 +v 145.333435 -143.996109 43.199921 1.000000 1.000000 1.000000 +vn -0.400333 0.552123 -0.731364 +v 145.556152 -143.867752 43.199921 1.000000 1.000000 1.000000 +vn -0.503683 0.463290 -0.729154 +v 145.751862 -143.691940 43.199921 1.000000 1.000000 1.000000 +vn -0.581940 0.361292 -0.728570 +v 145.911499 -143.481247 43.199921 1.000000 1.000000 1.000000 +vn -0.638639 0.246080 -0.729099 +v 146.031250 -143.241241 43.199921 1.000000 1.000000 1.000000 +vn -0.673769 0.121821 -0.728831 +v 146.104630 -142.978928 43.199921 1.000000 1.000000 1.000000 +vn -0.696656 0.029618 -0.716794 +v 146.127808 -142.706833 43.199921 1.000000 1.000000 1.000000 +vn -0.696656 -0.029618 -0.716794 +v 146.127808 -142.009171 43.199921 1.000000 1.000000 1.000000 +vn -0.036548 0.693904 -0.719139 +v 144.841614 -144.102173 43.199921 1.000000 1.000000 1.000000 +vn -0.143482 0.666096 -0.731935 +v 145.092667 -144.075653 43.199921 1.000000 1.000000 1.000000 +vn -0.673772 -0.121816 -0.728830 +v 146.104630 -141.737076 43.199921 1.000000 1.000000 1.000000 +vn -0.639187 -0.245451 -0.728830 +v 146.031250 -141.474747 43.199921 1.000000 1.000000 1.000000 +vn -0.582116 -0.360470 -0.728836 +v 145.911499 -141.233368 43.199921 1.000000 1.000000 1.000000 +vn -0.000001 0.000001 -1.000000 +v 134.219894 161.301544 43.199959 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v 151.600876 161.301544 43.199959 1.000000 1.000000 1.000000 +vn 0.197282 0.678924 -0.707207 +v 158.402634 161.301544 43.199959 1.000000 1.000000 1.000000 +vn -0.501102 -0.464591 -0.730104 +v 145.751862 -141.022659 43.199921 1.000000 1.000000 1.000000 +vn -0.400386 -0.554079 -0.729854 +v 145.556152 -140.849640 43.199921 1.000000 1.000000 1.000000 +vn -0.278269 -0.621980 -0.731921 +v 145.333435 -140.719879 43.199921 1.000000 1.000000 1.000000 +vn -0.143838 -0.667425 -0.730654 +v 145.092667 -140.641739 43.199921 1.000000 1.000000 1.000000 +vn -0.038409 -0.693145 -0.719774 +v 144.841614 -140.613831 43.199921 1.000000 1.000000 1.000000 +vn 0.038219 -0.693222 -0.719710 +v 140.979156 -140.613831 43.199921 1.000000 1.000000 1.000000 +vn 0.143637 -0.667395 -0.730720 +v 140.726822 -140.641739 43.199921 1.000000 1.000000 1.000000 +vn 0.277616 -0.622625 -0.731619 +v 140.486053 -140.719879 43.199921 1.000000 1.000000 1.000000 +vn 0.400830 -0.552325 -0.730939 +v 140.262039 -140.849640 43.199921 1.000000 1.000000 1.000000 +vn -0.197249 0.679022 -0.707122 +v 127.417480 161.301544 43.199959 1.000000 1.000000 1.000000 +vn 0.502165 -0.466111 -0.728403 +v 140.068909 -141.022659 43.199921 1.000000 1.000000 1.000000 +vn -0.334026 0.539760 -0.772714 +v 127.782486 161.407593 43.199959 1.000000 1.000000 1.000000 +vn -0.564332 0.303792 -0.767619 +v 128.489319 162.173615 43.199959 1.000000 1.000000 1.000000 +vn -0.643633 0.000005 -0.765334 +v 128.748093 163.220123 43.199978 1.000000 1.000000 1.000000 +vn -0.564343 -0.303785 -0.767614 +v 128.489319 164.266617 43.199978 1.000000 1.000000 1.000000 +vn -0.333952 -0.539765 -0.772741 +v 127.782486 165.032669 43.199978 1.000000 1.000000 1.000000 +vn 0.564318 -0.304399 -0.767390 +v 139.864212 164.266617 43.199959 1.000000 1.000000 1.000000 +vn 0.672404 -0.082499 -0.735572 +v 139.690399 163.568954 43.199959 1.000000 1.000000 1.000000 +vn 0.094708 -0.665651 -0.740229 +v 140.979156 164.964294 43.199959 1.000000 1.000000 1.000000 +vn 0.334002 -0.539749 -0.772731 +v 140.335419 164.777328 43.199959 1.000000 1.000000 1.000000 +vn 0.672405 0.082498 -0.735572 +v 139.690399 162.871292 43.199959 1.000000 1.000000 1.000000 +vn 0.564309 0.304403 -0.767394 +v 139.864212 162.173615 43.199959 1.000000 1.000000 1.000000 +vn 0.334004 0.539757 -0.772725 +v 140.335419 161.662933 43.199959 1.000000 1.000000 1.000000 +vn 0.094715 0.665647 -0.740232 +v 140.979156 161.475952 43.199959 1.000000 1.000000 1.000000 +vn 0.695399 0.032821 -0.717874 +v 139.690399 -142.706833 43.199921 1.000000 1.000000 1.000000 +vn 0.675192 0.123756 -0.727186 +v 139.716141 -142.978928 43.199921 1.000000 1.000000 1.000000 +vn 0.639701 0.243235 -0.729123 +v 139.788239 -143.241241 43.199921 1.000000 1.000000 1.000000 +vn 0.580029 0.361470 -0.730004 +v 139.906693 -143.481247 43.199921 1.000000 1.000000 1.000000 +vn 0.504749 0.464798 -0.727455 +v 140.068909 -143.691940 43.199921 1.000000 1.000000 1.000000 +vn 0.580203 -0.360655 -0.730269 +v 139.906693 -141.233368 43.199921 1.000000 1.000000 1.000000 +vn 0.640242 -0.242608 -0.728856 +v 139.788239 -141.474747 43.199921 1.000000 1.000000 1.000000 +vn 0.675195 -0.123751 -0.727184 +v 139.716141 -141.737076 43.199921 1.000000 1.000000 1.000000 +vn 0.695399 -0.032821 -0.717874 +v 139.690399 -142.009171 43.199921 1.000000 1.000000 1.000000 +vn 0.400773 0.550358 -0.732452 +v 140.262039 -143.867752 43.199921 1.000000 1.000000 1.000000 +vn 0.278310 0.623711 -0.730430 +v 140.486053 -143.996109 43.199921 1.000000 1.000000 1.000000 +vn 0.143291 0.666068 -0.731998 +v 140.726822 -144.075653 43.199921 1.000000 1.000000 1.000000 +vn 0.036368 0.693977 -0.719078 +v 140.979156 -144.102173 43.199921 1.000000 1.000000 1.000000 +vn -0.197279 0.678927 -0.707206 +v 159.605148 161.301544 43.199959 1.000000 1.000000 1.000000 +vn 0.000000 0.631329 -0.775515 +v 159.003891 161.127121 43.199959 1.000000 1.000000 1.000000 +vn -0.334192 0.539743 -0.772653 +v 159.969513 161.407593 43.199959 1.000000 1.000000 1.000000 +vn -0.564336 0.303787 -0.767618 +v 160.676346 162.173615 43.199959 1.000000 1.000000 1.000000 +vn -0.643631 -0.000001 -0.765336 +v 160.935120 163.220123 43.199959 1.000000 1.000000 1.000000 +vn -0.564342 -0.303784 -0.767616 +v 160.676346 164.266617 43.199959 1.000000 1.000000 1.000000 +vn -0.333851 -0.539771 -0.772781 +v 159.969513 165.032669 43.199959 1.000000 1.000000 1.000000 +vn -0.197189 -0.679134 -0.707031 +v 159.603867 165.138702 43.199959 1.000000 1.000000 1.000000 +vn 0.000002 -0.631147 -0.775663 +v 159.003891 165.313126 43.199959 1.000000 1.000000 1.000000 +vn 0.197191 -0.679134 -0.707030 +v 158.403931 165.138702 43.199959 1.000000 1.000000 1.000000 +vn 0.333851 -0.539771 -0.772781 +v 158.038284 165.032669 43.199959 1.000000 1.000000 1.000000 +vn 0.564342 -0.303784 -0.767616 +v 157.331451 164.266617 43.199959 1.000000 1.000000 1.000000 +vn 0.643631 -0.000001 -0.765336 +v 157.072678 163.220123 43.199959 1.000000 1.000000 1.000000 +vn 0.564336 0.303787 -0.767618 +v 157.331451 162.173615 43.199959 1.000000 1.000000 1.000000 +vn 0.334196 0.539743 -0.772652 +v 158.038284 161.407593 43.199959 1.000000 1.000000 1.000000 +vn -0.072237 0.677725 -0.731759 +v 144.841614 161.475952 43.199959 1.000000 1.000000 1.000000 +vn -0.266340 0.597394 -0.756428 +v 145.333435 161.582001 43.199959 1.000000 1.000000 1.000000 +vn -0.481726 0.446911 -0.753798 +v 145.751862 161.884781 43.199959 1.000000 1.000000 1.000000 +vn -0.616511 0.236486 -0.750992 +v 146.029953 162.336884 43.199959 1.000000 1.000000 1.000000 +vn -0.682728 0.061991 -0.728038 +v 146.127808 162.871292 43.199959 1.000000 1.000000 1.000000 +vn -0.682729 -0.061990 -0.728038 +v 146.127808 163.568954 43.199959 1.000000 1.000000 1.000000 +vn -0.616503 -0.236492 -0.750996 +v 146.029953 164.103378 43.199959 1.000000 1.000000 1.000000 +vn -0.266346 -0.597388 -0.756431 +v 145.333435 164.858246 43.199959 1.000000 1.000000 1.000000 +vn -0.481730 -0.446917 -0.753791 +v 145.751862 164.555450 43.199959 1.000000 1.000000 1.000000 +vn -0.072237 -0.677724 -0.731759 +v 144.841614 164.964294 43.199959 1.000000 1.000000 1.000000 +vn 0.333951 -0.539761 -0.772745 +v -127.782486 165.032669 43.199997 1.000000 1.000000 1.000000 +vn 0.564342 -0.303784 -0.767616 +v -128.489319 164.266617 43.199997 1.000000 1.000000 1.000000 +vn 0.643631 -0.000001 -0.765336 +v -128.748093 163.220123 43.199997 1.000000 1.000000 1.000000 +vn 0.564336 0.303787 -0.767618 +v -128.489319 162.173615 43.199997 1.000000 1.000000 1.000000 +vn 0.334026 0.539760 -0.772713 +v -127.782486 161.407593 43.199997 1.000000 1.000000 1.000000 +vn 0.197241 0.679027 -0.707120 +v -127.417480 161.301544 43.199997 1.000000 1.000000 1.000000 +vn 0.000000 0.631238 -0.775590 +v -126.816872 161.127121 43.199997 1.000000 1.000000 1.000000 +vn -0.197242 0.679026 -0.707121 +v -126.216263 161.301544 43.199997 1.000000 1.000000 1.000000 +vn -0.000000 0.000000 -1.000000 +v -63.408436 161.301544 43.199997 1.000000 1.000000 1.000000 +vn -0.000000 0.000000 -1.000000 +v -63.408436 10.431076 43.199978 1.000000 1.000000 1.000000 +vn 0.197242 0.679025 -0.707121 +v -0.600616 161.301544 43.199978 1.000000 1.000000 1.000000 +vn 0.333946 -0.539768 -0.772743 +v -0.965610 165.032669 43.199978 1.000000 1.000000 1.000000 +vn 0.564336 -0.303775 -0.767624 +v -1.672476 164.266617 43.199978 1.000000 1.000000 1.000000 +vn 0.643642 -0.000001 -0.765327 +v -1.931208 163.220123 43.199978 1.000000 1.000000 1.000000 +vn -0.334028 0.539759 -0.772713 +v -125.851265 161.407593 43.199997 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v -63.408436 -144.276581 43.199959 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v -134.219894 -144.276581 43.199959 1.000000 1.000000 1.000000 +vn -0.000002 0.000000 -1.000000 +v -151.600876 -144.276581 43.199959 1.000000 1.000000 1.000000 +vn -0.197204 0.679128 -0.707033 +v -158.403931 -144.276581 43.199978 1.000000 1.000000 1.000000 +vn -0.000003 0.631148 -0.775662 +v -159.003891 -144.451004 43.199978 1.000000 1.000000 1.000000 +vn -0.333864 0.539777 -0.772772 +v -158.038284 -144.170532 43.199978 1.000000 1.000000 1.000000 +vn -0.564341 0.303787 -0.767615 +v -157.331451 -143.404495 43.199978 1.000000 1.000000 1.000000 +vn -0.643632 0.000001 -0.765335 +v -157.072678 -142.358002 43.199978 1.000000 1.000000 1.000000 +vn -0.564341 -0.303784 -0.767616 +v -157.331451 -141.311493 43.199978 1.000000 1.000000 1.000000 +vn -0.333998 -0.539760 -0.772726 +v -158.038284 -140.545456 43.199978 1.000000 1.000000 1.000000 +vn -0.000001 0.000000 -1.000000 +v -163.188217 10.431056 43.199997 1.000000 1.000000 1.000000 +vn -0.000001 -0.631228 -0.775598 +v -159.003891 -140.264999 43.199978 1.000000 1.000000 1.000000 +vn 0.333996 -0.539760 -0.772726 +v -159.969513 -140.545456 43.199978 1.000000 1.000000 1.000000 +vn 0.564339 -0.303785 -0.767617 +v -160.676346 -141.311493 43.199978 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v -163.188217 -144.276581 43.199978 1.000000 1.000000 1.000000 +vn 0.643631 0.000001 -0.765336 +v -160.935120 -142.358002 43.199978 1.000000 1.000000 1.000000 +vn 0.564339 0.303786 -0.767617 +v -160.676346 -143.404495 43.199978 1.000000 1.000000 1.000000 +vn 0.333863 0.539773 -0.772775 +v -159.969513 -144.170532 43.199978 1.000000 1.000000 1.000000 +vn 0.197200 0.679127 -0.707036 +v -159.603867 -144.276581 43.199978 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v -163.188217 161.301544 43.199997 1.000000 1.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +v -163.188217 165.138702 43.199997 1.000000 1.000000 1.000000 +vn 0.197189 -0.679134 -0.707031 +v -159.603867 165.138702 43.199997 1.000000 1.000000 1.000000 +vn 0.333851 -0.539771 -0.772781 +v -159.969513 165.032669 43.199997 1.000000 1.000000 1.000000 +vn 0.564342 -0.303784 -0.767615 +v -160.676346 164.266617 43.199997 1.000000 1.000000 1.000000 +vn 0.564336 0.303787 -0.767618 +v -160.676346 162.173615 43.199997 1.000000 1.000000 1.000000 +vn 0.333861 0.539776 -0.772774 +v -159.969513 161.407593 43.199997 1.000000 1.000000 1.000000 +vn 0.197200 0.679126 -0.707036 +v -159.603867 161.301544 43.199997 1.000000 1.000000 1.000000 +vn 0.643631 -0.000001 -0.765336 +v -160.935120 163.220123 43.199997 1.000000 1.000000 1.000000 +vn -0.000002 0.631147 -0.775663 +v -159.003891 161.127121 43.199997 1.000000 1.000000 1.000000 +vn 0.502165 -0.466111 -0.728403 +v -145.751862 -141.022659 43.199959 1.000000 1.000000 1.000000 +vn -0.582116 -0.360470 -0.728836 +v -139.909271 -141.233368 43.199959 1.000000 1.000000 1.000000 +vn -0.501102 -0.464591 -0.730104 +v -140.068909 -141.022659 43.199959 1.000000 1.000000 1.000000 +vn 0.143637 -0.667395 -0.730720 +v -145.093948 -140.641739 43.199959 1.000000 1.000000 1.000000 +vn 0.277616 -0.622625 -0.731619 +v -145.334717 -140.719879 43.199959 1.000000 1.000000 1.000000 +vn 0.400830 -0.552325 -0.730939 +v -145.558731 -140.849640 43.199959 1.000000 1.000000 1.000000 +vn -0.400386 -0.554079 -0.729854 +v -140.264618 -140.849640 43.199959 1.000000 1.000000 1.000000 +vn -0.278269 -0.621980 -0.731921 +v -140.487335 -140.719879 43.199959 1.000000 1.000000 1.000000 +vn -0.143838 -0.667425 -0.730654 +v -140.728104 -140.641739 43.199959 1.000000 1.000000 1.000000 +vn -0.038409 -0.693145 -0.719775 +v -140.979156 -140.613831 43.199959 1.000000 1.000000 1.000000 +vn 0.038219 -0.693222 -0.719710 +v -144.841614 -140.613831 43.199959 1.000000 1.000000 1.000000 +vn -0.639187 -0.245451 -0.728830 +v -139.789520 -141.474747 43.199959 1.000000 1.000000 1.000000 +vn -0.673772 -0.121816 -0.728830 +v -139.716141 -141.737076 43.199959 1.000000 1.000000 1.000000 +vn -0.696656 -0.029618 -0.716794 +v -139.692963 -142.009171 43.199959 1.000000 1.000000 1.000000 +vn -0.696656 0.029618 -0.716794 +v -139.692963 -142.706833 43.199959 1.000000 1.000000 1.000000 +vn -0.673769 0.121821 -0.728831 +v -139.716141 -142.978928 43.199959 1.000000 1.000000 1.000000 +vn -0.638639 0.246080 -0.729099 +v -139.789520 -143.241241 43.199959 1.000000 1.000000 1.000000 +vn -0.581940 0.361291 -0.728570 +v -139.909271 -143.481247 43.199959 1.000000 1.000000 1.000000 +vn -0.503683 0.463290 -0.729154 +v -140.068909 -143.691940 43.199959 1.000000 1.000000 1.000000 +vn -0.400333 0.552123 -0.731364 +v -140.264618 -143.867752 43.199959 1.000000 1.000000 1.000000 +vn -0.278961 0.623070 -0.730729 +v -140.487335 -143.996109 43.199959 1.000000 1.000000 1.000000 +vn -0.143482 0.666096 -0.731935 +v -140.728104 -144.075653 43.199959 1.000000 1.000000 1.000000 +vn -0.036548 0.693904 -0.719140 +v -140.979156 -144.102173 43.199959 1.000000 1.000000 1.000000 +vn 0.580203 -0.360655 -0.730269 +v -145.914078 -141.233368 43.199959 1.000000 1.000000 1.000000 +vn 0.640242 -0.242608 -0.728856 +v -146.032532 -141.474747 43.199959 1.000000 1.000000 1.000000 +vn 0.675195 -0.123751 -0.727184 +v -146.104630 -141.737076 43.199959 1.000000 1.000000 1.000000 +vn 0.695399 -0.032821 -0.717874 +v -146.130371 -142.009171 43.199959 1.000000 1.000000 1.000000 +vn 0.695399 0.032821 -0.717874 +v -146.130371 -142.706833 43.199959 1.000000 1.000000 1.000000 +vn 0.675193 0.123755 -0.727186 +v -146.104630 -142.978928 43.199959 1.000000 1.000000 1.000000 +vn 0.639701 0.243235 -0.729123 +v -146.032532 -143.241241 43.199959 1.000000 1.000000 1.000000 +vn 0.580029 0.361470 -0.730004 +v -145.914078 -143.481247 43.199959 1.000000 1.000000 1.000000 +vn 0.504749 0.464798 -0.727455 +v -145.751862 -143.691940 43.199959 1.000000 1.000000 1.000000 +vn 0.400773 0.550358 -0.732452 +v -145.558731 -143.867752 43.199959 1.000000 1.000000 1.000000 +vn 0.278310 0.623711 -0.730430 +v -145.334717 -143.996109 43.199959 1.000000 1.000000 1.000000 +vn 0.143291 0.666068 -0.731998 +v -145.093948 -144.075653 43.199959 1.000000 1.000000 1.000000 +vn 0.036368 0.693977 -0.719078 +v -144.841614 -144.102173 43.199959 1.000000 1.000000 1.000000 +vn -0.564336 0.303789 -0.767618 +v -125.144432 162.173615 43.199997 1.000000 1.000000 1.000000 +vn -0.643629 -0.000001 -0.765338 +v -124.885651 163.220123 43.199997 1.000000 1.000000 1.000000 +vn -0.564342 -0.303786 -0.767615 +v -125.144432 164.266617 43.199997 1.000000 1.000000 1.000000 +vn -0.333951 -0.539761 -0.772745 +v -125.851265 165.032669 43.199997 1.000000 1.000000 1.000000 +vn 0.197214 -0.679074 -0.707082 +v -0.600348 165.138702 43.199978 1.000000 1.000000 1.000000 +vn -0.266340 0.597394 -0.756428 +v -140.487335 161.582001 43.199997 1.000000 1.000000 1.000000 +vn -0.481726 0.446911 -0.753798 +v -140.068909 161.884781 43.199997 1.000000 1.000000 1.000000 +vn -0.072237 0.677725 -0.731759 +v -140.979156 161.475952 43.199997 1.000000 1.000000 1.000000 +vn -0.616511 0.236486 -0.750992 +v -139.790817 162.336884 43.199997 1.000000 1.000000 1.000000 +vn -0.682728 0.061991 -0.728038 +v -139.692963 162.871292 43.199997 1.000000 1.000000 1.000000 +vn -0.672995 -0.081389 -0.735155 +v -139.692963 163.568954 43.199997 1.000000 1.000000 1.000000 +vn -0.564380 -0.303172 -0.767830 +v -139.864212 164.266617 43.199997 1.000000 1.000000 1.000000 +vn -0.334002 -0.539749 -0.772731 +v -140.335419 164.777328 43.199997 1.000000 1.000000 1.000000 +vn -0.094708 -0.665651 -0.740229 +v -140.979156 164.964294 43.199997 1.000000 1.000000 1.000000 +vn -0.564328 0.303776 -0.767629 +v 1.672502 162.173615 43.199978 1.000000 1.000000 1.000000 +vn 0.000002 0.631240 -0.775588 +v 0.000000 161.127121 43.199978 1.000000 1.000000 1.000000 +vn 0.564330 0.303778 -0.767626 +v -1.672476 162.173615 43.199978 1.000000 1.000000 1.000000 +vn 0.334025 0.539766 -0.772710 +v -0.965610 161.407593 43.199978 1.000000 1.000000 1.000000 +vn 0.693900 -0.626816 -0.354408 +v 157.119034 -121.045662 11.835998 1.000000 1.000000 1.000000 +vn 0.600489 0.687975 -0.407557 +v 130.520950 231.797989 11.835998 1.000000 1.000000 1.000000 +vn 0.687634 0.703576 -0.179280 +v 131.863800 231.797989 15.085000 1.000000 1.000000 1.000000 +vn 0.765571 -0.616716 -0.183202 +v 158.454147 -120.927055 15.084796 1.000000 1.000000 1.000000 +vn 0.610895 -0.617489 -0.495495 +v 156.636230 -121.088905 11.163398 1.000000 1.000000 1.000000 +vn 0.366245 0.668053 -0.647742 +v 128.421967 231.797989 9.756198 1.000000 1.000000 1.000000 +vn 0.691829 0.720960 -0.039867 +v 132.223007 231.797989 18.199997 1.000000 1.000000 1.000000 +vn 0.772639 -0.633522 -0.040973 +v 158.810776 -120.896355 18.199997 1.000000 1.000000 1.000000 +vn 0.553263 0.596541 0.581411 +v 132.223007 231.797989 35.299999 1.000000 1.000000 1.000000 +vn 0.677341 -0.083755 0.730886 +v 157.971329 -109.769966 35.299999 1.000000 1.000000 1.000000 +vn 0.743710 -0.665166 0.066706 +v 158.810776 -120.896355 19.299999 1.000000 1.000000 1.000000 +vn 0.682952 -0.417376 0.599478 +v 158.391052 -115.333160 33.156399 1.000000 1.000000 1.000000 +vn 0.717009 -0.634643 0.288315 +v 158.698761 -119.404747 27.299999 1.000000 1.000000 1.000000 +vn 0.542170 -0.653685 -0.527966 +v 155.012711 -121.365196 9.851200 1.000000 1.000000 1.000000 +vn 0.093822 0.681533 -0.725749 +v 126.410027 231.797989 9.199996 1.000000 1.000000 1.000000 +vn 0.440065 -0.601422 -0.666809 +v 154.638046 -121.429375 9.547398 1.000000 1.000000 1.000000 +vn 0.348181 -0.549715 -0.759331 +v 153.067322 -121.813103 9.199996 1.000000 1.000000 1.000000 +vn -0.631352 -0.774447 0.040322 +v 154.961212 -121.236824 18.199997 1.000000 1.000000 1.000000 +vn -0.719085 0.693685 0.041436 +v 128.347687 231.797989 18.199997 1.000000 1.000000 1.000000 +vn -0.676833 0.714661 0.176511 +v 128.227951 231.797989 17.161598 1.000000 1.000000 1.000000 +vn -0.588693 -0.790272 0.170030 +v 154.841476 -121.247993 17.161598 1.000000 1.000000 1.000000 +vn -0.625556 -0.777262 0.067400 +v 154.961212 -121.236824 19.299999 1.000000 1.000000 1.000000 +vn -0.600644 0.557071 0.573497 +v 128.347687 231.797989 35.299999 1.000000 1.000000 1.000000 +vn -0.655187 -0.186768 0.732016 +v 154.121765 -110.111824 35.299999 1.000000 1.000000 1.000000 +vn -0.606304 -0.520042 0.601625 +v 154.541489 -115.673622 33.156399 1.000000 1.000000 1.000000 +vn -0.603884 -0.742237 0.290530 +v 154.849197 -119.746605 27.299999 1.000000 1.000000 1.000000 +vn -0.562084 0.733825 0.381526 +v 127.780167 231.797989 16.078598 1.000000 1.000000 1.000000 +vn -0.530160 -0.780255 0.331862 +v 154.397293 -121.287056 16.078598 1.000000 1.000000 1.000000 +vn -0.321728 0.756931 0.568811 +v 127.080681 231.797989 15.385398 1.000000 1.000000 1.000000 +vn -0.260098 -0.749874 0.608308 +v 153.704636 -121.478203 15.408798 1.000000 1.000000 1.000000 +vn -0.403077 -0.763706 0.504264 +v 154.236359 -121.301003 15.854396 1.000000 1.000000 1.000000 +vn -0.086815 0.735410 0.672039 +v 126.410027 231.797989 15.199996 1.000000 1.000000 1.000000 +vn 0.342196 -0.612538 0.712530 +v 153.067322 -121.813103 15.199996 1.000000 1.000000 1.000000 +vn -0.010650 -0.743077 0.669122 +v 153.611923 -121.508904 15.331996 1.000000 1.000000 1.000000 +vn 0.495698 -0.433386 -0.752635 +v 151.761810 -122.827507 9.199996 1.000000 1.000000 1.000000 +vn 0.495698 -0.433386 0.752635 +v 151.761810 -122.827507 15.199996 1.000000 1.000000 1.000000 +vn 0.620279 -0.199057 -0.758703 +v 150.511673 -124.977715 9.199996 1.000000 1.000000 1.000000 +vn 0.620278 -0.199057 0.758704 +v 150.511673 -124.977715 15.199996 1.000000 1.000000 1.000000 +vn 0.647930 0.076881 -0.757810 +v 150.272202 -127.506050 9.199996 1.000000 1.000000 1.000000 +vn 0.647930 0.076881 0.757810 +v 150.272202 -127.506050 15.199996 1.000000 1.000000 1.000000 +vn 0.552632 0.341299 -0.760337 +v 151.089752 -129.887894 9.199996 1.000000 1.000000 1.000000 +vn 0.552632 0.341299 0.760337 +v 151.089752 -129.887894 15.199996 1.000000 1.000000 1.000000 +vn 0.086842 0.735407 0.672038 +v -126.410027 231.796585 15.199996 1.000000 1.000000 1.000000 +vn -0.093793 0.681549 -0.725736 +v -126.410027 231.796585 9.199996 1.000000 1.000000 1.000000 +vn 0.321712 0.756926 0.568828 +v -127.080681 231.796585 15.385398 1.000000 1.000000 1.000000 +vn -0.366299 0.668048 -0.647717 +v -128.421967 231.796585 9.756198 1.000000 1.000000 1.000000 +vn 0.562114 0.733798 0.381533 +v -127.780167 231.796585 16.078598 1.000000 1.000000 1.000000 +vn -0.600488 0.687943 -0.407614 +v -130.520950 231.796585 11.835998 1.000000 1.000000 1.000000 +vn 0.676837 0.714658 0.176509 +v -128.227951 231.796585 17.161598 1.000000 1.000000 1.000000 +vn -0.687632 0.703578 -0.179279 +v -131.863800 231.796585 15.085000 1.000000 1.000000 1.000000 +vn 0.719087 0.693683 0.041436 +v -128.347687 231.796585 18.199997 1.000000 1.000000 1.000000 +vn -0.691826 0.720963 -0.039867 +v -132.223007 231.796585 18.199997 1.000000 1.000000 1.000000 +vn 0.600645 0.557070 0.573496 +v -128.347687 231.796585 35.299999 1.000000 1.000000 1.000000 +vn -0.553264 0.596541 0.581410 +v -132.223007 231.796585 35.299999 1.000000 1.000000 1.000000 +vn 0.004940 -0.722172 0.691696 +v -153.611923 -121.508904 15.332200 1.000000 1.000000 1.000000 +vn -0.365424 -0.662299 -0.654084 +v -155.035873 -121.361000 9.819798 1.000000 1.000000 1.000000 +vn -0.310082 -0.612032 0.727506 +v -153.067322 -121.813103 15.199996 1.000000 1.000000 1.000000 +vn 0.275921 -0.740888 0.612333 +v -153.704636 -121.478203 15.408798 1.000000 1.000000 1.000000 +vn -0.480635 -0.600574 -0.638985 +v -155.262482 -121.309380 9.890998 1.000000 1.000000 1.000000 +vn -0.363049 -0.532301 -0.764756 +v -153.067322 -121.813103 9.199996 1.000000 1.000000 1.000000 +vn -0.495698 -0.433386 0.752635 +v -151.761810 -122.827507 15.199996 1.000000 1.000000 1.000000 +vn -0.495698 -0.433386 -0.752635 +v -151.761810 -122.827507 9.199996 1.000000 1.000000 1.000000 +vn -0.620279 -0.199057 0.758703 +v -150.511673 -124.977715 15.199996 1.000000 1.000000 1.000000 +vn -0.620279 -0.199057 -0.758703 +v -150.511673 -124.977715 9.199996 1.000000 1.000000 1.000000 +vn -0.647930 0.076881 0.757810 +v -150.272202 -127.506050 15.199996 1.000000 1.000000 1.000000 +vn -0.647931 0.076881 -0.757809 +v -150.272202 -127.506050 9.199996 1.000000 1.000000 1.000000 +vn -0.552631 0.341299 0.760338 +v -151.089752 -129.887894 15.199996 1.000000 1.000000 1.000000 +vn -0.552631 0.341299 -0.760338 +v -151.089752 -129.887894 9.199996 1.000000 1.000000 1.000000 +vn -0.624597 -0.620700 -0.473930 +v -156.636230 -121.088905 11.163398 1.000000 1.000000 1.000000 +vn 0.399881 -0.758842 0.514056 +v -154.236359 -121.301003 15.854396 1.000000 1.000000 1.000000 +vn -0.693850 -0.627102 -0.353999 +v -157.119034 -121.045662 11.835998 1.000000 1.000000 1.000000 +vn 0.529942 -0.780397 0.331877 +v -154.397293 -121.287056 16.078598 1.000000 1.000000 1.000000 +vn -0.765556 -0.616721 -0.183246 +v -158.454147 -120.927055 15.085000 1.000000 1.000000 1.000000 +vn 0.588852 -0.790195 0.169839 +v -154.841476 -121.247993 17.161598 1.000000 1.000000 1.000000 +vn -0.772664 -0.633493 -0.040942 +v -158.810776 -120.896355 18.199997 1.000000 1.000000 1.000000 +vn 0.631430 -0.774377 0.040468 +v -154.961212 -121.236824 18.199997 1.000000 1.000000 1.000000 +vn 0.625574 -0.777251 0.067358 +v -154.961212 -121.236824 19.299999 1.000000 1.000000 1.000000 +vn -0.743709 -0.665170 0.066673 +v -158.810776 -120.896355 19.299999 1.000000 1.000000 1.000000 +vn 0.603938 -0.742164 0.290604 +v -154.849197 -119.746605 27.299999 1.000000 1.000000 1.000000 +vn -0.717067 -0.634545 0.288387 +v -158.698761 -119.404747 27.299999 1.000000 1.000000 1.000000 +vn 0.606327 -0.520088 0.601561 +v -154.541489 -115.673622 33.156399 1.000000 1.000000 1.000000 +vn -0.682995 -0.417412 0.599404 +v -158.391052 -115.333160 33.156399 1.000000 1.000000 1.000000 +vn 0.655198 -0.186750 0.732011 +v -154.121765 -110.111824 35.299999 1.000000 1.000000 1.000000 +vn -0.677349 -0.083738 0.730880 +v -157.971329 -109.769966 35.299999 1.000000 1.000000 1.000000 +vn 0.725227 0.076461 0.684251 +v 168.660004 -142.358002 15.199996 1.000000 1.000000 1.000000 +vn 0.682513 0.310106 0.661824 +v 167.680237 -137.763168 15.199996 1.000000 1.000000 1.000000 +vn 0.482727 0.576790 0.659006 +v 164.937881 -134.101807 15.199996 1.000000 1.000000 1.000000 +vn 0.166167 0.735681 0.656629 +v 160.990479 -132.117645 15.199996 1.000000 1.000000 1.000000 +vn -0.042827 0.714263 0.698566 +v 156.640091 -132.211121 15.199996 1.000000 1.000000 1.000000 +vn 0.750539 0.120483 0.649750 +v 168.660004 -149.334671 15.199996 1.000000 1.000000 1.000000 +vn 0.071830 0.649717 0.756775 +v 155.041031 -132.368805 15.199996 1.000000 1.000000 1.000000 +vn -0.750540 0.120484 0.649748 +v -168.660004 -149.334671 15.199996 1.000000 1.000000 1.000000 +vn -0.340765 0.547509 0.764273 +v -152.798233 -131.629272 15.199996 1.000000 1.000000 1.000000 +vn 0.340765 0.547509 0.764273 +v 152.798233 -131.629272 15.199996 1.000000 1.000000 1.000000 +vn -0.482726 0.576790 0.659006 +v -164.937881 -134.101807 15.199996 1.000000 1.000000 1.000000 +vn -0.682513 0.310106 0.661824 +v -167.680237 -137.763168 15.199996 1.000000 1.000000 1.000000 +vn -0.166167 0.735681 0.656629 +v -160.990479 -132.117645 15.199996 1.000000 1.000000 1.000000 +vn -0.725227 0.076461 0.684251 +v -168.660004 -142.358002 15.199996 1.000000 1.000000 1.000000 +vn 0.042827 0.714263 0.698566 +v -156.640091 -132.211121 15.199996 1.000000 1.000000 1.000000 +vn -0.071830 0.649717 0.756775 +v -155.041031 -132.368805 15.199996 1.000000 1.000000 1.000000 +vn 0.340765 0.547509 -0.764273 +v 152.798233 -131.629272 9.199996 1.000000 1.000000 1.000000 +vn 0.071830 0.649717 -0.756775 +v 155.041031 -132.368805 9.199996 1.000000 1.000000 1.000000 +vn -0.042827 0.714263 -0.698566 +v 156.640091 -132.211121 9.199996 1.000000 1.000000 1.000000 +vn 0.166167 0.735681 -0.656629 +v 160.990479 -132.117645 9.199996 1.000000 1.000000 1.000000 +vn 0.482726 0.576790 -0.659006 +v 164.937881 -134.101807 9.199996 1.000000 1.000000 1.000000 +vn 0.682513 0.310106 -0.661824 +v 167.680237 -137.763168 9.199996 1.000000 1.000000 1.000000 +vn -0.668282 -0.135628 -0.731440 +v -168.660004 -149.334671 9.199996 1.000000 1.000000 1.000000 +vn 0.668281 -0.135628 -0.731441 +v 168.660004 -149.334671 9.199996 1.000000 1.000000 1.000000 +vn -0.340765 0.547509 -0.764273 +v -152.798233 -131.629272 9.199996 1.000000 1.000000 1.000000 +vn 0.725227 0.076461 -0.684251 +v 168.660004 -142.358002 9.199996 1.000000 1.000000 1.000000 +vn -0.725227 0.076461 -0.684251 +v -168.660004 -142.358002 9.199996 1.000000 1.000000 1.000000 +vn -0.682513 0.310106 -0.661824 +v -167.680237 -137.763168 9.199996 1.000000 1.000000 1.000000 +vn -0.482727 0.576790 -0.659006 +v -164.937881 -134.101807 9.199996 1.000000 1.000000 1.000000 +vn -0.166167 0.735681 -0.656629 +v -160.990479 -132.117645 9.199996 1.000000 1.000000 1.000000 +vn 0.042827 0.714263 -0.698566 +v -156.640091 -132.211121 9.199996 1.000000 1.000000 1.000000 +vn -0.071830 0.649717 -0.756775 +v -155.041031 -132.368805 9.199996 1.000000 1.000000 1.000000 +vn 0.728481 0.682143 0.063224 +v 168.660004 -154.916000 23.199997 1.000000 1.000000 1.000000 +vn 0.722688 0.688399 0.061881 +v 168.660004 -154.916000 23.260597 1.000000 1.000000 1.000000 +vn 0.686933 -0.723626 -0.066999 +v 168.660004 -159.102005 23.199997 1.000000 1.000000 1.000000 +vn 0.757712 0.601838 0.252316 +v 168.660004 -154.168106 19.199997 1.000000 1.000000 1.000000 +vn 0.722688 -0.688399 0.061881 +v 168.660004 -159.102005 23.260597 1.000000 1.000000 1.000000 +vn 0.696013 0.664897 0.271070 +v 167.624863 -154.916000 29.260799 1.000000 1.000000 1.000000 +vn 0.662608 -0.690723 -0.289574 +v 168.660004 -157.794571 16.199997 1.000000 1.000000 1.000000 +vn 0.779407 0.386196 0.493334 +v 168.660004 -152.125336 16.271797 1.000000 1.000000 1.000000 +vn 0.646713 -0.470105 -0.600636 +v 168.660004 -154.218338 11.075600 1.000000 1.000000 1.000000 +vn 0.696013 -0.664897 0.271070 +v 167.624863 -159.102005 29.260799 1.000000 1.000000 1.000000 +vn 0.489880 0.645850 0.585573 +v 164.797562 -154.916000 33.653000 1.000000 1.000000 1.000000 +vn 0.489880 -0.645850 0.585573 +v 164.797562 -159.102005 33.653000 1.000000 1.000000 1.000000 +vn 0.146248 0.665541 0.731893 +v 160.935120 -154.916000 35.260799 1.000000 1.000000 1.000000 +vn 0.146248 -0.665540 0.731893 +v 160.935120 -159.102005 35.260799 1.000000 1.000000 1.000000 +vn 0.107547 0.745279 0.658022 +v 113.942062 -154.916000 35.260799 1.000000 1.000000 1.000000 +vn 0.107547 -0.745279 0.658022 +v 113.942062 -159.102005 35.260799 1.000000 1.000000 1.000000 +vn 0.268001 -0.724436 0.635113 +v 111.814507 -159.102005 35.975338 1.000000 1.000000 1.000000 +vn 0.268001 0.724436 0.635113 +v 111.814507 -154.916000 35.975338 1.000000 1.000000 1.000000 +vn 0.232086 0.673947 0.701379 +v 101.219696 -154.916000 41.418537 1.000000 1.000000 1.000000 +vn 0.232086 -0.673946 0.701379 +v 101.219696 -159.102005 41.418537 1.000000 1.000000 1.000000 +vn 0.059547 0.689072 0.722242 +v 90.123665 -154.916000 43.260738 1.000000 1.000000 1.000000 +vn 0.059547 -0.689072 0.722243 +v 90.123665 -159.102005 43.260738 1.000000 1.000000 1.000000 +vn -0.686933 -0.723626 -0.066999 +v -168.660004 -159.102005 23.199997 1.000000 1.000000 1.000000 +vn -0.722688 -0.688398 0.061883 +v -168.660004 -159.102005 23.260799 1.000000 1.000000 1.000000 +vn -0.728482 0.682142 0.063224 +v -168.660004 -154.916000 23.199997 1.000000 1.000000 1.000000 +vn -0.662607 -0.690723 -0.289574 +v -168.660004 -157.794571 16.199997 1.000000 1.000000 1.000000 +vn -0.722688 0.688399 0.061883 +v -168.660004 -154.916000 23.260799 1.000000 1.000000 1.000000 +vn -0.696011 -0.664897 0.271072 +v -167.624863 -159.102005 29.260799 1.000000 1.000000 1.000000 +vn -0.757711 0.601840 0.252316 +v -168.660004 -154.168106 19.199997 1.000000 1.000000 1.000000 +vn -0.646714 -0.470104 -0.600636 +v -168.660004 -154.218338 11.075600 1.000000 1.000000 1.000000 +vn -0.779407 0.386195 0.493333 +v -168.660004 -152.125336 16.271797 1.000000 1.000000 1.000000 +vn -0.696011 0.664897 0.271072 +v -167.624863 -154.916000 29.260799 1.000000 1.000000 1.000000 +vn -0.489880 -0.645850 0.585573 +v -164.797562 -159.102005 33.653000 1.000000 1.000000 1.000000 +vn -0.489880 0.645850 0.585573 +v -164.797562 -154.916000 33.653000 1.000000 1.000000 1.000000 +vn -0.146248 -0.665539 0.731894 +v -160.935120 -159.102005 35.260799 1.000000 1.000000 1.000000 +vn -0.146248 0.665539 0.731894 +v -160.935120 -154.916000 35.260799 1.000000 1.000000 1.000000 +vn -0.107549 0.745280 0.658021 +v -113.942062 -154.916000 35.260799 1.000000 1.000000 1.000000 +vn -0.107549 -0.745280 0.658021 +v -113.942062 -159.102005 35.260799 1.000000 1.000000 1.000000 +vn -0.268004 0.724435 0.635112 +v -111.814507 -154.916000 35.975357 1.000000 1.000000 1.000000 +vn -0.268004 -0.724435 0.635113 +v -111.814507 -159.102005 35.975357 1.000000 1.000000 1.000000 +vn -0.232086 -0.673947 0.701379 +v -101.219696 -159.102005 41.418556 1.000000 1.000000 1.000000 +vn -0.232086 0.673946 0.701379 +v -101.219696 -154.916000 41.418556 1.000000 1.000000 1.000000 +vn -0.059547 -0.689072 0.722242 +v -90.123665 -159.102005 43.260757 1.000000 1.000000 1.000000 +vn -0.059547 0.689072 0.722243 +v -90.123665 -154.916000 43.260757 1.000000 1.000000 1.000000 +# 10222 vertices, 0 vertices normals + + +usemtl material_0 +vt 0.000000 1.000000 +f 1/1/1 2/1/2 3/1/3 +f 3/1/3 59/1/59 1/1/1 +f 1/1/1 59/1/59 4/1/4 +f 4/1/4 59/1/59 57/1/57 +f 4/1/4 57/1/57 8/1/8 +f 7/1/7 4/1/4 8/1/8 +f 8/1/8 55/1/55 7/1/7 +f 55/1/55 12/1/12 7/1/7 +f 12/1/12 5/1/5 7/1/7 +f 5/1/5 2/1/2 7/1/7 +f 5/1/5 6/1/6 2/1/2 +vt 1.000000 0.799992 +vt 0.002138 1.799990 +vt 0.000000 0.799992 +f 6/2/6 37/3/37 2/4/2 +vt 0.997862 1.799990 +f 35/5/35 37/3/37 6/2/6 +f 49/1/49 35/1/35 6/1/6 +f 6/1/6 48/1/48 49/1/49 +f 48/1/48 40/1/40 49/1/49 +f 11/1/11 40/1/40 48/1/48 +f 11/1/11 42/1/42 40/1/40 +f 41/1/41 40/1/40 42/1/42 +f 41/1/41 42/1/42 22/1/22 +f 21/1/21 41/1/41 22/1/22 +f 13/1/13 21/1/21 22/1/22 +f 13/1/13 22/1/22 15/1/15 +f 15/1/15 9/1/9 13/1/13 +f 5/1/5 13/1/13 9/1/9 +f 14/1/14 9/1/9 15/1/15 +f 15/1/15 42/1/42 14/1/14 +f 14/1/14 42/1/42 10/1/10 +f 6/1/6 14/1/14 10/1/10 +f 10/1/10 11/1/11 6/1/6 +f 9/1/9 14/1/14 6/1/6 +f 18/1/18 21/1/21 13/1/13 +f 13/1/13 23/1/23 18/1/18 +f 18/1/18 23/1/23 24/1/24 +f 18/1/18 24/1/24 16/1/16 +f 16/1/16 17/1/17 18/1/18 +f 45/1/45 17/1/17 16/1/16 +f 45/1/45 16/1/16 46/1/46 +f 39/1/39 45/1/45 46/1/46 +f 39/1/39 46/1/46 43/1/43 +f 43/1/43 44/1/44 39/1/39 +f 39/1/39 44/1/44 28/1/28 +f 28/1/28 29/1/29 39/1/39 +f 29/1/29 32/1/32 39/1/39 +f 39/1/39 32/1/32 38/1/38 +f 39/1/39 38/1/38 20/1/20 +f 20/1/20 38/1/38 41/1/41 +f 32/1/32 34/1/34 38/1/38 +f 34/1/34 35/1/35 38/1/38 +f 38/1/38 35/1/35 40/1/40 +f 34/1/34 33/1/33 35/1/35 +f 35/1/35 33/1/33 36/1/36 +f 33/1/33 58/1/58 36/1/36 +f 58/1/58 59/1/59 36/1/36 +f 36/1/36 59/1/59 37/1/37 +f 60/1/60 58/1/58 33/1/33 +f 33/1/33 31/1/31 60/1/60 +f 60/1/60 31/1/31 26/1/26 +f 26/1/26 64/1/64 60/1/60 +f 60/1/60 64/1/64 63/1/63 +f 60/1/60 63/1/63 61/1/61 +f 60/1/60 61/1/61 54/1/54 +f 54/1/54 56/1/56 60/1/60 +f 54/1/54 52/1/52 56/1/56 +f 52/1/52 55/1/55 56/1/56 +f 56/1/56 55/1/55 57/1/57 +f 56/1/56 57/1/57 58/1/58 +f 51/1/51 52/1/52 54/1/54 +f 53/1/53 51/1/51 54/1/54 +f 54/1/54 62/1/62 53/1/53 +f 53/1/53 62/1/62 50/1/50 +f 50/1/50 62/1/62 16/1/16 +f 25/1/25 16/1/16 62/1/62 +f 25/1/25 62/1/62 63/1/63 +f 25/1/25 63/1/63 30/1/30 +f 25/1/25 30/1/30 26/1/26 +f 25/1/25 26/1/26 27/1/27 +f 27/1/27 26/1/26 28/1/28 +f 28/1/28 47/1/47 27/1/27 +f 47/1/47 44/1/44 27/1/27 +f 27/1/27 44/1/44 16/1/16 +f 27/1/27 16/1/16 25/1/25 +f 50/1/50 51/1/51 53/1/53 +f 50/1/50 24/1/24 51/1/51 +f 51/1/51 23/1/23 52/1/52 +f 52/1/52 23/1/23 12/1/12 +f 54/1/54 61/1/61 62/1/62 +f 63/1/63 62/1/62 61/1/61 +f 30/1/30 63/1/63 64/1/64 +f 26/1/26 30/1/30 64/1/64 +f 29/1/29 26/1/26 31/1/31 +f 32/1/32 31/1/31 33/1/33 +f 60/1/60 56/1/56 58/1/58 +f 32/1/32 33/1/33 34/1/34 +f 29/1/29 31/1/31 32/1/32 +f 28/1/28 26/1/26 29/1/29 +f 28/1/28 44/1/44 47/1/47 +f 16/1/16 44/1/44 43/1/43 +f 20/1/20 45/1/45 39/1/39 +f 20/1/20 19/1/19 45/1/45 +f 17/1/17 19/1/19 20/1/20 +f 20/1/20 21/1/21 17/1/17 +f 46/1/46 16/1/16 43/1/43 +f 19/1/19 17/1/17 45/1/45 +f 50/1/50 16/1/16 24/1/24 +f 51/1/51 24/1/24 23/1/23 +f 13/1/13 12/1/12 23/1/23 +f 18/1/18 17/1/17 21/1/21 +f 20/1/20 41/1/41 21/1/21 +f 22/1/22 42/1/42 15/1/15 +f 38/1/38 40/1/40 41/1/41 +f 10/1/10 42/1/42 11/1/11 +f 6/1/6 11/1/11 48/1/48 +f 49/1/49 40/1/40 35/1/35 +f 35/1/35 36/1/36 37/1/37 +f 9/1/9 6/1/6 5/1/5 +f 12/1/12 13/1/13 5/1/5 +f 52/1/52 12/1/12 55/1/55 +f 7/1/7 2/1/2 4/1/4 +f 8/1/8 57/1/57 55/1/55 +f 58/1/58 57/1/57 59/1/59 +f 3/1/3 37/1/37 59/1/59 +f 2/1/2 37/1/37 3/1/3 +f 4/1/4 2/1/2 1/1/1 +f 65/1/65 66/1/66 67/1/67 +f 70/1/70 65/1/65 67/1/67 +f 70/1/70 67/1/67 75/1/75 +f 70/1/70 75/1/75 434/1/434 +f 2287/1/2287 70/1/70 434/1/434 +f 2287/1/2287 434/1/434 2303/1/2303 +f 2288/1/2288 2287/1/2287 2303/1/2303 +f 2288/1/2288 2303/1/2303 2304/1/2304 +f 2300/1/2300 2288/1/2288 2304/1/2304 +f 2300/1/2300 2304/1/2304 2480/1/2480 +f 2480/1/2480 2502/1/2502 2300/1/2300 +f 2300/1/2300 2502/1/2502 2302/1/2302 +f 2300/1/2300 2302/1/2302 2299/1/2299 +f 2300/1/2300 2299/1/2299 2301/1/2301 +f 2301/1/2301 2299/1/2299 2291/1/2291 +f 2291/1/2291 2288/1/2288 2301/1/2301 +f 2291/1/2291 2286/1/2286 2288/1/2288 +f 2290/1/2290 2286/1/2286 2291/1/2291 +f 2291/1/2291 2298/1/2298 2290/1/2290 +f 2298/1/2298 2292/1/2292 2290/1/2290 +f 2290/1/2290 2292/1/2292 2289/1/2289 +f 2289/1/2289 2292/1/2292 2293/1/2293 +f 2289/1/2289 2293/1/2293 2283/1/2283 +f 2289/1/2289 2283/1/2283 2282/1/2282 +f 2282/1/2282 2281/1/2281 2289/1/2289 +f 2289/1/2289 2281/1/2281 2286/1/2286 +f 2281/1/2281 2285/1/2285 2286/1/2286 +f 2286/1/2286 2285/1/2285 2287/1/2287 +f 2281/1/2281 2284/1/2284 2285/1/2285 +f 2284/1/2284 70/1/70 2285/1/2285 +f 2284/1/2284 68/1/68 70/1/70 +f 2280/1/2280 68/1/68 2284/1/2284 +f 2263/1/2263 2280/1/2280 2284/1/2284 +f 2262/1/2262 2280/1/2280 2263/1/2263 +f 2259/1/2259 2262/1/2262 2263/1/2263 +f 2259/1/2259 2263/1/2263 2261/1/2261 +f 2261/1/2261 2258/1/2258 2259/1/2259 +f 2258/1/2258 2253/1/2253 2259/1/2259 +f 2259/1/2259 2253/1/2253 2260/1/2260 +f 2260/1/2260 2253/1/2253 2247/1/2247 +f 2260/1/2260 2247/1/2247 2264/1/2264 +f 2264/1/2264 2262/1/2262 2260/1/2260 +f 2265/1/2265 2262/1/2262 2264/1/2264 +f 2265/1/2265 2266/1/2266 2262/1/2262 +f 2266/1/2266 115/1/115 2262/1/2262 +f 2266/1/2266 114/1/114 115/1/115 +f 114/1/114 111/1/111 115/1/115 +f 115/1/115 111/1/111 110/1/110 +f 115/1/115 110/1/110 2280/1/2280 +f 111/1/111 108/1/108 110/1/110 +f 110/1/110 108/1/108 69/1/69 +f 110/1/110 69/1/69 68/1/68 +f 68/1/68 69/1/69 65/1/65 +f 69/1/69 71/1/71 65/1/65 +f 65/1/65 71/1/71 72/1/72 +f 71/1/71 97/1/97 72/1/72 +f 72/1/72 97/1/97 92/1/92 +f 72/1/72 92/1/92 66/1/66 +f 66/1/66 92/1/92 76/1/76 +f 66/1/66 76/1/76 73/1/73 +f 73/1/73 76/1/76 77/1/77 +f 73/1/73 77/1/77 74/1/74 +f 67/1/67 73/1/73 74/1/74 +f 74/1/74 77/1/77 79/1/79 +f 74/1/74 79/1/79 78/1/78 +f 75/1/75 74/1/74 78/1/78 +f 75/1/75 78/1/78 84/1/84 +f 75/1/75 84/1/84 433/1/433 +f 435/1/435 75/1/75 433/1/433 +f 435/1/435 433/1/433 2306/1/2306 +f 435/1/435 2306/1/2306 2307/1/2307 +f 2305/1/2305 435/1/435 2307/1/2307 +f 2305/1/2305 2307/1/2307 2309/1/2309 +f 2308/1/2308 2305/1/2305 2309/1/2309 +f 2308/1/2308 2309/1/2309 2479/1/2479 +f 2481/1/2481 2308/1/2308 2479/1/2479 +f 2481/1/2481 2479/1/2479 2483/1/2483 +f 2483/1/2483 2488/1/2488 2481/1/2481 +f 2481/1/2481 2488/1/2488 2499/1/2499 +f 2481/1/2481 2499/1/2499 2500/1/2500 +f 2481/1/2481 2500/1/2500 2480/1/2480 +f 2500/1/2500 2499/1/2499 2501/1/2501 +f 2500/1/2500 2501/1/2501 2502/1/2502 +f 2501/1/2501 2503/1/2503 2502/1/2502 +f 2501/1/2501 2324/1/2324 2503/1/2503 +f 2324/1/2324 2323/1/2323 2503/1/2503 +f 2503/1/2503 2323/1/2323 427/1/427 +f 427/1/427 2297/1/2297 2503/1/2503 +f 2302/1/2302 2503/1/2503 2297/1/2297 +f 2302/1/2302 2297/1/2297 2296/1/2296 +f 2296/1/2296 2297/1/2297 2295/1/2295 +f 2296/1/2296 2295/1/2295 2298/1/2298 +f 427/1/427 2295/1/2295 2297/1/2297 +f 87/1/87 2295/1/2295 427/1/427 +f 427/1/427 428/1/428 87/1/87 +f 87/1/87 428/1/428 426/1/426 +f 426/1/426 85/1/85 87/1/87 +f 87/1/87 85/1/85 83/1/83 +f 83/1/83 88/1/88 87/1/87 +f 2294/1/2294 87/1/87 88/1/88 +f 2294/1/2294 88/1/88 2255/1/2255 +f 2255/1/2255 2257/1/2257 2294/1/2294 +f 2294/1/2294 2257/1/2257 2293/1/2293 +f 2293/1/2293 2257/1/2257 2256/1/2256 +f 2256/1/2256 2257/1/2257 2254/1/2254 +f 2256/1/2256 2254/1/2254 2258/1/2258 +f 2255/1/2255 2254/1/2254 2257/1/2257 +f 2252/1/2252 2254/1/2254 2255/1/2255 +f 2255/1/2255 89/1/89 2252/1/2252 +f 2252/1/2252 89/1/89 91/1/91 +f 2252/1/2252 91/1/91 2250/1/2250 +f 2250/1/2250 2249/1/2249 2252/1/2252 +f 2249/1/2249 2251/1/2251 2252/1/2252 +f 2249/1/2249 2246/1/2246 2251/1/2251 +f 2247/1/2247 2251/1/2251 2246/1/2246 +f 2247/1/2247 2246/1/2246 2243/1/2243 +f 2247/1/2247 2243/1/2243 2248/1/2248 +f 2265/1/2265 2247/1/2247 2248/1/2248 +f 2265/1/2265 2248/1/2248 2267/1/2267 +f 2267/1/2267 2248/1/2248 2268/1/2268 +f 2268/1/2268 2266/1/2266 2267/1/2267 +f 2269/1/2269 2266/1/2266 2268/1/2268 +f 2268/1/2268 2240/1/2240 2269/1/2269 +f 2269/1/2269 2240/1/2240 2241/1/2241 +f 2269/1/2269 2241/1/2241 2271/1/2271 +f 2271/1/2271 2270/1/2270 2269/1/2269 +f 2272/1/2272 2270/1/2270 2271/1/2271 +f 2271/1/2271 2236/1/2236 2272/1/2272 +f 2272/1/2272 2236/1/2236 2273/1/2273 +f 2272/1/2272 2273/1/2273 2274/1/2274 +f 2274/1/2274 2273/1/2273 2276/1/2276 +f 2276/1/2276 128/1/128 2274/1/2274 +f 128/1/128 123/1/123 2274/1/2274 +f 2274/1/2274 123/1/123 124/1/124 +f 2274/1/2274 124/1/124 2270/1/2270 +f 2270/1/2270 124/1/124 114/1/114 +f 124/1/124 112/1/112 114/1/114 +f 124/1/124 120/1/120 112/1/112 +f 120/1/120 117/1/117 112/1/112 +f 112/1/112 117/1/117 113/1/113 +f 112/1/112 113/1/113 111/1/111 +f 117/1/117 118/1/118 113/1/113 +f 113/1/113 118/1/118 119/1/119 +f 113/1/113 119/1/119 116/1/116 +f 113/1/113 116/1/116 108/1/108 +f 108/1/108 116/1/116 387/1/387 +f 108/1/108 387/1/387 109/1/109 +f 108/1/108 109/1/109 105/1/105 +f 109/1/109 107/1/107 105/1/105 +f 105/1/105 107/1/107 104/1/104 +f 105/1/105 104/1/104 103/1/103 +f 69/1/69 105/1/105 103/1/103 +f 69/1/69 103/1/103 102/1/102 +f 103/1/103 100/1/100 102/1/102 +f 102/1/102 100/1/100 101/1/101 +f 102/1/102 101/1/101 71/1/71 +f 100/1/100 96/1/96 101/1/101 +f 101/1/101 96/1/96 97/1/97 +f 93/1/93 97/1/97 96/1/96 +f 94/1/94 93/1/93 96/1/96 +f 94/1/94 96/1/96 98/1/98 +f 95/1/95 94/1/94 98/1/98 +f 95/1/95 98/1/98 395/1/395 +f 395/1/395 397/1/397 95/1/95 +f 401/1/401 95/1/95 397/1/397 +f 396/1/396 401/1/401 397/1/397 +f 396/1/396 400/1/400 401/1/401 +f 400/1/400 2242/1/2242 401/1/401 +f 401/1/401 2242/1/2242 2245/1/2245 +f 2250/1/2250 401/1/401 2245/1/2245 +f 2246/1/2246 2250/1/2250 2245/1/2245 +f 2246/1/2246 2245/1/2245 2244/1/2244 +f 2244/1/2244 2245/1/2245 2242/1/2242 +f 2244/1/2244 2242/1/2242 2239/1/2239 +f 2244/1/2244 2239/1/2239 2243/1/2243 +f 2240/1/2240 2243/1/2243 2239/1/2239 +f 2240/1/2240 2239/1/2239 2237/1/2237 +f 2238/1/2238 2237/1/2237 2239/1/2239 +f 2239/1/2239 2232/1/2232 2238/1/2238 +f 2238/1/2238 2232/1/2232 2231/1/2231 +f 2231/1/2231 2234/1/2234 2238/1/2238 +f 2231/1/2231 2230/1/2230 2234/1/2234 +f 2233/1/2233 2234/1/2234 2230/1/2230 +f 2233/1/2233 2230/1/2230 2279/1/2279 +f 2233/1/2233 2279/1/2279 2278/1/2278 +f 2277/1/2277 2233/1/2233 2278/1/2278 +f 2277/1/2277 2278/1/2278 133/1/133 +f 2275/1/2275 2277/1/2277 133/1/133 +f 133/1/133 128/1/128 2275/1/2275 +f 132/1/132 128/1/128 133/1/133 +f 133/1/133 206/1/206 132/1/132 +f 132/1/132 206/1/206 134/1/134 +f 134/1/134 129/1/129 132/1/132 +f 136/1/136 129/1/129 134/1/134 +f 134/1/134 201/1/201 136/1/136 +f 136/1/136 201/1/201 141/1/141 +f 141/1/141 135/1/135 136/1/136 +f 140/1/140 135/1/135 141/1/141 +f 141/1/141 146/1/146 140/1/140 +f 140/1/140 146/1/146 145/1/145 +f 140/1/140 145/1/145 144/1/144 +f 144/1/144 139/1/139 140/1/140 +f 143/1/143 139/1/139 144/1/144 +f 143/1/143 142/1/142 139/1/139 +f 142/1/142 137/1/137 139/1/139 +f 139/1/139 137/1/137 135/1/135 +f 135/1/135 137/1/137 130/1/130 +f 135/1/135 130/1/130 129/1/129 +f 129/1/129 130/1/130 127/1/127 +f 129/1/129 127/1/127 128/1/128 +f 130/1/130 131/1/131 127/1/127 +f 127/1/127 131/1/131 122/1/122 +f 127/1/127 122/1/122 123/1/123 +f 123/1/123 122/1/122 120/1/120 +f 122/1/122 121/1/121 120/1/120 +f 122/1/122 125/1/125 121/1/121 +f 125/1/125 126/1/126 121/1/121 +f 121/1/121 126/1/126 422/1/422 +f 121/1/121 422/1/422 117/1/117 +f 117/1/117 422/1/422 421/1/421 +f 422/1/422 420/1/420 421/1/421 +f 421/1/421 420/1/420 382/1/382 +f 421/1/421 382/1/382 118/1/118 +f 118/1/118 382/1/382 380/1/380 +f 382/1/382 383/1/383 380/1/380 +f 380/1/380 383/1/383 384/1/384 +f 380/1/380 384/1/384 381/1/381 +f 119/1/119 380/1/380 381/1/381 +f 381/1/381 384/1/384 386/1/386 +f 381/1/381 386/1/386 385/1/385 +f 116/1/116 381/1/381 385/1/385 +f 385/1/385 386/1/386 389/1/389 +f 385/1/385 389/1/389 388/1/388 +f 387/1/387 385/1/385 388/1/388 +f 388/1/388 389/1/389 107/1/107 +f 106/1/106 107/1/107 389/1/389 +f 392/1/392 106/1/106 389/1/389 +f 392/1/392 389/1/389 391/1/391 +f 394/1/394 392/1/392 391/1/391 +f 394/1/394 391/1/391 398/1/398 +f 398/1/398 399/1/399 394/1/394 +f 394/1/394 399/1/399 396/1/396 +f 394/1/394 396/1/396 395/1/395 +f 395/1/395 393/1/393 394/1/394 +f 403/1/403 399/1/399 398/1/398 +f 398/1/398 390/1/390 403/1/403 +f 403/1/403 390/1/390 406/1/406 +f 403/1/403 406/1/406 407/1/407 +f 403/1/403 407/1/407 405/1/405 +f 405/1/405 404/1/404 403/1/403 +f 405/1/405 408/1/408 404/1/404 +f 404/1/404 408/1/408 402/1/402 +f 404/1/404 402/1/402 399/1/399 +f 399/1/399 402/1/402 400/1/400 +f 402/1/402 2232/1/2232 400/1/400 +f 402/1/402 2229/1/2229 2232/1/2232 +f 408/1/408 2229/1/2229 402/1/402 +f 408/1/408 411/1/411 2229/1/2229 +f 2230/1/2230 2229/1/2229 411/1/411 +f 2230/1/2230 411/1/411 2235/1/2235 +f 2235/1/2235 411/1/411 209/1/209 +f 2235/1/2235 209/1/209 207/1/207 +f 207/1/207 2278/1/2278 2235/1/2235 +f 207/1/207 205/1/205 2278/1/2278 +f 206/1/206 2278/1/2278 205/1/205 +f 206/1/206 205/1/205 201/1/201 +f 201/1/201 205/1/205 202/1/202 +f 201/1/201 202/1/202 146/1/146 +f 203/1/203 146/1/146 202/1/202 +f 203/1/203 202/1/202 204/1/204 +f 204/1/204 211/1/211 203/1/203 +f 203/1/203 211/1/211 210/1/210 +f 203/1/203 210/1/210 200/1/200 +f 200/1/200 199/1/199 203/1/203 +f 200/1/200 197/1/197 199/1/199 +f 149/1/149 199/1/199 197/1/197 +f 149/1/149 197/1/197 196/1/196 +f 149/1/149 196/1/196 153/1/153 +f 148/1/148 149/1/149 153/1/153 +f 148/1/148 153/1/153 150/1/150 +f 147/1/147 148/1/148 150/1/150 +f 147/1/147 150/1/150 151/1/151 +f 151/1/151 152/1/152 147/1/147 +f 147/1/147 152/1/152 142/1/142 +f 152/1/152 158/1/158 142/1/142 +f 158/1/158 379/1/379 142/1/142 +f 158/1/158 2135/1/2135 379/1/379 +f 2135/1/2135 2137/1/2137 379/1/379 +f 379/1/379 2137/1/2137 2140/1/2140 +f 379/1/379 2140/1/2140 138/1/138 +f 137/1/137 379/1/379 138/1/138 +f 138/1/138 2140/1/2140 2143/1/2143 +f 138/1/138 2143/1/2143 131/1/131 +f 131/1/131 2143/1/2143 2146/1/2146 +f 2143/1/2143 2147/1/2147 2146/1/2146 +f 2146/1/2146 2147/1/2147 2149/1/2149 +f 2146/1/2146 2149/1/2149 2148/1/2148 +f 2146/1/2146 2148/1/2148 125/1/125 +f 125/1/125 2148/1/2148 424/1/424 +f 2148/1/2148 2152/1/2152 424/1/424 +f 424/1/424 2152/1/2152 423/1/423 +f 424/1/424 423/1/423 126/1/126 +f 126/1/126 423/1/423 419/1/419 +f 423/1/423 418/1/418 419/1/419 +f 419/1/419 418/1/418 417/1/417 +f 419/1/419 417/1/417 420/1/420 +f 415/1/415 417/1/417 418/1/418 +f 414/1/414 415/1/415 418/1/418 +f 414/1/414 418/1/418 416/1/416 +f 412/1/412 414/1/414 416/1/416 +f 412/1/412 416/1/416 2153/1/2153 +f 412/1/412 2153/1/2153 2158/1/2158 +f 2158/1/2158 211/1/211 412/1/412 +f 412/1/412 211/1/211 408/1/408 +f 412/1/412 408/1/408 409/1/409 +f 211/1/211 410/1/410 408/1/408 +f 211/1/211 208/1/208 410/1/410 +f 410/1/410 208/1/208 209/1/209 +f 2158/1/2158 213/1/213 211/1/211 +f 213/1/213 212/1/212 211/1/211 +f 215/1/215 212/1/212 213/1/213 +f 2168/1/2168 215/1/215 213/1/213 +f 2169/1/2169 215/1/215 2168/1/2168 +f 2168/1/2168 2161/1/2161 2169/1/2169 +f 2169/1/2169 2161/1/2161 2166/1/2166 +f 2169/1/2169 2166/1/2166 2173/1/2173 +f 2169/1/2169 2173/1/2173 2170/1/2170 +f 2170/1/2170 214/1/214 2169/1/2169 +f 214/1/214 2170/1/2170 216/1/216 +f 195/1/195 214/1/214 216/1/216 +f 195/1/195 216/1/216 370/1/370 +f 195/1/195 370/1/370 192/1/192 +f 193/1/193 195/1/195 192/1/192 +f 193/1/193 192/1/192 191/1/191 +f 191/1/191 166/1/166 193/1/193 +f 193/1/193 166/1/166 155/1/155 +f 193/1/193 155/1/155 194/1/194 +f 194/1/194 155/1/155 196/1/196 +f 154/1/154 155/1/155 166/1/166 +f 154/1/154 166/1/166 163/1/163 +f 154/1/154 163/1/163 156/1/156 +f 151/1/151 154/1/154 156/1/156 +f 156/1/156 157/1/157 151/1/151 +f 160/1/160 157/1/157 156/1/156 +f 160/1/160 161/1/161 157/1/157 +f 161/1/161 162/1/162 157/1/157 +f 157/1/157 162/1/162 159/1/159 +f 157/1/157 159/1/159 152/1/152 +f 162/1/162 2134/1/2134 159/1/159 +f 159/1/159 2134/1/2134 2135/1/2135 +f 2134/1/2134 2136/1/2136 2135/1/2135 +f 2134/1/2134 2133/1/2133 2136/1/2136 +f 2133/1/2133 2139/1/2139 2136/1/2136 +f 2136/1/2136 2139/1/2139 2138/1/2138 +f 2136/1/2136 2138/1/2138 2137/1/2137 +f 2138/1/2138 2141/1/2141 2137/1/2137 +f 2137/1/2137 2141/1/2141 2142/1/2142 +f 2141/1/2141 2181/1/2181 2142/1/2142 +f 2142/1/2142 2181/1/2181 2225/1/2225 +f 2142/1/2142 2225/1/2225 2227/1/2227 +f 2142/1/2142 2227/1/2227 2145/1/2145 +f 2140/1/2140 2142/1/2142 2145/1/2145 +f 2140/1/2140 2145/1/2145 2144/1/2144 +f 2145/1/2145 2165/1/2165 2144/1/2144 +f 2144/1/2144 2165/1/2165 2163/1/2163 +f 2144/1/2144 2163/1/2163 2164/1/2164 +f 2143/1/2143 2144/1/2144 2164/1/2164 +f 2164/1/2164 2163/1/2163 2160/1/2160 +f 2164/1/2164 2160/1/2160 2147/1/2147 +f 2147/1/2147 2160/1/2160 2150/1/2150 +f 2160/1/2160 2156/1/2156 2150/1/2150 +f 2150/1/2150 2156/1/2156 2151/1/2151 +f 2149/1/2149 2150/1/2150 2151/1/2151 +f 2154/1/2154 2151/1/2151 2156/1/2156 +f 2155/1/2155 2154/1/2154 2156/1/2156 +f 2155/1/2155 2156/1/2156 2157/1/2157 +f 2168/1/2168 2155/1/2155 2157/1/2157 +f 2158/1/2158 2155/1/2155 2168/1/2168 +f 2157/1/2157 2156/1/2156 2159/1/2159 +f 2157/1/2157 2159/1/2159 2161/1/2161 +f 2161/1/2161 2159/1/2159 2162/1/2162 +f 2163/1/2163 2162/1/2162 2159/1/2159 +f 2158/1/2158 2154/1/2154 2155/1/2155 +f 2153/1/2153 2151/1/2151 2154/1/2154 +f 2153/1/2153 2152/1/2152 2151/1/2151 +f 425/1/425 2152/1/2152 2153/1/2153 +f 2160/1/2160 2159/1/2159 2156/1/2156 +f 2163/1/2163 2159/1/2159 2160/1/2160 +f 2165/1/2165 2162/1/2162 2163/1/2163 +f 2165/1/2165 2167/1/2167 2162/1/2162 +f 2166/1/2166 2162/1/2162 2167/1/2167 +f 2227/1/2227 2167/1/2167 2165/1/2165 +f 2227/1/2227 2228/1/2228 2167/1/2167 +f 2173/1/2173 2167/1/2167 2228/1/2228 +f 2173/1/2173 2228/1/2228 2180/1/2180 +f 2173/1/2173 2180/1/2180 2171/1/2171 +f 2171/1/2171 2180/1/2180 2176/1/2176 +f 2171/1/2171 2176/1/2176 2174/1/2174 +f 2172/1/2172 2171/1/2171 2174/1/2174 +f 2172/1/2172 2174/1/2174 2175/1/2175 +f 370/1/370 2172/1/2172 2175/1/2175 +f 370/1/370 2175/1/2175 368/1/368 +f 369/1/369 370/1/370 368/1/368 +f 369/1/369 368/1/368 189/1/189 +f 192/1/192 369/1/369 189/1/189 +f 228/1/228 189/1/189 368/1/368 +f 2224/1/2224 228/1/228 368/1/368 +f 230/1/230 228/1/228 2224/1/2224 +f 2193/1/2193 230/1/230 2224/1/2224 +f 2193/1/2193 2224/1/2224 2191/1/2191 +f 2190/1/2190 2193/1/2193 2191/1/2191 +f 2190/1/2190 2191/1/2191 2186/1/2186 +f 2190/1/2190 2186/1/2186 2187/1/2187 +f 2189/1/2189 2190/1/2190 2187/1/2187 +f 2188/1/2188 2189/1/2189 2187/1/2187 +f 2188/1/2188 2187/1/2187 2139/1/2139 +f 2139/1/2139 2187/1/2187 2185/1/2185 +f 2187/1/2187 2182/1/2182 2185/1/2185 +f 2182/1/2182 2183/1/2183 2185/1/2185 +f 2185/1/2185 2183/1/2183 2138/1/2138 +f 2138/1/2138 2183/1/2183 2179/1/2179 +f 2177/1/2177 2179/1/2179 2183/1/2183 +f 2176/1/2176 2179/1/2179 2177/1/2177 +f 2176/1/2176 2181/1/2181 2179/1/2179 +f 2182/1/2182 2177/1/2177 2183/1/2183 +f 2182/1/2182 2178/1/2178 2177/1/2177 +f 2174/1/2174 2177/1/2177 2178/1/2178 +f 2184/1/2184 2178/1/2178 2182/1/2182 +f 2186/1/2186 2184/1/2184 2182/1/2182 +f 2184/1/2184 2175/1/2175 2178/1/2178 +f 2224/1/2224 2175/1/2175 2184/1/2184 +f 2195/1/2195 2189/1/2189 2188/1/2188 +f 2133/1/2133 2195/1/2195 2188/1/2188 +f 2131/1/2131 2195/1/2195 2133/1/2133 +f 2132/1/2132 2131/1/2131 2133/1/2133 +f 2129/1/2129 2131/1/2131 2132/1/2132 +f 177/1/177 2129/1/2129 2132/1/2132 +f 177/1/177 2132/1/2132 162/1/162 +f 176/1/176 2129/1/2129 177/1/177 +f 173/1/173 176/1/176 177/1/177 +f 173/1/173 177/1/177 161/1/161 +f 169/1/169 173/1/173 161/1/161 +f 169/1/169 161/1/161 165/1/165 +f 165/1/165 168/1/168 169/1/169 +f 169/1/169 168/1/168 170/1/170 +f 170/1/170 168/1/168 171/1/171 +f 170/1/170 171/1/171 174/1/174 +f 174/1/174 175/1/175 170/1/170 +f 170/1/170 175/1/175 173/1/173 +f 178/1/178 175/1/175 174/1/174 +f 174/1/174 180/1/180 178/1/178 +f 178/1/178 180/1/180 181/1/181 +f 178/1/178 181/1/181 179/1/179 +f 179/1/179 181/1/181 182/1/182 +f 182/1/182 378/1/378 179/1/179 +f 179/1/179 378/1/378 175/1/175 +f 378/1/378 2125/1/2125 175/1/175 +f 175/1/175 2125/1/2125 176/1/176 +f 2125/1/2125 2126/1/2126 176/1/176 +f 2125/1/2125 2124/1/2124 2126/1/2126 +f 2124/1/2124 2128/1/2128 2126/1/2126 +f 2126/1/2126 2128/1/2128 2206/1/2206 +f 2126/1/2126 2206/1/2206 2130/1/2130 +f 2126/1/2126 2130/1/2130 2129/1/2129 +f 2206/1/2206 2200/1/2200 2130/1/2130 +f 2130/1/2130 2200/1/2200 2198/1/2198 +f 2130/1/2130 2198/1/2198 2131/1/2131 +f 2131/1/2131 2198/1/2198 2196/1/2196 +f 2198/1/2198 2197/1/2197 2196/1/2196 +f 2196/1/2196 2197/1/2197 2194/1/2194 +f 2196/1/2196 2194/1/2194 2195/1/2195 +f 2197/1/2197 2192/1/2192 2194/1/2194 +f 2194/1/2194 2192/1/2192 2190/1/2190 +f 2197/1/2197 2202/1/2202 2192/1/2192 +f 2202/1/2202 2222/1/2222 2192/1/2192 +f 2222/1/2222 2223/1/2223 2192/1/2192 +f 2192/1/2192 2223/1/2223 2193/1/2193 +f 2222/1/2222 2221/1/2221 2223/1/2223 +f 2221/1/2221 229/1/229 2223/1/2223 +f 2223/1/2223 229/1/229 230/1/230 +f 229/1/229 227/1/227 230/1/230 +f 232/1/232 227/1/227 229/1/229 +f 232/1/232 231/1/231 227/1/227 +f 231/1/231 223/1/223 227/1/227 +f 227/1/227 223/1/223 226/1/226 +f 227/1/227 226/1/226 228/1/228 +f 223/1/223 190/1/190 226/1/226 +f 226/1/226 190/1/190 189/1/189 +f 190/1/190 187/1/187 189/1/189 +f 187/1/187 188/1/188 189/1/189 +f 191/1/191 189/1/189 188/1/188 +f 188/1/188 167/1/167 191/1/191 +f 188/1/188 172/1/172 167/1/167 +f 168/1/168 167/1/167 172/1/172 +f 164/1/164 167/1/167 168/1/168 +f 163/1/163 167/1/167 164/1/164 +f 160/1/160 163/1/163 164/1/164 +f 160/1/160 164/1/164 165/1/165 +f 187/1/187 172/1/172 188/1/188 +f 186/1/186 172/1/172 187/1/187 +f 185/1/185 186/1/186 187/1/187 +f 185/1/185 180/1/180 186/1/186 +f 180/1/180 171/1/171 186/1/186 +f 186/1/186 171/1/171 172/1/172 +f 190/1/190 185/1/185 187/1/187 +f 218/1/218 185/1/185 190/1/190 +f 218/1/218 217/1/217 185/1/185 +f 217/1/217 184/1/184 185/1/185 +f 184/1/184 181/1/181 185/1/185 +f 184/1/184 183/1/183 181/1/181 +f 221/1/221 183/1/183 184/1/184 +f 219/1/219 221/1/221 184/1/184 +f 220/1/220 221/1/221 219/1/219 +f 220/1/220 219/1/219 217/1/217 +f 225/1/225 221/1/221 220/1/220 +f 222/1/222 225/1/225 220/1/220 +f 222/1/222 220/1/220 223/1/223 +f 223/1/223 220/1/220 218/1/218 +f 224/1/224 225/1/225 222/1/222 +f 234/1/234 224/1/224 222/1/222 +f 234/1/234 222/1/222 231/1/231 +f 233/1/233 234/1/234 231/1/231 +f 233/1/233 231/1/231 235/1/235 +f 2218/1/2218 233/1/233 235/1/235 +f 2218/1/2218 235/1/235 2219/1/2219 +f 2211/1/2211 2218/1/2218 2219/1/2219 +f 2211/1/2211 2219/1/2219 2209/1/2209 +f 2208/1/2208 2211/1/2211 2209/1/2209 +f 2208/1/2208 2209/1/2209 2203/1/2203 +f 2205/1/2205 2208/1/2208 2203/1/2203 +f 2205/1/2205 2203/1/2203 2200/1/2200 +f 2200/1/2200 2203/1/2203 2199/1/2199 +f 2203/1/2203 2204/1/2204 2199/1/2199 +f 2199/1/2199 2204/1/2204 2201/1/2201 +f 2199/1/2199 2201/1/2201 2197/1/2197 +f 2204/1/2204 2222/1/2222 2201/1/2201 +f 2207/1/2207 2208/1/2208 2205/1/2205 +f 2206/1/2206 2207/1/2207 2205/1/2205 +f 2207/1/2207 2212/1/2212 2208/1/2208 +f 2212/1/2212 2210/1/2210 2208/1/2208 +f 2214/1/2214 2210/1/2210 2212/1/2212 +f 2213/1/2213 2214/1/2214 2212/1/2212 +f 2215/1/2215 2214/1/2214 2213/1/2213 +f 2128/1/2128 2215/1/2215 2213/1/2213 +f 2128/1/2128 2213/1/2213 2207/1/2207 +f 2127/1/2127 2215/1/2215 2128/1/2128 +f 2127/1/2127 2217/1/2217 2215/1/2215 +f 2217/1/2217 358/1/358 2215/1/2215 +f 2217/1/2217 354/1/354 358/1/358 +f 354/1/354 357/1/357 358/1/358 +f 358/1/358 357/1/357 2216/1/2216 +f 358/1/358 2216/1/2216 2214/1/2214 +f 357/1/357 239/1/239 2216/1/2216 +f 2216/1/2216 239/1/239 240/1/240 +f 2216/1/2216 240/1/240 2210/1/2210 +f 2210/1/2210 240/1/240 2218/1/2218 +f 239/1/239 233/1/233 240/1/240 +f 239/1/239 236/1/236 233/1/233 +f 241/1/241 236/1/236 239/1/239 +f 241/1/241 238/1/238 236/1/236 +f 238/1/238 234/1/234 236/1/236 +f 238/1/238 237/1/237 234/1/234 +f 244/1/244 237/1/237 238/1/238 +f 243/1/243 244/1/244 238/1/238 +f 243/1/243 238/1/238 242/1/242 +f 247/1/247 243/1/243 242/1/242 +f 247/1/247 242/1/242 353/1/353 +f 247/1/247 353/1/353 354/1/354 +f 351/1/351 247/1/247 354/1/354 +f 355/1/355 351/1/351 354/1/354 +f 352/1/352 351/1/351 355/1/355 +f 2123/1/2123 352/1/352 355/1/355 +f 2123/1/2123 355/1/355 2217/1/2217 +f 356/1/356 352/1/352 2123/1/2123 +f 2122/1/2122 356/1/356 2123/1/2123 +f 2122/1/2122 2123/1/2123 2124/1/2124 +f 2121/1/2121 2122/1/2122 2124/1/2124 +f 2117/1/2117 2122/1/2122 2121/1/2121 +f 2120/1/2120 2117/1/2117 2121/1/2121 +f 2120/1/2120 2121/1/2121 378/1/378 +f 372/1/372 2120/1/2120 378/1/378 +f 372/1/372 378/1/378 371/1/371 +f 371/1/371 183/1/183 372/1/372 +f 372/1/372 183/1/183 373/1/373 +f 372/1/372 373/1/373 2350/1/2350 +f 2350/1/2350 373/1/373 375/1/375 +f 2350/1/2350 375/1/375 2349/1/2349 +f 2349/1/2349 2120/1/2120 2350/1/2350 +f 2119/1/2119 2120/1/2120 2349/1/2349 +f 2119/1/2119 2115/1/2115 2120/1/2120 +f 2118/1/2118 2115/1/2115 2119/1/2119 +f 2119/1/2119 2351/1/2351 2118/1/2118 +f 2118/1/2118 2351/1/2351 2352/1/2352 +f 2118/1/2118 2352/1/2352 2353/1/2353 +f 2353/1/2353 2113/1/2113 2118/1/2118 +f 2357/1/2357 2113/1/2113 2353/1/2353 +f 2353/1/2353 2354/1/2354 2357/1/2357 +f 2357/1/2357 2354/1/2354 2109/1/2109 +f 2357/1/2357 2109/1/2109 2108/1/2108 +f 2108/1/2108 2109/1/2109 2106/1/2106 +f 2108/1/2108 2106/1/2106 2110/1/2110 +f 2110/1/2110 2111/1/2111 2108/1/2108 +f 2108/1/2108 2111/1/2111 2113/1/2113 +f 2111/1/2111 2112/1/2112 2113/1/2113 +f 2113/1/2113 2112/1/2112 2114/1/2114 +f 2113/1/2113 2114/1/2114 2115/1/2115 +f 2115/1/2115 2114/1/2114 2117/1/2117 +f 2114/1/2114 2116/1/2116 2117/1/2117 +f 2114/1/2114 330/1/330 2116/1/2116 +f 330/1/330 336/1/336 2116/1/2116 +f 2116/1/2116 336/1/336 356/1/356 +f 336/1/336 347/1/347 356/1/356 +f 356/1/356 347/1/347 350/1/350 +f 347/1/347 348/1/348 350/1/350 +f 350/1/350 348/1/348 349/1/349 +f 350/1/350 349/1/349 352/1/352 +f 348/1/348 245/1/245 349/1/349 +f 349/1/349 245/1/245 247/1/247 +f 348/1/348 346/1/346 245/1/245 +f 346/1/346 246/1/246 245/1/245 +f 245/1/245 246/1/246 243/1/243 +f 346/1/346 250/1/250 246/1/246 +f 250/1/250 248/1/248 246/1/246 +f 246/1/246 248/1/248 244/1/244 +f 248/1/248 249/1/249 244/1/244 +f 251/1/251 249/1/249 248/1/248 +f 251/1/251 252/1/252 249/1/249 +f 252/1/252 253/1/253 249/1/249 +f 249/1/249 253/1/253 254/1/254 +f 249/1/249 254/1/254 237/1/237 +f 237/1/237 254/1/254 224/1/224 +f 254/1/254 256/1/256 224/1/224 +f 254/1/254 255/1/255 256/1/256 +f 255/1/255 2361/1/2361 256/1/256 +f 256/1/256 2361/1/2361 377/1/377 +f 256/1/256 377/1/377 225/1/225 +f 225/1/225 377/1/377 376/1/376 +f 377/1/377 2356/1/2356 376/1/376 +f 2356/1/2356 375/1/375 376/1/376 +f 376/1/376 375/1/375 374/1/374 +f 376/1/376 374/1/374 221/1/221 +f 2356/1/2356 2351/1/2351 375/1/375 +f 2361/1/2361 2356/1/2356 377/1/377 +f 2361/1/2361 2355/1/2355 2356/1/2356 +f 2355/1/2355 2352/1/2352 2356/1/2356 +f 2355/1/2355 2354/1/2354 2352/1/2352 +f 2358/1/2358 2354/1/2354 2355/1/2355 +f 2360/1/2360 2358/1/2358 2355/1/2355 +f 255/1/255 2358/1/2358 2360/1/2360 +f 2359/1/2359 2358/1/2358 255/1/255 +f 253/1/253 2359/1/2359 255/1/255 +f 257/1/257 2359/1/2359 253/1/253 +f 257/1/257 2100/1/2100 2359/1/2359 +f 2100/1/2100 2102/1/2102 2359/1/2359 +f 2100/1/2100 2099/1/2099 2102/1/2102 +f 2099/1/2099 2101/1/2101 2102/1/2102 +f 2101/1/2101 2106/1/2106 2102/1/2102 +f 2101/1/2101 2103/1/2103 2106/1/2106 +f 2105/1/2105 2106/1/2106 2103/1/2103 +f 2105/1/2105 2103/1/2103 2107/1/2107 +f 2107/1/2107 2111/1/2111 2105/1/2105 +f 2107/1/2107 2074/1/2074 2111/1/2111 +f 2074/1/2074 2075/1/2075 2111/1/2111 +f 2074/1/2074 2073/1/2073 2075/1/2075 +f 2073/1/2073 325/1/325 2075/1/2075 +f 2075/1/2075 325/1/325 326/1/326 +f 2075/1/2075 326/1/326 2112/1/2112 +f 2112/1/2112 326/1/326 330/1/330 +f 326/1/326 329/1/329 330/1/330 +f 330/1/330 329/1/329 335/1/335 +f 329/1/329 334/1/334 335/1/335 +f 335/1/335 334/1/334 337/1/337 +f 335/1/335 337/1/337 336/1/336 +f 334/1/334 339/1/339 337/1/337 +f 337/1/337 339/1/339 342/1/342 +f 337/1/337 342/1/342 347/1/347 +f 347/1/347 342/1/342 345/1/345 +f 342/1/342 343/1/343 345/1/345 +f 343/1/343 346/1/346 345/1/345 +f 339/1/339 343/1/343 342/1/342 +f 339/1/339 341/1/341 343/1/343 +f 341/1/341 344/1/344 343/1/343 +f 343/1/343 344/1/344 250/1/250 +f 344/1/344 251/1/251 250/1/250 +f 260/1/260 251/1/251 344/1/344 +f 260/1/260 258/1/258 251/1/251 +f 261/1/261 258/1/258 260/1/260 +f 266/1/266 261/1/261 260/1/260 +f 266/1/266 260/1/260 341/1/341 +f 338/1/338 266/1/266 341/1/341 +f 265/1/265 266/1/266 338/1/338 +f 340/1/340 265/1/265 338/1/338 +f 333/1/333 340/1/340 338/1/338 +f 333/1/333 338/1/338 334/1/334 +f 332/1/332 340/1/340 333/1/333 +f 329/1/329 332/1/332 333/1/333 +f 328/1/328 332/1/332 329/1/329 +f 328/1/328 331/1/331 332/1/332 +f 331/1/331 271/1/271 332/1/332 +f 331/1/331 270/1/270 271/1/271 +f 270/1/270 267/1/267 271/1/271 +f 271/1/271 267/1/267 265/1/265 +f 267/1/267 264/1/264 265/1/265 +f 265/1/265 264/1/264 261/1/261 +f 264/1/264 259/1/259 261/1/261 +f 262/1/262 259/1/259 264/1/264 +f 262/1/262 263/1/263 259/1/259 +f 263/1/263 276/1/276 259/1/259 +f 259/1/259 276/1/276 252/1/252 +f 259/1/259 252/1/252 258/1/258 +f 276/1/276 257/1/257 252/1/252 +f 276/1/276 367/1/367 257/1/257 +f 367/1/367 2096/1/2096 257/1/257 +f 367/1/367 2095/1/2095 2096/1/2096 +f 2095/1/2095 2094/1/2094 2096/1/2096 +f 2096/1/2096 2094/1/2094 2097/1/2097 +f 2096/1/2096 2097/1/2097 2099/1/2099 +f 2097/1/2097 2098/1/2098 2099/1/2099 +f 2097/1/2097 2082/1/2082 2098/1/2098 +f 2098/1/2098 2082/1/2082 2103/1/2103 +f 2104/1/2104 2103/1/2103 2082/1/2082 +f 2104/1/2104 2082/1/2082 2081/1/2081 +f 2081/1/2081 2074/1/2074 2104/1/2104 +f 2077/1/2077 2074/1/2074 2081/1/2081 +f 2077/1/2077 2072/1/2072 2074/1/2074 +f 2076/1/2076 2072/1/2072 2077/1/2077 +f 2077/1/2077 2078/1/2078 2076/1/2076 +f 2076/1/2076 2078/1/2078 2079/1/2079 +f 2076/1/2076 2079/1/2079 2080/1/2080 +f 2080/1/2080 2070/1/2070 2076/1/2076 +f 2086/1/2086 2070/1/2070 2080/1/2080 +f 2080/1/2080 2084/1/2084 2086/1/2086 +f 2086/1/2086 2084/1/2084 2087/1/2087 +f 2086/1/2086 2087/1/2087 2366/1/2366 +f 2366/1/2366 2087/1/2087 2363/1/2363 +f 2366/1/2366 2363/1/2363 2365/1/2365 +f 2365/1/2365 489/1/489 2366/1/2366 +f 2366/1/2366 489/1/489 2070/1/2070 +f 489/1/489 492/1/492 2070/1/2070 +f 2070/1/2070 492/1/492 2071/1/2071 +f 2070/1/2070 2071/1/2071 2072/1/2072 +f 2072/1/2072 2071/1/2071 2073/1/2073 +f 2071/1/2071 324/1/324 2073/1/2073 +f 2071/1/2071 323/1/323 324/1/324 +f 323/1/323 295/1/295 324/1/324 +f 324/1/324 295/1/295 290/1/290 +f 324/1/324 290/1/290 325/1/325 +f 325/1/325 290/1/290 291/1/291 +f 290/1/290 288/1/288 291/1/291 +f 291/1/291 288/1/288 289/1/289 +f 291/1/291 289/1/289 327/1/327 +f 291/1/291 327/1/327 328/1/328 +f 326/1/326 291/1/291 328/1/328 +f 289/1/289 273/1/273 327/1/327 +f 327/1/327 273/1/273 270/1/270 +f 273/1/273 268/1/268 270/1/270 +f 273/1/273 272/1/272 268/1/268 +f 272/1/272 269/1/269 268/1/268 +f 268/1/268 269/1/269 262/1/262 +f 268/1/268 262/1/262 267/1/267 +f 272/1/272 274/1/274 269/1/269 +f 274/1/274 275/1/275 269/1/269 +f 269/1/269 275/1/275 263/1/263 +f 277/1/277 275/1/275 274/1/274 +f 280/1/280 277/1/277 274/1/274 +f 282/1/282 277/1/277 280/1/280 +f 281/1/281 282/1/282 280/1/280 +f 281/1/281 280/1/280 283/1/283 +f 288/1/288 281/1/281 283/1/283 +f 287/1/287 281/1/281 288/1/288 +f 287/1/287 286/1/286 281/1/281 +f 292/1/292 286/1/286 287/1/287 +f 290/1/290 292/1/292 287/1/287 +f 292/1/292 293/1/293 286/1/286 +f 293/1/293 285/1/285 286/1/286 +f 286/1/286 285/1/285 282/1/282 +f 285/1/285 284/1/284 282/1/282 +f 285/1/285 302/1/302 284/1/284 +f 302/1/302 305/1/305 284/1/284 +f 284/1/284 305/1/305 278/1/278 +f 284/1/284 278/1/278 277/1/277 +f 305/1/305 362/1/362 278/1/278 +f 278/1/278 362/1/362 279/1/279 +f 278/1/278 279/1/279 275/1/275 +f 275/1/275 279/1/279 276/1/276 +f 362/1/362 366/1/366 279/1/279 +f 279/1/279 366/1/366 367/1/367 +f 362/1/362 365/1/365 366/1/366 +f 365/1/365 2093/1/2093 366/1/366 +f 366/1/366 2093/1/2093 2095/1/2095 +f 2093/1/2093 2090/1/2090 2095/1/2095 +f 2093/1/2093 2089/1/2089 2090/1/2090 +f 2089/1/2089 2085/1/2085 2090/1/2090 +f 2090/1/2090 2085/1/2085 2083/1/2083 +f 2090/1/2090 2083/1/2083 2094/1/2094 +f 2085/1/2085 2079/1/2079 2083/1/2083 +f 2085/1/2085 2084/1/2084 2079/1/2079 +f 2088/1/2088 2084/1/2084 2085/1/2085 +f 2089/1/2089 2088/1/2088 2085/1/2085 +f 2093/1/2093 2088/1/2088 2089/1/2089 +f 2091/1/2091 2088/1/2088 2093/1/2093 +f 2091/1/2091 2092/1/2092 2088/1/2088 +f 2088/1/2088 2092/1/2092 2087/1/2087 +f 477/1/477 2092/1/2092 2091/1/2091 +f 364/1/364 477/1/477 2091/1/2091 +f 364/1/364 2091/1/2091 365/1/365 +f 361/1/361 364/1/364 365/1/365 +f 2055/1/2055 364/1/364 361/1/361 +f 363/1/363 2055/1/2055 361/1/361 +f 363/1/363 361/1/361 360/1/360 +f 308/1/308 363/1/363 360/1/360 +f 308/1/308 360/1/360 306/1/306 +f 307/1/307 308/1/308 306/1/306 +f 307/1/307 306/1/306 301/1/301 +f 300/1/300 307/1/307 301/1/301 +f 300/1/300 301/1/301 298/1/298 +f 299/1/299 300/1/300 298/1/298 +f 299/1/299 298/1/298 296/1/296 +f 295/1/295 299/1/299 296/1/296 +f 295/1/295 296/1/296 292/1/292 +f 296/1/296 294/1/294 292/1/292 +f 321/1/321 299/1/299 295/1/295 +f 321/1/321 322/1/322 299/1/299 +f 321/1/321 320/1/320 322/1/322 +f 320/1/320 313/1/313 322/1/322 +f 322/1/322 313/1/313 300/1/300 +f 313/1/313 309/1/309 300/1/300 +f 312/1/312 309/1/309 313/1/313 +f 312/1/312 311/1/311 309/1/309 +f 311/1/311 310/1/310 309/1/309 +f 309/1/309 310/1/310 308/1/308 +f 311/1/311 314/1/314 310/1/310 +f 314/1/314 363/1/363 310/1/310 +f 314/1/314 2056/1/2056 363/1/363 +f 2057/1/2057 2056/1/2056 314/1/314 +f 315/1/315 2057/1/2057 314/1/314 +f 2068/1/2068 2057/1/2057 315/1/315 +f 2067/1/2067 2068/1/2068 315/1/315 +f 2067/1/2067 315/1/315 316/1/316 +f 317/1/317 2067/1/2067 316/1/316 +f 317/1/317 316/1/316 318/1/318 +f 319/1/319 317/1/317 318/1/318 +f 319/1/319 318/1/318 320/1/320 +f 318/1/318 312/1/312 320/1/320 +f 2066/1/2066 317/1/317 319/1/319 +f 359/1/359 2066/1/2066 319/1/319 +f 359/1/359 319/1/319 321/1/321 +f 359/1/359 321/1/321 323/1/323 +f 492/1/492 359/1/359 323/1/323 +f 490/1/490 359/1/359 492/1/492 +f 490/1/490 2069/1/2069 359/1/359 +f 491/1/491 2069/1/2069 490/1/490 +f 487/1/487 491/1/491 490/1/490 +f 487/1/487 490/1/490 489/1/489 +f 488/1/488 487/1/487 489/1/489 +f 488/1/488 489/1/489 2364/1/2364 +f 2364/1/2364 479/1/479 488/1/488 +f 488/1/488 479/1/479 480/1/480 +f 480/1/480 479/1/479 474/1/474 +f 480/1/480 474/1/474 485/1/485 +f 485/1/485 487/1/487 480/1/480 +f 481/1/481 487/1/487 485/1/485 +f 481/1/481 486/1/486 487/1/487 +f 482/1/482 486/1/486 481/1/481 +f 481/1/481 473/1/473 482/1/482 +f 482/1/482 473/1/473 472/1/472 +f 482/1/482 472/1/472 484/1/484 +f 484/1/484 495/1/495 482/1/482 +f 499/1/499 495/1/495 484/1/484 +f 484/1/484 483/1/483 499/1/499 +f 499/1/499 483/1/483 500/1/500 +f 499/1/499 500/1/500 497/1/497 +f 497/1/497 500/1/500 501/1/501 +f 497/1/497 501/1/501 502/1/502 +f 502/1/502 498/1/498 497/1/497 +f 497/1/497 498/1/498 495/1/495 +f 498/1/498 496/1/496 495/1/495 +f 495/1/495 496/1/496 493/1/493 +f 495/1/495 493/1/493 486/1/486 +f 486/1/486 493/1/493 491/1/491 +f 493/1/493 494/1/494 491/1/491 +f 493/1/493 2029/1/2029 494/1/494 +f 2029/1/2029 2031/1/2031 494/1/494 +f 494/1/494 2031/1/2031 2035/1/2035 +f 494/1/494 2035/1/2035 2069/1/2069 +f 2069/1/2069 2035/1/2035 2066/1/2066 +f 2035/1/2035 2063/1/2063 2066/1/2066 +f 2066/1/2066 2063/1/2063 2065/1/2065 +f 2063/1/2063 2064/1/2064 2065/1/2065 +f 2065/1/2065 2064/1/2064 2067/1/2067 +f 2064/1/2064 2059/1/2059 2067/1/2067 +f 2061/1/2061 2059/1/2059 2064/1/2064 +f 2061/1/2061 2053/1/2053 2059/1/2059 +f 2053/1/2053 2052/1/2052 2059/1/2059 +f 2059/1/2059 2052/1/2052 2058/1/2058 +f 2059/1/2059 2058/1/2058 2068/1/2068 +f 2052/1/2052 2054/1/2054 2058/1/2058 +f 2058/1/2058 2054/1/2054 2057/1/2057 +f 2052/1/2052 2051/1/2051 2054/1/2054 +f 2051/1/2051 550/1/550 2054/1/2054 +f 2054/1/2054 550/1/550 2055/1/2055 +f 2054/1/2054 2055/1/2055 2056/1/2056 +f 550/1/550 478/1/478 2055/1/2055 +f 550/1/550 463/1/463 478/1/478 +f 463/1/463 465/1/465 478/1/478 +f 478/1/478 465/1/465 470/1/470 +f 478/1/478 470/1/470 364/1/364 +f 465/1/465 469/1/469 470/1/470 +f 470/1/470 469/1/469 471/1/471 +f 470/1/470 471/1/471 475/1/475 +f 470/1/470 475/1/475 477/1/477 +f 471/1/471 476/1/476 475/1/475 +f 475/1/475 476/1/476 2362/1/2362 +f 475/1/475 2362/1/2362 2092/1/2092 +f 2362/1/2362 2363/1/2363 2092/1/2092 +f 2362/1/2362 479/1/479 2363/1/2363 +f 476/1/476 479/1/479 2362/1/2362 +f 471/1/471 474/1/474 476/1/476 +f 468/1/468 474/1/474 471/1/471 +f 468/1/468 473/1/473 474/1/474 +f 469/1/469 468/1/468 471/1/471 +f 464/1/464 468/1/468 469/1/469 +f 464/1/464 467/1/467 468/1/468 +f 467/1/467 472/1/472 468/1/468 +f 467/1/467 483/1/483 472/1/472 +f 461/1/461 483/1/483 467/1/467 +f 466/1/466 461/1/461 467/1/467 +f 462/1/462 461/1/461 466/1/466 +f 462/1/462 466/1/466 464/1/464 +f 462/1/462 464/1/464 465/1/465 +f 457/1/457 461/1/461 462/1/462 +f 458/1/458 457/1/457 462/1/462 +f 458/1/458 462/1/462 463/1/463 +f 549/1/549 458/1/458 463/1/463 +f 453/1/453 458/1/458 549/1/549 +f 552/1/552 453/1/453 549/1/549 +f 552/1/552 549/1/549 2049/1/2049 +f 2045/1/2045 552/1/552 2049/1/2049 +f 2045/1/2045 2049/1/2049 2050/1/2050 +f 2044/1/2044 2045/1/2045 2050/1/2050 +f 2044/1/2044 2050/1/2050 2053/1/2053 +f 2060/1/2060 2044/1/2044 2053/1/2053 +f 2043/1/2043 2044/1/2044 2060/1/2060 +f 2034/1/2034 2043/1/2043 2060/1/2060 +f 2034/1/2034 2060/1/2060 2062/1/2062 +f 2035/1/2035 2034/1/2034 2062/1/2062 +f 2062/1/2062 2060/1/2060 2061/1/2061 +f 2062/1/2062 2061/1/2061 2063/1/2063 +f 2034/1/2034 2038/1/2038 2043/1/2043 +f 2038/1/2038 2042/1/2042 2043/1/2043 +f 2037/1/2037 2042/1/2042 2038/1/2038 +f 2033/1/2033 2037/1/2037 2038/1/2038 +f 2036/1/2036 2037/1/2037 2033/1/2033 +f 2032/1/2032 2036/1/2036 2033/1/2033 +f 2032/1/2032 2033/1/2033 2031/1/2031 +f 2031/1/2031 2033/1/2033 2034/1/2034 +f 2028/1/2028 2036/1/2036 2032/1/2032 +f 2029/1/2029 2028/1/2028 2032/1/2032 +f 2026/1/2026 2028/1/2028 2029/1/2029 +f 496/1/496 2026/1/2026 2029/1/2029 +f 515/1/515 2026/1/2026 496/1/496 +f 515/1/515 2025/1/2025 2026/1/2026 +f 2025/1/2025 2027/1/2027 2026/1/2026 +f 2026/1/2026 2027/1/2027 2030/1/2030 +f 2027/1/2027 2417/1/2417 2030/1/2030 +f 2030/1/2030 2417/1/2417 2418/1/2418 +f 2030/1/2030 2418/1/2418 2419/1/2419 +f 2030/1/2030 2419/1/2419 2028/1/2028 +f 2028/1/2028 2419/1/2419 2039/1/2039 +f 2419/1/2419 2372/1/2372 2039/1/2039 +f 2039/1/2039 2372/1/2372 2040/1/2040 +f 2039/1/2039 2040/1/2040 2036/1/2036 +f 2372/1/2372 2368/1/2368 2040/1/2040 +f 2368/1/2368 2047/1/2047 2040/1/2040 +f 2040/1/2040 2047/1/2047 2041/1/2041 +f 2040/1/2040 2041/1/2041 2037/1/2037 +f 2047/1/2047 2048/1/2048 2041/1/2041 +f 2041/1/2041 2048/1/2048 2046/1/2046 +f 2041/1/2041 2046/1/2046 2042/1/2042 +f 2042/1/2042 2046/1/2046 2045/1/2045 +f 2048/1/2048 552/1/552 2046/1/2046 +f 2048/1/2048 551/1/551 552/1/552 +f 2367/1/2367 551/1/551 2048/1/2048 +f 2367/1/2367 455/1/455 551/1/551 +f 455/1/455 453/1/453 551/1/551 +f 455/1/455 451/1/451 453/1/453 +f 451/1/451 452/1/452 453/1/453 +f 451/1/451 447/1/447 452/1/452 +f 447/1/447 450/1/450 452/1/452 +f 452/1/452 450/1/450 456/1/456 +f 452/1/452 456/1/456 457/1/457 +f 456/1/456 460/1/460 457/1/457 +f 456/1/456 459/1/459 460/1/460 +f 459/1/459 505/1/505 460/1/460 +f 505/1/505 501/1/501 460/1/460 +f 505/1/505 504/1/504 501/1/501 +f 503/1/503 501/1/501 504/1/504 +f 503/1/503 504/1/504 507/1/507 +f 507/1/507 498/1/498 503/1/503 +f 507/1/507 510/1/510 498/1/498 +f 510/1/510 515/1/515 498/1/498 +f 510/1/510 514/1/514 515/1/515 +f 513/1/513 514/1/514 510/1/510 +f 512/1/512 513/1/513 510/1/510 +f 512/1/512 510/1/510 511/1/511 +f 511/1/511 509/1/509 512/1/512 +f 512/1/512 509/1/509 516/1/516 +f 512/1/512 516/1/516 517/1/517 +f 517/1/517 516/1/516 520/1/520 +f 517/1/517 520/1/520 521/1/521 +f 521/1/521 518/1/518 517/1/517 +f 517/1/517 518/1/518 513/1/513 +f 518/1/518 519/1/519 513/1/513 +f 518/1/518 2016/1/2016 519/1/519 +f 2016/1/2016 2018/1/2018 519/1/519 +f 519/1/519 2018/1/2018 2022/1/2022 +f 519/1/519 2022/1/2022 514/1/514 +f 514/1/514 2022/1/2022 2025/1/2025 +f 2022/1/2022 2024/1/2024 2025/1/2025 +f 2022/1/2022 2023/1/2023 2024/1/2024 +f 2023/1/2023 2391/1/2391 2024/1/2024 +f 2024/1/2024 2391/1/2391 2386/1/2386 +f 2024/1/2024 2386/1/2386 2388/1/2388 +f 2024/1/2024 2388/1/2388 2027/1/2027 +f 2027/1/2027 2388/1/2388 2416/1/2416 +f 2388/1/2388 2385/1/2385 2416/1/2416 +f 2416/1/2416 2385/1/2385 2382/1/2382 +f 2416/1/2416 2382/1/2382 2417/1/2417 +f 2417/1/2417 2382/1/2382 2375/1/2375 +f 2382/1/2382 2374/1/2374 2375/1/2375 +f 2375/1/2375 2374/1/2374 2371/1/2371 +f 2375/1/2375 2371/1/2371 2370/1/2370 +f 2418/1/2418 2375/1/2375 2370/1/2370 +f 2370/1/2370 2371/1/2371 2368/1/2368 +f 2371/1/2371 2369/1/2369 2368/1/2368 +f 2368/1/2368 2369/1/2369 2367/1/2367 +f 2371/1/2371 2373/1/2373 2369/1/2369 +f 2373/1/2373 455/1/455 2369/1/2369 +f 2373/1/2373 454/1/454 455/1/455 +f 2376/1/2376 454/1/454 2373/1/2373 +f 2374/1/2374 2376/1/2376 2373/1/2373 +f 2378/1/2378 2376/1/2376 2374/1/2374 +f 2378/1/2378 2379/1/2379 2376/1/2376 +f 2379/1/2379 2377/1/2377 2376/1/2376 +f 2380/1/2380 2377/1/2377 2379/1/2379 +f 2381/1/2381 2380/1/2380 2379/1/2379 +f 2384/1/2384 2380/1/2380 2381/1/2381 +f 2383/1/2383 2384/1/2384 2381/1/2381 +f 2383/1/2383 2381/1/2381 2385/1/2385 +f 2387/1/2387 2384/1/2384 2383/1/2383 +f 2386/1/2386 2387/1/2387 2383/1/2383 +f 2387/1/2387 2389/1/2389 2384/1/2384 +f 2389/1/2389 2390/1/2390 2384/1/2384 +f 2389/1/2389 2415/1/2415 2390/1/2390 +f 2415/1/2415 555/1/555 2390/1/2390 +f 2390/1/2390 555/1/555 556/1/556 +f 2390/1/2390 556/1/556 2380/1/2380 +f 555/1/555 448/1/448 556/1/556 +f 556/1/556 448/1/448 449/1/449 +f 556/1/556 449/1/449 2377/1/2377 +f 2377/1/2377 449/1/449 451/1/451 +f 2377/1/2377 451/1/451 454/1/454 +f 448/1/448 445/1/445 449/1/449 +f 449/1/449 445/1/445 447/1/447 +f 445/1/445 446/1/446 447/1/447 +f 445/1/445 442/1/442 446/1/446 +f 442/1/442 528/1/528 446/1/446 +f 446/1/446 528/1/528 547/1/547 +f 446/1/446 547/1/547 450/1/450 +f 450/1/450 547/1/547 548/1/548 +f 450/1/450 548/1/548 459/1/459 +f 548/1/548 506/1/506 459/1/459 +f 548/1/548 509/1/509 506/1/506 +f 506/1/506 509/1/509 504/1/504 +f 508/1/508 504/1/504 509/1/509 +f 522/1/522 509/1/509 548/1/548 +f 547/1/547 522/1/522 548/1/548 +f 528/1/528 522/1/522 547/1/547 +f 528/1/528 524/1/524 522/1/522 +f 524/1/524 520/1/520 522/1/522 +f 524/1/524 523/1/523 520/1/520 +f 441/1/441 523/1/523 524/1/524 +f 527/1/527 441/1/441 524/1/524 +f 442/1/442 441/1/441 527/1/527 +f 438/1/438 441/1/441 442/1/442 +f 444/1/444 438/1/438 442/1/442 +f 443/1/443 438/1/438 444/1/444 +f 553/1/553 443/1/443 444/1/444 +f 553/1/553 444/1/444 448/1/448 +f 554/1/554 553/1/553 448/1/448 +f 1479/1/1479 553/1/553 554/1/554 +f 2413/1/2413 1479/1/1479 554/1/554 +f 2413/1/2413 554/1/554 2414/1/2414 +f 2400/1/2400 2413/1/2413 2414/1/2414 +f 2400/1/2400 2414/1/2414 2395/1/2395 +f 2396/1/2396 2400/1/2400 2395/1/2395 +f 2396/1/2396 2395/1/2395 2393/1/2393 +f 2394/1/2394 2396/1/2396 2393/1/2393 +f 2394/1/2394 2393/1/2393 2391/1/2391 +f 2391/1/2391 2393/1/2393 2392/1/2392 +f 2391/1/2391 2392/1/2392 2387/1/2387 +f 2397/1/2397 2396/1/2396 2394/1/2394 +f 2023/1/2023 2397/1/2397 2394/1/2394 +f 2020/1/2020 2397/1/2397 2023/1/2023 +f 2018/1/2018 2020/1/2020 2023/1/2023 +f 2017/1/2017 2020/1/2020 2018/1/2018 +f 2017/1/2017 2019/1/2019 2020/1/2020 +f 2019/1/2019 2404/1/2404 2020/1/2020 +f 2020/1/2020 2404/1/2404 2398/1/2398 +f 2404/1/2404 2401/1/2401 2398/1/2398 +f 2398/1/2398 2401/1/2401 2399/1/2399 +f 2398/1/2398 2399/1/2399 2397/1/2397 +f 2401/1/2401 2402/1/2402 2399/1/2399 +f 2402/1/2402 2403/1/2403 2399/1/2399 +f 2399/1/2399 2403/1/2403 2400/1/2400 +f 2402/1/2402 2412/1/2412 2403/1/2403 +f 2403/1/2403 2412/1/2412 2413/1/2413 +f 2402/1/2402 2411/1/2411 2412/1/2412 +f 2411/1/2411 561/1/561 2412/1/2412 +f 2412/1/2412 561/1/561 1479/1/1479 +f 628/1/628 561/1/561 2411/1/2411 +f 2408/1/2408 628/1/628 2411/1/2411 +f 627/1/627 628/1/628 2408/1/2408 +f 2407/1/2407 627/1/627 2408/1/2408 +f 2407/1/2407 2408/1/2408 2405/1/2405 +f 2406/1/2406 2407/1/2407 2405/1/2405 +f 2406/1/2406 2405/1/2405 2404/1/2404 +f 2409/1/2409 2407/1/2407 2406/1/2406 +f 2019/1/2019 2409/1/2409 2406/1/2406 +f 2021/1/2021 2409/1/2409 2019/1/2019 +f 2021/1/2021 2410/1/2410 2409/1/2409 +f 2410/1/2410 626/1/626 2409/1/2409 +f 2410/1/2410 622/1/622 626/1/626 +f 622/1/622 621/1/621 626/1/626 +f 621/1/621 624/1/624 626/1/626 +f 626/1/626 624/1/624 627/1/627 +f 624/1/624 625/1/625 627/1/627 +f 624/1/624 623/1/623 625/1/625 +f 623/1/623 558/1/558 625/1/625 +f 625/1/625 558/1/558 559/1/559 +f 625/1/625 559/1/559 628/1/628 +f 558/1/558 557/1/557 559/1/559 +f 559/1/559 557/1/557 561/1/561 +f 561/1/561 557/1/557 553/1/553 +f 558/1/558 560/1/560 557/1/557 +f 560/1/560 545/1/545 557/1/557 +f 557/1/557 545/1/545 443/1/443 +f 545/1/545 439/1/439 443/1/443 +f 443/1/443 439/1/439 436/1/436 +f 439/1/439 440/1/440 436/1/436 +f 436/1/436 440/1/440 437/1/437 +f 436/1/436 437/1/437 438/1/438 +f 440/1/440 542/1/542 437/1/437 +f 542/1/542 530/1/530 437/1/437 +f 437/1/437 530/1/530 526/1/526 +f 441/1/441 437/1/437 526/1/526 +f 529/1/529 526/1/526 530/1/530 +f 529/1/529 530/1/530 532/1/532 +f 532/1/532 531/1/531 529/1/529 +f 529/1/529 531/1/531 518/1/518 +f 529/1/529 518/1/518 525/1/525 +f 533/1/533 531/1/531 532/1/532 +f 535/1/535 531/1/531 533/1/533 +f 533/1/533 534/1/534 535/1/535 +f 535/1/535 534/1/534 536/1/536 +f 536/1/536 2002/1/2002 535/1/535 +f 2009/1/2009 2002/1/2002 536/1/536 +f 536/1/536 537/1/537 2009/1/2009 +f 2009/1/2009 537/1/537 2005/1/2005 +f 2005/1/2005 537/1/537 2006/1/2006 +f 2005/1/2005 2006/1/2006 2004/1/2004 +f 2004/1/2004 2000/1/2000 2005/1/2005 +f 2005/1/2005 2000/1/2000 2002/1/2002 +f 2000/1/2000 1999/1/1999 2002/1/2002 +f 2002/1/2002 1999/1/1999 2003/1/2003 +f 2002/1/2002 2003/1/2003 531/1/531 +f 531/1/531 2003/1/2003 2016/1/2016 +f 2003/1/2003 2017/1/2017 2016/1/2016 +f 2003/1/2003 2001/1/2001 2017/1/2017 +f 2001/1/2001 2021/1/2021 2017/1/2017 +f 2001/1/2001 616/1/616 2021/1/2021 +f 616/1/616 620/1/620 2021/1/2021 +f 616/1/616 617/1/617 620/1/620 +f 617/1/617 619/1/619 620/1/620 +f 620/1/620 619/1/619 622/1/622 +f 617/1/617 618/1/618 619/1/619 +f 618/1/618 572/1/572 619/1/619 +f 619/1/619 572/1/572 621/1/621 +f 572/1/572 570/1/570 621/1/621 +f 621/1/621 570/1/570 623/1/623 +f 572/1/572 569/1/569 570/1/570 +f 569/1/569 563/1/563 570/1/570 +f 570/1/570 563/1/563 558/1/558 +f 569/1/569 568/1/568 563/1/563 +f 568/1/568 562/1/562 563/1/563 +f 563/1/563 562/1/562 560/1/560 +f 562/1/562 546/1/546 560/1/560 +f 562/1/562 565/1/565 546/1/546 +f 565/1/565 564/1/564 546/1/546 +f 546/1/546 564/1/564 543/1/543 +f 546/1/546 543/1/543 545/1/545 +f 564/1/564 544/1/544 543/1/543 +f 543/1/543 544/1/544 540/1/540 +f 543/1/543 540/1/540 439/1/439 +f 439/1/439 540/1/540 538/1/538 +f 540/1/540 541/1/541 538/1/538 +f 541/1/541 537/1/537 538/1/538 +f 538/1/538 537/1/537 539/1/539 +f 538/1/538 539/1/539 440/1/440 +f 539/1/539 537/1/537 534/1/534 +f 539/1/539 534/1/534 542/1/542 +f 544/1/544 541/1/541 540/1/540 +f 544/1/544 2011/1/2011 541/1/541 +f 2011/1/2011 2007/1/2007 541/1/541 +f 541/1/541 2007/1/2007 2006/1/2006 +f 2011/1/2011 2010/1/2010 2007/1/2007 +f 2007/1/2007 2010/1/2010 2008/1/2008 +f 2004/1/2004 2007/1/2007 2008/1/2008 +f 2008/1/2008 1996/1/1996 2004/1/2004 +f 2015/1/2015 1996/1/1996 2008/1/2008 +f 1991/1/1991 1996/1/1996 2015/1/2015 +f 2015/1/2015 1992/1/1992 1991/1/1991 +f 1991/1/1991 1992/1/1992 1989/1/1989 +f 1991/1/1991 1989/1/1989 1993/1/1993 +f 1993/1/1993 1994/1/1994 1991/1/1991 +f 1988/1/1988 1994/1/1994 1993/1/1993 +f 1990/1/1990 1994/1/1994 1988/1/1988 +f 1988/1/1988 1986/1/1986 1990/1/1990 +f 1990/1/1990 1986/1/1986 1987/1/1987 +f 1987/1/1987 1957/1/1957 1990/1/1990 +f 1964/1/1964 1957/1/1957 1987/1/1987 +f 1987/1/1987 1965/1/1965 1964/1/1964 +f 1964/1/1964 1965/1/1965 1960/1/1960 +f 1960/1/1960 1965/1/1965 1961/1/1961 +f 1960/1/1960 1961/1/1961 1959/1/1959 +f 1959/1/1959 1955/1/1955 1960/1/1960 +f 1960/1/1960 1955/1/1955 1957/1/1957 +f 1955/1/1955 1956/1/1956 1957/1/1957 +f 1957/1/1957 1956/1/1956 1958/1/1958 +f 1957/1/1957 1958/1/1958 1994/1/1994 +f 1994/1/1994 1958/1/1958 1995/1/1995 +f 1994/1/1994 1995/1/1995 1996/1/1996 +f 1996/1/1996 1995/1/1995 1997/1/1997 +f 1996/1/1996 1997/1/1997 2000/1/2000 +f 1995/1/1995 608/1/608 1997/1/1997 +f 1997/1/1997 608/1/608 1998/1/1998 +f 1997/1/1997 1998/1/1998 1999/1/1999 +f 1999/1/1999 1998/1/1998 2001/1/2001 +f 608/1/608 612/1/612 1998/1/1998 +f 1998/1/1998 612/1/612 616/1/616 +f 612/1/612 613/1/613 616/1/616 +f 612/1/612 611/1/611 613/1/613 +f 611/1/611 614/1/614 613/1/613 +f 613/1/613 614/1/614 615/1/615 +f 613/1/613 615/1/615 618/1/618 +f 615/1/615 573/1/573 618/1/618 +f 574/1/574 573/1/573 615/1/615 +f 574/1/574 571/1/571 573/1/573 +f 573/1/573 571/1/571 569/1/569 +f 574/1/574 575/1/575 571/1/571 +f 575/1/575 566/1/566 571/1/571 +f 571/1/571 566/1/566 568/1/568 +f 577/1/577 566/1/566 575/1/575 +f 576/1/576 577/1/577 575/1/575 +f 579/1/579 577/1/577 576/1/576 +f 581/1/581 579/1/579 576/1/576 +f 581/1/581 576/1/576 582/1/582 +f 609/1/609 581/1/581 582/1/582 +f 609/1/609 582/1/582 611/1/611 +f 610/1/610 609/1/609 611/1/611 +f 605/1/605 609/1/609 610/1/610 +f 608/1/608 605/1/605 610/1/610 +f 606/1/606 605/1/605 608/1/608 +f 606/1/606 604/1/604 605/1/605 +f 604/1/604 601/1/601 605/1/605 +f 605/1/605 601/1/601 603/1/603 +f 601/1/601 602/1/602 603/1/603 +f 603/1/603 602/1/602 581/1/581 +f 602/1/602 583/1/583 581/1/581 +f 598/1/598 583/1/583 602/1/602 +f 598/1/598 590/1/590 583/1/583 +f 590/1/590 584/1/584 583/1/583 +f 583/1/583 584/1/584 580/1/580 +f 583/1/583 580/1/580 579/1/579 +f 584/1/584 585/1/585 580/1/580 +f 580/1/580 585/1/585 578/1/578 +f 580/1/580 578/1/578 577/1/577 +f 585/1/585 567/1/567 578/1/578 +f 578/1/578 567/1/567 566/1/566 +f 566/1/566 567/1/567 562/1/562 +f 585/1/585 587/1/587 567/1/567 +f 587/1/587 586/1/586 567/1/567 +f 567/1/567 586/1/586 565/1/565 +f 586/1/586 2014/1/2014 565/1/565 +f 586/1/586 1983/1/1983 2014/1/2014 +f 1983/1/1983 1985/1/1985 2014/1/2014 +f 2014/1/2014 1985/1/1985 2013/1/2013 +f 2014/1/2014 2013/1/2013 564/1/564 +f 564/1/564 2013/1/2013 2012/1/2012 +f 2012/1/2012 2013/1/2013 2011/1/2011 +f 2013/1/2013 1985/1/1985 1992/1/1992 +f 2013/1/2013 1992/1/1992 2010/1/2010 +f 1983/1/1983 1981/1/1981 1985/1/1985 +f 1981/1/1981 1984/1/1984 1985/1/1985 +f 1984/1/1984 1989/1/1989 1985/1/1985 +f 1984/1/1984 1986/1/1986 1989/1/1989 +f 1982/1/1982 1986/1/1986 1984/1/1984 +f 1982/1/1982 1965/1/1965 1986/1/1986 +f 1980/1/1980 1965/1/1965 1982/1/1982 +f 1980/1/1980 1982/1/1982 1981/1/1981 +f 1979/1/1979 1980/1/1980 1981/1/1981 +f 1979/1/1979 1978/1/1978 1980/1/1980 +f 1978/1/1978 1966/1/1966 1980/1/1980 +f 1973/1/1973 1966/1/1966 1978/1/1978 +f 1977/1/1977 1973/1/1973 1978/1/1978 +f 1974/1/1974 1973/1/1973 1977/1/1977 +f 1460/1/1460 1974/1/1974 1977/1/1977 +f 1460/1/1460 1977/1/1977 1474/1/1474 +f 1458/1/1458 1460/1/1460 1474/1/1474 +f 1458/1/1458 1474/1/1474 587/1/587 +f 593/1/593 1458/1/1458 587/1/587 +f 593/1/593 587/1/587 588/1/588 +f 592/1/592 593/1/593 588/1/588 +f 592/1/592 588/1/588 589/1/589 +f 591/1/591 592/1/592 589/1/589 +f 591/1/591 589/1/589 590/1/590 +f 597/1/597 591/1/591 590/1/590 +f 596/1/596 591/1/591 597/1/597 +f 599/1/599 596/1/596 597/1/597 +f 599/1/599 597/1/597 600/1/600 +f 604/1/604 599/1/599 600/1/600 +f 607/1/607 599/1/599 604/1/604 +f 607/1/607 633/1/633 599/1/599 +f 607/1/607 632/1/632 633/1/633 +f 632/1/632 1472/1/1472 633/1/633 +f 633/1/633 1472/1/1472 596/1/596 +f 1472/1/1472 1471/1/1471 596/1/596 +f 1471/1/1471 594/1/594 596/1/596 +f 1471/1/1471 595/1/595 594/1/594 +f 594/1/594 595/1/595 592/1/592 +f 1471/1/1471 1473/1/1473 595/1/595 +f 1473/1/1473 593/1/593 595/1/595 +f 1473/1/1473 1457/1/1457 593/1/593 +f 1462/1/1462 1457/1/1457 1473/1/1473 +f 1469/1/1469 1462/1/1462 1473/1/1473 +f 1463/1/1463 1462/1/1462 1469/1/1469 +f 1468/1/1468 1463/1/1463 1469/1/1469 +f 1468/1/1468 1469/1/1469 1470/1/1470 +f 635/1/635 1468/1/1468 1470/1/1470 +f 635/1/635 1470/1/1470 632/1/632 +f 631/1/631 635/1/635 632/1/632 +f 631/1/631 634/1/634 635/1/635 +f 636/1/636 634/1/634 631/1/631 +f 630/1/630 636/1/636 631/1/631 +f 630/1/630 631/1/631 629/1/629 +f 1956/1/1956 630/1/630 629/1/629 +f 1954/1/1954 630/1/630 1956/1/1956 +f 1954/1/1954 637/1/637 630/1/630 +f 1952/1/1952 637/1/637 1954/1/1954 +f 1953/1/1953 1952/1/1952 1954/1/1954 +f 1953/1/1953 1954/1/1954 1955/1/1955 +f 1951/1/1951 1952/1/1952 1953/1/1953 +f 2426/1/2426 1951/1/1951 1953/1/1953 +f 2426/1/2426 1953/1/1953 1969/1/1969 +f 1969/1/1969 1970/1/1970 2426/1/2426 +f 2426/1/2426 1970/1/1970 2423/1/2423 +f 2426/1/2426 2423/1/2423 2427/1/2427 +f 2427/1/2427 2423/1/2423 2428/1/2428 +f 2428/1/2428 1951/1/1951 2427/1/2427 +f 2429/1/2429 1951/1/1951 2428/1/2428 +f 2428/1/2428 2425/1/2425 2429/1/2429 +f 2429/1/2429 2425/1/2425 1450/1/1450 +f 1450/1/1450 1446/1/1446 2429/1/2429 +f 1449/1/1449 1446/1/1446 1450/1/1450 +f 1450/1/1450 685/1/685 1449/1/1449 +f 1449/1/1449 685/1/685 688/1/688 +f 688/1/688 685/1/685 687/1/687 +f 688/1/688 687/1/687 689/1/689 +f 689/1/689 1445/1/1445 688/1/688 +f 688/1/688 1445/1/1445 1446/1/1446 +f 1445/1/1445 1447/1/1447 1446/1/1446 +f 1446/1/1446 1447/1/1447 1451/1/1451 +f 1446/1/1446 1451/1/1451 1951/1/1951 +f 1447/1/1447 1919/1/1919 1451/1/1451 +f 1451/1/1451 1919/1/1919 644/1/644 +f 1451/1/1451 644/1/644 1952/1/1952 +f 1919/1/1919 650/1/650 644/1/644 +f 644/1/644 650/1/650 643/1/643 +f 644/1/644 643/1/643 638/1/638 +f 644/1/644 638/1/638 637/1/637 +f 637/1/637 638/1/638 636/1/636 +f 638/1/638 639/1/639 636/1/636 +f 636/1/636 639/1/639 640/1/640 +f 639/1/639 1466/1/1466 640/1/640 +f 640/1/640 1466/1/1466 1467/1/1467 +f 640/1/640 1467/1/1467 634/1/634 +f 634/1/634 1467/1/1467 1465/1/1465 +f 634/1/634 1465/1/1465 1468/1/1468 +f 1467/1/1467 1464/1/1464 1465/1/1465 +f 1464/1/1464 1463/1/1463 1465/1/1465 +f 1464/1/1464 1461/1/1461 1463/1/1463 +f 1464/1/1464 661/1/661 1461/1/1461 +f 661/1/661 660/1/660 1461/1/1461 +f 1461/1/1461 660/1/660 1459/1/1459 +f 1461/1/1461 1459/1/1459 1462/1/1462 +f 660/1/660 667/1/667 1459/1/1459 +f 1459/1/1459 667/1/667 1457/1/1457 +f 1457/1/1457 667/1/667 1458/1/1458 +f 660/1/660 663/1/663 667/1/667 +f 663/1/663 666/1/666 667/1/667 +f 667/1/667 666/1/666 1460/1/1460 +f 663/1/663 665/1/665 666/1/666 +f 665/1/665 1975/1/1975 666/1/666 +f 666/1/666 1975/1/1975 1974/1/1974 +f 1975/1/1975 1971/1/1971 1974/1/1974 +f 1974/1/1974 1971/1/1971 1972/1/1972 +f 1972/1/1972 1971/1/1971 1967/1/1967 +f 1972/1/1972 1967/1/1967 1973/1/1973 +f 1971/1/1971 1968/1/1968 1967/1/1967 +f 1967/1/1967 1968/1/1968 1962/1/1962 +f 1967/1/1967 1962/1/1962 1966/1/1966 +f 1966/1/1966 1962/1/1962 1961/1/1961 +f 1962/1/1962 1968/1/1968 1963/1/1963 +f 1959/1/1959 1962/1/1962 1963/1/1963 +f 1963/1/1963 1953/1/1953 1959/1/1959 +f 1963/1/1963 1968/1/1968 1969/1/1969 +f 1971/1/1971 1970/1/1970 1968/1/1968 +f 1971/1/1971 1976/1/1976 1970/1/1970 +f 1975/1/1975 1976/1/1976 1971/1/1971 +f 2420/1/2420 1976/1/1976 1975/1/1975 +f 2420/1/2420 2421/1/2421 1976/1/1976 +f 2421/1/2421 2422/1/2422 1976/1/1976 +f 2422/1/2422 2423/1/2423 1976/1/1976 +f 2422/1/2422 2425/1/2425 2423/1/2423 +f 2424/1/2424 2425/1/2425 2422/1/2422 +f 2424/1/2424 685/1/685 2425/1/2425 +f 684/1/684 685/1/685 2424/1/2424 +f 684/1/684 2424/1/2424 2421/1/2421 +f 675/1/675 684/1/684 2421/1/2421 +f 675/1/675 680/1/680 684/1/684 +f 680/1/680 683/1/683 684/1/684 +f 679/1/679 683/1/683 680/1/680 +f 674/1/674 679/1/679 680/1/680 +f 677/1/677 679/1/679 674/1/674 +f 676/1/676 677/1/677 674/1/674 +f 676/1/676 674/1/674 670/1/670 +f 669/1/669 676/1/676 670/1/670 +f 669/1/669 670/1/670 664/1/664 +f 671/1/671 669/1/669 664/1/664 +f 671/1/671 664/1/664 668/1/668 +f 672/1/672 671/1/671 668/1/668 +f 672/1/672 668/1/668 673/1/673 +f 1475/1/1475 672/1/672 673/1/673 +f 1475/1/1475 673/1/673 652/1/652 +f 651/1/651 1475/1/1475 652/1/652 +f 651/1/651 652/1/652 647/1/647 +f 648/1/648 651/1/651 647/1/647 +f 648/1/648 647/1/647 642/1/642 +f 643/1/643 648/1/648 642/1/642 +f 643/1/643 649/1/649 648/1/648 +f 642/1/642 647/1/647 645/1/645 +f 642/1/642 645/1/645 641/1/641 +f 638/1/638 642/1/642 641/1/641 +f 641/1/641 645/1/645 646/1/646 +f 641/1/641 646/1/646 639/1/639 +f 645/1/645 653/1/653 646/1/646 +f 653/1/653 655/1/655 646/1/646 +f 646/1/646 655/1/655 659/1/659 +f 646/1/646 659/1/659 1466/1/1466 +f 1466/1/1466 659/1/659 1464/1/1464 +f 655/1/655 658/1/658 659/1/659 +f 659/1/659 658/1/658 661/1/661 +f 655/1/655 654/1/654 658/1/658 +f 654/1/654 657/1/657 658/1/658 +f 658/1/658 657/1/657 660/1/660 +f 654/1/654 662/1/662 657/1/657 +f 662/1/662 663/1/663 657/1/657 +f 662/1/662 664/1/664 663/1/663 +f 656/1/656 662/1/662 654/1/654 +f 653/1/653 656/1/656 654/1/654 +f 652/1/652 656/1/656 653/1/653 +f 673/1/673 662/1/662 656/1/656 +f 653/1/653 654/1/654 655/1/655 +f 647/1/647 653/1/653 645/1/645 +f 649/1/649 651/1/651 648/1/648 +f 649/1/649 1477/1/1477 651/1/651 +f 1478/1/1478 1477/1/1477 649/1/649 +f 650/1/650 1478/1/1478 649/1/649 +f 650/1/650 1916/1/1916 1478/1/1478 +f 1916/1/1916 1915/1/1915 1478/1/1478 +f 1916/1/1916 1909/1/1909 1915/1/1915 +f 1909/1/1909 1910/1/1910 1915/1/1915 +f 1915/1/1915 1910/1/1910 1477/1/1477 +f 1910/1/1910 1476/1/1476 1477/1/1477 +f 1477/1/1477 1476/1/1476 1475/1/1475 +f 1910/1/1910 1912/1/1912 1476/1/1476 +f 1476/1/1476 1912/1/1912 672/1/672 +f 1910/1/1910 1908/1/1908 1912/1/1912 +f 1908/1/1908 671/1/671 1912/1/1912 +f 1908/1/1908 1911/1/1911 671/1/671 +f 1905/1/1905 1911/1/1911 1908/1/1908 +f 1906/1/1906 1905/1/1905 1908/1/1908 +f 1901/1/1901 1905/1/1905 1906/1/1906 +f 1907/1/1907 1901/1/1901 1906/1/1906 +f 1907/1/1907 1906/1/1906 1909/1/1909 +f 1917/1/1917 1907/1/1907 1909/1/1909 +f 1922/1/1922 1907/1/1907 1917/1/1917 +f 1918/1/1918 1922/1/1922 1917/1/1917 +f 1918/1/1918 1917/1/1917 1916/1/1916 +f 1921/1/1921 1922/1/1922 1918/1/1918 +f 1920/1/1920 1921/1/1921 1918/1/1918 +f 1920/1/1920 1918/1/1918 1919/1/1919 +f 1923/1/1923 1921/1/1921 1920/1/1920 +f 1448/1/1448 1923/1/1923 1920/1/1920 +f 1448/1/1448 1920/1/1920 1447/1/1447 +f 1452/1/1452 1923/1/1923 1448/1/1448 +f 1443/1/1443 1452/1/1452 1448/1/1448 +f 1443/1/1443 1448/1/1448 1445/1/1445 +f 1437/1/1437 1452/1/1452 1443/1/1443 +f 1442/1/1442 1437/1/1437 1443/1/1443 +f 1442/1/1442 1443/1/1443 694/1/694 +f 694/1/694 693/1/693 1442/1/1442 +f 1442/1/1442 693/1/693 696/1/696 +f 1442/1/1442 696/1/696 1441/1/1441 +f 1441/1/1441 696/1/696 1440/1/1440 +f 1440/1/1440 1437/1/1437 1441/1/1441 +f 1438/1/1438 1437/1/1437 1440/1/1440 +f 1440/1/1440 1439/1/1439 1438/1/1438 +f 1438/1/1438 1439/1/1439 1436/1/1436 +f 1436/1/1436 1433/1/1433 1438/1/1438 +f 1435/1/1435 1433/1/1433 1436/1/1436 +f 1436/1/1436 720/1/720 1435/1/1435 +f 1435/1/1435 720/1/720 724/1/724 +f 724/1/724 720/1/720 721/1/721 +f 724/1/724 721/1/721 722/1/722 +f 722/1/722 726/1/726 724/1/724 +f 724/1/724 726/1/726 1433/1/1433 +f 726/1/726 1432/1/1432 1433/1/1433 +f 1433/1/1433 1432/1/1432 1434/1/1434 +f 1433/1/1433 1434/1/1434 1437/1/1437 +f 1432/1/1432 1925/1/1925 1434/1/1434 +f 1434/1/1434 1925/1/1925 1884/1/1884 +f 1434/1/1434 1884/1/1884 1452/1/1452 +f 1925/1/1925 1877/1/1877 1884/1/1884 +f 1884/1/1884 1877/1/1877 1879/1/1879 +f 1884/1/1884 1879/1/1879 1883/1/1883 +f 1884/1/1884 1883/1/1883 1923/1/1923 +f 1923/1/1923 1883/1/1883 1924/1/1924 +f 1883/1/1883 1889/1/1889 1924/1/1924 +f 1924/1/1924 1889/1/1889 1898/1/1898 +f 1924/1/1924 1898/1/1898 1921/1/1921 +f 1889/1/1889 1892/1/1892 1898/1/1898 +f 1898/1/1898 1892/1/1892 1899/1/1899 +f 1898/1/1898 1899/1/1899 1922/1/1922 +f 1922/1/1922 1899/1/1899 1902/1/1902 +f 1899/1/1899 1897/1/1897 1902/1/1902 +f 1897/1/1897 1901/1/1901 1902/1/1902 +f 1897/1/1897 1900/1/1900 1901/1/1901 +f 1897/1/1897 1896/1/1896 1900/1/1900 +f 1896/1/1896 1903/1/1903 1900/1/1900 +f 1900/1/1900 1903/1/1903 1904/1/1904 +f 1900/1/1900 1904/1/1904 1905/1/1905 +f 1903/1/1903 1456/1/1456 1904/1/1904 +f 1904/1/1904 1456/1/1456 1911/1/1911 +f 1911/1/1911 1456/1/1456 669/1/669 +f 1903/1/1903 1453/1/1453 1456/1/1456 +f 1453/1/1453 678/1/678 1456/1/1456 +f 1456/1/1456 678/1/678 676/1/676 +f 1453/1/1453 701/1/701 678/1/678 +f 701/1/701 697/1/697 678/1/678 +f 678/1/678 697/1/697 677/1/677 +f 697/1/697 692/1/692 677/1/677 +f 677/1/677 692/1/692 681/1/681 +f 681/1/681 692/1/692 682/1/682 +f 681/1/681 682/1/682 679/1/679 +f 692/1/692 690/1/690 682/1/682 +f 682/1/682 690/1/690 686/1/686 +f 682/1/682 686/1/686 683/1/683 +f 683/1/683 686/1/686 687/1/687 +f 686/1/686 690/1/690 691/1/691 +f 689/1/689 686/1/686 691/1/691 +f 691/1/691 1443/1/1443 689/1/689 +f 691/1/691 690/1/690 694/1/694 +f 692/1/692 693/1/693 690/1/690 +f 692/1/692 695/1/695 693/1/693 +f 697/1/697 695/1/695 692/1/692 +f 700/1/700 695/1/695 697/1/697 +f 700/1/700 698/1/698 695/1/695 +f 698/1/698 699/1/699 695/1/695 +f 699/1/699 696/1/696 695/1/695 +f 699/1/699 1439/1/1439 696/1/696 +f 1444/1/1444 1439/1/1439 699/1/699 +f 1444/1/1444 720/1/720 1439/1/1439 +f 705/1/705 720/1/720 1444/1/1444 +f 705/1/705 1444/1/1444 698/1/698 +f 702/1/702 705/1/705 698/1/698 +f 702/1/702 704/1/704 705/1/705 +f 704/1/704 717/1/717 705/1/705 +f 711/1/711 717/1/717 704/1/704 +f 706/1/706 711/1/711 704/1/704 +f 710/1/710 711/1/711 706/1/706 +f 707/1/707 710/1/710 706/1/706 +f 707/1/707 706/1/706 703/1/703 +f 708/1/708 707/1/707 703/1/703 +f 708/1/708 703/1/703 709/1/709 +f 1863/1/1863 708/1/708 709/1/709 +f 1863/1/1863 709/1/709 1454/1/1454 +f 1871/1/1871 1863/1/1863 1454/1/1454 +f 1871/1/1871 1454/1/1454 1914/1/1914 +f 1872/1/1872 1871/1/1871 1914/1/1914 +f 1872/1/1872 1914/1/1914 1881/1/1881 +f 1875/1/1875 1872/1/1872 1881/1/1881 +f 1875/1/1875 1881/1/1881 1880/1/1880 +f 1878/1/1878 1875/1/1875 1880/1/1880 +f 1878/1/1878 1880/1/1880 1882/1/1882 +f 1879/1/1879 1878/1/1878 1882/1/1882 +f 1879/1/1879 1874/1/1874 1878/1/1878 +f 1882/1/1882 1880/1/1880 1885/1/1885 +f 1882/1/1882 1885/1/1885 1886/1/1886 +f 1883/1/1883 1882/1/1882 1886/1/1886 +f 1886/1/1886 1885/1/1885 1888/1/1888 +f 1886/1/1886 1888/1/1888 1889/1/1889 +f 1885/1/1885 1887/1/1887 1888/1/1888 +f 1887/1/1887 1890/1/1890 1888/1/1888 +f 1888/1/1888 1890/1/1890 1891/1/1891 +f 1888/1/1888 1891/1/1891 1892/1/1892 +f 1892/1/1892 1891/1/1891 1897/1/1897 +f 1890/1/1890 1895/1/1895 1891/1/1891 +f 1891/1/1891 1895/1/1895 1896/1/1896 +f 1890/1/1890 1894/1/1894 1895/1/1895 +f 1894/1/1894 1913/1/1913 1895/1/1895 +f 1895/1/1895 1913/1/1913 1903/1/1903 +f 1894/1/1894 1455/1/1455 1913/1/1913 +f 1455/1/1455 1453/1/1453 1913/1/1913 +f 1455/1/1455 709/1/709 1453/1/1453 +f 1893/1/1893 1455/1/1455 1894/1/1894 +f 1887/1/1887 1893/1/1893 1894/1/1894 +f 1881/1/1881 1893/1/1893 1887/1/1887 +f 1914/1/1914 1455/1/1455 1893/1/1893 +f 1887/1/1887 1894/1/1894 1890/1/1890 +f 1880/1/1880 1887/1/1887 1885/1/1885 +f 1874/1/1874 1875/1/1875 1878/1/1878 +f 1874/1/1874 1869/1/1869 1875/1/1875 +f 1873/1/1873 1869/1/1869 1874/1/1874 +f 1877/1/1877 1873/1/1873 1874/1/1874 +f 1877/1/1877 1876/1/1876 1873/1/1873 +f 1876/1/1876 1870/1/1870 1873/1/1873 +f 1876/1/1876 1867/1/1867 1870/1/1870 +f 1867/1/1867 1864/1/1864 1870/1/1870 +f 1870/1/1870 1864/1/1864 1869/1/1869 +f 1864/1/1864 1868/1/1868 1869/1/1869 +f 1869/1/1869 1868/1/1868 1872/1/1872 +f 1864/1/1864 1865/1/1865 1868/1/1868 +f 1868/1/1868 1865/1/1865 1871/1/1871 +f 1864/1/1864 1862/1/1862 1865/1/1865 +f 1862/1/1862 1863/1/1863 1865/1/1865 +f 1862/1/1862 773/1/773 1863/1/1863 +f 1859/1/1859 773/1/773 1862/1/1862 +f 1861/1/1861 1859/1/1859 1862/1/1862 +f 1860/1/1860 1859/1/1859 1861/1/1861 +f 1866/1/1866 1860/1/1860 1861/1/1861 +f 1866/1/1866 1861/1/1861 1867/1/1867 +f 1929/1/1929 1866/1/1866 1867/1/1867 +f 1928/1/1928 1866/1/1866 1929/1/1929 +f 1927/1/1927 1928/1/1928 1929/1/1929 +f 1927/1/1927 1929/1/1929 1876/1/1876 +f 1930/1/1930 1928/1/1928 1927/1/1927 +f 1926/1/1926 1930/1/1930 1927/1/1927 +f 1926/1/1926 1927/1/1927 1925/1/1925 +f 1935/1/1935 1930/1/1930 1926/1/1926 +f 730/1/730 1935/1/1935 1926/1/1926 +f 730/1/730 1926/1/1926 1432/1/1432 +f 729/1/729 1935/1/1935 730/1/730 +f 725/1/725 729/1/729 730/1/730 +f 725/1/725 730/1/730 726/1/726 +f 728/1/728 729/1/729 725/1/725 +f 731/1/731 728/1/728 725/1/725 +f 731/1/731 725/1/725 727/1/727 +f 727/1/727 732/1/732 731/1/731 +f 731/1/731 732/1/732 734/1/734 +f 731/1/731 734/1/734 733/1/733 +f 733/1/733 734/1/734 737/1/737 +f 737/1/737 728/1/728 733/1/733 +f 735/1/735 728/1/728 737/1/737 +f 737/1/737 739/1/739 735/1/735 +f 735/1/735 739/1/739 738/1/738 +f 738/1/738 736/1/736 735/1/735 +f 1950/1/1950 736/1/736 738/1/738 +f 738/1/738 744/1/744 1950/1/1950 +f 1950/1/1950 744/1/744 751/1/751 +f 751/1/751 744/1/744 750/1/750 +f 751/1/751 750/1/750 1937/1/1937 +f 1937/1/1937 1827/1/1827 751/1/751 +f 751/1/751 1827/1/1827 736/1/736 +f 1827/1/1827 1829/1/1829 736/1/736 +f 736/1/736 1829/1/1829 1936/1/1936 +f 736/1/736 1936/1/1936 728/1/728 +f 1829/1/1829 1833/1/1833 1936/1/1936 +f 1936/1/1936 1833/1/1833 1844/1/1844 +f 1936/1/1936 1844/1/1844 729/1/729 +f 1833/1/1833 1832/1/1832 1844/1/1844 +f 1844/1/1844 1832/1/1832 1839/1/1839 +f 1844/1/1844 1839/1/1839 1845/1/1845 +f 1844/1/1844 1845/1/1845 1935/1/1935 +f 1839/1/1839 1843/1/1843 1845/1/1845 +f 1845/1/1845 1843/1/1843 1847/1/1847 +f 1845/1/1845 1847/1/1847 1850/1/1850 +f 1845/1/1845 1850/1/1850 1930/1/1930 +f 1930/1/1930 1850/1/1850 1934/1/1934 +f 1850/1/1850 1852/1/1852 1934/1/1934 +f 1934/1/1934 1852/1/1852 1932/1/1932 +f 1934/1/1934 1932/1/1932 1928/1/1928 +f 1928/1/1928 1932/1/1932 1931/1/1931 +f 1932/1/1932 1933/1/1933 1931/1/1931 +f 1933/1/1933 1860/1/1860 1931/1/1931 +f 1933/1/1933 1857/1/1857 1860/1/1860 +f 1933/1/1933 1858/1/1858 1857/1/1857 +f 1858/1/1858 770/1/770 1857/1/1857 +f 1857/1/1857 770/1/770 772/1/772 +f 1857/1/1857 772/1/772 1859/1/1859 +f 770/1/770 771/1/771 772/1/772 +f 772/1/772 771/1/771 773/1/773 +f 773/1/773 771/1/771 708/1/708 +f 770/1/770 766/1/766 771/1/771 +f 766/1/766 714/1/714 771/1/771 +f 771/1/771 714/1/714 707/1/707 +f 766/1/766 755/1/755 714/1/714 +f 755/1/755 715/1/715 714/1/714 +f 714/1/714 715/1/715 710/1/710 +f 715/1/715 712/1/712 710/1/710 +f 710/1/710 712/1/712 713/1/713 +f 713/1/713 712/1/712 716/1/716 +f 713/1/713 716/1/716 711/1/711 +f 712/1/712 718/1/718 716/1/716 +f 716/1/716 718/1/718 719/1/719 +f 716/1/716 719/1/719 717/1/717 +f 717/1/717 719/1/719 721/1/721 +f 719/1/719 718/1/718 723/1/723 +f 722/1/722 719/1/719 723/1/723 +f 723/1/723 725/1/725 722/1/722 +f 723/1/723 718/1/718 727/1/727 +f 712/1/712 732/1/732 718/1/718 +f 712/1/712 740/1/740 732/1/732 +f 715/1/715 740/1/740 712/1/712 +f 746/1/746 740/1/740 715/1/715 +f 746/1/746 743/1/743 740/1/740 +f 743/1/743 741/1/741 740/1/740 +f 741/1/741 734/1/734 740/1/740 +f 741/1/741 739/1/739 734/1/734 +f 742/1/742 739/1/739 741/1/741 +f 742/1/742 744/1/744 739/1/739 +f 745/1/745 744/1/744 742/1/742 +f 745/1/745 742/1/742 743/1/743 +f 747/1/747 745/1/745 743/1/743 +f 747/1/747 749/1/749 745/1/745 +f 749/1/749 748/1/748 745/1/745 +f 752/1/752 748/1/748 749/1/749 +f 754/1/754 752/1/752 749/1/749 +f 760/1/760 752/1/752 754/1/754 +f 758/1/758 760/1/760 754/1/754 +f 758/1/758 754/1/754 756/1/756 +f 757/1/757 758/1/758 756/1/756 +f 757/1/757 756/1/756 759/1/759 +f 763/1/763 757/1/757 759/1/759 +f 763/1/763 759/1/759 764/1/764 +f 767/1/767 763/1/763 764/1/764 +f 767/1/767 764/1/764 768/1/768 +f 1837/1/1837 767/1/767 768/1/768 +f 1837/1/1837 768/1/768 1842/1/1842 +f 1838/1/1838 1837/1/1837 1842/1/1842 +f 1838/1/1838 1842/1/1842 1841/1/1841 +f 1840/1/1840 1838/1/1838 1841/1/1841 +f 1840/1/1840 1841/1/1841 1843/1/1843 +f 1843/1/1843 1841/1/1841 1846/1/1846 +f 1841/1/1841 1848/1/1848 1846/1/1846 +f 1846/1/1846 1848/1/1848 1849/1/1849 +f 1847/1/1847 1846/1/1846 1849/1/1849 +f 1848/1/1848 1853/1/1853 1849/1/1849 +f 1849/1/1849 1853/1/1853 1851/1/1851 +f 1849/1/1849 1851/1/1851 1852/1/1852 +f 1852/1/1852 1851/1/1851 1933/1/1933 +f 1853/1/1853 1856/1/1856 1851/1/1851 +f 1851/1/1851 1856/1/1856 1858/1/1858 +f 1853/1/1853 1855/1/1855 1856/1/1856 +f 1855/1/1855 769/1/769 1856/1/1856 +f 1856/1/1856 769/1/769 770/1/770 +f 1855/1/1855 765/1/765 769/1/769 +f 765/1/765 766/1/766 769/1/769 +f 765/1/765 759/1/759 766/1/766 +f 1854/1/1854 765/1/765 1855/1/1855 +f 1848/1/1848 1854/1/1854 1855/1/1855 +f 1842/1/1842 1854/1/1854 1848/1/1848 +f 768/1/768 765/1/765 1854/1/1854 +f 1848/1/1848 1855/1/1855 1853/1/1853 +f 1835/1/1835 1838/1/1838 1840/1/1840 +f 1839/1/1839 1835/1/1835 1840/1/1840 +f 1835/1/1835 1836/1/1836 1838/1/1838 +f 1834/1/1834 1836/1/1836 1835/1/1835 +f 1832/1/1832 1834/1/1834 1835/1/1835 +f 1832/1/1832 1831/1/1831 1834/1/1834 +f 1831/1/1831 852/1/852 1834/1/1834 +f 1831/1/1831 851/1/851 852/1/852 +f 851/1/851 778/1/778 852/1/852 +f 852/1/852 778/1/778 1836/1/1836 +f 778/1/778 777/1/777 1836/1/1836 +f 1836/1/1836 777/1/777 1837/1/1837 +f 778/1/778 774/1/774 777/1/777 +f 777/1/777 774/1/774 767/1/767 +f 778/1/778 775/1/775 774/1/774 +f 775/1/775 763/1/763 774/1/774 +f 775/1/775 776/1/776 763/1/763 +f 841/1/841 776/1/776 775/1/775 +f 846/1/846 841/1/841 775/1/775 +f 842/1/842 841/1/841 846/1/846 +f 845/1/845 842/1/842 846/1/846 +f 845/1/845 846/1/846 851/1/851 +f 849/1/849 845/1/845 851/1/851 +f 847/1/847 845/1/845 849/1/849 +f 1830/1/1830 847/1/847 849/1/849 +f 1830/1/1830 849/1/849 1831/1/1831 +f 850/1/850 847/1/847 1830/1/1830 +f 1828/1/1828 850/1/850 1830/1/1830 +f 1828/1/1828 1830/1/1830 1833/1/1833 +f 854/1/854 850/1/850 1828/1/1828 +f 1826/1/1826 854/1/854 1828/1/1828 +f 1826/1/1826 1828/1/1828 1829/1/1829 +f 1824/1/1824 854/1/854 1826/1/1826 +f 1825/1/1825 1824/1/1824 1826/1/1826 +f 1825/1/1825 1826/1/1826 1827/1/1827 +f 1823/1/1823 1824/1/1824 1825/1/1825 +f 1940/1/1940 1823/1/1823 1825/1/1825 +f 1940/1/1940 1825/1/1825 1941/1/1941 +f 1941/1/1941 1780/1/1780 1940/1/1940 +f 1940/1/1940 1780/1/1780 1779/1/1779 +f 1940/1/1940 1779/1/1779 1943/1/1943 +f 1943/1/1943 1779/1/1779 1945/1/1945 +f 1945/1/1945 1823/1/1823 1943/1/1943 +f 1944/1/1944 1823/1/1823 1945/1/1945 +f 1945/1/1945 1786/1/1786 1944/1/1944 +f 1944/1/1944 1786/1/1786 1946/1/1946 +f 1946/1/1946 1821/1/1821 1944/1/1944 +f 1947/1/1947 1821/1/1821 1946/1/1946 +f 1946/1/1946 1948/1/1948 1947/1/1947 +f 1947/1/1947 1948/1/1948 1820/1/1820 +f 1820/1/1820 1948/1/1948 1804/1/1804 +f 1820/1/1820 1804/1/1804 1805/1/1805 +f 1805/1/1805 1818/1/1818 1820/1/1820 +f 1820/1/1820 1818/1/1818 1821/1/1821 +f 1818/1/1818 1819/1/1819 1821/1/1821 +f 1821/1/1821 1819/1/1819 1822/1/1822 +f 1821/1/1821 1822/1/1822 1823/1/1823 +f 1819/1/1819 818/1/818 1822/1/1822 +f 1822/1/1822 818/1/818 819/1/819 +f 1822/1/1822 819/1/819 1824/1/1824 +f 818/1/818 814/1/814 819/1/819 +f 819/1/819 814/1/814 817/1/817 +f 819/1/819 817/1/817 823/1/823 +f 819/1/819 823/1/823 854/1/854 +f 817/1/817 822/1/822 823/1/823 +f 823/1/823 822/1/822 829/1/829 +f 823/1/823 829/1/829 853/1/853 +f 823/1/823 853/1/853 850/1/850 +f 850/1/850 853/1/853 848/1/848 +f 853/1/853 838/1/838 848/1/848 +f 848/1/848 838/1/838 844/1/844 +f 848/1/848 844/1/844 847/1/847 +f 847/1/847 844/1/844 843/1/843 +f 844/1/844 839/1/839 843/1/843 +f 839/1/839 842/1/842 843/1/843 +f 839/1/839 840/1/840 842/1/842 +f 839/1/839 837/1/837 840/1/840 +f 837/1/837 780/1/780 840/1/840 +f 840/1/840 780/1/780 782/1/782 +f 840/1/840 782/1/782 841/1/841 +f 780/1/780 779/1/779 782/1/782 +f 782/1/782 779/1/779 776/1/776 +f 776/1/776 779/1/779 757/1/757 +f 780/1/780 781/1/781 779/1/779 +f 781/1/781 761/1/761 779/1/779 +f 779/1/779 761/1/761 758/1/758 +f 781/1/781 783/1/783 761/1/761 +f 783/1/783 762/1/762 761/1/761 +f 761/1/761 762/1/762 760/1/760 +f 762/1/762 1783/1/1783 760/1/760 +f 760/1/760 1783/1/1783 1949/1/1949 +f 1949/1/1949 1783/1/1783 753/1/753 +f 1949/1/1949 753/1/753 752/1/752 +f 1783/1/1783 1942/1/1942 753/1/753 +f 753/1/753 1942/1/1942 1939/1/1939 +f 753/1/753 1939/1/1939 748/1/748 +f 748/1/748 1939/1/1939 750/1/750 +f 1939/1/1939 1942/1/1942 1938/1/1938 +f 1937/1/1937 1939/1/1939 1938/1/1938 +f 1938/1/1938 1825/1/1825 1937/1/1937 +f 1938/1/1938 1942/1/1942 1941/1/1941 +f 1783/1/1783 1780/1/1780 1942/1/1942 +f 1783/1/1783 1778/1/1778 1780/1/1780 +f 762/1/762 1778/1/1778 1783/1/1783 +f 1784/1/1784 1778/1/1778 762/1/762 +f 1784/1/1784 1782/1/1782 1778/1/1778 +f 1782/1/1782 1781/1/1781 1778/1/1778 +f 1781/1/1781 1779/1/1779 1778/1/1778 +f 1781/1/1781 1786/1/1786 1779/1/1779 +f 1785/1/1785 1786/1/1786 1781/1/1781 +f 1785/1/1785 1948/1/1948 1786/1/1786 +f 1787/1/1787 1948/1/1948 1785/1/1785 +f 1787/1/1787 1785/1/1785 1782/1/1782 +f 1788/1/1788 1787/1/1787 1782/1/1782 +f 1788/1/1788 1790/1/1790 1787/1/1787 +f 1790/1/1790 1793/1/1793 1787/1/1787 +f 1791/1/1791 1793/1/1793 1790/1/1790 +f 1789/1/1789 1791/1/1791 1790/1/1790 +f 1792/1/1792 1791/1/1791 1789/1/1789 +f 791/1/791 1792/1/1792 1789/1/1789 +f 791/1/791 1789/1/1789 787/1/787 +f 790/1/790 791/1/791 787/1/787 +f 790/1/790 787/1/787 784/1/784 +f 788/1/788 790/1/790 784/1/784 +f 788/1/788 784/1/784 789/1/789 +f 855/1/855 788/1/788 789/1/789 +f 855/1/855 789/1/789 834/1/834 +f 825/1/825 855/1/855 834/1/834 +f 825/1/825 834/1/834 826/1/826 +f 821/1/821 825/1/825 826/1/826 +f 821/1/821 826/1/826 824/1/824 +f 820/1/820 821/1/821 824/1/824 +f 820/1/820 824/1/824 822/1/822 +f 822/1/822 824/1/824 828/1/828 +f 824/1/824 827/1/827 828/1/828 +f 828/1/828 827/1/827 830/1/830 +f 829/1/829 828/1/828 830/1/830 +f 827/1/827 832/1/832 830/1/830 +f 830/1/830 832/1/832 836/1/836 +f 830/1/830 836/1/836 838/1/838 +f 838/1/838 836/1/836 839/1/839 +f 832/1/832 835/1/835 836/1/836 +f 836/1/836 835/1/835 837/1/837 +f 832/1/832 831/1/831 835/1/835 +f 831/1/831 785/1/785 835/1/835 +f 835/1/835 785/1/785 780/1/780 +f 831/1/831 786/1/786 785/1/785 +f 786/1/786 781/1/781 785/1/785 +f 786/1/786 784/1/784 781/1/781 +f 833/1/833 786/1/786 831/1/831 +f 827/1/827 833/1/833 831/1/831 +f 826/1/826 833/1/833 827/1/827 +f 834/1/834 786/1/786 833/1/833 +f 827/1/827 831/1/831 832/1/832 +f 816/1/816 821/1/821 820/1/820 +f 817/1/817 816/1/816 820/1/820 +f 816/1/816 815/1/815 821/1/821 +f 813/1/813 815/1/815 816/1/816 +f 814/1/814 813/1/813 816/1/816 +f 814/1/814 810/1/810 813/1/813 +f 810/1/810 811/1/811 813/1/813 +f 810/1/810 806/1/806 811/1/811 +f 806/1/806 803/1/803 811/1/811 +f 811/1/811 803/1/803 815/1/815 +f 803/1/803 856/1/856 815/1/815 +f 815/1/815 856/1/856 825/1/825 +f 803/1/803 804/1/804 856/1/856 +f 856/1/856 804/1/804 855/1/855 +f 803/1/803 799/1/799 804/1/804 +f 799/1/799 788/1/788 804/1/804 +f 799/1/799 792/1/792 788/1/788 +f 798/1/798 792/1/792 799/1/799 +f 802/1/802 798/1/798 799/1/799 +f 801/1/801 798/1/798 802/1/802 +f 805/1/805 801/1/801 802/1/802 +f 805/1/805 802/1/802 806/1/806 +f 807/1/807 805/1/805 806/1/806 +f 808/1/808 805/1/805 807/1/807 +f 812/1/812 808/1/808 807/1/807 +f 812/1/812 807/1/807 810/1/810 +f 858/1/858 808/1/808 812/1/812 +f 857/1/857 858/1/858 812/1/812 +f 857/1/857 812/1/812 818/1/818 +f 859/1/859 858/1/858 857/1/857 +f 1817/1/1817 859/1/859 857/1/857 +f 1817/1/1817 857/1/857 1819/1/1819 +f 1816/1/1816 859/1/859 1817/1/1817 +f 1806/1/1806 1816/1/1816 1817/1/1817 +f 1806/1/1806 1817/1/1817 1818/1/1818 +f 1809/1/1809 1816/1/1816 1806/1/1806 +f 1807/1/1807 1809/1/1809 1806/1/1806 +f 1807/1/1807 1806/1/1806 1803/1/1803 +f 1803/1/1803 1801/1/1801 1807/1/1807 +f 1807/1/1807 1801/1/1801 1808/1/1808 +f 1807/1/1807 1808/1/1808 1810/1/1810 +f 1810/1/1810 1808/1/1808 1811/1/1811 +f 1811/1/1811 1809/1/1809 1810/1/1810 +f 1812/1/1812 1809/1/1809 1811/1/1811 +f 1811/1/1811 1813/1/1813 1812/1/1812 +f 1812/1/1812 1813/1/1813 1814/1/1814 +f 1814/1/1814 1397/1/1397 1812/1/1812 +f 1400/1/1400 1397/1/1397 1814/1/1814 +f 1814/1/1814 1401/1/1401 1400/1/1400 +f 1400/1/1400 1401/1/1401 1396/1/1396 +f 1396/1/1396 1401/1/1401 1398/1/1398 +f 1396/1/1396 1398/1/1398 1393/1/1393 +f 1393/1/1393 1394/1/1394 1396/1/1396 +f 1396/1/1396 1394/1/1394 1397/1/1397 +f 1394/1/1394 1395/1/1395 1397/1/1397 +f 1397/1/1397 1395/1/1395 1815/1/1815 +f 1397/1/1397 1815/1/1815 1809/1/1809 +f 1395/1/1395 1536/1/1536 1815/1/1815 +f 1815/1/1815 1536/1/1536 862/1/862 +f 1815/1/1815 862/1/862 1816/1/1816 +f 1536/1/1536 1428/1/1428 862/1/862 +f 862/1/862 1428/1/1428 1429/1/1429 +f 862/1/862 1429/1/1429 863/1/863 +f 862/1/862 863/1/863 859/1/859 +f 859/1/859 863/1/863 861/1/861 +f 863/1/863 864/1/864 861/1/861 +f 861/1/861 864/1/864 860/1/860 +f 861/1/861 860/1/860 858/1/858 +f 864/1/864 865/1/865 860/1/860 +f 860/1/860 865/1/865 866/1/866 +f 860/1/860 866/1/866 808/1/808 +f 808/1/808 866/1/866 809/1/809 +f 866/1/866 867/1/867 809/1/809 +f 867/1/867 801/1/801 809/1/809 +f 867/1/867 800/1/800 801/1/801 +f 867/1/867 870/1/870 800/1/800 +f 870/1/870 795/1/795 800/1/800 +f 800/1/800 795/1/795 797/1/797 +f 800/1/800 797/1/797 798/1/798 +f 795/1/795 793/1/793 797/1/797 +f 797/1/797 793/1/793 792/1/792 +f 792/1/792 793/1/793 790/1/790 +f 795/1/795 796/1/796 793/1/793 +f 796/1/796 794/1/794 793/1/793 +f 793/1/793 794/1/794 791/1/791 +f 796/1/796 895/1/895 794/1/794 +f 895/1/895 1796/1/1796 794/1/794 +f 794/1/794 1796/1/1796 1792/1/1792 +f 1796/1/1796 1797/1/1797 1792/1/1792 +f 1792/1/1792 1797/1/1797 1794/1/1794 +f 1794/1/1794 1797/1/1797 1795/1/1795 +f 1794/1/1794 1795/1/1795 1791/1/1791 +f 1797/1/1797 1799/1/1799 1795/1/1795 +f 1795/1/1795 1799/1/1799 1798/1/1798 +f 1795/1/1795 1798/1/1798 1793/1/1793 +f 1793/1/1793 1798/1/1798 1804/1/1804 +f 1798/1/1798 1799/1/1799 1802/1/1802 +f 1805/1/1805 1798/1/1798 1802/1/1802 +f 1802/1/1802 1806/1/1806 1805/1/1805 +f 1802/1/1802 1799/1/1799 1803/1/1803 +f 1797/1/1797 1801/1/1801 1799/1/1799 +f 1797/1/1797 1800/1/1800 1801/1/1801 +f 1796/1/1796 1800/1/1800 1797/1/1797 +f 2433/1/2433 1800/1/1800 1796/1/1796 +f 2433/1/2433 2432/1/2432 1800/1/1800 +f 2432/1/2432 2430/1/2430 1800/1/1800 +f 2430/1/2430 1808/1/1808 1800/1/1800 +f 2430/1/2430 1813/1/1813 1808/1/1808 +f 2431/1/2431 1813/1/1813 2430/1/2430 +f 2431/1/2431 1401/1/1401 1813/1/1813 +f 1416/1/1416 1401/1/1401 2431/1/2431 +f 1416/1/1416 2431/1/2431 2432/1/2432 +f 1415/1/1415 1416/1/1416 2432/1/2432 +f 1415/1/1415 1414/1/1414 1416/1/1416 +f 1414/1/1414 1412/1/1412 1416/1/1416 +f 1411/1/1411 1412/1/1412 1414/1/1414 +f 1413/1/1413 1411/1/1411 1414/1/1414 +f 1368/1/1368 1411/1/1411 1413/1/1413 +f 893/1/893 1368/1/1368 1413/1/1413 +f 893/1/893 1413/1/1413 894/1/894 +f 888/1/888 893/1/893 894/1/894 +f 888/1/888 894/1/894 878/1/878 +f 886/1/886 888/1/888 878/1/878 +f 886/1/886 878/1/878 879/1/879 +f 883/1/883 886/1/886 879/1/879 +f 883/1/883 879/1/879 880/1/880 +f 882/1/882 883/1/883 880/1/880 +f 882/1/882 880/1/880 881/1/881 +f 1422/1/1422 882/1/882 881/1/881 +f 1422/1/1422 881/1/881 1420/1/1420 +f 1424/1/1424 1422/1/1422 1420/1/1420 +f 1424/1/1424 1420/1/1420 1430/1/1430 +f 1429/1/1429 1424/1/1424 1430/1/1430 +f 1429/1/1429 1423/1/1423 1424/1/1424 +f 1430/1/1430 1420/1/1420 1421/1/1421 +f 1430/1/1430 1421/1/1421 1431/1/1431 +f 863/1/863 1430/1/1430 1431/1/1431 +f 1431/1/1431 1421/1/1421 868/1/868 +f 1431/1/1431 868/1/868 864/1/864 +f 1421/1/1421 875/1/875 868/1/868 +f 875/1/875 871/1/871 868/1/868 +f 868/1/868 871/1/871 869/1/869 +f 868/1/868 869/1/869 865/1/865 +f 865/1/865 869/1/869 867/1/867 +f 871/1/871 872/1/872 869/1/869 +f 869/1/869 872/1/872 870/1/870 +f 871/1/871 873/1/873 872/1/872 +f 873/1/873 874/1/874 872/1/872 +f 872/1/872 874/1/874 795/1/795 +f 873/1/873 877/1/877 874/1/874 +f 877/1/877 796/1/796 874/1/874 +f 877/1/877 878/1/878 796/1/796 +f 876/1/876 877/1/877 873/1/873 +f 875/1/875 876/1/876 873/1/873 +f 881/1/881 876/1/876 875/1/875 +f 880/1/880 877/1/877 876/1/876 +f 875/1/875 873/1/873 871/1/871 +f 1420/1/1420 875/1/875 1421/1/1421 +f 1423/1/1423 1422/1/1422 1424/1/1424 +f 1423/1/1423 1425/1/1425 1422/1/1422 +f 1427/1/1427 1425/1/1425 1423/1/1423 +f 1428/1/1428 1427/1/1427 1423/1/1423 +f 1428/1/1428 1562/1/1562 1427/1/1427 +f 1562/1/1562 1426/1/1426 1427/1/1427 +f 1562/1/1562 1561/1/1561 1426/1/1426 +f 1561/1/1561 1419/1/1419 1426/1/1426 +f 1426/1/1426 1419/1/1419 1425/1/1425 +f 1419/1/1419 884/1/884 1425/1/1425 +f 1425/1/1425 884/1/884 882/1/882 +f 1419/1/1419 885/1/885 884/1/884 +f 884/1/884 885/1/885 883/1/883 +f 1419/1/1419 1557/1/1557 885/1/885 +f 1557/1/1557 886/1/886 885/1/885 +f 1557/1/1557 887/1/887 886/1/886 +f 1554/1/1554 887/1/887 1557/1/1557 +f 1556/1/1556 1554/1/1554 1557/1/1557 +f 1555/1/1555 1554/1/1554 1556/1/1556 +f 1559/1/1559 1555/1/1555 1556/1/1556 +f 1559/1/1559 1556/1/1556 1561/1/1561 +f 1560/1/1560 1559/1/1559 1561/1/1561 +f 1537/1/1537 1559/1/1559 1560/1/1560 +f 1535/1/1535 1537/1/1537 1560/1/1560 +f 1535/1/1535 1560/1/1560 1562/1/1562 +f 1532/1/1532 1537/1/1537 1535/1/1535 +f 1533/1/1533 1532/1/1532 1535/1/1535 +f 1533/1/1533 1535/1/1535 1536/1/1536 +f 1531/1/1531 1532/1/1532 1533/1/1533 +f 1392/1/1392 1531/1/1531 1533/1/1533 +f 1392/1/1392 1533/1/1533 1395/1/1395 +f 1391/1/1391 1531/1/1531 1392/1/1392 +f 1374/1/1374 1391/1/1391 1392/1/1392 +f 1374/1/1374 1392/1/1392 1394/1/1394 +f 1376/1/1376 1391/1/1391 1374/1/1374 +f 1373/1/1373 1376/1/1376 1374/1/1374 +f 1373/1/1373 1374/1/1374 1372/1/1372 +f 1372/1/1372 1367/1/1367 1373/1/1373 +f 1373/1/1373 1367/1/1367 1364/1/1364 +f 1373/1/1373 1364/1/1364 1377/1/1377 +f 1377/1/1377 1364/1/1364 1380/1/1380 +f 1380/1/1380 1376/1/1376 1377/1/1377 +f 1378/1/1378 1376/1/1376 1380/1/1380 +f 1380/1/1380 1363/1/1363 1378/1/1378 +f 1378/1/1378 1363/1/1363 1381/1/1381 +f 1381/1/1381 1379/1/1379 1378/1/1378 +f 1382/1/1382 1379/1/1379 1381/1/1381 +f 1381/1/1381 1357/1/1357 1382/1/1382 +f 1382/1/1382 1357/1/1357 1383/1/1383 +f 1383/1/1383 1357/1/1357 1356/1/1356 +f 1383/1/1383 1356/1/1356 1384/1/1384 +f 1384/1/1384 1385/1/1385 1383/1/1383 +f 1383/1/1383 1385/1/1385 1379/1/1379 +f 1385/1/1385 1388/1/1388 1379/1/1379 +f 1379/1/1379 1388/1/1388 1390/1/1390 +f 1379/1/1379 1390/1/1390 1376/1/1376 +f 1388/1/1388 1480/1/1480 1390/1/1390 +f 1390/1/1390 1480/1/1480 1482/1/1482 +f 1390/1/1390 1482/1/1482 1391/1/1391 +f 1480/1/1480 1481/1/1481 1482/1/1482 +f 1482/1/1482 1481/1/1481 1526/1/1526 +f 1482/1/1482 1526/1/1526 1530/1/1530 +f 1482/1/1482 1530/1/1530 1531/1/1531 +f 1531/1/1531 1530/1/1530 1534/1/1534 +f 1530/1/1530 1539/1/1539 1534/1/1534 +f 1534/1/1534 1539/1/1539 1538/1/1538 +f 1534/1/1534 1538/1/1538 1532/1/1532 +f 1539/1/1539 1540/1/1540 1538/1/1538 +f 1538/1/1538 1540/1/1540 1541/1/1541 +f 1538/1/1538 1541/1/1541 1537/1/1537 +f 1537/1/1537 1541/1/1541 1558/1/1558 +f 1541/1/1541 1553/1/1553 1558/1/1558 +f 1553/1/1553 1555/1/1555 1558/1/1558 +f 1553/1/1553 1552/1/1552 1555/1/1555 +f 1553/1/1553 1551/1/1551 1552/1/1552 +f 1551/1/1551 1418/1/1418 1552/1/1552 +f 1552/1/1552 1418/1/1418 889/1/889 +f 1552/1/1552 889/1/889 1554/1/1554 +f 1418/1/1418 890/1/890 889/1/889 +f 889/1/889 890/1/890 887/1/887 +f 887/1/887 890/1/890 888/1/888 +f 1418/1/1418 891/1/891 890/1/890 +f 891/1/891 892/1/892 890/1/890 +f 890/1/890 892/1/892 893/1/893 +f 891/1/891 896/1/896 892/1/892 +f 896/1/896 1365/1/1365 892/1/892 +f 892/1/892 1365/1/1365 1368/1/1368 +f 1365/1/1365 1366/1/1366 1368/1/1368 +f 1368/1/1368 1366/1/1366 1369/1/1369 +f 1369/1/1369 1366/1/1366 1370/1/1370 +f 1369/1/1369 1370/1/1370 1411/1/1411 +f 1366/1/1366 1371/1/1371 1370/1/1370 +f 1370/1/1370 1371/1/1371 1399/1/1399 +f 1370/1/1370 1399/1/1399 1412/1/1412 +f 1412/1/1412 1399/1/1399 1398/1/1398 +f 1399/1/1399 1371/1/1371 1375/1/1375 +f 1393/1/1393 1399/1/1399 1375/1/1375 +f 1375/1/1375 1374/1/1374 1393/1/1393 +f 1375/1/1375 1371/1/1371 1372/1/1372 +f 1366/1/1366 1367/1/1367 1371/1/1371 +f 1366/1/1366 1361/1/1361 1367/1/1367 +f 1365/1/1365 1361/1/1361 1366/1/1366 +f 1360/1/1360 1361/1/1361 1365/1/1365 +f 1360/1/1360 1358/1/1358 1361/1/1361 +f 1358/1/1358 1362/1/1362 1361/1/1361 +f 1362/1/1362 1364/1/1364 1361/1/1361 +f 1362/1/1362 1363/1/1363 1364/1/1364 +f 1359/1/1359 1363/1/1363 1362/1/1362 +f 1359/1/1359 1357/1/1357 1363/1/1363 +f 1355/1/1355 1357/1/1357 1359/1/1359 +f 1355/1/1355 1359/1/1359 1358/1/1358 +f 901/1/901 1355/1/1355 1358/1/1358 +f 901/1/901 1354/1/1354 1355/1/1355 +f 1354/1/1354 1353/1/1353 1355/1/1355 +f 1351/1/1351 1353/1/1353 1354/1/1354 +f 900/1/900 1351/1/1351 1354/1/1354 +f 905/1/905 1351/1/1351 900/1/900 +f 902/1/902 905/1/905 900/1/900 +f 902/1/902 900/1/900 898/1/898 +f 899/1/899 902/1/902 898/1/898 +f 899/1/899 898/1/898 897/1/897 +f 1508/1/1508 899/1/899 897/1/897 +f 1508/1/1508 897/1/897 1512/1/1512 +f 1511/1/1511 1508/1/1508 1512/1/1512 +f 1511/1/1511 1512/1/1512 1515/1/1515 +f 1514/1/1514 1511/1/1511 1515/1/1515 +f 1514/1/1514 1515/1/1515 1518/1/1518 +f 1520/1/1520 1514/1/1514 1518/1/1518 +f 1520/1/1520 1518/1/1518 1525/1/1525 +f 1524/1/1524 1520/1/1520 1525/1/1525 +f 1524/1/1524 1525/1/1525 1544/1/1544 +f 1526/1/1526 1524/1/1524 1544/1/1544 +f 1526/1/1526 1523/1/1523 1524/1/1524 +f 1544/1/1544 1525/1/1525 1545/1/1545 +f 1544/1/1544 1545/1/1545 1543/1/1543 +f 1530/1/1530 1544/1/1544 1543/1/1543 +f 1543/1/1543 1545/1/1545 1542/1/1542 +f 1543/1/1543 1542/1/1542 1539/1/1539 +f 1545/1/1545 1546/1/1546 1542/1/1542 +f 1546/1/1546 1548/1/1548 1542/1/1542 +f 1542/1/1542 1548/1/1548 1550/1/1550 +f 1542/1/1542 1550/1/1550 1540/1/1540 +f 1540/1/1540 1550/1/1550 1553/1/1553 +f 1548/1/1548 1549/1/1549 1550/1/1550 +f 1550/1/1550 1549/1/1549 1551/1/1551 +f 1548/1/1548 1547/1/1547 1549/1/1549 +f 1547/1/1547 1417/1/1417 1549/1/1549 +f 1549/1/1549 1417/1/1417 1418/1/1418 +f 1547/1/1547 1516/1/1516 1417/1/1417 +f 1516/1/1516 891/1/891 1417/1/1417 +f 1516/1/1516 897/1/897 891/1/891 +f 1517/1/1517 1516/1/1516 1547/1/1547 +f 1546/1/1546 1517/1/1517 1547/1/1547 +f 1518/1/1518 1517/1/1517 1546/1/1546 +f 1515/1/1515 1516/1/1516 1517/1/1517 +f 1546/1/1546 1547/1/1547 1548/1/1548 +f 1525/1/1525 1546/1/1546 1545/1/1545 +f 1523/1/1523 1520/1/1520 1524/1/1524 +f 1523/1/1523 1519/1/1519 1520/1/1520 +f 1521/1/1521 1519/1/1519 1523/1/1523 +f 1481/1/1481 1521/1/1521 1523/1/1523 +f 1481/1/1481 1527/1/1527 1521/1/1521 +f 1527/1/1527 1522/1/1522 1521/1/1521 +f 1527/1/1527 1528/1/1528 1522/1/1522 +f 1528/1/1528 1510/1/1510 1522/1/1522 +f 1522/1/1522 1510/1/1510 1519/1/1519 +f 1510/1/1510 1513/1/1513 1519/1/1519 +f 1519/1/1519 1513/1/1513 1514/1/1514 +f 1510/1/1510 1509/1/1509 1513/1/1513 +f 1513/1/1513 1509/1/1509 1511/1/1511 +f 1510/1/1510 1507/1/1507 1509/1/1509 +f 1507/1/1507 1508/1/1508 1509/1/1509 +f 1507/1/1507 908/1/908 1508/1/1508 +f 1504/1/1504 908/1/908 1507/1/1507 +f 1506/1/1506 1504/1/1504 1507/1/1507 +f 1501/1/1501 1504/1/1504 1506/1/1506 +f 1505/1/1505 1501/1/1501 1506/1/1506 +f 1505/1/1505 1506/1/1506 1528/1/1528 +f 1529/1/1529 1505/1/1505 1528/1/1528 +f 1488/1/1488 1505/1/1505 1529/1/1529 +f 1483/1/1483 1488/1/1488 1529/1/1529 +f 1483/1/1483 1529/1/1529 1527/1/1527 +f 1485/1/1485 1488/1/1488 1483/1/1483 +f 1484/1/1484 1485/1/1485 1483/1/1483 +f 1484/1/1484 1483/1/1483 1480/1/1480 +f 1486/1/1486 1485/1/1485 1484/1/1484 +f 1389/1/1389 1486/1/1486 1484/1/1484 +f 1389/1/1389 1484/1/1484 1388/1/1388 +f 1588/1/1588 1486/1/1486 1389/1/1389 +f 1387/1/1387 1588/1/1588 1389/1/1389 +f 1387/1/1387 1389/1/1389 1385/1/1385 +f 1404/1/1404 1588/1/1588 1387/1/1387 +f 1403/1/1403 1404/1/1404 1387/1/1387 +f 1403/1/1403 1387/1/1387 1402/1/1402 +f 1402/1/1402 1346/1/1346 1403/1/1403 +f 1403/1/1403 1346/1/1346 1344/1/1344 +f 1403/1/1403 1344/1/1344 1405/1/1405 +f 1405/1/1405 1344/1/1344 1406/1/1406 +f 1406/1/1406 1404/1/1404 1405/1/1405 +f 1407/1/1407 1404/1/1404 1406/1/1406 +f 1406/1/1406 1338/1/1338 1407/1/1407 +f 1407/1/1407 1338/1/1338 1409/1/1409 +f 1409/1/1409 1408/1/1408 1407/1/1407 +f 1410/1/1410 1408/1/1408 1409/1/1409 +f 1409/1/1409 1333/1/1333 1410/1/1410 +f 1410/1/1410 1333/1/1333 1336/1/1336 +f 1336/1/1336 1333/1/1333 1332/1/1332 +f 1336/1/1336 1332/1/1332 1335/1/1335 +f 1335/1/1335 1590/1/1590 1336/1/1336 +f 1336/1/1336 1590/1/1590 1408/1/1408 +f 1590/1/1590 1589/1/1589 1408/1/1408 +f 1408/1/1408 1589/1/1589 1587/1/1587 +f 1408/1/1408 1587/1/1587 1404/1/1404 +f 1589/1/1589 1585/1/1585 1587/1/1587 +f 1587/1/1587 1585/1/1585 1575/1/1575 +f 1587/1/1587 1575/1/1575 1588/1/1588 +f 1585/1/1585 1576/1/1576 1575/1/1575 +f 1575/1/1575 1576/1/1576 1574/1/1574 +f 1575/1/1575 1574/1/1574 1493/1/1493 +f 1575/1/1575 1493/1/1493 1486/1/1486 +f 1486/1/1486 1493/1/1493 1489/1/1489 +f 1493/1/1493 1492/1/1492 1489/1/1489 +f 1489/1/1489 1492/1/1492 1487/1/1487 +f 1489/1/1489 1487/1/1487 1485/1/1485 +f 1492/1/1492 1490/1/1490 1487/1/1487 +f 1487/1/1487 1490/1/1490 1491/1/1491 +f 1487/1/1487 1491/1/1491 1488/1/1488 +f 1488/1/1488 1491/1/1491 1498/1/1498 +f 1491/1/1491 1497/1/1497 1498/1/1498 +f 1497/1/1497 1501/1/1501 1498/1/1498 +f 1497/1/1497 1500/1/1500 1501/1/1501 +f 1497/1/1497 1499/1/1499 1500/1/1500 +f 1499/1/1499 913/1/913 1500/1/1500 +f 1500/1/1500 913/1/913 907/1/907 +f 1500/1/1500 907/1/907 1504/1/1504 +f 913/1/913 903/1/903 907/1/907 +f 907/1/907 903/1/903 908/1/908 +f 908/1/908 903/1/903 899/1/899 +f 913/1/913 906/1/906 903/1/903 +f 906/1/906 904/1/904 903/1/903 +f 903/1/903 904/1/904 902/1/902 +f 906/1/906 909/1/909 904/1/904 +f 909/1/909 1345/1/1345 904/1/904 +f 904/1/904 1345/1/1345 905/1/905 +f 1345/1/1345 1347/1/1347 905/1/905 +f 905/1/905 1347/1/1347 1349/1/1349 +f 1349/1/1349 1347/1/1347 1350/1/1350 +f 1349/1/1349 1350/1/1350 1351/1/1351 +f 1347/1/1347 1348/1/1348 1350/1/1350 +f 1350/1/1350 1348/1/1348 1352/1/1352 +f 1350/1/1350 1352/1/1352 1353/1/1353 +f 1353/1/1353 1352/1/1352 1356/1/1356 +f 1352/1/1352 1348/1/1348 1386/1/1386 +f 1384/1/1384 1352/1/1352 1386/1/1386 +f 1386/1/1386 1387/1/1387 1384/1/1384 +f 1386/1/1386 1348/1/1348 1402/1/1402 +f 1347/1/1347 1346/1/1346 1348/1/1348 +f 1347/1/1347 1342/1/1342 1346/1/1346 +f 1345/1/1345 1342/1/1342 1347/1/1347 +f 1341/1/1341 1342/1/1342 1345/1/1345 +f 1341/1/1341 1339/1/1339 1342/1/1342 +f 1339/1/1339 1343/1/1343 1342/1/1342 +f 1343/1/1343 1344/1/1344 1342/1/1342 +f 1343/1/1343 1338/1/1338 1344/1/1344 +f 1337/1/1337 1338/1/1338 1343/1/1343 +f 1337/1/1337 1333/1/1333 1338/1/1338 +f 1334/1/1334 1333/1/1333 1337/1/1337 +f 1334/1/1334 1337/1/1337 1339/1/1339 +f 1340/1/1340 1334/1/1334 1339/1/1339 +f 1340/1/1340 1331/1/1331 1334/1/1334 +f 1331/1/1331 1329/1/1329 1334/1/1334 +f 1326/1/1326 1329/1/1329 1331/1/1331 +f 1323/1/1323 1326/1/1326 1331/1/1331 +f 1322/1/1322 1326/1/1326 1323/1/1323 +f 918/1/918 1322/1/1322 1323/1/1323 +f 918/1/918 1323/1/1323 914/1/914 +f 917/1/917 918/1/918 914/1/914 +f 917/1/917 914/1/914 911/1/911 +f 916/1/916 917/1/917 911/1/911 +f 916/1/916 911/1/911 915/1/915 +f 1321/1/1321 916/1/916 915/1/915 +f 1321/1/1321 915/1/915 1566/1/1566 +f 1568/1/1568 1321/1/1321 1566/1/1566 +f 1568/1/1568 1566/1/1566 1567/1/1567 +f 1572/1/1572 1568/1/1568 1567/1/1567 +f 1572/1/1572 1567/1/1567 1569/1/1569 +f 1573/1/1573 1572/1/1572 1569/1/1569 +f 1573/1/1573 1569/1/1569 1570/1/1570 +f 1574/1/1574 1573/1/1573 1570/1/1570 +f 1574/1/1574 1577/1/1577 1573/1/1573 +f 1570/1/1570 1569/1/1569 1571/1/1571 +f 1570/1/1570 1571/1/1571 1494/1/1494 +f 1493/1/1493 1570/1/1570 1494/1/1494 +f 1494/1/1494 1571/1/1571 1495/1/1495 +f 1494/1/1494 1495/1/1495 1492/1/1492 +f 1571/1/1571 1564/1/1564 1495/1/1495 +f 1564/1/1564 1502/1/1502 1495/1/1495 +f 1495/1/1495 1502/1/1502 1496/1/1496 +f 1495/1/1495 1496/1/1496 1490/1/1490 +f 1490/1/1490 1496/1/1496 1497/1/1497 +f 1502/1/1502 1503/1/1503 1496/1/1496 +f 1496/1/1496 1503/1/1503 1499/1/1499 +f 1502/1/1502 1563/1/1563 1503/1/1503 +f 1563/1/1563 912/1/912 1503/1/1503 +f 1503/1/1503 912/1/912 913/1/913 +f 1563/1/1563 910/1/910 912/1/912 +f 910/1/910 906/1/906 912/1/912 +f 910/1/910 911/1/911 906/1/906 +f 1565/1/1565 910/1/910 1563/1/1563 +f 1564/1/1564 1565/1/1565 1563/1/1563 +f 1567/1/1567 1565/1/1565 1564/1/1564 +f 1566/1/1566 910/1/910 1565/1/1565 +f 1564/1/1564 1563/1/1563 1502/1/1502 +f 1569/1/1569 1564/1/1564 1571/1/1571 +f 1577/1/1577 1572/1/1572 1573/1/1573 +f 1577/1/1577 1579/1/1579 1572/1/1572 +f 1578/1/1578 1579/1/1579 1577/1/1577 +f 1576/1/1576 1578/1/1578 1577/1/1577 +f 1576/1/1576 1580/1/1580 1578/1/1578 +f 1580/1/1580 1581/1/1581 1578/1/1578 +f 1580/1/1580 950/1/950 1581/1/1581 +f 950/1/950 1319/1/1319 1581/1/1581 +f 1581/1/1581 1319/1/1319 1579/1/1579 +f 1319/1/1319 1582/1/1582 1579/1/1579 +f 1579/1/1579 1582/1/1582 1568/1/1568 +f 1319/1/1319 1320/1/1320 1582/1/1582 +f 1582/1/1582 1320/1/1320 1321/1/1321 +f 1319/1/1319 923/1/923 1320/1/1320 +f 923/1/923 916/1/916 1320/1/1320 +f 923/1/923 919/1/919 916/1/916 +f 922/1/922 919/1/919 923/1/923 +f 929/1/929 922/1/922 923/1/923 +f 928/1/928 922/1/922 929/1/929 +f 949/1/949 928/1/928 929/1/929 +f 949/1/949 929/1/929 950/1/950 +f 1583/1/1583 949/1/949 950/1/950 +f 948/1/948 949/1/949 1583/1/1583 +f 1584/1/1584 948/1/948 1583/1/1583 +f 1584/1/1584 1583/1/1583 1580/1/1580 +f 956/1/956 948/1/948 1584/1/1584 +f 1586/1/1586 956/1/956 1584/1/1584 +f 1586/1/1586 1584/1/1584 1585/1/1585 +f 955/1/955 956/1/956 1586/1/1586 +f 1591/1/1591 955/1/955 1586/1/1586 +f 1591/1/1591 1586/1/1586 1589/1/1589 +f 1593/1/1593 955/1/955 1591/1/1591 +f 1592/1/1592 1593/1/1593 1591/1/1591 +f 1592/1/1592 1591/1/1591 1590/1/1590 +f 1594/1/1594 1593/1/1593 1592/1/1592 +f 1635/1/1635 1594/1/1594 1592/1/1592 +f 1635/1/1635 1592/1/1592 1637/1/1637 +f 1637/1/1637 1634/1/1634 1635/1/1635 +f 1635/1/1635 1634/1/1634 1631/1/1631 +f 1635/1/1635 1631/1/1631 1636/1/1636 +f 1636/1/1636 1631/1/1631 1632/1/1632 +f 1632/1/1632 1594/1/1594 1636/1/1636 +f 1633/1/1633 1594/1/1594 1632/1/1632 +f 1632/1/1632 1629/1/1629 1633/1/1633 +f 1633/1/1633 1629/1/1629 1630/1/1630 +f 1630/1/1630 1596/1/1596 1633/1/1633 +f 1604/1/1604 1596/1/1596 1630/1/1630 +f 1630/1/1630 1606/1/1606 1604/1/1604 +f 1604/1/1604 1606/1/1606 1602/1/1602 +f 1602/1/1602 1606/1/1606 1605/1/1605 +f 1602/1/1602 1605/1/1605 1603/1/1603 +f 1603/1/1603 1598/1/1598 1602/1/1602 +f 1602/1/1602 1598/1/1598 1596/1/1596 +f 1598/1/1598 1597/1/1597 1596/1/1596 +f 1596/1/1596 1597/1/1597 1595/1/1595 +f 1596/1/1596 1595/1/1595 1594/1/1594 +f 1597/1/1597 1001/1/1001 1595/1/1595 +f 1595/1/1595 1001/1/1001 952/1/952 +f 1595/1/1595 952/1/952 1593/1/1593 +f 1001/1/1001 999/1/999 952/1/952 +f 952/1/952 999/1/999 953/1/953 +f 952/1/952 953/1/953 951/1/951 +f 952/1/952 951/1/951 955/1/955 +f 953/1/953 954/1/954 951/1/951 +f 951/1/951 954/1/954 942/1/942 +f 951/1/951 942/1/942 943/1/943 +f 951/1/951 943/1/943 956/1/956 +f 956/1/956 943/1/943 945/1/945 +f 943/1/943 941/1/941 945/1/945 +f 945/1/945 941/1/941 946/1/946 +f 945/1/945 946/1/946 948/1/948 +f 948/1/948 946/1/946 947/1/947 +f 946/1/946 930/1/930 947/1/947 +f 930/1/930 928/1/928 947/1/947 +f 930/1/930 927/1/927 928/1/928 +f 930/1/930 931/1/931 927/1/927 +f 931/1/931 926/1/926 927/1/927 +f 927/1/927 926/1/926 921/1/921 +f 927/1/927 921/1/921 922/1/922 +f 926/1/926 920/1/920 921/1/921 +f 921/1/921 920/1/920 919/1/919 +f 919/1/919 920/1/920 917/1/917 +f 926/1/926 924/1/924 920/1/920 +f 924/1/924 925/1/925 920/1/920 +f 920/1/920 925/1/925 918/1/918 +f 924/1/924 976/1/976 925/1/925 +f 976/1/976 1324/1/1324 925/1/925 +f 925/1/925 1324/1/1324 1322/1/1322 +f 1324/1/1324 1327/1/1327 1322/1/1322 +f 1322/1/1322 1327/1/1327 1325/1/1325 +f 1325/1/1325 1327/1/1327 1328/1/1328 +f 1325/1/1325 1328/1/1328 1326/1/1326 +f 1327/1/1327 1639/1/1639 1328/1/1328 +f 1328/1/1328 1639/1/1639 1330/1/1330 +f 1328/1/1328 1330/1/1330 1329/1/1329 +f 1329/1/1329 1330/1/1330 1332/1/1332 +f 1330/1/1330 1639/1/1639 1638/1/1638 +f 1335/1/1335 1330/1/1330 1638/1/1638 +f 1638/1/1638 1592/1/1592 1335/1/1335 +f 1638/1/1638 1639/1/1639 1637/1/1637 +f 1327/1/1327 1634/1/1634 1639/1/1639 +f 1327/1/1327 1628/1/1628 1634/1/1634 +f 1324/1/1324 1628/1/1628 1327/1/1327 +f 1626/1/1626 1628/1/1628 1324/1/1324 +f 1626/1/1626 1624/1/1624 1628/1/1628 +f 1624/1/1624 1627/1/1627 1628/1/1628 +f 1627/1/1627 1631/1/1631 1628/1/1628 +f 1627/1/1627 1629/1/1629 1631/1/1631 +f 1625/1/1625 1629/1/1629 1627/1/1627 +f 1625/1/1625 1606/1/1606 1629/1/1629 +f 1623/1/1623 1606/1/1606 1625/1/1625 +f 1623/1/1623 1625/1/1625 1624/1/1624 +f 1622/1/1622 1623/1/1623 1624/1/1624 +f 1622/1/1622 1621/1/1621 1623/1/1623 +f 1621/1/1621 1609/1/1609 1623/1/1623 +f 1616/1/1616 1609/1/1609 1621/1/1621 +f 1620/1/1620 1616/1/1616 1621/1/1621 +f 1619/1/1619 1616/1/1616 1620/1/1620 +f 978/1/978 1619/1/1619 1620/1/1620 +f 978/1/978 1620/1/1620 975/1/975 +f 972/1/972 978/1/978 975/1/975 +f 972/1/972 975/1/975 973/1/973 +f 969/1/969 972/1/972 973/1/973 +f 969/1/969 973/1/973 967/1/967 +f 965/1/965 969/1/969 967/1/967 +f 965/1/965 967/1/967 964/1/964 +f 963/1/963 965/1/965 964/1/964 +f 963/1/963 964/1/964 960/1/960 +f 959/1/959 963/1/963 960/1/960 +f 959/1/959 960/1/960 958/1/958 +f 957/1/957 959/1/959 958/1/958 +f 957/1/957 958/1/958 954/1/954 +f 954/1/954 958/1/958 944/1/944 +f 958/1/958 938/1/938 944/1/944 +f 944/1/944 938/1/938 940/1/940 +f 942/1/942 944/1/944 940/1/940 +f 938/1/938 935/1/935 940/1/940 +f 940/1/940 935/1/935 934/1/934 +f 940/1/940 934/1/934 941/1/941 +f 941/1/941 934/1/934 930/1/930 +f 935/1/935 933/1/933 934/1/934 +f 934/1/934 933/1/933 931/1/931 +f 935/1/935 936/1/936 933/1/933 +f 936/1/936 932/1/932 933/1/933 +f 933/1/933 932/1/932 926/1/926 +f 936/1/936 937/1/937 932/1/932 +f 937/1/937 924/1/924 932/1/932 +f 937/1/937 973/1/973 924/1/924 +f 939/1/939 937/1/937 936/1/936 +f 938/1/938 939/1/939 936/1/936 +f 960/1/960 939/1/939 938/1/938 +f 964/1/964 937/1/937 939/1/939 +f 938/1/938 936/1/936 935/1/935 +f 961/1/961 959/1/959 957/1/957 +f 953/1/953 961/1/961 957/1/957 +f 961/1/961 962/1/962 959/1/959 +f 1003/1/1003 962/1/962 961/1/961 +f 999/1/999 1003/1/1003 961/1/961 +f 999/1/999 998/1/998 1003/1/1003 +f 998/1/998 1002/1/1002 1003/1/1003 +f 998/1/998 991/1/991 1002/1/1002 +f 991/1/991 970/1/970 1002/1/1002 +f 1002/1/1002 970/1/970 962/1/962 +f 970/1/970 966/1/966 962/1/962 +f 962/1/962 966/1/966 963/1/963 +f 970/1/970 968/1/968 966/1/966 +f 966/1/966 968/1/968 965/1/965 +f 970/1/970 971/1/971 968/1/968 +f 971/1/971 969/1/969 968/1/968 +f 971/1/971 974/1/974 969/1/969 +f 979/1/979 974/1/974 971/1/971 +f 986/1/986 979/1/979 971/1/971 +f 985/1/985 979/1/979 986/1/986 +f 990/1/990 985/1/985 986/1/986 +f 990/1/990 986/1/986 991/1/991 +f 993/1/993 990/1/990 991/1/991 +f 992/1/992 990/1/990 993/1/993 +f 996/1/996 992/1/992 993/1/993 +f 996/1/996 993/1/993 998/1/998 +f 995/1/995 992/1/992 996/1/996 +f 1000/1/1000 995/1/995 996/1/996 +f 1000/1/1000 996/1/996 1001/1/1001 +f 1004/1/1004 995/1/995 1000/1/1000 +f 1599/1/1599 1004/1/1004 1000/1/1000 +f 1599/1/1599 1000/1/1000 1597/1/1597 +f 1601/1/1601 1004/1/1004 1599/1/1599 +f 1600/1/1600 1601/1/1601 1599/1/1599 +f 1600/1/1600 1599/1/1599 1598/1/1598 +f 1652/1/1652 1601/1/1601 1600/1/1600 +f 1655/1/1655 1652/1/1652 1600/1/1600 +f 1655/1/1655 1600/1/1600 1612/1/1612 +f 1612/1/1612 1613/1/1613 1655/1/1655 +f 1655/1/1655 1613/1/1613 1645/1/1645 +f 1655/1/1655 1645/1/1645 1654/1/1654 +f 1654/1/1654 1645/1/1645 1653/1/1653 +f 1653/1/1653 1652/1/1652 1654/1/1654 +f 1651/1/1651 1652/1/1652 1653/1/1653 +f 1653/1/1653 1646/1/1646 1651/1/1651 +f 1651/1/1651 1646/1/1646 1648/1/1648 +f 1648/1/1648 1650/1/1650 1651/1/1651 +f 1649/1/1649 1650/1/1650 1648/1/1648 +f 1648/1/1648 1647/1/1647 1649/1/1649 +f 1649/1/1649 1647/1/1647 1308/1/1308 +f 1308/1/1308 1647/1/1647 1309/1/1309 +f 1308/1/1308 1309/1/1309 1305/1/1305 +f 1305/1/1305 1306/1/1306 1308/1/1308 +f 1308/1/1308 1306/1/1306 1650/1/1650 +f 1306/1/1306 1310/1/1310 1650/1/1650 +f 1650/1/1650 1310/1/1310 1656/1/1656 +f 1650/1/1650 1656/1/1656 1652/1/1652 +f 1310/1/1310 1657/1/1657 1656/1/1656 +f 1656/1/1656 1657/1/1657 1007/1/1007 +f 1656/1/1656 1007/1/1007 1601/1/1601 +f 1657/1/1657 1316/1/1316 1007/1/1007 +f 1007/1/1007 1316/1/1316 1008/1/1008 +f 1007/1/1007 1008/1/1008 1006/1/1006 +f 1007/1/1007 1006/1/1006 1004/1/1004 +f 1004/1/1004 1006/1/1006 1005/1/1005 +f 1006/1/1006 1011/1/1011 1005/1/1005 +f 1005/1/1005 1011/1/1011 997/1/997 +f 1005/1/1005 997/1/997 995/1/995 +f 1011/1/1011 1313/1/1313 997/1/997 +f 997/1/997 1313/1/1313 994/1/994 +f 997/1/997 994/1/994 992/1/992 +f 992/1/992 994/1/994 989/1/989 +f 994/1/994 988/1/988 989/1/989 +f 988/1/988 985/1/985 989/1/989 +f 988/1/988 984/1/984 985/1/985 +f 988/1/988 987/1/987 984/1/984 +f 987/1/987 981/1/981 984/1/984 +f 984/1/984 981/1/981 980/1/980 +f 984/1/984 980/1/980 979/1/979 +f 981/1/981 977/1/977 980/1/980 +f 980/1/980 977/1/977 974/1/974 +f 974/1/974 977/1/977 972/1/972 +f 981/1/981 982/1/982 977/1/977 +f 982/1/982 983/1/983 977/1/977 +f 977/1/977 983/1/983 978/1/978 +f 982/1/982 1031/1/1031 983/1/983 +f 1031/1/1031 1617/1/1617 983/1/983 +f 983/1/983 1617/1/1617 1619/1/1619 +f 1617/1/1617 1614/1/1614 1619/1/1619 +f 1619/1/1619 1614/1/1614 1615/1/1615 +f 1615/1/1615 1614/1/1614 1611/1/1611 +f 1615/1/1615 1611/1/1611 1616/1/1616 +f 1614/1/1614 1610/1/1610 1611/1/1611 +f 1611/1/1611 1610/1/1610 1608/1/1608 +f 1611/1/1611 1608/1/1608 1609/1/1609 +f 1609/1/1609 1608/1/1608 1605/1/1605 +f 1608/1/1608 1610/1/1610 1607/1/1607 +f 1603/1/1603 1608/1/1608 1607/1/1607 +f 1607/1/1607 1600/1/1600 1603/1/1603 +f 1607/1/1607 1610/1/1610 1612/1/1612 +f 1614/1/1614 1613/1/1613 1610/1/1610 +f 1614/1/1614 1618/1/1618 1613/1/1613 +f 1617/1/1617 1618/1/1618 1614/1/1614 +f 1640/1/1640 1618/1/1618 1617/1/1617 +f 1640/1/1640 1641/1/1641 1618/1/1618 +f 1641/1/1641 1644/1/1644 1618/1/1618 +f 1644/1/1644 1645/1/1645 1618/1/1618 +f 1644/1/1644 1646/1/1646 1645/1/1645 +f 1643/1/1643 1646/1/1646 1644/1/1644 +f 1643/1/1643 1647/1/1647 1646/1/1646 +f 1642/1/1642 1647/1/1647 1643/1/1643 +f 1642/1/1642 1643/1/1643 1641/1/1641 +f 1072/1/1072 1642/1/1642 1641/1/1641 +f 1072/1/1072 1071/1/1071 1642/1/1642 +f 1071/1/1071 1074/1/1074 1642/1/1642 +f 1069/1/1069 1074/1/1074 1071/1/1071 +f 1070/1/1070 1069/1/1069 1071/1/1071 +f 1068/1/1068 1069/1/1069 1070/1/1070 +f 1036/1/1036 1068/1/1068 1070/1/1070 +f 1036/1/1036 1070/1/1070 1032/1/1032 +f 1033/1/1033 1036/1/1036 1032/1/1032 +f 1033/1/1033 1032/1/1032 1030/1/1030 +f 1034/1/1034 1033/1/1033 1030/1/1030 +f 1034/1/1034 1030/1/1030 1035/1/1035 +f 1048/1/1048 1034/1/1034 1035/1/1035 +f 1048/1/1048 1035/1/1035 1025/1/1025 +f 1021/1/1021 1048/1/1048 1025/1/1025 +f 1021/1/1021 1025/1/1025 1019/1/1019 +f 1018/1/1018 1021/1/1021 1019/1/1019 +f 1018/1/1018 1019/1/1019 1014/1/1014 +f 1012/1/1012 1018/1/1018 1014/1/1014 +f 1012/1/1012 1014/1/1014 1009/1/1009 +f 1008/1/1008 1012/1/1012 1009/1/1009 +f 1008/1/1008 1013/1/1013 1012/1/1012 +f 1009/1/1009 1014/1/1014 1015/1/1015 +f 1009/1/1009 1015/1/1015 1010/1/1010 +f 1006/1/1006 1009/1/1009 1010/1/1010 +f 1010/1/1010 1015/1/1015 1016/1/1016 +f 1010/1/1010 1016/1/1016 1011/1/1011 +f 1015/1/1015 1017/1/1017 1016/1/1016 +f 1017/1/1017 1024/1/1024 1016/1/1016 +f 1016/1/1016 1024/1/1024 1029/1/1029 +f 1016/1/1016 1029/1/1029 1313/1/1313 +f 1313/1/1313 1029/1/1029 988/1/988 +f 1024/1/1024 1028/1/1028 1029/1/1029 +f 1029/1/1029 1028/1/1028 987/1/987 +f 1024/1/1024 1023/1/1023 1028/1/1028 +f 1023/1/1023 1027/1/1027 1028/1/1028 +f 1028/1/1028 1027/1/1027 981/1/981 +f 1023/1/1023 1026/1/1026 1027/1/1027 +f 1026/1/1026 982/1/982 1027/1/1027 +f 1026/1/1026 1030/1/1030 982/1/982 +f 1022/1/1022 1026/1/1026 1023/1/1023 +f 1017/1/1017 1022/1/1022 1023/1/1023 +f 1019/1/1019 1022/1/1022 1017/1/1017 +f 1025/1/1025 1026/1/1026 1022/1/1022 +f 1017/1/1017 1023/1/1023 1024/1/1024 +f 1014/1/1014 1017/1/1017 1015/1/1015 +f 1013/1/1013 1018/1/1018 1012/1/1012 +f 1013/1/1013 1020/1/1020 1018/1/1018 +f 1314/1/1314 1020/1/1020 1013/1/1013 +f 1316/1/1316 1314/1/1314 1013/1/1013 +f 1316/1/1316 1317/1/1317 1314/1/1314 +f 1317/1/1317 1315/1/1315 1314/1/1314 +f 1317/1/1317 1318/1/1318 1315/1/1315 +f 1318/1/1318 1045/1/1045 1315/1/1315 +f 1315/1/1315 1045/1/1045 1020/1/1020 +f 1045/1/1045 1047/1/1047 1020/1/1020 +f 1020/1/1020 1047/1/1047 1021/1/1021 +f 1045/1/1045 1046/1/1046 1047/1/1047 +f 1047/1/1047 1046/1/1046 1048/1/1048 +f 1045/1/1045 1043/1/1043 1046/1/1046 +f 1043/1/1043 1034/1/1034 1046/1/1046 +f 1043/1/1043 1038/1/1038 1034/1/1034 +f 1042/1/1042 1038/1/1038 1043/1/1043 +f 1044/1/1044 1042/1/1042 1043/1/1043 +f 1684/1/1684 1042/1/1042 1044/1/1044 +f 1776/1/1776 1684/1/1684 1044/1/1044 +f 1776/1/1776 1044/1/1044 1318/1/1318 +f 1777/1/1777 1776/1/1776 1318/1/1318 +f 1665/1/1665 1776/1/1776 1777/1/1777 +f 1659/1/1659 1665/1/1665 1777/1/1777 +f 1659/1/1659 1777/1/1777 1317/1/1317 +f 1661/1/1661 1665/1/1665 1659/1/1659 +f 1658/1/1658 1661/1/1661 1659/1/1659 +f 1658/1/1658 1659/1/1659 1657/1/1657 +f 1660/1/1660 1661/1/1661 1658/1/1658 +f 1307/1/1307 1660/1/1660 1658/1/1658 +f 1307/1/1307 1658/1/1658 1310/1/1310 +f 1087/1/1087 1660/1/1660 1307/1/1307 +f 1083/1/1083 1087/1/1087 1307/1/1307 +f 1083/1/1083 1307/1/1307 1306/1/1306 +f 1084/1/1084 1087/1/1087 1083/1/1083 +f 1081/1/1081 1084/1/1084 1083/1/1083 +f 1081/1/1081 1083/1/1083 1080/1/1080 +f 1080/1/1080 1078/1/1078 1081/1/1081 +f 1081/1/1081 1078/1/1078 1082/1/1082 +f 1082/1/1082 1078/1/1078 1079/1/1079 +f 1082/1/1082 1079/1/1079 1085/1/1085 +f 1085/1/1085 1084/1/1084 1082/1/1082 +f 1085/1/1085 1088/1/1088 1084/1/1084 +f 1088/1/1088 1086/1/1086 1084/1/1084 +f 1088/1/1088 1098/1/1098 1086/1/1086 +f 1098/1/1098 1711/1/1711 1086/1/1086 +f 1086/1/1086 1711/1/1711 1714/1/1714 +f 1086/1/1086 1714/1/1714 1664/1/1664 +f 1086/1/1086 1664/1/1664 1087/1/1087 +f 1714/1/1714 1715/1/1715 1664/1/1664 +f 1664/1/1664 1715/1/1715 1662/1/1662 +f 1664/1/1664 1662/1/1662 1660/1/1660 +f 1660/1/1660 1662/1/1662 1663/1/1663 +f 1662/1/1662 1668/1/1668 1663/1/1663 +f 1663/1/1663 1668/1/1668 1667/1/1667 +f 1663/1/1663 1667/1/1667 1666/1/1666 +f 1663/1/1663 1666/1/1666 1661/1/1661 +f 1667/1/1667 1670/1/1670 1666/1/1666 +f 1666/1/1666 1670/1/1670 1669/1/1669 +f 1666/1/1666 1669/1/1669 1665/1/1665 +f 1665/1/1665 1669/1/1669 1775/1/1775 +f 1669/1/1669 1677/1/1677 1775/1/1775 +f 1677/1/1677 1684/1/1684 1775/1/1775 +f 1677/1/1677 1683/1/1683 1684/1/1684 +f 1677/1/1677 1679/1/1679 1683/1/1683 +f 1679/1/1679 1682/1/1682 1683/1/1683 +f 1683/1/1683 1682/1/1682 1040/1/1040 +f 1683/1/1683 1040/1/1040 1042/1/1042 +f 1682/1/1682 1037/1/1037 1040/1/1040 +f 1040/1/1040 1037/1/1037 1038/1/1038 +f 1038/1/1038 1037/1/1037 1033/1/1033 +f 1682/1/1682 1041/1/1041 1037/1/1037 +f 1041/1/1041 1039/1/1039 1037/1/1037 +f 1037/1/1037 1039/1/1039 1036/1/1036 +f 1041/1/1041 1049/1/1049 1039/1/1039 +f 1049/1/1049 1062/1/1062 1039/1/1039 +f 1039/1/1039 1062/1/1062 1064/1/1064 +f 1039/1/1039 1064/1/1064 1068/1/1068 +f 1064/1/1064 1067/1/1067 1068/1/1068 +f 1064/1/1064 1063/1/1063 1067/1/1067 +f 1063/1/1063 1066/1/1066 1067/1/1067 +f 1066/1/1066 1078/1/1078 1067/1/1067 +f 1067/1/1067 1078/1/1078 1075/1/1075 +f 1067/1/1067 1075/1/1075 1073/1/1073 +f 1067/1/1067 1073/1/1073 1069/1/1069 +f 1073/1/1073 1075/1/1075 1076/1/1076 +f 1073/1/1073 1076/1/1076 1074/1/1074 +f 1074/1/1074 1076/1/1076 1309/1/1309 +f 1076/1/1076 1075/1/1075 1077/1/1077 +f 1305/1/1305 1076/1/1076 1077/1/1077 +f 1077/1/1077 1083/1/1083 1305/1/1305 +f 1077/1/1077 1075/1/1075 1080/1/1080 +f 1061/1/1061 1066/1/1066 1063/1/1063 +f 1062/1/1062 1061/1/1061 1063/1/1063 +f 1057/1/1057 1061/1/1061 1062/1/1062 +f 1057/1/1057 1059/1/1059 1061/1/1061 +f 1059/1/1059 1065/1/1065 1061/1/1061 +f 1059/1/1059 1095/1/1095 1065/1/1065 +f 1095/1/1095 1093/1/1093 1065/1/1065 +f 1065/1/1065 1093/1/1093 1079/1/1079 +f 1065/1/1065 1079/1/1079 1066/1/1066 +f 1089/1/1089 1079/1/1079 1093/1/1093 +f 1089/1/1089 1093/1/1093 1090/1/1090 +f 1090/1/1090 1088/1/1088 1089/1/1089 +f 1091/1/1091 1088/1/1088 1090/1/1090 +f 1091/1/1091 1092/1/1092 1088/1/1088 +f 1096/1/1096 1092/1/1092 1091/1/1091 +f 1091/1/1091 1094/1/1094 1096/1/1096 +f 1096/1/1096 1094/1/1094 1100/1/1100 +f 1096/1/1096 1100/1/1100 1099/1/1099 +f 1099/1/1099 1097/1/1097 1096/1/1096 +f 1101/1/1101 1097/1/1097 1099/1/1099 +f 1101/1/1101 1102/1/1102 1097/1/1097 +f 1102/1/1102 1128/1/1128 1097/1/1097 +f 1097/1/1097 1128/1/1128 1098/1/1098 +f 1097/1/1097 1098/1/1098 1092/1/1092 +f 1128/1/1128 1712/1/1712 1098/1/1098 +f 1128/1/1128 1724/1/1724 1712/1/1712 +f 1724/1/1724 1708/1/1708 1712/1/1712 +f 1712/1/1712 1708/1/1708 1707/1/1707 +f 1712/1/1712 1707/1/1707 1711/1/1711 +f 1711/1/1711 1707/1/1707 1710/1/1710 +f 1707/1/1707 1704/1/1704 1710/1/1710 +f 1710/1/1710 1704/1/1704 1709/1/1709 +f 1710/1/1710 1709/1/1709 1713/1/1713 +f 1710/1/1710 1713/1/1713 1715/1/1715 +f 1715/1/1715 1713/1/1713 1718/1/1718 +f 1715/1/1715 1718/1/1718 1721/1/1721 +f 1718/1/1718 1720/1/1720 1721/1/1721 +f 1721/1/1721 1720/1/1720 1722/1/1722 +f 1721/1/1721 1722/1/1722 1672/1/1672 +f 1662/1/1662 1721/1/1721 1672/1/1672 +f 1672/1/1672 1722/1/1722 1673/1/1673 +f 1672/1/1672 1673/1/1673 1668/1/1668 +f 1668/1/1668 1673/1/1673 1671/1/1671 +f 1673/1/1673 1674/1/1674 1671/1/1671 +f 1674/1/1674 1675/1/1675 1671/1/1671 +f 1671/1/1671 1675/1/1675 1676/1/1676 +f 1671/1/1671 1676/1/1676 1670/1/1670 +f 1670/1/1670 1676/1/1676 1677/1/1677 +f 1675/1/1675 1678/1/1678 1676/1/1676 +f 1676/1/1676 1678/1/1678 1679/1/1679 +f 1675/1/1675 1680/1/1680 1678/1/1678 +f 1680/1/1680 1681/1/1681 1678/1/1678 +f 1678/1/1678 1681/1/1681 1682/1/1682 +f 1685/1/1685 1681/1/1681 1680/1/1680 +f 1674/1/1674 1685/1/1685 1680/1/1680 +f 1688/1/1688 1685/1/1685 1674/1/1674 +f 1722/1/1722 1688/1/1688 1674/1/1674 +f 1688/1/1688 1687/1/1687 1685/1/1685 +f 1687/1/1687 1686/1/1686 1685/1/1685 +f 1687/1/1687 1312/1/1312 1686/1/1686 +f 1312/1/1312 1050/1/1050 1686/1/1686 +f 1686/1/1686 1050/1/1050 1681/1/1681 +f 1681/1/1681 1050/1/1050 1041/1/1041 +f 1312/1/1312 1056/1/1056 1050/1/1050 +f 1056/1/1056 1051/1/1051 1050/1/1050 +f 1050/1/1050 1051/1/1051 1052/1/1052 +f 1050/1/1050 1052/1/1052 1049/1/1049 +f 1052/1/1052 1057/1/1057 1049/1/1049 +f 1052/1/1052 1055/1/1055 1057/1/1057 +f 1051/1/1051 1055/1/1055 1052/1/1052 +f 1051/1/1051 1054/1/1054 1055/1/1055 +f 1054/1/1054 1060/1/1060 1055/1/1055 +f 1055/1/1055 1060/1/1060 1058/1/1058 +f 1055/1/1055 1058/1/1058 1059/1/1059 +f 1060/1/1060 1094/1/1094 1058/1/1058 +f 1058/1/1058 1094/1/1094 1093/1/1093 +f 1060/1/1060 1303/1/1303 1094/1/1094 +f 1302/1/1302 1303/1/1303 1060/1/1060 +f 1301/1/1301 1302/1/1302 1060/1/1060 +f 1301/1/1301 1104/1/1104 1302/1/1302 +f 1301/1/1301 1109/1/1109 1104/1/1104 +f 1109/1/1109 1105/1/1105 1104/1/1104 +f 1101/1/1101 1104/1/1104 1105/1/1105 +f 1101/1/1101 1105/1/1105 1103/1/1103 +f 1103/1/1103 1105/1/1105 1106/1/1106 +f 1106/1/1106 1102/1/1102 1103/1/1103 +f 1106/1/1106 1111/1/1111 1102/1/1102 +f 1111/1/1111 1127/1/1127 1102/1/1102 +f 1111/1/1111 1756/1/1756 1127/1/1127 +f 1756/1/1756 1727/1/1727 1127/1/1127 +f 1727/1/1727 1724/1/1724 1127/1/1127 +f 1727/1/1727 1726/1/1726 1724/1/1724 +f 1726/1/1726 1725/1/1725 1724/1/1724 +f 1726/1/1726 1729/1/1729 1725/1/1725 +f 1729/1/1729 1728/1/1728 1725/1/1725 +f 1725/1/1725 1728/1/1728 1708/1/1708 +f 1708/1/1708 1728/1/1728 1705/1/1705 +f 1708/1/1708 1705/1/1705 1703/1/1703 +f 1705/1/1705 1699/1/1699 1703/1/1703 +f 1703/1/1703 1699/1/1699 1701/1/1701 +f 1703/1/1703 1701/1/1701 1704/1/1704 +f 1704/1/1704 1701/1/1701 1702/1/1702 +f 1701/1/1701 1697/1/1697 1702/1/1702 +f 1702/1/1702 1697/1/1697 1693/1/1693 +f 1702/1/1702 1693/1/1693 1716/1/1716 +f 1709/1/1709 1702/1/1702 1716/1/1716 +f 1716/1/1716 1693/1/1693 1719/1/1719 +f 1716/1/1716 1719/1/1719 1717/1/1717 +f 1713/1/1713 1716/1/1716 1717/1/1717 +f 1717/1/1717 1719/1/1719 1720/1/1720 +f 1719/1/1719 1723/1/1723 1720/1/1720 +f 1720/1/1720 1723/1/1723 1688/1/1688 +f 1719/1/1719 1690/1/1690 1723/1/1723 +f 1723/1/1723 1690/1/1690 1687/1/1687 +f 1719/1/1719 1689/1/1689 1690/1/1690 +f 1689/1/1689 1312/1/1312 1690/1/1690 +f 1689/1/1689 1311/1/1311 1312/1/1312 +f 1692/1/1692 1311/1/1311 1689/1/1689 +f 1693/1/1693 1692/1/1692 1689/1/1689 +f 1694/1/1694 1692/1/1692 1693/1/1693 +f 1694/1/1694 1695/1/1695 1692/1/1692 +f 1695/1/1695 1691/1/1691 1692/1/1692 +f 1698/1/1698 1691/1/1691 1695/1/1695 +f 1696/1/1696 1698/1/1698 1695/1/1695 +f 1700/1/1700 1698/1/1698 1696/1/1696 +f 1699/1/1699 1700/1/1700 1696/1/1696 +f 1706/1/1706 1700/1/1700 1699/1/1699 +f 1706/1/1706 1735/1/1735 1700/1/1700 +f 1735/1/1735 1737/1/1737 1700/1/1700 +f 1735/1/1735 1736/1/1736 1737/1/1737 +f 1736/1/1736 1304/1/1304 1737/1/1737 +f 1737/1/1737 1304/1/1304 1698/1/1698 +f 1736/1/1736 1148/1/1148 1304/1/1304 +f 1148/1/1148 1149/1/1149 1304/1/1304 +f 1304/1/1304 1149/1/1149 1053/1/1053 +f 1304/1/1304 1053/1/1053 1691/1/1691 +f 1691/1/1691 1053/1/1053 1056/1/1056 +f 1691/1/1691 1056/1/1056 1311/1/1311 +f 1149/1/1149 1300/1/1300 1053/1/1053 +f 1053/1/1053 1300/1/1300 1054/1/1054 +f 1300/1/1300 1301/1/1301 1054/1/1054 +f 1149/1/1149 1144/1/1144 1300/1/1300 +f 1144/1/1144 1109/1/1109 1300/1/1300 +f 1144/1/1144 1115/1/1115 1109/1/1109 +f 1115/1/1115 1108/1/1108 1109/1/1109 +f 1114/1/1114 1108/1/1108 1115/1/1115 +f 1114/1/1114 1113/1/1113 1108/1/1108 +f 1113/1/1113 1107/1/1107 1108/1/1108 +f 1108/1/1108 1107/1/1107 1105/1/1105 +f 1113/1/1113 1112/1/1112 1107/1/1107 +f 1110/1/1110 1107/1/1107 1112/1/1112 +f 1110/1/1110 1112/1/1112 1119/1/1119 +f 1119/1/1119 1123/1/1123 1110/1/1110 +f 1110/1/1110 1123/1/1123 1111/1/1111 +f 1120/1/1120 1123/1/1123 1119/1/1119 +f 1119/1/1119 1118/1/1118 1120/1/1120 +f 1120/1/1120 1118/1/1118 1121/1/1121 +f 1121/1/1121 1124/1/1124 1120/1/1120 +f 1125/1/1125 1124/1/1124 1121/1/1121 +f 1121/1/1121 1122/1/1122 1125/1/1125 +f 1125/1/1125 1122/1/1122 1130/1/1130 +f 1130/1/1130 2435/1/2435 1125/1/1125 +f 1137/1/1137 2435/1/2435 1130/1/1130 +f 1137/1/1137 1130/1/1130 1129/1/1129 +f 1134/1/1134 1137/1/1137 1129/1/1129 +f 1134/1/1134 1129/1/1129 1133/1/1133 +f 1134/1/1134 1133/1/1133 1135/1/1135 +f 1134/1/1134 1135/1/1135 2436/1/2436 +f 1135/1/1135 2439/1/2439 2436/1/2436 +f 2436/1/2436 2439/1/2439 2437/1/2437 +f 2437/1/2437 2438/1/2438 2436/1/2436 +f 2436/1/2436 2438/1/2438 2434/1/2434 +f 2436/1/2436 2434/1/2434 1137/1/1137 +f 2438/1/2438 1759/1/1759 2434/1/2434 +f 2434/1/2434 1759/1/1759 1757/1/1757 +f 2434/1/2434 1757/1/1757 2435/1/2435 +f 2435/1/2435 1757/1/1757 1124/1/1124 +f 1124/1/1124 1757/1/1757 1126/1/1126 +f 1124/1/1124 1126/1/1126 1123/1/1123 +f 1123/1/1123 1126/1/1126 1756/1/1756 +f 1126/1/1126 1755/1/1755 1756/1/1756 +f 1126/1/1126 1754/1/1754 1755/1/1755 +f 1755/1/1755 1754/1/1754 1753/1/1753 +f 1755/1/1755 1753/1/1753 1727/1/1727 +f 1753/1/1753 1754/1/1754 1749/1/1749 +f 1748/1/1748 1753/1/1753 1749/1/1749 +f 1748/1/1748 1749/1/1749 1747/1/1747 +f 1746/1/1746 1748/1/1748 1747/1/1747 +f 1746/1/1746 1747/1/1747 1743/1/1743 +f 1743/1/1743 1739/1/1739 1746/1/1746 +f 1746/1/1746 1739/1/1739 1731/1/1731 +f 1746/1/1746 1731/1/1731 1733/1/1733 +f 1733/1/1733 1731/1/1731 1729/1/1729 +f 1731/1/1731 1732/1/1732 1729/1/1729 +f 1729/1/1729 1732/1/1732 1730/1/1730 +f 1730/1/1730 1732/1/1732 1734/1/1734 +f 1730/1/1730 1734/1/1734 1735/1/1735 +f 1732/1/1732 1738/1/1738 1734/1/1734 +f 1734/1/1734 1738/1/1738 1736/1/1736 +f 1738/1/1738 1740/1/1740 1736/1/1736 +f 1739/1/1739 1740/1/1740 1738/1/1738 +f 1741/1/1741 1740/1/1740 1739/1/1739 +f 1741/1/1741 1148/1/1148 1740/1/1740 +f 1147/1/1147 1148/1/1148 1741/1/1741 +f 1742/1/1742 1147/1/1147 1741/1/1741 +f 1742/1/1742 1741/1/1741 1743/1/1743 +f 1743/1/1743 1744/1/1744 1742/1/1742 +f 1742/1/1742 1744/1/1744 1152/1/1152 +f 1744/1/1744 1745/1/1745 1152/1/1152 +f 1152/1/1152 1745/1/1745 1153/1/1153 +f 1152/1/1152 1153/1/1153 1150/1/1150 +f 1147/1/1147 1152/1/1152 1150/1/1150 +f 1147/1/1147 1150/1/1150 1146/1/1146 +f 1146/1/1146 1145/1/1145 1147/1/1147 +f 1146/1/1146 1142/1/1142 1145/1/1145 +f 1142/1/1142 1141/1/1141 1145/1/1145 +f 1145/1/1145 1141/1/1141 1143/1/1143 +f 1145/1/1145 1143/1/1143 1144/1/1144 +f 1143/1/1143 1114/1/1114 1144/1/1144 +f 1141/1/1141 1114/1/1114 1143/1/1143 +f 1141/1/1141 1116/1/1116 1114/1/1114 +f 1141/1/1141 1140/1/1140 1116/1/1116 +f 1140/1/1140 1117/1/1117 1116/1/1116 +f 1116/1/1116 1117/1/1117 1113/1/1113 +f 1117/1/1117 1118/1/1118 1113/1/1113 +f 1117/1/1117 1122/1/1122 1118/1/1118 +f 1132/1/1132 1122/1/1122 1117/1/1117 +f 1131/1/1131 1122/1/1122 1132/1/1132 +f 1133/1/1133 1131/1/1131 1132/1/1132 +f 1133/1/1133 1132/1/1132 1136/1/1136 +f 1136/1/1136 1139/1/1139 1133/1/1133 +f 1133/1/1133 1139/1/1139 2448/1/2448 +f 1139/1/1139 1278/1/1278 2448/1/2448 +f 2448/1/2448 1278/1/1278 2447/1/2447 +f 2448/1/2448 2447/1/2447 2444/1/2444 +f 1135/1/1135 2448/1/2448 2444/1/2444 +f 2444/1/2444 2447/1/2447 2445/1/2445 +f 2444/1/2444 2445/1/2445 2443/1/2443 +f 2439/1/2439 2444/1/2444 2443/1/2443 +f 2439/1/2439 2443/1/2443 2440/1/2440 +f 2440/1/2440 2443/1/2443 2441/1/2441 +f 2440/1/2440 2441/1/2441 2438/1/2438 +f 2443/1/2443 2442/1/2442 2441/1/2441 +f 2442/1/2442 1761/1/1761 2441/1/2441 +f 1761/1/1761 1759/1/1759 2441/1/2441 +f 1198/1/1198 1759/1/1759 1761/1/1761 +f 1198/1/1198 1761/1/1761 1201/1/1201 +f 1198/1/1198 1201/1/1201 1200/1/1200 +f 1197/1/1197 1198/1/1198 1200/1/1200 +f 1197/1/1197 1200/1/1200 1194/1/1194 +f 1191/1/1191 1197/1/1197 1194/1/1194 +f 1191/1/1191 1194/1/1194 1190/1/1190 +f 1190/1/1190 1186/1/1186 1191/1/1191 +f 1191/1/1191 1186/1/1186 1183/1/1183 +f 1191/1/1191 1183/1/1183 1195/1/1195 +f 1195/1/1195 1196/1/1196 1191/1/1191 +f 1198/1/1198 1196/1/1196 1195/1/1195 +f 1198/1/1198 1195/1/1195 1199/1/1199 +f 1195/1/1195 1182/1/1182 1199/1/1199 +f 1199/1/1199 1182/1/1182 1181/1/1181 +f 1199/1/1199 1181/1/1181 1178/1/1178 +f 1199/1/1199 1178/1/1178 1758/1/1758 +f 1759/1/1759 1199/1/1199 1758/1/1758 +f 1758/1/1758 1178/1/1178 1760/1/1760 +f 1758/1/1758 1760/1/1760 1126/1/1126 +f 1126/1/1126 1760/1/1760 1772/1/1772 +f 1772/1/1772 1760/1/1760 1172/1/1172 +f 1773/1/1773 1772/1/1772 1172/1/1172 +f 1773/1/1773 1172/1/1172 1174/1/1174 +f 1175/1/1175 1773/1/1773 1174/1/1174 +f 1175/1/1175 1174/1/1174 1161/1/1161 +f 1160/1/1160 1175/1/1175 1161/1/1161 +f 1160/1/1160 1161/1/1161 1158/1/1158 +f 1153/1/1153 1160/1/1160 1158/1/1158 +f 1153/1/1153 1158/1/1158 1154/1/1154 +f 1158/1/1158 1159/1/1159 1154/1/1154 +f 1154/1/1154 1159/1/1159 1157/1/1157 +f 1154/1/1154 1157/1/1157 1155/1/1155 +f 1151/1/1151 1154/1/1154 1155/1/1155 +f 1151/1/1151 1155/1/1155 1139/1/1139 +f 1146/1/1146 1151/1/1151 1139/1/1139 +f 1139/1/1139 1155/1/1155 1156/1/1156 +f 1150/1/1150 1154/1/1154 1151/1/1151 +f 1155/1/1155 1157/1/1157 1156/1/1156 +f 1157/1/1157 1168/1/1168 1156/1/1156 +f 1156/1/1156 1168/1/1168 1275/1/1275 +f 1156/1/1156 1275/1/1275 1278/1/1278 +f 1278/1/1278 1275/1/1275 1277/1/1277 +f 1275/1/1275 1276/1/1276 1277/1/1277 +f 1277/1/1277 1276/1/1276 2451/1/2451 +f 1277/1/1277 2451/1/2451 2449/1/2449 +f 2447/1/2447 1277/1/1277 2449/1/2449 +f 2449/1/2449 2451/1/2451 2452/1/2452 +f 2449/1/2449 2452/1/2452 2450/1/2450 +f 2445/1/2445 2449/1/2449 2450/1/2450 +f 2445/1/2445 2450/1/2450 2446/1/2446 +f 2446/1/2446 2450/1/2450 2454/1/2454 +f 2446/1/2446 2454/1/2454 2476/1/2476 +f 2442/1/2442 2446/1/2446 2476/1/2476 +f 2476/1/2476 2454/1/2454 1762/1/1762 +f 1762/1/1762 1761/1/1761 2476/1/2476 +f 1762/1/1762 2454/1/2454 1763/1/1763 +f 1763/1/1763 1203/1/1203 1762/1/1762 +f 1762/1/1762 1203/1/1203 1201/1/1201 +f 1201/1/1201 1203/1/1203 1202/1/1202 +f 1202/1/1202 1203/1/1203 1204/1/1204 +f 1202/1/1202 1204/1/1204 1205/1/1205 +f 1206/1/1206 1202/1/1202 1205/1/1205 +f 1206/1/1206 1205/1/1205 1207/1/1207 +f 1208/1/1208 1206/1/1206 1207/1/1207 +f 1208/1/1208 1207/1/1207 1273/1/1273 +f 1192/1/1192 1208/1/1208 1273/1/1273 +f 1192/1/1192 1273/1/1273 1271/1/1271 +f 1271/1/1271 1274/1/1274 1192/1/1192 +f 1188/1/1188 1192/1/1192 1274/1/1274 +f 1275/1/1275 1188/1/1188 1274/1/1274 +f 1188/1/1188 1189/1/1189 1192/1/1192 +f 1193/1/1193 1192/1/1192 1189/1/1189 +f 1193/1/1193 1189/1/1189 1190/1/1190 +f 1187/1/1187 1189/1/1189 1188/1/1188 +f 1185/1/1185 1187/1/1187 1188/1/1188 +f 1168/1/1168 1185/1/1185 1188/1/1188 +f 1167/1/1167 1185/1/1185 1168/1/1168 +f 1165/1/1165 1167/1/1167 1168/1/1168 +f 1165/1/1165 1166/1/1166 1167/1/1167 +f 1166/1/1166 1170/1/1170 1167/1/1167 +f 1169/1/1169 1170/1/1170 1166/1/1166 +f 1164/1/1164 1169/1/1169 1166/1/1166 +f 1171/1/1171 1169/1/1169 1164/1/1164 +f 1162/1/1162 1171/1/1171 1164/1/1164 +f 1162/1/1162 1164/1/1164 1163/1/1163 +f 1159/1/1159 1162/1/1162 1163/1/1163 +f 1161/1/1161 1162/1/1162 1159/1/1159 +f 1163/1/1163 1164/1/1164 1165/1/1165 +f 1163/1/1163 1165/1/1165 1157/1/1157 +f 1174/1/1174 1171/1/1171 1162/1/1162 +f 1171/1/1171 1173/1/1173 1169/1/1169 +f 1173/1/1173 1176/1/1176 1169/1/1169 +f 1169/1/1169 1176/1/1176 1177/1/1177 +f 1176/1/1176 1179/1/1179 1177/1/1177 +f 1177/1/1177 1179/1/1179 1180/1/1180 +f 1177/1/1177 1180/1/1180 1170/1/1170 +f 1170/1/1170 1180/1/1180 1184/1/1184 +f 1170/1/1170 1184/1/1184 1185/1/1185 +f 1180/1/1180 1183/1/1183 1184/1/1184 +f 1180/1/1180 1182/1/1182 1183/1/1183 +f 1179/1/1179 1182/1/1182 1180/1/1180 +f 1176/1/1176 1178/1/1178 1179/1/1179 +f 1173/1/1173 1178/1/1178 1176/1/1176 +f 1172/1/1172 1173/1/1173 1171/1/1171 +f 1169/1/1169 1177/1/1177 1170/1/1170 +f 1164/1/1164 1166/1/1166 1165/1/1165 +f 1167/1/1167 1170/1/1170 1185/1/1185 +f 1185/1/1185 1184/1/1184 1187/1/1187 +f 1184/1/1184 1186/1/1186 1187/1/1187 +f 1187/1/1187 1186/1/1186 1189/1/1189 +f 1271/1/1271 1272/1/1272 1274/1/1274 +f 1276/1/1276 1274/1/1274 1272/1/1272 +f 1270/1/1270 1272/1/1272 1271/1/1271 +f 1271/1/1271 1222/1/1222 1270/1/1270 +f 1270/1/1270 1222/1/1222 1269/1/1269 +f 1270/1/1270 1269/1/1269 2457/1/2457 +f 2455/1/2455 1270/1/1270 2457/1/2457 +f 2455/1/2455 2457/1/2457 2458/1/2458 +f 2458/1/2458 2456/1/2456 2455/1/2455 +f 2452/1/2452 2455/1/2455 2456/1/2456 +f 2453/1/2453 2452/1/2452 2456/1/2456 +f 2453/1/2453 2456/1/2456 2454/1/2454 +f 2454/1/2454 2456/1/2456 2474/1/2474 +f 2456/1/2456 2475/1/2475 2474/1/2474 +f 2474/1/2474 2475/1/2475 2473/1/2473 +f 2474/1/2474 2473/1/2473 1763/1/1763 +f 1764/1/1764 1763/1/1763 2473/1/2473 +f 1764/1/1764 2473/1/2473 2471/1/2471 +f 2471/1/2471 2467/1/2467 1764/1/1764 +f 1764/1/1764 2467/1/2467 1765/1/1765 +f 1212/1/1212 1764/1/1764 1765/1/1765 +f 1212/1/1212 1765/1/1765 1235/1/1235 +f 1229/1/1229 1212/1/1212 1235/1/1235 +f 1229/1/1229 1235/1/1235 1228/1/1228 +f 1228/1/1228 1224/1/1224 1229/1/1229 +f 1229/1/1229 1224/1/1224 1213/1/1213 +f 1224/1/1224 1219/1/1219 1213/1/1213 +f 1213/1/1213 1219/1/1219 1217/1/1217 +f 1213/1/1213 1217/1/1217 1214/1/1214 +f 1213/1/1213 1214/1/1214 1211/1/1211 +f 1212/1/1212 1213/1/1213 1211/1/1211 +f 1203/1/1203 1212/1/1212 1211/1/1211 +f 1211/1/1211 1214/1/1214 1209/1/1209 +f 1211/1/1211 1209/1/1209 1204/1/1204 +f 1214/1/1214 1215/1/1215 1209/1/1209 +f 1210/1/1210 1209/1/1209 1215/1/1215 +f 1210/1/1210 1215/1/1215 1216/1/1216 +f 1207/1/1207 1210/1/1210 1216/1/1216 +f 1216/1/1216 1215/1/1215 1218/1/1218 +f 1216/1/1216 1218/1/1218 1222/1/1222 +f 1218/1/1218 1221/1/1221 1222/1/1222 +f 1220/1/1220 1221/1/1221 1218/1/1218 +f 1219/1/1219 1220/1/1220 1218/1/1218 +f 1223/1/1223 1220/1/1220 1219/1/1219 +f 1223/1/1223 1225/1/1225 1220/1/1220 +f 1226/1/1226 1225/1/1225 1223/1/1223 +f 1227/1/1227 1226/1/1226 1223/1/1223 +f 1227/1/1227 1223/1/1223 1224/1/1224 +f 1230/1/1230 1226/1/1226 1227/1/1227 +f 1231/1/1231 1230/1/1230 1227/1/1227 +f 1231/1/1231 1227/1/1227 1228/1/1228 +f 1234/1/1234 1230/1/1230 1231/1/1231 +f 1231/1/1231 1235/1/1235 1234/1/1234 +f 1236/1/1236 1234/1/1234 1235/1/1235 +f 1235/1/1235 1766/1/1766 1236/1/1236 +f 1236/1/1236 1766/1/1766 1767/1/1767 +f 1767/1/1767 1299/1/1299 1236/1/1236 +f 1236/1/1236 1299/1/1299 1298/1/1298 +f 1298/1/1298 1237/1/1237 1236/1/1236 +f 1298/1/1298 1239/1/1239 1237/1/1237 +f 1239/1/1239 1240/1/1240 1237/1/1237 +f 1237/1/1237 1240/1/1240 1238/1/1238 +f 1237/1/1237 1238/1/1238 1233/1/1233 +f 1237/1/1237 1233/1/1233 1234/1/1234 +f 1233/1/1233 1238/1/1238 1232/1/1232 +f 1233/1/1233 1232/1/1232 1230/1/1230 +f 1238/1/1238 1241/1/1241 1232/1/1232 +f 1232/1/1232 1241/1/1241 1225/1/1225 +f 1241/1/1241 1267/1/1267 1225/1/1225 +f 1225/1/1225 1267/1/1267 1221/1/1221 +f 1267/1/1267 1268/1/1268 1221/1/1221 +f 1221/1/1221 1268/1/1268 1269/1/1269 +f 1268/1/1268 2459/1/2459 1269/1/1269 +f 1268/1/1268 1297/1/1297 2459/1/2459 +f 1297/1/1297 2461/1/2461 2459/1/2459 +f 2459/1/2459 2461/1/2461 2465/1/2465 +f 2466/1/2466 2459/1/2459 2465/1/2465 +f 2468/1/2468 2466/1/2466 2465/1/2465 +f 2468/1/2468 2465/1/2465 2467/1/2467 +f 2465/1/2465 2464/1/2464 2467/1/2467 +f 2467/1/2467 2464/1/2464 2469/1/2469 +f 2463/1/2463 2469/1/2469 2464/1/2464 +f 2461/1/2461 2463/1/2463 2464/1/2464 +f 2460/1/2460 2463/1/2463 2461/1/2461 +f 2460/1/2460 2462/1/2462 2463/1/2463 +f 2462/1/2462 2470/1/2470 2463/1/2463 +f 2462/1/2462 2477/1/2477 2470/1/2470 +f 2470/1/2470 2477/1/2477 1766/1/1766 +f 2470/1/2470 1766/1/1766 2469/1/2469 +f 1766/1/1766 1765/1/1765 2469/1/2469 +f 2462/1/2462 1296/1/1296 2477/1/2477 +f 1296/1/1296 1767/1/1767 2477/1/2477 +f 1767/1/1767 1296/1/1296 2478/1/2478 +f 1767/1/1767 2478/1/2478 1292/1/1292 +f 1292/1/1292 1768/1/1768 1767/1/1767 +f 1768/1/1768 1292/1/1292 1290/1/1290 +f 1768/1/1768 1290/1/1290 1769/1/1769 +f 1768/1/1768 1769/1/1769 2515/1/2515 +f 2515/1/2515 1252/1/1252 1768/1/1768 +f 1768/1/1768 1252/1/1252 1250/1/1250 +f 1768/1/1768 1250/1/1250 1299/1/1299 +f 1299/1/1299 1250/1/1250 1244/1/1244 +f 1250/1/1250 1245/1/1245 1244/1/1244 +f 1244/1/1244 1245/1/1245 1242/1/1242 +f 1244/1/1244 1242/1/1242 1239/1/1239 +f 1245/1/1245 1243/1/1243 1242/1/1242 +f 1242/1/1242 1243/1/1243 1240/1/1240 +f 1240/1/1240 1243/1/1243 1241/1/1241 +f 1243/1/1243 1248/1/1248 1241/1/1241 +f 1243/1/1243 1247/1/1247 1248/1/1248 +f 1247/1/1247 1266/1/1266 1248/1/1248 +f 1248/1/1248 1266/1/1266 1297/1/1297 +f 1266/1/1266 2460/1/2460 1297/1/1297 +f 1266/1/1266 1295/1/1295 2460/1/2460 +f 1265/1/1265 1295/1/1295 1266/1/1266 +f 1265/1/1265 1293/1/1293 1295/1/1295 +f 1293/1/1293 1294/1/1294 1295/1/1295 +f 1295/1/1295 1294/1/1294 1296/1/1296 +f 1293/1/1293 1291/1/1291 1294/1/1294 +f 1291/1/1291 1292/1/1292 1294/1/1294 +f 1281/1/1281 1291/1/1291 1293/1/1293 +f 1282/1/1282 1281/1/1281 1293/1/1293 +f 1263/1/1263 1281/1/1281 1282/1/1282 +f 1262/1/1262 1263/1/1263 1282/1/1282 +f 1262/1/1262 1282/1/1282 1264/1/1264 +f 1254/1/1254 1262/1/1262 1264/1/1264 +f 1254/1/1254 1264/1/1264 1247/1/1247 +f 1246/1/1246 1254/1/1254 1247/1/1247 +f 1253/1/1253 1254/1/1254 1246/1/1246 +f 1251/1/1251 1253/1/1253 1246/1/1246 +f 1251/1/1251 1246/1/1246 1249/1/1249 +f 1252/1/1252 1251/1/1251 1249/1/1249 +f 1249/1/1249 1246/1/1246 1245/1/1245 +f 2513/1/2513 1253/1/1253 1251/1/1251 +f 2515/1/2515 2513/1/2513 1251/1/1251 +f 2514/1/2514 2513/1/2513 2515/1/2515 +f 2510/1/2510 2513/1/2513 2514/1/2514 +f 1769/1/1769 2510/1/2510 2514/1/2514 +f 2510/1/2510 1769/1/1769 1770/1/1770 +f 1770/1/1770 2509/1/2509 2510/1/2510 +f 2509/1/2509 2511/1/2511 2510/1/2510 +f 2510/1/2510 2511/1/2511 2512/1/2512 +f 2511/1/2511 1255/1/1255 2512/1/2512 +f 2512/1/2512 1255/1/1255 2513/1/2513 +f 2511/1/2511 1257/1/1257 1255/1/1255 +f 1257/1/1257 1258/1/1258 1255/1/1255 +f 1255/1/1255 1258/1/1258 1256/1/1256 +f 1255/1/1255 1256/1/1256 1253/1/1253 +f 1258/1/1258 1259/1/1259 1256/1/1256 +f 1256/1/1256 1259/1/1259 1262/1/1262 +f 1258/1/1258 1261/1/1261 1259/1/1259 +f 1259/1/1259 1261/1/1261 1263/1/1263 +f 1261/1/1261 1279/1/1279 1263/1/1263 +f 1263/1/1263 1279/1/1279 1280/1/1280 +f 1279/1/1279 1289/1/1289 1280/1/1280 +f 1280/1/1280 1289/1/1289 1290/1/1290 +f 1280/1/1280 1290/1/1290 1291/1/1291 +f 1290/1/1290 1289/1/1289 1770/1/1770 +f 1770/1/1770 1289/1/1289 1288/1/1288 +f 1287/1/1287 1770/1/1770 1288/1/1288 +f 1285/1/1285 1287/1/1287 1288/1/1288 +f 1285/1/1285 1288/1/1288 1286/1/1286 +f 1283/1/1283 1285/1/1285 1286/1/1286 +f 1283/1/1283 1286/1/1286 1279/1/1279 +f 1283/1/1283 1284/1/1284 1285/1/1285 +f 1260/1/1260 1284/1/1284 1283/1/1283 +f 1260/1/1260 1283/1/1283 1261/1/1261 +f 1284/1/1284 1260/1/1260 2504/1/2504 +f 1284/1/1284 2504/1/2504 1287/1/1287 +f 1287/1/1287 2504/1/2504 1771/1/1771 +f 1771/1/1771 2504/1/2504 2506/1/2506 +f 2506/1/2506 1770/1/1770 1771/1/1771 +f 1770/1/1770 2506/1/2506 2507/1/2507 +f 2506/1/2506 2508/1/2508 2507/1/2507 +f 2507/1/2507 2508/1/2508 2511/1/2511 +f 2506/1/2506 2504/1/2504 2508/1/2508 +f 2504/1/2504 2505/1/2505 2508/1/2508 +f 2508/1/2508 2505/1/2505 1257/1/1257 +f 2505/1/2505 2504/1/2504 1258/1/1258 +f 1260/1/1260 1258/1/1258 2504/1/2504 +f 1284/1/1284 1287/1/1287 1285/1/1285 +f 1287/1/1287 1771/1/1771 1770/1/1770 +f 1286/1/1286 1288/1/1288 1289/1/1289 +f 1286/1/1286 1289/1/1289 1279/1/1279 +f 1261/1/1261 1283/1/1283 1279/1/1279 +f 1258/1/1258 1260/1/1260 1261/1/1261 +f 2505/1/2505 1258/1/1258 1257/1/1257 +f 2508/1/2508 1257/1/1257 2511/1/2511 +f 2507/1/2507 2511/1/2511 2509/1/2509 +f 2509/1/2509 1770/1/1770 2507/1/2507 +f 2510/1/2510 2512/1/2512 2513/1/2513 +f 2513/1/2513 1255/1/1255 1253/1/1253 +f 1253/1/1253 1256/1/1256 1254/1/1254 +f 1264/1/1264 1265/1/1265 1247/1/1247 +f 1256/1/1256 1262/1/1262 1254/1/1254 +f 1264/1/1264 1282/1/1282 1265/1/1265 +f 1259/1/1259 1263/1/1263 1262/1/1262 +f 1263/1/1263 1280/1/1280 1281/1/1281 +f 1281/1/1281 1280/1/1280 1291/1/1291 +f 1282/1/1282 1293/1/1293 1265/1/1265 +f 1247/1/1247 1265/1/1265 1266/1/1266 +f 1246/1/1246 1247/1/1247 1243/1/1243 +f 1245/1/1245 1246/1/1246 1243/1/1243 +f 1250/1/1250 1249/1/1249 1245/1/1245 +f 1252/1/1252 1249/1/1249 1250/1/1250 +f 2515/1/2515 1251/1/1251 1252/1/1252 +f 2515/1/2515 1769/1/1769 2514/1/2514 +f 1769/1/1769 1290/1/1290 1770/1/1770 +f 1291/1/1291 1290/1/1290 1292/1/1292 +f 1294/1/1294 1292/1/1292 2478/1/2478 +f 1294/1/1294 2478/1/2478 1296/1/1296 +f 1295/1/1295 1296/1/1296 2462/1/2462 +f 1295/1/1295 2462/1/2462 2460/1/2460 +f 2463/1/2463 2470/1/2470 2469/1/2469 +f 2472/1/2472 2466/1/2466 2468/1/2468 +f 2472/1/2472 2468/1/2468 2471/1/2471 +f 2458/1/2458 2466/1/2466 2472/1/2472 +f 2472/1/2472 2475/1/2475 2458/1/2458 +f 2457/1/2457 2459/1/2459 2466/1/2466 +f 2461/1/2461 2464/1/2464 2465/1/2465 +f 1297/1/1297 2460/1/2460 2461/1/2461 +f 1248/1/1248 1297/1/1297 1268/1/1268 +f 1267/1/1267 1248/1/1248 1268/1/1268 +f 1241/1/1241 1248/1/1248 1267/1/1267 +f 1240/1/1240 1241/1/1241 1238/1/1238 +f 1239/1/1239 1242/1/1242 1240/1/1240 +f 1244/1/1244 1239/1/1239 1298/1/1298 +f 1298/1/1298 1299/1/1299 1244/1/1244 +f 1767/1/1767 1768/1/1768 1299/1/1299 +f 1766/1/1766 2477/1/2477 1767/1/1767 +f 1236/1/1236 1237/1/1237 1234/1/1234 +f 1234/1/1234 1233/1/1233 1230/1/1230 +f 1230/1/1230 1232/1/1232 1226/1/1226 +f 1232/1/1232 1225/1/1225 1226/1/1226 +f 1225/1/1225 1221/1/1221 1220/1/1220 +f 1217/1/1217 1218/1/1218 1215/1/1215 +f 1205/1/1205 1209/1/1209 1210/1/1210 +f 1214/1/1214 1217/1/1217 1215/1/1215 +f 1219/1/1219 1218/1/1218 1217/1/1217 +f 1224/1/1224 1223/1/1223 1219/1/1219 +f 1228/1/1228 1227/1/1227 1224/1/1224 +f 1228/1/1228 1235/1/1235 1231/1/1231 +f 1229/1/1229 1213/1/1213 1212/1/1212 +f 1235/1/1235 1765/1/1765 1766/1/1766 +f 1765/1/1765 2467/1/2467 2469/1/2469 +f 2471/1/2471 2468/1/2468 2467/1/2467 +f 2471/1/2471 2473/1/2473 2472/1/2472 +f 1764/1/1764 1212/1/1212 1763/1/1763 +f 2472/1/2472 2473/1/2473 2475/1/2475 +f 2458/1/2458 2475/1/2475 2456/1/2456 +f 2458/1/2458 2457/1/2457 2466/1/2466 +f 2457/1/2457 1269/1/1269 2459/1/2459 +f 1221/1/1221 1269/1/1269 1222/1/1222 +f 1271/1/1271 1216/1/1216 1222/1/1222 +f 1270/1/1270 2455/1/2455 1272/1/1272 +f 2451/1/2451 1272/1/1272 2455/1/2455 +f 1273/1/1273 1216/1/1216 1271/1/1271 +f 1193/1/1193 1208/1/1208 1192/1/1192 +f 1193/1/1193 1194/1/1194 1208/1/1208 +f 1273/1/1273 1207/1/1207 1216/1/1216 +f 1194/1/1194 1206/1/1206 1208/1/1208 +f 1207/1/1207 1205/1/1205 1210/1/1210 +f 1200/1/1200 1202/1/1202 1206/1/1206 +f 1205/1/1205 1204/1/1204 1209/1/1209 +f 1203/1/1203 1211/1/1211 1204/1/1204 +f 1763/1/1763 1212/1/1212 1203/1/1203 +f 2454/1/2454 2474/1/2474 1763/1/1763 +f 2450/1/2450 2453/1/2453 2454/1/2454 +f 2450/1/2450 2452/1/2452 2453/1/2453 +f 2451/1/2451 2455/1/2455 2452/1/2452 +f 1276/1/1276 1272/1/1272 2451/1/2451 +f 1275/1/1275 1274/1/1274 1276/1/1276 +f 1168/1/1168 1188/1/1188 1275/1/1275 +f 1157/1/1157 1165/1/1165 1168/1/1168 +f 1159/1/1159 1163/1/1163 1157/1/1157 +f 1158/1/1158 1161/1/1161 1159/1/1159 +f 1752/1/1752 1175/1/1175 1160/1/1160 +f 1750/1/1750 1752/1/1752 1160/1/1160 +f 1750/1/1750 1160/1/1160 1745/1/1745 +f 1750/1/1750 1751/1/1751 1752/1/1752 +f 1751/1/1751 1774/1/1774 1752/1/1752 +f 1751/1/1751 1754/1/1754 1774/1/1774 +f 1754/1/1754 1772/1/1772 1774/1/1774 +f 1749/1/1749 1751/1/1751 1750/1/1750 +f 1752/1/1752 1774/1/1774 1175/1/1175 +f 1161/1/1161 1174/1/1174 1162/1/1162 +f 1774/1/1774 1773/1/1773 1175/1/1175 +f 1174/1/1174 1172/1/1172 1171/1/1171 +f 1774/1/1774 1772/1/1772 1773/1/1773 +f 1172/1/1172 1760/1/1760 1173/1/1173 +f 1760/1/1760 1178/1/1178 1173/1/1173 +f 1178/1/1178 1181/1/1181 1179/1/1179 +f 1179/1/1179 1181/1/1181 1182/1/1182 +f 1195/1/1195 1183/1/1183 1182/1/1182 +f 1184/1/1184 1183/1/1183 1186/1/1186 +f 1190/1/1190 1189/1/1189 1186/1/1186 +f 1190/1/1190 1194/1/1194 1193/1/1193 +f 1191/1/1191 1196/1/1196 1197/1/1197 +f 1194/1/1194 1200/1/1200 1206/1/1206 +f 1196/1/1196 1198/1/1198 1197/1/1197 +f 1200/1/1200 1201/1/1201 1202/1/1202 +f 1762/1/1762 1201/1/1201 1761/1/1761 +f 1199/1/1199 1759/1/1759 1198/1/1198 +f 2442/1/2442 2476/1/2476 1761/1/1761 +f 2443/1/2443 2446/1/2446 2442/1/2442 +f 2443/1/2443 2445/1/2445 2446/1/2446 +f 2447/1/2447 2449/1/2449 2445/1/2445 +f 1278/1/1278 1277/1/1277 2447/1/2447 +f 1139/1/1139 1156/1/1156 1278/1/1278 +f 1136/1/1136 1138/1/1138 1139/1/1139 +f 1139/1/1139 1138/1/1138 1142/1/1142 +f 1136/1/1136 1132/1/1132 1138/1/1138 +f 1132/1/1132 1140/1/1140 1138/1/1138 +f 1129/1/1129 1122/1/1122 1131/1/1131 +f 1140/1/1140 1132/1/1132 1117/1/1117 +f 1138/1/1138 1140/1/1140 1141/1/1141 +f 1142/1/1142 1138/1/1138 1141/1/1141 +f 1139/1/1139 1142/1/1142 1146/1/1146 +f 1146/1/1146 1150/1/1150 1151/1/1151 +f 1150/1/1150 1153/1/1153 1154/1/1154 +f 1745/1/1745 1160/1/1160 1153/1/1153 +f 1744/1/1744 1750/1/1750 1745/1/1745 +f 1747/1/1747 1750/1/1750 1744/1/1744 +f 1742/1/1742 1152/1/1152 1147/1/1147 +f 1147/1/1147 1145/1/1145 1148/1/1148 +f 1739/1/1739 1738/1/1738 1732/1/1732 +f 1739/1/1739 1732/1/1732 1731/1/1731 +f 1743/1/1743 1741/1/1741 1739/1/1739 +f 1743/1/1743 1747/1/1747 1744/1/1744 +f 1733/1/1733 1748/1/1748 1746/1/1746 +f 1747/1/1747 1749/1/1749 1750/1/1750 +f 1733/1/1733 1753/1/1753 1748/1/1748 +f 1726/1/1726 1753/1/1753 1733/1/1733 +f 1749/1/1749 1754/1/1754 1751/1/1751 +f 1126/1/1126 1772/1/1772 1754/1/1754 +f 1757/1/1757 1758/1/1758 1126/1/1126 +f 1759/1/1759 1758/1/1758 1757/1/1757 +f 2441/1/2441 1759/1/1759 2438/1/2438 +f 2440/1/2440 2438/1/2438 2437/1/2437 +f 2437/1/2437 2439/1/2439 2440/1/2440 +f 1135/1/1135 2444/1/2444 2439/1/2439 +f 1133/1/1133 2448/1/2448 1135/1/1135 +f 1133/1/1133 1129/1/1129 1131/1/1131 +f 1134/1/1134 2436/1/2436 1137/1/1137 +f 1137/1/1137 2434/1/2434 2435/1/2435 +f 1129/1/1129 1130/1/1130 1122/1/1122 +f 1125/1/1125 2435/1/2435 1124/1/1124 +f 1121/1/1121 1118/1/1118 1122/1/1122 +f 1120/1/1120 1124/1/1124 1123/1/1123 +f 1119/1/1119 1112/1/1112 1118/1/1118 +f 1106/1/1106 1107/1/1107 1110/1/1110 +f 1113/1/1113 1118/1/1118 1112/1/1112 +f 1116/1/1116 1113/1/1113 1114/1/1114 +f 1144/1/1144 1114/1/1114 1115/1/1115 +f 1145/1/1145 1144/1/1144 1149/1/1149 +f 1148/1/1148 1145/1/1145 1149/1/1149 +f 1740/1/1740 1148/1/1148 1736/1/1736 +f 1734/1/1734 1736/1/1736 1735/1/1735 +f 1730/1/1730 1735/1/1735 1706/1/1706 +f 1728/1/1728 1730/1/1730 1706/1/1706 +f 1700/1/1700 1737/1/1737 1698/1/1698 +f 1698/1/1698 1304/1/1304 1691/1/1691 +f 1696/1/1696 1695/1/1695 1694/1/1694 +f 1696/1/1696 1694/1/1694 1697/1/1697 +f 1692/1/1692 1691/1/1691 1311/1/1311 +f 1693/1/1693 1689/1/1689 1719/1/1719 +f 1697/1/1697 1694/1/1694 1693/1/1693 +f 1701/1/1701 1696/1/1696 1697/1/1697 +f 1699/1/1699 1696/1/1696 1701/1/1701 +f 1705/1/1705 1706/1/1706 1699/1/1699 +f 1728/1/1728 1706/1/1706 1705/1/1705 +f 1729/1/1729 1730/1/1730 1728/1/1728 +f 1733/1/1733 1729/1/1729 1726/1/1726 +f 1727/1/1727 1753/1/1753 1726/1/1726 +f 1756/1/1756 1755/1/1755 1727/1/1727 +f 1123/1/1123 1756/1/1756 1111/1/1111 +f 1110/1/1110 1111/1/1111 1106/1/1106 +f 1106/1/1106 1105/1/1105 1107/1/1107 +f 1100/1/1100 1104/1/1104 1101/1/1101 +f 1100/1/1100 1303/1/1303 1104/1/1104 +f 1108/1/1108 1105/1/1105 1109/1/1109 +f 1300/1/1300 1109/1/1109 1301/1/1301 +f 1302/1/1302 1104/1/1104 1303/1/1303 +f 1054/1/1054 1301/1/1301 1060/1/1060 +f 1053/1/1053 1054/1/1054 1051/1/1051 +f 1056/1/1056 1053/1/1053 1051/1/1051 +f 1311/1/1311 1056/1/1056 1312/1/1312 +f 1690/1/1690 1312/1/1312 1687/1/1687 +f 1723/1/1723 1687/1/1687 1688/1/1688 +f 1685/1/1685 1686/1/1686 1681/1/1681 +f 1674/1/1674 1680/1/1680 1675/1/1675 +f 1722/1/1722 1674/1/1674 1673/1/1673 +f 1720/1/1720 1688/1/1688 1722/1/1722 +f 1718/1/1718 1717/1/1717 1720/1/1720 +f 1713/1/1713 1717/1/1717 1718/1/1718 +f 1709/1/1709 1716/1/1716 1713/1/1713 +f 1704/1/1704 1702/1/1702 1709/1/1709 +f 1707/1/1707 1703/1/1703 1704/1/1704 +f 1708/1/1708 1703/1/1703 1707/1/1707 +f 1724/1/1724 1725/1/1725 1708/1/1708 +f 1127/1/1127 1724/1/1724 1128/1/1128 +f 1102/1/1102 1127/1/1127 1128/1/1128 +f 1103/1/1103 1102/1/1102 1101/1/1101 +f 1099/1/1099 1100/1/1100 1101/1/1101 +f 1094/1/1094 1303/1/1303 1100/1/1100 +f 1091/1/1091 1093/1/1093 1094/1/1094 +f 1096/1/1096 1097/1/1097 1092/1/1092 +f 1090/1/1090 1093/1/1093 1091/1/1091 +f 1058/1/1058 1093/1/1093 1095/1/1095 +f 1059/1/1059 1058/1/1058 1095/1/1095 +f 1055/1/1055 1059/1/1059 1057/1/1057 +f 1061/1/1061 1065/1/1065 1066/1/1066 +f 1062/1/1062 1063/1/1063 1064/1/1064 +f 1049/1/1049 1057/1/1057 1062/1/1062 +f 1050/1/1050 1049/1/1049 1041/1/1041 +f 1681/1/1681 1041/1/1041 1682/1/1682 +f 1678/1/1678 1682/1/1682 1679/1/1679 +f 1676/1/1676 1679/1/1679 1677/1/1677 +f 1670/1/1670 1677/1/1677 1669/1/1669 +f 1667/1/1667 1671/1/1671 1670/1/1670 +f 1668/1/1668 1671/1/1671 1667/1/1667 +f 1662/1/1662 1672/1/1672 1668/1/1668 +f 1715/1/1715 1721/1/1721 1662/1/1662 +f 1714/1/1714 1710/1/1710 1715/1/1715 +f 1711/1/1711 1710/1/1710 1714/1/1714 +f 1098/1/1098 1712/1/1712 1711/1/1711 +f 1092/1/1092 1098/1/1098 1088/1/1088 +f 1089/1/1089 1088/1/1088 1085/1/1085 +f 1085/1/1085 1079/1/1079 1089/1/1089 +f 1066/1/1066 1079/1/1079 1078/1/1078 +f 1080/1/1080 1075/1/1075 1078/1/1078 +f 1080/1/1080 1083/1/1083 1077/1/1077 +f 1082/1/1082 1084/1/1084 1081/1/1081 +f 1084/1/1084 1086/1/1086 1087/1/1087 +f 1087/1/1087 1664/1/1664 1660/1/1660 +f 1660/1/1660 1663/1/1663 1661/1/1661 +f 1661/1/1661 1666/1/1666 1665/1/1665 +f 1665/1/1665 1775/1/1775 1776/1/1776 +f 1775/1/1775 1684/1/1684 1776/1/1776 +f 1684/1/1684 1683/1/1683 1042/1/1042 +f 1042/1/1042 1040/1/1040 1038/1/1038 +f 1044/1/1044 1043/1/1043 1045/1/1045 +f 1318/1/1318 1044/1/1044 1045/1/1045 +f 1777/1/1777 1318/1/1318 1317/1/1317 +f 1659/1/1659 1317/1/1317 1316/1/1316 +f 1314/1/1314 1315/1/1315 1020/1/1020 +f 1014/1/1014 1019/1/1019 1017/1/1017 +f 1020/1/1020 1021/1/1021 1018/1/1018 +f 1019/1/1019 1025/1/1025 1022/1/1022 +f 1047/1/1047 1048/1/1048 1021/1/1021 +f 1025/1/1025 1035/1/1035 1026/1/1026 +f 1046/1/1046 1034/1/1034 1048/1/1048 +f 1035/1/1035 1030/1/1030 1026/1/1026 +f 1038/1/1038 1033/1/1033 1034/1/1034 +f 1030/1/1030 1032/1/1032 1031/1/1031 +f 1032/1/1032 1072/1/1072 1031/1/1031 +f 1031/1/1031 1072/1/1072 1640/1/1640 +f 1037/1/1037 1036/1/1036 1033/1/1033 +f 1032/1/1032 1070/1/1070 1072/1/1072 +f 1039/1/1039 1068/1/1068 1036/1/1036 +f 1068/1/1068 1067/1/1067 1069/1/1069 +f 1069/1/1069 1073/1/1073 1074/1/1074 +f 1070/1/1070 1071/1/1071 1072/1/1072 +f 1074/1/1074 1647/1/1647 1642/1/1642 +f 1641/1/1641 1643/1/1643 1644/1/1644 +f 1072/1/1072 1641/1/1641 1640/1/1640 +f 1031/1/1031 1640/1/1640 1617/1/1617 +f 1030/1/1030 1031/1/1031 982/1/982 +f 1027/1/1027 982/1/982 981/1/981 +f 1028/1/1028 981/1/981 987/1/987 +f 1029/1/1029 987/1/987 988/1/988 +f 1313/1/1313 988/1/988 994/1/994 +f 1011/1/1011 1016/1/1016 1313/1/1313 +f 1006/1/1006 1010/1/1010 1011/1/1011 +f 1008/1/1008 1009/1/1009 1006/1/1006 +f 1316/1/1316 1013/1/1013 1008/1/1008 +f 1657/1/1657 1659/1/1659 1316/1/1316 +f 1310/1/1310 1658/1/1658 1657/1/1657 +f 1306/1/1306 1307/1/1307 1310/1/1310 +f 1305/1/1305 1083/1/1083 1306/1/1306 +f 1305/1/1305 1309/1/1309 1076/1/1076 +f 1074/1/1074 1309/1/1309 1647/1/1647 +f 1308/1/1308 1650/1/1650 1649/1/1649 +f 1648/1/1648 1646/1/1646 1647/1/1647 +f 1651/1/1651 1650/1/1650 1652/1/1652 +f 1653/1/1653 1645/1/1645 1646/1/1646 +f 1618/1/1618 1645/1/1645 1613/1/1613 +f 1612/1/1612 1610/1/1610 1613/1/1613 +f 1612/1/1612 1600/1/1600 1607/1/1607 +f 1654/1/1654 1652/1/1652 1655/1/1655 +f 1652/1/1652 1656/1/1656 1601/1/1601 +f 1601/1/1601 1007/1/1007 1004/1/1004 +f 1004/1/1004 1005/1/1005 995/1/995 +f 995/1/995 997/1/997 992/1/992 +f 992/1/992 989/1/989 990/1/990 +f 989/1/989 985/1/985 990/1/990 +f 985/1/985 984/1/984 979/1/979 +f 979/1/979 980/1/980 974/1/974 +f 986/1/986 971/1/971 970/1/970 +f 991/1/991 986/1/986 970/1/970 +f 993/1/993 991/1/991 998/1/998 +f 996/1/996 998/1/998 999/1/999 +f 1003/1/1003 1002/1/1002 962/1/962 +f 958/1/958 960/1/960 938/1/938 +f 962/1/962 963/1/963 959/1/959 +f 960/1/960 964/1/964 939/1/939 +f 966/1/966 965/1/965 963/1/963 +f 964/1/964 967/1/967 937/1/937 +f 968/1/968 969/1/969 965/1/965 +f 967/1/967 973/1/973 937/1/937 +f 974/1/974 972/1/972 969/1/969 +f 973/1/973 975/1/975 976/1/976 +f 975/1/975 1622/1/1622 976/1/976 +f 976/1/976 1622/1/1622 1626/1/1626 +f 977/1/977 978/1/978 972/1/972 +f 975/1/975 1620/1/1620 1622/1/1622 +f 983/1/983 1619/1/1619 978/1/978 +f 1619/1/1619 1615/1/1615 1616/1/1616 +f 1616/1/1616 1611/1/1611 1609/1/1609 +f 1620/1/1620 1621/1/1621 1622/1/1622 +f 1609/1/1609 1606/1/1606 1623/1/1623 +f 1624/1/1624 1625/1/1625 1627/1/1627 +f 1622/1/1622 1624/1/1624 1626/1/1626 +f 976/1/976 1626/1/1626 1324/1/1324 +f 973/1/973 976/1/976 924/1/924 +f 932/1/932 924/1/924 926/1/926 +f 933/1/933 926/1/926 931/1/931 +f 934/1/934 931/1/931 930/1/930 +f 941/1/941 930/1/930 946/1/946 +f 943/1/943 940/1/940 941/1/941 +f 942/1/942 940/1/940 943/1/943 +f 954/1/954 944/1/944 942/1/942 +f 953/1/953 957/1/957 954/1/954 +f 999/1/999 961/1/961 953/1/953 +f 1001/1/1001 996/1/996 999/1/999 +f 1597/1/1597 1000/1/1000 1001/1/1001 +f 1598/1/1598 1599/1/1599 1597/1/1597 +f 1603/1/1603 1600/1/1600 1598/1/1598 +f 1603/1/1603 1605/1/1605 1608/1/1608 +f 1609/1/1609 1605/1/1605 1606/1/1606 +f 1602/1/1602 1596/1/1596 1604/1/1604 +f 1630/1/1630 1629/1/1629 1606/1/1606 +f 1633/1/1633 1596/1/1596 1594/1/1594 +f 1632/1/1632 1631/1/1631 1629/1/1629 +f 1628/1/1628 1631/1/1631 1634/1/1634 +f 1637/1/1637 1639/1/1639 1634/1/1634 +f 1637/1/1637 1592/1/1592 1638/1/1638 +f 1636/1/1636 1594/1/1594 1635/1/1635 +f 1594/1/1594 1595/1/1595 1593/1/1593 +f 1593/1/1593 952/1/952 955/1/955 +f 955/1/955 951/1/951 956/1/956 +f 956/1/956 945/1/945 948/1/948 +f 948/1/948 947/1/947 949/1/949 +f 947/1/947 928/1/928 949/1/949 +f 928/1/928 927/1/927 922/1/922 +f 922/1/922 921/1/921 919/1/919 +f 929/1/929 923/1/923 1319/1/1319 +f 950/1/950 929/1/929 1319/1/1319 +f 1583/1/1583 950/1/950 1580/1/1580 +f 1584/1/1584 1580/1/1580 1576/1/1576 +f 1578/1/1578 1581/1/1581 1579/1/1579 +f 1569/1/1569 1567/1/1567 1564/1/1564 +f 1579/1/1579 1568/1/1568 1572/1/1572 +f 1567/1/1567 1566/1/1566 1565/1/1565 +f 1582/1/1582 1321/1/1321 1568/1/1568 +f 1566/1/1566 915/1/915 910/1/910 +f 1320/1/1320 916/1/916 1321/1/1321 +f 915/1/915 911/1/911 910/1/910 +f 919/1/919 917/1/917 916/1/916 +f 911/1/911 914/1/914 909/1/909 +f 914/1/914 1340/1/1340 909/1/909 +f 909/1/909 1340/1/1340 1341/1/1341 +f 920/1/920 918/1/918 917/1/917 +f 914/1/914 1323/1/1323 1340/1/1340 +f 925/1/925 1322/1/1322 918/1/918 +f 1322/1/1322 1325/1/1325 1326/1/1326 +f 1326/1/1326 1328/1/1328 1329/1/1329 +f 1323/1/1323 1331/1/1331 1340/1/1340 +f 1329/1/1329 1333/1/1333 1334/1/1334 +f 1339/1/1339 1337/1/1337 1343/1/1343 +f 1340/1/1340 1339/1/1339 1341/1/1341 +f 909/1/909 1341/1/1341 1345/1/1345 +f 911/1/911 909/1/909 906/1/906 +f 912/1/912 906/1/906 913/1/913 +f 1503/1/1503 913/1/913 1499/1/1499 +f 1496/1/1496 1499/1/1499 1497/1/1497 +f 1490/1/1490 1497/1/1497 1491/1/1491 +f 1492/1/1492 1495/1/1495 1490/1/1490 +f 1493/1/1493 1494/1/1494 1492/1/1492 +f 1574/1/1574 1570/1/1570 1493/1/1493 +f 1576/1/1576 1577/1/1577 1574/1/1574 +f 1585/1/1585 1584/1/1584 1576/1/1576 +f 1589/1/1589 1586/1/1586 1585/1/1585 +f 1590/1/1590 1591/1/1591 1589/1/1589 +f 1335/1/1335 1592/1/1592 1590/1/1590 +f 1335/1/1335 1332/1/1332 1330/1/1330 +f 1329/1/1329 1332/1/1332 1333/1/1333 +f 1336/1/1336 1408/1/1408 1410/1/1410 +f 1409/1/1409 1338/1/1338 1333/1/1333 +f 1407/1/1407 1408/1/1408 1404/1/1404 +f 1406/1/1406 1344/1/1344 1338/1/1338 +f 1342/1/1342 1344/1/1344 1346/1/1346 +f 1402/1/1402 1348/1/1348 1346/1/1346 +f 1402/1/1402 1387/1/1387 1386/1/1386 +f 1405/1/1405 1404/1/1404 1403/1/1403 +f 1404/1/1404 1587/1/1587 1588/1/1588 +f 1588/1/1588 1575/1/1575 1486/1/1486 +f 1486/1/1486 1489/1/1489 1485/1/1485 +f 1485/1/1485 1487/1/1487 1488/1/1488 +f 1488/1/1488 1498/1/1498 1505/1/1505 +f 1498/1/1498 1501/1/1501 1505/1/1505 +f 1501/1/1501 1500/1/1500 1504/1/1504 +f 1504/1/1504 907/1/907 908/1/908 +f 1506/1/1506 1507/1/1507 1510/1/1510 +f 1528/1/1528 1506/1/1506 1510/1/1510 +f 1529/1/1529 1528/1/1528 1527/1/1527 +f 1483/1/1483 1527/1/1527 1481/1/1481 +f 1521/1/1521 1522/1/1522 1519/1/1519 +f 1525/1/1525 1518/1/1518 1546/1/1546 +f 1519/1/1519 1514/1/1514 1520/1/1520 +f 1518/1/1518 1515/1/1515 1517/1/1517 +f 1513/1/1513 1511/1/1511 1514/1/1514 +f 1515/1/1515 1512/1/1512 1516/1/1516 +f 1509/1/1509 1508/1/1508 1511/1/1511 +f 1512/1/1512 897/1/897 1516/1/1516 +f 908/1/908 899/1/899 1508/1/1508 +f 897/1/897 898/1/898 896/1/896 +f 898/1/898 901/1/901 896/1/896 +f 896/1/896 901/1/901 1360/1/1360 +f 903/1/903 902/1/902 899/1/899 +f 898/1/898 900/1/900 901/1/901 +f 904/1/904 905/1/905 902/1/902 +f 905/1/905 1349/1/1349 1351/1/1351 +f 1351/1/1351 1350/1/1350 1353/1/1353 +f 900/1/900 1354/1/1354 901/1/901 +f 1353/1/1353 1357/1/1357 1355/1/1355 +f 1358/1/1358 1359/1/1359 1362/1/1362 +f 901/1/901 1358/1/1358 1360/1/1360 +f 896/1/896 1360/1/1360 1365/1/1365 +f 897/1/897 896/1/896 891/1/891 +f 1417/1/1417 891/1/891 1418/1/1418 +f 1549/1/1549 1418/1/1418 1551/1/1551 +f 1550/1/1550 1551/1/1551 1553/1/1553 +f 1540/1/1540 1553/1/1553 1541/1/1541 +f 1539/1/1539 1542/1/1542 1540/1/1540 +f 1530/1/1530 1543/1/1543 1539/1/1539 +f 1526/1/1526 1544/1/1544 1530/1/1530 +f 1481/1/1481 1523/1/1523 1526/1/1526 +f 1480/1/1480 1483/1/1483 1481/1/1481 +f 1388/1/1388 1484/1/1484 1480/1/1480 +f 1385/1/1385 1389/1/1389 1388/1/1388 +f 1384/1/1384 1387/1/1387 1385/1/1385 +f 1384/1/1384 1356/1/1356 1352/1/1352 +f 1353/1/1353 1356/1/1356 1357/1/1357 +f 1383/1/1383 1379/1/1379 1382/1/1382 +f 1381/1/1381 1363/1/1363 1357/1/1357 +f 1378/1/1378 1379/1/1379 1376/1/1376 +f 1380/1/1380 1364/1/1364 1363/1/1363 +f 1361/1/1361 1364/1/1364 1367/1/1367 +f 1372/1/1372 1371/1/1371 1367/1/1367 +f 1372/1/1372 1374/1/1374 1375/1/1375 +f 1377/1/1377 1376/1/1376 1373/1/1373 +f 1376/1/1376 1390/1/1390 1391/1/1391 +f 1391/1/1391 1482/1/1482 1531/1/1531 +f 1531/1/1531 1534/1/1534 1532/1/1532 +f 1532/1/1532 1538/1/1538 1537/1/1537 +f 1537/1/1537 1558/1/1558 1559/1/1559 +f 1558/1/1558 1555/1/1555 1559/1/1559 +f 1555/1/1555 1552/1/1552 1554/1/1554 +f 1554/1/1554 889/1/889 887/1/887 +f 1556/1/1556 1557/1/1557 1419/1/1419 +f 1561/1/1561 1556/1/1556 1419/1/1419 +f 1560/1/1560 1561/1/1561 1562/1/1562 +f 1535/1/1535 1562/1/1562 1428/1/1428 +f 1427/1/1427 1426/1/1426 1425/1/1425 +f 1420/1/1420 881/1/881 875/1/875 +f 1425/1/1425 882/1/882 1422/1/1422 +f 881/1/881 880/1/880 876/1/876 +f 884/1/884 883/1/883 882/1/882 +f 880/1/880 879/1/879 877/1/877 +f 885/1/885 886/1/886 883/1/883 +f 879/1/879 878/1/878 877/1/877 +f 887/1/887 888/1/888 886/1/886 +f 878/1/878 894/1/894 895/1/895 +f 894/1/894 1415/1/1415 895/1/895 +f 895/1/895 1415/1/1415 2433/1/2433 +f 890/1/890 893/1/893 888/1/888 +f 894/1/894 1413/1/1413 1415/1/1415 +f 892/1/892 1368/1/1368 893/1/893 +f 1368/1/1368 1369/1/1369 1411/1/1411 +f 1411/1/1411 1370/1/1370 1412/1/1412 +f 1413/1/1413 1414/1/1414 1415/1/1415 +f 1412/1/1412 1401/1/1401 1416/1/1416 +f 2432/1/2432 2431/1/2431 2430/1/2430 +f 1415/1/1415 2432/1/2432 2433/1/2433 +f 895/1/895 2433/1/2433 1796/1/1796 +f 878/1/878 895/1/895 796/1/796 +f 874/1/874 796/1/796 795/1/795 +f 872/1/872 795/1/795 870/1/870 +f 869/1/869 870/1/870 867/1/867 +f 865/1/865 867/1/867 866/1/866 +f 864/1/864 868/1/868 865/1/865 +f 863/1/863 1431/1/1431 864/1/864 +f 1429/1/1429 1430/1/1430 863/1/863 +f 1428/1/1428 1423/1/1423 1429/1/1429 +f 1536/1/1536 1535/1/1535 1428/1/1428 +f 1395/1/1395 1533/1/1533 1536/1/1536 +f 1394/1/1394 1392/1/1392 1395/1/1395 +f 1393/1/1393 1374/1/1374 1394/1/1394 +f 1393/1/1393 1398/1/1398 1399/1/1399 +f 1412/1/1412 1398/1/1398 1401/1/1401 +f 1396/1/1396 1397/1/1397 1400/1/1400 +f 1814/1/1814 1813/1/1813 1401/1/1401 +f 1812/1/1812 1397/1/1397 1809/1/1809 +f 1811/1/1811 1808/1/1808 1813/1/1813 +f 1800/1/1800 1808/1/1808 1801/1/1801 +f 1803/1/1803 1799/1/1799 1801/1/1801 +f 1803/1/1803 1806/1/1806 1802/1/1802 +f 1810/1/1810 1809/1/1809 1807/1/1807 +f 1809/1/1809 1815/1/1815 1816/1/1816 +f 1816/1/1816 862/1/862 859/1/859 +f 859/1/859 861/1/861 858/1/858 +f 858/1/858 860/1/860 808/1/808 +f 808/1/808 809/1/809 805/1/805 +f 809/1/809 801/1/801 805/1/805 +f 801/1/801 800/1/800 798/1/798 +f 798/1/798 797/1/797 792/1/792 +f 802/1/802 799/1/799 803/1/803 +f 806/1/806 802/1/802 803/1/803 +f 807/1/807 806/1/806 810/1/810 +f 812/1/812 810/1/810 814/1/814 +f 813/1/813 811/1/811 815/1/815 +f 824/1/824 826/1/826 827/1/827 +f 815/1/815 825/1/825 821/1/821 +f 826/1/826 834/1/834 833/1/833 +f 856/1/856 855/1/855 825/1/825 +f 834/1/834 789/1/789 786/1/786 +f 804/1/804 788/1/788 855/1/855 +f 789/1/789 784/1/784 786/1/786 +f 792/1/792 790/1/790 788/1/788 +f 784/1/784 787/1/787 783/1/783 +f 787/1/787 1788/1/1788 783/1/783 +f 783/1/783 1788/1/1788 1784/1/1784 +f 793/1/793 791/1/791 790/1/790 +f 787/1/787 1789/1/1789 1788/1/1788 +f 794/1/794 1792/1/1792 791/1/791 +f 1792/1/1792 1794/1/1794 1791/1/1791 +f 1791/1/1791 1795/1/1795 1793/1/1793 +f 1789/1/1789 1790/1/1790 1788/1/1788 +f 1793/1/1793 1948/1/1948 1787/1/1787 +f 1782/1/1782 1785/1/1785 1781/1/1781 +f 1788/1/1788 1782/1/1782 1784/1/1784 +f 783/1/783 1784/1/1784 762/1/762 +f 784/1/784 783/1/783 781/1/781 +f 785/1/785 781/1/781 780/1/780 +f 835/1/835 780/1/780 837/1/837 +f 836/1/836 837/1/837 839/1/839 +f 838/1/838 839/1/839 844/1/844 +f 853/1/853 830/1/830 838/1/838 +f 829/1/829 830/1/830 853/1/853 +f 822/1/822 828/1/828 829/1/829 +f 817/1/817 820/1/820 822/1/822 +f 814/1/814 816/1/816 817/1/817 +f 818/1/818 812/1/812 814/1/814 +f 1819/1/1819 857/1/857 818/1/818 +f 1818/1/1818 1817/1/1817 1819/1/1819 +f 1805/1/1805 1806/1/1806 1818/1/1818 +f 1805/1/1805 1804/1/1804 1798/1/1798 +f 1793/1/1793 1804/1/1804 1948/1/1948 +f 1820/1/1820 1821/1/1821 1947/1/1947 +f 1946/1/1946 1786/1/1786 1948/1/1948 +f 1944/1/1944 1821/1/1821 1823/1/1823 +f 1945/1/1945 1779/1/1779 1786/1/1786 +f 1778/1/1778 1779/1/1779 1780/1/1780 +f 1941/1/1941 1942/1/1942 1780/1/1780 +f 1941/1/1941 1825/1/1825 1938/1/1938 +f 1943/1/1943 1823/1/1823 1940/1/1940 +f 1823/1/1823 1822/1/1822 1824/1/1824 +f 1824/1/1824 819/1/819 854/1/854 +f 854/1/854 823/1/823 850/1/850 +f 850/1/850 848/1/848 847/1/847 +f 847/1/847 843/1/843 845/1/845 +f 843/1/843 842/1/842 845/1/845 +f 842/1/842 840/1/840 841/1/841 +f 841/1/841 782/1/782 776/1/776 +f 846/1/846 775/1/775 778/1/778 +f 851/1/851 846/1/846 778/1/778 +f 849/1/849 851/1/851 1831/1/1831 +f 1830/1/1830 1831/1/1831 1832/1/1832 +f 1834/1/1834 852/1/852 1836/1/1836 +f 1841/1/1841 1842/1/1842 1848/1/1848 +f 1836/1/1836 1837/1/1837 1838/1/1838 +f 1842/1/1842 768/1/768 1854/1/1854 +f 777/1/777 767/1/767 1837/1/1837 +f 768/1/768 764/1/764 765/1/765 +f 774/1/774 763/1/763 767/1/767 +f 764/1/764 759/1/759 765/1/765 +f 776/1/776 757/1/757 763/1/763 +f 759/1/759 756/1/756 755/1/755 +f 756/1/756 747/1/747 755/1/755 +f 755/1/755 747/1/747 746/1/746 +f 779/1/779 758/1/758 757/1/757 +f 756/1/756 754/1/754 747/1/747 +f 761/1/761 760/1/760 758/1/758 +f 760/1/760 1949/1/1949 752/1/752 +f 752/1/752 753/1/753 748/1/748 +f 754/1/754 749/1/749 747/1/747 +f 748/1/748 744/1/744 745/1/745 +f 743/1/743 742/1/742 741/1/741 +f 747/1/747 743/1/743 746/1/746 +f 755/1/755 746/1/746 715/1/715 +f 759/1/759 755/1/755 766/1/766 +f 769/1/769 766/1/766 770/1/770 +f 1856/1/1856 770/1/770 1858/1/1858 +f 1851/1/1851 1858/1/1858 1933/1/1933 +f 1852/1/1852 1933/1/1933 1932/1/1932 +f 1850/1/1850 1849/1/1849 1852/1/1852 +f 1847/1/1847 1849/1/1849 1850/1/1850 +f 1843/1/1843 1846/1/1846 1847/1/1847 +f 1839/1/1839 1840/1/1840 1843/1/1843 +f 1832/1/1832 1835/1/1835 1839/1/1839 +f 1833/1/1833 1830/1/1830 1832/1/1832 +f 1829/1/1829 1828/1/1828 1833/1/1833 +f 1827/1/1827 1826/1/1826 1829/1/1829 +f 1937/1/1937 1825/1/1825 1827/1/1827 +f 1937/1/1937 750/1/750 1939/1/1939 +f 748/1/748 750/1/750 744/1/744 +f 751/1/751 736/1/736 1950/1/1950 +f 738/1/738 739/1/739 744/1/744 +f 735/1/735 736/1/736 728/1/728 +f 737/1/737 734/1/734 739/1/739 +f 740/1/740 734/1/734 732/1/732 +f 727/1/727 718/1/718 732/1/732 +f 727/1/727 725/1/725 723/1/723 +f 733/1/733 728/1/728 731/1/731 +f 728/1/728 1936/1/1936 729/1/729 +f 729/1/729 1844/1/1844 1935/1/1935 +f 1935/1/1935 1845/1/1845 1930/1/1930 +f 1930/1/1930 1934/1/1934 1928/1/1928 +f 1928/1/1928 1931/1/1931 1866/1/1866 +f 1931/1/1931 1860/1/1860 1866/1/1866 +f 1860/1/1860 1857/1/1857 1859/1/1859 +f 1859/1/1859 772/1/772 773/1/773 +f 1861/1/1861 1862/1/1862 1864/1/1864 +f 1867/1/1867 1861/1/1861 1864/1/1864 +f 1929/1/1929 1867/1/1867 1876/1/1876 +f 1927/1/1927 1876/1/1876 1877/1/1877 +f 1873/1/1873 1870/1/1870 1869/1/1869 +f 1880/1/1880 1881/1/1881 1887/1/1887 +f 1869/1/1869 1872/1/1872 1875/1/1875 +f 1881/1/1881 1914/1/1914 1893/1/1893 +f 1868/1/1868 1871/1/1871 1872/1/1872 +f 1914/1/1914 1454/1/1454 1455/1/1455 +f 1865/1/1865 1863/1/1863 1871/1/1871 +f 1454/1/1454 709/1/709 1455/1/1455 +f 773/1/773 708/1/708 1863/1/1863 +f 709/1/709 703/1/703 701/1/701 +f 703/1/703 702/1/702 701/1/701 +f 701/1/701 702/1/702 700/1/700 +f 771/1/771 707/1/707 708/1/708 +f 703/1/703 706/1/706 702/1/702 +f 714/1/714 710/1/710 707/1/707 +f 710/1/710 713/1/713 711/1/711 +f 711/1/711 716/1/716 717/1/717 +f 706/1/706 704/1/704 702/1/702 +f 717/1/717 720/1/720 705/1/705 +f 698/1/698 1444/1/1444 699/1/699 +f 702/1/702 698/1/698 700/1/700 +f 701/1/701 700/1/700 697/1/697 +f 709/1/709 701/1/701 1453/1/1453 +f 1913/1/1913 1453/1/1453 1903/1/1903 +f 1895/1/1895 1903/1/1903 1896/1/1896 +f 1891/1/1891 1896/1/1896 1897/1/1897 +f 1892/1/1892 1897/1/1897 1899/1/1899 +f 1889/1/1889 1888/1/1888 1892/1/1892 +f 1883/1/1883 1886/1/1886 1889/1/1889 +f 1879/1/1879 1882/1/1882 1883/1/1883 +f 1877/1/1877 1874/1/1874 1879/1/1879 +f 1925/1/1925 1927/1/1927 1877/1/1877 +f 1432/1/1432 1926/1/1926 1925/1/1925 +f 726/1/726 730/1/730 1432/1/1432 +f 722/1/722 725/1/725 726/1/726 +f 722/1/722 721/1/721 719/1/719 +f 717/1/717 721/1/721 720/1/720 +f 724/1/724 1433/1/1433 1435/1/1435 +f 1436/1/1436 1439/1/1439 720/1/720 +f 1438/1/1438 1433/1/1433 1437/1/1437 +f 1440/1/1440 696/1/696 1439/1/1439 +f 695/1/695 696/1/696 693/1/693 +f 694/1/694 690/1/690 693/1/693 +f 694/1/694 1443/1/1443 691/1/691 +f 1441/1/1441 1437/1/1437 1442/1/1442 +f 1437/1/1437 1434/1/1434 1452/1/1452 +f 1452/1/1452 1884/1/1884 1923/1/1923 +f 1923/1/1923 1924/1/1924 1921/1/1921 +f 1921/1/1921 1898/1/1898 1922/1/1922 +f 1922/1/1922 1902/1/1902 1907/1/1907 +f 1902/1/1902 1901/1/1901 1907/1/1907 +f 1901/1/1901 1900/1/1900 1905/1/1905 +f 1905/1/1905 1904/1/1904 1911/1/1911 +f 1906/1/1906 1908/1/1908 1910/1/1910 +f 1909/1/1909 1906/1/1906 1910/1/1910 +f 1917/1/1917 1909/1/1909 1916/1/1916 +f 1918/1/1918 1916/1/1916 650/1/650 +f 1478/1/1478 1915/1/1915 1477/1/1477 +f 647/1/647 652/1/652 653/1/653 +f 1477/1/1477 1475/1/1475 651/1/651 +f 652/1/652 673/1/673 656/1/656 +f 1476/1/1476 672/1/672 1475/1/1475 +f 673/1/673 668/1/668 662/1/662 +f 1912/1/1912 671/1/671 672/1/672 +f 668/1/668 664/1/664 662/1/662 +f 1911/1/1911 669/1/669 671/1/671 +f 664/1/664 670/1/670 665/1/665 +f 670/1/670 675/1/675 665/1/665 +f 665/1/665 675/1/675 2420/1/2420 +f 1456/1/1456 676/1/676 669/1/669 +f 670/1/670 674/1/674 675/1/675 +f 678/1/678 677/1/677 676/1/676 +f 677/1/677 681/1/681 679/1/679 +f 679/1/679 682/1/682 683/1/683 +f 674/1/674 680/1/680 675/1/675 +f 683/1/683 685/1/685 684/1/684 +f 2421/1/2421 2424/1/2424 2422/1/2422 +f 675/1/675 2421/1/2421 2420/1/2420 +f 665/1/665 2420/1/2420 1975/1/1975 +f 664/1/664 665/1/665 663/1/663 +f 657/1/657 663/1/663 660/1/660 +f 658/1/658 660/1/660 661/1/661 +f 659/1/659 661/1/661 1464/1/1464 +f 1466/1/1466 1464/1/1464 1467/1/1467 +f 639/1/639 646/1/646 1466/1/1466 +f 638/1/638 641/1/641 639/1/639 +f 643/1/643 642/1/642 638/1/638 +f 650/1/650 649/1/649 643/1/643 +f 1919/1/1919 1918/1/1918 650/1/650 +f 1447/1/1447 1920/1/1920 1919/1/1919 +f 1445/1/1445 1448/1/1448 1447/1/1447 +f 689/1/689 1443/1/1443 1445/1/1445 +f 689/1/689 687/1/687 686/1/686 +f 683/1/683 687/1/687 685/1/685 +f 688/1/688 1446/1/1446 1449/1/1449 +f 1450/1/1450 2425/1/2425 685/1/685 +f 2429/1/2429 1446/1/1446 1951/1/1951 +f 2428/1/2428 2423/1/2423 2425/1/2425 +f 1976/1/1976 2423/1/2423 1970/1/1970 +f 1969/1/1969 1968/1/1968 1970/1/1970 +f 1969/1/1969 1953/1/1953 1963/1/1963 +f 2427/1/2427 1951/1/1951 2426/1/2426 +f 1951/1/1951 1451/1/1451 1952/1/1952 +f 1952/1/1952 644/1/644 637/1/637 +f 629/1/629 631/1/631 607/1/607 +f 629/1/629 607/1/607 606/1/606 +f 1958/1/1958 629/1/629 606/1/606 +f 637/1/637 636/1/636 630/1/630 +f 636/1/636 640/1/640 634/1/634 +f 634/1/634 1468/1/1468 635/1/635 +f 1470/1/1470 1469/1/1469 1471/1/1471 +f 1465/1/1465 1463/1/1463 1468/1/1468 +f 1463/1/1463 1461/1/1461 1462/1/1462 +f 1462/1/1462 1459/1/1459 1457/1/1457 +f 1469/1/1469 1473/1/1473 1471/1/1471 +f 1470/1/1470 1471/1/1471 1472/1/1472 +f 632/1/632 1470/1/1470 1472/1/1472 +f 631/1/631 632/1/632 607/1/607 +f 600/1/600 597/1/597 598/1/598 +f 600/1/600 598/1/598 601/1/601 +f 633/1/633 596/1/596 599/1/599 +f 596/1/596 594/1/594 591/1/591 +f 594/1/594 592/1/592 591/1/591 +f 589/1/589 588/1/588 585/1/585 +f 595/1/595 593/1/593 592/1/592 +f 1457/1/1457 1458/1/1458 593/1/593 +f 667/1/667 1460/1/1460 1458/1/1458 +f 1474/1/1474 1977/1/1977 1979/1/1979 +f 1474/1/1474 1979/1/1979 586/1/586 +f 666/1/666 1974/1/1974 1460/1/1460 +f 1974/1/1974 1972/1/1972 1973/1/1973 +f 1973/1/1973 1967/1/1967 1966/1/1966 +f 1977/1/1977 1978/1/1978 1979/1/1979 +f 1966/1/1966 1965/1/1965 1980/1/1980 +f 1981/1/1981 1982/1/1982 1984/1/1984 +f 1979/1/1979 1981/1/1981 1983/1/1983 +f 586/1/586 1979/1/1979 1983/1/1983 +f 587/1/587 1474/1/1474 586/1/586 +f 588/1/588 587/1/587 585/1/585 +f 589/1/589 585/1/585 584/1/584 +f 590/1/590 589/1/589 584/1/584 +f 597/1/597 590/1/590 598/1/598 +f 601/1/601 598/1/598 602/1/602 +f 604/1/604 600/1/600 601/1/601 +f 606/1/606 607/1/607 604/1/604 +f 605/1/605 603/1/603 609/1/609 +f 603/1/603 581/1/581 609/1/609 +f 582/1/582 576/1/576 574/1/574 +f 582/1/582 574/1/574 614/1/614 +f 583/1/583 579/1/579 581/1/581 +f 579/1/579 580/1/580 577/1/577 +f 577/1/577 578/1/578 566/1/566 +f 576/1/576 575/1/575 574/1/574 +f 614/1/614 574/1/574 615/1/615 +f 611/1/611 582/1/582 614/1/614 +f 610/1/610 611/1/611 612/1/612 +f 608/1/608 610/1/610 612/1/612 +f 1995/1/1995 606/1/606 608/1/608 +f 1958/1/1958 606/1/606 1995/1/1995 +f 1956/1/1956 629/1/629 1958/1/1958 +f 1955/1/1955 1954/1/1954 1956/1/1956 +f 1959/1/1959 1953/1/1953 1955/1/1955 +f 1959/1/1959 1961/1/1961 1962/1/1962 +f 1966/1/1966 1961/1/1961 1965/1/1965 +f 1960/1/1960 1957/1/1957 1964/1/1964 +f 1987/1/1987 1986/1/1986 1965/1/1965 +f 1988/1/1988 1989/1/1989 1986/1/1986 +f 1990/1/1990 1957/1/1957 1994/1/1994 +f 1993/1/1993 1989/1/1989 1988/1/1988 +f 1985/1/1985 1989/1/1989 1992/1/1992 +f 2015/1/2015 2010/1/2010 1992/1/1992 +f 1991/1/1991 1994/1/1994 1996/1/1996 +f 2008/1/2008 2010/1/2010 2015/1/2015 +f 2013/1/2013 2010/1/2010 2011/1/2011 +f 2012/1/2012 2011/1/2011 544/1/544 +f 564/1/564 2012/1/2012 544/1/544 +f 565/1/565 2014/1/2014 564/1/564 +f 567/1/567 565/1/565 562/1/562 +f 566/1/566 562/1/562 568/1/568 +f 571/1/571 568/1/568 569/1/569 +f 573/1/573 569/1/569 572/1/572 +f 618/1/618 573/1/573 572/1/572 +f 613/1/613 618/1/618 617/1/617 +f 616/1/616 613/1/613 617/1/617 +f 1998/1/1998 616/1/616 2001/1/2001 +f 1999/1/1999 2001/1/2001 2003/1/2003 +f 2000/1/2000 1997/1/1997 1999/1/1999 +f 2004/1/2004 1996/1/1996 2000/1/2000 +f 2004/1/2004 2006/1/2006 2007/1/2007 +f 541/1/541 2006/1/2006 537/1/537 +f 2005/1/2005 2002/1/2002 2009/1/2009 +f 536/1/536 534/1/534 537/1/537 +f 533/1/533 530/1/530 534/1/534 +f 535/1/535 2002/1/2002 531/1/531 +f 532/1/532 530/1/530 533/1/533 +f 525/1/525 526/1/526 529/1/529 +f 525/1/525 523/1/523 526/1/526 +f 521/1/521 523/1/523 525/1/525 +f 542/1/542 534/1/534 530/1/530 +f 440/1/440 539/1/539 542/1/542 +f 439/1/439 538/1/538 440/1/440 +f 545/1/545 543/1/543 439/1/439 +f 560/1/560 546/1/546 545/1/545 +f 563/1/563 560/1/560 558/1/558 +f 570/1/570 558/1/558 623/1/623 +f 621/1/621 623/1/623 624/1/624 +f 619/1/619 621/1/621 622/1/622 +f 620/1/620 622/1/622 2410/1/2410 +f 2021/1/2021 620/1/620 2410/1/2410 +f 2409/1/2409 626/1/626 2407/1/2407 +f 2405/1/2405 2408/1/2408 2402/1/2402 +f 626/1/626 627/1/627 2407/1/2407 +f 627/1/627 625/1/625 628/1/628 +f 628/1/628 559/1/559 561/1/561 +f 2408/1/2408 2411/1/2411 2402/1/2402 +f 2405/1/2405 2402/1/2402 2401/1/2401 +f 2404/1/2404 2405/1/2405 2401/1/2401 +f 2019/1/2019 2406/1/2406 2404/1/2404 +f 2017/1/2017 2021/1/2021 2019/1/2019 +f 2020/1/2020 2398/1/2398 2397/1/2397 +f 2397/1/2397 2399/1/2399 2396/1/2396 +f 2393/1/2393 2395/1/2395 2392/1/2392 +f 2395/1/2395 2389/1/2389 2392/1/2392 +f 2399/1/2399 2400/1/2400 2396/1/2396 +f 2395/1/2395 2414/1/2414 2415/1/2415 +f 2403/1/2403 2413/1/2413 2400/1/2400 +f 2414/1/2414 554/1/554 2415/1/2415 +f 2412/1/2412 1479/1/1479 2413/1/2413 +f 561/1/561 553/1/553 1479/1/1479 +f 557/1/557 443/1/443 553/1/553 +f 443/1/443 436/1/436 438/1/438 +f 438/1/438 437/1/437 441/1/441 +f 441/1/441 526/1/526 523/1/523 +f 527/1/527 524/1/524 528/1/528 +f 442/1/442 527/1/527 528/1/528 +f 444/1/444 442/1/442 445/1/445 +f 448/1/448 444/1/444 445/1/445 +f 554/1/554 448/1/448 555/1/555 +f 2415/1/2415 554/1/554 555/1/555 +f 2395/1/2395 2415/1/2415 2389/1/2389 +f 2392/1/2392 2389/1/2389 2387/1/2387 +f 2384/1/2384 2390/1/2390 2380/1/2380 +f 2380/1/2380 556/1/556 2377/1/2377 +f 2381/1/2381 2379/1/2379 2378/1/2378 +f 2381/1/2381 2378/1/2378 2382/1/2382 +f 2376/1/2376 2377/1/2377 454/1/454 +f 2374/1/2374 2373/1/2373 2371/1/2371 +f 2382/1/2382 2378/1/2378 2374/1/2374 +f 2385/1/2385 2381/1/2381 2382/1/2382 +f 2388/1/2388 2383/1/2383 2385/1/2385 +f 2386/1/2386 2383/1/2383 2388/1/2388 +f 2391/1/2391 2387/1/2387 2386/1/2386 +f 2023/1/2023 2394/1/2394 2391/1/2391 +f 2018/1/2018 2023/1/2023 2022/1/2022 +f 2016/1/2016 2017/1/2017 2018/1/2018 +f 531/1/531 2016/1/2016 518/1/518 +f 525/1/525 518/1/518 521/1/521 +f 520/1/520 523/1/523 521/1/521 +f 522/1/522 520/1/520 516/1/516 +f 522/1/522 516/1/516 509/1/509 +f 508/1/508 509/1/509 511/1/511 +f 511/1/511 510/1/510 508/1/508 +f 517/1/517 513/1/513 512/1/512 +f 513/1/513 519/1/519 514/1/514 +f 508/1/508 510/1/510 507/1/507 +f 507/1/507 504/1/504 508/1/508 +f 506/1/506 504/1/504 505/1/505 +f 459/1/459 506/1/506 505/1/505 +f 450/1/450 459/1/459 456/1/456 +f 447/1/447 446/1/446 450/1/450 +f 449/1/449 447/1/447 451/1/451 +f 454/1/454 451/1/451 455/1/455 +f 2369/1/2369 455/1/455 2367/1/2367 +f 2047/1/2047 2367/1/2367 2048/1/2048 +f 2368/1/2368 2367/1/2367 2047/1/2047 +f 2370/1/2370 2368/1/2368 2372/1/2372 +f 2419/1/2419 2370/1/2370 2372/1/2372 +f 2418/1/2418 2370/1/2370 2419/1/2419 +f 2417/1/2417 2375/1/2375 2418/1/2418 +f 2027/1/2027 2416/1/2416 2417/1/2417 +f 2025/1/2025 2024/1/2024 2027/1/2027 +f 514/1/514 2025/1/2025 515/1/515 +f 2026/1/2026 2030/1/2030 2028/1/2028 +f 2028/1/2028 2039/1/2039 2036/1/2036 +f 2036/1/2036 2040/1/2040 2037/1/2037 +f 2037/1/2037 2041/1/2041 2042/1/2042 +f 2033/1/2033 2038/1/2038 2034/1/2034 +f 2042/1/2042 2044/1/2044 2043/1/2043 +f 2042/1/2042 2045/1/2045 2044/1/2044 +f 2050/1/2050 2049/1/2049 2051/1/2051 +f 2046/1/2046 552/1/552 2045/1/2045 +f 2049/1/2049 549/1/549 2051/1/2051 +f 551/1/551 453/1/453 552/1/552 +f 453/1/453 452/1/452 458/1/458 +f 452/1/452 457/1/457 458/1/458 +f 457/1/457 460/1/460 461/1/461 +f 461/1/461 460/1/460 500/1/500 +f 466/1/466 467/1/467 464/1/464 +f 465/1/465 464/1/464 469/1/469 +f 463/1/463 462/1/462 465/1/465 +f 549/1/549 463/1/463 550/1/550 +f 2051/1/2051 549/1/549 550/1/550 +f 2050/1/2050 2051/1/2051 2052/1/2052 +f 2053/1/2053 2050/1/2050 2052/1/2052 +f 2060/1/2060 2053/1/2053 2061/1/2061 +f 2063/1/2063 2061/1/2061 2064/1/2064 +f 2035/1/2035 2062/1/2062 2063/1/2063 +f 2031/1/2031 2034/1/2034 2035/1/2035 +f 2029/1/2029 2032/1/2032 2031/1/2031 +f 496/1/496 2029/1/2029 493/1/493 +f 498/1/498 515/1/515 496/1/496 +f 503/1/503 498/1/498 502/1/502 +f 502/1/502 501/1/501 503/1/503 +f 460/1/460 501/1/501 500/1/500 +f 461/1/461 500/1/500 483/1/483 +f 497/1/497 495/1/495 499/1/499 +f 472/1/472 483/1/483 484/1/484 +f 468/1/468 472/1/472 473/1/473 +f 481/1/481 474/1/474 473/1/473 +f 482/1/482 495/1/495 486/1/486 +f 485/1/485 474/1/474 481/1/481 +f 476/1/476 474/1/474 479/1/479 +f 2364/1/2364 2363/1/2363 479/1/479 +f 480/1/480 487/1/487 488/1/488 +f 486/1/486 491/1/491 487/1/487 +f 491/1/491 494/1/494 2069/1/2069 +f 2069/1/2069 2066/1/2066 359/1/359 +f 2066/1/2066 2065/1/2065 317/1/317 +f 318/1/318 316/1/316 312/1/312 +f 2065/1/2065 2067/1/2067 317/1/317 +f 316/1/316 315/1/315 311/1/311 +f 2059/1/2059 2068/1/2068 2067/1/2067 +f 2068/1/2068 2058/1/2058 2057/1/2057 +f 2057/1/2057 2054/1/2054 2056/1/2056 +f 315/1/315 314/1/314 311/1/311 +f 316/1/316 311/1/311 312/1/312 +f 320/1/320 312/1/312 313/1/313 +f 319/1/319 320/1/320 321/1/321 +f 296/1/296 298/1/298 294/1/294 +f 298/1/298 297/1/297 294/1/294 +f 294/1/294 297/1/297 293/1/293 +f 322/1/322 300/1/300 299/1/299 +f 298/1/298 301/1/301 297/1/297 +f 301/1/301 303/1/303 297/1/297 +f 297/1/297 303/1/303 302/1/302 +f 303/1/303 304/1/304 302/1/302 +f 306/1/306 304/1/304 303/1/303 +f 309/1/309 307/1/307 300/1/300 +f 301/1/301 306/1/306 303/1/303 +f 309/1/309 308/1/308 307/1/307 +f 306/1/306 360/1/360 304/1/304 +f 310/1/310 363/1/363 308/1/308 +f 360/1/360 361/1/361 304/1/304 +f 304/1/304 361/1/361 362/1/362 +f 2056/1/2056 2055/1/2055 363/1/363 +f 2055/1/2055 478/1/478 364/1/364 +f 364/1/364 470/1/470 477/1/477 +f 477/1/477 475/1/475 2092/1/2092 +f 365/1/365 2091/1/2091 2093/1/2093 +f 361/1/361 365/1/365 362/1/362 +f 304/1/304 362/1/362 305/1/305 +f 302/1/302 304/1/304 305/1/305 +f 297/1/297 302/1/302 285/1/285 +f 297/1/297 285/1/285 293/1/293 +f 292/1/292 294/1/294 293/1/293 +f 283/1/283 280/1/280 273/1/273 +f 286/1/286 282/1/282 281/1/281 +f 282/1/282 284/1/284 277/1/277 +f 277/1/277 278/1/278 275/1/275 +f 280/1/280 274/1/274 272/1/272 +f 280/1/280 272/1/272 273/1/273 +f 289/1/289 283/1/283 273/1/273 +f 288/1/288 283/1/283 289/1/289 +f 290/1/290 287/1/287 288/1/288 +f 295/1/295 292/1/292 290/1/290 +f 323/1/323 321/1/321 295/1/295 +f 492/1/492 323/1/323 2071/1/2071 +f 489/1/489 490/1/490 492/1/492 +f 2364/1/2364 489/1/489 2365/1/2365 +f 2365/1/2365 2363/1/2363 2364/1/2364 +f 2092/1/2092 2363/1/2363 2087/1/2087 +f 2088/1/2088 2087/1/2087 2084/1/2084 +f 2366/1/2366 2070/1/2070 2086/1/2086 +f 2079/1/2079 2084/1/2084 2080/1/2080 +f 2083/1/2083 2079/1/2079 2078/1/2078 +f 2083/1/2083 2078/1/2078 2082/1/2082 +f 2077/1/2077 2082/1/2082 2078/1/2078 +f 2076/1/2076 2070/1/2070 2072/1/2072 +f 2081/1/2081 2082/1/2082 2077/1/2077 +f 2083/1/2083 2082/1/2082 2097/1/2097 +f 2094/1/2094 2083/1/2083 2097/1/2097 +f 2095/1/2095 2090/1/2090 2094/1/2094 +f 366/1/366 2095/1/2095 367/1/367 +f 279/1/279 367/1/367 276/1/276 +f 275/1/275 276/1/276 263/1/263 +f 269/1/269 263/1/263 262/1/262 +f 267/1/267 262/1/262 264/1/264 +f 270/1/270 268/1/268 267/1/267 +f 327/1/327 270/1/270 331/1/331 +f 328/1/328 327/1/327 331/1/331 +f 332/1/332 271/1/271 340/1/340 +f 271/1/271 265/1/265 340/1/340 +f 265/1/265 261/1/261 266/1/266 +f 261/1/261 259/1/259 258/1/258 +f 341/1/341 260/1/260 344/1/344 +f 338/1/338 341/1/341 339/1/339 +f 334/1/334 338/1/338 339/1/339 +f 329/1/329 333/1/333 334/1/334 +f 326/1/326 328/1/328 329/1/329 +f 325/1/325 291/1/291 326/1/326 +f 2073/1/2073 324/1/324 325/1/325 +f 2072/1/2072 2073/1/2073 2074/1/2074 +f 2104/1/2104 2074/1/2074 2107/1/2107 +f 2107/1/2107 2103/1/2103 2104/1/2104 +f 2098/1/2098 2103/1/2103 2101/1/2101 +f 2099/1/2099 2098/1/2098 2101/1/2101 +f 2096/1/2096 2099/1/2099 2100/1/2100 +f 257/1/257 2096/1/2096 2100/1/2100 +f 2359/1/2359 2102/1/2102 2358/1/2358 +f 2358/1/2358 2102/1/2102 2109/1/2109 +f 2360/1/2360 2355/1/2355 2361/1/2361 +f 255/1/255 2360/1/2360 2361/1/2361 +f 253/1/253 255/1/255 254/1/254 +f 252/1/252 257/1/257 253/1/253 +f 258/1/258 252/1/252 251/1/251 +f 250/1/250 251/1/251 248/1/248 +f 343/1/343 250/1/250 346/1/346 +f 345/1/345 346/1/346 348/1/348 +f 347/1/347 345/1/345 348/1/348 +f 336/1/336 337/1/337 347/1/347 +f 330/1/330 335/1/335 336/1/336 +f 2112/1/2112 330/1/330 2114/1/2114 +f 2111/1/2111 2075/1/2075 2112/1/2112 +f 2105/1/2105 2111/1/2111 2110/1/2110 +f 2110/1/2110 2106/1/2106 2105/1/2105 +f 2102/1/2102 2106/1/2106 2109/1/2109 +f 2358/1/2358 2109/1/2109 2354/1/2354 +f 2108/1/2108 2113/1/2113 2357/1/2357 +f 2352/1/2352 2354/1/2354 2353/1/2353 +f 2356/1/2356 2352/1/2352 2351/1/2351 +f 2119/1/2119 375/1/375 2351/1/2351 +f 2118/1/2118 2113/1/2113 2115/1/2115 +f 2349/1/2349 375/1/375 2119/1/2119 +f 374/1/374 375/1/375 373/1/373 +f 374/1/374 373/1/373 183/1/183 +f 182/1/182 183/1/183 371/1/371 +f 2350/1/2350 2120/1/2120 372/1/372 +f 2115/1/2115 2117/1/2117 2120/1/2120 +f 2117/1/2117 2116/1/2116 2122/1/2122 +f 2124/1/2124 2123/1/2123 2127/1/2127 +f 2116/1/2116 356/1/356 2122/1/2122 +f 356/1/356 350/1/350 352/1/352 +f 352/1/352 349/1/349 351/1/351 +f 349/1/349 247/1/247 351/1/351 +f 353/1/353 242/1/242 241/1/241 +f 353/1/353 241/1/241 357/1/357 +f 245/1/245 243/1/243 247/1/247 +f 246/1/246 244/1/244 243/1/243 +f 244/1/244 249/1/249 237/1/237 +f 242/1/242 238/1/238 241/1/241 +f 357/1/357 241/1/241 239/1/239 +f 354/1/354 353/1/353 357/1/357 +f 355/1/355 354/1/354 2217/1/2217 +f 2123/1/2123 2217/1/2217 2127/1/2127 +f 2215/1/2215 358/1/358 2214/1/2214 +f 2214/1/2214 2216/1/2216 2210/1/2210 +f 2213/1/2213 2212/1/2212 2207/1/2207 +f 2203/1/2203 2209/1/2209 2204/1/2204 +f 2209/1/2209 2220/1/2220 2204/1/2204 +f 2204/1/2204 2220/1/2220 2221/1/2221 +f 2220/1/2220 232/1/232 2221/1/2221 +f 2219/1/2219 232/1/232 2220/1/2220 +f 2210/1/2210 2211/1/2211 2208/1/2208 +f 2209/1/2209 2219/1/2219 2220/1/2220 +f 2210/1/2210 2218/1/2218 2211/1/2211 +f 2219/1/2219 235/1/235 232/1/232 +f 240/1/240 233/1/233 2218/1/2218 +f 236/1/236 234/1/234 233/1/233 +f 237/1/237 224/1/224 234/1/234 +f 224/1/224 256/1/256 225/1/225 +f 225/1/225 376/1/376 221/1/221 +f 374/1/374 183/1/183 221/1/221 +f 219/1/219 184/1/184 217/1/217 +f 220/1/220 217/1/217 218/1/218 +f 223/1/223 218/1/218 190/1/190 +f 231/1/231 222/1/222 223/1/223 +f 235/1/235 231/1/231 232/1/232 +f 2221/1/2221 232/1/232 229/1/229 +f 2204/1/2204 2221/1/2221 2222/1/2222 +f 2201/1/2201 2222/1/2222 2202/1/2202 +f 2197/1/2197 2201/1/2201 2202/1/2202 +f 2198/1/2198 2199/1/2199 2197/1/2197 +f 2200/1/2200 2199/1/2199 2198/1/2198 +f 2206/1/2206 2205/1/2205 2200/1/2200 +f 2128/1/2128 2207/1/2207 2206/1/2206 +f 2124/1/2124 2127/1/2127 2128/1/2128 +f 2121/1/2121 2124/1/2124 2125/1/2125 +f 378/1/378 2121/1/2121 2125/1/2125 +f 371/1/371 378/1/378 182/1/182 +f 182/1/182 181/1/181 183/1/183 +f 185/1/185 181/1/181 180/1/180 +f 179/1/179 175/1/175 178/1/178 +f 171/1/171 180/1/180 174/1/174 +f 168/1/168 172/1/172 171/1/171 +f 165/1/165 164/1/164 168/1/168 +f 170/1/170 173/1/173 169/1/169 +f 175/1/175 176/1/176 173/1/173 +f 176/1/176 2126/1/2126 2129/1/2129 +f 2129/1/2129 2130/1/2130 2131/1/2131 +f 2131/1/2131 2196/1/2196 2195/1/2195 +f 2195/1/2195 2194/1/2194 2189/1/2189 +f 2194/1/2194 2190/1/2190 2189/1/2189 +f 2187/1/2187 2186/1/2186 2182/1/2182 +f 2186/1/2186 2191/1/2191 2184/1/2184 +f 2192/1/2192 2193/1/2193 2190/1/2190 +f 2191/1/2191 2224/1/2224 2184/1/2184 +f 2223/1/2223 230/1/230 2193/1/2193 +f 230/1/230 227/1/227 228/1/228 +f 228/1/228 226/1/226 189/1/189 +f 2224/1/2224 368/1/368 2175/1/2175 +f 2175/1/2175 2174/1/2174 2178/1/2178 +f 2170/1/2170 2171/1/2171 2172/1/2172 +f 2174/1/2174 2176/1/2176 2177/1/2177 +f 2180/1/2180 2181/1/2181 2176/1/2176 +f 2180/1/2180 2226/1/2226 2181/1/2181 +f 2228/1/2228 2226/1/2226 2180/1/2180 +f 2227/1/2227 2226/1/2226 2228/1/2228 +f 2145/1/2145 2227/1/2227 2165/1/2165 +f 2225/1/2225 2226/1/2226 2227/1/2227 +f 2181/1/2181 2226/1/2226 2225/1/2225 +f 2141/1/2141 2179/1/2179 2181/1/2181 +f 2138/1/2138 2179/1/2179 2141/1/2141 +f 2139/1/2139 2185/1/2185 2138/1/2138 +f 2133/1/2133 2188/1/2188 2139/1/2139 +f 2132/1/2132 2133/1/2133 2134/1/2134 +f 162/1/162 2132/1/2132 2134/1/2134 +f 161/1/161 177/1/177 162/1/162 +f 165/1/165 161/1/161 160/1/160 +f 156/1/156 163/1/163 160/1/160 +f 163/1/163 166/1/166 167/1/167 +f 150/1/150 155/1/155 154/1/154 +f 191/1/191 167/1/167 166/1/166 +f 191/1/191 192/1/192 189/1/189 +f 194/1/194 195/1/195 193/1/193 +f 197/1/197 195/1/195 194/1/194 +f 197/1/197 198/1/198 195/1/195 +f 192/1/192 370/1/370 369/1/369 +f 216/1/216 2172/1/2172 370/1/370 +f 195/1/195 198/1/198 214/1/214 +f 214/1/214 198/1/198 210/1/210 +f 214/1/214 210/1/210 212/1/212 +f 216/1/216 2170/1/2170 2172/1/2172 +f 2170/1/2170 2173/1/2173 2171/1/2171 +f 2166/1/2166 2167/1/2167 2173/1/2173 +f 2161/1/2161 2162/1/2162 2166/1/2166 +f 2168/1/2168 2157/1/2157 2161/1/2161 +f 2169/1/2169 214/1/214 215/1/215 +f 215/1/215 214/1/214 212/1/212 +f 2168/1/2168 213/1/213 2158/1/2158 +f 2158/1/2158 2153/1/2153 2154/1/2154 +f 416/1/416 425/1/425 2153/1/2153 +f 409/1/409 414/1/414 412/1/412 +f 409/1/409 413/1/413 414/1/414 +f 405/1/405 413/1/413 409/1/409 +f 416/1/416 418/1/418 425/1/425 +f 413/1/413 415/1/415 414/1/414 +f 413/1/413 407/1/407 415/1/415 +f 407/1/407 417/1/417 415/1/415 +f 407/1/407 382/1/382 417/1/417 +f 423/1/423 425/1/425 418/1/418 +f 2152/1/2152 425/1/425 423/1/423 +f 2148/1/2148 2151/1/2151 2152/1/2152 +f 2149/1/2149 2151/1/2151 2148/1/2148 +f 2147/1/2147 2150/1/2150 2149/1/2149 +f 2143/1/2143 2164/1/2164 2147/1/2147 +f 2140/1/2140 2144/1/2144 2143/1/2143 +f 2137/1/2137 2142/1/2142 2140/1/2140 +f 2136/1/2136 2137/1/2137 2135/1/2135 +f 159/1/159 2135/1/2135 158/1/158 +f 152/1/152 159/1/159 158/1/158 +f 151/1/151 157/1/157 152/1/152 +f 151/1/151 150/1/150 154/1/154 +f 143/1/143 148/1/148 147/1/147 +f 153/1/153 155/1/155 150/1/150 +f 143/1/143 149/1/149 148/1/148 +f 145/1/145 149/1/149 143/1/143 +f 153/1/153 196/1/196 155/1/155 +f 194/1/194 196/1/196 197/1/197 +f 145/1/145 199/1/199 149/1/149 +f 200/1/200 198/1/198 197/1/197 +f 200/1/200 210/1/210 198/1/198 +f 212/1/212 210/1/210 211/1/211 +f 204/1/204 208/1/208 211/1/211 +f 207/1/207 208/1/208 204/1/204 +f 203/1/203 199/1/199 146/1/146 +f 204/1/204 202/1/202 205/1/205 +f 204/1/204 205/1/205 207/1/207 +f 207/1/207 209/1/209 208/1/208 +f 410/1/410 209/1/209 411/1/411 +f 410/1/410 411/1/411 408/1/408 +f 409/1/409 408/1/408 405/1/405 +f 405/1/405 407/1/407 413/1/413 +f 406/1/406 383/1/383 407/1/407 +f 390/1/390 384/1/384 406/1/406 +f 403/1/403 404/1/404 399/1/399 +f 398/1/398 391/1/391 390/1/390 +f 391/1/391 386/1/386 390/1/390 +f 394/1/394 393/1/393 392/1/392 +f 393/1/393 106/1/106 392/1/392 +f 98/1/98 106/1/106 393/1/393 +f 98/1/98 99/1/99 106/1/106 +f 99/1/99 104/1/104 106/1/106 +f 104/1/104 99/1/99 100/1/100 +f 391/1/391 389/1/389 386/1/386 +f 390/1/390 386/1/386 384/1/384 +f 406/1/406 384/1/384 383/1/383 +f 383/1/383 382/1/382 407/1/407 +f 420/1/420 417/1/417 382/1/382 +f 422/1/422 419/1/419 420/1/420 +f 126/1/126 419/1/419 422/1/422 +f 125/1/125 424/1/424 126/1/126 +f 122/1/122 2146/1/2146 125/1/125 +f 131/1/131 2146/1/2146 122/1/122 +f 130/1/130 138/1/138 131/1/131 +f 137/1/137 138/1/138 130/1/130 +f 142/1/142 379/1/379 137/1/137 +f 147/1/147 142/1/142 143/1/143 +f 144/1/144 145/1/145 143/1/143 +f 145/1/145 146/1/146 199/1/199 +f 140/1/140 139/1/139 135/1/135 +f 141/1/141 201/1/201 146/1/146 +f 136/1/136 135/1/135 129/1/129 +f 134/1/134 206/1/206 201/1/201 +f 132/1/132 129/1/129 128/1/128 +f 2276/1/2276 2277/1/2277 2275/1/2275 +f 133/1/133 2278/1/2278 206/1/206 +f 2276/1/2276 2233/1/2233 2277/1/2277 +f 2235/1/2235 2278/1/2278 2279/1/2279 +f 2235/1/2235 2279/1/2279 2230/1/2230 +f 2236/1/2236 2234/1/2234 2233/1/2233 +f 2236/1/2236 2237/1/2237 2234/1/2234 +f 2241/1/2241 2237/1/2237 2236/1/2236 +f 2231/1/2231 2229/1/2229 2230/1/2230 +f 2231/1/2231 2232/1/2232 2229/1/2229 +f 2238/1/2238 2234/1/2234 2237/1/2237 +f 2239/1/2239 2242/1/2242 2232/1/2232 +f 400/1/400 2232/1/2232 2242/1/2242 +f 399/1/399 400/1/400 396/1/396 +f 401/1/401 91/1/91 95/1/95 +f 395/1/395 396/1/396 397/1/397 +f 395/1/395 98/1/98 393/1/393 +f 94/1/94 95/1/95 91/1/91 +f 98/1/98 96/1/96 99/1/99 +f 91/1/91 93/1/93 94/1/94 +f 91/1/91 90/1/90 93/1/93 +f 90/1/90 92/1/92 93/1/93 +f 100/1/100 99/1/99 96/1/96 +f 103/1/103 104/1/104 100/1/100 +f 106/1/106 104/1/104 107/1/107 +f 109/1/109 388/1/388 107/1/107 +f 387/1/387 388/1/388 109/1/109 +f 116/1/116 385/1/385 387/1/387 +f 119/1/119 381/1/381 116/1/116 +f 118/1/118 380/1/380 119/1/119 +f 117/1/117 421/1/421 118/1/118 +f 120/1/120 121/1/121 117/1/117 +f 123/1/123 120/1/120 124/1/124 +f 128/1/128 127/1/127 123/1/123 +f 2275/1/2275 128/1/128 2276/1/2276 +f 2273/1/2273 2233/1/2233 2276/1/2276 +f 2273/1/2273 2236/1/2236 2233/1/2233 +f 2274/1/2274 2270/1/2270 2272/1/2272 +f 2271/1/2271 2241/1/2241 2236/1/2236 +f 2240/1/2240 2237/1/2237 2241/1/2241 +f 2269/1/2269 2270/1/2270 2266/1/2266 +f 2248/1/2248 2240/1/2240 2268/1/2268 +f 2248/1/2248 2243/1/2243 2240/1/2240 +f 2244/1/2244 2243/1/2243 2246/1/2246 +f 2249/1/2249 2250/1/2250 2246/1/2246 +f 2250/1/2250 91/1/91 401/1/401 +f 89/1/89 90/1/90 91/1/91 +f 89/1/89 80/1/80 90/1/90 +f 76/1/76 90/1/90 80/1/80 +f 89/1/89 86/1/86 80/1/80 +f 86/1/86 81/1/81 80/1/80 +f 77/1/77 80/1/80 81/1/81 +f 83/1/83 81/1/81 86/1/86 +f 79/1/79 81/1/81 83/1/83 +f 79/1/79 83/1/83 82/1/82 +f 86/1/86 89/1/89 88/1/88 +f 2252/1/2252 2251/1/2251 2254/1/2254 +f 2253/1/2253 2254/1/2254 2251/1/2251 +f 2255/1/2255 88/1/88 89/1/89 +f 86/1/86 88/1/88 83/1/83 +f 82/1/82 83/1/83 85/1/85 +f 84/1/84 82/1/82 85/1/85 +f 84/1/84 85/1/85 429/1/429 +f 84/1/84 429/1/429 430/1/430 +f 430/1/430 429/1/429 431/1/431 +f 430/1/430 431/1/431 2313/1/2313 +f 433/1/433 430/1/430 2313/1/2313 +f 2313/1/2313 431/1/431 2348/1/2348 +f 2313/1/2313 2348/1/2348 2314/1/2314 +f 2306/1/2306 2313/1/2313 2314/1/2314 +f 2306/1/2306 2314/1/2314 2315/1/2315 +f 2306/1/2306 2315/1/2315 2310/1/2310 +f 2310/1/2310 2315/1/2315 2316/1/2316 +f 2310/1/2310 2316/1/2316 2317/1/2317 +f 2311/1/2311 2310/1/2310 2317/1/2317 +f 2311/1/2311 2317/1/2317 2338/1/2338 +f 2345/1/2345 2311/1/2311 2338/1/2338 +f 2345/1/2345 2338/1/2338 2346/1/2346 +f 2484/1/2484 2345/1/2345 2346/1/2346 +f 2484/1/2484 2346/1/2346 2347/1/2347 +f 2494/1/2494 2484/1/2484 2347/1/2347 +f 2494/1/2494 2347/1/2347 2497/1/2497 +f 2497/1/2497 2495/1/2495 2494/1/2494 +f 2494/1/2494 2495/1/2495 2492/1/2492 +f 2494/1/2494 2492/1/2492 2491/1/2491 +f 2491/1/2491 2492/1/2492 2490/1/2490 +f 2491/1/2491 2490/1/2490 2486/1/2486 +f 2486/1/2486 2484/1/2484 2491/1/2491 +f 2486/1/2486 2482/1/2482 2484/1/2484 +f 2485/1/2485 2482/1/2482 2486/1/2486 +f 2483/1/2483 2482/1/2482 2485/1/2485 +f 2485/1/2485 2487/1/2487 2483/1/2483 +f 2485/1/2485 2489/1/2489 2487/1/2487 +f 2487/1/2487 2489/1/2489 2488/1/2488 +f 2485/1/2485 2490/1/2490 2489/1/2489 +f 2490/1/2490 2329/1/2329 2489/1/2489 +f 2489/1/2489 2329/1/2329 2499/1/2499 +f 2499/1/2499 2329/1/2329 2326/1/2326 +f 2328/1/2328 2326/1/2326 2329/1/2329 +f 2328/1/2328 2329/1/2329 2330/1/2330 +f 2327/1/2327 2328/1/2328 2330/1/2330 +f 2327/1/2327 2330/1/2330 2332/1/2332 +f 2331/1/2331 2327/1/2327 2332/1/2332 +f 2331/1/2331 2332/1/2332 2336/1/2336 +f 2331/1/2331 2336/1/2336 2337/1/2337 +f 2331/1/2331 2337/1/2337 2338/1/2338 +f 2338/1/2338 2337/1/2337 2343/1/2343 +f 2338/1/2338 2343/1/2343 2347/1/2347 +f 2343/1/2343 2498/1/2498 2347/1/2347 +f 2498/1/2498 2343/1/2343 2344/1/2344 +f 2344/1/2344 2496/1/2496 2498/1/2498 +f 2498/1/2498 2496/1/2496 2497/1/2497 +f 2496/1/2496 2344/1/2344 2493/1/2493 +f 2496/1/2496 2493/1/2493 2495/1/2495 +f 2344/1/2344 2335/1/2335 2493/1/2493 +f 2493/1/2493 2335/1/2335 2490/1/2490 +f 2344/1/2344 2339/1/2339 2335/1/2335 +f 2334/1/2334 2335/1/2335 2339/1/2339 +f 2334/1/2334 2339/1/2339 2336/1/2336 +f 2333/1/2333 2334/1/2334 2336/1/2336 +f 2333/1/2333 2329/1/2329 2334/1/2334 +f 2336/1/2336 2339/1/2339 2340/1/2340 +f 2339/1/2339 2341/1/2341 2340/1/2340 +f 2341/1/2341 2342/1/2342 2340/1/2340 +f 2337/1/2337 2340/1/2340 2342/1/2342 +f 2341/1/2341 2344/1/2344 2342/1/2342 +f 2329/1/2329 2335/1/2335 2334/1/2334 +f 2339/1/2339 2344/1/2344 2341/1/2341 +f 2343/1/2343 2342/1/2342 2344/1/2344 +f 2342/1/2342 2343/1/2343 2337/1/2337 +f 2336/1/2336 2340/1/2340 2337/1/2337 +f 2332/1/2332 2333/1/2333 2336/1/2336 +f 2317/1/2317 2327/1/2327 2331/1/2331 +f 2317/1/2317 2319/1/2319 2327/1/2327 +f 2319/1/2319 2325/1/2325 2327/1/2327 +f 2319/1/2319 2321/1/2321 2325/1/2325 +f 2321/1/2321 2326/1/2326 2325/1/2325 +f 2321/1/2321 2324/1/2324 2326/1/2326 +f 2320/1/2320 2324/1/2324 2321/1/2321 +f 2316/1/2316 2320/1/2320 2321/1/2321 +f 2316/1/2316 2318/1/2318 2320/1/2320 +f 2318/1/2318 2324/1/2324 2320/1/2320 +f 2316/1/2316 2321/1/2321 2319/1/2319 +f 2332/1/2332 2330/1/2330 2333/1/2333 +f 2327/1/2327 2325/1/2325 2328/1/2328 +f 2329/1/2329 2333/1/2333 2330/1/2330 +f 2325/1/2325 2326/1/2326 2328/1/2328 +f 2490/1/2490 2335/1/2335 2329/1/2329 +f 2486/1/2486 2490/1/2490 2485/1/2485 +f 2490/1/2490 2492/1/2492 2493/1/2493 +f 2492/1/2492 2495/1/2495 2493/1/2493 +f 2497/1/2497 2496/1/2496 2495/1/2495 +f 2497/1/2497 2347/1/2347 2498/1/2498 +f 2491/1/2491 2484/1/2484 2494/1/2494 +f 2482/1/2482 2345/1/2345 2484/1/2484 +f 2482/1/2482 2312/1/2312 2345/1/2345 +f 2479/1/2479 2312/1/2312 2482/1/2482 +f 2346/1/2346 2338/1/2338 2347/1/2347 +f 2312/1/2312 2311/1/2311 2345/1/2345 +f 2312/1/2312 2307/1/2307 2311/1/2311 +f 2338/1/2338 2317/1/2317 2331/1/2331 +f 2307/1/2307 2310/1/2310 2311/1/2311 +f 2317/1/2317 2316/1/2316 2319/1/2319 +f 2315/1/2315 2318/1/2318 2316/1/2316 +f 2315/1/2315 2322/1/2322 2318/1/2318 +f 2318/1/2318 2322/1/2322 2323/1/2323 +f 2323/1/2323 2322/1/2322 432/1/432 +f 2348/1/2348 432/1/432 2322/1/2322 +f 2314/1/2314 2322/1/2322 2315/1/2315 +f 2314/1/2314 2348/1/2348 2322/1/2322 +f 431/1/431 432/1/432 2348/1/2348 +f 431/1/431 428/1/428 432/1/432 +f 429/1/429 428/1/428 431/1/431 +f 85/1/85 426/1/426 429/1/429 +f 429/1/429 426/1/426 428/1/428 +f 427/1/427 432/1/432 428/1/428 +f 87/1/87 2294/1/2294 2295/1/2295 +f 2292/1/2292 2295/1/2295 2294/1/2294 +f 2323/1/2323 432/1/432 427/1/427 +f 2323/1/2323 2324/1/2324 2318/1/2318 +f 2501/1/2501 2326/1/2326 2324/1/2324 +f 2499/1/2499 2326/1/2326 2501/1/2501 +f 2489/1/2489 2499/1/2499 2488/1/2488 +f 2483/1/2483 2487/1/2487 2488/1/2488 +f 2483/1/2483 2479/1/2479 2482/1/2482 +f 2480/1/2480 2308/1/2308 2481/1/2481 +f 2479/1/2479 2309/1/2309 2312/1/2312 +f 2304/1/2304 2305/1/2305 2308/1/2308 +f 2309/1/2309 2307/1/2307 2312/1/2312 +f 2303/1/2303 435/1/435 2305/1/2305 +f 2307/1/2307 2306/1/2306 2310/1/2310 +f 433/1/433 2313/1/2313 2306/1/2306 +f 433/1/433 84/1/84 430/1/430 +f 78/1/78 82/1/82 84/1/84 +f 78/1/78 79/1/79 82/1/82 +f 77/1/77 81/1/81 79/1/79 +f 76/1/76 80/1/80 77/1/77 +f 92/1/92 90/1/90 76/1/76 +f 93/1/93 92/1/92 97/1/97 +f 71/1/71 101/1/101 97/1/97 +f 69/1/69 102/1/102 71/1/71 +f 108/1/108 105/1/105 69/1/69 +f 111/1/111 113/1/113 108/1/108 +f 114/1/114 112/1/112 111/1/111 +f 2270/1/2270 114/1/114 2266/1/2266 +f 2267/1/2267 2266/1/2266 2265/1/2265 +f 2264/1/2264 2247/1/2247 2265/1/2265 +f 2253/1/2253 2251/1/2251 2247/1/2247 +f 2258/1/2258 2254/1/2254 2253/1/2253 +f 2261/1/2261 2256/1/2256 2258/1/2258 +f 2283/1/2283 2256/1/2256 2261/1/2261 +f 2261/1/2261 2263/1/2263 2281/1/2281 +f 2260/1/2260 2262/1/2262 2259/1/2259 +f 2262/1/2262 115/1/115 2280/1/2280 +f 2280/1/2280 110/1/110 68/1/68 +f 2263/1/2263 2284/1/2284 2281/1/2281 +f 2261/1/2261 2281/1/2281 2282/1/2282 +f 2282/1/2282 2283/1/2283 2261/1/2261 +f 2283/1/2283 2293/1/2293 2256/1/2256 +f 2292/1/2292 2294/1/2294 2293/1/2293 +f 2298/1/2298 2295/1/2295 2292/1/2292 +f 2291/1/2291 2296/1/2296 2298/1/2298 +f 2289/1/2289 2286/1/2286 2290/1/2290 +f 2299/1/2299 2296/1/2296 2291/1/2291 +f 2299/1/2299 2302/1/2302 2296/1/2296 +f 2502/1/2502 2503/1/2503 2302/1/2302 +f 2500/1/2500 2502/1/2502 2480/1/2480 +f 2480/1/2480 2304/1/2304 2308/1/2308 +f 2301/1/2301 2288/1/2288 2300/1/2300 +f 2304/1/2304 2303/1/2303 2305/1/2305 +f 2286/1/2286 2287/1/2287 2288/1/2288 +f 2303/1/2303 434/1/434 435/1/435 +f 2285/1/2285 70/1/70 2287/1/2287 +f 434/1/434 75/1/75 435/1/435 +f 67/1/67 74/1/74 75/1/75 +f 68/1/68 65/1/65 70/1/70 +f 67/1/67 66/1/66 73/1/73 +f 65/1/65 72/1/72 66/1/66 +f 2516/1/2516 2517/1/2517 2518/1/2518 +f 2521/1/2521 2516/1/2516 2518/1/2518 +f 2521/1/2521 2518/1/2518 2591/1/2591 +f 2521/1/2521 2591/1/2591 2596/1/2596 +f 4858/1/4858 2521/1/2521 2596/1/2596 +f 4858/1/4858 2596/1/2596 4863/1/4863 +f 4859/1/4859 4858/1/4858 4863/1/4863 +f 4859/1/4859 4863/1/4863 4864/1/4864 +f 4872/1/4872 4859/1/4859 4864/1/4864 +f 4872/1/4872 4864/1/4864 4873/1/4873 +f 4873/1/4873 4877/1/4877 4872/1/4872 +f 4872/1/4872 4877/1/4877 4878/1/4878 +f 4872/1/4872 4878/1/4878 4881/1/4881 +f 4872/1/4872 4881/1/4881 4883/1/4883 +f 4883/1/4883 4881/1/4881 4862/1/4862 +f 4862/1/4862 4859/1/4859 4883/1/4883 +f 4862/1/4862 4857/1/4857 4859/1/4859 +f 4861/1/4861 4857/1/4857 4862/1/4862 +f 4862/1/4862 4884/1/4884 4861/1/4861 +f 4884/1/4884 4885/1/4885 4861/1/4861 +f 4861/1/4861 4885/1/4885 4860/1/4860 +f 4860/1/4860 4885/1/4885 4889/1/4889 +f 4860/1/4860 4889/1/4889 4890/1/4890 +f 4860/1/4860 4890/1/4890 4896/1/4896 +f 4896/1/4896 4853/1/4853 4860/1/4860 +f 4860/1/4860 4853/1/4853 4857/1/4857 +f 4853/1/4853 4856/1/4856 4857/1/4857 +f 4857/1/4857 4856/1/4856 4858/1/4858 +f 4853/1/4853 4852/1/4852 4856/1/4856 +f 4852/1/4852 2521/1/2521 4856/1/4856 +f 4852/1/4852 2519/1/2519 2521/1/2521 +f 2539/1/2539 2519/1/2519 4852/1/4852 +f 4851/1/4851 2539/1/2539 4852/1/4852 +f 4850/1/4850 2539/1/2539 4851/1/4851 +f 4854/1/4854 4850/1/4850 4851/1/4851 +f 4854/1/4854 4851/1/4851 4855/1/4855 +f 4855/1/4855 4895/1/4895 4854/1/4854 +f 4895/1/4895 4897/1/4897 4854/1/4854 +f 4854/1/4854 4897/1/4897 4902/1/4902 +f 4902/1/4902 4897/1/4897 4903/1/4903 +f 4902/1/4902 4903/1/4903 4904/1/4904 +f 4904/1/4904 4850/1/4850 4902/1/4902 +f 4905/1/4905 4850/1/4850 4904/1/4904 +f 4905/1/4905 4846/1/4846 4850/1/4850 +f 4846/1/4846 2527/1/2527 4850/1/4850 +f 4846/1/4846 2530/1/2530 2527/1/2527 +f 2530/1/2530 2525/1/2525 2527/1/2527 +f 2527/1/2527 2525/1/2525 2524/1/2524 +f 2527/1/2527 2524/1/2524 2539/1/2539 +f 2525/1/2525 2526/1/2526 2524/1/2524 +f 2524/1/2524 2526/1/2526 2520/1/2520 +f 2524/1/2524 2520/1/2520 2519/1/2519 +f 2519/1/2519 2520/1/2520 2516/1/2516 +f 2520/1/2520 2522/1/2522 2516/1/2516 +f 2516/1/2516 2522/1/2522 2523/1/2523 +f 2522/1/2522 2579/1/2579 2523/1/2523 +f 2523/1/2523 2579/1/2579 2578/1/2578 +f 2523/1/2523 2578/1/2578 2517/1/2517 +f 2517/1/2517 2578/1/2578 2581/1/2581 +f 2517/1/2517 2581/1/2581 2586/1/2586 +f 2586/1/2586 2581/1/2581 2584/1/2584 +f 2586/1/2586 2584/1/2584 2587/1/2587 +f 2518/1/2518 2586/1/2586 2587/1/2587 +f 2587/1/2587 2584/1/2584 2588/1/2588 +f 2587/1/2587 2588/1/2588 2590/1/2590 +f 2591/1/2591 2587/1/2587 2590/1/2590 +f 2591/1/2591 2590/1/2590 2597/1/2597 +f 2591/1/2591 2597/1/2597 2598/1/2598 +f 2599/1/2599 2591/1/2591 2598/1/2598 +f 2599/1/2599 2598/1/2598 2604/1/2604 +f 2599/1/2599 2604/1/2604 2605/1/2605 +f 4865/1/4865 2599/1/2599 2605/1/2605 +f 4865/1/4865 2605/1/2605 4866/1/4866 +f 4871/1/4871 4865/1/4865 4866/1/4866 +f 4871/1/4871 4866/1/4866 4874/1/4874 +f 4875/1/4875 4871/1/4871 4874/1/4874 +f 4875/1/4875 4874/1/4874 4928/1/4928 +f 4928/1/4928 4932/1/4932 4875/1/4875 +f 4875/1/4875 4932/1/4932 4933/1/4933 +f 4875/1/4875 4933/1/4933 4876/1/4876 +f 4875/1/4875 4876/1/4876 4873/1/4873 +f 4876/1/4876 4933/1/4933 4879/1/4879 +f 4876/1/4876 4879/1/4879 4877/1/4877 +f 4877/1/4877 4879/1/4879 4880/1/4880 +f 4879/1/4879 2614/1/2614 4880/1/4880 +f 2614/1/2614 2616/1/2616 4880/1/4880 +f 2616/1/2616 4886/1/4886 4880/1/4880 +f 4882/1/4882 4880/1/4880 4886/1/4886 +f 4882/1/4882 4886/1/4886 4884/1/4884 +f 4884/1/4884 4886/1/4886 4887/1/4887 +f 4888/1/4888 4887/1/4887 4886/1/4886 +f 2618/1/2618 4888/1/4888 4886/1/4886 +f 2618/1/2618 4886/1/4886 2617/1/2617 +f 2617/1/2617 2610/1/2610 2618/1/2618 +f 2618/1/2618 2610/1/2610 2619/1/2619 +f 2619/1/2619 2601/1/2601 2618/1/2618 +f 2618/1/2618 2601/1/2601 2589/1/2589 +f 2618/1/2618 2589/1/2589 2583/1/2583 +f 2583/1/2583 2589/1/2589 2585/1/2585 +f 2583/1/2583 2585/1/2585 2582/1/2582 +f 2582/1/2582 2576/1/2576 2583/1/2583 +f 4893/1/4893 2583/1/2583 2576/1/2576 +f 4893/1/4893 2576/1/2576 4899/1/4899 +f 4899/1/4899 4898/1/4898 4893/1/4893 +f 4898/1/4898 4894/1/4894 4893/1/4893 +f 4893/1/4893 4894/1/4894 4892/1/4892 +f 4893/1/4893 4892/1/4892 4888/1/4888 +f 4888/1/4888 4892/1/4892 4889/1/4889 +f 4889/1/4889 4892/1/4892 4891/1/4891 +f 4891/1/4891 4892/1/4892 4894/1/4894 +f 4891/1/4891 4894/1/4894 4895/1/4895 +f 4897/1/4897 4894/1/4894 4898/1/4898 +f 4897/1/4897 4898/1/4898 4900/1/4900 +f 4901/1/4901 4900/1/4900 4898/1/4898 +f 4925/1/4925 4900/1/4900 4901/1/4901 +f 4901/1/4901 4899/1/4899 4925/1/4925 +f 4925/1/4925 4899/1/4899 4924/1/4924 +f 4925/1/4925 4924/1/4924 4926/1/4926 +f 4926/1/4926 4907/1/4907 4925/1/4925 +f 4926/1/4926 4912/1/4912 4907/1/4907 +f 4910/1/4910 4907/1/4907 4912/1/4912 +f 4910/1/4910 4912/1/4912 4913/1/4913 +f 4910/1/4910 4913/1/4913 4911/1/4911 +f 4849/1/4849 4910/1/4910 4911/1/4911 +f 4849/1/4849 4911/1/4911 4848/1/4848 +f 4848/1/4848 3984/1/3984 4849/1/4849 +f 4849/1/4849 3984/1/3984 4846/1/4846 +f 4849/1/4849 4846/1/4846 4909/1/4909 +f 4909/1/4909 4846/1/4846 4908/1/4908 +f 4908/1/4908 4906/1/4906 4909/1/4909 +f 4906/1/4906 4910/1/4910 4909/1/4909 +f 4905/1/4905 4906/1/4906 4908/1/4908 +f 4905/1/4905 4903/1/4903 4906/1/4906 +f 4903/1/4903 4907/1/4907 4906/1/4906 +f 4903/1/4903 4900/1/4900 4907/1/4907 +f 4847/1/4847 3984/1/3984 4848/1/4848 +f 4848/1/4848 4914/1/4914 4847/1/4847 +f 4847/1/4847 4914/1/4914 3983/1/3983 +f 4847/1/4847 3983/1/3983 3981/1/3981 +f 3981/1/3981 3983/1/3983 3982/1/3982 +f 3982/1/3982 3959/1/3959 3981/1/3981 +f 3959/1/3959 2536/1/2536 3981/1/3981 +f 3981/1/3981 2536/1/2536 2533/1/2533 +f 3981/1/3981 2533/1/2533 3984/1/3984 +f 3984/1/3984 2533/1/2533 2530/1/2530 +f 2533/1/2533 2528/1/2528 2530/1/2530 +f 2533/1/2533 2531/1/2531 2528/1/2528 +f 2531/1/2531 2532/1/2532 2528/1/2528 +f 2528/1/2528 2532/1/2532 2529/1/2529 +f 2528/1/2528 2529/1/2529 2525/1/2525 +f 2532/1/2532 2543/1/2543 2529/1/2529 +f 2529/1/2529 2543/1/2543 2547/1/2547 +f 2529/1/2529 2547/1/2547 2546/1/2546 +f 2529/1/2529 2546/1/2546 2526/1/2526 +f 2526/1/2526 2546/1/2546 2550/1/2550 +f 2526/1/2526 2550/1/2550 2552/1/2552 +f 2526/1/2526 2552/1/2552 2551/1/2551 +f 2552/1/2552 2556/1/2556 2551/1/2551 +f 2551/1/2551 2556/1/2556 2557/1/2557 +f 2551/1/2551 2557/1/2557 2595/1/2595 +f 2520/1/2520 2551/1/2551 2595/1/2595 +f 2520/1/2520 2595/1/2595 2593/1/2593 +f 2595/1/2595 2594/1/2594 2593/1/2593 +f 2593/1/2593 2594/1/2594 2592/1/2592 +f 2593/1/2593 2592/1/2592 2522/1/2522 +f 2594/1/2594 2574/1/2574 2592/1/2592 +f 2592/1/2592 2574/1/2574 2579/1/2579 +f 2575/1/2575 2579/1/2579 2574/1/2574 +f 2572/1/2572 2575/1/2575 2574/1/2574 +f 2572/1/2572 2574/1/2574 2563/1/2563 +f 2571/1/2571 2572/1/2572 2563/1/2563 +f 2571/1/2571 2563/1/2563 2568/1/2568 +f 2568/1/2568 2570/1/2570 2571/1/2571 +f 4923/1/4923 2571/1/2571 2570/1/2570 +f 2567/1/2567 4923/1/4923 2570/1/2570 +f 2567/1/2567 4922/1/4922 4923/1/4923 +f 4922/1/4922 4921/1/4921 4923/1/4923 +f 4923/1/4923 4921/1/4921 4924/1/4924 +f 4922/1/4922 4918/1/4918 4921/1/4921 +f 4912/1/4912 4921/1/4921 4918/1/4918 +f 4912/1/4912 4918/1/4918 4916/1/4916 +f 4916/1/4916 4918/1/4918 4917/1/4917 +f 4917/1/4917 4915/1/4915 4916/1/4916 +f 4916/1/4916 4915/1/4915 4913/1/4913 +f 4914/1/4914 4913/1/4913 4915/1/4915 +f 4914/1/4914 4915/1/4915 3977/1/3977 +f 3977/1/3977 4915/1/4915 3975/1/3975 +f 3977/1/3977 3975/1/3975 3976/1/3976 +f 3977/1/3977 3976/1/3976 3964/1/3964 +f 3980/1/3980 3977/1/3977 3964/1/3964 +f 3980/1/3980 3964/1/3964 3978/1/3978 +f 3979/1/3979 3980/1/3980 3978/1/3978 +f 3978/1/3978 3959/1/3959 3979/1/3979 +f 3960/1/3960 3959/1/3959 3978/1/3978 +f 3978/1/3978 3961/1/3961 3960/1/3960 +f 3960/1/3960 3961/1/3961 3958/1/3958 +f 3958/1/3958 3955/1/3955 3960/1/3960 +f 3956/1/3956 3955/1/3955 3958/1/3958 +f 3958/1/3958 3957/1/3957 3956/1/3956 +f 3956/1/3956 3957/1/3957 3954/1/3954 +f 3954/1/3954 3953/1/3953 3956/1/3956 +f 3950/1/3950 3953/1/3953 3954/1/3954 +f 3954/1/3954 3949/1/3949 3950/1/3950 +f 3950/1/3950 3949/1/3949 3946/1/3946 +f 3950/1/3950 3946/1/3946 3951/1/3951 +f 3951/1/3951 3952/1/3952 3950/1/3950 +f 3947/1/3947 3952/1/3952 3951/1/3951 +f 3947/1/3947 3696/1/3696 3952/1/3952 +f 3696/1/3696 2542/1/2542 3952/1/3952 +f 3952/1/3952 2542/1/2542 3953/1/3953 +f 3953/1/3953 2542/1/2542 2540/1/2540 +f 3953/1/3953 2540/1/2540 3955/1/3955 +f 3955/1/3955 2540/1/2540 2537/1/2537 +f 3955/1/3955 2537/1/2537 3959/1/3959 +f 2540/1/2540 2538/1/2538 2537/1/2537 +f 2537/1/2537 2538/1/2538 2534/1/2534 +f 2537/1/2537 2534/1/2534 2536/1/2536 +f 2536/1/2536 2534/1/2534 2531/1/2531 +f 2534/1/2534 2535/1/2535 2531/1/2531 +f 2534/1/2534 3699/1/3699 2535/1/2535 +f 3699/1/3699 3703/1/3703 2535/1/2535 +f 2535/1/2535 3703/1/3703 2544/1/2544 +f 2535/1/2535 2544/1/2544 2532/1/2532 +f 2532/1/2532 2544/1/2544 2545/1/2545 +f 2544/1/2544 2631/1/2631 2545/1/2545 +f 2545/1/2545 2631/1/2631 2627/1/2627 +f 2545/1/2545 2627/1/2627 2543/1/2543 +f 2543/1/2543 2627/1/2627 2626/1/2626 +f 2627/1/2627 2625/1/2625 2626/1/2626 +f 2626/1/2626 2625/1/2625 2624/1/2624 +f 2626/1/2626 2624/1/2624 2548/1/2548 +f 2547/1/2547 2626/1/2626 2548/1/2548 +f 2548/1/2548 2624/1/2624 2554/1/2554 +f 2548/1/2548 2554/1/2554 2549/1/2549 +f 2546/1/2546 2548/1/2548 2549/1/2549 +f 2549/1/2549 2554/1/2554 2555/1/2555 +f 2549/1/2549 2555/1/2555 2553/1/2553 +f 2550/1/2550 2549/1/2549 2553/1/2553 +f 2553/1/2553 2555/1/2555 2556/1/2556 +f 2558/1/2558 2556/1/2556 2555/1/2555 +f 2559/1/2559 2558/1/2558 2555/1/2555 +f 2559/1/2559 2555/1/2555 2560/1/2560 +f 2564/1/2564 2559/1/2559 2560/1/2560 +f 2564/1/2564 2560/1/2560 2565/1/2565 +f 2565/1/2565 2569/1/2569 2564/1/2564 +f 2564/1/2564 2569/1/2569 2567/1/2567 +f 2564/1/2564 2567/1/2567 2568/1/2568 +f 2568/1/2568 2561/1/2561 2564/1/2564 +f 2620/1/2620 2569/1/2569 2565/1/2565 +f 2565/1/2565 2566/1/2566 2620/1/2620 +f 2620/1/2620 2566/1/2566 2621/1/2621 +f 2620/1/2620 2621/1/2621 2622/1/2622 +f 2620/1/2620 2622/1/2622 2623/1/2623 +f 2623/1/2623 3743/1/3743 2620/1/2620 +f 2623/1/2623 3742/1/3742 3743/1/3743 +f 3743/1/3743 3742/1/3742 4920/1/4920 +f 3743/1/3743 4920/1/4920 2569/1/2569 +f 2569/1/2569 4920/1/4920 4922/1/4922 +f 3742/1/3742 4919/1/4919 4920/1/4920 +f 4920/1/4920 4919/1/4919 4918/1/4918 +f 3742/1/3742 3973/1/3973 4919/1/4919 +f 3975/1/3975 4919/1/4919 3973/1/3973 +f 3975/1/3975 3973/1/3973 3974/1/3974 +f 3974/1/3974 3973/1/3973 3972/1/3972 +f 3974/1/3974 3972/1/3972 3966/1/3966 +f 3966/1/3966 3964/1/3964 3974/1/3974 +f 3966/1/3966 3962/1/3962 3964/1/3964 +f 3961/1/3961 3964/1/3964 3962/1/3962 +f 3961/1/3961 3962/1/3962 3957/1/3957 +f 3957/1/3957 3962/1/3962 3963/1/3963 +f 3957/1/3957 3963/1/3963 3949/1/3949 +f 3967/1/3967 3949/1/3949 3963/1/3963 +f 3967/1/3967 3963/1/3963 3965/1/3965 +f 3965/1/3965 3731/1/3731 3967/1/3967 +f 3967/1/3967 3731/1/3731 3968/1/3968 +f 3967/1/3967 3968/1/3968 3944/1/3944 +f 3944/1/3944 3945/1/3945 3967/1/3967 +f 3944/1/3944 3942/1/3942 3945/1/3945 +f 3943/1/3943 3945/1/3945 3942/1/3942 +f 3943/1/3943 3942/1/3942 3940/1/3940 +f 3943/1/3943 3940/1/3940 3939/1/3939 +f 3948/1/3948 3943/1/3943 3939/1/3939 +f 3948/1/3948 3939/1/3939 3941/1/3941 +f 3985/1/3985 3948/1/3948 3941/1/3941 +f 3985/1/3985 3941/1/3941 3987/1/3987 +f 3987/1/3987 3986/1/3986 3985/1/3985 +f 3985/1/3985 3986/1/3986 3696/1/3696 +f 3986/1/3986 3692/1/3692 3696/1/3696 +f 3692/1/3692 3691/1/3691 3696/1/3696 +f 3692/1/3692 3655/1/3655 3691/1/3691 +f 3655/1/3655 3650/1/3650 3691/1/3691 +f 3691/1/3691 3650/1/3650 3694/1/3694 +f 3691/1/3691 3694/1/3694 2541/1/2541 +f 2542/1/2542 3691/1/3691 2541/1/2541 +f 2541/1/2541 3694/1/3694 3697/1/3697 +f 2541/1/2541 3697/1/3697 2538/1/2538 +f 2538/1/2538 3697/1/3697 3698/1/3698 +f 3697/1/3697 3700/1/3700 3698/1/3698 +f 3698/1/3698 3700/1/3700 3702/1/3702 +f 3698/1/3698 3702/1/3702 3701/1/3701 +f 3698/1/3698 3701/1/3701 3699/1/3699 +f 3699/1/3699 3701/1/3701 3704/1/3704 +f 3701/1/3701 3706/1/3706 3704/1/3704 +f 3704/1/3704 3706/1/3706 3737/1/3737 +f 3704/1/3704 3737/1/3737 3703/1/3703 +f 3703/1/3703 3737/1/3737 3740/1/3740 +f 3737/1/3737 3738/1/3738 3740/1/3740 +f 3740/1/3740 3738/1/3738 2628/1/2628 +f 3740/1/3740 2628/1/2628 2631/1/2631 +f 2629/1/2629 2628/1/2628 3738/1/3738 +f 3739/1/3739 2629/1/2629 3738/1/3738 +f 3739/1/3739 3738/1/3738 3736/1/3736 +f 3734/1/3734 3739/1/3739 3736/1/3736 +f 3734/1/3734 3736/1/3736 3732/1/3732 +f 3734/1/3734 3732/1/3732 3729/1/3729 +f 3729/1/3729 3731/1/3731 3734/1/3734 +f 3734/1/3734 3731/1/3731 3742/1/3742 +f 3734/1/3734 3742/1/3742 3741/1/3741 +f 3731/1/3731 3971/1/3971 3742/1/3742 +f 3731/1/3731 3970/1/3970 3971/1/3971 +f 3971/1/3971 3970/1/3970 3972/1/3972 +f 3729/1/3729 3728/1/3728 3731/1/3731 +f 3728/1/3728 3969/1/3969 3731/1/3731 +f 3726/1/3726 3969/1/3969 3728/1/3728 +f 3725/1/3725 3726/1/3726 3728/1/3728 +f 3724/1/3724 3726/1/3726 3725/1/3725 +f 3725/1/3725 3717/1/3717 3724/1/3724 +f 3724/1/3724 3717/1/3717 3718/1/3718 +f 3724/1/3724 3718/1/3718 3722/1/3722 +f 3724/1/3724 3722/1/3722 3637/1/3637 +f 3637/1/3637 3727/1/3727 3724/1/3724 +f 3727/1/3727 3637/1/3637 3635/1/3635 +f 3923/1/3923 3727/1/3727 3635/1/3635 +f 3923/1/3923 3635/1/3635 3630/1/3630 +f 3923/1/3923 3630/1/3630 3924/1/3924 +f 3933/1/3933 3923/1/3923 3924/1/3924 +f 3933/1/3933 3924/1/3924 3930/1/3930 +f 3930/1/3930 3934/1/3934 3933/1/3933 +f 3933/1/3933 3934/1/3934 3936/1/3936 +f 3933/1/3933 3936/1/3936 3935/1/3935 +f 3935/1/3935 3936/1/3936 3940/1/3940 +f 3937/1/3937 3936/1/3936 3934/1/3934 +f 3937/1/3937 3934/1/3934 3938/1/3938 +f 3937/1/3937 3938/1/3938 3989/1/3989 +f 3987/1/3987 3937/1/3937 3989/1/3989 +f 3989/1/3989 3988/1/3988 3987/1/3987 +f 3990/1/3990 3988/1/3988 3989/1/3989 +f 3990/1/3990 3991/1/3991 3988/1/3988 +f 3991/1/3991 3747/1/3747 3988/1/3988 +f 3988/1/3988 3747/1/3747 3693/1/3693 +f 3988/1/3988 3693/1/3693 3986/1/3986 +f 3747/1/3747 3654/1/3654 3693/1/3693 +f 3693/1/3693 3654/1/3654 3655/1/3655 +f 3654/1/3654 3649/1/3649 3655/1/3655 +f 3654/1/3654 3653/1/3653 3649/1/3649 +f 3653/1/3653 3651/1/3651 3649/1/3649 +f 3649/1/3649 3651/1/3651 3646/1/3646 +f 3649/1/3649 3646/1/3646 3650/1/3650 +f 3646/1/3646 3647/1/3647 3650/1/3650 +f 3650/1/3650 3647/1/3647 3695/1/3695 +f 3647/1/3647 3648/1/3648 3695/1/3695 +f 3695/1/3695 3648/1/3648 3746/1/3746 +f 3695/1/3695 3746/1/3746 3721/1/3721 +f 3695/1/3695 3721/1/3721 3720/1/3720 +f 3694/1/3694 3695/1/3695 3720/1/3720 +f 3694/1/3694 3720/1/3720 3713/1/3713 +f 3720/1/3720 3714/1/3714 3713/1/3713 +f 3713/1/3713 3714/1/3714 3711/1/3711 +f 3713/1/3713 3711/1/3711 3710/1/3710 +f 3697/1/3697 3713/1/3713 3710/1/3710 +f 3710/1/3710 3711/1/3711 3708/1/3708 +f 3710/1/3710 3708/1/3708 3700/1/3700 +f 3700/1/3700 3708/1/3708 3707/1/3707 +f 3708/1/3708 3709/1/3709 3707/1/3707 +f 3707/1/3707 3709/1/3709 3705/1/3705 +f 3702/1/3702 3707/1/3707 3705/1/3705 +f 3733/1/3733 3705/1/3705 3709/1/3709 +f 3730/1/3730 3733/1/3733 3709/1/3709 +f 3730/1/3730 3709/1/3709 3716/1/3716 +f 3725/1/3725 3730/1/3730 3716/1/3716 +f 3729/1/3729 3730/1/3730 3725/1/3725 +f 3716/1/3716 3709/1/3709 3712/1/3712 +f 3716/1/3716 3712/1/3712 3717/1/3717 +f 3717/1/3717 3712/1/3712 3715/1/3715 +f 3711/1/3711 3715/1/3715 3712/1/3712 +f 3729/1/3729 3733/1/3733 3730/1/3730 +f 3732/1/3732 3705/1/3705 3733/1/3733 +f 3732/1/3732 3706/1/3706 3705/1/3705 +f 3735/1/3735 3706/1/3706 3732/1/3732 +f 3708/1/3708 3712/1/3712 3709/1/3709 +f 3711/1/3711 3712/1/3712 3708/1/3708 +f 3714/1/3714 3715/1/3715 3711/1/3711 +f 3714/1/3714 3719/1/3719 3715/1/3715 +f 3718/1/3718 3715/1/3715 3719/1/3719 +f 3721/1/3721 3719/1/3719 3714/1/3714 +f 3721/1/3721 3723/1/3723 3719/1/3719 +f 3722/1/3722 3719/1/3719 3723/1/3723 +f 3722/1/3722 3723/1/3723 3744/1/3744 +f 3722/1/3722 3744/1/3744 3636/1/3636 +f 3636/1/3636 3744/1/3744 3638/1/3638 +f 3636/1/3636 3638/1/3638 3634/1/3634 +f 3633/1/3633 3636/1/3636 3634/1/3634 +f 3633/1/3633 3634/1/3634 3629/1/3629 +f 3630/1/3630 3633/1/3633 3629/1/3629 +f 3630/1/3630 3629/1/3629 3628/1/3628 +f 3922/1/3922 3630/1/3630 3628/1/3628 +f 3922/1/3922 3628/1/3628 3920/1/3920 +f 3924/1/3924 3922/1/3922 3920/1/3920 +f 3623/1/3623 3920/1/3920 3628/1/3628 +f 3624/1/3624 3623/1/3623 3628/1/3628 +f 3621/1/3621 3623/1/3623 3624/1/3624 +f 3626/1/3626 3621/1/3621 3624/1/3624 +f 3626/1/3626 3624/1/3624 3664/1/3664 +f 3662/1/3662 3626/1/3626 3664/1/3664 +f 3662/1/3662 3664/1/3664 3644/1/3644 +f 3662/1/3662 3644/1/3644 3643/1/3643 +f 3659/1/3659 3662/1/3662 3643/1/3643 +f 3652/1/3652 3659/1/3659 3643/1/3643 +f 3652/1/3652 3643/1/3643 3651/1/3651 +f 3651/1/3651 3643/1/3643 3645/1/3645 +f 3643/1/3643 3640/1/3640 3645/1/3645 +f 3640/1/3640 3641/1/3641 3645/1/3645 +f 3645/1/3645 3641/1/3641 3646/1/3646 +f 3646/1/3646 3641/1/3641 3642/1/3642 +f 3639/1/3639 3642/1/3642 3641/1/3641 +f 3638/1/3638 3642/1/3642 3639/1/3639 +f 3642/1/3642 3638/1/3638 3648/1/3648 +f 3648/1/3648 3638/1/3638 3745/1/3745 +f 3640/1/3640 3639/1/3639 3641/1/3641 +f 3640/1/3640 3632/1/3632 3639/1/3639 +f 3634/1/3634 3639/1/3639 3632/1/3632 +f 3631/1/3631 3632/1/3632 3640/1/3640 +f 3644/1/3644 3631/1/3631 3640/1/3640 +f 3631/1/3631 3629/1/3629 3632/1/3632 +f 3624/1/3624 3629/1/3629 3631/1/3631 +f 3658/1/3658 3659/1/3659 3652/1/3652 +f 3653/1/3653 3658/1/3658 3652/1/3652 +f 3657/1/3657 3658/1/3658 3653/1/3653 +f 3656/1/3656 3657/1/3657 3653/1/3653 +f 3672/1/3672 3657/1/3657 3656/1/3656 +f 3748/1/3748 3672/1/3672 3656/1/3656 +f 3748/1/3748 3656/1/3656 3747/1/3747 +f 3749/1/3749 3672/1/3672 3748/1/3748 +f 3995/1/3995 3749/1/3749 3748/1/3748 +f 3995/1/3995 3748/1/3748 3991/1/3991 +f 3994/1/3994 3995/1/3995 3991/1/3991 +f 3994/1/3994 3991/1/3991 3993/1/3993 +f 3993/1/3993 3996/1/3996 3994/1/3994 +f 3994/1/3994 3996/1/3996 3997/1/3997 +f 3997/1/3997 3996/1/3996 3998/1/3998 +f 3997/1/3997 3998/1/3998 3999/1/3999 +f 3999/1/3999 3750/1/3750 3997/1/3997 +f 3997/1/3997 3750/1/3750 3995/1/3995 +f 3754/1/3754 3750/1/3750 3999/1/3999 +f 3999/1/3999 4000/1/4000 3754/1/3754 +f 3754/1/3754 4000/1/4000 3802/1/3802 +f 3754/1/3754 3802/1/3802 3752/1/3752 +f 3752/1/3752 3802/1/3802 3801/1/3801 +f 3801/1/3801 3753/1/3753 3752/1/3752 +f 3752/1/3752 3753/1/3753 3750/1/3750 +f 3753/1/3753 3751/1/3751 3750/1/3750 +f 3750/1/3750 3751/1/3751 3749/1/3749 +f 3751/1/3751 3673/1/3673 3749/1/3749 +f 3751/1/3751 3679/1/3679 3673/1/3673 +f 3679/1/3679 3677/1/3677 3673/1/3673 +f 3673/1/3673 3677/1/3677 3674/1/3674 +f 3673/1/3673 3674/1/3674 3670/1/3670 +f 3673/1/3673 3670/1/3670 3672/1/3672 +f 3674/1/3674 3671/1/3671 3670/1/3670 +f 3670/1/3670 3671/1/3671 3666/1/3666 +f 3670/1/3670 3666/1/3666 3657/1/3657 +f 3657/1/3657 3666/1/3666 3661/1/3661 +f 3666/1/3666 3665/1/3665 3661/1/3661 +f 3661/1/3661 3665/1/3665 3660/1/3660 +f 3661/1/3661 3660/1/3660 3658/1/3658 +f 3665/1/3665 3663/1/3663 3660/1/3660 +f 3660/1/3660 3663/1/3663 3662/1/3662 +f 3665/1/3665 3669/1/3669 3663/1/3663 +f 3669/1/3669 3683/1/3683 3663/1/3663 +f 3683/1/3683 3625/1/3625 3663/1/3663 +f 3663/1/3663 3625/1/3625 3626/1/3626 +f 3683/1/3683 3684/1/3684 3625/1/3625 +f 3684/1/3684 3627/1/3627 3625/1/3625 +f 3625/1/3625 3627/1/3627 3621/1/3621 +f 3627/1/3627 3622/1/3622 3621/1/3621 +f 3687/1/3687 3622/1/3622 3627/1/3627 +f 3687/1/3687 3911/1/3911 3622/1/3622 +f 3911/1/3911 3913/1/3913 3622/1/3622 +f 3622/1/3622 3913/1/3913 3919/1/3919 +f 3622/1/3622 3919/1/3919 3623/1/3623 +f 3913/1/3913 3921/1/3921 3919/1/3919 +f 3919/1/3919 3921/1/3921 3920/1/3920 +f 3921/1/3921 3926/1/3926 3920/1/3920 +f 3926/1/3926 3929/1/3929 3920/1/3920 +f 3930/1/3930 3920/1/3920 3929/1/3929 +f 3929/1/3929 3932/1/3932 3930/1/3930 +f 3929/1/3929 3931/1/3931 3932/1/3932 +f 3996/1/3996 3932/1/3932 3931/1/3931 +f 3992/1/3992 3932/1/3932 3996/1/3996 +f 3938/1/3938 3932/1/3932 3992/1/3992 +f 3990/1/3990 3938/1/3938 3992/1/3992 +f 3990/1/3990 3992/1/3992 3993/1/3993 +f 3926/1/3926 3931/1/3931 3929/1/3929 +f 4001/1/4001 3931/1/3931 3926/1/3926 +f 3928/1/3928 4001/1/4001 3926/1/3926 +f 3928/1/3928 4000/1/4000 4001/1/4001 +f 4000/1/4000 3998/1/3998 4001/1/4001 +f 4001/1/4001 3998/1/3998 3931/1/3931 +f 3921/1/3921 3928/1/3928 3926/1/3926 +f 3927/1/3927 3928/1/3928 3921/1/3921 +f 3927/1/3927 4002/1/4002 3928/1/3928 +f 4002/1/4002 3804/1/3804 3928/1/3928 +f 3804/1/3804 3802/1/3802 3928/1/3928 +f 3804/1/3804 3795/1/3795 3802/1/3802 +f 3790/1/3790 3795/1/3795 3804/1/3804 +f 3803/1/3803 3790/1/3790 3804/1/3804 +f 3791/1/3791 3790/1/3790 3803/1/3803 +f 3791/1/3791 3803/1/3803 4002/1/4002 +f 3788/1/3788 3790/1/3790 3791/1/3791 +f 3805/1/3805 3788/1/3788 3791/1/3791 +f 3805/1/3805 3791/1/3791 3913/1/3913 +f 3913/1/3913 3791/1/3791 3927/1/3927 +f 3787/1/3787 3788/1/3788 3805/1/3805 +f 3912/1/3912 3787/1/3787 3805/1/3805 +f 3912/1/3912 3805/1/3805 3911/1/3911 +f 3908/1/3908 3912/1/3912 3911/1/3911 +f 3908/1/3908 3911/1/3911 3910/1/3910 +f 3909/1/3909 3908/1/3908 3910/1/3910 +f 3909/1/3909 3910/1/3910 3689/1/3689 +f 3690/1/3690 3909/1/3909 3689/1/3689 +f 3690/1/3690 3689/1/3689 3688/1/3688 +f 3682/1/3682 3690/1/3690 3688/1/3688 +f 3682/1/3682 3688/1/3688 3676/1/3676 +f 3675/1/3675 3682/1/3682 3676/1/3676 +f 3675/1/3675 3676/1/3676 3671/1/3671 +f 3671/1/3671 3676/1/3676 3667/1/3667 +f 3676/1/3676 3685/1/3685 3667/1/3667 +f 3667/1/3667 3685/1/3685 3668/1/3668 +f 3667/1/3667 3668/1/3668 3665/1/3665 +f 3685/1/3685 3683/1/3683 3668/1/3668 +f 3678/1/3678 3682/1/3682 3675/1/3675 +f 3674/1/3674 3678/1/3678 3675/1/3675 +f 3678/1/3678 3906/1/3906 3682/1/3682 +f 3906/1/3906 3905/1/3905 3682/1/3682 +f 3904/1/3904 3905/1/3905 3906/1/3906 +f 3681/1/3681 3904/1/3904 3906/1/3906 +f 4003/1/4003 3904/1/3904 3681/1/3681 +f 3677/1/3677 4003/1/4003 3681/1/3681 +f 3677/1/3677 3681/1/3681 3678/1/3678 +f 3680/1/3680 4003/1/4003 3677/1/3677 +f 3680/1/3680 3898/1/3898 4003/1/4003 +f 3898/1/3898 3900/1/3900 4003/1/4003 +f 3898/1/3898 3895/1/3895 3900/1/3900 +f 3895/1/3895 3899/1/3899 3900/1/3900 +f 3900/1/3900 3899/1/3899 3903/1/3903 +f 3900/1/3900 3903/1/3903 3904/1/3904 +f 3899/1/3899 3902/1/3902 3903/1/3903 +f 3903/1/3903 3902/1/3902 3907/1/3907 +f 3903/1/3903 3907/1/3907 3905/1/3905 +f 3905/1/3905 3907/1/3907 3909/1/3909 +f 3902/1/3902 3908/1/3908 3907/1/3907 +f 3902/1/3902 3914/1/3914 3908/1/3908 +f 3901/1/3901 3914/1/3914 3902/1/3902 +f 3901/1/3901 3915/1/3915 3914/1/3914 +f 3915/1/3915 3912/1/3912 3914/1/3914 +f 3915/1/3915 3916/1/3916 3912/1/3912 +f 3917/1/3917 3916/1/3916 3915/1/3915 +f 3892/1/3892 3917/1/3917 3915/1/3915 +f 3892/1/3892 3915/1/3915 3893/1/3893 +f 3891/1/3891 3892/1/3892 3893/1/3893 +f 3891/1/3891 3893/1/3893 3894/1/3894 +f 3891/1/3891 3894/1/3894 3895/1/3895 +f 3890/1/3890 3891/1/3891 3895/1/3895 +f 3896/1/3896 3890/1/3890 3895/1/3895 +f 3889/1/3889 3890/1/3890 3896/1/3896 +f 3897/1/3897 3889/1/3889 3896/1/3896 +f 3897/1/3897 3896/1/3896 3898/1/3898 +f 3888/1/3888 3889/1/3889 3897/1/3897 +f 3758/1/3758 3888/1/3888 3897/1/3897 +f 3758/1/3758 3897/1/3897 3679/1/3679 +f 3755/1/3755 3758/1/3758 3679/1/3679 +f 3757/1/3757 3758/1/3758 3755/1/3755 +f 3756/1/3756 3757/1/3757 3755/1/3755 +f 3756/1/3756 3755/1/3755 3753/1/3753 +f 3799/1/3799 3756/1/3756 3753/1/3753 +f 3799/1/3799 3753/1/3753 3800/1/3800 +f 3800/1/3800 3795/1/3795 3799/1/3799 +f 3799/1/3799 3795/1/3795 3794/1/3794 +f 3799/1/3799 3794/1/3794 3798/1/3798 +f 3798/1/3798 3794/1/3794 3793/1/3793 +f 3798/1/3798 3793/1/3793 3797/1/3797 +f 3797/1/3797 3756/1/3756 3798/1/3798 +f 3763/1/3763 3756/1/3756 3797/1/3797 +f 3763/1/3763 3760/1/3760 3756/1/3756 +f 3762/1/3762 3760/1/3760 3763/1/3763 +f 3763/1/3763 3796/1/3796 3762/1/3762 +f 3762/1/3762 3796/1/3796 3770/1/3770 +f 3762/1/3762 3770/1/3770 3767/1/3767 +f 3767/1/3767 3764/1/3764 3762/1/3762 +f 3769/1/3769 3764/1/3764 3767/1/3767 +f 3767/1/3767 3771/1/3771 3769/1/3769 +f 3769/1/3769 3771/1/3771 3772/1/3772 +f 3769/1/3769 3772/1/3772 3768/1/3768 +f 3768/1/3768 3772/1/3772 3773/1/3773 +f 3768/1/3768 3773/1/3773 3774/1/3774 +f 3774/1/3774 3766/1/3766 3768/1/3768 +f 3768/1/3768 3766/1/3766 3764/1/3764 +f 3766/1/3766 3765/1/3765 3764/1/3764 +f 3764/1/3764 3765/1/3765 3761/1/3761 +f 3764/1/3764 3761/1/3761 3760/1/3760 +f 3760/1/3760 3761/1/3761 3757/1/3757 +f 3761/1/3761 3759/1/3759 3757/1/3757 +f 3761/1/3761 3849/1/3849 3759/1/3759 +f 3849/1/3849 3887/1/3887 3759/1/3759 +f 3759/1/3759 3887/1/3887 3888/1/3888 +f 3887/1/3887 3881/1/3881 3888/1/3888 +f 3888/1/3888 3881/1/3881 3885/1/3885 +f 3881/1/3881 3882/1/3882 3885/1/3885 +f 3885/1/3885 3882/1/3882 3886/1/3886 +f 3885/1/3885 3886/1/3886 3889/1/3889 +f 3882/1/3882 3884/1/3884 3886/1/3886 +f 3886/1/3886 3884/1/3884 3891/1/3891 +f 3882/1/3882 3878/1/3878 3884/1/3884 +f 3878/1/3878 3883/1/3883 3884/1/3884 +f 3884/1/3884 3883/1/3883 3892/1/3892 +f 3878/1/3878 3875/1/3875 3883/1/3883 +f 3875/1/3875 3918/1/3918 3883/1/3883 +f 3883/1/3883 3918/1/3918 3917/1/3917 +f 3918/1/3918 3863/1/3863 3917/1/3917 +f 3862/1/3862 3863/1/3863 3918/1/3918 +f 3862/1/3862 3835/1/3835 3863/1/3863 +f 3835/1/3835 3783/1/3783 3863/1/3863 +f 3863/1/3863 3783/1/3783 3784/1/3784 +f 3863/1/3863 3784/1/3784 3916/1/3916 +f 3916/1/3916 3784/1/3784 3787/1/3787 +f 3784/1/3784 3785/1/3785 3787/1/3787 +f 3784/1/3784 3780/1/3780 3785/1/3785 +f 3780/1/3780 3781/1/3781 3785/1/3785 +f 3785/1/3785 3781/1/3781 3786/1/3786 +f 3785/1/3785 3786/1/3786 3788/1/3788 +f 3788/1/3788 3786/1/3786 3789/1/3789 +f 3786/1/3786 3782/1/3782 3789/1/3789 +f 3782/1/3782 3793/1/3793 3789/1/3789 +f 3789/1/3789 3793/1/3793 3792/1/3792 +f 3789/1/3789 3792/1/3792 3790/1/3790 +f 3782/1/3782 3796/1/3796 3793/1/3793 +f 3781/1/3781 3782/1/3782 3786/1/3786 +f 3781/1/3781 3777/1/3777 3782/1/3782 +f 3777/1/3777 3770/1/3770 3782/1/3782 +f 3777/1/3777 3771/1/3771 3770/1/3770 +f 3775/1/3775 3771/1/3771 3777/1/3777 +f 3778/1/3778 3775/1/3775 3777/1/3777 +f 3780/1/3780 3775/1/3775 3778/1/3778 +f 3779/1/3779 3775/1/3775 3780/1/3780 +f 3783/1/3783 3779/1/3779 3780/1/3780 +f 3806/1/3806 3779/1/3779 3783/1/3783 +f 3806/1/3806 3809/1/3809 3779/1/3779 +f 3809/1/3809 3776/1/3776 3779/1/3779 +f 3809/1/3809 3810/1/3810 3776/1/3776 +f 3810/1/3810 3815/1/3815 3776/1/3776 +f 3815/1/3815 3773/1/3773 3776/1/3776 +f 3815/1/3815 3816/1/3816 3773/1/3773 +f 3845/1/3845 3773/1/3773 3816/1/3816 +f 3845/1/3845 3816/1/3816 3844/1/3844 +f 3844/1/3844 3766/1/3766 3845/1/3845 +f 3844/1/3844 3841/1/3841 3766/1/3766 +f 3841/1/3841 3847/1/3847 3766/1/3766 +f 3841/1/3841 3846/1/3846 3847/1/3847 +f 3846/1/3846 4010/1/4010 3847/1/3847 +f 3847/1/3847 4010/1/4010 4005/1/4005 +f 3847/1/3847 4005/1/4005 3765/1/3765 +f 3765/1/3765 4005/1/4005 3849/1/3849 +f 4005/1/4005 4006/1/4006 3849/1/3849 +f 3849/1/3849 4006/1/4006 4004/1/4004 +f 4006/1/4006 3880/1/3880 4004/1/4004 +f 4004/1/4004 3880/1/3880 3879/1/3879 +f 4004/1/4004 3879/1/3879 3887/1/3887 +f 3880/1/3880 3874/1/3874 3879/1/3879 +f 3879/1/3879 3874/1/3874 3876/1/3876 +f 3879/1/3879 3876/1/3876 3881/1/3881 +f 3881/1/3881 3876/1/3876 3877/1/3877 +f 3876/1/3876 3873/1/3873 3877/1/3877 +f 3873/1/3873 3878/1/3878 3877/1/3877 +f 3874/1/3874 3873/1/3873 3876/1/3876 +f 3874/1/3874 3871/1/3871 3873/1/3873 +f 3871/1/3871 3872/1/3872 3873/1/3873 +f 3873/1/3873 3872/1/3872 3875/1/3875 +f 3872/1/3872 3862/1/3862 3875/1/3875 +f 3864/1/3864 3862/1/3862 3872/1/3872 +f 3864/1/3864 3859/1/3859 3862/1/3862 +f 3861/1/3861 3859/1/3859 3864/1/3864 +f 3865/1/3865 3861/1/3861 3864/1/3864 +f 3865/1/3865 3864/1/3864 3871/1/3871 +f 3868/1/3868 3865/1/3865 3871/1/3871 +f 3866/1/3866 3865/1/3865 3868/1/3868 +f 3870/1/3870 3866/1/3866 3868/1/3868 +f 4007/1/4007 3870/1/3870 3868/1/3868 +f 4007/1/4007 3868/1/3868 3880/1/3880 +f 4009/1/4009 3870/1/3870 4007/1/4007 +f 4006/1/4006 4009/1/4009 4007/1/4007 +f 4008/1/4008 4009/1/4009 4006/1/4006 +f 4008/1/4008 4012/1/4012 4009/1/4009 +f 4012/1/4012 3869/1/3869 4009/1/4009 +f 4012/1/4012 4014/1/4014 3869/1/3869 +f 4014/1/4014 3867/1/3867 3869/1/3869 +f 3869/1/3869 3867/1/3867 3866/1/3866 +f 3867/1/3867 3860/1/3860 3866/1/3866 +f 3866/1/3866 3860/1/3860 3861/1/3861 +f 3860/1/3860 3856/1/3856 3861/1/3861 +f 3857/1/3857 3856/1/3856 3860/1/3860 +f 3857/1/3857 3855/1/3855 3856/1/3856 +f 3855/1/3855 3834/1/3834 3856/1/3856 +f 3856/1/3856 3834/1/3834 3835/1/3835 +f 3856/1/3856 3835/1/3835 3859/1/3859 +f 3834/1/3834 3806/1/3806 3835/1/3835 +f 3834/1/3834 3807/1/3807 3806/1/3806 +f 3807/1/3807 3808/1/3808 3806/1/3806 +f 3807/1/3807 3812/1/3812 3808/1/3808 +f 3812/1/3812 3813/1/3813 3808/1/3808 +f 3808/1/3808 3813/1/3813 3811/1/3811 +f 3808/1/3808 3811/1/3811 3810/1/3810 +f 3811/1/3811 3814/1/3814 3810/1/3810 +f 3811/1/3811 3817/1/3817 3814/1/3814 +f 3814/1/3814 3817/1/3817 3816/1/3816 +f 3843/1/3843 3816/1/3816 3817/1/3817 +f 3843/1/3843 3817/1/3817 3842/1/3842 +f 3842/1/3842 3841/1/3841 3843/1/3843 +f 3839/1/3839 3841/1/3841 3842/1/3842 +f 3839/1/3839 3840/1/3840 3841/1/3841 +f 3837/1/3837 3840/1/3840 3839/1/3839 +f 3839/1/3839 3822/1/3822 3837/1/3837 +f 3837/1/3837 3822/1/3822 3821/1/3821 +f 3837/1/3837 3821/1/3821 3838/1/3838 +f 3838/1/3838 3373/1/3373 3837/1/3837 +f 3848/1/3848 3373/1/3373 3838/1/3838 +f 3838/1/3838 3826/1/3826 3848/1/3848 +f 3848/1/3848 3826/1/3826 3836/1/3836 +f 3848/1/3848 3836/1/3836 3372/1/3372 +f 3372/1/3372 3836/1/3836 3194/1/3194 +f 3372/1/3372 3194/1/3194 3371/1/3371 +f 3371/1/3371 3370/1/3370 3372/1/3372 +f 3372/1/3372 3370/1/3370 3373/1/3373 +f 3370/1/3370 3374/1/3374 3373/1/3373 +f 3373/1/3373 3374/1/3374 3375/1/3375 +f 3373/1/3373 3375/1/3375 3840/1/3840 +f 3840/1/3840 3375/1/3375 3846/1/3846 +f 3375/1/3375 4037/1/4037 3846/1/3846 +f 3375/1/3375 4036/1/4036 4037/1/4037 +f 4036/1/4036 4033/1/4033 4037/1/4037 +f 4037/1/4037 4033/1/4033 4027/1/4027 +f 4037/1/4037 4027/1/4027 4010/1/4010 +f 4010/1/4010 4027/1/4027 4011/1/4011 +f 4027/1/4027 4024/1/4024 4011/1/4011 +f 4011/1/4011 4024/1/4024 4015/1/4015 +f 4011/1/4011 4015/1/4015 4013/1/4013 +f 4011/1/4011 4013/1/4013 4008/1/4008 +f 4005/1/4005 4011/1/4011 4008/1/4008 +f 4015/1/4015 4016/1/4016 4013/1/4013 +f 4013/1/4013 4016/1/4016 4014/1/4014 +f 4016/1/4016 4017/1/4017 4014/1/4014 +f 4016/1/4016 4018/1/4018 4017/1/4017 +f 4018/1/4018 3858/1/3858 4017/1/4017 +f 4017/1/4017 3858/1/3858 3857/1/3857 +f 4017/1/4017 3857/1/3857 3867/1/3867 +f 4018/1/4018 4019/1/4019 3858/1/3858 +f 4019/1/4019 3851/1/3851 3858/1/3858 +f 3858/1/3858 3851/1/3851 3855/1/3855 +f 3854/1/3854 3851/1/3851 4019/1/4019 +f 4020/1/4020 3854/1/3854 4019/1/4019 +f 4021/1/4021 3854/1/3854 4020/1/4020 +f 4022/1/4022 4021/1/4021 4020/1/4020 +f 4022/1/4022 4020/1/4020 4023/1/4023 +f 4024/1/4024 4022/1/4022 4023/1/4023 +f 4025/1/4025 4022/1/4022 4024/1/4024 +f 4025/1/4025 4026/1/4026 4022/1/4022 +f 4028/1/4028 4026/1/4026 4025/1/4025 +f 4027/1/4027 4028/1/4028 4025/1/4025 +f 4028/1/4028 4030/1/4030 4026/1/4026 +f 4030/1/4030 4029/1/4029 4026/1/4026 +f 4026/1/4026 4029/1/4029 4021/1/4021 +f 4029/1/4029 3853/1/3853 4021/1/4021 +f 4029/1/4029 4048/1/4048 3853/1/3853 +f 4048/1/4048 3852/1/3852 3853/1/3853 +f 3853/1/3853 3852/1/3852 3850/1/3850 +f 3853/1/3853 3850/1/3850 3854/1/3854 +f 3852/1/3852 3829/1/3829 3850/1/3850 +f 3850/1/3850 3829/1/3829 3830/1/3830 +f 3850/1/3850 3830/1/3830 3851/1/3851 +f 3851/1/3851 3830/1/3830 3834/1/3834 +f 3829/1/3829 3827/1/3827 3830/1/3830 +f 3830/1/3830 3827/1/3827 3807/1/3807 +f 3829/1/3829 3828/1/3828 3827/1/3827 +f 3828/1/3828 3824/1/3824 3827/1/3827 +f 3827/1/3827 3824/1/3824 3812/1/3812 +f 3824/1/3824 3819/1/3819 3812/1/3812 +f 3824/1/3824 3823/1/3823 3819/1/3819 +f 3823/1/3823 3820/1/3820 3819/1/3819 +f 3819/1/3819 3820/1/3820 3818/1/3818 +f 3819/1/3819 3818/1/3818 3813/1/3813 +f 3820/1/3820 3821/1/3821 3818/1/3818 +f 3820/1/3820 3826/1/3826 3821/1/3821 +f 3825/1/3825 3826/1/3826 3820/1/3820 +f 3823/1/3823 3825/1/3825 3820/1/3820 +f 3824/1/3824 3825/1/3825 3823/1/3823 +f 3193/1/3193 3825/1/3825 3824/1/3824 +f 3193/1/3193 3190/1/3190 3825/1/3825 +f 3825/1/3825 3190/1/3190 3836/1/3836 +f 3188/1/3188 3190/1/3190 3193/1/3193 +f 3189/1/3189 3188/1/3188 3193/1/3193 +f 3189/1/3189 3193/1/3193 3828/1/3828 +f 3831/1/3831 3189/1/3189 3828/1/3828 +f 3832/1/3832 3189/1/3189 3831/1/3831 +f 4639/1/4639 3832/1/3832 3831/1/3831 +f 4639/1/4639 3831/1/3831 4641/1/4641 +f 4640/1/4640 4639/1/4639 4641/1/4641 +f 4640/1/4640 4641/1/4641 4052/1/4052 +f 4053/1/4053 4640/1/4640 4052/1/4052 +f 4053/1/4053 4052/1/4052 4051/1/4051 +f 4040/1/4040 4053/1/4053 4051/1/4051 +f 4040/1/4040 4051/1/4051 4035/1/4035 +f 4034/1/4034 4040/1/4040 4035/1/4035 +f 4034/1/4034 4035/1/4035 4031/1/4031 +f 4033/1/4033 4034/1/4034 4031/1/4031 +f 4033/1/4033 4031/1/4031 4028/1/4028 +f 4031/1/4031 4032/1/4032 4028/1/4028 +f 4038/1/4038 4034/1/4034 4033/1/4033 +f 4038/1/4038 4039/1/4039 4034/1/4034 +f 4038/1/4038 4043/1/4043 4039/1/4039 +f 4043/1/4043 4044/1/4044 4039/1/4039 +f 4039/1/4039 4044/1/4044 4040/1/4040 +f 4044/1/4044 4644/1/4644 4040/1/4040 +f 4560/1/4560 4644/1/4644 4044/1/4044 +f 4560/1/4560 4643/1/4643 4644/1/4644 +f 4643/1/4643 4642/1/4642 4644/1/4644 +f 4644/1/4644 4642/1/4642 4640/1/4640 +f 4643/1/4643 4638/1/4638 4642/1/4642 +f 4638/1/4638 4639/1/4639 4642/1/4642 +f 4638/1/4638 4633/1/4633 4639/1/4639 +f 4635/1/4635 4633/1/4633 4638/1/4638 +f 4637/1/4637 4635/1/4635 4638/1/4638 +f 4636/1/4636 4635/1/4635 4637/1/4637 +f 4557/1/4557 4636/1/4636 4637/1/4637 +f 4557/1/4557 4637/1/4637 4558/1/4558 +f 4555/1/4555 4557/1/4557 4558/1/4558 +f 4555/1/4555 4558/1/4558 4559/1/4559 +f 4042/1/4042 4555/1/4555 4559/1/4559 +f 4042/1/4042 4559/1/4559 4043/1/4043 +f 4559/1/4559 4560/1/4560 4043/1/4043 +f 4552/1/4552 4555/1/4555 4042/1/4042 +f 4041/1/4041 4552/1/4552 4042/1/4042 +f 4041/1/4041 4042/1/4042 4038/1/4038 +f 4041/1/4041 4038/1/4038 4036/1/4036 +f 3374/1/3374 4041/1/4041 4036/1/4036 +f 3376/1/3376 4041/1/4041 3374/1/3374 +f 3376/1/3376 4045/1/4045 4041/1/4041 +f 3365/1/3365 4045/1/4045 3376/1/3376 +f 3364/1/3364 3365/1/3365 3376/1/3376 +f 3364/1/3364 3376/1/3376 3370/1/3370 +f 3368/1/3368 3364/1/3364 3370/1/3370 +f 3368/1/3368 3370/1/3370 3369/1/3369 +f 3369/1/3369 3195/1/3195 3368/1/3368 +f 3368/1/3368 3195/1/3195 3367/1/3367 +f 3367/1/3367 3195/1/3195 3183/1/3183 +f 3367/1/3367 3183/1/3183 3366/1/3366 +f 3366/1/3366 3364/1/3364 3367/1/3367 +f 3333/1/3333 3364/1/3364 3366/1/3366 +f 3333/1/3333 3336/1/3336 3364/1/3364 +f 3334/1/3334 3336/1/3336 3333/1/3333 +f 3333/1/3333 3182/1/3182 3334/1/3334 +f 3334/1/3334 3182/1/3182 3175/1/3175 +f 3334/1/3334 3175/1/3175 3176/1/3176 +f 3176/1/3176 3335/1/3335 3334/1/3334 +f 3173/1/3173 3335/1/3335 3176/1/3176 +f 3176/1/3176 3172/1/3172 3173/1/3173 +f 3173/1/3173 3172/1/3172 3167/1/3167 +f 3173/1/3173 3167/1/3167 3174/1/3174 +f 3174/1/3174 3167/1/3167 3164/1/3164 +f 3174/1/3174 3164/1/3164 3340/1/3340 +f 3340/1/3340 3339/1/3339 3174/1/3174 +f 3174/1/3174 3339/1/3339 3335/1/3335 +f 3339/1/3339 3337/1/3337 3335/1/3335 +f 3335/1/3335 3337/1/3337 3338/1/3338 +f 3335/1/3335 3338/1/3338 3336/1/3336 +f 3336/1/3336 3338/1/3338 3365/1/3365 +f 3338/1/3338 4046/1/4046 3365/1/3365 +f 3338/1/3338 4543/1/4543 4046/1/4046 +f 4543/1/4543 4546/1/4546 4046/1/4046 +f 4046/1/4046 4546/1/4546 4550/1/4550 +f 4046/1/4046 4550/1/4550 4045/1/4045 +f 4045/1/4045 4550/1/4550 4552/1/4552 +f 4550/1/4550 4551/1/4551 4552/1/4552 +f 4552/1/4552 4551/1/4551 4554/1/4554 +f 4551/1/4551 4556/1/4556 4554/1/4554 +f 4554/1/4554 4556/1/4556 4557/1/4557 +f 4556/1/4556 4562/1/4562 4557/1/4557 +f 4561/1/4561 4562/1/4562 4556/1/4556 +f 4561/1/4561 4564/1/4564 4562/1/4562 +f 4564/1/4564 4567/1/4567 4562/1/4562 +f 4562/1/4562 4567/1/4567 4634/1/4634 +f 4562/1/4562 4634/1/4634 4636/1/4636 +f 4567/1/4567 4632/1/4632 4634/1/4634 +f 4634/1/4634 4632/1/4632 4635/1/4635 +f 4567/1/4567 4631/1/4631 4632/1/4632 +f 4631/1/4631 3833/1/3833 4632/1/4632 +f 4632/1/4632 3833/1/3833 3832/1/3832 +f 4632/1/4632 3832/1/3832 4633/1/4633 +f 3833/1/3833 3186/1/3186 3832/1/3832 +f 3833/1/3833 3185/1/3185 3186/1/3186 +f 3185/1/3185 3180/1/3180 3186/1/3186 +f 3186/1/3186 3180/1/3180 3184/1/3184 +f 3186/1/3186 3184/1/3184 3189/1/3189 +f 3180/1/3180 3179/1/3179 3184/1/3184 +f 3184/1/3184 3179/1/3179 3181/1/3181 +f 3184/1/3184 3181/1/3181 3187/1/3187 +f 3184/1/3184 3187/1/3187 3188/1/3188 +f 3181/1/3181 3191/1/3191 3187/1/3187 +f 3187/1/3187 3191/1/3191 3192/1/3192 +f 3187/1/3187 3192/1/3192 3190/1/3190 +f 3192/1/3192 3194/1/3194 3190/1/3190 +f 3192/1/3192 3195/1/3195 3194/1/3194 +f 3191/1/3191 3195/1/3195 3192/1/3192 +f 3181/1/3181 3183/1/3183 3191/1/3191 +f 3178/1/3178 3183/1/3183 3181/1/3181 +f 3178/1/3178 3182/1/3182 3183/1/3183 +f 3179/1/3179 3178/1/3178 3181/1/3181 +f 3177/1/3177 3178/1/3178 3179/1/3179 +f 3177/1/3177 3171/1/3171 3178/1/3178 +f 3171/1/3171 3175/1/3175 3178/1/3178 +f 3171/1/3171 3172/1/3172 3175/1/3175 +f 3166/1/3166 3172/1/3172 3171/1/3171 +f 3170/1/3170 3166/1/3166 3171/1/3171 +f 3169/1/3169 3166/1/3166 3170/1/3170 +f 3169/1/3169 3170/1/3170 3177/1/3177 +f 3169/1/3169 3177/1/3177 3180/1/3180 +f 3165/1/3165 3166/1/3166 3169/1/3169 +f 3168/1/3168 3165/1/3165 3169/1/3169 +f 3168/1/3168 3169/1/3169 3185/1/3185 +f 3196/1/3196 3168/1/3168 3185/1/3185 +f 3197/1/3197 3168/1/3168 3196/1/3196 +f 4575/1/4575 3197/1/3197 3196/1/3196 +f 4575/1/4575 3196/1/3196 4576/1/4576 +f 4570/1/4570 4575/1/4575 4576/1/4576 +f 4570/1/4570 4576/1/4576 4568/1/4568 +f 4565/1/4565 4570/1/4570 4568/1/4568 +f 4565/1/4565 4568/1/4568 4564/1/4564 +f 4563/1/4563 4565/1/4565 4564/1/4564 +f 4566/1/4566 4565/1/4565 4563/1/4563 +f 4549/1/4549 4566/1/4566 4563/1/4563 +f 4549/1/4549 4563/1/4563 4553/1/4553 +f 4550/1/4550 4549/1/4549 4553/1/4553 +f 4553/1/4553 4563/1/4563 4561/1/4561 +f 4553/1/4553 4561/1/4561 4551/1/4551 +f 4549/1/4549 4571/1/4571 4566/1/4566 +f 4571/1/4571 4569/1/4569 4566/1/4566 +f 4572/1/4572 4569/1/4569 4571/1/4571 +f 4548/1/4548 4572/1/4572 4571/1/4571 +f 4580/1/4580 4572/1/4572 4548/1/4548 +f 4547/1/4547 4580/1/4580 4548/1/4548 +f 4547/1/4547 4548/1/4548 4546/1/4546 +f 4546/1/4546 4548/1/4548 4549/1/4549 +f 4545/1/4545 4580/1/4580 4547/1/4547 +f 4543/1/4543 4545/1/4545 4547/1/4547 +f 4541/1/4541 4545/1/4545 4543/1/4543 +f 3337/1/3337 4541/1/4541 4543/1/4543 +f 3363/1/3363 4541/1/4541 3337/1/3337 +f 3363/1/3363 4540/1/4540 4541/1/4541 +f 4540/1/4540 4542/1/4542 4541/1/4541 +f 4541/1/4541 4542/1/4542 4544/1/4544 +f 4542/1/4542 4598/1/4598 4544/1/4544 +f 4544/1/4544 4598/1/4598 4589/1/4589 +f 4544/1/4544 4589/1/4589 4588/1/4588 +f 4544/1/4544 4588/1/4588 4545/1/4545 +f 4545/1/4545 4588/1/4588 4581/1/4581 +f 4588/1/4588 4582/1/4582 4581/1/4581 +f 4581/1/4581 4582/1/4582 4578/1/4578 +f 4581/1/4581 4578/1/4578 4580/1/4580 +f 4582/1/4582 4583/1/4583 4578/1/4578 +f 4583/1/4583 4579/1/4579 4578/1/4578 +f 4578/1/4578 4579/1/4579 4573/1/4573 +f 4578/1/4578 4573/1/4573 4572/1/4572 +f 4579/1/4579 4577/1/4577 4573/1/4573 +f 4573/1/4573 4577/1/4577 4574/1/4574 +f 4573/1/4573 4574/1/4574 4569/1/4569 +f 4569/1/4569 4574/1/4574 4570/1/4570 +f 4577/1/4577 4575/1/4575 4574/1/4574 +f 4577/1/4577 4630/1/4630 4575/1/4575 +f 4584/1/4584 4630/1/4630 4577/1/4577 +f 4584/1/4584 4593/1/4593 4630/1/4630 +f 4593/1/4593 3197/1/3197 4630/1/4630 +f 4593/1/4593 3198/1/3198 3197/1/3197 +f 3198/1/3198 3143/1/3143 3197/1/3197 +f 3198/1/3198 3140/1/3140 3143/1/3143 +f 3140/1/3140 3142/1/3142 3143/1/3143 +f 3143/1/3143 3142/1/3142 3160/1/3160 +f 3143/1/3143 3160/1/3160 3165/1/3165 +f 3160/1/3160 3161/1/3161 3165/1/3165 +f 3160/1/3160 3158/1/3158 3161/1/3161 +f 3158/1/3158 3162/1/3162 3161/1/3161 +f 3162/1/3162 3164/1/3164 3161/1/3161 +f 3162/1/3162 3163/1/3163 3164/1/3164 +f 3342/1/3342 3164/1/3164 3163/1/3163 +f 3342/1/3342 3163/1/3163 3341/1/3341 +f 3341/1/3341 3339/1/3339 3342/1/3342 +f 3341/1/3341 3343/1/3343 3339/1/3339 +f 3343/1/3343 3363/1/3363 3339/1/3339 +f 3343/1/3343 3362/1/3362 3363/1/3363 +f 3348/1/3348 3362/1/3362 3343/1/3343 +f 3346/1/3346 3348/1/3348 3343/1/3343 +f 3346/1/3346 3343/1/3343 3345/1/3345 +f 3345/1/3345 3157/1/3157 3346/1/3346 +f 3346/1/3346 3157/1/3157 3156/1/3156 +f 3346/1/3346 3156/1/3156 3347/1/3347 +f 3347/1/3347 3156/1/3156 3155/1/3155 +f 3347/1/3347 3155/1/3155 3349/1/3349 +f 3349/1/3349 3351/1/3351 3347/1/3347 +f 3347/1/3347 3351/1/3351 3348/1/3348 +f 3351/1/3351 3354/1/3354 3348/1/3348 +f 3351/1/3351 4533/1/4533 3354/1/3354 +f 4533/1/4533 4538/1/4538 3354/1/3354 +f 3354/1/3354 4538/1/4538 4539/1/4539 +f 3354/1/3354 4539/1/4539 3362/1/3362 +f 3362/1/3362 4539/1/4539 4540/1/4540 +f 4539/1/4539 4608/1/4608 4540/1/4540 +f 4539/1/4539 4611/1/4611 4608/1/4608 +f 4611/1/4611 4610/1/4610 4608/1/4608 +f 4608/1/4608 4610/1/4610 4607/1/4607 +f 4608/1/4608 4607/1/4607 4606/1/4606 +f 4608/1/4608 4606/1/4606 4542/1/4542 +f 4542/1/4542 4606/1/4606 4599/1/4599 +f 4606/1/4606 4601/1/4601 4599/1/4599 +f 4599/1/4599 4601/1/4601 4596/1/4596 +f 4599/1/4599 4596/1/4596 4598/1/4598 +f 4598/1/4598 4596/1/4596 4590/1/4590 +f 4596/1/4596 4591/1/4591 4590/1/4590 +f 4590/1/4590 4591/1/4591 4586/1/4586 +f 4590/1/4590 4586/1/4586 4585/1/4585 +f 4589/1/4589 4590/1/4590 4585/1/4585 +f 4585/1/4585 4586/1/4586 4583/1/4583 +f 4586/1/4586 4587/1/4587 4583/1/4583 +f 4583/1/4583 4587/1/4587 4584/1/4584 +f 4586/1/4586 4592/1/4592 4587/1/4587 +f 4592/1/4592 4593/1/4593 4587/1/4587 +f 4592/1/4592 4594/1/4594 4593/1/4593 +f 4595/1/4595 4594/1/4594 4592/1/4592 +f 4591/1/4591 4595/1/4595 4592/1/4592 +f 4597/1/4597 4595/1/4595 4591/1/4591 +f 4597/1/4597 4602/1/4602 4595/1/4595 +f 4602/1/4602 4629/1/4629 4595/1/4595 +f 4604/1/4604 4629/1/4629 4602/1/4602 +f 4600/1/4600 4604/1/4604 4602/1/4602 +f 4603/1/4603 4604/1/4604 4600/1/4600 +f 4605/1/4605 4603/1/4603 4600/1/4600 +f 4605/1/4605 4600/1/4600 4601/1/4601 +f 4609/1/4609 4603/1/4603 4605/1/4605 +f 4607/1/4607 4609/1/4609 4605/1/4605 +f 4609/1/4609 4622/1/4622 4603/1/4603 +f 4622/1/4622 4625/1/4625 4603/1/4603 +f 4622/1/4622 4624/1/4624 4625/1/4625 +f 4624/1/4624 4626/1/4626 4625/1/4625 +f 4625/1/4625 4626/1/4626 4627/1/4627 +f 4625/1/4625 4627/1/4627 4604/1/4604 +f 4626/1/4626 3200/1/3200 4627/1/4627 +f 4627/1/4627 3200/1/3200 3199/1/3199 +f 4627/1/4627 3199/1/3199 4629/1/4629 +f 4629/1/4629 3199/1/3199 3198/1/3198 +f 4629/1/4629 3198/1/3198 4594/1/4594 +f 3200/1/3200 3144/1/3144 3199/1/3199 +f 3199/1/3199 3144/1/3144 3140/1/3140 +f 3144/1/3144 3141/1/3141 3140/1/3140 +f 3144/1/3144 3145/1/3145 3141/1/3141 +f 3145/1/3145 3146/1/3146 3141/1/3141 +f 3141/1/3141 3146/1/3146 3147/1/3147 +f 3141/1/3141 3147/1/3147 3142/1/3142 +f 3142/1/3142 3147/1/3147 3154/1/3154 +f 3142/1/3142 3154/1/3154 3158/1/3158 +f 3154/1/3154 3159/1/3159 3158/1/3158 +f 3154/1/3154 3157/1/3157 3159/1/3159 +f 3159/1/3159 3157/1/3157 3163/1/3163 +f 3344/1/3344 3163/1/3163 3157/1/3157 +f 3153/1/3153 3157/1/3157 3154/1/3154 +f 3147/1/3147 3153/1/3153 3154/1/3154 +f 3146/1/3146 3153/1/3153 3147/1/3147 +f 3146/1/3146 3152/1/3152 3153/1/3153 +f 3152/1/3152 3155/1/3155 3153/1/3153 +f 3152/1/3152 3350/1/3350 3155/1/3155 +f 3150/1/3150 3350/1/3350 3152/1/3152 +f 3151/1/3151 3150/1/3150 3152/1/3152 +f 3145/1/3145 3150/1/3150 3151/1/3151 +f 3149/1/3149 3150/1/3150 3145/1/3145 +f 3148/1/3148 3149/1/3149 3145/1/3145 +f 3202/1/3202 3149/1/3149 3148/1/3148 +f 3201/1/3201 3202/1/3202 3148/1/3148 +f 3201/1/3201 3148/1/3148 3200/1/3200 +f 3329/1/3329 3201/1/3201 3200/1/3200 +f 3327/1/3327 3201/1/3201 3329/1/3329 +f 3328/1/3328 3327/1/3327 3329/1/3329 +f 3328/1/3328 3329/1/3329 4628/1/4628 +f 4619/1/4619 3328/1/3328 4628/1/4628 +f 4619/1/4619 4628/1/4628 4621/1/4621 +f 4617/1/4617 4619/1/4619 4621/1/4621 +f 4617/1/4617 4621/1/4621 4618/1/4618 +f 4613/1/4613 4617/1/4617 4618/1/4618 +f 4613/1/4613 4618/1/4618 4610/1/4610 +f 4610/1/4610 4618/1/4618 4620/1/4620 +f 4610/1/4610 4620/1/4620 4609/1/4609 +f 4612/1/4612 4617/1/4617 4613/1/4613 +f 4611/1/4611 4612/1/4612 4613/1/4613 +f 4614/1/4614 4612/1/4612 4611/1/4611 +f 4538/1/4538 4614/1/4614 4611/1/4611 +f 4532/1/4532 4614/1/4614 4538/1/4538 +f 4532/1/4532 3311/1/3311 4614/1/4614 +f 3311/1/3311 3316/1/3316 4614/1/4614 +f 4614/1/4614 3316/1/3316 4615/1/4615 +f 3316/1/3316 3317/1/3317 4615/1/4615 +f 4615/1/4615 3317/1/3317 4616/1/4616 +f 4615/1/4615 4616/1/4616 4612/1/4612 +f 3317/1/3317 3325/1/3325 4616/1/4616 +f 3325/1/3325 4623/1/4623 4616/1/4616 +f 4616/1/4616 4623/1/4623 4619/1/4619 +f 3325/1/3325 3326/1/3326 4623/1/4623 +f 4623/1/4623 3326/1/3326 3328/1/3328 +f 3325/1/3325 3324/1/3324 3326/1/3326 +f 3324/1/3324 3208/1/3208 3326/1/3326 +f 3326/1/3326 3208/1/3208 3327/1/3327 +f 3322/1/3322 3208/1/3208 3324/1/3324 +f 3323/1/3323 3322/1/3322 3324/1/3324 +f 3319/1/3319 3322/1/3322 3323/1/3323 +f 3313/1/3313 3319/1/3319 3323/1/3323 +f 3313/1/3313 3323/1/3323 3315/1/3315 +f 3314/1/3314 3313/1/3313 3315/1/3315 +f 3314/1/3314 3315/1/3315 3316/1/3316 +f 3310/1/3310 3313/1/3313 3314/1/3314 +f 3311/1/3311 3310/1/3310 3314/1/3314 +f 3307/1/3307 3310/1/3310 3311/1/3311 +f 3307/1/3307 3308/1/3308 3310/1/3310 +f 3308/1/3308 3309/1/3309 3310/1/3310 +f 3308/1/3308 3306/1/3306 3309/1/3309 +f 3306/1/3306 3298/1/3298 3309/1/3309 +f 3298/1/3298 3318/1/3318 3309/1/3309 +f 3309/1/3309 3318/1/3318 3319/1/3319 +f 3318/1/3318 3321/1/3321 3319/1/3319 +f 3318/1/3318 3320/1/3320 3321/1/3321 +f 3320/1/3320 3205/1/3205 3321/1/3321 +f 3321/1/3321 3205/1/3205 3207/1/3207 +f 3321/1/3321 3207/1/3207 3322/1/3322 +f 3205/1/3205 3203/1/3203 3207/1/3207 +f 3207/1/3207 3203/1/3203 3208/1/3208 +f 3208/1/3208 3203/1/3203 3201/1/3201 +f 3205/1/3205 3206/1/3206 3203/1/3203 +f 3206/1/3206 3204/1/3204 3203/1/3203 +f 3203/1/3203 3204/1/3204 3202/1/3202 +f 3204/1/3204 3361/1/3361 3202/1/3202 +f 3202/1/3202 3361/1/3361 3359/1/3359 +f 3361/1/3361 3360/1/3360 3359/1/3359 +f 3359/1/3359 3360/1/3360 3358/1/3358 +f 3359/1/3359 3358/1/3358 3149/1/3149 +f 3360/1/3360 4649/1/4649 3358/1/3358 +f 4649/1/4649 3356/1/3356 3358/1/3358 +f 3358/1/3358 3356/1/3356 3355/1/3355 +f 3150/1/3150 3358/1/3358 3355/1/3355 +f 3353/1/3353 3355/1/3355 3356/1/3356 +f 3353/1/3353 3356/1/3356 3357/1/3357 +f 3357/1/3357 4531/1/4531 3353/1/3353 +f 3353/1/3353 4531/1/4531 3351/1/3351 +f 3353/1/3353 3351/1/3351 3352/1/3352 +f 4536/1/4536 4531/1/4531 3357/1/3357 +f 4534/1/4534 4531/1/4531 4536/1/4536 +f 4536/1/4536 4537/1/4537 4534/1/4534 +f 4534/1/4534 4537/1/4537 4535/1/4535 +f 4535/1/4535 4526/1/4526 4534/1/4534 +f 4525/1/4525 4526/1/4526 4535/1/4535 +f 4535/1/4535 4524/1/4524 4525/1/4525 +f 4525/1/4525 4524/1/4524 4522/1/4522 +f 4522/1/4522 4524/1/4524 4521/1/4521 +f 4522/1/4522 4521/1/4521 4520/1/4520 +f 4520/1/4520 4523/1/4523 4522/1/4522 +f 4522/1/4522 4523/1/4523 4526/1/4526 +f 4523/1/4523 4528/1/4528 4526/1/4526 +f 4526/1/4526 4528/1/4528 4530/1/4530 +f 4526/1/4526 4530/1/4530 4531/1/4531 +f 4531/1/4531 4530/1/4530 4533/1/4533 +f 4530/1/4530 4532/1/4532 4533/1/4533 +f 4530/1/4530 3312/1/3312 4532/1/4532 +f 3312/1/3312 3307/1/3307 4532/1/4532 +f 3312/1/3312 3302/1/3302 3307/1/3307 +f 3302/1/3302 3305/1/3305 3307/1/3307 +f 3302/1/3302 3301/1/3301 3305/1/3305 +f 3301/1/3301 3299/1/3299 3305/1/3305 +f 3305/1/3305 3299/1/3299 3306/1/3306 +f 3301/1/3301 3296/1/3296 3299/1/3299 +f 3296/1/3296 3295/1/3295 3299/1/3299 +f 3299/1/3299 3295/1/3295 3298/1/3298 +f 3295/1/3295 3297/1/3297 3298/1/3298 +f 3298/1/3298 3297/1/3297 3320/1/3320 +f 3295/1/3295 3292/1/3292 3297/1/3297 +f 3292/1/3292 3215/1/3215 3297/1/3297 +f 3297/1/3297 3215/1/3215 3205/1/3205 +f 3292/1/3292 3214/1/3214 3215/1/3215 +f 3214/1/3214 3210/1/3210 3215/1/3215 +f 3215/1/3215 3210/1/3210 3206/1/3206 +f 3210/1/3210 3209/1/3209 3206/1/3206 +f 3210/1/3210 3211/1/3211 3209/1/3209 +f 3211/1/3211 4471/1/4471 3209/1/3209 +f 3209/1/3209 4471/1/4471 4647/1/4647 +f 3209/1/3209 4647/1/4647 3204/1/3204 +f 4471/1/4471 4518/1/4518 4647/1/4647 +f 4647/1/4647 4518/1/4518 4645/1/4645 +f 4647/1/4647 4645/1/4645 3361/1/3361 +f 3361/1/3361 4645/1/4645 4646/1/4646 +f 4645/1/4645 4519/1/4519 4646/1/4646 +f 4519/1/4519 4524/1/4524 4646/1/4646 +f 4646/1/4646 4524/1/4524 4648/1/4648 +f 4646/1/4646 4648/1/4648 3360/1/3360 +f 4648/1/4648 4524/1/4524 4537/1/4537 +f 4648/1/4648 4537/1/4537 4649/1/4649 +f 4518/1/4518 4519/1/4519 4645/1/4645 +f 4518/1/4518 4516/1/4516 4519/1/4519 +f 4516/1/4516 4515/1/4515 4519/1/4519 +f 4519/1/4519 4515/1/4515 4521/1/4521 +f 4516/1/4516 4513/1/4513 4515/1/4515 +f 4515/1/4515 4513/1/4513 4514/1/4514 +f 4520/1/4520 4515/1/4515 4514/1/4514 +f 4514/1/4514 4511/1/4511 4520/1/4520 +f 4512/1/4512 4511/1/4511 4514/1/4514 +f 4507/1/4507 4511/1/4511 4512/1/4512 +f 4512/1/4512 4508/1/4508 4507/1/4507 +f 4507/1/4507 4508/1/4508 4505/1/4505 +f 4507/1/4507 4505/1/4505 4509/1/4509 +f 4509/1/4509 4510/1/4510 4507/1/4507 +f 4504/1/4504 4510/1/4510 4509/1/4509 +f 4503/1/4503 4510/1/4510 4504/1/4504 +f 4504/1/4504 4501/1/4501 4503/1/4503 +f 4503/1/4503 4501/1/4501 4500/1/4500 +f 4500/1/4500 4497/1/4497 4503/1/4503 +f 4498/1/4498 4497/1/4497 4500/1/4500 +f 4500/1/4500 4499/1/4499 4498/1/4498 +f 4498/1/4498 4499/1/4499 4495/1/4495 +f 4495/1/4495 4499/1/4499 4496/1/4496 +f 4495/1/4495 4496/1/4496 4492/1/4492 +f 4492/1/4492 4493/1/4493 4495/1/4495 +f 4495/1/4495 4493/1/4493 4497/1/4497 +f 4493/1/4493 3265/1/3265 4497/1/4497 +f 4497/1/4497 3265/1/3265 3266/1/3266 +f 4497/1/4497 3266/1/3266 4510/1/4510 +f 4510/1/4510 3266/1/3266 4529/1/4529 +f 4510/1/4510 4529/1/4529 4511/1/4511 +f 4511/1/4511 4529/1/4529 4527/1/4527 +f 4511/1/4511 4527/1/4527 4523/1/4523 +f 4529/1/4529 3270/1/3270 4527/1/4527 +f 4527/1/4527 3270/1/3270 3330/1/3330 +f 4527/1/4527 3330/1/3330 4528/1/4528 +f 4528/1/4528 3330/1/3330 3312/1/3312 +f 3270/1/3270 3303/1/3303 3330/1/3330 +f 3330/1/3330 3303/1/3303 3302/1/3302 +f 3303/1/3303 3300/1/3300 3302/1/3302 +f 3303/1/3303 3304/1/3304 3300/1/3300 +f 3304/1/3304 3293/1/3293 3300/1/3300 +f 3300/1/3300 3293/1/3293 3294/1/3294 +f 3300/1/3300 3294/1/3294 3296/1/3296 +f 3294/1/3294 3291/1/3291 3296/1/3296 +f 3288/1/3288 3291/1/3291 3294/1/3294 +f 3288/1/3288 3290/1/3290 3291/1/3291 +f 3291/1/3291 3290/1/3290 3292/1/3292 +f 3288/1/3288 3286/1/3286 3290/1/3290 +f 3286/1/3286 3213/1/3213 3290/1/3290 +f 3290/1/3290 3213/1/3213 3214/1/3214 +f 3284/1/3284 3213/1/3213 3286/1/3286 +f 3285/1/3285 3284/1/3284 3286/1/3286 +f 3283/1/3283 3284/1/3284 3285/1/3285 +f 3287/1/3287 3283/1/3283 3285/1/3285 +f 3287/1/3287 3285/1/3285 3289/1/3289 +f 3332/1/3332 3287/1/3287 3289/1/3289 +f 3332/1/3332 3289/1/3289 3304/1/3304 +f 3331/1/3331 3332/1/3332 3304/1/3304 +f 3269/1/3269 3332/1/3332 3331/1/3331 +f 3270/1/3270 3269/1/3269 3331/1/3331 +f 3267/1/3267 3269/1/3269 3270/1/3270 +f 3267/1/3267 3268/1/3268 3269/1/3269 +f 3268/1/3268 3273/1/3273 3269/1/3269 +f 3269/1/3269 3273/1/3273 3277/1/3277 +f 3273/1/3273 3276/1/3276 3277/1/3277 +f 3277/1/3277 3276/1/3276 3287/1/3287 +f 3276/1/3276 3279/1/3279 3287/1/3287 +f 3275/1/3275 3279/1/3279 3276/1/3276 +f 3275/1/3275 3278/1/3278 3279/1/3279 +f 3278/1/3278 3281/1/3281 3279/1/3279 +f 3279/1/3279 3281/1/3281 3282/1/3282 +f 3279/1/3279 3282/1/3282 3283/1/3283 +f 3281/1/3281 3216/1/3216 3282/1/3282 +f 3282/1/3282 3216/1/3216 3218/1/3218 +f 3282/1/3282 3218/1/3218 3284/1/3284 +f 3216/1/3216 3212/1/3212 3218/1/3218 +f 3218/1/3218 3212/1/3212 3213/1/3213 +f 3213/1/3213 3212/1/3212 3210/1/3210 +f 3216/1/3216 3217/1/3217 3212/1/3212 +f 3217/1/3217 4469/1/4469 3212/1/3212 +f 3212/1/3212 4469/1/4469 3211/1/3211 +f 4469/1/4469 4466/1/4466 3211/1/3211 +f 4469/1/4469 4470/1/4470 4466/1/4466 +f 4470/1/4470 4467/1/4467 4466/1/4466 +f 4466/1/4466 4467/1/4467 4468/1/4468 +f 4466/1/4466 4468/1/4468 4471/1/4471 +f 4471/1/4471 4468/1/4468 4517/1/4517 +f 4517/1/4517 4468/1/4468 4516/1/4516 +f 4468/1/4468 4467/1/4467 4508/1/4508 +f 4468/1/4468 4508/1/4508 4513/1/4513 +f 4470/1/4470 4474/1/4474 4467/1/4467 +f 4474/1/4474 4506/1/4506 4467/1/4467 +f 4506/1/4506 4505/1/4505 4467/1/4467 +f 4506/1/4506 4501/1/4501 4505/1/4505 +f 4502/1/4502 4501/1/4501 4506/1/4506 +f 4502/1/4502 4499/1/4499 4501/1/4501 +f 4476/1/4476 4499/1/4499 4502/1/4502 +f 4476/1/4476 4502/1/4502 4474/1/4474 +f 4473/1/4473 4476/1/4476 4474/1/4474 +f 4473/1/4473 4477/1/4477 4476/1/4476 +f 4477/1/4477 4481/1/4481 4476/1/4476 +f 4479/1/4479 4481/1/4481 4477/1/4477 +f 4475/1/4475 4479/1/4479 4477/1/4477 +f 4480/1/4480 4479/1/4479 4475/1/4475 +f 4478/1/4478 4480/1/4480 4475/1/4475 +f 4478/1/4478 4475/1/4475 4472/1/4472 +f 3221/1/3221 4478/1/4478 4472/1/4472 +f 3221/1/3221 4472/1/4472 3217/1/3217 +f 3220/1/3220 3221/1/3221 3217/1/3217 +f 3220/1/3220 3217/1/3217 3219/1/3219 +f 3222/1/3222 3220/1/3220 3219/1/3219 +f 3222/1/3222 3219/1/3219 3223/1/3223 +f 3280/1/3280 3222/1/3222 3223/1/3223 +f 3280/1/3280 3223/1/3223 3278/1/3278 +f 3274/1/3274 3280/1/3280 3278/1/3278 +f 3239/1/3239 3280/1/3280 3274/1/3274 +f 3271/1/3271 3239/1/3239 3274/1/3274 +f 3271/1/3271 3274/1/3274 3272/1/3272 +f 3268/1/3268 3271/1/3271 3272/1/3272 +f 3241/1/3241 3271/1/3271 3268/1/3268 +f 3241/1/3241 3238/1/3238 3271/1/3271 +f 3241/1/3241 3237/1/3237 3238/1/3238 +f 3237/1/3237 3233/1/3233 3238/1/3238 +f 3238/1/3238 3233/1/3233 3239/1/3239 +f 3233/1/3233 3231/1/3231 3239/1/3239 +f 3233/1/3233 3230/1/3230 3231/1/3231 +f 3230/1/3230 3225/1/3225 3231/1/3231 +f 3231/1/3231 3225/1/3225 3222/1/3222 +f 3230/1/3230 3224/1/3224 3225/1/3225 +f 3224/1/3224 3220/1/3220 3225/1/3225 +f 3224/1/3224 3226/1/3226 3220/1/3220 +f 3227/1/3227 3226/1/3226 3224/1/3224 +f 3229/1/3229 3227/1/3227 3224/1/3224 +f 3235/1/3235 3227/1/3227 3229/1/3229 +f 3234/1/3234 3235/1/3235 3229/1/3229 +f 3234/1/3234 3229/1/3229 3232/1/3232 +f 3236/1/3236 3234/1/3234 3232/1/3232 +f 3236/1/3236 3232/1/3232 3237/1/3237 +f 3240/1/3240 3236/1/3236 3237/1/3237 +f 3240/1/3240 3242/1/3242 3236/1/3236 +f 3245/1/3245 3242/1/3242 3240/1/3240 +f 3243/1/3243 3245/1/3245 3240/1/3240 +f 3243/1/3243 3240/1/3240 3244/1/3244 +f 3265/1/3265 3243/1/3243 3244/1/3244 +f 3262/1/3262 3243/1/3243 3265/1/3265 +f 3262/1/3262 3260/1/3260 3243/1/3243 +f 3261/1/3261 3260/1/3260 3262/1/3262 +f 4463/1/4463 3261/1/3261 3262/1/3262 +f 4463/1/4463 3262/1/3262 4493/1/4493 +f 4462/1/4462 3261/1/3261 4463/1/4463 +f 4490/1/4490 4462/1/4462 4463/1/4463 +f 4490/1/4490 4463/1/4463 4489/1/4489 +f 4489/1/4489 4487/1/4487 4490/1/4490 +f 4490/1/4490 4487/1/4487 4405/1/4405 +f 4490/1/4490 4405/1/4405 4465/1/4465 +f 4465/1/4465 4405/1/4405 4464/1/4464 +f 4464/1/4464 4462/1/4462 4465/1/4465 +f 4461/1/4461 4462/1/4462 4464/1/4464 +f 4464/1/4464 4403/1/4403 4461/1/4461 +f 4461/1/4461 4403/1/4403 4460/1/4460 +f 4460/1/4460 4410/1/4410 4461/1/4461 +f 4411/1/4411 4410/1/4410 4460/1/4460 +f 4460/1/4460 4399/1/4399 4411/1/4411 +f 4411/1/4411 4399/1/4399 4407/1/4407 +f 4407/1/4407 4399/1/4399 4401/1/4401 +f 4407/1/4407 4401/1/4401 4408/1/4408 +f 4408/1/4408 4409/1/4409 4407/1/4407 +f 4407/1/4407 4409/1/4409 4410/1/4410 +f 4409/1/4409 3264/1/3264 4410/1/4410 +f 4410/1/4410 3264/1/3264 3263/1/3263 +f 4410/1/4410 3263/1/3263 4462/1/4462 +f 3264/1/3264 3075/1/3075 3263/1/3263 +f 3263/1/3263 3075/1/3075 3077/1/3077 +f 3263/1/3263 3077/1/3077 3261/1/3261 +f 3075/1/3075 3072/1/3072 3077/1/3077 +f 3077/1/3077 3072/1/3072 3076/1/3076 +f 3077/1/3077 3076/1/3076 3258/1/3258 +f 3077/1/3077 3258/1/3258 3260/1/3260 +f 3260/1/3260 3258/1/3258 3245/1/3245 +f 3258/1/3258 3257/1/3257 3245/1/3245 +f 3245/1/3245 3257/1/3257 3248/1/3248 +f 3257/1/3257 3250/1/3250 3248/1/3248 +f 3248/1/3248 3250/1/3250 3246/1/3246 +f 3248/1/3248 3246/1/3246 3242/1/3242 +f 3242/1/3242 3246/1/3246 3247/1/3247 +f 3242/1/3242 3247/1/3247 3234/1/3234 +f 3246/1/3246 3249/1/3249 3247/1/3247 +f 3249/1/3249 3235/1/3235 3247/1/3247 +f 3249/1/3249 3251/1/3251 3235/1/3235 +f 3249/1/3249 3252/1/3252 3251/1/3251 +f 3252/1/3252 3104/1/3104 3251/1/3251 +f 3251/1/3251 3104/1/3104 3228/1/3228 +f 3251/1/3251 3228/1/3228 3227/1/3227 +f 3104/1/3104 3105/1/3105 3228/1/3228 +f 3228/1/3228 3105/1/3105 3226/1/3226 +f 3226/1/3226 3105/1/3105 3221/1/3221 +f 3104/1/3104 3102/1/3102 3105/1/3105 +f 3102/1/3102 4486/1/4486 3105/1/3105 +f 3105/1/3105 4486/1/4486 4478/1/4478 +f 3102/1/3102 4393/1/4393 4486/1/4486 +f 4393/1/4393 4485/1/4485 4486/1/4486 +f 4486/1/4486 4485/1/4485 4480/1/4480 +f 4485/1/4485 4484/1/4484 4480/1/4480 +f 4480/1/4480 4484/1/4484 4482/1/4482 +f 4482/1/4482 4484/1/4484 4483/1/4483 +f 4482/1/4482 4483/1/4483 4479/1/4479 +f 4484/1/4484 4488/1/4488 4483/1/4483 +f 4483/1/4483 4488/1/4488 4494/1/4494 +f 4483/1/4483 4494/1/4494 4481/1/4481 +f 4481/1/4481 4494/1/4494 4496/1/4496 +f 4494/1/4494 4488/1/4488 4491/1/4491 +f 4492/1/4492 4494/1/4494 4491/1/4491 +f 4491/1/4491 4463/1/4463 4492/1/4492 +f 4491/1/4491 4488/1/4488 4489/1/4489 +f 4484/1/4484 4487/1/4487 4488/1/4488 +f 4484/1/4484 4406/1/4406 4487/1/4487 +f 4485/1/4485 4406/1/4406 4484/1/4484 +f 4396/1/4396 4406/1/4406 4485/1/4485 +f 4396/1/4396 4395/1/4395 4406/1/4406 +f 4395/1/4395 4404/1/4404 4406/1/4406 +f 4404/1/4404 4405/1/4405 4406/1/4406 +f 4404/1/4404 4403/1/4403 4405/1/4405 +f 4398/1/4398 4403/1/4403 4404/1/4404 +f 4398/1/4398 4399/1/4399 4403/1/4403 +f 4394/1/4394 4399/1/4399 4398/1/4398 +f 4394/1/4394 4398/1/4398 4395/1/4395 +f 4390/1/4390 4394/1/4394 4395/1/4395 +f 4390/1/4390 4392/1/4392 4394/1/4394 +f 4392/1/4392 4397/1/4397 4394/1/4394 +f 4391/1/4391 4397/1/4397 4392/1/4392 +f 4388/1/4388 4391/1/4391 4392/1/4392 +f 4387/1/4387 4391/1/4391 4388/1/4388 +f 4386/1/4386 4387/1/4387 4388/1/4388 +f 4386/1/4386 4388/1/4388 4389/1/4389 +f 3056/1/3056 4386/1/4386 4389/1/4389 +f 3056/1/3056 4389/1/4389 3101/1/3101 +f 3057/1/3057 3056/1/3056 3101/1/3101 +f 3057/1/3057 3101/1/3101 3103/1/3103 +f 3093/1/3093 3057/1/3057 3103/1/3103 +f 3093/1/3093 3103/1/3103 3094/1/3094 +f 3092/1/3092 3093/1/3093 3094/1/3094 +f 3092/1/3092 3094/1/3094 3095/1/3095 +f 3079/1/3079 3092/1/3092 3095/1/3095 +f 3079/1/3079 3095/1/3095 3080/1/3080 +f 3078/1/3078 3079/1/3079 3080/1/3080 +f 3078/1/3078 3080/1/3080 3081/1/3081 +f 3076/1/3076 3078/1/3078 3081/1/3081 +f 3076/1/3076 3074/1/3074 3078/1/3078 +f 3081/1/3081 3080/1/3080 3082/1/3082 +f 3081/1/3081 3082/1/3082 3259/1/3259 +f 3258/1/3258 3081/1/3081 3259/1/3259 +f 3259/1/3259 3082/1/3082 3256/1/3256 +f 3259/1/3259 3256/1/3256 3257/1/3257 +f 3082/1/3082 3096/1/3096 3256/1/3256 +f 3096/1/3096 3255/1/3255 3256/1/3256 +f 3256/1/3256 3255/1/3255 3254/1/3254 +f 3256/1/3256 3254/1/3254 3250/1/3250 +f 3250/1/3250 3254/1/3254 3249/1/3249 +f 3255/1/3255 3253/1/3253 3254/1/3254 +f 3254/1/3254 3253/1/3253 3252/1/3252 +f 3255/1/3255 3098/1/3098 3253/1/3253 +f 3098/1/3098 3100/1/3100 3253/1/3253 +f 3253/1/3253 3100/1/3100 3104/1/3104 +f 3098/1/3098 3099/1/3099 3100/1/3100 +f 3099/1/3099 3102/1/3102 3100/1/3100 +f 3099/1/3099 3101/1/3101 3102/1/3102 +f 3097/1/3097 3099/1/3099 3098/1/3098 +f 3096/1/3096 3097/1/3097 3098/1/3098 +f 3095/1/3095 3097/1/3097 3096/1/3096 +f 3094/1/3094 3099/1/3099 3097/1/3097 +f 3096/1/3096 3098/1/3098 3255/1/3255 +f 3080/1/3080 3096/1/3096 3082/1/3082 +f 3074/1/3074 3079/1/3079 3078/1/3078 +f 3074/1/3074 3066/1/3066 3079/1/3079 +f 3073/1/3073 3066/1/3066 3074/1/3074 +f 3072/1/3072 3073/1/3073 3074/1/3074 +f 3072/1/3072 3069/1/3069 3073/1/3073 +f 3069/1/3069 3067/1/3067 3073/1/3073 +f 3069/1/3069 3063/1/3063 3067/1/3067 +f 3063/1/3063 3062/1/3062 3067/1/3067 +f 3067/1/3067 3062/1/3062 3066/1/3066 +f 3062/1/3062 3065/1/3065 3066/1/3066 +f 3066/1/3066 3065/1/3065 3092/1/3092 +f 3062/1/3062 3064/1/3064 3065/1/3065 +f 3065/1/3065 3064/1/3064 3093/1/3093 +f 3062/1/3062 3058/1/3058 3064/1/3064 +f 3058/1/3058 3057/1/3057 3064/1/3064 +f 3058/1/3058 3055/1/3055 3057/1/3057 +f 3053/1/3053 3055/1/3055 3058/1/3058 +f 3059/1/3059 3053/1/3053 3058/1/3058 +f 3054/1/3054 3053/1/3053 3059/1/3059 +f 3060/1/3060 3054/1/3054 3059/1/3059 +f 3060/1/3060 3059/1/3059 3063/1/3063 +f 3068/1/3068 3060/1/3060 3063/1/3063 +f 3070/1/3070 3060/1/3060 3068/1/3068 +f 3071/1/3071 3070/1/3070 3068/1/3068 +f 3071/1/3071 3068/1/3068 3069/1/3069 +f 3084/1/3084 3070/1/3070 3071/1/3071 +f 3083/1/3083 3084/1/3084 3071/1/3071 +f 3083/1/3083 3071/1/3071 3075/1/3075 +f 3085/1/3085 3084/1/3084 3083/1/3083 +f 3086/1/3086 3085/1/3085 3083/1/3083 +f 3086/1/3086 3083/1/3083 3264/1/3264 +f 3089/1/3089 3085/1/3085 3086/1/3086 +f 4412/1/4412 3089/1/3089 3086/1/3086 +f 4412/1/4412 3086/1/3086 4409/1/4409 +f 4414/1/4414 3089/1/3089 4412/1/4412 +f 4455/1/4455 4414/1/4414 4412/1/4412 +f 4455/1/4455 4412/1/4412 4454/1/4454 +f 4454/1/4454 4452/1/4452 4455/1/4455 +f 4455/1/4455 4452/1/4452 4449/1/4449 +f 4455/1/4455 4449/1/4449 4456/1/4456 +f 4456/1/4456 4449/1/4449 4457/1/4457 +f 4457/1/4457 4414/1/4414 4456/1/4456 +f 4458/1/4458 4414/1/4414 4457/1/4457 +f 4457/1/4457 4444/1/4444 4458/1/4458 +f 4458/1/4458 4444/1/4444 4445/1/4445 +f 4445/1/4445 4415/1/4415 4458/1/4458 +f 4446/1/4446 4415/1/4415 4445/1/4445 +f 4445/1/4445 4443/1/4443 4446/1/4446 +f 4446/1/4446 4443/1/4443 4418/1/4418 +f 4418/1/4418 4443/1/4443 4420/1/4420 +f 4418/1/4418 4420/1/4420 4417/1/4417 +f 4417/1/4417 4416/1/4416 4418/1/4418 +f 4418/1/4418 4416/1/4416 4415/1/4415 +f 4416/1/4416 2983/1/2983 4415/1/4415 +f 4415/1/4415 2983/1/2983 3091/1/3091 +f 4415/1/4415 3091/1/3091 4414/1/4414 +f 2983/1/2983 2985/1/2985 3091/1/3091 +f 3091/1/3091 2985/1/2985 3020/1/3020 +f 3091/1/3091 3020/1/3020 3089/1/3089 +f 2985/1/2985 3014/1/3014 3020/1/3020 +f 3020/1/3020 3014/1/3014 3021/1/3021 +f 3020/1/3020 3021/1/3021 3029/1/3029 +f 3020/1/3020 3029/1/3029 3085/1/3085 +f 3085/1/3085 3029/1/3029 3088/1/3088 +f 3029/1/3029 3038/1/3038 3088/1/3088 +f 3088/1/3088 3038/1/3038 3087/1/3087 +f 3088/1/3088 3087/1/3087 3084/1/3084 +f 3038/1/3038 3040/1/3040 3087/1/3087 +f 3087/1/3087 3040/1/3040 3090/1/3090 +f 3087/1/3087 3090/1/3090 3070/1/3070 +f 3070/1/3070 3090/1/3090 3061/1/3061 +f 3090/1/3090 3052/1/3052 3061/1/3061 +f 3052/1/3052 3054/1/3054 3061/1/3061 +f 3052/1/3052 3051/1/3051 3054/1/3054 +f 3052/1/3052 3048/1/3048 3051/1/3051 +f 3048/1/3048 3047/1/3047 3051/1/3051 +f 3051/1/3051 3047/1/3047 3050/1/3050 +f 3051/1/3051 3050/1/3050 3053/1/3053 +f 3047/1/3047 3049/1/3049 3050/1/3050 +f 3050/1/3050 3049/1/3049 3055/1/3055 +f 3055/1/3055 3049/1/3049 3056/1/3056 +f 3047/1/3047 3044/1/3044 3049/1/3049 +f 3044/1/3044 4385/1/4385 3049/1/3049 +f 3049/1/3049 4385/1/4385 4386/1/4386 +f 3044/1/3044 4384/1/4384 4385/1/4385 +f 4384/1/4384 4450/1/4450 4385/1/4385 +f 4385/1/4385 4450/1/4450 4387/1/4387 +f 4450/1/4450 4451/1/4451 4387/1/4387 +f 4387/1/4387 4451/1/4451 4459/1/4459 +f 4459/1/4459 4451/1/4451 4400/1/4400 +f 4459/1/4459 4400/1/4400 4391/1/4391 +f 4451/1/4451 4453/1/4453 4400/1/4400 +f 4400/1/4400 4453/1/4453 4402/1/4402 +f 4400/1/4400 4402/1/4402 4397/1/4397 +f 4397/1/4397 4402/1/4402 4401/1/4401 +f 4402/1/4402 4453/1/4453 4413/1/4413 +f 4408/1/4408 4402/1/4402 4413/1/4413 +f 4413/1/4413 4412/1/4412 4408/1/4408 +f 4413/1/4413 4453/1/4453 4454/1/4454 +f 4451/1/4451 4452/1/4452 4453/1/4453 +f 4451/1/4451 4448/1/4448 4452/1/4452 +f 4450/1/4450 4448/1/4448 4451/1/4451 +f 4441/1/4441 4448/1/4448 4450/1/4450 +f 4441/1/4441 4440/1/4440 4448/1/4448 +f 4440/1/4440 4447/1/4447 4448/1/4448 +f 4447/1/4447 4449/1/4449 4448/1/4448 +f 4447/1/4447 4444/1/4444 4449/1/4449 +f 4442/1/4442 4444/1/4444 4447/1/4447 +f 4442/1/4442 4443/1/4443 4444/1/4444 +f 4439/1/4439 4443/1/4443 4442/1/4442 +f 4439/1/4439 4442/1/4442 4440/1/4440 +f 4438/1/4438 4439/1/4439 4440/1/4440 +f 4438/1/4438 4437/1/4437 4439/1/4439 +f 4437/1/4437 4426/1/4426 4439/1/4439 +f 4430/1/4430 4426/1/4426 4437/1/4437 +f 4436/1/4436 4430/1/4430 4437/1/4437 +f 4432/1/4432 4430/1/4430 4436/1/4436 +f 4382/1/4382 4432/1/4432 4436/1/4436 +f 4382/1/4382 4436/1/4436 4383/1/4383 +f 3107/1/3107 4382/1/4382 4383/1/4383 +f 3107/1/3107 4383/1/4383 3046/1/3046 +f 3106/1/3106 3107/1/3107 3046/1/3046 +f 3106/1/3106 3046/1/3046 3045/1/3045 +f 3116/1/3116 3106/1/3106 3045/1/3045 +f 3116/1/3116 3045/1/3045 3033/1/3033 +f 3025/1/3025 3116/1/3116 3033/1/3033 +f 3025/1/3025 3033/1/3033 3027/1/3027 +f 3022/1/3022 3025/1/3025 3027/1/3027 +f 3022/1/3022 3027/1/3027 3026/1/3026 +f 3023/1/3023 3022/1/3022 3026/1/3026 +f 3023/1/3023 3026/1/3026 3028/1/3028 +f 3021/1/3021 3023/1/3023 3028/1/3028 +f 3021/1/3021 3019/1/3019 3023/1/3023 +f 3028/1/3028 3026/1/3026 3031/1/3031 +f 3028/1/3028 3031/1/3031 3030/1/3030 +f 3029/1/3029 3028/1/3028 3030/1/3030 +f 3030/1/3030 3031/1/3031 3036/1/3036 +f 3030/1/3030 3036/1/3036 3038/1/3038 +f 3031/1/3031 3032/1/3032 3036/1/3036 +f 3032/1/3032 3035/1/3035 3036/1/3036 +f 3036/1/3036 3035/1/3035 3039/1/3039 +f 3036/1/3036 3039/1/3039 3040/1/3040 +f 3040/1/3040 3039/1/3039 3052/1/3052 +f 3035/1/3035 3041/1/3041 3039/1/3039 +f 3039/1/3039 3041/1/3041 3048/1/3048 +f 3035/1/3035 3037/1/3037 3041/1/3041 +f 3037/1/3037 3042/1/3042 3041/1/3041 +f 3041/1/3041 3042/1/3042 3047/1/3047 +f 3037/1/3037 3043/1/3043 3042/1/3042 +f 3043/1/3043 3044/1/3044 3042/1/3042 +f 3043/1/3043 3046/1/3046 3044/1/3044 +f 3034/1/3034 3043/1/3043 3037/1/3037 +f 3032/1/3032 3034/1/3034 3037/1/3037 +f 3027/1/3027 3034/1/3034 3032/1/3032 +f 3033/1/3033 3043/1/3043 3034/1/3034 +f 3032/1/3032 3037/1/3037 3035/1/3035 +f 3026/1/3026 3032/1/3032 3031/1/3031 +f 3019/1/3019 3022/1/3022 3023/1/3023 +f 3019/1/3019 3018/1/3018 3022/1/3022 +f 3016/1/3016 3018/1/3018 3019/1/3019 +f 3014/1/3014 3016/1/3016 3019/1/3019 +f 3014/1/3014 3013/1/3013 3016/1/3016 +f 3013/1/3013 3015/1/3015 3016/1/3016 +f 3013/1/3013 3012/1/3012 3015/1/3015 +f 3012/1/3012 3017/1/3017 3015/1/3015 +f 3015/1/3015 3017/1/3017 3018/1/3018 +f 3017/1/3017 3024/1/3024 3018/1/3018 +f 3018/1/3018 3024/1/3024 3025/1/3025 +f 3017/1/3017 3115/1/3115 3024/1/3024 +f 3024/1/3024 3115/1/3115 3116/1/3116 +f 3017/1/3017 3111/1/3111 3115/1/3115 +f 3111/1/3111 3106/1/3106 3115/1/3115 +f 3111/1/3111 3108/1/3108 3106/1/3106 +f 3110/1/3110 3108/1/3108 3111/1/3111 +f 3011/1/3011 3110/1/3110 3111/1/3111 +f 3010/1/3010 3110/1/3110 3011/1/3011 +f 3008/1/3008 3010/1/3010 3011/1/3011 +f 3008/1/3008 3011/1/3011 3012/1/3012 +f 3009/1/3009 3008/1/3008 3012/1/3012 +f 2990/1/2990 3008/1/3008 3009/1/3009 +f 2984/1/2984 2990/1/2990 3009/1/3009 +f 2984/1/2984 3009/1/3009 3013/1/3013 +f 2986/1/2986 2990/1/2990 2984/1/2984 +f 2982/1/2982 2986/1/2986 2984/1/2984 +f 2982/1/2982 2984/1/2984 2985/1/2985 +f 2981/1/2981 2986/1/2986 2982/1/2982 +f 2980/1/2980 2981/1/2981 2982/1/2982 +f 2980/1/2980 2982/1/2982 2983/1/2983 +f 2977/1/2977 2981/1/2981 2980/1/2980 +f 2978/1/2978 2977/1/2977 2980/1/2980 +f 2978/1/2978 2980/1/2980 4416/1/4416 +f 2973/1/2973 2977/1/2977 2978/1/2978 +f 4422/1/4422 2973/1/2973 2978/1/2978 +f 4422/1/4422 2978/1/2978 4423/1/4423 +f 4423/1/4423 4428/1/4428 4422/1/4422 +f 4422/1/4422 4428/1/4428 2976/1/2976 +f 4422/1/4422 2976/1/2976 2975/1/2975 +f 2975/1/2975 2976/1/2976 2974/1/2974 +f 2974/1/2974 2973/1/2973 2975/1/2975 +f 2972/1/2972 2973/1/2973 2974/1/2974 +f 2974/1/2974 2969/1/2969 2972/1/2972 +f 2972/1/2972 2969/1/2969 2971/1/2971 +f 2971/1/2971 2927/1/2927 2972/1/2972 +f 2970/1/2970 2927/1/2927 2971/1/2971 +f 2971/1/2971 2966/1/2966 2970/1/2970 +f 2970/1/2970 2966/1/2966 2929/1/2929 +f 2929/1/2929 2966/1/2966 2931/1/2931 +f 2929/1/2929 2931/1/2931 2928/1/2928 +f 2928/1/2928 2924/1/2924 2929/1/2929 +f 2929/1/2929 2924/1/2924 2927/1/2927 +f 2924/1/2924 2923/1/2923 2927/1/2927 +f 2927/1/2927 2923/1/2923 2926/1/2926 +f 2927/1/2927 2926/1/2926 2973/1/2973 +f 2923/1/2923 2925/1/2925 2926/1/2926 +f 2926/1/2926 2925/1/2925 2979/1/2979 +f 2926/1/2926 2979/1/2979 2977/1/2977 +f 2925/1/2925 2994/1/2994 2979/1/2979 +f 2979/1/2979 2994/1/2994 2991/1/2991 +f 2979/1/2979 2991/1/2991 2987/1/2987 +f 2979/1/2979 2987/1/2987 2981/1/2981 +f 2991/1/2991 2992/1/2992 2987/1/2987 +f 2987/1/2987 2992/1/2992 2993/1/2993 +f 2987/1/2987 2993/1/2993 2988/1/2988 +f 2987/1/2987 2988/1/2988 2986/1/2986 +f 2986/1/2986 2988/1/2988 2989/1/2989 +f 2988/1/2988 3004/1/3004 2989/1/2989 +f 2989/1/2989 3004/1/3004 3006/1/3006 +f 2989/1/2989 3006/1/3006 2990/1/2990 +f 2990/1/2990 3006/1/3006 3007/1/3007 +f 3006/1/3006 3005/1/3005 3007/1/3007 +f 3005/1/3005 3010/1/3010 3007/1/3007 +f 3005/1/3005 3114/1/3114 3010/1/3010 +f 3005/1/3005 3117/1/3117 3114/1/3114 +f 3117/1/3117 3113/1/3113 3114/1/3114 +f 3114/1/3114 3113/1/3113 3112/1/3112 +f 3114/1/3114 3112/1/3112 3110/1/3110 +f 3113/1/3113 3109/1/3109 3112/1/3112 +f 3112/1/3112 3109/1/3109 3108/1/3108 +f 3108/1/3108 3109/1/3109 3107/1/3107 +f 3113/1/3113 4380/1/4380 3109/1/3109 +f 4380/1/4380 4381/1/4381 3109/1/3109 +f 3109/1/3109 4381/1/4381 4382/1/4382 +f 4380/1/4380 3121/1/3121 4381/1/4381 +f 3121/1/3121 4431/1/4431 4381/1/4381 +f 4381/1/4381 4431/1/4431 4432/1/4432 +f 4431/1/4431 4427/1/4427 4432/1/4432 +f 4432/1/4432 4427/1/4427 4429/1/4429 +f 4429/1/4429 4427/1/4427 4425/1/4425 +f 4429/1/4429 4425/1/4425 4430/1/4430 +f 4427/1/4427 4424/1/4424 4425/1/4425 +f 4425/1/4425 4424/1/4424 4421/1/4421 +f 4425/1/4425 4421/1/4421 4426/1/4426 +f 4426/1/4426 4421/1/4421 4420/1/4420 +f 4421/1/4421 4424/1/4424 4419/1/4419 +f 4417/1/4417 4421/1/4421 4419/1/4419 +f 4419/1/4419 2978/1/2978 4417/1/4417 +f 4419/1/4419 4424/1/4424 4423/1/4423 +f 4427/1/4427 4428/1/4428 4424/1/4424 +f 4427/1/4427 4433/1/4433 4428/1/4428 +f 4431/1/4431 4433/1/4433 4427/1/4427 +f 4435/1/4435 4433/1/4433 4431/1/4431 +f 4435/1/4435 2968/1/2968 4433/1/4433 +f 2968/1/2968 4434/1/4434 4433/1/4433 +f 4434/1/4434 2976/1/2976 4433/1/4433 +f 4434/1/4434 2969/1/2969 2976/1/2976 +f 2967/1/2967 2969/1/2969 4434/1/4434 +f 2967/1/2967 2966/1/2966 2969/1/2969 +f 2965/1/2965 2966/1/2966 2967/1/2967 +f 2965/1/2965 2967/1/2967 2968/1/2968 +f 2964/1/2964 2965/1/2965 2968/1/2968 +f 2964/1/2964 2962/1/2962 2965/1/2965 +f 2962/1/2962 2961/1/2961 2965/1/2965 +f 2960/1/2960 2961/1/2961 2962/1/2962 +f 2959/1/2959 2960/1/2960 2962/1/2962 +f 2955/1/2955 2960/1/2960 2959/1/2959 +f 2958/1/2958 2955/1/2955 2959/1/2959 +f 2958/1/2958 2959/1/2959 2963/1/2963 +f 4348/1/4348 2958/1/2958 2963/1/2963 +f 4348/1/4348 2963/1/2963 4349/1/4349 +f 4350/1/4350 4348/1/4348 4349/1/4349 +f 4350/1/4350 4349/1/4349 4377/1/4377 +f 4375/1/4375 4350/1/4350 4377/1/4377 +f 4375/1/4375 4377/1/4377 4376/1/4376 +f 4373/1/4373 4375/1/4375 4376/1/4376 +f 4373/1/4373 4376/1/4376 3001/1/3001 +f 4372/1/4372 4373/1/4373 3001/1/3001 +f 4372/1/4372 3001/1/3001 2998/1/2998 +f 2995/1/2995 4372/1/4372 2998/1/2998 +f 2995/1/2995 2998/1/2998 2992/1/2992 +f 2992/1/2992 2998/1/2998 2997/1/2997 +f 2998/1/2998 3000/1/3000 2997/1/2997 +f 2997/1/2997 3000/1/3000 2999/1/2999 +f 2993/1/2993 2997/1/2997 2999/1/2999 +f 3000/1/3000 3002/1/3002 2999/1/2999 +f 2999/1/2999 3002/1/3002 3003/1/3003 +f 2999/1/2999 3003/1/3003 3004/1/3004 +f 3004/1/3004 3003/1/3003 3005/1/3005 +f 3002/1/3002 3118/1/3118 3003/1/3003 +f 3003/1/3003 3118/1/3118 3117/1/3117 +f 3002/1/3002 3120/1/3120 3118/1/3118 +f 3120/1/3120 3119/1/3119 3118/1/3118 +f 3118/1/3118 3119/1/3119 3113/1/3113 +f 3120/1/3120 4378/1/4378 3119/1/3119 +f 4378/1/4378 4380/1/4380 3119/1/3119 +f 4378/1/4378 4349/1/4349 4380/1/4380 +f 4379/1/4379 4378/1/4378 3120/1/3120 +f 3000/1/3000 4379/1/4379 3120/1/3120 +f 3001/1/3001 4379/1/4379 3000/1/3000 +f 4376/1/4376 4378/1/4378 4379/1/4379 +f 3000/1/3000 3120/1/3120 3002/1/3002 +f 2996/1/2996 4372/1/4372 2995/1/2995 +f 2991/1/2991 2996/1/2996 2995/1/2995 +f 2996/1/2996 4371/1/4371 4372/1/4372 +f 4370/1/4370 4371/1/4371 2996/1/2996 +f 2994/1/2994 4370/1/4370 2996/1/2996 +f 2994/1/2994 4364/1/4364 4370/1/4370 +f 4364/1/4364 4365/1/4365 4370/1/4370 +f 4364/1/4364 4359/1/4359 4365/1/4365 +f 4359/1/4359 4357/1/4357 4365/1/4365 +f 4365/1/4365 4357/1/4357 4371/1/4371 +f 4357/1/4357 4374/1/4374 4371/1/4371 +f 4371/1/4371 4374/1/4374 4373/1/4373 +f 4357/1/4357 4356/1/4356 4374/1/4374 +f 4374/1/4374 4356/1/4356 4375/1/4375 +f 4357/1/4357 4352/1/4352 4356/1/4356 +f 4352/1/4352 4350/1/4350 4356/1/4356 +f 4352/1/4352 4347/1/4347 4350/1/4350 +f 4351/1/4351 4347/1/4347 4352/1/4352 +f 4355/1/4355 4351/1/4351 4352/1/4352 +f 4354/1/4354 4351/1/4351 4355/1/4355 +f 4358/1/4358 4354/1/4354 4355/1/4355 +f 4358/1/4358 4355/1/4355 4359/1/4359 +f 4363/1/4363 4358/1/4358 4359/1/4359 +f 4362/1/4362 4358/1/4358 4363/1/4363 +f 4366/1/4366 4362/1/4362 4363/1/4363 +f 4366/1/4366 4363/1/4363 4364/1/4364 +f 4367/1/4367 4362/1/4362 4366/1/4366 +f 2922/1/2922 4367/1/4367 4366/1/4366 +f 2922/1/2922 4366/1/4366 2925/1/2925 +f 2921/1/2921 4367/1/4367 2922/1/2922 +f 2920/1/2920 2921/1/2921 2922/1/2922 +f 2920/1/2920 2922/1/2922 2923/1/2923 +f 2918/1/2918 2921/1/2921 2920/1/2920 +f 2919/1/2919 2918/1/2918 2920/1/2920 +f 2919/1/2919 2920/1/2920 2924/1/2924 +f 2916/1/2916 2918/1/2918 2919/1/2919 +f 2935/1/2935 2916/1/2916 2919/1/2919 +f 2935/1/2935 2919/1/2919 2933/1/2933 +f 2933/1/2933 2936/1/2936 2935/1/2935 +f 2935/1/2935 2936/1/2936 2940/1/2940 +f 2935/1/2935 2940/1/2940 2941/1/2941 +f 2941/1/2941 2940/1/2940 2944/1/2944 +f 2944/1/2944 2916/1/2916 2941/1/2941 +f 2945/1/2945 2916/1/2916 2944/1/2944 +f 2944/1/2944 2943/1/2943 2945/1/2945 +f 2945/1/2945 2943/1/2943 2947/1/2947 +f 2947/1/2947 2910/1/2910 2945/1/2945 +f 2911/1/2911 2910/1/2910 2947/1/2947 +f 2947/1/2947 2905/1/2905 2911/1/2911 +f 2911/1/2911 2905/1/2905 2908/1/2908 +f 2908/1/2908 2905/1/2905 2902/1/2902 +f 2908/1/2908 2902/1/2902 2900/1/2900 +f 2900/1/2900 2909/1/2909 2908/1/2908 +f 2908/1/2908 2909/1/2909 2910/1/2910 +f 2909/1/2909 2913/1/2913 2910/1/2910 +f 2910/1/2910 2913/1/2913 2915/1/2915 +f 2910/1/2910 2915/1/2915 2916/1/2916 +f 2913/1/2913 4284/1/4284 2915/1/2915 +f 2915/1/2915 4284/1/4284 2917/1/2917 +f 2915/1/2915 2917/1/2917 2918/1/2918 +f 4284/1/4284 4289/1/4289 2917/1/2917 +f 2917/1/2917 4289/1/4289 4322/1/4322 +f 2917/1/2917 4322/1/4322 4323/1/4323 +f 2917/1/2917 4323/1/4323 2921/1/2921 +f 2921/1/2921 4323/1/4323 4369/1/4369 +f 4323/1/4323 4331/1/4331 4369/1/4369 +f 4369/1/4369 4331/1/4331 4368/1/4368 +f 4369/1/4369 4368/1/4368 4367/1/4367 +f 4331/1/4331 4332/1/4332 4368/1/4368 +f 4368/1/4368 4332/1/4332 4361/1/4361 +f 4368/1/4368 4361/1/4361 4362/1/4362 +f 4362/1/4362 4361/1/4361 4360/1/4360 +f 4361/1/4361 4338/1/4338 4360/1/4360 +f 4338/1/4338 4354/1/4354 4360/1/4360 +f 4338/1/4338 4353/1/4353 4354/1/4354 +f 4338/1/4338 4339/1/4339 4353/1/4353 +f 4339/1/4339 4340/1/4340 4353/1/4353 +f 4353/1/4353 4340/1/4340 4346/1/4346 +f 4353/1/4353 4346/1/4346 4351/1/4351 +f 4340/1/4340 4345/1/4345 4346/1/4346 +f 4346/1/4346 4345/1/4345 4347/1/4347 +f 4347/1/4347 4345/1/4345 4348/1/4348 +f 4340/1/4340 4344/1/4344 4345/1/4345 +f 4344/1/4344 2956/1/2956 4345/1/4345 +f 4345/1/4345 2956/1/2956 2958/1/2958 +f 4344/1/4344 2953/1/2953 2956/1/2956 +f 2953/1/2953 2954/1/2954 2956/1/2956 +f 2956/1/2956 2954/1/2954 2955/1/2955 +f 2954/1/2954 2937/1/2937 2955/1/2955 +f 2955/1/2955 2937/1/2937 2957/1/2957 +f 2957/1/2957 2937/1/2937 2938/1/2938 +f 2957/1/2957 2938/1/2938 2960/1/2960 +f 2937/1/2937 2934/1/2934 2938/1/2938 +f 2938/1/2938 2934/1/2934 2932/1/2932 +f 2938/1/2938 2932/1/2932 2961/1/2961 +f 2961/1/2961 2932/1/2932 2931/1/2931 +f 2932/1/2932 2934/1/2934 2930/1/2930 +f 2928/1/2928 2932/1/2932 2930/1/2930 +f 2930/1/2930 2919/1/2919 2928/1/2928 +f 2930/1/2930 2934/1/2934 2933/1/2933 +f 2937/1/2937 2936/1/2936 2934/1/2934 +f 2937/1/2937 2939/1/2939 2936/1/2936 +f 2954/1/2954 2939/1/2939 2937/1/2937 +f 2950/1/2950 2939/1/2939 2954/1/2954 +f 2950/1/2950 2948/1/2948 2939/1/2939 +f 2948/1/2948 2942/1/2942 2939/1/2939 +f 2942/1/2942 2940/1/2940 2939/1/2939 +f 2942/1/2942 2943/1/2943 2940/1/2940 +f 2946/1/2946 2943/1/2943 2942/1/2942 +f 2946/1/2946 2905/1/2905 2943/1/2943 +f 2906/1/2906 2905/1/2905 2946/1/2946 +f 2906/1/2906 2946/1/2946 2948/1/2948 +f 2949/1/2949 2906/1/2906 2948/1/2948 +f 2949/1/2949 2907/1/2907 2906/1/2906 +f 2907/1/2907 2901/1/2901 2906/1/2906 +f 2904/1/2904 2901/1/2901 2907/1/2907 +f 2951/1/2951 2904/1/2904 2907/1/2907 +f 3123/1/3123 2904/1/2904 2951/1/2951 +f 3122/1/3122 3123/1/3123 2951/1/2951 +f 3122/1/3122 2951/1/2951 2952/1/2952 +f 3134/1/3134 3122/1/3122 2952/1/2952 +f 3134/1/3134 2952/1/2952 3138/1/3138 +f 4309/1/4309 3134/1/3134 3138/1/3138 +f 4309/1/4309 3138/1/3138 4312/1/4312 +f 4311/1/4311 4309/1/4309 4312/1/4312 +f 4311/1/4311 4312/1/4312 4343/1/4343 +f 4317/1/4317 4311/1/4311 4343/1/4343 +f 4317/1/4317 4343/1/4343 4328/1/4328 +f 4319/1/4319 4317/1/4317 4328/1/4328 +f 4319/1/4319 4328/1/4328 4325/1/4325 +f 4321/1/4321 4319/1/4319 4325/1/4325 +f 4321/1/4321 4325/1/4325 4324/1/4324 +f 4322/1/4322 4321/1/4321 4324/1/4324 +f 4322/1/4322 4318/1/4318 4321/1/4321 +f 4324/1/4324 4325/1/4325 4327/1/4327 +f 4324/1/4324 4327/1/4327 4326/1/4326 +f 4323/1/4323 4324/1/4324 4326/1/4326 +f 4326/1/4326 4327/1/4327 4330/1/4330 +f 4326/1/4326 4330/1/4330 4331/1/4331 +f 4327/1/4327 4329/1/4329 4330/1/4330 +f 4329/1/4329 4334/1/4334 4330/1/4330 +f 4330/1/4330 4334/1/4334 4333/1/4333 +f 4330/1/4330 4333/1/4333 4332/1/4332 +f 4332/1/4332 4333/1/4333 4338/1/4338 +f 4334/1/4334 4337/1/4337 4333/1/4333 +f 4333/1/4333 4337/1/4337 4339/1/4339 +f 4334/1/4334 4336/1/4336 4337/1/4337 +f 4336/1/4336 4341/1/4341 4337/1/4337 +f 4337/1/4337 4341/1/4341 4340/1/4340 +f 4336/1/4336 4342/1/4342 4341/1/4341 +f 4342/1/4342 4344/1/4344 4341/1/4341 +f 4342/1/4342 3138/1/3138 4344/1/4344 +f 4335/1/4335 4342/1/4342 4336/1/4336 +f 4329/1/4329 4335/1/4335 4336/1/4336 +f 4328/1/4328 4335/1/4335 4329/1/4329 +f 4343/1/4343 4342/1/4342 4335/1/4335 +f 4329/1/4329 4336/1/4336 4334/1/4334 +f 4325/1/4325 4329/1/4329 4327/1/4327 +f 4318/1/4318 4319/1/4319 4321/1/4321 +f 4318/1/4318 4316/1/4316 4319/1/4319 +f 4320/1/4320 4316/1/4316 4318/1/4318 +f 4289/1/4289 4320/1/4320 4318/1/4318 +f 4289/1/4289 4288/1/4288 4320/1/4320 +f 4288/1/4288 4315/1/4315 4320/1/4320 +f 4288/1/4288 4296/1/4296 4315/1/4315 +f 4296/1/4296 4313/1/4313 4315/1/4315 +f 4315/1/4315 4313/1/4313 4316/1/4316 +f 4313/1/4313 4314/1/4314 4316/1/4316 +f 4316/1/4316 4314/1/4314 4317/1/4317 +f 4313/1/4313 4310/1/4310 4314/1/4314 +f 4314/1/4314 4310/1/4310 4311/1/4311 +f 4313/1/4313 4308/1/4308 4310/1/4310 +f 4308/1/4308 4309/1/4309 4310/1/4310 +f 4308/1/4308 4306/1/4306 4309/1/4309 +f 4298/1/4298 4306/1/4306 4308/1/4308 +f 4295/1/4295 4298/1/4298 4308/1/4308 +f 4294/1/4294 4298/1/4298 4295/1/4295 +f 4292/1/4292 4294/1/4294 4295/1/4295 +f 4292/1/4292 4295/1/4295 4296/1/4296 +f 4287/1/4287 4292/1/4292 4296/1/4296 +f 4286/1/4286 4292/1/4292 4287/1/4287 +f 4285/1/4285 4286/1/4286 4287/1/4287 +f 4285/1/4285 4287/1/4287 4288/1/4288 +f 4282/1/4282 4286/1/4286 4285/1/4285 +f 4283/1/4283 4282/1/4282 4285/1/4285 +f 4283/1/4283 4285/1/4285 4284/1/4284 +f 4281/1/4281 4282/1/4282 4283/1/4283 +f 2912/1/2912 4281/1/4281 4283/1/4283 +f 2912/1/2912 4283/1/4283 2913/1/2913 +f 2914/1/2914 4281/1/4281 2912/1/2912 +f 2888/1/2888 2914/1/2914 2912/1/2912 +f 2888/1/2888 2912/1/2912 2909/1/2909 +f 2891/1/2891 2914/1/2914 2888/1/2888 +f 2887/1/2887 2891/1/2891 2888/1/2888 +f 2887/1/2887 2888/1/2888 2889/1/2889 +f 2889/1/2889 2892/1/2892 2887/1/2887 +f 2887/1/2887 2892/1/2892 2893/1/2893 +f 2887/1/2887 2893/1/2893 2890/1/2890 +f 2890/1/2890 2893/1/2893 3139/1/3139 +f 3139/1/3139 2891/1/2891 2890/1/2890 +f 4155/1/4155 2891/1/2891 3139/1/3139 +f 3139/1/3139 3132/1/3132 4155/1/4155 +f 4155/1/4155 3132/1/3132 4156/1/4156 +f 4156/1/4156 4152/1/4152 4155/1/4155 +f 4157/1/4157 4152/1/4152 4156/1/4156 +f 4156/1/4156 4158/1/4158 4157/1/4157 +f 4157/1/4157 4158/1/4158 4151/1/4151 +f 4151/1/4151 4158/1/4158 4148/1/4148 +f 4151/1/4151 4148/1/4148 4149/1/4149 +f 4149/1/4149 4150/1/4150 4151/1/4151 +f 4151/1/4151 4150/1/4150 4152/1/4152 +f 4150/1/4150 4153/1/4153 4152/1/4152 +f 4152/1/4152 4153/1/4153 4154/1/4154 +f 4152/1/4152 4154/1/4154 2891/1/2891 +f 4153/1/4153 2693/1/2693 4154/1/4154 +f 4154/1/4154 2693/1/2693 4280/1/4280 +f 4154/1/4154 4280/1/4280 2914/1/2914 +f 2693/1/2693 2694/1/2694 4280/1/4280 +f 4280/1/4280 2694/1/2694 2698/1/2698 +f 4280/1/4280 2698/1/2698 4277/1/4277 +f 4280/1/4280 4277/1/4277 4281/1/4281 +f 4281/1/4281 4277/1/4277 4274/1/4274 +f 4277/1/4277 4271/1/4271 4274/1/4274 +f 4274/1/4274 4271/1/4271 4275/1/4275 +f 4274/1/4274 4275/1/4275 4282/1/4282 +f 4271/1/4271 4273/1/4273 4275/1/4275 +f 4275/1/4275 4273/1/4273 4290/1/4290 +f 4275/1/4275 4290/1/4290 4286/1/4286 +f 4286/1/4286 4290/1/4290 4291/1/4291 +f 4290/1/4290 4293/1/4293 4291/1/4291 +f 4293/1/4293 4294/1/4294 4291/1/4291 +f 4293/1/4293 4297/1/4297 4294/1/4294 +f 4293/1/4293 4299/1/4299 4297/1/4297 +f 4299/1/4299 4303/1/4303 4297/1/4297 +f 4297/1/4297 4303/1/4303 4307/1/4307 +f 4297/1/4297 4307/1/4307 4298/1/4298 +f 4303/1/4303 3133/1/3133 4307/1/4307 +f 4307/1/4307 3133/1/3133 4306/1/4306 +f 4306/1/4306 3133/1/3133 3134/1/3134 +f 4303/1/4303 2721/1/2721 3133/1/3133 +f 2721/1/2721 3124/1/3124 3133/1/3133 +f 3133/1/3133 3124/1/3124 3122/1/3122 +f 2721/1/2721 3126/1/3126 3124/1/3124 +f 3126/1/3126 3125/1/3125 3124/1/3124 +f 3124/1/3124 3125/1/3125 3123/1/3123 +f 3125/1/3125 2897/1/2897 3123/1/3123 +f 3123/1/3123 2897/1/2897 2903/1/2903 +f 2903/1/2903 2897/1/2897 2898/1/2898 +f 2903/1/2903 2898/1/2898 2904/1/2904 +f 2897/1/2897 2895/1/2895 2898/1/2898 +f 2898/1/2898 2895/1/2895 2899/1/2899 +f 2898/1/2898 2899/1/2899 2901/1/2901 +f 2901/1/2901 2899/1/2899 2902/1/2902 +f 2899/1/2899 2895/1/2895 2894/1/2894 +f 2900/1/2900 2899/1/2899 2894/1/2894 +f 2894/1/2894 2888/1/2888 2900/1/2900 +f 2894/1/2894 2895/1/2895 2889/1/2889 +f 2897/1/2897 2892/1/2892 2895/1/2895 +f 2897/1/2897 2896/1/2896 2892/1/2892 +f 3125/1/3125 2896/1/2896 2897/1/2897 +f 3127/1/3127 2896/1/2896 3125/1/3125 +f 3127/1/3127 3129/1/3129 2896/1/2896 +f 3129/1/3129 3128/1/3128 2896/1/2896 +f 3128/1/3128 2893/1/2893 2896/1/2896 +f 3128/1/3128 3132/1/3132 2893/1/2893 +f 3131/1/3131 3132/1/3132 3128/1/3128 +f 3131/1/3131 4158/1/4158 3132/1/3132 +f 4159/1/4159 4158/1/4158 3131/1/3131 +f 4159/1/4159 3131/1/3131 3129/1/3129 +f 3130/1/3130 4159/1/4159 3129/1/3129 +f 3130/1/3130 4160/1/4160 4159/1/4159 +f 4160/1/4160 4147/1/4147 4159/1/4159 +f 4146/1/4146 4147/1/4147 4160/1/4160 +f 4161/1/4161 4146/1/4146 4160/1/4160 +f 4145/1/4145 4146/1/4146 4161/1/4161 +f 3136/1/3136 4145/1/4145 4161/1/4161 +f 3136/1/3136 4161/1/4161 3135/1/3135 +f 2723/1/2723 3136/1/3136 3135/1/3135 +f 2723/1/2723 3135/1/3135 2720/1/2720 +f 2711/1/2711 2723/1/2723 2720/1/2720 +f 2711/1/2711 2720/1/2720 2717/1/2717 +f 2713/1/2713 2711/1/2711 2717/1/2717 +f 2713/1/2713 2717/1/2717 2715/1/2715 +f 2714/1/2714 2713/1/2713 2715/1/2715 +f 2714/1/2714 2715/1/2715 2716/1/2716 +f 2702/1/2702 2714/1/2714 2716/1/2716 +f 2702/1/2702 2716/1/2716 2704/1/2704 +f 2703/1/2703 2702/1/2702 2704/1/2704 +f 2703/1/2703 2704/1/2704 4279/1/4279 +f 2698/1/2698 2703/1/2703 4279/1/4279 +f 2698/1/2698 2697/1/2697 2703/1/2703 +f 4279/1/4279 2704/1/2704 4278/1/4278 +f 4279/1/4279 4278/1/4278 4276/1/4276 +f 4277/1/4277 4279/1/4279 4276/1/4276 +f 4276/1/4276 4278/1/4278 4272/1/4272 +f 4276/1/4276 4272/1/4272 4271/1/4271 +f 4278/1/4278 4305/1/4305 4272/1/4272 +f 4305/1/4305 4301/1/4301 4272/1/4272 +f 4272/1/4272 4301/1/4301 4300/1/4300 +f 4272/1/4272 4300/1/4300 4273/1/4273 +f 4273/1/4273 4300/1/4300 4293/1/4293 +f 4301/1/4301 4302/1/4302 4300/1/4300 +f 4300/1/4300 4302/1/4302 4299/1/4299 +f 4301/1/4301 4304/1/4304 4302/1/4302 +f 4304/1/4304 2722/1/2722 4302/1/4302 +f 4302/1/4302 2722/1/2722 4303/1/4303 +f 4304/1/4304 2718/1/2718 2722/1/2722 +f 2718/1/2718 2721/1/2721 2722/1/2722 +f 2718/1/2718 2720/1/2720 2721/1/2721 +f 2719/1/2719 2718/1/2718 4304/1/4304 +f 4305/1/4305 2719/1/2719 4304/1/4304 +f 2716/1/2716 2719/1/2719 4305/1/4305 +f 2715/1/2715 2718/1/2718 2719/1/2719 +f 4305/1/4305 4304/1/4304 4301/1/4301 +f 2704/1/2704 4305/1/4305 4278/1/4278 +f 2697/1/2697 2702/1/2702 2703/1/2703 +f 2697/1/2697 2701/1/2701 2702/1/2702 +f 2696/1/2696 2701/1/2701 2697/1/2697 +f 2694/1/2694 2696/1/2696 2697/1/2697 +f 2694/1/2694 2695/1/2695 2696/1/2696 +f 2695/1/2695 2700/1/2700 2696/1/2696 +f 2695/1/2695 2699/1/2699 2700/1/2700 +f 2699/1/2699 2708/1/2708 2700/1/2700 +f 2700/1/2700 2708/1/2708 2701/1/2701 +f 2708/1/2708 2709/1/2709 2701/1/2701 +f 2701/1/2701 2709/1/2709 2714/1/2714 +f 2708/1/2708 2710/1/2710 2709/1/2709 +f 2709/1/2709 2710/1/2710 2713/1/2713 +f 2708/1/2708 2707/1/2707 2710/1/2710 +f 2707/1/2707 2711/1/2711 2710/1/2710 +f 2707/1/2707 2712/1/2712 2711/1/2711 +f 2706/1/2706 2712/1/2712 2707/1/2707 +f 2705/1/2705 2706/1/2706 2707/1/2707 +f 2681/1/2681 2706/1/2706 2705/1/2705 +f 2686/1/2686 2681/1/2681 2705/1/2705 +f 2686/1/2686 2705/1/2705 2699/1/2699 +f 2687/1/2687 2686/1/2686 2699/1/2699 +f 2685/1/2685 2686/1/2686 2687/1/2687 +f 2688/1/2688 2685/1/2685 2687/1/2687 +f 2688/1/2688 2687/1/2687 2695/1/2695 +f 2684/1/2684 2685/1/2685 2688/1/2688 +f 2690/1/2690 2684/1/2684 2688/1/2688 +f 2690/1/2690 2688/1/2688 2693/1/2693 +f 2689/1/2689 2684/1/2684 2690/1/2690 +f 2692/1/2692 2689/1/2689 2690/1/2690 +f 2692/1/2692 2690/1/2690 4153/1/4153 +f 2691/1/2691 2689/1/2689 2692/1/2692 +f 4132/1/4132 2691/1/2691 2692/1/2692 +f 4132/1/4132 2692/1/2692 4150/1/4150 +f 4125/1/4125 2691/1/2691 4132/1/4132 +f 4131/1/4131 4125/1/4125 4132/1/4132 +f 4131/1/4131 4132/1/4132 4140/1/4140 +f 4140/1/4140 4134/1/4134 4131/1/4131 +f 4131/1/4131 4134/1/4134 4129/1/4129 +f 4131/1/4131 4129/1/4129 4130/1/4130 +f 4130/1/4130 4129/1/4129 4126/1/4126 +f 4126/1/4126 4125/1/4125 4130/1/4130 +f 4123/1/4123 4125/1/4125 4126/1/4126 +f 4126/1/4126 4124/1/4124 4123/1/4123 +f 4123/1/4123 4124/1/4124 4122/1/4122 +f 4122/1/4122 4119/1/4119 4123/1/4123 +f 4120/1/4120 4119/1/4119 4122/1/4122 +f 4122/1/4122 4121/1/4121 4120/1/4120 +f 4120/1/4120 4121/1/4121 4118/1/4118 +f 4118/1/4118 4121/1/4121 4115/1/4115 +f 4118/1/4118 4115/1/4115 4116/1/4116 +f 4116/1/4116 4117/1/4117 4118/1/4118 +f 4118/1/4118 4117/1/4117 4119/1/4119 +f 4117/1/4117 2725/1/2725 4119/1/4119 +f 4119/1/4119 2725/1/2725 2724/1/2724 +f 4119/1/4119 2724/1/2724 4125/1/4125 +f 2725/1/2725 2650/1/2650 2724/1/2724 +f 2724/1/2724 2650/1/2650 2651/1/2651 +f 2724/1/2724 2651/1/2651 2691/1/2691 +f 2650/1/2650 2645/1/2645 2651/1/2651 +f 2651/1/2651 2645/1/2645 2649/1/2649 +f 2651/1/2651 2649/1/2649 2655/1/2655 +f 2651/1/2651 2655/1/2655 2689/1/2689 +f 2649/1/2649 2654/1/2654 2655/1/2655 +f 2655/1/2655 2654/1/2654 2661/1/2661 +f 2655/1/2655 2661/1/2661 2682/1/2682 +f 2655/1/2655 2682/1/2682 2684/1/2684 +f 2684/1/2684 2682/1/2682 2683/1/2683 +f 2682/1/2682 2678/1/2678 2683/1/2683 +f 2683/1/2683 2678/1/2678 2679/1/2679 +f 2683/1/2683 2679/1/2679 2685/1/2685 +f 2685/1/2685 2679/1/2679 2680/1/2680 +f 2679/1/2679 2677/1/2677 2680/1/2680 +f 2677/1/2677 2681/1/2681 2680/1/2680 +f 2677/1/2677 2674/1/2674 2681/1/2681 +f 2677/1/2677 2672/1/2672 2674/1/2674 +f 2672/1/2672 2671/1/2671 2674/1/2674 +f 2674/1/2674 2671/1/2671 2675/1/2675 +f 2674/1/2674 2675/1/2675 2706/1/2706 +f 2671/1/2671 2676/1/2676 2675/1/2675 +f 2675/1/2675 2676/1/2676 2712/1/2712 +f 2712/1/2712 2676/1/2676 2723/1/2723 +f 2671/1/2671 2673/1/2673 2676/1/2676 +f 2673/1/2673 3137/1/3137 2676/1/2676 +f 2676/1/2676 3137/1/3137 3136/1/3136 +f 2673/1/2673 4092/1/4092 3137/1/3137 +f 4092/1/4092 4137/1/4137 3137/1/3137 +f 3137/1/3137 4137/1/4137 4145/1/4145 +f 4137/1/4137 4138/1/4138 4145/1/4145 +f 4145/1/4145 4138/1/4138 4144/1/4144 +f 4144/1/4144 4138/1/4138 4142/1/4142 +f 4144/1/4144 4142/1/4142 4146/1/4146 +f 4138/1/4138 4139/1/4139 4142/1/4142 +f 4142/1/4142 4139/1/4139 4143/1/4143 +f 4142/1/4142 4143/1/4143 4147/1/4147 +f 4147/1/4147 4143/1/4143 4148/1/4148 +f 4143/1/4143 4139/1/4139 4141/1/4141 +f 4149/1/4149 4143/1/4143 4141/1/4141 +f 4141/1/4141 4132/1/4132 4149/1/4149 +f 4141/1/4141 4139/1/4139 4140/1/4140 +f 4138/1/4138 4134/1/4134 4139/1/4139 +f 4138/1/4138 4133/1/4133 4134/1/4134 +f 4137/1/4137 4133/1/4133 4138/1/4138 +f 4136/1/4136 4133/1/4133 4137/1/4137 +f 4136/1/4136 4135/1/4135 4133/1/4133 +f 4135/1/4135 4128/1/4128 4133/1/4133 +f 4128/1/4128 4129/1/4129 4133/1/4133 +f 4128/1/4128 4124/1/4124 4129/1/4129 +f 4127/1/4127 4124/1/4124 4128/1/4128 +f 4127/1/4127 4121/1/4121 4124/1/4124 +f 4162/1/4162 4121/1/4121 4127/1/4127 +f 4162/1/4162 4127/1/4127 4135/1/4135 +f 4094/1/4094 4162/1/4162 4135/1/4135 +f 4094/1/4094 4096/1/4096 4162/1/4162 +f 4096/1/4096 4114/1/4114 4162/1/4162 +f 4095/1/4095 4114/1/4114 4096/1/4096 +f 4093/1/4093 4095/1/4095 4096/1/4096 +f 4097/1/4097 4095/1/4095 4093/1/4093 +f 4090/1/4090 4097/1/4097 4093/1/4093 +f 4090/1/4090 4093/1/4093 4091/1/4091 +f 2871/1/2871 4090/1/4090 4091/1/4091 +f 2871/1/2871 4091/1/4091 2876/1/2876 +f 2872/1/2872 2871/1/2871 2876/1/2876 +f 2872/1/2872 2876/1/2876 2875/1/2875 +f 2874/1/2874 2872/1/2872 2875/1/2875 +f 2874/1/2874 2875/1/2875 2666/1/2666 +f 2657/1/2657 2874/1/2874 2666/1/2666 +f 2657/1/2657 2666/1/2666 2658/1/2658 +f 2652/1/2652 2657/1/2657 2658/1/2658 +f 2652/1/2652 2658/1/2658 2656/1/2656 +f 2653/1/2653 2652/1/2652 2656/1/2656 +f 2653/1/2653 2656/1/2656 2654/1/2654 +f 2654/1/2654 2656/1/2656 2659/1/2659 +f 2656/1/2656 2660/1/2660 2659/1/2659 +f 2659/1/2659 2660/1/2660 2662/1/2662 +f 2661/1/2661 2659/1/2659 2662/1/2662 +f 2660/1/2660 2664/1/2664 2662/1/2662 +f 2662/1/2662 2664/1/2664 2670/1/2670 +f 2662/1/2662 2670/1/2670 2678/1/2678 +f 2678/1/2678 2670/1/2670 2677/1/2677 +f 2664/1/2664 2669/1/2669 2670/1/2670 +f 2670/1/2670 2669/1/2669 2672/1/2672 +f 2664/1/2664 2665/1/2665 2669/1/2669 +f 2665/1/2665 2668/1/2668 2669/1/2669 +f 2669/1/2669 2668/1/2668 2671/1/2671 +f 2665/1/2665 2667/1/2667 2668/1/2668 +f 2667/1/2667 2673/1/2673 2668/1/2668 +f 2667/1/2667 2876/1/2876 2673/1/2673 +f 2663/1/2663 2667/1/2667 2665/1/2665 +f 2660/1/2660 2663/1/2663 2665/1/2665 +f 2658/1/2658 2663/1/2663 2660/1/2660 +f 2666/1/2666 2667/1/2667 2663/1/2663 +f 2660/1/2660 2665/1/2665 2664/1/2664 +f 2648/1/2648 2652/1/2652 2653/1/2653 +f 2649/1/2649 2648/1/2648 2653/1/2653 +f 2648/1/2648 2647/1/2647 2652/1/2652 +f 2646/1/2646 2647/1/2647 2648/1/2648 +f 2645/1/2645 2646/1/2646 2648/1/2648 +f 2645/1/2645 2643/1/2643 2646/1/2646 +f 2643/1/2643 2642/1/2642 2646/1/2646 +f 2643/1/2643 2637/1/2637 2642/1/2642 +f 2637/1/2637 2635/1/2635 2642/1/2642 +f 2642/1/2642 2635/1/2635 2647/1/2647 +f 2635/1/2635 2877/1/2877 2647/1/2647 +f 2647/1/2647 2877/1/2877 2657/1/2657 +f 2635/1/2635 2873/1/2873 2877/1/2877 +f 2877/1/2877 2873/1/2873 2874/1/2874 +f 2635/1/2635 2634/1/2634 2873/1/2873 +f 2634/1/2634 2872/1/2872 2873/1/2873 +f 2634/1/2634 2870/1/2870 2872/1/2872 +f 2633/1/2633 2870/1/2870 2634/1/2634 +f 2632/1/2632 2633/1/2633 2634/1/2634 +f 2638/1/2638 2633/1/2633 2632/1/2632 +f 2636/1/2636 2638/1/2638 2632/1/2632 +f 2636/1/2636 2632/1/2632 2637/1/2637 +f 2641/1/2641 2636/1/2636 2637/1/2637 +f 2640/1/2640 2636/1/2636 2641/1/2641 +f 2644/1/2644 2640/1/2640 2641/1/2641 +f 2644/1/2644 2641/1/2641 2643/1/2643 +f 2844/1/2844 2640/1/2640 2644/1/2644 +f 2726/1/2726 2844/1/2844 2644/1/2644 +f 2726/1/2726 2644/1/2644 2650/1/2650 +f 2730/1/2730 2844/1/2844 2726/1/2726 +f 2727/1/2727 2730/1/2730 2726/1/2726 +f 2727/1/2727 2726/1/2726 2725/1/2725 +f 2729/1/2729 2730/1/2730 2727/1/2727 +f 2728/1/2728 2729/1/2729 2727/1/2727 +f 2728/1/2728 2727/1/2727 4117/1/4117 +f 2731/1/2731 2729/1/2729 2728/1/2728 +f 4110/1/4110 2731/1/2731 2728/1/2728 +f 4110/1/4110 2728/1/2728 4109/1/4109 +f 4109/1/4109 4106/1/4106 4110/1/4110 +f 4110/1/4110 4106/1/4106 4105/1/4105 +f 4110/1/4110 4105/1/4105 4163/1/4163 +f 4163/1/4163 4105/1/4105 2843/1/2843 +f 2843/1/2843 2731/1/2731 4163/1/4163 +f 2840/1/2840 2731/1/2731 2843/1/2843 +f 2843/1/2843 2842/1/2842 2840/1/2840 +f 2840/1/2840 2842/1/2842 2841/1/2841 +f 2841/1/2841 2733/1/2733 2840/1/2840 +f 2839/1/2839 2733/1/2733 2841/1/2841 +f 2841/1/2841 2826/1/2826 2839/1/2839 +f 2839/1/2839 2826/1/2826 2742/1/2742 +f 2742/1/2742 2826/1/2826 2824/1/2824 +f 2742/1/2742 2824/1/2824 2741/1/2741 +f 2741/1/2741 2737/1/2737 2742/1/2742 +f 2742/1/2742 2737/1/2737 2733/1/2733 +f 2737/1/2737 2734/1/2734 2733/1/2733 +f 2733/1/2733 2734/1/2734 2732/1/2732 +f 2733/1/2733 2732/1/2732 2731/1/2731 +f 2734/1/2734 2735/1/2735 2732/1/2732 +f 2732/1/2732 2735/1/2735 2736/1/2736 +f 2732/1/2732 2736/1/2736 2729/1/2729 +f 2735/1/2735 2885/1/2885 2736/1/2736 +f 2736/1/2736 2885/1/2885 2884/1/2884 +f 2736/1/2736 2884/1/2884 2847/1/2847 +f 2736/1/2736 2847/1/2847 2730/1/2730 +f 2730/1/2730 2847/1/2847 2846/1/2846 +f 2847/1/2847 2848/1/2848 2846/1/2846 +f 2846/1/2846 2848/1/2848 2845/1/2845 +f 2846/1/2846 2845/1/2845 2844/1/2844 +f 2848/1/2848 2849/1/2849 2845/1/2845 +f 2845/1/2845 2849/1/2849 2850/1/2850 +f 2845/1/2845 2850/1/2850 2640/1/2640 +f 2640/1/2640 2850/1/2850 2639/1/2639 +f 2850/1/2850 2851/1/2851 2639/1/2639 +f 2851/1/2851 2638/1/2638 2639/1/2639 +f 2851/1/2851 2861/1/2861 2638/1/2638 +f 2851/1/2851 2858/1/2858 2861/1/2861 +f 2858/1/2858 2860/1/2860 2861/1/2861 +f 2861/1/2861 2860/1/2860 2867/1/2867 +f 2861/1/2861 2867/1/2867 2633/1/2633 +f 2860/1/2860 2869/1/2869 2867/1/2867 +f 2867/1/2867 2869/1/2869 2870/1/2870 +f 2870/1/2870 2869/1/2869 2871/1/2871 +f 2860/1/2860 2868/1/2868 2869/1/2869 +f 2868/1/2868 4089/1/4089 2869/1/2869 +f 2869/1/2869 4089/1/4089 4090/1/4090 +f 2868/1/2868 4086/1/4086 4089/1/4089 +f 4086/1/4086 4100/1/4100 4089/1/4089 +f 4089/1/4089 4100/1/4100 4097/1/4097 +f 4100/1/4100 4098/1/4098 4097/1/4097 +f 4097/1/4097 4098/1/4098 4099/1/4099 +f 4099/1/4099 4098/1/4098 4111/1/4111 +f 4099/1/4099 4111/1/4111 4095/1/4095 +f 4098/1/4098 4108/1/4108 4111/1/4111 +f 4111/1/4111 4108/1/4108 4112/1/4112 +f 4111/1/4111 4112/1/4112 4114/1/4114 +f 4114/1/4114 4112/1/4112 4115/1/4115 +f 4112/1/4112 4108/1/4108 4113/1/4113 +f 4116/1/4116 4112/1/4112 4113/1/4113 +f 4113/1/4113 2728/1/2728 4116/1/4116 +f 4113/1/4113 4108/1/4108 4109/1/4109 +f 4098/1/4098 4106/1/4106 4108/1/4108 +f 4098/1/4098 4102/1/4102 4106/1/4106 +f 4100/1/4100 4102/1/4102 4098/1/4098 +f 4101/1/4101 4102/1/4102 4100/1/4100 +f 4101/1/4101 4103/1/4103 4102/1/4102 +f 4103/1/4103 4104/1/4104 4102/1/4102 +f 4104/1/4104 4105/1/4105 4102/1/4102 +f 4104/1/4104 2842/1/2842 4105/1/4105 +f 4107/1/4107 2842/1/2842 4104/1/4104 +f 4107/1/4107 2826/1/2826 2842/1/2842 +f 2829/1/2829 2826/1/2826 4107/1/4107 +f 2829/1/2829 4107/1/4107 4103/1/4103 +f 2833/1/2833 2829/1/2829 4103/1/4103 +f 2833/1/2833 2828/1/2828 2829/1/2829 +f 2828/1/2828 2825/1/2825 2829/1/2829 +f 2827/1/2827 2825/1/2825 2828/1/2828 +f 2830/1/2830 2827/1/2827 2828/1/2828 +f 2832/1/2832 2827/1/2827 2830/1/2830 +f 2834/1/2834 2832/1/2832 2830/1/2830 +f 2834/1/2834 2830/1/2830 2835/1/2835 +f 4082/1/4082 2834/1/2834 2835/1/2835 +f 4082/1/4082 2835/1/2835 4085/1/4085 +f 4083/1/4083 4082/1/4082 4085/1/4085 +f 4083/1/4083 4085/1/4085 4087/1/4087 +f 4164/1/4164 4083/1/4083 4087/1/4087 +f 4164/1/4164 4087/1/4087 4088/1/4088 +f 2880/1/2880 4164/1/4164 4088/1/4088 +f 2880/1/2880 4088/1/4088 2866/1/2866 +f 2879/1/2879 2880/1/2880 2866/1/2866 +f 2879/1/2879 2866/1/2866 2878/1/2878 +f 2881/1/2881 2879/1/2879 2878/1/2878 +f 2881/1/2881 2878/1/2878 2883/1/2883 +f 2884/1/2884 2881/1/2881 2883/1/2883 +f 2884/1/2884 2882/1/2882 2881/1/2881 +f 2883/1/2883 2878/1/2878 2855/1/2855 +f 2883/1/2883 2855/1/2855 2854/1/2854 +f 2847/1/2847 2883/1/2883 2854/1/2854 +f 2854/1/2854 2855/1/2855 2852/1/2852 +f 2854/1/2854 2852/1/2852 2848/1/2848 +f 2855/1/2855 2856/1/2856 2852/1/2852 +f 2856/1/2856 2857/1/2857 2852/1/2852 +f 2852/1/2852 2857/1/2857 2853/1/2853 +f 2852/1/2852 2853/1/2853 2849/1/2849 +f 2849/1/2849 2853/1/2853 2851/1/2851 +f 2857/1/2857 2859/1/2859 2853/1/2853 +f 2853/1/2853 2859/1/2859 2858/1/2858 +f 2857/1/2857 2862/1/2862 2859/1/2859 +f 2862/1/2862 2863/1/2863 2859/1/2859 +f 2859/1/2859 2863/1/2863 2860/1/2860 +f 2862/1/2862 2865/1/2865 2863/1/2863 +f 2865/1/2865 2868/1/2868 2863/1/2863 +f 2865/1/2865 4085/1/4085 2868/1/2868 +f 2864/1/2864 2865/1/2865 2862/1/2862 +f 2856/1/2856 2864/1/2864 2862/1/2862 +f 2866/1/2866 2864/1/2864 2856/1/2856 +f 4088/1/4088 2865/1/2865 2864/1/2864 +f 2856/1/2856 2862/1/2862 2857/1/2857 +f 2878/1/2878 2856/1/2856 2855/1/2855 +f 2882/1/2882 2879/1/2879 2881/1/2881 +f 2882/1/2882 4242/1/4242 2879/1/2879 +f 2886/1/2886 4242/1/4242 2882/1/2882 +f 2885/1/2885 2886/1/2886 2882/1/2882 +f 2885/1/2885 4064/1/4064 2886/1/2886 +f 4064/1/4064 4067/1/4067 2886/1/2886 +f 4064/1/4064 4066/1/4066 4067/1/4067 +f 4066/1/4066 4069/1/4069 4067/1/4067 +f 4067/1/4067 4069/1/4069 4242/1/4242 +f 4069/1/4069 4166/1/4166 4242/1/4242 +f 4242/1/4242 4166/1/4166 2880/1/2880 +f 4069/1/4069 4165/1/4165 4166/1/4166 +f 4166/1/4166 4165/1/4165 4164/1/4164 +f 4069/1/4069 4076/1/4076 4165/1/4165 +f 4076/1/4076 4083/1/4083 4165/1/4165 +f 4076/1/4076 4077/1/4077 4083/1/4083 +f 4075/1/4075 4077/1/4077 4076/1/4076 +f 4068/1/4068 4075/1/4075 4076/1/4076 +f 4071/1/4071 4075/1/4075 4068/1/4068 +f 4065/1/4065 4071/1/4071 4068/1/4068 +f 4065/1/4065 4068/1/4068 4066/1/4066 +f 4063/1/4063 4065/1/4065 4066/1/4066 +f 4061/1/4061 4065/1/4065 4063/1/4063 +f 4062/1/4062 4061/1/4061 4063/1/4063 +f 4062/1/4062 4063/1/4063 4064/1/4064 +f 4058/1/4058 4061/1/4061 4062/1/4062 +f 2739/1/2739 4058/1/4058 4062/1/4062 +f 2739/1/2739 4062/1/4062 2735/1/2735 +f 2744/1/2744 4058/1/4058 2739/1/2739 +f 2738/1/2738 2744/1/2744 2739/1/2739 +f 2738/1/2738 2739/1/2739 2734/1/2734 +f 2743/1/2743 2744/1/2744 2738/1/2738 +f 2740/1/2740 2743/1/2743 2738/1/2738 +f 2740/1/2740 2738/1/2738 2737/1/2737 +f 2747/1/2747 2743/1/2743 2740/1/2740 +f 2814/1/2814 2747/1/2747 2740/1/2740 +f 2814/1/2814 2740/1/2740 2816/1/2816 +f 2816/1/2816 2817/1/2817 2814/1/2814 +f 2814/1/2814 2817/1/2817 2815/1/2815 +f 2814/1/2814 2815/1/2815 2813/1/2813 +f 2813/1/2813 2815/1/2815 2812/1/2812 +f 2812/1/2812 2747/1/2747 2813/1/2813 +f 2811/1/2811 2747/1/2747 2812/1/2812 +f 2812/1/2812 2809/1/2809 2811/1/2811 +f 2811/1/2811 2809/1/2809 2808/1/2808 +f 2808/1/2808 2748/1/2748 2811/1/2811 +f 2810/1/2810 2748/1/2748 2808/1/2808 +f 2808/1/2808 2806/1/2806 2810/1/2810 +f 2810/1/2810 2806/1/2806 2753/1/2753 +f 2753/1/2753 2806/1/2806 2805/1/2805 +f 2753/1/2753 2805/1/2805 2752/1/2752 +f 2752/1/2752 2750/1/2750 2753/1/2753 +f 2753/1/2753 2750/1/2750 2748/1/2748 +f 2750/1/2750 2749/1/2749 2748/1/2748 +f 2748/1/2748 2749/1/2749 2745/1/2745 +f 2748/1/2748 2745/1/2745 2747/1/2747 +f 2749/1/2749 4056/1/4056 2745/1/2745 +f 2745/1/2745 4056/1/4056 2746/1/2746 +f 2745/1/2745 2746/1/2746 2743/1/2743 +f 4056/1/4056 4057/1/4057 2746/1/2746 +f 2746/1/2746 4057/1/4057 4054/1/4054 +f 2746/1/2746 4054/1/4054 4055/1/4055 +f 2746/1/2746 4055/1/4055 2744/1/2744 +f 4054/1/4054 4217/1/4217 4055/1/4055 +f 4055/1/4055 4217/1/4217 4230/1/4230 +f 4055/1/4055 4230/1/4230 4059/1/4059 +f 4055/1/4055 4059/1/4059 4058/1/4058 +f 4058/1/4058 4059/1/4059 4060/1/4060 +f 4059/1/4059 4229/1/4229 4060/1/4060 +f 4060/1/4060 4229/1/4229 4072/1/4072 +f 4060/1/4060 4072/1/4072 4061/1/4061 +f 4061/1/4061 4072/1/4072 4070/1/4070 +f 4072/1/4072 4073/1/4073 4070/1/4070 +f 4073/1/4073 4071/1/4071 4070/1/4070 +f 4073/1/4073 4074/1/4074 4071/1/4071 +f 4073/1/4073 4079/1/4079 4074/1/4074 +f 4079/1/4079 4080/1/4080 4074/1/4074 +f 4074/1/4074 4080/1/4080 4078/1/4078 +f 4074/1/4074 4078/1/4078 4075/1/4075 +f 4080/1/4080 4081/1/4081 4078/1/4078 +f 4078/1/4078 4081/1/4081 4077/1/4077 +f 4077/1/4077 4081/1/4081 4082/1/4082 +f 4080/1/4080 4084/1/4084 4081/1/4081 +f 4084/1/4084 2836/1/2836 4081/1/4081 +f 4081/1/4081 2836/1/2836 2834/1/2834 +f 4084/1/4084 2800/1/2800 2836/1/2836 +f 2800/1/2800 2837/1/2837 2836/1/2836 +f 2836/1/2836 2837/1/2837 2832/1/2832 +f 2837/1/2837 2820/1/2820 2832/1/2832 +f 2832/1/2832 2820/1/2820 2831/1/2831 +f 2831/1/2831 2820/1/2820 2822/1/2822 +f 2831/1/2831 2822/1/2822 2827/1/2827 +f 2820/1/2820 2819/1/2819 2822/1/2822 +f 2822/1/2822 2819/1/2819 2823/1/2823 +f 2822/1/2822 2823/1/2823 2825/1/2825 +f 2825/1/2825 2823/1/2823 2824/1/2824 +f 2823/1/2823 2819/1/2819 2818/1/2818 +f 2741/1/2741 2823/1/2823 2818/1/2818 +f 2818/1/2818 2740/1/2740 2741/1/2741 +f 2818/1/2818 2819/1/2819 2816/1/2816 +f 2820/1/2820 2817/1/2817 2819/1/2819 +f 2820/1/2820 2821/1/2821 2817/1/2817 +f 2837/1/2837 2821/1/2821 2820/1/2820 +f 2801/1/2801 2821/1/2821 2837/1/2837 +f 2801/1/2801 2803/1/2803 2821/1/2821 +f 2803/1/2803 2838/1/2838 2821/1/2821 +f 2838/1/2838 2815/1/2815 2821/1/2821 +f 2838/1/2838 2809/1/2809 2815/1/2815 +f 2807/1/2807 2809/1/2809 2838/1/2838 +f 2807/1/2807 2806/1/2806 2809/1/2809 +f 2802/1/2802 2806/1/2806 2807/1/2807 +f 2802/1/2802 2807/1/2807 2803/1/2803 +f 2798/1/2798 2802/1/2802 2803/1/2803 +f 2798/1/2798 2799/1/2799 2802/1/2802 +f 2799/1/2799 2804/1/2804 2802/1/2802 +f 2797/1/2797 2804/1/2804 2799/1/2799 +f 2795/1/2795 2797/1/2797 2799/1/2799 +f 2773/1/2773 2797/1/2797 2795/1/2795 +f 2793/1/2793 2773/1/2773 2795/1/2795 +f 2793/1/2793 2795/1/2795 2796/1/2796 +f 2794/1/2794 2793/1/2793 2796/1/2796 +f 2794/1/2794 2796/1/2796 4168/1/4168 +f 4171/1/4171 2794/1/2794 4168/1/4168 +f 4171/1/4171 4168/1/4168 4170/1/4170 +f 4172/1/4172 4171/1/4171 4170/1/4170 +f 4172/1/4172 4170/1/4170 4173/1/4173 +f 4219/1/4219 4172/1/4172 4173/1/4173 +f 4219/1/4219 4173/1/4173 4220/1/4220 +f 4215/1/4215 4219/1/4219 4220/1/4220 +f 4215/1/4215 4220/1/4220 4218/1/4218 +f 4216/1/4216 4215/1/4215 4218/1/4218 +f 4216/1/4216 4218/1/4218 4217/1/4217 +f 4217/1/4217 4218/1/4218 4223/1/4223 +f 4218/1/4218 4222/1/4222 4223/1/4223 +f 4223/1/4223 4222/1/4222 4226/1/4226 +f 4230/1/4230 4223/1/4223 4226/1/4226 +f 4222/1/4222 4225/1/4225 4226/1/4226 +f 4226/1/4226 4225/1/4225 4228/1/4228 +f 4226/1/4226 4228/1/4228 4229/1/4229 +f 4229/1/4229 4228/1/4228 4073/1/4073 +f 4225/1/4225 4227/1/4227 4228/1/4228 +f 4228/1/4228 4227/1/4227 4079/1/4079 +f 4225/1/4225 4224/1/4224 4227/1/4227 +f 4224/1/4224 4169/1/4169 4227/1/4227 +f 4227/1/4227 4169/1/4169 4080/1/4080 +f 4224/1/4224 4167/1/4167 4169/1/4169 +f 4167/1/4167 4084/1/4084 4169/1/4169 +f 4167/1/4167 4168/1/4168 4084/1/4084 +f 4221/1/4221 4167/1/4167 4224/1/4224 +f 4222/1/4222 4221/1/4221 4224/1/4224 +f 4220/1/4220 4221/1/4221 4222/1/4222 +f 4173/1/4173 4167/1/4167 4221/1/4221 +f 4222/1/4222 4224/1/4224 4225/1/4225 +f 4214/1/4214 4215/1/4215 4216/1/4216 +f 4054/1/4054 4214/1/4214 4216/1/4216 +f 4214/1/4214 4182/1/4182 4215/1/4215 +f 4189/1/4189 4182/1/4182 4214/1/4214 +f 4057/1/4057 4189/1/4189 4214/1/4214 +f 4057/1/4057 4187/1/4187 4189/1/4189 +f 4187/1/4187 4184/1/4184 4189/1/4189 +f 4187/1/4187 4183/1/4183 4184/1/4184 +f 4183/1/4183 4179/1/4179 4184/1/4184 +f 4184/1/4184 4179/1/4179 4182/1/4182 +f 4179/1/4179 4181/1/4181 4182/1/4182 +f 4182/1/4182 4181/1/4181 4219/1/4219 +f 4179/1/4179 4175/1/4175 4181/1/4181 +f 4181/1/4181 4175/1/4175 4172/1/4172 +f 4179/1/4179 4174/1/4174 4175/1/4175 +f 4174/1/4174 4171/1/4171 4175/1/4175 +f 4174/1/4174 4176/1/4176 4171/1/4171 +f 4177/1/4177 4176/1/4176 4174/1/4174 +f 4180/1/4180 4177/1/4177 4174/1/4174 +f 4186/1/4186 4177/1/4177 4180/1/4180 +f 4185/1/4185 4186/1/4186 4180/1/4180 +f 4185/1/4185 4180/1/4180 4183/1/4183 +f 4188/1/4188 4185/1/4185 4183/1/4183 +f 4191/1/4191 4185/1/4185 4188/1/4188 +f 4190/1/4190 4191/1/4191 4188/1/4188 +f 4190/1/4190 4188/1/4188 4187/1/4187 +f 4195/1/4195 4191/1/4191 4190/1/4190 +f 4201/1/4201 4195/1/4195 4190/1/4190 +f 4201/1/4201 4190/1/4190 4056/1/4056 +f 4200/1/4200 4195/1/4195 4201/1/4201 +f 2751/1/2751 4200/1/4200 4201/1/4201 +f 2751/1/2751 4201/1/4201 2749/1/2749 +f 2755/1/2755 4200/1/4200 2751/1/2751 +f 2754/1/2754 2755/1/2755 2751/1/2751 +f 2754/1/2754 2751/1/2751 2750/1/2750 +f 2757/1/2757 2755/1/2755 2754/1/2754 +f 2758/1/2758 2757/1/2757 2754/1/2754 +f 2758/1/2758 2754/1/2754 2759/1/2759 +f 2759/1/2759 2762/1/2762 2758/1/2758 +f 2758/1/2758 2762/1/2762 2764/1/2764 +f 2758/1/2758 2764/1/2764 2763/1/2763 +f 2763/1/2763 2764/1/2764 2766/1/2766 +f 2766/1/2766 2757/1/2757 2763/1/2763 +f 2765/1/2765 2757/1/2757 2766/1/2766 +f 2766/1/2766 2767/1/2767 2765/1/2765 +f 2765/1/2765 2767/1/2767 2769/1/2769 +f 2769/1/2769 4698/1/4698 2765/1/2765 +f 4709/1/4709 4698/1/4698 2769/1/2769 +f 2769/1/2769 2770/1/2770 4709/1/4709 +f 4709/1/4709 2770/1/2770 4697/1/4697 +f 4697/1/4697 2770/1/2770 4699/1/4699 +f 4697/1/4697 4699/1/4699 4695/1/4695 +f 4695/1/4695 4696/1/4696 4697/1/4697 +f 4697/1/4697 4696/1/4696 4698/1/4698 +f 4696/1/4696 4211/1/4211 4698/1/4698 +f 4698/1/4698 4211/1/4211 4212/1/4212 +f 4698/1/4698 4212/1/4212 2757/1/2757 +f 4211/1/4211 3385/1/3385 4212/1/4212 +f 4212/1/4212 3385/1/3385 4205/1/4205 +f 4212/1/4212 4205/1/4205 2755/1/2755 +f 3385/1/3385 3380/1/3380 4205/1/4205 +f 4205/1/4205 3380/1/3380 4206/1/4206 +f 4205/1/4205 4206/1/4206 4202/1/4202 +f 4205/1/4205 4202/1/4202 4200/1/4200 +f 4200/1/4200 4202/1/4202 4198/1/4198 +f 4202/1/4202 4199/1/4199 4198/1/4198 +f 4198/1/4198 4199/1/4199 4193/1/4193 +f 4198/1/4198 4193/1/4193 4195/1/4195 +f 4199/1/4199 4197/1/4197 4193/1/4193 +f 4193/1/4193 4197/1/4197 4194/1/4194 +f 4193/1/4193 4194/1/4194 4191/1/4191 +f 4191/1/4191 4194/1/4194 4192/1/4192 +f 4194/1/4194 4196/1/4196 4192/1/4192 +f 4196/1/4196 4186/1/4186 4192/1/4192 +f 4196/1/4196 4236/1/4236 4186/1/4186 +f 4196/1/4196 4235/1/4235 4236/1/4236 +f 4235/1/4235 4237/1/4237 4236/1/4236 +f 4236/1/4236 4237/1/4237 4178/1/4178 +f 4236/1/4236 4178/1/4178 4177/1/4177 +f 4237/1/4237 2792/1/2792 4178/1/4178 +f 4178/1/4178 2792/1/2792 4176/1/4176 +f 4176/1/4176 2792/1/2792 2794/1/2794 +f 4237/1/4237 2791/1/2791 2792/1/2792 +f 2791/1/2791 2777/1/2777 2792/1/2792 +f 2792/1/2792 2777/1/2777 2793/1/2793 +f 2791/1/2791 2776/1/2776 2777/1/2777 +f 2776/1/2776 2772/1/2772 2777/1/2777 +f 2777/1/2777 2772/1/2772 2773/1/2773 +f 2772/1/2772 2771/1/2771 2773/1/2773 +f 2773/1/2773 2771/1/2771 2774/1/2774 +f 2774/1/2774 2771/1/2771 2775/1/2775 +f 2774/1/2774 2775/1/2775 2797/1/2797 +f 2771/1/2771 2761/1/2761 2775/1/2775 +f 2775/1/2775 2761/1/2761 2760/1/2760 +f 2775/1/2775 2760/1/2760 2804/1/2804 +f 2804/1/2804 2760/1/2760 2805/1/2805 +f 2760/1/2760 2761/1/2761 2756/1/2756 +f 2752/1/2752 2760/1/2760 2756/1/2756 +f 2756/1/2756 2754/1/2754 2752/1/2752 +f 2756/1/2756 2761/1/2761 2759/1/2759 +f 2771/1/2771 2762/1/2762 2761/1/2761 +f 2771/1/2771 2768/1/2768 2762/1/2762 +f 2772/1/2772 2768/1/2768 2771/1/2771 +f 2778/1/2778 2768/1/2768 2772/1/2772 +f 2778/1/2778 2781/1/2781 2768/1/2768 +f 2781/1/2781 2784/1/2784 2768/1/2768 +f 2784/1/2784 2764/1/2764 2768/1/2768 +f 2784/1/2784 2767/1/2767 2764/1/2764 +f 2783/1/2783 2767/1/2767 2784/1/2784 +f 2783/1/2783 2770/1/2770 2767/1/2767 +f 2782/1/2782 2770/1/2770 2783/1/2783 +f 2782/1/2782 2783/1/2783 2781/1/2781 +f 2780/1/2780 2782/1/2782 2781/1/2781 +f 2780/1/2780 4706/1/4706 2782/1/2782 +f 4706/1/4706 4702/1/4702 2782/1/2782 +f 4703/1/4703 4702/1/4702 4706/1/4706 +f 4707/1/4707 4703/1/4703 4706/1/4706 +f 4704/1/4704 4703/1/4703 4707/1/4707 +f 2786/1/2786 4704/1/4704 4707/1/4707 +f 2786/1/2786 4707/1/4707 2779/1/2779 +f 2785/1/2785 2786/1/2786 2779/1/2779 +f 2785/1/2785 2779/1/2779 2787/1/2787 +f 3612/1/3612 2785/1/2785 2787/1/2787 +f 3612/1/3612 2787/1/2787 3613/1/3613 +f 3614/1/3614 3612/1/3612 3613/1/3613 +f 3614/1/3614 3613/1/3613 3619/1/3619 +f 3618/1/3618 3614/1/3614 3619/1/3619 +f 3618/1/3618 3619/1/3619 4241/1/4241 +f 3379/1/3379 3618/1/3618 4241/1/4241 +f 3379/1/3379 4241/1/4241 4210/1/4210 +f 4209/1/4209 3379/1/3379 4210/1/4210 +f 4209/1/4209 4210/1/4210 4207/1/4207 +f 4206/1/4206 4209/1/4209 4207/1/4207 +f 4206/1/4206 3377/1/3377 4209/1/4209 +f 4207/1/4207 4210/1/4210 4208/1/4208 +f 4207/1/4207 4208/1/4208 4204/1/4204 +f 4202/1/4202 4207/1/4207 4204/1/4204 +f 4204/1/4204 4208/1/4208 4203/1/4203 +f 4204/1/4204 4203/1/4203 4199/1/4199 +f 4208/1/4208 4233/1/4233 4203/1/4203 +f 4233/1/4233 4232/1/4232 4203/1/4203 +f 4203/1/4203 4232/1/4232 4231/1/4231 +f 4203/1/4203 4231/1/4231 4197/1/4197 +f 4197/1/4197 4231/1/4231 4196/1/4196 +f 4232/1/4232 4234/1/4234 4231/1/4231 +f 4231/1/4231 4234/1/4234 4235/1/4235 +f 4232/1/4232 4238/1/4238 4234/1/4234 +f 4238/1/4238 4239/1/4239 4234/1/4234 +f 4234/1/4234 4239/1/4239 4237/1/4237 +f 4238/1/4238 3620/1/3620 4239/1/4239 +f 3620/1/3620 2791/1/2791 4239/1/4239 +f 3620/1/3620 2787/1/2787 2791/1/2791 +f 4240/1/4240 3620/1/3620 4238/1/4238 +f 4233/1/4233 4240/1/4240 4238/1/4238 +f 4241/1/4241 4240/1/4240 4233/1/4233 +f 3619/1/3619 3620/1/3620 4240/1/4240 +f 4233/1/4233 4238/1/4238 4232/1/4232 +f 4210/1/4210 4233/1/4233 4208/1/4208 +f 3377/1/3377 3379/1/3379 4209/1/4209 +f 3377/1/3377 3378/1/3378 3379/1/3379 +f 3381/1/3381 3378/1/3378 3377/1/3377 +f 3380/1/3380 3381/1/3381 3377/1/3377 +f 3380/1/3380 3383/1/3383 3381/1/3381 +f 3383/1/3383 3382/1/3382 3381/1/3381 +f 3383/1/3383 3386/1/3386 3382/1/3382 +f 3386/1/3386 3616/1/3616 3382/1/3382 +f 3382/1/3382 3616/1/3616 3378/1/3378 +f 3616/1/3616 3617/1/3617 3378/1/3378 +f 3378/1/3378 3617/1/3617 3618/1/3618 +f 3616/1/3616 3615/1/3615 3617/1/3617 +f 3617/1/3617 3615/1/3615 3614/1/3614 +f 3616/1/3616 3611/1/3611 3615/1/3615 +f 3611/1/3611 3612/1/3612 3615/1/3615 +f 3611/1/3611 3608/1/3608 3612/1/3612 +f 3609/1/3609 3608/1/3608 3611/1/3611 +f 3610/1/3610 3609/1/3609 3611/1/3611 +f 3400/1/3400 3609/1/3609 3610/1/3610 +f 3391/1/3391 3400/1/3400 3610/1/3610 +f 3391/1/3391 3610/1/3610 3386/1/3386 +f 3387/1/3387 3391/1/3391 3386/1/3386 +f 3388/1/3388 3391/1/3391 3387/1/3387 +f 3384/1/3384 3388/1/3388 3387/1/3387 +f 3384/1/3384 3387/1/3387 3383/1/3383 +f 3390/1/3390 3388/1/3388 3384/1/3384 +f 3389/1/3389 3390/1/3390 3384/1/3384 +f 3389/1/3389 3384/1/3384 3385/1/3385 +f 3395/1/3395 3390/1/3390 3389/1/3389 +f 4213/1/4213 3395/1/3395 3389/1/3389 +f 4213/1/4213 3389/1/3389 4211/1/4211 +f 3458/1/3458 3395/1/3395 4213/1/4213 +f 4651/1/4651 3458/1/3458 4213/1/4213 +f 4651/1/4651 4213/1/4213 4696/1/4696 +f 4654/1/4654 3458/1/3458 4651/1/4651 +f 4650/1/4650 4654/1/4654 4651/1/4651 +f 4650/1/4650 4651/1/4651 4652/1/4652 +f 4652/1/4652 4655/1/4655 4650/1/4650 +f 4650/1/4650 4655/1/4655 4653/1/4653 +f 4653/1/4653 4655/1/4655 4658/1/4658 +f 4653/1/4653 4658/1/4658 4694/1/4694 +f 4694/1/4694 4654/1/4654 4653/1/4653 +f 4694/1/4694 4689/1/4689 4654/1/4654 +f 4689/1/4689 3459/1/3459 4654/1/4654 +f 4689/1/4689 3460/1/3460 3459/1/3459 +f 3460/1/3460 3450/1/3450 3459/1/3459 +f 3459/1/3459 3450/1/3450 3451/1/3451 +f 3459/1/3459 3451/1/3451 3454/1/3454 +f 3459/1/3459 3454/1/3454 3458/1/3458 +f 3451/1/3451 3449/1/3449 3454/1/3454 +f 3454/1/3454 3449/1/3449 3453/1/3453 +f 3454/1/3454 3453/1/3453 3395/1/3395 +f 3395/1/3395 3453/1/3453 3396/1/3396 +f 3453/1/3453 3405/1/3405 3396/1/3396 +f 3396/1/3396 3405/1/3405 3398/1/3398 +f 3396/1/3396 3398/1/3398 3393/1/3393 +f 3396/1/3396 3393/1/3393 3390/1/3390 +f 3398/1/3398 3397/1/3397 3393/1/3393 +f 3393/1/3393 3397/1/3397 3394/1/3394 +f 3393/1/3393 3394/1/3394 3388/1/3388 +f 3388/1/3388 3394/1/3394 3392/1/3392 +f 3394/1/3394 3399/1/3399 3392/1/3392 +f 3399/1/3399 3400/1/3400 3392/1/3392 +f 3399/1/3399 3403/1/3403 3400/1/3400 +f 3399/1/3399 3402/1/3402 3403/1/3403 +f 3402/1/3402 3410/1/3410 3403/1/3403 +f 3403/1/3403 3410/1/3410 3607/1/3607 +f 3403/1/3403 3607/1/3607 3609/1/3609 +f 3410/1/3410 2788/1/2788 3607/1/3607 +f 3607/1/3607 2788/1/2788 3608/1/3608 +f 3608/1/3608 2788/1/2788 2785/1/2785 +f 3410/1/3410 2790/1/2790 2788/1/2788 +f 2790/1/2790 2789/1/2789 2788/1/2788 +f 2788/1/2788 2789/1/2789 2786/1/2786 +f 2790/1/2790 4708/1/4708 2789/1/2789 +f 4708/1/4708 4666/1/4666 2789/1/2789 +f 2789/1/2789 4666/1/4666 4705/1/4705 +f 2789/1/2789 4705/1/4705 4704/1/4704 +f 4705/1/4705 4660/1/4660 4704/1/4704 +f 4705/1/4705 4663/1/4663 4660/1/4660 +f 4663/1/4663 4659/1/4659 4660/1/4660 +f 4659/1/4659 4655/1/4655 4660/1/4660 +f 4660/1/4660 4655/1/4655 4657/1/4657 +f 4660/1/4660 4657/1/4657 4701/1/4701 +f 4660/1/4660 4701/1/4701 4703/1/4703 +f 4701/1/4701 4657/1/4657 4700/1/4700 +f 4701/1/4701 4700/1/4700 4702/1/4702 +f 4702/1/4702 4700/1/4700 4699/1/4699 +f 4700/1/4700 4657/1/4657 4656/1/4656 +f 4695/1/4695 4700/1/4700 4656/1/4656 +f 4656/1/4656 4651/1/4651 4695/1/4695 +f 4656/1/4656 4657/1/4657 4652/1/4652 +f 4661/1/4661 4659/1/4659 4663/1/4663 +f 4666/1/4666 4661/1/4661 4663/1/4663 +f 4664/1/4664 4661/1/4661 4666/1/4666 +f 4664/1/4664 4665/1/4665 4661/1/4661 +f 4665/1/4665 4662/1/4662 4661/1/4661 +f 4665/1/4665 4667/1/4667 4662/1/4662 +f 4667/1/4667 4668/1/4668 4662/1/4662 +f 4662/1/4662 4668/1/4668 4658/1/4658 +f 4662/1/4662 4658/1/4658 4659/1/4659 +f 4710/1/4710 4658/1/4658 4668/1/4668 +f 4710/1/4710 4668/1/4668 4690/1/4690 +f 4690/1/4690 4689/1/4689 4710/1/4710 +f 4686/1/4686 4689/1/4689 4690/1/4690 +f 4686/1/4686 4688/1/4688 4689/1/4689 +f 4687/1/4687 4688/1/4688 4686/1/4686 +f 4686/1/4686 4672/1/4672 4687/1/4687 +f 4687/1/4687 4672/1/4672 4683/1/4683 +f 4687/1/4687 4683/1/4683 4691/1/4691 +f 4691/1/4691 4692/1/4692 4687/1/4687 +f 4684/1/4684 4692/1/4692 4691/1/4691 +f 4684/1/4684 4693/1/4693 4692/1/4692 +f 4693/1/4693 3461/1/3461 4692/1/4692 +f 4692/1/4692 3461/1/3461 3460/1/3460 +f 4692/1/4692 3460/1/3460 4688/1/4688 +f 3461/1/3461 3462/1/3462 3460/1/3460 +f 3461/1/3461 3463/1/3463 3462/1/3462 +f 3463/1/3463 3577/1/3577 3462/1/3462 +f 3462/1/3462 3577/1/3577 3444/1/3444 +f 3462/1/3462 3444/1/3444 3450/1/3450 +f 3450/1/3450 3444/1/3444 3445/1/3445 +f 3444/1/3444 3439/1/3439 3445/1/3445 +f 3445/1/3445 3439/1/3439 3442/1/3442 +f 3445/1/3445 3442/1/3442 3446/1/3446 +f 3445/1/3445 3446/1/3446 3449/1/3449 +f 3449/1/3449 3446/1/3446 3448/1/3448 +f 3449/1/3449 3448/1/3448 3452/1/3452 +f 3448/1/3448 3455/1/3455 3452/1/3452 +f 3452/1/3452 3455/1/3455 3456/1/3456 +f 3452/1/3452 3456/1/3456 3457/1/3457 +f 3453/1/3453 3452/1/3452 3457/1/3457 +f 3457/1/3457 3456/1/3456 3408/1/3408 +f 3457/1/3457 3408/1/3408 3405/1/3405 +f 3405/1/3405 3408/1/3408 3404/1/3404 +f 3408/1/3408 3406/1/3406 3404/1/3404 +f 3406/1/3406 3407/1/3407 3404/1/3404 +f 3404/1/3404 3407/1/3407 3401/1/3401 +f 3404/1/3404 3401/1/3401 3397/1/3397 +f 3397/1/3397 3401/1/3401 3399/1/3399 +f 3407/1/3407 3409/1/3409 3401/1/3401 +f 3401/1/3401 3409/1/3409 3402/1/3402 +f 3407/1/3407 3411/1/3411 3409/1/3409 +f 3411/1/3411 3412/1/3412 3409/1/3409 +f 3409/1/3409 3412/1/3412 3410/1/3410 +f 3413/1/3413 3412/1/3412 3411/1/3411 +f 3406/1/3406 3413/1/3413 3411/1/3411 +f 3416/1/3416 3413/1/3413 3406/1/3406 +f 3456/1/3456 3416/1/3416 3406/1/3406 +f 3416/1/3416 3417/1/3417 3413/1/3413 +f 3417/1/3417 3415/1/3415 3413/1/3413 +f 3417/1/3417 3418/1/3418 3415/1/3415 +f 3418/1/3418 3414/1/3414 3415/1/3415 +f 3415/1/3415 3414/1/3414 3412/1/3412 +f 3412/1/3412 3414/1/3414 2790/1/2790 +f 3418/1/3418 3419/1/3419 3414/1/3414 +f 3419/1/3419 4674/1/4674 3414/1/3414 +f 3414/1/3414 4674/1/4674 4675/1/4675 +f 3414/1/3414 4675/1/4675 4708/1/4708 +f 4675/1/4675 4664/1/4664 4708/1/4708 +f 4675/1/4675 4669/1/4669 4664/1/4664 +f 4674/1/4674 4669/1/4669 4675/1/4675 +f 4674/1/4674 4673/1/4673 4669/1/4669 +f 4673/1/4673 4671/1/4671 4669/1/4669 +f 4669/1/4669 4671/1/4671 4670/1/4670 +f 4669/1/4669 4670/1/4670 4665/1/4665 +f 4671/1/4671 4672/1/4672 4670/1/4670 +f 4670/1/4670 4672/1/4672 4668/1/4668 +f 4671/1/4671 4682/1/4682 4672/1/4672 +f 4681/1/4681 4682/1/4682 4671/1/4671 +f 4676/1/4676 4681/1/4681 4671/1/4671 +f 4676/1/4676 4680/1/4680 4681/1/4681 +f 4676/1/4676 4679/1/4679 4680/1/4680 +f 4679/1/4679 4685/1/4685 4680/1/4680 +f 4684/1/4684 4680/1/4680 4685/1/4685 +f 4684/1/4684 4685/1/4685 4711/1/4711 +f 4711/1/4711 4685/1/4685 4712/1/4712 +f 4712/1/4712 4693/1/4693 4711/1/4711 +f 4712/1/4712 3467/1/3467 4693/1/4693 +f 3467/1/3467 3464/1/3464 4693/1/4693 +f 3467/1/3467 3466/1/3466 3464/1/3464 +f 3466/1/3466 3465/1/3465 3464/1/3464 +f 3465/1/3465 3463/1/3463 3464/1/3464 +f 3465/1/3465 3581/1/3581 3463/1/3463 +f 3581/1/3581 3578/1/3578 3463/1/3463 +f 3581/1/3581 3582/1/3582 3578/1/3578 +f 3582/1/3582 3580/1/3580 3578/1/3578 +f 3578/1/3578 3580/1/3580 3577/1/3577 +f 3577/1/3577 3580/1/3580 3579/1/3579 +f 3577/1/3577 3579/1/3579 3438/1/3438 +f 3579/1/3579 3440/1/3440 3438/1/3438 +f 3438/1/3438 3440/1/3440 3436/1/3436 +f 3438/1/3438 3436/1/3436 3439/1/3439 +f 3439/1/3439 3436/1/3436 3441/1/3441 +f 3436/1/3436 3437/1/3437 3441/1/3441 +f 3441/1/3441 3437/1/3437 3426/1/3426 +f 3441/1/3441 3426/1/3426 3443/1/3443 +f 3442/1/3442 3441/1/3441 3443/1/3443 +f 3443/1/3443 3426/1/3426 3424/1/3424 +f 3443/1/3443 3424/1/3424 3447/1/3447 +f 3446/1/3446 3443/1/3443 3447/1/3447 +f 3447/1/3447 3424/1/3424 3455/1/3455 +f 3424/1/3424 3423/1/3423 3455/1/3455 +f 3455/1/3455 3423/1/3423 3416/1/3416 +f 3424/1/3424 3422/1/3422 3423/1/3423 +f 3423/1/3423 3422/1/3422 3417/1/3417 +f 3424/1/3424 3420/1/3420 3422/1/3422 +f 3420/1/3420 3418/1/3418 3422/1/3422 +f 3420/1/3420 3421/1/3421 3418/1/3418 +f 3425/1/3425 3421/1/3421 3420/1/3420 +f 3426/1/3426 3425/1/3425 3420/1/3420 +f 3432/1/3432 3425/1/3425 3426/1/3426 +f 3432/1/3432 3430/1/3430 3425/1/3425 +f 3430/1/3430 3427/1/3427 3425/1/3425 +f 3431/1/3431 3427/1/3427 3430/1/3430 +f 3433/1/3433 3431/1/3431 3430/1/3430 +f 3434/1/3434 3431/1/3431 3433/1/3433 +f 3434/1/3434 3433/1/3433 3436/1/3436 +f 3436/1/3436 3433/1/3433 3432/1/3432 +f 3434/1/3434 3435/1/3435 3431/1/3431 +f 3435/1/3435 3429/1/3429 3431/1/3431 +f 3588/1/3588 3429/1/3429 3435/1/3435 +f 3585/1/3585 3588/1/3588 3435/1/3435 +f 3586/1/3586 3588/1/3588 3585/1/3585 +f 3583/1/3583 3586/1/3586 3585/1/3585 +f 3583/1/3583 3585/1/3585 3584/1/3584 +f 3580/1/3580 3583/1/3583 3584/1/3584 +f 3584/1/3584 3585/1/3585 3434/1/3434 +f 3584/1/3584 3434/1/3434 3440/1/3440 +f 3583/1/3583 3587/1/3587 3586/1/3586 +f 3587/1/3587 3589/1/3589 3586/1/3586 +f 3590/1/3590 3589/1/3589 3587/1/3587 +f 3590/1/3590 3587/1/3587 3591/1/3591 +f 3593/1/3593 3590/1/3590 3591/1/3591 +f 3593/1/3593 3591/1/3591 3594/1/3594 +f 3594/1/3594 3596/1/3596 3593/1/3593 +f 3593/1/3593 3596/1/3596 3597/1/3597 +f 3593/1/3593 3597/1/3597 3592/1/3592 +f 3592/1/3592 3597/1/3597 3598/1/3598 +f 3592/1/3592 3598/1/3598 4845/1/4845 +f 4845/1/4845 3605/1/3605 3592/1/3592 +f 3592/1/3592 3605/1/3605 3590/1/3590 +f 3605/1/3605 3603/1/3603 3590/1/3590 +f 3605/1/3605 3604/1/3604 3603/1/3603 +f 3603/1/3603 3604/1/3604 3588/1/3588 +f 3589/1/3589 3603/1/3603 3588/1/3588 +f 4725/1/4725 3604/1/3604 3605/1/3605 +f 4725/1/4725 4721/1/4721 3604/1/3604 +f 3604/1/3604 4721/1/4721 3606/1/3606 +f 3604/1/3604 3606/1/3606 3429/1/3429 +f 3429/1/3429 3606/1/3606 3428/1/3428 +f 3429/1/3429 3428/1/3428 3427/1/3427 +f 3427/1/3427 3428/1/3428 3419/1/3419 +f 3427/1/3427 3419/1/3419 3421/1/3421 +f 3606/1/3606 4677/1/4677 3428/1/3428 +f 3428/1/3428 4677/1/4677 4673/1/4673 +f 4677/1/4677 4676/1/4676 4673/1/4673 +f 3606/1/3606 4678/1/4678 4677/1/4677 +f 4678/1/4678 4679/1/4679 4677/1/4677 +f 4678/1/4678 4719/1/4719 4679/1/4679 +f 4719/1/4719 4716/1/4716 4679/1/4679 +f 4717/1/4717 4716/1/4716 4719/1/4719 +f 4717/1/4717 4718/1/4718 4716/1/4716 +f 4718/1/4718 4714/1/4714 4716/1/4716 +f 4716/1/4716 4714/1/4714 4685/1/4685 +f 4718/1/4718 4715/1/4715 4714/1/4714 +f 4713/1/4713 4714/1/4714 4715/1/4715 +f 4713/1/4713 4715/1/4715 3497/1/3497 +f 3497/1/3497 3470/1/3470 4713/1/4713 +f 4713/1/4713 3470/1/3470 3467/1/3467 +f 3496/1/3496 3470/1/3470 3497/1/3497 +f 3497/1/3497 3499/1/3499 3496/1/3496 +f 3496/1/3496 3499/1/3499 3498/1/3498 +f 3498/1/3498 3473/1/3473 3496/1/3496 +f 3500/1/3500 3473/1/3473 3498/1/3498 +f 3498/1/3498 3502/1/3502 3500/1/3500 +f 3500/1/3500 3502/1/3502 3503/1/3503 +f 3503/1/3503 3501/1/3501 3500/1/3500 +f 3504/1/3504 3501/1/3501 3503/1/3503 +f 3504/1/3504 3503/1/3503 3506/1/3506 +f 3508/1/3508 3504/1/3504 3506/1/3506 +f 3508/1/3508 3506/1/3506 3509/1/3509 +f 3508/1/3508 3509/1/3509 3511/1/3511 +f 3508/1/3508 3511/1/3511 3507/1/3507 +f 3511/1/3511 3524/1/3524 3507/1/3507 +f 3507/1/3507 3524/1/3524 3574/1/3574 +f 3574/1/3574 3573/1/3573 3507/1/3507 +f 3507/1/3507 3573/1/3573 3505/1/3505 +f 3507/1/3507 3505/1/3505 3504/1/3504 +f 3573/1/3573 3474/1/3474 3505/1/3505 +f 3505/1/3505 3474/1/3474 3471/1/3471 +f 3505/1/3505 3471/1/3471 3501/1/3501 +f 3501/1/3501 3471/1/3471 3473/1/3473 +f 3473/1/3473 3471/1/3471 3469/1/3469 +f 3473/1/3473 3469/1/3469 3470/1/3470 +f 3470/1/3470 3469/1/3469 3466/1/3466 +f 3469/1/3469 3468/1/3468 3466/1/3466 +f 3469/1/3469 3600/1/3600 3468/1/3468 +f 3468/1/3468 3600/1/3600 3595/1/3595 +f 3468/1/3468 3595/1/3595 3465/1/3465 +f 3595/1/3595 3600/1/3600 3599/1/3599 +f 3596/1/3596 3595/1/3595 3599/1/3599 +f 3599/1/3599 3600/1/3600 3601/1/3601 +f 3599/1/3599 3601/1/3601 4842/1/4842 +f 3597/1/3597 3599/1/3599 4842/1/4842 +f 4842/1/4842 3601/1/3601 4839/1/4839 +f 4842/1/4842 4839/1/4839 4840/1/4840 +f 4842/1/4842 4840/1/4840 4843/1/4843 +f 3598/1/3598 4842/1/4842 4843/1/4843 +f 3598/1/3598 4843/1/4843 4728/1/4728 +f 4728/1/4728 4843/1/4843 4729/1/4729 +f 4728/1/4728 4729/1/4729 4726/1/4726 +f 4725/1/4725 4728/1/4728 4726/1/4726 +f 4725/1/4725 4726/1/4726 4724/1/4724 +f 4724/1/4724 4726/1/4726 4727/1/4727 +f 4724/1/4724 4727/1/4727 3518/1/3518 +f 3518/1/3518 3519/1/3519 4724/1/4724 +f 4724/1/4724 3519/1/3519 4721/1/4721 +f 3519/1/3519 4722/1/4722 4721/1/4721 +f 4721/1/4721 4722/1/4722 4720/1/4720 +f 4721/1/4721 4720/1/4720 4678/1/4678 +f 4720/1/4720 4717/1/4717 4678/1/4678 +f 4722/1/4722 4717/1/4717 4720/1/4720 +f 4722/1/4722 4723/1/4723 4717/1/4717 +f 4722/1/4722 3515/1/3515 4723/1/4723 +f 3515/1/3515 3516/1/3516 4723/1/4723 +f 4723/1/4723 3516/1/3516 4718/1/4718 +f 3516/1/3516 3499/1/3499 4718/1/4718 +f 3516/1/3516 3502/1/3502 3499/1/3499 +f 3513/1/3513 3502/1/3502 3516/1/3516 +f 3510/1/3510 3502/1/3502 3513/1/3513 +f 3509/1/3509 3510/1/3510 3513/1/3513 +f 3509/1/3509 3513/1/3513 3514/1/3514 +f 3514/1/3514 3518/1/3518 3509/1/3509 +f 3509/1/3509 3518/1/3518 3512/1/3512 +f 3518/1/3518 3525/1/3525 3512/1/3512 +f 3512/1/3512 3525/1/3525 3521/1/3521 +f 3512/1/3512 3521/1/3521 3520/1/3520 +f 3511/1/3511 3512/1/3512 3520/1/3520 +f 3520/1/3520 3521/1/3521 3522/1/3522 +f 3520/1/3520 3522/1/3522 3523/1/3523 +f 3524/1/3524 3520/1/3520 3523/1/3523 +f 3524/1/3524 3523/1/3523 3572/1/3572 +f 3572/1/3572 3523/1/3523 3571/1/3571 +f 3572/1/3572 3571/1/3571 3573/1/3573 +f 3523/1/3523 3570/1/3570 3571/1/3571 +f 3570/1/3570 3477/1/3477 3571/1/3571 +f 3477/1/3477 3474/1/3474 3571/1/3571 +f 3476/1/3476 3474/1/3474 3477/1/3477 +f 3476/1/3476 3477/1/3477 3478/1/3478 +f 4759/1/4759 3476/1/3476 3478/1/3478 +f 4759/1/4759 3478/1/3478 4761/1/4761 +f 4760/1/4760 4759/1/4759 4761/1/4761 +f 4760/1/4760 4761/1/4761 4762/1/4762 +f 4760/1/4760 4762/1/4762 4763/1/4763 +f 4763/1/4763 4764/1/4764 4760/1/4760 +f 4760/1/4760 4764/1/4764 4754/1/4754 +f 4760/1/4760 4754/1/4754 4758/1/4758 +f 4758/1/4758 4754/1/4754 4753/1/4753 +f 4758/1/4758 4753/1/4753 3475/1/3475 +f 3476/1/3476 4758/1/4758 3475/1/3475 +f 3475/1/3475 4753/1/4753 4756/1/4756 +f 3475/1/3475 4756/1/4756 4755/1/4755 +f 3475/1/3475 4755/1/4755 3472/1/3472 +f 3474/1/3474 3475/1/3475 3472/1/3472 +f 3472/1/3472 4755/1/4755 4757/1/4757 +f 3472/1/3472 4757/1/4757 3469/1/3469 +f 3469/1/3469 4757/1/4757 3602/1/3602 +f 3602/1/3602 4757/1/4757 4834/1/4834 +f 4835/1/4835 3602/1/3602 4834/1/4834 +f 4835/1/4835 4834/1/4834 4837/1/4837 +f 4838/1/4838 4835/1/4835 4837/1/4837 +f 4838/1/4838 4837/1/4837 4841/1/4841 +f 4840/1/4840 4838/1/4838 4841/1/4841 +f 4840/1/4840 4841/1/4841 4733/1/4733 +f 4729/1/4729 4840/1/4840 4733/1/4733 +f 4729/1/4729 4733/1/4733 4730/1/4730 +f 4733/1/4733 4734/1/4734 4730/1/4730 +f 4730/1/4730 4734/1/4734 4732/1/4732 +f 4730/1/4730 4732/1/4732 4731/1/4731 +f 4727/1/4727 4730/1/4730 4731/1/4731 +f 4731/1/4731 4732/1/4732 3526/1/3526 +f 3518/1/3518 4731/1/4731 3526/1/3526 +f 4732/1/4732 4737/1/4737 3526/1/3526 +f 3526/1/3526 4737/1/4737 3527/1/3527 +f 3526/1/3526 3527/1/3527 3525/1/3525 +f 3525/1/3525 3527/1/3527 3528/1/3528 +f 3527/1/3527 3529/1/3529 3528/1/3528 +f 3528/1/3528 3529/1/3529 3530/1/3530 +f 3528/1/3528 3530/1/3530 3531/1/3531 +f 3521/1/3521 3528/1/3528 3531/1/3531 +f 3531/1/3531 3530/1/3530 3532/1/3532 +f 3531/1/3531 3532/1/3532 3533/1/3533 +f 3522/1/3522 3531/1/3531 3533/1/3533 +f 3522/1/3522 3533/1/3533 3568/1/3568 +f 3568/1/3568 3533/1/3533 3564/1/3564 +f 3568/1/3568 3564/1/3564 3569/1/3569 +f 3570/1/3570 3568/1/3568 3569/1/3569 +f 3569/1/3569 3564/1/3564 3479/1/3479 +f 3479/1/3479 3477/1/3477 3569/1/3569 +f 3479/1/3479 3564/1/3564 3481/1/3481 +f 3481/1/3481 3480/1/3480 3479/1/3479 +f 3479/1/3479 3480/1/3480 3478/1/3478 +f 4766/1/4766 3478/1/3478 3480/1/3480 +f 3480/1/3480 4768/1/4768 4766/1/4766 +f 4766/1/4766 4768/1/4768 4769/1/4769 +f 4767/1/4767 4766/1/4766 4769/1/4769 +f 4767/1/4767 4769/1/4769 4770/1/4770 +f 4771/1/4771 4767/1/4767 4770/1/4770 +f 4771/1/4771 4770/1/4770 4778/1/4778 +f 4807/1/4807 4771/1/4771 4778/1/4778 +f 4807/1/4807 4778/1/4778 3536/1/3536 +f 4740/1/4740 4807/1/4807 3536/1/3536 +f 3527/1/3527 4740/1/4740 3536/1/3536 +f 4740/1/4740 4809/1/4809 4807/1/4807 +f 4808/1/4808 4807/1/4807 4809/1/4809 +f 4808/1/4808 4809/1/4809 4763/1/4763 +f 4745/1/4745 4809/1/4809 4740/1/4740 +f 4739/1/4739 4745/1/4745 4740/1/4740 +f 4737/1/4737 4739/1/4739 4740/1/4740 +f 4738/1/4738 4739/1/4739 4737/1/4737 +f 4736/1/4736 4738/1/4738 4737/1/4737 +f 4736/1/4736 4742/1/4742 4738/1/4738 +f 4742/1/4742 4743/1/4743 4738/1/4738 +f 4748/1/4748 4743/1/4743 4742/1/4742 +f 4741/1/4741 4748/1/4748 4742/1/4742 +f 4751/1/4751 4748/1/4748 4741/1/4741 +f 4844/1/4844 4751/1/4751 4741/1/4741 +f 4844/1/4844 4741/1/4741 4735/1/4735 +f 4734/1/4734 4844/1/4844 4735/1/4735 +f 4841/1/4841 4844/1/4844 4734/1/4734 +f 4735/1/4735 4741/1/4741 4736/1/4736 +f 4735/1/4735 4736/1/4736 4732/1/4732 +f 4837/1/4837 4751/1/4751 4844/1/4844 +f 4751/1/4751 4749/1/4749 4748/1/4748 +f 4749/1/4749 4750/1/4750 4748/1/4748 +f 4748/1/4748 4750/1/4750 4746/1/4746 +f 4750/1/4750 4752/1/4752 4746/1/4746 +f 4746/1/4746 4752/1/4752 4747/1/4747 +f 4746/1/4746 4747/1/4747 4743/1/4743 +f 4743/1/4743 4747/1/4747 4744/1/4744 +f 4743/1/4743 4744/1/4744 4739/1/4739 +f 4747/1/4747 4754/1/4754 4744/1/4744 +f 4752/1/4752 4753/1/4753 4747/1/4747 +f 4750/1/4750 4755/1/4755 4752/1/4752 +f 4749/1/4749 4755/1/4755 4750/1/4750 +f 4834/1/4834 4749/1/4749 4751/1/4751 +f 4748/1/4748 4746/1/4746 4743/1/4743 +f 4741/1/4741 4742/1/4742 4736/1/4736 +f 4738/1/4738 4743/1/4743 4739/1/4739 +f 4739/1/4739 4744/1/4744 4745/1/4745 +f 4744/1/4744 4764/1/4764 4745/1/4745 +f 4745/1/4745 4764/1/4764 4809/1/4809 +f 3536/1/3536 4778/1/4778 4781/1/4781 +f 3536/1/3536 4781/1/4781 3537/1/3537 +f 3537/1/3537 3534/1/3534 3536/1/3536 +f 3529/1/3529 3536/1/3536 3534/1/3534 +f 3537/1/3537 3535/1/3535 3534/1/3534 +f 3530/1/3530 3534/1/3534 3535/1/3535 +f 3535/1/3535 3537/1/3537 3538/1/3538 +f 3535/1/3535 3538/1/3538 3539/1/3539 +f 3539/1/3539 3540/1/3540 3535/1/3535 +f 3532/1/3532 3535/1/3535 3540/1/3540 +f 3567/1/3567 3532/1/3532 3540/1/3540 +f 3567/1/3567 3540/1/3540 3564/1/3564 +f 3564/1/3564 3540/1/3540 3563/1/3563 +f 3540/1/3540 3561/1/3561 3563/1/3563 +f 3563/1/3563 3561/1/3561 3560/1/3560 +f 3563/1/3563 3560/1/3560 3481/1/3481 +f 3562/1/3562 3481/1/3481 3560/1/3560 +f 3562/1/3562 3560/1/3560 3558/1/3558 +f 3562/1/3562 3558/1/3558 3483/1/3483 +f 3558/1/3558 3556/1/3556 3483/1/3483 +f 3483/1/3483 3556/1/3556 3484/1/3484 +f 3482/1/3482 3483/1/3483 3484/1/3484 +f 3482/1/3482 3484/1/3484 3485/1/3485 +f 4802/1/4802 3482/1/3482 3485/1/3485 +f 4802/1/4802 3485/1/3485 4801/1/4801 +f 4801/1/4801 4793/1/4793 4802/1/4802 +f 4802/1/4802 4793/1/4793 4787/1/4787 +f 4802/1/4802 4787/1/4787 4803/1/4803 +f 4803/1/4803 4787/1/4787 4785/1/4785 +f 4803/1/4803 4785/1/4785 4804/1/4804 +f 3482/1/3482 4803/1/4803 4804/1/4804 +f 4804/1/4804 3480/1/3480 3482/1/3482 +f 4774/1/4774 3480/1/3480 4804/1/4804 +f 4804/1/4804 4775/1/4775 4774/1/4774 +f 4774/1/4774 4775/1/4775 4772/1/4772 +f 4774/1/4774 4772/1/4772 4768/1/4768 +f 4775/1/4775 4776/1/4776 4772/1/4772 +f 4773/1/4773 4772/1/4772 4776/1/4776 +f 4773/1/4773 4776/1/4776 4777/1/4777 +f 4770/1/4770 4773/1/4773 4777/1/4777 +f 4777/1/4777 4776/1/4776 4779/1/4779 +f 4777/1/4777 4779/1/4779 4780/1/4780 +f 4781/1/4781 4777/1/4777 4780/1/4780 +f 4779/1/4779 3543/1/3543 4780/1/4780 +f 3543/1/3543 3541/1/3541 4780/1/4780 +f 3537/1/3537 4780/1/4780 3541/1/3541 +f 3543/1/3543 3544/1/3544 3541/1/3541 +f 3544/1/3544 3542/1/3542 3541/1/3541 +f 3538/1/3538 3541/1/3541 3542/1/3542 +f 3538/1/3538 3542/1/3542 3555/1/3555 +f 3555/1/3555 3542/1/3542 3554/1/3554 +f 3557/1/3557 3555/1/3555 3554/1/3554 +f 3557/1/3557 3554/1/3554 3556/1/3556 +f 3554/1/3554 3553/1/3553 3556/1/3556 +f 3556/1/3556 3553/1/3553 3552/1/3552 +f 3549/1/3549 3552/1/3552 3553/1/3553 +f 3549/1/3549 3551/1/3551 3552/1/3552 +f 3551/1/3551 3565/1/3565 3552/1/3552 +f 3565/1/3565 3484/1/3484 3552/1/3552 +f 3565/1/3565 3566/1/3566 3484/1/3484 +f 3484/1/3484 3566/1/3566 3486/1/3486 +f 3576/1/3576 3486/1/3486 3566/1/3566 +f 3550/1/3550 3576/1/3576 3566/1/3566 +f 3550/1/3550 3566/1/3566 3551/1/3551 +f 3548/1/3548 3550/1/3550 3551/1/3551 +f 3575/1/3575 3550/1/3550 3548/1/3548 +f 3547/1/3547 3575/1/3575 3548/1/3548 +f 3547/1/3547 3548/1/3548 3545/1/3545 +f 3546/1/3546 3547/1/3547 3545/1/3545 +f 3546/1/3546 3545/1/3545 3544/1/3544 +f 4789/1/4789 3546/1/3546 3544/1/3544 +f 4790/1/4790 3546/1/3546 4789/1/4789 +f 4790/1/4790 4789/1/4789 4788/1/4788 +f 4791/1/4791 4790/1/4790 4788/1/4788 +f 4791/1/4791 4788/1/4788 4792/1/4792 +f 4794/1/4794 4791/1/4791 4792/1/4792 +f 4794/1/4794 4792/1/4792 4793/1/4793 +f 4793/1/4793 4792/1/4792 4786/1/4786 +f 4796/1/4796 4791/1/4791 4794/1/4794 +f 4800/1/4800 4796/1/4796 4794/1/4794 +f 4800/1/4800 4794/1/4794 4801/1/4801 +f 4799/1/4799 4796/1/4796 4800/1/4800 +f 3485/1/3485 4799/1/4799 4800/1/4800 +f 4799/1/4799 3485/1/3485 4806/1/4806 +f 4806/1/4806 4798/1/4798 4799/1/4799 +f 4806/1/4806 4805/1/4805 4798/1/4798 +f 4805/1/4805 4797/1/4797 4798/1/4798 +f 4798/1/4798 4797/1/4797 4795/1/4795 +f 4798/1/4798 4795/1/4795 4796/1/4796 +f 4797/1/4797 4790/1/4790 4795/1/4795 +f 4797/1/4797 4967/1/4967 4790/1/4790 +f 4966/1/4966 4967/1/4967 4797/1/4797 +f 4964/1/4964 4967/1/4967 4966/1/4966 +f 4965/1/4965 4964/1/4964 4966/1/4966 +f 4965/1/4965 4966/1/4966 4805/1/4805 +f 4962/1/4962 4964/1/4964 4965/1/4965 +f 3487/1/3487 4962/1/4962 4965/1/4965 +f 4806/1/4806 3487/1/3487 4965/1/4965 +f 4960/1/4960 4962/1/4962 3487/1/3487 +f 3489/1/3489 4960/1/4960 3487/1/3487 +f 3487/1/3487 3488/1/3488 3489/1/3489 +f 3489/1/3489 3488/1/3488 3490/1/3490 +f 3489/1/3489 3490/1/3490 3491/1/3491 +f 4956/1/4956 3489/1/3489 3491/1/3491 +f 3491/1/3491 4954/1/4954 4956/1/4956 +f 4954/1/4954 4955/1/4955 4956/1/4956 +f 4956/1/4956 4955/1/4955 4957/1/4957 +f 4957/1/4957 4955/1/4955 4959/1/4959 +f 4957/1/4957 4959/1/4959 4960/1/4960 +f 4960/1/4960 4959/1/4959 4961/1/4961 +f 4959/1/4959 4963/1/4963 4961/1/4961 +f 4961/1/4961 4963/1/4963 4964/1/4964 +f 4959/1/4959 4958/1/4958 4963/1/4963 +f 4958/1/4958 4811/1/4811 4963/1/4963 +f 4963/1/4963 4811/1/4811 4810/1/4810 +f 4963/1/4963 4810/1/4810 4967/1/4967 +f 4967/1/4967 4810/1/4810 3546/1/3546 +f 4811/1/4811 4812/1/4812 4810/1/4810 +f 4812/1/4812 4813/1/4813 4810/1/4810 +f 4810/1/4810 4813/1/4813 3547/1/3547 +f 4812/1/4812 4814/1/4814 4813/1/4813 +f 4814/1/4814 4815/1/4815 4813/1/4813 +f 4813/1/4813 4815/1/4815 3575/1/3575 +f 4815/1/4815 4827/1/4827 3575/1/3575 +f 3575/1/3575 4827/1/4827 3576/1/3576 +f 4827/1/4827 4828/1/4828 3576/1/3576 +f 4827/1/4827 3488/1/3488 4828/1/4828 +f 3486/1/3486 4828/1/4828 3488/1/3488 +f 4824/1/4824 3488/1/3488 4827/1/4827 +f 4815/1/4815 4824/1/4824 4827/1/4827 +f 4820/1/4820 4824/1/4824 4815/1/4815 +f 4820/1/4820 4823/1/4823 4824/1/4824 +f 4823/1/4823 3490/1/3490 4824/1/4824 +f 4822/1/4822 3490/1/3490 4823/1/4823 +f 4819/1/4819 4822/1/4822 4823/1/4823 +f 4821/1/4821 4822/1/4822 4819/1/4819 +f 4818/1/4818 4821/1/4821 4819/1/4819 +f 4818/1/4818 4819/1/4819 4816/1/4816 +f 4817/1/4817 4818/1/4818 4816/1/4816 +f 4817/1/4817 4816/1/4816 4811/1/4811 +f 4833/1/4833 4818/1/4818 4817/1/4817 +f 4951/1/4951 4833/1/4833 4817/1/4817 +f 4951/1/4951 4817/1/4817 4958/1/4958 +f 4955/1/4955 4951/1/4951 4958/1/4958 +f 4952/1/4952 4951/1/4951 4955/1/4955 +f 4948/1/4948 4951/1/4951 4952/1/4952 +f 4953/1/4953 4948/1/4948 4952/1/4952 +f 4953/1/4953 4952/1/4952 4954/1/4954 +f 4949/1/4949 4948/1/4948 4953/1/4953 +f 3491/1/3491 4949/1/4949 4953/1/4953 +f 4949/1/4949 3491/1/3491 3493/1/3493 +f 3492/1/3492 3493/1/3493 3491/1/3491 +f 3494/1/3494 3493/1/3493 3492/1/3492 +f 4829/1/4829 3494/1/3494 3492/1/3492 +f 4829/1/4829 3492/1/3492 4826/1/4826 +f 4825/1/4825 4829/1/4829 4826/1/4826 +f 4825/1/4825 4826/1/4826 4822/1/4822 +f 4825/1/4825 4830/1/4830 4829/1/4829 +f 4831/1/4831 4830/1/4830 4825/1/4825 +f 4831/1/4831 4825/1/4825 4821/1/4821 +f 4832/1/4832 4831/1/4831 4821/1/4821 +f 4831/1/4831 4832/1/4832 4945/1/4945 +f 4945/1/4945 4832/1/4832 4833/1/4833 +f 4945/1/4945 4833/1/4833 4947/1/4947 +f 4945/1/4945 4947/1/4947 4946/1/4946 +f 4946/1/4946 3495/1/3495 4945/1/4945 +f 3494/1/3494 4945/1/4945 3495/1/3495 +f 4830/1/4830 4945/1/4945 3494/1/3494 +f 3493/1/3493 3495/1/3495 4946/1/4946 +f 4946/1/4946 4947/1/4947 3493/1/3493 +f 3493/1/3493 4947/1/4947 4948/1/4948 +f 4947/1/4947 4950/1/4950 4948/1/4948 +f 4947/1/4947 4833/1/4833 4950/1/4950 +f 4830/1/4830 4831/1/4831 4945/1/4945 +f 4826/1/4826 3492/1/3492 3490/1/3490 +f 4830/1/4830 3494/1/3494 4829/1/4829 +f 3494/1/3494 3495/1/3495 3493/1/3493 +f 3493/1/3493 4948/1/4948 4949/1/4949 +f 4948/1/4948 4950/1/4950 4951/1/4951 +f 4950/1/4950 4833/1/4833 4951/1/4951 +f 4833/1/4833 4832/1/4832 4818/1/4818 +f 4816/1/4816 4819/1/4819 4814/1/4814 +f 4819/1/4819 4820/1/4820 4814/1/4814 +f 4832/1/4832 4821/1/4821 4818/1/4818 +f 4821/1/4821 4825/1/4825 4822/1/4822 +f 4826/1/4826 3490/1/3490 4822/1/4822 +f 4819/1/4819 4823/1/4823 4820/1/4820 +f 4814/1/4814 4820/1/4820 4815/1/4815 +f 4816/1/4816 4814/1/4814 4812/1/4812 +f 4811/1/4811 4816/1/4816 4812/1/4812 +f 4958/1/4958 4817/1/4817 4811/1/4811 +f 4955/1/4955 4958/1/4958 4959/1/4959 +f 4954/1/4954 4952/1/4952 4955/1/4955 +f 4954/1/4954 3491/1/3491 4953/1/4953 +f 4956/1/4956 4957/1/4957 3489/1/3489 +f 3491/1/3491 3490/1/3490 3492/1/3492 +f 4824/1/4824 3490/1/3490 3488/1/3488 +f 3487/1/3487 3486/1/3486 3488/1/3488 +f 3486/1/3486 3487/1/3487 3485/1/3485 +f 3489/1/3489 4957/1/4957 4960/1/4960 +f 4960/1/4960 4961/1/4961 4962/1/4962 +f 4962/1/4962 4961/1/4961 4964/1/4964 +f 4964/1/4964 4963/1/4963 4967/1/4967 +f 4805/1/4805 4966/1/4966 4797/1/4797 +f 4965/1/4965 4805/1/4805 4806/1/4806 +f 3485/1/3485 3487/1/3487 4806/1/4806 +f 4799/1/4799 4798/1/4798 4796/1/4796 +f 4796/1/4796 4795/1/4795 4791/1/4791 +f 4792/1/4792 4788/1/4788 4786/1/4786 +f 4786/1/4786 4788/1/4788 4783/1/4783 +f 4786/1/4786 4783/1/4783 4784/1/4784 +f 4787/1/4787 4786/1/4786 4784/1/4784 +f 4784/1/4784 4783/1/4783 4779/1/4779 +f 4784/1/4784 4779/1/4779 4782/1/4782 +f 4785/1/4785 4784/1/4784 4782/1/4782 +f 4785/1/4785 4782/1/4782 4775/1/4775 +f 4788/1/4788 3543/1/3543 4783/1/4783 +f 4795/1/4795 4790/1/4790 4791/1/4791 +f 4788/1/4788 4789/1/4789 3543/1/3543 +f 4967/1/4967 3546/1/3546 4790/1/4790 +f 4810/1/4810 3547/1/3547 3546/1/3546 +f 3545/1/3545 3548/1/3548 3549/1/3549 +f 3545/1/3545 3549/1/3549 3542/1/3542 +f 4813/1/4813 3575/1/3575 3547/1/3547 +f 3575/1/3575 3576/1/3576 3550/1/3550 +f 3486/1/3486 3576/1/3576 4828/1/4828 +f 3551/1/3551 3566/1/3566 3565/1/3565 +f 3548/1/3548 3551/1/3551 3549/1/3549 +f 3549/1/3549 3553/1/3553 3554/1/3554 +f 3559/1/3559 3555/1/3555 3557/1/3557 +f 3559/1/3559 3557/1/3557 3558/1/3558 +f 3539/1/3539 3555/1/3555 3559/1/3559 +f 3559/1/3559 3561/1/3561 3539/1/3539 +f 3542/1/3542 3549/1/3549 3554/1/3554 +f 3544/1/3544 3545/1/3545 3542/1/3542 +f 4789/1/4789 3544/1/3544 3543/1/3543 +f 4783/1/4783 3543/1/3543 4779/1/4779 +f 4782/1/4782 4779/1/4779 4776/1/4776 +f 4769/1/4769 4772/1/4772 4773/1/4773 +f 4775/1/4775 4782/1/4782 4776/1/4776 +f 4804/1/4804 4785/1/4785 4775/1/4775 +f 4787/1/4787 4784/1/4784 4785/1/4785 +f 4793/1/4793 4786/1/4786 4787/1/4787 +f 4801/1/4801 4794/1/4794 4793/1/4793 +f 4801/1/4801 3485/1/3485 4800/1/4800 +f 4803/1/4803 3482/1/3482 4802/1/4802 +f 3485/1/3485 3484/1/3484 3486/1/3486 +f 3482/1/3482 3480/1/3480 3483/1/3483 +f 3556/1/3556 3552/1/3552 3484/1/3484 +f 3558/1/3558 3557/1/3557 3556/1/3556 +f 3558/1/3558 3560/1/3560 3559/1/3559 +f 3483/1/3483 3481/1/3481 3562/1/3562 +f 3559/1/3559 3560/1/3560 3561/1/3561 +f 3539/1/3539 3561/1/3561 3540/1/3540 +f 3539/1/3539 3538/1/3538 3555/1/3555 +f 3537/1/3537 3541/1/3541 3538/1/3538 +f 4781/1/4781 4780/1/4780 3537/1/3537 +f 4778/1/4778 4777/1/4777 4781/1/4781 +f 4808/1/4808 4771/1/4771 4807/1/4807 +f 4808/1/4808 4762/1/4762 4771/1/4771 +f 4778/1/4778 4770/1/4770 4777/1/4777 +f 4762/1/4762 4767/1/4767 4771/1/4771 +f 4762/1/4762 4765/1/4765 4767/1/4767 +f 4770/1/4770 4769/1/4769 4773/1/4773 +f 4765/1/4765 4766/1/4766 4767/1/4767 +f 4769/1/4769 4768/1/4768 4772/1/4772 +f 3480/1/3480 4774/1/4774 4768/1/4768 +f 4765/1/4765 3478/1/3478 4766/1/4766 +f 3483/1/3483 3480/1/3480 3481/1/3481 +f 3564/1/3564 3563/1/3563 3481/1/3481 +f 3533/1/3533 3567/1/3567 3564/1/3564 +f 3533/1/3533 3532/1/3532 3567/1/3567 +f 3530/1/3530 3535/1/3535 3532/1/3532 +f 3529/1/3529 3534/1/3534 3530/1/3530 +f 3527/1/3527 3536/1/3536 3529/1/3529 +f 4737/1/4737 4740/1/4740 3527/1/3527 +f 4732/1/4732 4736/1/4736 4737/1/4737 +f 4734/1/4734 4735/1/4735 4732/1/4732 +f 4733/1/4733 4841/1/4841 4734/1/4734 +f 4841/1/4841 4837/1/4837 4844/1/4844 +f 4836/1/4836 4835/1/4835 4838/1/4838 +f 4839/1/4839 4836/1/4836 4838/1/4838 +f 4837/1/4837 4834/1/4834 4751/1/4751 +f 4836/1/4836 3602/1/3602 4835/1/4835 +f 3600/1/3600 3602/1/3602 4836/1/4836 +f 4834/1/4834 4757/1/4757 4749/1/4749 +f 4757/1/4757 4755/1/4755 4749/1/4749 +f 4755/1/4755 4756/1/4756 4752/1/4752 +f 4752/1/4752 4756/1/4756 4753/1/4753 +f 4747/1/4747 4753/1/4753 4754/1/4754 +f 4744/1/4744 4754/1/4754 4764/1/4764 +f 4763/1/4763 4809/1/4809 4764/1/4764 +f 4763/1/4763 4762/1/4762 4808/1/4808 +f 4761/1/4761 4765/1/4765 4762/1/4762 +f 4758/1/4758 4759/1/4759 4760/1/4760 +f 4761/1/4761 3478/1/3478 4765/1/4765 +f 3476/1/3476 4759/1/4759 4758/1/4758 +f 3479/1/3479 3478/1/3478 3477/1/3477 +f 3475/1/3475 3474/1/3474 3476/1/3476 +f 3570/1/3570 3569/1/3569 3477/1/3477 +f 3523/1/3523 3568/1/3568 3570/1/3570 +f 3523/1/3523 3522/1/3522 3568/1/3568 +f 3521/1/3521 3531/1/3531 3522/1/3522 +f 3525/1/3525 3528/1/3528 3521/1/3521 +f 3518/1/3518 3526/1/3526 3525/1/3525 +f 3514/1/3514 3517/1/3517 3518/1/3518 +f 3514/1/3514 3513/1/3513 3517/1/3517 +f 3513/1/3513 3515/1/3515 3517/1/3517 +f 3506/1/3506 3502/1/3502 3510/1/3510 +f 3515/1/3515 3513/1/3513 3516/1/3516 +f 3517/1/3517 3515/1/3515 4722/1/4722 +f 3519/1/3519 3517/1/3517 4722/1/4722 +f 3518/1/3518 3517/1/3517 3519/1/3519 +f 4727/1/4727 4731/1/4731 3518/1/3518 +f 4726/1/4726 4730/1/4730 4727/1/4727 +f 4845/1/4845 4728/1/4728 4725/1/4725 +f 4726/1/4726 4729/1/4729 4730/1/4730 +f 4843/1/4843 4840/1/4840 4729/1/4729 +f 4839/1/4839 4838/1/4838 4840/1/4840 +f 3601/1/3601 4836/1/4836 4839/1/4839 +f 3601/1/3601 3600/1/3600 4836/1/4836 +f 3469/1/3469 3602/1/3602 3600/1/3600 +f 3471/1/3471 3472/1/3472 3469/1/3469 +f 3474/1/3474 3472/1/3472 3471/1/3471 +f 3571/1/3571 3474/1/3474 3573/1/3573 +f 3572/1/3572 3573/1/3573 3574/1/3574 +f 3574/1/3574 3524/1/3524 3572/1/3572 +f 3511/1/3511 3520/1/3520 3524/1/3524 +f 3509/1/3509 3512/1/3512 3511/1/3511 +f 3509/1/3509 3506/1/3506 3510/1/3510 +f 3508/1/3508 3507/1/3507 3504/1/3504 +f 3504/1/3504 3505/1/3505 3501/1/3501 +f 3506/1/3506 3503/1/3503 3502/1/3502 +f 3500/1/3500 3501/1/3501 3473/1/3473 +f 3498/1/3498 3499/1/3499 3502/1/3502 +f 3496/1/3496 3473/1/3473 3470/1/3470 +f 3497/1/3497 4715/1/4715 3499/1/3499 +f 4712/1/4712 4714/1/4714 4713/1/4713 +f 4718/1/4718 3499/1/3499 4715/1/4715 +f 4723/1/4723 4718/1/4718 4717/1/4717 +f 4678/1/4678 4717/1/4717 4719/1/4719 +f 4721/1/4721 4678/1/4678 3606/1/3606 +f 4724/1/4724 4721/1/4721 4725/1/4725 +f 4845/1/4845 4725/1/4725 3605/1/3605 +f 4845/1/4845 3598/1/3598 4728/1/4728 +f 3597/1/3597 4842/1/4842 3598/1/3598 +f 3596/1/3596 3599/1/3599 3597/1/3597 +f 3594/1/3594 3595/1/3595 3596/1/3596 +f 3581/1/3581 3595/1/3595 3594/1/3594 +f 3594/1/3594 3591/1/3591 3582/1/3582 +f 3592/1/3592 3590/1/3590 3593/1/3593 +f 3591/1/3591 3587/1/3587 3582/1/3582 +f 3590/1/3590 3603/1/3603 3589/1/3589 +f 3582/1/3582 3587/1/3587 3583/1/3583 +f 3586/1/3586 3589/1/3589 3588/1/3588 +f 3588/1/3588 3604/1/3604 3429/1/3429 +f 3585/1/3585 3435/1/3435 3434/1/3434 +f 3431/1/3431 3429/1/3429 3427/1/3427 +f 3433/1/3433 3430/1/3430 3432/1/3432 +f 3425/1/3425 3427/1/3427 3421/1/3421 +f 3426/1/3426 3420/1/3420 3424/1/3424 +f 3437/1/3437 3432/1/3432 3426/1/3426 +f 3436/1/3436 3432/1/3432 3437/1/3437 +f 3440/1/3440 3434/1/3434 3436/1/3436 +f 3579/1/3579 3584/1/3584 3440/1/3440 +f 3580/1/3580 3584/1/3584 3579/1/3579 +f 3582/1/3582 3583/1/3583 3580/1/3580 +f 3594/1/3594 3582/1/3582 3581/1/3581 +f 3465/1/3465 3595/1/3595 3581/1/3581 +f 3466/1/3466 3468/1/3468 3465/1/3465 +f 3470/1/3470 3466/1/3466 3467/1/3467 +f 4713/1/4713 3467/1/3467 4712/1/4712 +f 4712/1/4712 4685/1/4685 4714/1/4714 +f 4683/1/4683 4680/1/4680 4684/1/4684 +f 4683/1/4683 4682/1/4682 4680/1/4680 +f 4716/1/4716 4685/1/4685 4679/1/4679 +f 4677/1/4677 4679/1/4679 4676/1/4676 +f 4681/1/4681 4680/1/4680 4682/1/4682 +f 4673/1/4673 4676/1/4676 4671/1/4671 +f 3428/1/3428 4673/1/4673 4674/1/4674 +f 3419/1/3419 3428/1/3428 4674/1/4674 +f 3421/1/3421 3419/1/3419 3418/1/3418 +f 3422/1/3422 3418/1/3418 3417/1/3417 +f 3423/1/3423 3417/1/3417 3416/1/3416 +f 3413/1/3413 3415/1/3415 3412/1/3412 +f 3406/1/3406 3411/1/3411 3407/1/3407 +f 3456/1/3456 3406/1/3406 3408/1/3408 +f 3455/1/3455 3416/1/3416 3456/1/3456 +f 3448/1/3448 3447/1/3447 3455/1/3455 +f 3446/1/3446 3447/1/3447 3448/1/3448 +f 3442/1/3442 3443/1/3443 3446/1/3446 +f 3439/1/3439 3441/1/3441 3442/1/3442 +f 3444/1/3444 3438/1/3438 3439/1/3439 +f 3577/1/3577 3438/1/3438 3444/1/3444 +f 3463/1/3463 3578/1/3578 3577/1/3577 +f 3464/1/3464 3463/1/3463 3461/1/3461 +f 4693/1/4693 3464/1/3464 3461/1/3461 +f 4711/1/4711 4693/1/4693 4684/1/4684 +f 4691/1/4691 4683/1/4683 4684/1/4684 +f 4672/1/4672 4682/1/4682 4683/1/4683 +f 4686/1/4686 4668/1/4668 4672/1/4672 +f 4687/1/4687 4692/1/4692 4688/1/4688 +f 4690/1/4690 4668/1/4668 4686/1/4686 +f 4670/1/4670 4668/1/4668 4667/1/4667 +f 4665/1/4665 4670/1/4670 4667/1/4667 +f 4669/1/4669 4665/1/4665 4664/1/4664 +f 4661/1/4661 4662/1/4662 4659/1/4659 +f 4666/1/4666 4663/1/4663 4705/1/4705 +f 4708/1/4708 4664/1/4664 4666/1/4666 +f 3414/1/3414 4708/1/4708 2790/1/2790 +f 3412/1/3412 2790/1/2790 3410/1/3410 +f 3409/1/3409 3410/1/3410 3402/1/3402 +f 3401/1/3401 3402/1/3402 3399/1/3399 +f 3397/1/3397 3399/1/3399 3394/1/3394 +f 3398/1/3398 3404/1/3404 3397/1/3397 +f 3405/1/3405 3404/1/3404 3398/1/3398 +f 3453/1/3453 3457/1/3457 3405/1/3405 +f 3449/1/3449 3452/1/3452 3453/1/3453 +f 3451/1/3451 3445/1/3445 3449/1/3449 +f 3450/1/3450 3445/1/3445 3451/1/3451 +f 3460/1/3460 3462/1/3462 3450/1/3450 +f 4688/1/4688 3460/1/3460 4689/1/4689 +f 4710/1/4710 4689/1/4689 4694/1/4694 +f 4694/1/4694 4658/1/4658 4710/1/4710 +f 4659/1/4659 4658/1/4658 4655/1/4655 +f 4652/1/4652 4657/1/4657 4655/1/4655 +f 4652/1/4652 4651/1/4651 4656/1/4656 +f 4653/1/4653 4654/1/4654 4650/1/4650 +f 4654/1/4654 3459/1/3459 3458/1/3458 +f 3458/1/3458 3454/1/3454 3395/1/3395 +f 3395/1/3395 3396/1/3396 3390/1/3390 +f 3390/1/3390 3393/1/3393 3388/1/3388 +f 3388/1/3388 3392/1/3392 3391/1/3391 +f 3392/1/3392 3400/1/3400 3391/1/3391 +f 3400/1/3400 3403/1/3403 3609/1/3609 +f 3609/1/3609 3607/1/3607 3608/1/3608 +f 3610/1/3610 3611/1/3611 3616/1/3616 +f 3386/1/3386 3610/1/3610 3616/1/3616 +f 3387/1/3387 3386/1/3386 3383/1/3383 +f 3384/1/3384 3383/1/3383 3380/1/3380 +f 3381/1/3381 3382/1/3382 3378/1/3378 +f 4210/1/4210 4241/1/4241 4233/1/4233 +f 3378/1/3378 3618/1/3618 3379/1/3379 +f 4241/1/4241 3619/1/3619 4240/1/4240 +f 3617/1/3617 3614/1/3614 3618/1/3618 +f 3619/1/3619 3613/1/3613 3620/1/3620 +f 3615/1/3615 3612/1/3612 3614/1/3614 +f 3613/1/3613 2787/1/2787 3620/1/3620 +f 3608/1/3608 2785/1/2785 3612/1/3612 +f 2787/1/2787 2779/1/2779 2776/1/2776 +f 2779/1/2779 2780/1/2780 2776/1/2776 +f 2776/1/2776 2780/1/2780 2778/1/2778 +f 2788/1/2788 2786/1/2786 2785/1/2785 +f 2779/1/2779 4707/1/4707 2780/1/2780 +f 2789/1/2789 4704/1/4704 2786/1/2786 +f 4704/1/4704 4660/1/4660 4703/1/4703 +f 4703/1/4703 4701/1/4701 4702/1/4702 +f 4707/1/4707 4706/1/4706 2780/1/2780 +f 4702/1/4702 2770/1/2770 2782/1/2782 +f 2781/1/2781 2783/1/2783 2784/1/2784 +f 2780/1/2780 2781/1/2781 2778/1/2778 +f 2776/1/2776 2778/1/2778 2772/1/2772 +f 2787/1/2787 2776/1/2776 2791/1/2791 +f 4239/1/4239 2791/1/2791 4237/1/4237 +f 4234/1/4234 4237/1/4237 4235/1/4235 +f 4231/1/4231 4235/1/4235 4196/1/4196 +f 4197/1/4197 4196/1/4196 4194/1/4194 +f 4199/1/4199 4203/1/4203 4197/1/4197 +f 4202/1/4202 4204/1/4204 4199/1/4199 +f 4206/1/4206 4207/1/4207 4202/1/4202 +f 3380/1/3380 3377/1/3377 4206/1/4206 +f 3385/1/3385 3384/1/3384 3380/1/3380 +f 4211/1/4211 3389/1/3389 3385/1/3385 +f 4696/1/4696 4213/1/4213 4211/1/4211 +f 4695/1/4695 4651/1/4651 4696/1/4696 +f 4695/1/4695 4699/1/4699 4700/1/4700 +f 4702/1/4702 4699/1/4699 2770/1/2770 +f 4697/1/4697 4698/1/4698 4709/1/4709 +f 2769/1/2769 2767/1/2767 2770/1/2770 +f 2765/1/2765 4698/1/4698 2757/1/2757 +f 2766/1/2766 2764/1/2764 2767/1/2767 +f 2768/1/2768 2764/1/2764 2762/1/2762 +f 2759/1/2759 2761/1/2761 2762/1/2762 +f 2759/1/2759 2754/1/2754 2756/1/2756 +f 2763/1/2763 2757/1/2757 2758/1/2758 +f 2757/1/2757 4212/1/4212 2755/1/2755 +f 2755/1/2755 4205/1/4205 4200/1/4200 +f 4200/1/4200 4198/1/4198 4195/1/4195 +f 4195/1/4195 4193/1/4193 4191/1/4191 +f 4191/1/4191 4192/1/4192 4185/1/4185 +f 4192/1/4192 4186/1/4186 4185/1/4185 +f 4186/1/4186 4236/1/4236 4177/1/4177 +f 4177/1/4177 4178/1/4178 4176/1/4176 +f 4180/1/4180 4174/1/4174 4179/1/4179 +f 4183/1/4183 4180/1/4180 4179/1/4179 +f 4188/1/4188 4183/1/4183 4187/1/4187 +f 4190/1/4190 4187/1/4187 4057/1/4057 +f 4189/1/4189 4184/1/4184 4182/1/4182 +f 4218/1/4218 4220/1/4220 4222/1/4222 +f 4182/1/4182 4219/1/4219 4215/1/4215 +f 4220/1/4220 4173/1/4173 4221/1/4221 +f 4181/1/4181 4172/1/4172 4219/1/4219 +f 4173/1/4173 4170/1/4170 4167/1/4167 +f 4175/1/4175 4171/1/4171 4172/1/4172 +f 4170/1/4170 4168/1/4168 4167/1/4167 +f 4176/1/4176 2794/1/2794 4171/1/4171 +f 4168/1/4168 2796/1/2796 2800/1/2800 +f 2796/1/2796 2798/1/2798 2800/1/2800 +f 2800/1/2800 2798/1/2798 2801/1/2801 +f 2792/1/2792 2793/1/2793 2794/1/2794 +f 2796/1/2796 2795/1/2795 2798/1/2798 +f 2777/1/2777 2773/1/2773 2793/1/2793 +f 2773/1/2773 2774/1/2774 2797/1/2797 +f 2797/1/2797 2775/1/2775 2804/1/2804 +f 2795/1/2795 2799/1/2799 2798/1/2798 +f 2804/1/2804 2806/1/2806 2802/1/2802 +f 2803/1/2803 2807/1/2807 2838/1/2838 +f 2798/1/2798 2803/1/2803 2801/1/2801 +f 2800/1/2800 2801/1/2801 2837/1/2837 +f 4168/1/4168 2800/1/2800 4084/1/4084 +f 4169/1/4169 4084/1/4084 4080/1/4080 +f 4227/1/4227 4080/1/4080 4079/1/4079 +f 4228/1/4228 4079/1/4079 4073/1/4073 +f 4229/1/4229 4073/1/4073 4072/1/4072 +f 4059/1/4059 4226/1/4226 4229/1/4229 +f 4230/1/4230 4226/1/4226 4059/1/4059 +f 4217/1/4217 4223/1/4223 4230/1/4230 +f 4054/1/4054 4216/1/4216 4217/1/4217 +f 4057/1/4057 4214/1/4214 4054/1/4054 +f 4056/1/4056 4190/1/4190 4057/1/4057 +f 2749/1/2749 4201/1/4201 4056/1/4056 +f 2750/1/2750 2751/1/2751 2749/1/2749 +f 2752/1/2752 2754/1/2754 2750/1/2750 +f 2752/1/2752 2805/1/2805 2760/1/2760 +f 2804/1/2804 2805/1/2805 2806/1/2806 +f 2753/1/2753 2748/1/2748 2810/1/2810 +f 2808/1/2808 2809/1/2809 2806/1/2806 +f 2811/1/2811 2748/1/2748 2747/1/2747 +f 2812/1/2812 2815/1/2815 2809/1/2809 +f 2821/1/2821 2815/1/2815 2817/1/2817 +f 2816/1/2816 2819/1/2819 2817/1/2817 +f 2816/1/2816 2740/1/2740 2818/1/2818 +f 2813/1/2813 2747/1/2747 2814/1/2814 +f 2747/1/2747 2745/1/2745 2743/1/2743 +f 2743/1/2743 2746/1/2746 2744/1/2744 +f 2744/1/2744 4055/1/4055 4058/1/4058 +f 4058/1/4058 4060/1/4060 4061/1/4061 +f 4061/1/4061 4070/1/4070 4065/1/4065 +f 4070/1/4070 4071/1/4071 4065/1/4065 +f 4071/1/4071 4074/1/4074 4075/1/4075 +f 4075/1/4075 4078/1/4078 4077/1/4077 +f 4068/1/4068 4076/1/4076 4069/1/4069 +f 4066/1/4066 4068/1/4068 4069/1/4069 +f 4063/1/4063 4066/1/4066 4064/1/4064 +f 4062/1/4062 4064/1/4064 2885/1/2885 +f 2886/1/2886 4067/1/4067 4242/1/4242 +f 2878/1/2878 2866/1/2866 2856/1/2856 +f 4242/1/4242 2880/1/2880 2879/1/2879 +f 2866/1/2866 4088/1/4088 2864/1/2864 +f 4166/1/4166 4164/1/4164 2880/1/2880 +f 4088/1/4088 4087/1/4087 2865/1/2865 +f 4165/1/4165 4083/1/4083 4164/1/4164 +f 4087/1/4087 4085/1/4085 2865/1/2865 +f 4077/1/4077 4082/1/4082 4083/1/4083 +f 4085/1/4085 2835/1/2835 4086/1/4086 +f 2835/1/2835 2833/1/2833 4086/1/4086 +f 4086/1/4086 2833/1/2833 4101/1/4101 +f 4081/1/4081 2834/1/2834 4082/1/4082 +f 2835/1/2835 2830/1/2830 2833/1/2833 +f 2836/1/2836 2832/1/2832 2834/1/2834 +f 2832/1/2832 2831/1/2831 2827/1/2827 +f 2827/1/2827 2822/1/2822 2825/1/2825 +f 2830/1/2830 2828/1/2828 2833/1/2833 +f 2825/1/2825 2826/1/2826 2829/1/2829 +f 4103/1/4103 4107/1/4107 4104/1/4104 +f 2833/1/2833 4103/1/4103 4101/1/4101 +f 4086/1/4086 4101/1/4101 4100/1/4100 +f 4085/1/4085 4086/1/4086 2868/1/2868 +f 2863/1/2863 2868/1/2868 2860/1/2860 +f 2859/1/2859 2860/1/2860 2858/1/2858 +f 2853/1/2853 2858/1/2858 2851/1/2851 +f 2849/1/2849 2851/1/2851 2850/1/2850 +f 2848/1/2848 2852/1/2852 2849/1/2849 +f 2847/1/2847 2854/1/2854 2848/1/2848 +f 2884/1/2884 2883/1/2883 2847/1/2847 +f 2885/1/2885 2882/1/2882 2884/1/2884 +f 2735/1/2735 4062/1/4062 2885/1/2885 +f 2734/1/2734 2739/1/2739 2735/1/2735 +f 2737/1/2737 2738/1/2738 2734/1/2734 +f 2741/1/2741 2740/1/2740 2737/1/2737 +f 2741/1/2741 2824/1/2824 2823/1/2823 +f 2825/1/2825 2824/1/2824 2826/1/2826 +f 2742/1/2742 2733/1/2733 2839/1/2839 +f 2841/1/2841 2842/1/2842 2826/1/2826 +f 2840/1/2840 2733/1/2733 2731/1/2731 +f 2843/1/2843 4105/1/4105 2842/1/2842 +f 4102/1/4102 4105/1/4105 4106/1/4106 +f 4109/1/4109 4108/1/4108 4106/1/4106 +f 4109/1/4109 2728/1/2728 4113/1/4113 +f 4163/1/4163 2731/1/2731 4110/1/4110 +f 2731/1/2731 2732/1/2732 2729/1/2729 +f 2729/1/2729 2736/1/2736 2730/1/2730 +f 2730/1/2730 2846/1/2846 2844/1/2844 +f 2844/1/2844 2845/1/2845 2640/1/2640 +f 2640/1/2640 2639/1/2639 2636/1/2636 +f 2639/1/2639 2638/1/2638 2636/1/2636 +f 2638/1/2638 2861/1/2861 2633/1/2633 +f 2633/1/2633 2867/1/2867 2870/1/2870 +f 2632/1/2632 2634/1/2634 2635/1/2635 +f 2637/1/2637 2632/1/2632 2635/1/2635 +f 2641/1/2641 2637/1/2637 2643/1/2643 +f 2644/1/2644 2643/1/2643 2645/1/2645 +f 2646/1/2646 2642/1/2642 2647/1/2647 +f 2656/1/2656 2658/1/2658 2660/1/2660 +f 2647/1/2647 2657/1/2657 2652/1/2652 +f 2658/1/2658 2666/1/2666 2663/1/2663 +f 2877/1/2877 2874/1/2874 2657/1/2657 +f 2666/1/2666 2875/1/2875 2667/1/2667 +f 2873/1/2873 2872/1/2872 2874/1/2874 +f 2875/1/2875 2876/1/2876 2667/1/2667 +f 2870/1/2870 2871/1/2871 2872/1/2872 +f 2876/1/2876 4091/1/4091 4092/1/4092 +f 4091/1/4091 4094/1/4094 4092/1/4092 +f 4092/1/4092 4094/1/4094 4136/1/4136 +f 2869/1/2869 4090/1/4090 2871/1/2871 +f 4091/1/4091 4093/1/4093 4094/1/4094 +f 4089/1/4089 4097/1/4097 4090/1/4090 +f 4097/1/4097 4099/1/4099 4095/1/4095 +f 4095/1/4095 4111/1/4111 4114/1/4114 +f 4093/1/4093 4096/1/4096 4094/1/4094 +f 4114/1/4114 4121/1/4121 4162/1/4162 +f 4135/1/4135 4127/1/4127 4128/1/4128 +f 4094/1/4094 4135/1/4135 4136/1/4136 +f 4092/1/4092 4136/1/4136 4137/1/4137 +f 2876/1/2876 4092/1/4092 2673/1/2673 +f 2668/1/2668 2673/1/2673 2671/1/2671 +f 2669/1/2669 2671/1/2671 2672/1/2672 +f 2670/1/2670 2672/1/2672 2677/1/2677 +f 2678/1/2678 2677/1/2677 2679/1/2679 +f 2682/1/2682 2662/1/2662 2678/1/2678 +f 2661/1/2661 2662/1/2662 2682/1/2682 +f 2654/1/2654 2659/1/2659 2661/1/2661 +f 2649/1/2649 2653/1/2653 2654/1/2654 +f 2645/1/2645 2648/1/2648 2649/1/2649 +f 2650/1/2650 2644/1/2644 2645/1/2645 +f 2725/1/2725 2726/1/2726 2650/1/2650 +f 4117/1/4117 2727/1/2727 2725/1/2725 +f 4116/1/4116 2728/1/2728 4117/1/4117 +f 4116/1/4116 4115/1/4115 4112/1/4112 +f 4114/1/4114 4115/1/4115 4121/1/4121 +f 4118/1/4118 4119/1/4119 4120/1/4120 +f 4122/1/4122 4124/1/4124 4121/1/4121 +f 4123/1/4123 4119/1/4119 4125/1/4125 +f 4126/1/4126 4129/1/4129 4124/1/4124 +f 4133/1/4133 4129/1/4129 4134/1/4134 +f 4140/1/4140 4139/1/4139 4134/1/4134 +f 4140/1/4140 4132/1/4132 4141/1/4141 +f 4130/1/4130 4125/1/4125 4131/1/4131 +f 4125/1/4125 2724/1/2724 2691/1/2691 +f 2691/1/2691 2651/1/2651 2689/1/2689 +f 2689/1/2689 2655/1/2655 2684/1/2684 +f 2684/1/2684 2683/1/2683 2685/1/2685 +f 2685/1/2685 2680/1/2680 2686/1/2686 +f 2680/1/2680 2681/1/2681 2686/1/2686 +f 2681/1/2681 2674/1/2674 2706/1/2706 +f 2706/1/2706 2675/1/2675 2712/1/2712 +f 2705/1/2705 2707/1/2707 2708/1/2708 +f 2699/1/2699 2705/1/2705 2708/1/2708 +f 2687/1/2687 2699/1/2699 2695/1/2695 +f 2688/1/2688 2695/1/2695 2694/1/2694 +f 2696/1/2696 2700/1/2700 2701/1/2701 +f 2704/1/2704 2716/1/2716 4305/1/4305 +f 2701/1/2701 2714/1/2714 2702/1/2702 +f 2716/1/2716 2715/1/2715 2719/1/2719 +f 2709/1/2709 2713/1/2713 2714/1/2714 +f 2715/1/2715 2717/1/2717 2718/1/2718 +f 2710/1/2710 2711/1/2711 2713/1/2713 +f 2717/1/2717 2720/1/2720 2718/1/2718 +f 2712/1/2712 2723/1/2723 2711/1/2711 +f 2720/1/2720 3135/1/3135 3126/1/3126 +f 3135/1/3135 3130/1/3130 3126/1/3126 +f 3126/1/3126 3130/1/3130 3127/1/3127 +f 2676/1/2676 3136/1/3136 2723/1/2723 +f 3135/1/3135 4161/1/4161 3130/1/3130 +f 3137/1/3137 4145/1/4145 3136/1/3136 +f 4145/1/4145 4144/1/4144 4146/1/4146 +f 4146/1/4146 4142/1/4142 4147/1/4147 +f 4161/1/4161 4160/1/4160 3130/1/3130 +f 4147/1/4147 4158/1/4158 4159/1/4159 +f 3129/1/3129 3131/1/3131 3128/1/3128 +f 3130/1/3130 3129/1/3129 3127/1/3127 +f 3126/1/3126 3127/1/3127 3125/1/3125 +f 2720/1/2720 3126/1/3126 2721/1/2721 +f 2722/1/2722 2721/1/2721 4303/1/4303 +f 4302/1/4302 4303/1/4303 4299/1/4299 +f 4300/1/4300 4299/1/4299 4293/1/4293 +f 4273/1/4273 4293/1/4293 4290/1/4290 +f 4271/1/4271 4272/1/4272 4273/1/4273 +f 4277/1/4277 4276/1/4276 4271/1/4271 +f 2698/1/2698 4279/1/4279 4277/1/4277 +f 2694/1/2694 2697/1/2697 2698/1/2698 +f 2693/1/2693 2688/1/2688 2694/1/2694 +f 4153/1/4153 2690/1/2690 2693/1/2693 +f 4150/1/4150 2692/1/2692 4153/1/4153 +f 4149/1/4149 4132/1/4132 4150/1/4150 +f 4149/1/4149 4148/1/4148 4143/1/4143 +f 4147/1/4147 4148/1/4148 4158/1/4158 +f 4151/1/4151 4152/1/4152 4157/1/4157 +f 4156/1/4156 3132/1/3132 4158/1/4158 +f 4155/1/4155 4152/1/4152 2891/1/2891 +f 3139/1/3139 2893/1/2893 3132/1/3132 +f 2896/1/2896 2893/1/2893 2892/1/2892 +f 2889/1/2889 2895/1/2895 2892/1/2892 +f 2889/1/2889 2888/1/2888 2894/1/2894 +f 2890/1/2890 2891/1/2891 2887/1/2887 +f 2891/1/2891 4154/1/4154 2914/1/2914 +f 2914/1/2914 4280/1/4280 4281/1/4281 +f 4281/1/4281 4274/1/4274 4282/1/4282 +f 4282/1/4282 4275/1/4275 4286/1/4286 +f 4286/1/4286 4291/1/4291 4292/1/4292 +f 4291/1/4291 4294/1/4294 4292/1/4292 +f 4294/1/4294 4297/1/4297 4298/1/4298 +f 4298/1/4298 4307/1/4307 4306/1/4306 +f 4295/1/4295 4308/1/4308 4313/1/4313 +f 4296/1/4296 4295/1/4295 4313/1/4313 +f 4287/1/4287 4296/1/4296 4288/1/4288 +f 4285/1/4285 4288/1/4288 4289/1/4289 +f 4320/1/4320 4315/1/4315 4316/1/4316 +f 4325/1/4325 4328/1/4328 4329/1/4329 +f 4316/1/4316 4317/1/4317 4319/1/4319 +f 4328/1/4328 4343/1/4343 4335/1/4335 +f 4314/1/4314 4311/1/4311 4317/1/4317 +f 4343/1/4343 4312/1/4312 4342/1/4342 +f 4310/1/4310 4309/1/4309 4311/1/4311 +f 4312/1/4312 3138/1/3138 4342/1/4342 +f 4306/1/4306 3134/1/3134 4309/1/4309 +f 3138/1/3138 2952/1/2952 2953/1/2953 +f 2952/1/2952 2949/1/2949 2953/1/2953 +f 2953/1/2953 2949/1/2949 2950/1/2950 +f 3133/1/3133 3122/1/3122 3134/1/3134 +f 2952/1/2952 2951/1/2951 2949/1/2949 +f 3124/1/3124 3123/1/3123 3122/1/3122 +f 3123/1/3123 2903/1/2903 2904/1/2904 +f 2904/1/2904 2898/1/2898 2901/1/2901 +f 2951/1/2951 2907/1/2907 2949/1/2949 +f 2901/1/2901 2905/1/2905 2906/1/2906 +f 2948/1/2948 2946/1/2946 2942/1/2942 +f 2949/1/2949 2948/1/2948 2950/1/2950 +f 2953/1/2953 2950/1/2950 2954/1/2954 +f 3138/1/3138 2953/1/2953 4344/1/4344 +f 4341/1/4341 4344/1/4344 4340/1/4340 +f 4337/1/4337 4340/1/4340 4339/1/4339 +f 4333/1/4333 4339/1/4339 4338/1/4338 +f 4332/1/4332 4338/1/4338 4361/1/4361 +f 4331/1/4331 4330/1/4330 4332/1/4332 +f 4323/1/4323 4326/1/4326 4331/1/4331 +f 4322/1/4322 4324/1/4324 4323/1/4323 +f 4289/1/4289 4318/1/4318 4322/1/4322 +f 4284/1/4284 4285/1/4285 4289/1/4289 +f 2913/1/2913 4283/1/4283 4284/1/4284 +f 2909/1/2909 2912/1/2912 2913/1/2913 +f 2900/1/2900 2888/1/2888 2909/1/2909 +f 2900/1/2900 2902/1/2902 2899/1/2899 +f 2901/1/2901 2902/1/2902 2905/1/2905 +f 2908/1/2908 2910/1/2910 2911/1/2911 +f 2947/1/2947 2943/1/2943 2905/1/2905 +f 2945/1/2945 2910/1/2910 2916/1/2916 +f 2944/1/2944 2940/1/2940 2943/1/2943 +f 2939/1/2939 2940/1/2940 2936/1/2936 +f 2933/1/2933 2934/1/2934 2936/1/2936 +f 2933/1/2933 2919/1/2919 2930/1/2930 +f 2941/1/2941 2916/1/2916 2935/1/2935 +f 2916/1/2916 2915/1/2915 2918/1/2918 +f 2918/1/2918 2917/1/2917 2921/1/2921 +f 2921/1/2921 4369/1/4369 4367/1/4367 +f 4367/1/4367 4368/1/4368 4362/1/4362 +f 4362/1/4362 4360/1/4360 4358/1/4358 +f 4360/1/4360 4354/1/4354 4358/1/4358 +f 4354/1/4354 4353/1/4353 4351/1/4351 +f 4351/1/4351 4346/1/4346 4347/1/4347 +f 4355/1/4355 4352/1/4352 4357/1/4357 +f 4359/1/4359 4355/1/4355 4357/1/4357 +f 4363/1/4363 4359/1/4359 4364/1/4364 +f 4366/1/4366 4364/1/4364 2994/1/2994 +f 4370/1/4370 4365/1/4365 4371/1/4371 +f 2998/1/2998 3001/1/3001 3000/1/3000 +f 4371/1/4371 4373/1/4373 4372/1/4372 +f 3001/1/3001 4376/1/4376 4379/1/4379 +f 4374/1/4374 4375/1/4375 4373/1/4373 +f 4376/1/4376 4377/1/4377 4378/1/4378 +f 4356/1/4356 4350/1/4350 4375/1/4375 +f 4377/1/4377 4349/1/4349 4378/1/4378 +f 4347/1/4347 4348/1/4348 4350/1/4350 +f 4349/1/4349 2963/1/2963 3121/1/3121 +f 2963/1/2963 2964/1/2964 3121/1/3121 +f 3121/1/3121 2964/1/2964 4435/1/4435 +f 4345/1/4345 2958/1/2958 4348/1/4348 +f 2963/1/2963 2959/1/2959 2964/1/2964 +f 2956/1/2956 2955/1/2955 2958/1/2958 +f 2955/1/2955 2957/1/2957 2960/1/2960 +f 2960/1/2960 2938/1/2938 2961/1/2961 +f 2959/1/2959 2962/1/2962 2964/1/2964 +f 2961/1/2961 2966/1/2966 2965/1/2965 +f 2968/1/2968 2967/1/2967 4434/1/4434 +f 2964/1/2964 2968/1/2968 4435/1/4435 +f 3121/1/3121 4435/1/4435 4431/1/4431 +f 4349/1/4349 3121/1/3121 4380/1/4380 +f 3119/1/3119 4380/1/4380 3113/1/3113 +f 3118/1/3118 3113/1/3113 3117/1/3117 +f 3003/1/3003 3117/1/3117 3005/1/3005 +f 3004/1/3004 3005/1/3005 3006/1/3006 +f 2988/1/2988 2999/1/2999 3004/1/3004 +f 2993/1/2993 2999/1/2999 2988/1/2988 +f 2992/1/2992 2997/1/2997 2993/1/2993 +f 2991/1/2991 2995/1/2995 2992/1/2992 +f 2994/1/2994 2996/1/2996 2991/1/2991 +f 2925/1/2925 4366/1/4366 2994/1/2994 +f 2923/1/2923 2922/1/2922 2925/1/2925 +f 2924/1/2924 2920/1/2920 2923/1/2923 +f 2928/1/2928 2919/1/2919 2924/1/2924 +f 2928/1/2928 2931/1/2931 2932/1/2932 +f 2961/1/2961 2931/1/2931 2966/1/2966 +f 2929/1/2929 2927/1/2927 2970/1/2970 +f 2971/1/2971 2969/1/2969 2966/1/2966 +f 2972/1/2972 2927/1/2927 2973/1/2973 +f 2974/1/2974 2976/1/2976 2969/1/2969 +f 4433/1/4433 2976/1/2976 4428/1/4428 +f 4423/1/4423 4424/1/4424 4428/1/4428 +f 4423/1/4423 2978/1/2978 4419/1/4419 +f 2975/1/2975 2973/1/2973 4422/1/4422 +f 2973/1/2973 2926/1/2926 2977/1/2977 +f 2977/1/2977 2979/1/2979 2981/1/2981 +f 2981/1/2981 2987/1/2987 2986/1/2986 +f 2986/1/2986 2989/1/2989 2990/1/2990 +f 2990/1/2990 3007/1/3007 3008/1/3008 +f 3007/1/3007 3010/1/3010 3008/1/3008 +f 3010/1/3010 3114/1/3114 3110/1/3110 +f 3110/1/3110 3112/1/3112 3108/1/3108 +f 3011/1/3011 3111/1/3111 3017/1/3017 +f 3012/1/3012 3011/1/3011 3017/1/3017 +f 3009/1/3009 3012/1/3012 3013/1/3013 +f 2984/1/2984 3013/1/3013 3014/1/3014 +f 3016/1/3016 3015/1/3015 3018/1/3018 +f 3026/1/3026 3027/1/3027 3032/1/3032 +f 3018/1/3018 3025/1/3025 3022/1/3022 +f 3027/1/3027 3033/1/3033 3034/1/3034 +f 3024/1/3024 3116/1/3116 3025/1/3025 +f 3033/1/3033 3045/1/3045 3043/1/3043 +f 3115/1/3115 3106/1/3106 3116/1/3116 +f 3045/1/3045 3046/1/3046 3043/1/3043 +f 3108/1/3108 3107/1/3107 3106/1/3106 +f 3046/1/3046 4383/1/4383 4384/1/4384 +f 4383/1/4383 4438/1/4438 4384/1/4384 +f 4384/1/4384 4438/1/4438 4441/1/4441 +f 3109/1/3109 4382/1/4382 3107/1/3107 +f 4383/1/4383 4436/1/4436 4438/1/4438 +f 4381/1/4381 4432/1/4432 4382/1/4382 +f 4432/1/4432 4429/1/4429 4430/1/4430 +f 4430/1/4430 4425/1/4425 4426/1/4426 +f 4436/1/4436 4437/1/4437 4438/1/4438 +f 4426/1/4426 4443/1/4443 4439/1/4439 +f 4440/1/4440 4442/1/4442 4447/1/4447 +f 4438/1/4438 4440/1/4440 4441/1/4441 +f 4384/1/4384 4441/1/4441 4450/1/4450 +f 3046/1/3046 4384/1/4384 3044/1/3044 +f 3042/1/3042 3044/1/3044 3047/1/3047 +f 3041/1/3041 3047/1/3047 3048/1/3048 +f 3039/1/3039 3048/1/3048 3052/1/3052 +f 3040/1/3040 3052/1/3052 3090/1/3090 +f 3038/1/3038 3036/1/3036 3040/1/3040 +f 3029/1/3029 3030/1/3030 3038/1/3038 +f 3021/1/3021 3028/1/3028 3029/1/3029 +f 3014/1/3014 3019/1/3019 3021/1/3021 +f 2985/1/2985 2984/1/2984 3014/1/3014 +f 2983/1/2983 2982/1/2982 2985/1/2985 +f 4416/1/4416 2980/1/2980 2983/1/2983 +f 4417/1/4417 2978/1/2978 4416/1/4416 +f 4417/1/4417 4420/1/4420 4421/1/4421 +f 4426/1/4426 4420/1/4420 4443/1/4443 +f 4418/1/4418 4415/1/4415 4446/1/4446 +f 4445/1/4445 4444/1/4444 4443/1/4443 +f 4458/1/4458 4415/1/4415 4414/1/4414 +f 4457/1/4457 4449/1/4449 4444/1/4444 +f 4448/1/4448 4449/1/4449 4452/1/4452 +f 4454/1/4454 4453/1/4453 4452/1/4452 +f 4454/1/4454 4412/1/4412 4413/1/4413 +f 4456/1/4456 4414/1/4414 4455/1/4455 +f 4414/1/4414 3091/1/3091 3089/1/3089 +f 3089/1/3089 3020/1/3020 3085/1/3085 +f 3085/1/3085 3088/1/3088 3084/1/3084 +f 3084/1/3084 3087/1/3087 3070/1/3070 +f 3070/1/3070 3061/1/3061 3060/1/3060 +f 3061/1/3061 3054/1/3054 3060/1/3060 +f 3054/1/3054 3051/1/3051 3053/1/3053 +f 3053/1/3053 3050/1/3050 3055/1/3055 +f 3059/1/3059 3058/1/3058 3062/1/3062 +f 3063/1/3063 3059/1/3059 3062/1/3062 +f 3068/1/3068 3063/1/3063 3069/1/3069 +f 3071/1/3071 3069/1/3069 3072/1/3072 +f 3073/1/3073 3067/1/3067 3066/1/3066 +f 3080/1/3080 3095/1/3095 3096/1/3096 +f 3066/1/3066 3092/1/3092 3079/1/3079 +f 3095/1/3095 3094/1/3094 3097/1/3097 +f 3065/1/3065 3093/1/3093 3092/1/3092 +f 3094/1/3094 3103/1/3103 3099/1/3099 +f 3064/1/3064 3057/1/3057 3093/1/3093 +f 3103/1/3103 3101/1/3101 3099/1/3099 +f 3055/1/3055 3056/1/3056 3057/1/3057 +f 3101/1/3101 4389/1/4389 4393/1/4393 +f 4389/1/4389 4390/1/4390 4393/1/4393 +f 4393/1/4393 4390/1/4390 4396/1/4396 +f 3049/1/3049 4386/1/4386 3056/1/3056 +f 4389/1/4389 4388/1/4388 4390/1/4390 +f 4385/1/4385 4387/1/4387 4386/1/4386 +f 4387/1/4387 4459/1/4459 4391/1/4391 +f 4391/1/4391 4400/1/4400 4397/1/4397 +f 4388/1/4388 4392/1/4392 4390/1/4390 +f 4397/1/4397 4399/1/4399 4394/1/4394 +f 4395/1/4395 4398/1/4398 4404/1/4404 +f 4390/1/4390 4395/1/4395 4396/1/4396 +f 4393/1/4393 4396/1/4396 4485/1/4485 +f 3101/1/3101 4393/1/4393 3102/1/3102 +f 3100/1/3100 3102/1/3102 3104/1/3104 +f 3253/1/3253 3104/1/3104 3252/1/3252 +f 3254/1/3254 3252/1/3252 3249/1/3249 +f 3250/1/3250 3249/1/3249 3246/1/3246 +f 3257/1/3257 3256/1/3256 3250/1/3250 +f 3258/1/3258 3259/1/3259 3257/1/3257 +f 3076/1/3076 3081/1/3081 3258/1/3258 +f 3072/1/3072 3074/1/3074 3076/1/3076 +f 3075/1/3075 3071/1/3071 3072/1/3072 +f 3264/1/3264 3083/1/3083 3075/1/3075 +f 4409/1/4409 3086/1/3086 3264/1/3264 +f 4408/1/4408 4412/1/4412 4409/1/4409 +f 4408/1/4408 4401/1/4401 4402/1/4402 +f 4397/1/4397 4401/1/4401 4399/1/4399 +f 4407/1/4407 4410/1/4410 4411/1/4411 +f 4460/1/4460 4403/1/4403 4399/1/4399 +f 4461/1/4461 4410/1/4410 4462/1/4462 +f 4464/1/4464 4405/1/4405 4403/1/4403 +f 4406/1/4406 4405/1/4405 4487/1/4487 +f 4489/1/4489 4488/1/4488 4487/1/4487 +f 4489/1/4489 4463/1/4463 4491/1/4491 +f 4465/1/4465 4462/1/4462 4490/1/4490 +f 4462/1/4462 3263/1/3263 3261/1/3261 +f 3261/1/3261 3077/1/3077 3260/1/3260 +f 3244/1/3244 3240/1/3240 3241/1/3241 +f 3244/1/3244 3241/1/3241 3267/1/3267 +f 3266/1/3266 3244/1/3244 3267/1/3267 +f 3260/1/3260 3245/1/3245 3243/1/3243 +f 3245/1/3245 3248/1/3248 3242/1/3242 +f 3242/1/3242 3234/1/3234 3236/1/3236 +f 3232/1/3232 3229/1/3229 3230/1/3230 +f 3247/1/3247 3235/1/3235 3234/1/3234 +f 3235/1/3235 3251/1/3251 3227/1/3227 +f 3227/1/3227 3228/1/3228 3226/1/3226 +f 3229/1/3229 3224/1/3224 3230/1/3230 +f 3232/1/3232 3230/1/3230 3233/1/3233 +f 3237/1/3237 3232/1/3232 3233/1/3233 +f 3240/1/3240 3237/1/3237 3241/1/3241 +f 3272/1/3272 3274/1/3274 3275/1/3275 +f 3272/1/3272 3275/1/3275 3273/1/3273 +f 3238/1/3238 3239/1/3239 3271/1/3271 +f 3239/1/3239 3231/1/3231 3280/1/3280 +f 3231/1/3231 3222/1/3222 3280/1/3280 +f 3223/1/3223 3219/1/3219 3216/1/3216 +f 3225/1/3225 3220/1/3220 3222/1/3222 +f 3226/1/3226 3221/1/3221 3220/1/3220 +f 3105/1/3105 4478/1/4478 3221/1/3221 +f 4472/1/4472 4475/1/4475 4473/1/4473 +f 4472/1/4472 4473/1/4473 4469/1/4469 +f 4486/1/4486 4480/1/4480 4478/1/4478 +f 4480/1/4480 4482/1/4482 4479/1/4479 +f 4479/1/4479 4483/1/4483 4481/1/4481 +f 4475/1/4475 4477/1/4477 4473/1/4473 +f 4481/1/4481 4499/1/4499 4476/1/4476 +f 4474/1/4474 4502/1/4502 4506/1/4506 +f 4473/1/4473 4474/1/4474 4470/1/4470 +f 4469/1/4469 4473/1/4473 4470/1/4470 +f 3217/1/3217 4472/1/4472 4469/1/4469 +f 3219/1/3219 3217/1/3217 3216/1/3216 +f 3223/1/3223 3216/1/3216 3281/1/3281 +f 3278/1/3278 3223/1/3223 3281/1/3281 +f 3274/1/3274 3278/1/3278 3275/1/3275 +f 3273/1/3273 3275/1/3275 3276/1/3276 +f 3268/1/3268 3272/1/3272 3273/1/3273 +f 3267/1/3267 3241/1/3241 3268/1/3268 +f 3269/1/3269 3277/1/3277 3332/1/3332 +f 3277/1/3277 3287/1/3287 3332/1/3332 +f 3289/1/3289 3285/1/3285 3288/1/3288 +f 3289/1/3289 3288/1/3288 3293/1/3293 +f 3279/1/3279 3283/1/3283 3287/1/3287 +f 3283/1/3283 3282/1/3282 3284/1/3284 +f 3284/1/3284 3218/1/3218 3213/1/3213 +f 3285/1/3285 3286/1/3286 3288/1/3288 +f 3293/1/3293 3288/1/3288 3294/1/3294 +f 3304/1/3304 3289/1/3289 3293/1/3293 +f 3331/1/3331 3304/1/3304 3303/1/3303 +f 3270/1/3270 3331/1/3331 3303/1/3303 +f 4529/1/4529 3267/1/3267 3270/1/3270 +f 3266/1/3266 3267/1/3267 4529/1/4529 +f 3265/1/3265 3244/1/3244 3266/1/3266 +f 4493/1/4493 3262/1/3262 3265/1/3265 +f 4492/1/4492 4463/1/4463 4493/1/4493 +f 4492/1/4492 4496/1/4496 4494/1/4494 +f 4481/1/4481 4496/1/4496 4499/1/4499 +f 4495/1/4495 4497/1/4497 4498/1/4498 +f 4500/1/4500 4501/1/4501 4499/1/4499 +f 4504/1/4504 4505/1/4505 4501/1/4501 +f 4503/1/4503 4497/1/4497 4510/1/4510 +f 4509/1/4509 4505/1/4505 4504/1/4504 +f 4467/1/4467 4505/1/4505 4508/1/4508 +f 4512/1/4512 4513/1/4513 4508/1/4508 +f 4507/1/4507 4510/1/4510 4511/1/4511 +f 4514/1/4514 4513/1/4513 4512/1/4512 +f 4468/1/4468 4513/1/4513 4516/1/4516 +f 4517/1/4517 4516/1/4516 4518/1/4518 +f 4471/1/4471 4517/1/4517 4518/1/4518 +f 3211/1/3211 4466/1/4466 4471/1/4471 +f 3212/1/3212 3211/1/3211 3210/1/3210 +f 3213/1/3213 3210/1/3210 3214/1/3214 +f 3290/1/3290 3214/1/3214 3292/1/3292 +f 3291/1/3291 3292/1/3292 3295/1/3295 +f 3296/1/3296 3291/1/3291 3295/1/3295 +f 3300/1/3300 3296/1/3296 3301/1/3301 +f 3302/1/3302 3300/1/3300 3301/1/3301 +f 3330/1/3330 3302/1/3302 3312/1/3312 +f 4528/1/4528 3312/1/3312 4530/1/4530 +f 4523/1/4523 4527/1/4527 4528/1/4528 +f 4520/1/4520 4511/1/4511 4523/1/4523 +f 4520/1/4520 4521/1/4521 4515/1/4515 +f 4519/1/4519 4521/1/4521 4524/1/4524 +f 4522/1/4522 4526/1/4526 4525/1/4525 +f 4535/1/4535 4537/1/4537 4524/1/4524 +f 4536/1/4536 3356/1/3356 4537/1/4537 +f 4534/1/4534 4526/1/4526 4531/1/4531 +f 3357/1/3357 3356/1/3356 4536/1/4536 +f 3352/1/3352 3355/1/3355 3353/1/3353 +f 3352/1/3352 3350/1/3350 3355/1/3355 +f 3349/1/3349 3350/1/3350 3352/1/3352 +f 4649/1/4649 4537/1/4537 3356/1/3356 +f 3360/1/3360 4648/1/4648 4649/1/4649 +f 3361/1/3361 4646/1/4646 3360/1/3360 +f 3204/1/3204 4647/1/4647 3361/1/3361 +f 3206/1/3206 3209/1/3209 3204/1/3204 +f 3215/1/3215 3206/1/3206 3205/1/3205 +f 3297/1/3297 3205/1/3205 3320/1/3320 +f 3298/1/3298 3320/1/3320 3318/1/3318 +f 3299/1/3299 3298/1/3298 3306/1/3306 +f 3305/1/3305 3306/1/3306 3308/1/3308 +f 3307/1/3307 3305/1/3305 3308/1/3308 +f 3310/1/3310 3309/1/3309 3313/1/3313 +f 3315/1/3315 3323/1/3323 3325/1/3325 +f 3309/1/3309 3319/1/3319 3313/1/3313 +f 3319/1/3319 3321/1/3321 3322/1/3322 +f 3322/1/3322 3207/1/3207 3208/1/3208 +f 3323/1/3323 3324/1/3324 3325/1/3325 +f 3315/1/3315 3325/1/3325 3317/1/3317 +f 3316/1/3316 3315/1/3315 3317/1/3317 +f 3311/1/3311 3314/1/3314 3316/1/3316 +f 4532/1/4532 3307/1/3307 3311/1/3311 +f 4614/1/4614 4615/1/4615 4612/1/4612 +f 4612/1/4612 4616/1/4616 4617/1/4617 +f 4618/1/4618 4621/1/4621 4620/1/4620 +f 4621/1/4621 4622/1/4622 4620/1/4620 +f 4616/1/4616 4619/1/4619 4617/1/4617 +f 4621/1/4621 4628/1/4628 4624/1/4624 +f 4623/1/4623 3328/1/3328 4619/1/4619 +f 4628/1/4628 3329/1/3329 4624/1/4624 +f 3326/1/3326 3327/1/3327 3328/1/3328 +f 3208/1/3208 3201/1/3201 3327/1/3327 +f 3203/1/3203 3202/1/3202 3201/1/3201 +f 3202/1/3202 3359/1/3359 3149/1/3149 +f 3149/1/3149 3358/1/3358 3150/1/3150 +f 3150/1/3150 3355/1/3355 3350/1/3350 +f 3151/1/3151 3152/1/3152 3146/1/3146 +f 3145/1/3145 3151/1/3151 3146/1/3146 +f 3148/1/3148 3145/1/3145 3144/1/3144 +f 3200/1/3200 3148/1/3148 3144/1/3144 +f 3329/1/3329 3200/1/3200 4626/1/4626 +f 4624/1/4624 3329/1/3329 4626/1/4626 +f 4621/1/4621 4624/1/4624 4622/1/4622 +f 4620/1/4620 4622/1/4622 4609/1/4609 +f 4603/1/4603 4625/1/4625 4604/1/4604 +f 4604/1/4604 4627/1/4627 4629/1/4629 +f 4600/1/4600 4602/1/4602 4597/1/4597 +f 4600/1/4600 4597/1/4597 4596/1/4596 +f 4595/1/4595 4629/1/4629 4594/1/4594 +f 4591/1/4591 4592/1/4592 4586/1/4586 +f 4596/1/4596 4597/1/4597 4591/1/4591 +f 4601/1/4601 4600/1/4600 4596/1/4596 +f 4606/1/4606 4605/1/4605 4601/1/4601 +f 4607/1/4607 4605/1/4605 4606/1/4606 +f 4610/1/4610 4609/1/4609 4607/1/4607 +f 4611/1/4611 4613/1/4613 4610/1/4610 +f 4538/1/4538 4611/1/4611 4539/1/4539 +f 4533/1/4533 4532/1/4532 4538/1/4538 +f 4531/1/4531 4533/1/4533 3351/1/3351 +f 3352/1/3352 3351/1/3351 3349/1/3349 +f 3155/1/3155 3350/1/3350 3349/1/3349 +f 3153/1/3153 3155/1/3155 3156/1/3156 +f 3153/1/3153 3156/1/3156 3157/1/3157 +f 3344/1/3344 3157/1/3157 3345/1/3345 +f 3345/1/3345 3343/1/3343 3344/1/3344 +f 3347/1/3347 3348/1/3348 3346/1/3346 +f 3348/1/3348 3354/1/3354 3362/1/3362 +f 3344/1/3344 3343/1/3343 3341/1/3341 +f 3341/1/3341 3163/1/3163 3344/1/3344 +f 3159/1/3159 3163/1/3163 3162/1/3162 +f 3158/1/3158 3159/1/3159 3162/1/3162 +f 3142/1/3142 3158/1/3158 3160/1/3160 +f 3140/1/3140 3141/1/3141 3142/1/3142 +f 3199/1/3199 3140/1/3140 3198/1/3198 +f 4594/1/4594 3198/1/3198 4593/1/4593 +f 4587/1/4587 4593/1/4593 4584/1/4584 +f 4579/1/4579 4584/1/4584 4577/1/4577 +f 4583/1/4583 4584/1/4584 4579/1/4579 +f 4585/1/4585 4583/1/4583 4582/1/4582 +f 4588/1/4588 4585/1/4585 4582/1/4582 +f 4589/1/4589 4585/1/4585 4588/1/4588 +f 4598/1/4598 4590/1/4590 4589/1/4589 +f 4542/1/4542 4599/1/4599 4598/1/4598 +f 4540/1/4540 4608/1/4608 4542/1/4542 +f 3362/1/3362 4540/1/4540 3363/1/3363 +f 4541/1/4541 4544/1/4544 4545/1/4545 +f 4545/1/4545 4581/1/4581 4580/1/4580 +f 4580/1/4580 4578/1/4578 4572/1/4572 +f 4572/1/4572 4573/1/4573 4569/1/4569 +f 4548/1/4548 4571/1/4571 4549/1/4549 +f 4569/1/4569 4565/1/4565 4566/1/4566 +f 4569/1/4569 4570/1/4570 4565/1/4565 +f 4568/1/4568 4576/1/4576 4631/1/4631 +f 4574/1/4574 4575/1/4575 4570/1/4570 +f 4576/1/4576 3196/1/3196 4631/1/4631 +f 4630/1/4630 3197/1/3197 4575/1/4575 +f 3197/1/3197 3143/1/3143 3168/1/3168 +f 3143/1/3143 3165/1/3165 3168/1/3168 +f 3165/1/3165 3161/1/3161 3166/1/3166 +f 3166/1/3166 3161/1/3161 3167/1/3167 +f 3170/1/3170 3171/1/3171 3177/1/3177 +f 3180/1/3180 3177/1/3177 3179/1/3179 +f 3185/1/3185 3169/1/3169 3180/1/3180 +f 3196/1/3196 3185/1/3185 3833/1/3833 +f 4631/1/4631 3196/1/3196 3833/1/3833 +f 4568/1/4568 4631/1/4631 4567/1/4567 +f 4564/1/4564 4568/1/4568 4567/1/4567 +f 4563/1/4563 4564/1/4564 4561/1/4561 +f 4551/1/4551 4561/1/4561 4556/1/4556 +f 4550/1/4550 4553/1/4553 4551/1/4551 +f 4546/1/4546 4549/1/4549 4550/1/4550 +f 4543/1/4543 4547/1/4547 4546/1/4546 +f 3337/1/3337 4543/1/4543 3338/1/3338 +f 3339/1/3339 3363/1/3363 3337/1/3337 +f 3342/1/3342 3339/1/3339 3340/1/3340 +f 3340/1/3340 3164/1/3164 3342/1/3342 +f 3161/1/3161 3164/1/3164 3167/1/3167 +f 3166/1/3166 3167/1/3167 3172/1/3172 +f 3174/1/3174 3335/1/3335 3173/1/3173 +f 3175/1/3175 3172/1/3172 3176/1/3176 +f 3178/1/3178 3175/1/3175 3182/1/3182 +f 3333/1/3333 3183/1/3183 3182/1/3182 +f 3334/1/3334 3335/1/3335 3336/1/3336 +f 3366/1/3366 3183/1/3183 3333/1/3333 +f 3191/1/3191 3183/1/3183 3195/1/3195 +f 3369/1/3369 3194/1/3194 3195/1/3195 +f 3367/1/3367 3364/1/3364 3368/1/3368 +f 3336/1/3336 3365/1/3365 3364/1/3364 +f 3365/1/3365 4046/1/4046 4045/1/4045 +f 4045/1/4045 4552/1/4552 4041/1/4041 +f 4552/1/4552 4554/1/4554 4555/1/4555 +f 4559/1/4559 4558/1/4558 4560/1/4560 +f 4554/1/4554 4557/1/4557 4555/1/4555 +f 4558/1/4558 4637/1/4637 4643/1/4643 +f 4562/1/4562 4636/1/4636 4557/1/4557 +f 4636/1/4636 4634/1/4634 4635/1/4635 +f 4635/1/4635 4632/1/4632 4633/1/4633 +f 4637/1/4637 4638/1/4638 4643/1/4643 +f 4558/1/4558 4643/1/4643 4560/1/4560 +f 4043/1/4043 4560/1/4560 4044/1/4044 +f 4042/1/4042 4043/1/4043 4038/1/4038 +f 4031/1/4031 4035/1/4035 4032/1/4032 +f 4035/1/4035 4047/1/4047 4032/1/4032 +f 4032/1/4032 4047/1/4047 4030/1/4030 +f 4039/1/4039 4040/1/4040 4034/1/4034 +f 4035/1/4035 4051/1/4051 4047/1/4047 +f 4051/1/4051 4050/1/4050 4047/1/4047 +f 4047/1/4047 4050/1/4050 4048/1/4048 +f 4050/1/4050 4049/1/4049 4048/1/4048 +f 4052/1/4052 4049/1/4049 4050/1/4050 +f 4644/1/4644 4053/1/4053 4040/1/4040 +f 4051/1/4051 4052/1/4052 4050/1/4050 +f 4644/1/4644 4640/1/4640 4053/1/4053 +f 4052/1/4052 4641/1/4641 4049/1/4049 +f 4642/1/4642 4639/1/4639 4640/1/4640 +f 4641/1/4641 3831/1/3831 4049/1/4049 +f 4049/1/4049 3831/1/3831 3829/1/3829 +f 4633/1/4633 3832/1/3832 4639/1/4639 +f 3832/1/3832 3186/1/3186 3189/1/3189 +f 3189/1/3189 3184/1/3184 3188/1/3188 +f 3188/1/3188 3187/1/3187 3190/1/3190 +f 3828/1/3828 3193/1/3193 3824/1/3824 +f 3831/1/3831 3828/1/3828 3829/1/3829 +f 4049/1/4049 3829/1/3829 3852/1/3852 +f 4048/1/4048 4049/1/4049 3852/1/3852 +f 4047/1/4047 4048/1/4048 4029/1/4029 +f 4047/1/4047 4029/1/4029 4030/1/4030 +f 4028/1/4028 4032/1/4032 4030/1/4030 +f 4023/1/4023 4020/1/4020 4016/1/4016 +f 4026/1/4026 4021/1/4021 4022/1/4022 +f 4021/1/4021 3853/1/3853 3854/1/3854 +f 3854/1/3854 3850/1/3850 3851/1/3851 +f 4020/1/4020 4019/1/4019 4018/1/4018 +f 4020/1/4020 4018/1/4018 4016/1/4016 +f 4015/1/4015 4023/1/4023 4016/1/4016 +f 4024/1/4024 4023/1/4023 4015/1/4015 +f 4027/1/4027 4025/1/4025 4024/1/4024 +f 4033/1/4033 4028/1/4028 4027/1/4027 +f 4036/1/4036 4038/1/4038 4033/1/4033 +f 3374/1/3374 4036/1/4036 3375/1/3375 +f 3370/1/3370 3376/1/3376 3374/1/3374 +f 3369/1/3369 3370/1/3370 3371/1/3371 +f 3371/1/3371 3194/1/3194 3369/1/3369 +f 3190/1/3190 3194/1/3194 3836/1/3836 +f 3825/1/3825 3836/1/3836 3826/1/3826 +f 3372/1/3372 3373/1/3373 3848/1/3848 +f 3821/1/3821 3826/1/3826 3838/1/3838 +f 3818/1/3818 3821/1/3821 3822/1/3822 +f 3818/1/3818 3822/1/3822 3817/1/3817 +f 3839/1/3839 3817/1/3817 3822/1/3822 +f 3837/1/3837 3373/1/3373 3840/1/3840 +f 3842/1/3842 3817/1/3817 3839/1/3839 +f 3818/1/3818 3817/1/3817 3811/1/3811 +f 3813/1/3813 3818/1/3818 3811/1/3811 +f 3812/1/3812 3819/1/3819 3813/1/3813 +f 3827/1/3827 3812/1/3812 3807/1/3807 +f 3830/1/3830 3807/1/3807 3834/1/3834 +f 3851/1/3851 3834/1/3834 3855/1/3855 +f 3858/1/3858 3855/1/3855 3857/1/3857 +f 3867/1/3867 3857/1/3857 3860/1/3860 +f 4014/1/4014 4017/1/4017 3867/1/3867 +f 4013/1/4013 4014/1/4014 4012/1/4012 +f 4008/1/4008 4013/1/4013 4012/1/4012 +f 4009/1/4009 3869/1/3869 3870/1/3870 +f 3869/1/3869 3866/1/3866 3870/1/3870 +f 3866/1/3866 3861/1/3861 3865/1/3865 +f 3861/1/3861 3856/1/3856 3859/1/3859 +f 3871/1/3871 3864/1/3864 3872/1/3872 +f 3868/1/3868 3871/1/3871 3874/1/3874 +f 3880/1/3880 3868/1/3868 3874/1/3874 +f 4006/1/4006 4007/1/4007 3880/1/3880 +f 4005/1/4005 4008/1/4008 4006/1/4006 +f 4010/1/4010 4011/1/4011 4005/1/4005 +f 3846/1/3846 4037/1/4037 4010/1/4010 +f 3840/1/3840 3846/1/3846 3841/1/3841 +f 3843/1/3843 3841/1/3841 3844/1/3844 +f 3844/1/3844 3816/1/3816 3843/1/3843 +f 3814/1/3814 3816/1/3816 3815/1/3815 +f 3810/1/3810 3814/1/3814 3815/1/3815 +f 3808/1/3808 3810/1/3810 3809/1/3809 +f 3806/1/3806 3808/1/3808 3809/1/3809 +f 3779/1/3779 3776/1/3776 3775/1/3775 +f 3775/1/3775 3776/1/3776 3772/1/3772 +f 3778/1/3778 3777/1/3777 3781/1/3781 +f 3780/1/3780 3778/1/3778 3781/1/3781 +f 3783/1/3783 3780/1/3780 3784/1/3784 +f 3835/1/3835 3806/1/3806 3783/1/3783 +f 3859/1/3859 3835/1/3835 3862/1/3862 +f 3875/1/3875 3862/1/3862 3918/1/3918 +f 3873/1/3873 3875/1/3875 3878/1/3878 +f 3877/1/3877 3878/1/3878 3882/1/3882 +f 3881/1/3881 3877/1/3877 3882/1/3882 +f 3887/1/3887 3879/1/3879 3881/1/3881 +f 3849/1/3849 4004/1/4004 3887/1/3887 +f 3765/1/3765 3849/1/3849 3761/1/3761 +f 3766/1/3766 3847/1/3847 3765/1/3765 +f 3845/1/3845 3766/1/3766 3774/1/3774 +f 3774/1/3774 3773/1/3773 3845/1/3845 +f 3776/1/3776 3773/1/3773 3772/1/3772 +f 3775/1/3775 3772/1/3772 3771/1/3771 +f 3768/1/3768 3764/1/3764 3769/1/3769 +f 3770/1/3770 3771/1/3771 3767/1/3767 +f 3782/1/3782 3770/1/3770 3796/1/3796 +f 3763/1/3763 3793/1/3793 3796/1/3796 +f 3762/1/3762 3764/1/3764 3760/1/3760 +f 3797/1/3797 3793/1/3793 3763/1/3763 +f 3792/1/3792 3793/1/3793 3794/1/3794 +f 3792/1/3792 3794/1/3794 3795/1/3795 +f 3801/1/3801 3795/1/3795 3800/1/3800 +f 3798/1/3798 3756/1/3756 3799/1/3799 +f 3760/1/3760 3757/1/3757 3756/1/3756 +f 3757/1/3757 3759/1/3759 3758/1/3758 +f 3679/1/3679 3897/1/3897 3680/1/3680 +f 3759/1/3759 3888/1/3888 3758/1/3758 +f 3888/1/3888 3885/1/3885 3889/1/3889 +f 3889/1/3889 3886/1/3886 3890/1/3890 +f 3886/1/3886 3891/1/3891 3890/1/3890 +f 3894/1/3894 3893/1/3893 3901/1/3901 +f 3894/1/3894 3901/1/3901 3899/1/3899 +f 3884/1/3884 3892/1/3892 3891/1/3891 +f 3883/1/3883 3917/1/3917 3892/1/3892 +f 3917/1/3917 3863/1/3863 3916/1/3916 +f 3893/1/3893 3915/1/3915 3901/1/3901 +f 3899/1/3899 3901/1/3901 3902/1/3902 +f 3895/1/3895 3894/1/3894 3899/1/3899 +f 3896/1/3896 3895/1/3895 3898/1/3898 +f 3897/1/3897 3898/1/3898 3680/1/3680 +f 4003/1/4003 3900/1/3900 3904/1/3904 +f 3904/1/3904 3903/1/3903 3905/1/3905 +f 3681/1/3681 3906/1/3906 3678/1/3678 +f 3676/1/3676 3688/1/3688 3685/1/3685 +f 3688/1/3688 3686/1/3686 3685/1/3685 +f 3685/1/3685 3686/1/3686 3684/1/3684 +f 3686/1/3686 3687/1/3687 3684/1/3684 +f 3689/1/3689 3687/1/3687 3686/1/3686 +f 3905/1/3905 3690/1/3690 3682/1/3682 +f 3688/1/3688 3689/1/3689 3686/1/3686 +f 3905/1/3905 3909/1/3909 3690/1/3690 +f 3689/1/3689 3910/1/3910 3687/1/3687 +f 3907/1/3907 3908/1/3908 3909/1/3909 +f 3914/1/3914 3912/1/3912 3908/1/3908 +f 3916/1/3916 3787/1/3787 3912/1/3912 +f 3787/1/3787 3785/1/3785 3788/1/3788 +f 3788/1/3788 3789/1/3789 3790/1/3790 +f 3792/1/3792 3795/1/3795 3790/1/3790 +f 3803/1/3803 3804/1/3804 4002/1/4002 +f 3791/1/3791 4002/1/4002 3927/1/3927 +f 3913/1/3913 3927/1/3927 3921/1/3921 +f 3911/1/3911 3805/1/3805 3913/1/3913 +f 3910/1/3910 3911/1/3911 3687/1/3687 +f 3684/1/3684 3687/1/3687 3627/1/3627 +f 3685/1/3685 3684/1/3684 3683/1/3683 +f 3668/1/3668 3683/1/3683 3669/1/3669 +f 3665/1/3665 3668/1/3668 3669/1/3669 +f 3666/1/3666 3667/1/3667 3665/1/3665 +f 3671/1/3671 3667/1/3667 3666/1/3666 +f 3674/1/3674 3675/1/3675 3671/1/3671 +f 3677/1/3677 3678/1/3678 3674/1/3674 +f 3679/1/3679 3680/1/3680 3677/1/3677 +f 3755/1/3755 3679/1/3679 3751/1/3751 +f 3753/1/3753 3755/1/3755 3751/1/3751 +f 3800/1/3800 3753/1/3753 3801/1/3801 +f 3801/1/3801 3802/1/3802 3795/1/3795 +f 3928/1/3928 3802/1/3802 4000/1/4000 +f 3752/1/3752 3750/1/3750 3754/1/3754 +f 3998/1/3998 4000/1/4000 3999/1/3999 +f 3996/1/3996 3931/1/3931 3998/1/3998 +f 3993/1/3993 3992/1/3992 3996/1/3996 +f 3997/1/3997 3995/1/3995 3994/1/3994 +f 3750/1/3750 3749/1/3749 3995/1/3995 +f 3749/1/3749 3673/1/3673 3672/1/3672 +f 3672/1/3672 3670/1/3670 3657/1/3657 +f 3657/1/3657 3661/1/3661 3658/1/3658 +f 3658/1/3658 3660/1/3660 3659/1/3659 +f 3660/1/3660 3662/1/3662 3659/1/3659 +f 3643/1/3643 3644/1/3644 3640/1/3640 +f 3644/1/3644 3664/1/3664 3631/1/3631 +f 3663/1/3663 3626/1/3626 3662/1/3662 +f 3664/1/3664 3624/1/3624 3631/1/3631 +f 3625/1/3625 3621/1/3621 3626/1/3626 +f 3621/1/3621 3622/1/3622 3623/1/3623 +f 3623/1/3623 3919/1/3919 3920/1/3920 +f 3624/1/3624 3628/1/3628 3629/1/3629 +f 3629/1/3629 3634/1/3634 3632/1/3632 +f 3637/1/3637 3636/1/3636 3633/1/3633 +f 3634/1/3634 3638/1/3638 3639/1/3639 +f 3744/1/3744 3745/1/3745 3638/1/3638 +f 3723/1/3723 3745/1/3745 3744/1/3744 +f 3721/1/3721 3745/1/3745 3723/1/3723 +f 3720/1/3720 3721/1/3721 3714/1/3714 +f 3746/1/3746 3745/1/3745 3721/1/3721 +f 3648/1/3648 3745/1/3745 3746/1/3746 +f 3647/1/3647 3642/1/3642 3648/1/3648 +f 3646/1/3646 3642/1/3642 3647/1/3647 +f 3651/1/3651 3645/1/3645 3646/1/3646 +f 3653/1/3653 3652/1/3652 3651/1/3651 +f 3656/1/3656 3653/1/3653 3654/1/3654 +f 3747/1/3747 3656/1/3656 3654/1/3654 +f 3991/1/3991 3748/1/3748 3747/1/3747 +f 3993/1/3993 3991/1/3991 3990/1/3990 +f 3989/1/3989 3938/1/3938 3990/1/3990 +f 3938/1/3938 3934/1/3934 3932/1/3932 +f 3941/1/3941 3936/1/3936 3937/1/3937 +f 3930/1/3930 3932/1/3932 3934/1/3934 +f 3930/1/3930 3924/1/3924 3920/1/3920 +f 3935/1/3935 3923/1/3923 3933/1/3933 +f 3942/1/3942 3923/1/3923 3935/1/3935 +f 3942/1/3942 3925/1/3925 3923/1/3923 +f 3924/1/3924 3630/1/3630 3922/1/3922 +f 3635/1/3635 3633/1/3633 3630/1/3630 +f 3923/1/3923 3925/1/3925 3727/1/3727 +f 3727/1/3727 3925/1/3925 3968/1/3968 +f 3727/1/3727 3968/1/3968 3969/1/3969 +f 3635/1/3635 3637/1/3637 3633/1/3633 +f 3637/1/3637 3722/1/3722 3636/1/3636 +f 3718/1/3718 3719/1/3719 3722/1/3722 +f 3717/1/3717 3715/1/3715 3718/1/3718 +f 3725/1/3725 3716/1/3716 3717/1/3717 +f 3724/1/3724 3727/1/3727 3726/1/3726 +f 3726/1/3726 3727/1/3727 3969/1/3969 +f 3725/1/3725 3728/1/3728 3729/1/3729 +f 3729/1/3729 3732/1/3732 3733/1/3733 +f 3736/1/3736 3735/1/3735 3732/1/3732 +f 3741/1/3741 3739/1/3739 3734/1/3734 +f 3741/1/3741 2630/1/2630 3739/1/3739 +f 2623/1/2623 2630/1/2630 3741/1/3741 +f 3736/1/3736 3738/1/3738 3735/1/3735 +f 2630/1/2630 2629/1/2629 3739/1/3739 +f 2630/1/2630 2622/1/2622 2629/1/2629 +f 2622/1/2622 2628/1/2628 2629/1/2629 +f 2622/1/2622 2627/1/2627 2628/1/2628 +f 3737/1/3737 3735/1/3735 3738/1/3738 +f 3706/1/3706 3735/1/3735 3737/1/3737 +f 3701/1/3701 3705/1/3705 3706/1/3706 +f 3702/1/3702 3705/1/3705 3701/1/3701 +f 3700/1/3700 3707/1/3707 3702/1/3702 +f 3697/1/3697 3710/1/3710 3700/1/3700 +f 3694/1/3694 3713/1/3713 3697/1/3697 +f 3650/1/3650 3695/1/3695 3694/1/3694 +f 3649/1/3649 3650/1/3650 3655/1/3655 +f 3693/1/3693 3655/1/3655 3692/1/3692 +f 3986/1/3986 3693/1/3693 3692/1/3692 +f 3987/1/3987 3988/1/3988 3986/1/3986 +f 3987/1/3987 3941/1/3941 3937/1/3937 +f 3947/1/3947 3948/1/3948 3985/1/3985 +f 3939/1/3939 3936/1/3936 3941/1/3941 +f 3947/1/3947 3943/1/3943 3948/1/3948 +f 3946/1/3946 3943/1/3943 3947/1/3947 +f 3939/1/3939 3940/1/3940 3936/1/3936 +f 3935/1/3935 3940/1/3940 3942/1/3942 +f 3946/1/3946 3945/1/3945 3943/1/3943 +f 3944/1/3944 3925/1/3925 3942/1/3942 +f 3944/1/3944 3968/1/3968 3925/1/3925 +f 3969/1/3969 3968/1/3968 3731/1/3731 +f 3965/1/3965 3970/1/3970 3731/1/3731 +f 3966/1/3966 3970/1/3970 3965/1/3965 +f 3967/1/3967 3945/1/3945 3949/1/3949 +f 3965/1/3965 3963/1/3963 3962/1/3962 +f 3965/1/3965 3962/1/3962 3966/1/3966 +f 3966/1/3966 3972/1/3972 3970/1/3970 +f 3971/1/3971 3972/1/3972 3973/1/3973 +f 4917/1/4917 4919/1/4919 3975/1/3975 +f 3971/1/3971 3973/1/3973 3742/1/3742 +f 3741/1/3741 3742/1/3742 2623/1/2623 +f 2623/1/2623 2622/1/2622 2630/1/2630 +f 2621/1/2621 2625/1/2625 2622/1/2622 +f 2566/1/2566 2624/1/2624 2621/1/2621 +f 2620/1/2620 3743/1/3743 2569/1/2569 +f 2565/1/2565 2560/1/2560 2566/1/2566 +f 2560/1/2560 2554/1/2554 2566/1/2566 +f 2564/1/2564 2561/1/2561 2559/1/2559 +f 2561/1/2561 2558/1/2558 2559/1/2559 +f 2563/1/2563 2558/1/2558 2561/1/2561 +f 2563/1/2563 2562/1/2562 2558/1/2558 +f 2562/1/2562 2557/1/2557 2558/1/2558 +f 2557/1/2557 2562/1/2562 2594/1/2594 +f 2560/1/2560 2555/1/2555 2554/1/2554 +f 2566/1/2566 2554/1/2554 2624/1/2624 +f 2621/1/2621 2624/1/2624 2625/1/2625 +f 2625/1/2625 2627/1/2627 2622/1/2622 +f 2631/1/2631 2628/1/2628 2627/1/2627 +f 2544/1/2544 3740/1/3740 2631/1/2631 +f 3703/1/3703 3740/1/3740 2544/1/2544 +f 3699/1/3699 3704/1/3704 3703/1/3703 +f 2534/1/2534 3698/1/3698 3699/1/3699 +f 2538/1/2538 3698/1/3698 2534/1/2534 +f 2540/1/2540 2541/1/2541 2538/1/2538 +f 2542/1/2542 2541/1/2541 2540/1/2540 +f 3696/1/3696 3691/1/3691 2542/1/2542 +f 3985/1/3985 3696/1/3696 3947/1/3947 +f 3951/1/3951 3946/1/3946 3947/1/3947 +f 3946/1/3946 3949/1/3949 3945/1/3945 +f 3950/1/3950 3952/1/3952 3953/1/3953 +f 3954/1/3954 3957/1/3957 3949/1/3949 +f 3956/1/3956 3953/1/3953 3955/1/3955 +f 3958/1/3958 3961/1/3961 3957/1/3957 +f 3960/1/3960 3955/1/3955 3959/1/3959 +f 3982/1/3982 3980/1/3980 3979/1/3979 +f 3978/1/3978 3964/1/3964 3961/1/3961 +f 3982/1/3982 3977/1/3977 3980/1/3980 +f 3974/1/3974 3964/1/3964 3976/1/3976 +f 3974/1/3974 3976/1/3976 3975/1/3975 +f 4917/1/4917 3975/1/3975 4915/1/4915 +f 4917/1/4917 4918/1/4918 4919/1/4919 +f 4920/1/4920 4918/1/4918 4922/1/4922 +f 2569/1/2569 4922/1/4922 2567/1/2567 +f 4923/1/4923 2573/1/2573 2571/1/2571 +f 4899/1/4899 2573/1/2573 4923/1/4923 +f 2568/1/2568 2567/1/2567 2570/1/2570 +f 2568/1/2568 2563/1/2563 2561/1/2561 +f 2572/1/2572 2571/1/2571 2573/1/2573 +f 2563/1/2563 2574/1/2574 2562/1/2562 +f 2573/1/2573 2575/1/2575 2572/1/2572 +f 2573/1/2573 2577/1/2577 2575/1/2575 +f 2577/1/2577 2578/1/2578 2575/1/2575 +f 2576/1/2576 2577/1/2577 2573/1/2573 +f 2576/1/2576 2580/1/2580 2577/1/2577 +f 2581/1/2581 2577/1/2577 2580/1/2580 +f 2594/1/2594 2562/1/2562 2574/1/2574 +f 2595/1/2595 2557/1/2557 2594/1/2594 +f 2558/1/2558 2557/1/2557 2556/1/2556 +f 2552/1/2552 2553/1/2553 2556/1/2556 +f 2550/1/2550 2553/1/2553 2552/1/2552 +f 2546/1/2546 2549/1/2549 2550/1/2550 +f 2547/1/2547 2548/1/2548 2546/1/2546 +f 2543/1/2543 2626/1/2626 2547/1/2547 +f 2532/1/2532 2545/1/2545 2543/1/2543 +f 2531/1/2531 2535/1/2535 2532/1/2532 +f 2536/1/2536 2531/1/2531 2533/1/2533 +f 3959/1/3959 2537/1/2537 2536/1/2536 +f 3979/1/3979 3959/1/3959 3982/1/3982 +f 3983/1/3983 3977/1/3977 3982/1/3982 +f 3983/1/3983 4914/1/4914 3977/1/3977 +f 3981/1/3981 3984/1/3984 4847/1/4847 +f 4848/1/4848 4911/1/4911 4914/1/4914 +f 4909/1/4909 4910/1/4910 4849/1/4849 +f 4911/1/4911 4913/1/4913 4914/1/4914 +f 4916/1/4916 4913/1/4913 4912/1/4912 +f 4906/1/4906 4907/1/4907 4910/1/4910 +f 4926/1/4926 4921/1/4921 4912/1/4912 +f 4926/1/4926 4924/1/4924 4921/1/4921 +f 4899/1/4899 4923/1/4923 4924/1/4924 +f 4925/1/4925 4907/1/4907 4900/1/4900 +f 4899/1/4899 4901/1/4901 4898/1/4898 +f 4899/1/4899 2576/1/2576 2573/1/2573 +f 4888/1/4888 2583/1/2583 4893/1/4893 +f 2576/1/2576 2582/1/2582 2580/1/2580 +f 2582/1/2582 2585/1/2585 2580/1/2580 +f 2584/1/2584 2580/1/2580 2585/1/2585 +f 2588/1/2588 2585/1/2585 2589/1/2589 +f 2597/1/2597 2589/1/2589 2601/1/2601 +f 2597/1/2597 2601/1/2601 2602/1/2602 +f 2597/1/2597 2602/1/2602 2600/1/2600 +f 2600/1/2600 2602/1/2602 2608/1/2608 +f 2600/1/2600 2608/1/2608 2603/1/2603 +f 2598/1/2598 2600/1/2600 2603/1/2603 +f 2603/1/2603 2608/1/2608 2609/1/2609 +f 2603/1/2603 2609/1/2609 2606/1/2606 +f 2604/1/2604 2603/1/2603 2606/1/2606 +f 2604/1/2604 2606/1/2606 2607/1/2607 +f 2604/1/2604 2607/1/2607 4243/1/4243 +f 4243/1/4243 2607/1/2607 4244/1/4244 +f 4243/1/4243 4244/1/4244 4245/1/4245 +f 4246/1/4246 4243/1/4243 4245/1/4245 +f 4246/1/4246 4245/1/4245 4250/1/4250 +f 4868/1/4868 4246/1/4246 4250/1/4250 +f 4868/1/4868 4250/1/4250 4869/1/4869 +f 4929/1/4929 4868/1/4868 4869/1/4869 +f 4929/1/4929 4869/1/4869 4939/1/4939 +f 4940/1/4940 4929/1/4929 4939/1/4939 +f 4940/1/4940 4939/1/4939 4942/1/4942 +f 4942/1/4942 4941/1/4941 4940/1/4940 +f 4940/1/4940 4941/1/4941 4938/1/4938 +f 4941/1/4941 4937/1/4937 4938/1/4938 +f 4938/1/4938 4937/1/4937 4936/1/4936 +f 4936/1/4936 4929/1/4929 4938/1/4938 +f 4930/1/4930 4929/1/4929 4936/1/4936 +f 4936/1/4936 4935/1/4935 4930/1/4930 +f 4930/1/4930 4935/1/4935 4931/1/4931 +f 4930/1/4930 4931/1/4931 4928/1/4928 +f 4928/1/4928 4927/1/4927 4930/1/4930 +f 4931/1/4931 4935/1/4935 4934/1/4934 +f 4931/1/4931 4934/1/4934 4932/1/4932 +f 4935/1/4935 4256/1/4256 4934/1/4934 +f 4934/1/4934 4256/1/4256 4933/1/4933 +f 4933/1/4933 4256/1/4256 4254/1/4254 +f 4255/1/4255 4254/1/4254 4256/1/4256 +f 4255/1/4255 4256/1/4256 4257/1/4257 +f 4248/1/4248 4255/1/4255 4257/1/4257 +f 4248/1/4248 4257/1/4257 4261/1/4261 +f 4249/1/4249 4248/1/4248 4261/1/4261 +f 4249/1/4249 4261/1/4261 4262/1/4262 +f 4249/1/4249 4262/1/4262 4265/1/4265 +f 4249/1/4249 4265/1/4265 4266/1/4266 +f 4250/1/4250 4249/1/4249 4266/1/4266 +f 4265/1/4265 4268/1/4268 4266/1/4266 +f 4870/1/4870 4266/1/4266 4268/1/4268 +f 4870/1/4870 4268/1/4268 4943/1/4943 +f 4939/1/4939 4870/1/4870 4943/1/4943 +f 4943/1/4943 4268/1/4268 4270/1/4270 +f 4270/1/4270 4942/1/4942 4943/1/4943 +f 4942/1/4942 4270/1/4270 4944/1/4944 +f 4270/1/4270 4937/1/4937 4944/1/4944 +f 4270/1/4270 4258/1/4258 4937/1/4937 +f 4937/1/4937 4258/1/4258 4935/1/4935 +f 4270/1/4270 4263/1/4263 4258/1/4258 +f 4259/1/4259 4258/1/4258 4263/1/4263 +f 4259/1/4259 4263/1/4263 4262/1/4262 +f 4260/1/4260 4259/1/4259 4262/1/4262 +f 4260/1/4260 4256/1/4256 4259/1/4259 +f 4262/1/4262 4263/1/4263 4264/1/4264 +f 4263/1/4263 4269/1/4269 4264/1/4264 +f 4269/1/4269 4267/1/4267 4264/1/4264 +f 4265/1/4265 4264/1/4264 4267/1/4267 +f 4269/1/4269 4270/1/4270 4267/1/4267 +f 4256/1/4256 4258/1/4258 4259/1/4259 +f 4263/1/4263 4270/1/4270 4269/1/4269 +f 4270/1/4270 4268/1/4268 4267/1/4267 +f 4869/1/4869 4266/1/4266 4870/1/4870 +f 4267/1/4267 4268/1/4268 4265/1/4265 +f 4262/1/4262 4264/1/4264 4265/1/4265 +f 4261/1/4261 4260/1/4260 4262/1/4262 +f 4245/1/4245 4248/1/4248 4249/1/4249 +f 4245/1/4245 4247/1/4247 4248/1/4248 +f 4247/1/4247 4252/1/4252 4248/1/4248 +f 4247/1/4247 4251/1/4251 4252/1/4252 +f 4251/1/4251 4254/1/4254 4252/1/4252 +f 4251/1/4251 2614/1/2614 4254/1/4254 +f 4253/1/4253 2614/1/2614 4251/1/4251 +f 4244/1/4244 4253/1/4253 4251/1/4251 +f 4244/1/4244 2615/1/2615 4253/1/4253 +f 2615/1/2615 2614/1/2614 4253/1/4253 +f 2613/1/2613 2614/1/2614 2615/1/2615 +f 2607/1/2607 2613/1/2613 2615/1/2615 +f 2607/1/2607 2612/1/2612 2613/1/2613 +f 2613/1/2613 2612/1/2612 2616/1/2616 +f 2616/1/2616 2612/1/2612 2611/1/2611 +f 2611/1/2611 2617/1/2617 2616/1/2616 +f 2609/1/2609 2611/1/2611 2612/1/2612 +f 4244/1/4244 4251/1/4251 4247/1/4247 +f 4261/1/4261 4257/1/4257 4260/1/4260 +f 4248/1/4248 4252/1/4252 4255/1/4255 +f 4256/1/4256 4260/1/4260 4257/1/4257 +f 4252/1/4252 4254/1/4254 4255/1/4255 +f 4935/1/4935 4258/1/4258 4256/1/4256 +f 4930/1/4930 4927/1/4927 4929/1/4929 +f 4936/1/4936 4937/1/4937 4935/1/4935 +f 4941/1/4941 4944/1/4944 4937/1/4937 +f 4941/1/4941 4942/1/4942 4944/1/4944 +f 4939/1/4939 4943/1/4943 4942/1/4942 +f 4938/1/4938 4929/1/4929 4940/1/4940 +f 4939/1/4939 4869/1/4869 4870/1/4870 +f 4927/1/4927 4868/1/4868 4929/1/4929 +f 4927/1/4927 4867/1/4867 4868/1/4868 +f 4874/1/4874 4867/1/4867 4927/1/4927 +f 4869/1/4869 4250/1/4250 4266/1/4266 +f 4867/1/4867 4246/1/4246 4868/1/4868 +f 4867/1/4867 2605/1/2605 4246/1/4246 +f 4250/1/4250 4245/1/4245 4249/1/4249 +f 2605/1/2605 4243/1/4243 4246/1/4246 +f 4245/1/4245 4244/1/4244 4247/1/4247 +f 2607/1/2607 2615/1/2615 4244/1/4244 +f 2606/1/2606 2612/1/2612 2607/1/2607 +f 2606/1/2606 2609/1/2609 2612/1/2612 +f 2608/1/2608 2611/1/2611 2609/1/2609 +f 2608/1/2608 2610/1/2610 2611/1/2611 +f 2602/1/2602 2610/1/2610 2608/1/2608 +f 2601/1/2601 2619/1/2619 2602/1/2602 +f 2602/1/2602 2619/1/2619 2610/1/2610 +f 2617/1/2617 2611/1/2611 2610/1/2610 +f 4888/1/4888 2618/1/2618 2583/1/2583 +f 4888/1/4888 4889/1/4889 4887/1/4887 +f 4878/1/4878 4880/1/4880 4882/1/4882 +f 2617/1/2617 4886/1/4886 2616/1/2616 +f 2616/1/2616 2614/1/2614 2613/1/2613 +f 4879/1/4879 4254/1/4254 2614/1/2614 +f 4933/1/4933 4254/1/4254 4879/1/4879 +f 4934/1/4934 4933/1/4933 4932/1/4932 +f 4928/1/4928 4931/1/4931 4932/1/4932 +f 4928/1/4928 4874/1/4874 4927/1/4927 +f 4873/1/4873 4871/1/4871 4875/1/4875 +f 4874/1/4874 4866/1/4866 4867/1/4867 +f 4864/1/4864 4865/1/4865 4871/1/4871 +f 4866/1/4866 2605/1/2605 4867/1/4867 +f 4863/1/4863 2599/1/2599 4865/1/4865 +f 2605/1/2605 2604/1/2604 4243/1/4243 +f 2598/1/2598 2603/1/2603 2604/1/2604 +f 2598/1/2598 2597/1/2597 2600/1/2600 +f 2590/1/2590 2589/1/2589 2597/1/2597 +f 2590/1/2590 2588/1/2588 2589/1/2589 +f 2584/1/2584 2585/1/2585 2588/1/2588 +f 2581/1/2581 2580/1/2580 2584/1/2584 +f 2578/1/2578 2577/1/2577 2581/1/2581 +f 2575/1/2575 2578/1/2578 2579/1/2579 +f 2522/1/2522 2592/1/2592 2579/1/2579 +f 2520/1/2520 2593/1/2593 2522/1/2522 +f 2526/1/2526 2551/1/2551 2520/1/2520 +f 2525/1/2525 2529/1/2529 2526/1/2526 +f 2530/1/2530 2528/1/2528 2525/1/2525 +f 3984/1/3984 2530/1/2530 4846/1/4846 +f 4908/1/4908 4846/1/4846 4905/1/4905 +f 4904/1/4904 4903/1/4903 4905/1/4905 +f 4897/1/4897 4900/1/4900 4903/1/4903 +f 4895/1/4895 4894/1/4894 4897/1/4897 +f 4855/1/4855 4891/1/4891 4895/1/4895 +f 4890/1/4890 4891/1/4891 4855/1/4855 +f 4855/1/4855 4851/1/4851 4853/1/4853 +f 4902/1/4902 4850/1/4850 4854/1/4854 +f 4850/1/4850 2527/1/2527 2539/1/2539 +f 2539/1/2539 2524/1/2524 2519/1/2519 +f 4851/1/4851 4852/1/4852 4853/1/4853 +f 4855/1/4855 4853/1/4853 4896/1/4896 +f 4896/1/4896 4890/1/4890 4855/1/4855 +f 4890/1/4890 4889/1/4889 4891/1/4891 +f 4885/1/4885 4887/1/4887 4889/1/4889 +f 4884/1/4884 4887/1/4887 4885/1/4885 +f 4862/1/4862 4882/1/4882 4884/1/4884 +f 4860/1/4860 4857/1/4857 4861/1/4861 +f 4881/1/4881 4882/1/4882 4862/1/4862 +f 4881/1/4881 4878/1/4878 4882/1/4882 +f 4877/1/4877 4880/1/4880 4878/1/4878 +f 4876/1/4876 4877/1/4877 4873/1/4873 +f 4873/1/4873 4864/1/4864 4871/1/4871 +f 4883/1/4883 4859/1/4859 4872/1/4872 +f 4864/1/4864 4863/1/4863 4865/1/4865 +f 4857/1/4857 4858/1/4858 4859/1/4859 +f 4863/1/4863 2596/1/2596 2599/1/2599 +f 4856/1/4856 2521/1/2521 4858/1/4858 +f 2596/1/2596 2591/1/2591 2599/1/2599 +f 2518/1/2518 2587/1/2587 2591/1/2591 +f 2519/1/2519 2516/1/2516 2521/1/2521 +f 2518/1/2518 2517/1/2517 2586/1/2586 +f 2516/1/2516 2523/1/2523 2517/1/2517 +f 4968/1/4968 4969/1/4969 4970/1/4970 +f 4973/1/4973 4968/1/4968 4970/1/4970 +f 4973/1/4973 4970/1/4970 4980/1/4980 +f 4973/1/4973 4980/1/4980 4981/1/4981 +f 5050/1/5050 4973/1/4973 4981/1/4981 +f 5050/1/5050 4981/1/4981 5049/1/5049 +f 5146/1/5146 5050/1/5050 5049/1/5049 +f 5146/1/5146 5049/1/5049 5424/1/5424 +f 5427/1/5427 5146/1/5146 5424/1/5424 +f 5427/1/5427 5424/1/5424 5428/1/5428 +f 5428/1/5428 5445/1/5445 5427/1/5427 +f 5445/1/5445 5436/1/5436 5427/1/5427 +f 5427/1/5427 5436/1/5436 5430/1/5430 +f 5427/1/5427 5430/1/5430 5429/1/5429 +f 5430/1/5430 5431/1/5431 5429/1/5429 +f 5429/1/5429 5431/1/5431 5145/1/5145 +f 5145/1/5145 5051/1/5051 5429/1/5429 +f 5429/1/5429 5051/1/5051 5146/1/5146 +f 5145/1/5145 5144/1/5144 5051/1/5051 +f 5144/1/5144 4979/1/4979 5051/1/5051 +f 4979/1/4979 4973/1/4973 5051/1/5051 +f 4979/1/4979 4971/1/4971 4973/1/4973 +f 4976/1/4976 4971/1/4971 4979/1/4979 +f 5140/1/5140 4976/1/4976 4979/1/4979 +f 5134/1/5134 4976/1/4976 5140/1/5140 +f 5139/1/5139 5134/1/5134 5140/1/5140 +f 5139/1/5139 5140/1/5140 5142/1/5142 +f 5142/1/5142 5143/1/5143 5139/1/5139 +f 5143/1/5143 5141/1/5141 5139/1/5139 +f 5139/1/5139 5141/1/5141 5138/1/5138 +f 5138/1/5138 5141/1/5141 5137/1/5137 +f 5138/1/5138 5137/1/5137 5136/1/5136 +f 5136/1/5136 5134/1/5134 5138/1/5138 +f 5133/1/5133 5134/1/5134 5136/1/5136 +f 5133/1/5133 5127/1/5127 5134/1/5134 +f 5127/1/5127 4977/1/4977 5134/1/5134 +f 5127/1/5127 5056/1/5056 4977/1/4977 +f 5056/1/5056 4978/1/4978 4977/1/4977 +f 4977/1/4977 4978/1/4978 4975/1/4975 +f 4977/1/4977 4975/1/4975 4976/1/4976 +f 4978/1/4978 7004/1/7004 4975/1/4975 +f 4975/1/4975 7004/1/7004 4972/1/4972 +f 4975/1/4975 4972/1/4972 4971/1/4971 +f 4971/1/4971 4972/1/4972 4968/1/4968 +f 4972/1/4972 7006/1/7006 4968/1/4968 +f 4968/1/4968 7006/1/7006 4974/1/4974 +f 7006/1/7006 7010/1/7010 4974/1/4974 +f 4974/1/4974 7010/1/7010 4994/1/4994 +f 4974/1/4974 4994/1/4994 4969/1/4969 +f 4969/1/4969 4994/1/4994 4993/1/4993 +f 4969/1/4969 4993/1/4993 4987/1/4987 +f 4987/1/4987 4993/1/4993 4988/1/4988 +f 4987/1/4987 4988/1/4988 4983/1/4983 +f 4970/1/4970 4987/1/4987 4983/1/4983 +f 4983/1/4983 4988/1/4988 4989/1/4989 +f 4983/1/4983 4989/1/4989 4984/1/4984 +f 4980/1/4980 4983/1/4983 4984/1/4984 +f 4980/1/4980 4984/1/4984 4985/1/4985 +f 4980/1/4980 4985/1/4985 4986/1/4986 +f 4982/1/4982 4980/1/4980 4986/1/4986 +f 4982/1/4982 4986/1/4986 5012/1/5012 +f 4982/1/4982 5012/1/5012 5015/1/5015 +f 5048/1/5048 4982/1/4982 5015/1/5015 +f 5048/1/5048 5015/1/5015 5047/1/5047 +f 5416/1/5416 5048/1/5048 5047/1/5047 +f 5416/1/5416 5047/1/5047 5417/1/5417 +f 5411/1/5411 5416/1/5416 5417/1/5417 +f 5411/1/5411 5417/1/5417 5415/1/5415 +f 5415/1/5415 5412/1/5412 5411/1/5411 +f 5411/1/5411 5412/1/5412 5407/1/5407 +f 5411/1/5411 5407/1/5407 5409/1/5409 +f 5407/1/5407 5406/1/5406 5409/1/5409 +f 5409/1/5409 5406/1/5406 5410/1/5410 +f 5409/1/5409 5410/1/5410 5426/1/5426 +f 5426/1/5426 5416/1/5416 5409/1/5409 +f 5426/1/5426 5423/1/5423 5416/1/5416 +f 5425/1/5425 5423/1/5423 5426/1/5426 +f 5425/1/5425 5424/1/5424 5423/1/5423 +f 5426/1/5426 5410/1/5410 5425/1/5425 +f 5425/1/5425 5410/1/5410 5443/1/5443 +f 5425/1/5425 5443/1/5443 5445/1/5445 +f 5410/1/5410 5444/1/5444 5443/1/5443 +f 5443/1/5443 5444/1/5444 5438/1/5438 +f 5443/1/5443 5438/1/5438 5436/1/5436 +f 5436/1/5436 5438/1/5438 5434/1/5434 +f 5000/1/5000 5434/1/5434 5438/1/5438 +f 5000/1/5000 5438/1/5438 5004/1/5004 +f 5004/1/5004 5005/1/5005 5000/1/5000 +f 5000/1/5000 5005/1/5005 5003/1/5003 +f 5000/1/5000 5003/1/5003 4998/1/4998 +f 4998/1/4998 4995/1/4995 5000/1/5000 +f 4995/1/4995 5437/1/5437 5000/1/5000 +f 5437/1/5437 4995/1/4995 5442/1/5442 +f 5442/1/5442 5439/1/5439 5437/1/5437 +f 5437/1/5437 5439/1/5439 5435/1/5435 +f 5437/1/5437 5435/1/5435 5434/1/5434 +f 5431/1/5431 5434/1/5434 5435/1/5435 +f 5431/1/5431 5435/1/5435 5433/1/5433 +f 5433/1/5433 5435/1/5435 5439/1/5439 +f 5433/1/5433 5439/1/5439 5440/1/5440 +f 5433/1/5433 5440/1/5440 5142/1/5142 +f 5432/1/5432 5433/1/5433 5142/1/5142 +f 5142/1/5142 5144/1/5144 5432/1/5432 +f 5145/1/5145 5433/1/5433 5432/1/5432 +f 5440/1/5440 5439/1/5439 5441/1/5441 +f 5440/1/5440 5441/1/5441 5143/1/5143 +f 5442/1/5442 5441/1/5441 5439/1/5439 +f 5162/1/5162 5441/1/5441 5442/1/5442 +f 5158/1/5158 5162/1/5162 5442/1/5442 +f 5442/1/5442 4999/1/4999 5158/1/5158 +f 5158/1/5158 4999/1/4999 7020/1/7020 +f 5158/1/5158 7020/1/7020 7021/1/7021 +f 5158/1/5158 7021/1/7021 5155/1/5155 +f 5158/1/5158 5155/1/5155 5157/1/5157 +f 5159/1/5159 5158/1/5158 5157/1/5157 +f 5159/1/5159 5157/1/5157 5156/1/5156 +f 5156/1/5156 5149/1/5149 5159/1/5159 +f 5159/1/5159 5149/1/5149 5160/1/5160 +f 5159/1/5159 5160/1/5160 5161/1/5161 +f 5161/1/5161 5160/1/5160 5162/1/5162 +f 5141/1/5141 5162/1/5162 5160/1/5160 +f 5137/1/5137 5160/1/5160 5149/1/5149 +f 5137/1/5137 5149/1/5149 5135/1/5135 +f 5133/1/5133 5137/1/5137 5135/1/5135 +f 5133/1/5133 5135/1/5135 5132/1/5132 +f 5132/1/5132 5135/1/5135 5130/1/5130 +f 5130/1/5130 5127/1/5127 5132/1/5132 +f 5128/1/5128 5127/1/5127 5130/1/5130 +f 5130/1/5130 5131/1/5131 5128/1/5128 +f 5128/1/5128 5131/1/5131 5129/1/5129 +f 5128/1/5128 5129/1/5129 5126/1/5126 +f 5126/1/5126 5125/1/5125 5128/1/5128 +f 5124/1/5124 5125/1/5125 5126/1/5126 +f 5126/1/5126 5121/1/5121 5124/1/5124 +f 5124/1/5124 5121/1/5121 5120/1/5120 +f 5124/1/5124 5120/1/5120 5063/1/5063 +f 5063/1/5063 5120/1/5120 5122/1/5122 +f 5122/1/5122 5061/1/5061 5063/1/5063 +f 5061/1/5061 5060/1/5060 5063/1/5063 +f 5063/1/5063 5060/1/5060 5058/1/5058 +f 5063/1/5063 5058/1/5058 5125/1/5125 +f 5125/1/5125 5058/1/5058 5056/1/5056 +f 5058/1/5058 5057/1/5057 5056/1/5056 +f 5058/1/5058 5059/1/5059 5057/1/5057 +f 5059/1/5059 7000/1/7000 5057/1/5057 +f 5057/1/5057 7000/1/7000 7002/1/7002 +f 5057/1/5057 7002/1/7002 4978/1/4978 +f 7000/1/7000 7003/1/7003 7002/1/7002 +f 7002/1/7002 7003/1/7003 7047/1/7047 +f 7002/1/7002 7047/1/7047 7048/1/7048 +f 7002/1/7002 7048/1/7048 7004/1/7004 +f 7004/1/7004 7048/1/7048 7049/1/7049 +f 7004/1/7004 7049/1/7049 7050/1/7050 +f 7004/1/7004 7050/1/7050 7005/1/7005 +f 7050/1/7050 7014/1/7014 7005/1/7005 +f 7005/1/7005 7014/1/7014 7012/1/7012 +f 7005/1/7005 7012/1/7012 7007/1/7007 +f 4972/1/4972 7005/1/7005 7007/1/7007 +f 4972/1/4972 7007/1/7007 7008/1/7008 +f 7007/1/7007 7011/1/7011 7008/1/7008 +f 7008/1/7008 7011/1/7011 7009/1/7009 +f 7008/1/7008 7009/1/7009 7006/1/7006 +f 7011/1/7011 7016/1/7016 7009/1/7009 +f 7009/1/7009 7016/1/7016 7010/1/7010 +f 7018/1/7018 7010/1/7010 7016/1/7016 +f 7019/1/7019 7018/1/7018 7016/1/7016 +f 7019/1/7019 7016/1/7016 7017/1/7017 +f 7021/1/7021 7019/1/7019 7017/1/7017 +f 7021/1/7021 7017/1/7017 7022/1/7022 +f 7022/1/7022 7023/1/7023 7021/1/7021 +f 7022/1/7022 7026/1/7026 7023/1/7023 +f 7026/1/7026 5155/1/5155 7023/1/7023 +f 7026/1/7026 5153/1/5153 5155/1/5155 +f 5153/1/5153 5152/1/5152 5155/1/5155 +f 5153/1/5153 5151/1/5151 5152/1/5152 +f 5147/1/5147 5152/1/5152 5151/1/5151 +f 5147/1/5147 5151/1/5151 5150/1/5150 +f 5150/1/5150 5148/1/5148 5147/1/5147 +f 5131/1/5131 5147/1/5147 5148/1/5148 +f 5131/1/5131 5149/1/5149 5147/1/5147 +f 5150/1/5150 5117/1/5117 5148/1/5148 +f 5121/1/5121 5148/1/5148 5117/1/5117 +f 5121/1/5121 5117/1/5117 5118/1/5118 +f 5118/1/5118 5117/1/5117 5113/1/5113 +f 5118/1/5118 5113/1/5113 5112/1/5112 +f 5118/1/5118 5112/1/5112 5104/1/5104 +f 5119/1/5119 5118/1/5118 5104/1/5104 +f 5119/1/5119 5104/1/5104 5103/1/5103 +f 5123/1/5123 5119/1/5119 5103/1/5103 +f 5103/1/5103 5061/1/5061 5123/1/5123 +f 5069/1/5069 5061/1/5061 5103/1/5103 +f 5103/1/5103 5102/1/5102 5069/1/5069 +f 5069/1/5069 5102/1/5102 5068/1/5068 +f 5068/1/5068 5064/1/5064 5069/1/5069 +f 5067/1/5067 5064/1/5064 5068/1/5068 +f 5068/1/5068 5100/1/5100 5067/1/5067 +f 5067/1/5067 5100/1/5100 5099/1/5099 +f 5099/1/5099 5066/1/5066 5067/1/5067 +f 5077/1/5077 5066/1/5066 5099/1/5099 +f 5099/1/5099 5093/1/5093 5077/1/5077 +f 5077/1/5077 5093/1/5093 5078/1/5078 +f 5077/1/5077 5078/1/5078 5076/1/5076 +f 5076/1/5076 5073/1/5073 5077/1/5077 +f 5075/1/5075 5073/1/5073 5076/1/5076 +f 5075/1/5075 5071/1/5071 5073/1/5073 +f 5071/1/5071 5070/1/5070 5073/1/5073 +f 5073/1/5073 5070/1/5070 5066/1/5066 +f 5066/1/5066 5070/1/5070 5065/1/5065 +f 5066/1/5066 5065/1/5065 5064/1/5064 +f 5064/1/5064 5065/1/5065 5062/1/5062 +f 5064/1/5064 5062/1/5062 5061/1/5061 +f 5065/1/5065 6555/1/6555 5062/1/5062 +f 5062/1/5062 6555/1/6555 6556/1/6556 +f 5062/1/5062 6556/1/6556 5060/1/5060 +f 5060/1/5060 6556/1/6556 5059/1/5059 +f 6556/1/6556 6998/1/6998 5059/1/5059 +f 6556/1/6556 6996/1/6996 6998/1/6998 +f 6996/1/6996 6995/1/6995 6998/1/6998 +f 6998/1/6998 6995/1/6995 6997/1/6997 +f 6998/1/6998 6997/1/6997 7000/1/7000 +f 7000/1/7000 6997/1/6997 7001/1/7001 +f 6997/1/6997 6999/1/6999 7001/1/7001 +f 7001/1/7001 6999/1/6999 7045/1/7045 +f 7001/1/7001 7045/1/7045 7003/1/7003 +f 7003/1/7003 7045/1/7045 7044/1/7044 +f 7045/1/7045 7043/1/7043 7044/1/7044 +f 7044/1/7044 7043/1/7043 7037/1/7037 +f 7044/1/7044 7037/1/7037 7036/1/7036 +f 7047/1/7047 7044/1/7044 7036/1/7036 +f 7036/1/7036 7037/1/7037 7032/1/7032 +f 7036/1/7036 7032/1/7032 7035/1/7035 +f 7048/1/7048 7036/1/7036 7035/1/7035 +f 7035/1/7035 7032/1/7032 7028/1/7028 +f 7035/1/7035 7028/1/7028 7034/1/7034 +f 7049/1/7049 7035/1/7035 7034/1/7034 +f 7034/1/7034 7028/1/7028 7014/1/7014 +f 7015/1/7015 7014/1/7014 7028/1/7028 +f 7027/1/7027 7015/1/7015 7028/1/7028 +f 7027/1/7027 7028/1/7028 7029/1/7029 +f 7025/1/7025 7027/1/7027 7029/1/7029 +f 7025/1/7025 7029/1/7029 7030/1/7030 +f 7030/1/7030 7031/1/7031 7025/1/7025 +f 7025/1/7025 7031/1/7031 7026/1/7026 +f 7039/1/7039 7031/1/7031 7030/1/7030 +f 7030/1/7030 7033/1/7033 7039/1/7039 +f 7039/1/7039 7033/1/7033 7038/1/7038 +f 7039/1/7039 7038/1/7038 7042/1/7042 +f 7039/1/7039 7042/1/7042 7041/1/7041 +f 7041/1/7041 7040/1/7040 7039/1/7039 +f 7041/1/7041 5114/1/5114 7040/1/7040 +f 7040/1/7040 5114/1/5114 5154/1/5154 +f 7040/1/7040 5154/1/5154 7031/1/7031 +f 7031/1/7031 5154/1/5154 5153/1/5153 +f 5114/1/5114 5115/1/5115 5154/1/5154 +f 5154/1/5154 5115/1/5115 5151/1/5151 +f 5116/1/5116 5151/1/5151 5115/1/5115 +f 5116/1/5116 5115/1/5115 5113/1/5113 +f 5113/1/5113 5115/1/5115 5111/1/5111 +f 5113/1/5113 5111/1/5111 5108/1/5108 +f 5108/1/5108 5111/1/5111 5109/1/5109 +f 5108/1/5108 5109/1/5109 5106/1/5106 +f 5106/1/5106 5104/1/5104 5108/1/5108 +f 5106/1/5106 5105/1/5105 5104/1/5104 +f 5102/1/5102 5104/1/5104 5105/1/5105 +f 5102/1/5102 5105/1/5105 5100/1/5100 +f 5100/1/5100 5105/1/5105 5101/1/5101 +f 5100/1/5100 5101/1/5101 5093/1/5093 +f 5092/1/5092 5093/1/5093 5101/1/5101 +f 5092/1/5092 5101/1/5101 5098/1/5098 +f 5098/1/5098 5097/1/5097 5092/1/5092 +f 5092/1/5092 5097/1/5097 5094/1/5094 +f 5092/1/5092 5094/1/5094 5090/1/5090 +f 5090/1/5090 5085/1/5085 5092/1/5092 +f 5090/1/5090 5086/1/5086 5085/1/5085 +f 5080/1/5080 5085/1/5085 5086/1/5086 +f 5080/1/5080 5086/1/5086 5084/1/5084 +f 5080/1/5080 5084/1/5084 5082/1/5082 +f 5079/1/5079 5080/1/5080 5082/1/5082 +f 5079/1/5079 5082/1/5082 5081/1/5081 +f 5074/1/5074 5079/1/5079 5081/1/5081 +f 5074/1/5074 5081/1/5081 6552/1/6552 +f 6552/1/6552 6551/1/6551 5074/1/5074 +f 5074/1/5074 6551/1/6551 5071/1/5071 +f 6551/1/6551 6553/1/6553 5071/1/5071 +f 6553/1/6553 5072/1/5072 5071/1/5071 +f 6553/1/6553 5403/1/5403 5072/1/5072 +f 5403/1/5403 5402/1/5402 5072/1/5072 +f 5072/1/5072 5402/1/5402 6954/1/6954 +f 5072/1/5072 6954/1/6954 6554/1/6554 +f 5070/1/5070 5072/1/5072 6554/1/6554 +f 6554/1/6554 6954/1/6954 6956/1/6956 +f 6554/1/6554 6956/1/6956 6555/1/6555 +f 6555/1/6555 6956/1/6956 6959/1/6959 +f 6956/1/6956 6961/1/6961 6959/1/6959 +f 6959/1/6959 6961/1/6961 6986/1/6986 +f 6959/1/6959 6986/1/6986 6987/1/6987 +f 6959/1/6959 6987/1/6987 6996/1/6996 +f 6996/1/6996 6987/1/6987 6989/1/6989 +f 6987/1/6987 6984/1/6984 6989/1/6989 +f 6989/1/6989 6984/1/6984 6988/1/6988 +f 6989/1/6989 6988/1/6988 6995/1/6995 +f 6995/1/6995 6988/1/6988 6994/1/6994 +f 6988/1/6988 6990/1/6990 6994/1/6994 +f 6994/1/6994 6990/1/6990 6993/1/6993 +f 6994/1/6994 6993/1/6993 6999/1/6999 +f 6992/1/6992 6993/1/6993 6990/1/6990 +f 6991/1/6991 6992/1/6992 6990/1/6990 +f 6991/1/6991 6990/1/6990 6985/1/6985 +f 6980/1/6980 6991/1/6991 6985/1/6985 +f 6980/1/6980 6985/1/6985 6981/1/6981 +f 6980/1/6980 6981/1/6981 6978/1/6978 +f 6978/1/6978 5097/1/5097 6980/1/6980 +f 6980/1/6980 5097/1/5097 5114/1/5114 +f 6980/1/6980 5114/1/5114 7051/1/7051 +f 5097/1/5097 5110/1/5110 5114/1/5114 +f 5110/1/5110 5111/1/5111 5114/1/5114 +f 5097/1/5097 5107/1/5107 5110/1/5110 +f 5110/1/5110 5107/1/5107 5109/1/5109 +f 6978/1/6978 5163/1/5163 5097/1/5097 +f 5163/1/5163 5096/1/5096 5097/1/5097 +f 5164/1/5164 5096/1/5096 5163/1/5163 +f 6972/1/6972 5164/1/5164 5163/1/5163 +f 5169/1/5169 5164/1/5164 6972/1/6972 +f 6972/1/6972 6971/1/6971 5169/1/5169 +f 5169/1/5169 6971/1/6971 6974/1/6974 +f 5169/1/5169 6974/1/6974 6975/1/6975 +f 5169/1/5169 6975/1/6975 5165/1/5165 +f 5165/1/5165 5095/1/5095 5169/1/5169 +f 5095/1/5095 5165/1/5165 5166/1/5166 +f 5088/1/5088 5095/1/5095 5166/1/5166 +f 5088/1/5088 5166/1/5166 5170/1/5170 +f 5088/1/5088 5170/1/5170 6358/1/6358 +f 5091/1/5091 5088/1/5088 6358/1/6358 +f 5091/1/5091 6358/1/6358 6359/1/6359 +f 6359/1/6359 6360/1/6360 5091/1/5091 +f 5091/1/5091 6360/1/6360 5083/1/5083 +f 5091/1/5091 5083/1/5083 5087/1/5087 +f 5087/1/5087 5083/1/5083 5084/1/5084 +f 6364/1/6364 5083/1/5083 6360/1/6360 +f 6364/1/6364 6360/1/6360 6365/1/6365 +f 6364/1/6364 6365/1/6365 6372/1/6372 +f 6552/1/6552 6364/1/6364 6372/1/6372 +f 6372/1/6372 6374/1/6374 6552/1/6552 +f 6368/1/6368 6374/1/6374 6372/1/6372 +f 6368/1/6368 6373/1/6373 6374/1/6374 +f 6373/1/6373 6549/1/6549 6374/1/6374 +f 6374/1/6374 6549/1/6549 6550/1/6550 +f 6374/1/6374 6550/1/6550 6551/1/6551 +f 6549/1/6549 5400/1/5400 6550/1/6550 +f 6550/1/6550 5400/1/5400 5403/1/5403 +f 5400/1/5400 5399/1/5399 5403/1/5403 +f 5400/1/5400 5191/1/5191 5399/1/5399 +f 5191/1/5191 5184/1/5184 5399/1/5399 +f 5399/1/5399 5184/1/5184 5401/1/5401 +f 5399/1/5399 5401/1/5401 5402/1/5402 +f 5401/1/5401 5404/1/5404 5402/1/5402 +f 5402/1/5402 5404/1/5404 6955/1/6955 +f 5404/1/5404 5180/1/5180 6955/1/6955 +f 6955/1/6955 5180/1/5180 6977/1/6977 +f 6955/1/6955 6977/1/6977 6964/1/6964 +f 6955/1/6955 6964/1/6964 6957/1/6957 +f 6954/1/6954 6955/1/6955 6957/1/6957 +f 6954/1/6954 6957/1/6957 6958/1/6958 +f 6957/1/6957 6963/1/6963 6958/1/6958 +f 6958/1/6958 6963/1/6963 6962/1/6962 +f 6958/1/6958 6962/1/6962 6960/1/6960 +f 6956/1/6956 6958/1/6958 6960/1/6960 +f 6960/1/6960 6962/1/6962 6967/1/6967 +f 6960/1/6960 6967/1/6967 6961/1/6961 +f 6961/1/6961 6967/1/6967 6969/1/6969 +f 6967/1/6967 6968/1/6968 6969/1/6969 +f 6969/1/6969 6968/1/6968 6982/1/6982 +f 6986/1/6986 6969/1/6969 6982/1/6982 +f 6979/1/6979 6982/1/6982 6968/1/6968 +f 6973/1/6973 6979/1/6979 6968/1/6968 +f 6973/1/6973 6968/1/6968 6970/1/6970 +f 6972/1/6972 6973/1/6973 6970/1/6970 +f 6978/1/6978 6973/1/6973 6972/1/6972 +f 6970/1/6970 6968/1/6968 6966/1/6966 +f 6970/1/6970 6966/1/6966 6971/1/6971 +f 6966/1/6966 6962/1/6962 6971/1/6971 +f 6971/1/6971 6962/1/6962 6965/1/6965 +f 6978/1/6978 6979/1/6979 6973/1/6973 +f 6981/1/6981 6982/1/6982 6979/1/6979 +f 6981/1/6981 6984/1/6984 6982/1/6982 +f 6983/1/6983 6984/1/6984 6981/1/6981 +f 6967/1/6967 6966/1/6966 6968/1/6968 +f 6962/1/6962 6966/1/6966 6967/1/6967 +f 6963/1/6963 6965/1/6965 6962/1/6962 +f 6964/1/6964 6965/1/6965 6963/1/6963 +f 6964/1/6964 6976/1/6976 6965/1/6965 +f 6975/1/6975 6965/1/6965 6976/1/6976 +f 6975/1/6975 6976/1/6976 5174/1/5174 +f 6975/1/6975 5174/1/5174 5167/1/5167 +f 5167/1/5167 5174/1/5174 5173/1/5173 +f 5167/1/5167 5173/1/5173 5171/1/5171 +f 5168/1/5168 5167/1/5167 5171/1/5171 +f 5168/1/5168 5171/1/5171 5172/1/5172 +f 5170/1/5170 5168/1/5168 5172/1/5172 +f 5170/1/5170 5172/1/5172 5397/1/5397 +f 6429/1/6429 5170/1/5170 5397/1/5397 +f 6429/1/6429 5397/1/5397 6361/1/6361 +f 6358/1/6358 6429/1/6429 6361/1/6361 +f 5250/1/5250 6361/1/6361 5397/1/5397 +f 5251/1/5251 5250/1/5250 5397/1/5397 +f 5247/1/5247 5250/1/5250 5251/1/5251 +f 5245/1/5245 5247/1/5247 5251/1/5251 +f 5245/1/5245 5251/1/5251 5398/1/5398 +f 5186/1/5186 5245/1/5245 5398/1/5398 +f 5186/1/5186 5398/1/5398 5187/1/5187 +f 5186/1/5186 5187/1/5187 5183/1/5183 +f 5185/1/5185 5186/1/5186 5183/1/5183 +f 5188/1/5188 5185/1/5185 5183/1/5183 +f 5188/1/5188 5183/1/5183 5184/1/5184 +f 5184/1/5184 5183/1/5183 5182/1/5182 +f 5183/1/5183 5178/1/5178 5182/1/5182 +f 5178/1/5178 5181/1/5181 5182/1/5182 +f 5182/1/5182 5181/1/5181 5401/1/5401 +f 5401/1/5401 5181/1/5181 5179/1/5179 +f 5176/1/5176 5179/1/5179 5181/1/5181 +f 5173/1/5173 5179/1/5179 5176/1/5176 +f 5173/1/5173 5180/1/5180 5179/1/5179 +f 5178/1/5178 5176/1/5176 5181/1/5181 +f 5178/1/5178 5175/1/5175 5176/1/5176 +f 5171/1/5171 5176/1/5176 5175/1/5175 +f 5177/1/5177 5175/1/5175 5178/1/5178 +f 5187/1/5187 5177/1/5177 5178/1/5178 +f 5177/1/5177 5172/1/5172 5175/1/5175 +f 5251/1/5251 5172/1/5172 5177/1/5177 +f 5190/1/5190 5185/1/5185 5188/1/5188 +f 5191/1/5191 5190/1/5190 5188/1/5188 +f 5193/1/5193 5190/1/5190 5191/1/5191 +f 5199/1/5199 5193/1/5193 5191/1/5191 +f 5198/1/5198 5193/1/5193 5199/1/5199 +f 6380/1/6380 5198/1/5198 5199/1/5199 +f 6380/1/6380 5199/1/5199 6549/1/6549 +f 5204/1/5204 5198/1/5198 6380/1/6380 +f 6376/1/6376 5204/1/5204 6380/1/6380 +f 6376/1/6376 6380/1/6380 6373/1/6373 +f 6370/1/6370 6376/1/6376 6373/1/6373 +f 6370/1/6370 6373/1/6373 6369/1/6369 +f 6369/1/6369 6366/1/6366 6370/1/6370 +f 6370/1/6370 6366/1/6366 6371/1/6371 +f 6370/1/6370 6371/1/6371 6375/1/6375 +f 6375/1/6375 6371/1/6371 6377/1/6377 +f 6375/1/6375 6377/1/6377 6378/1/6378 +f 6378/1/6378 6379/1/6379 6375/1/6375 +f 6375/1/6375 6379/1/6379 6376/1/6376 +f 6383/1/6383 6379/1/6379 6378/1/6378 +f 6378/1/6378 6421/1/6421 6383/1/6383 +f 6383/1/6383 6421/1/6421 6418/1/6418 +f 6383/1/6383 6418/1/6418 6382/1/6382 +f 6382/1/6382 6418/1/6418 6423/1/6423 +f 6423/1/6423 6381/1/6381 6382/1/6382 +f 6382/1/6382 6381/1/6381 6379/1/6379 +f 6381/1/6381 5205/1/5205 6379/1/6379 +f 6379/1/6379 5205/1/5205 5204/1/5204 +f 5205/1/5205 5203/1/5203 5204/1/5204 +f 5205/1/5205 5206/1/5206 5203/1/5203 +f 5206/1/5206 5209/1/5209 5203/1/5203 +f 5203/1/5203 5209/1/5209 5202/1/5202 +f 5203/1/5203 5202/1/5202 5197/1/5197 +f 5203/1/5203 5197/1/5197 5198/1/5198 +f 5202/1/5202 5200/1/5200 5197/1/5197 +f 5197/1/5197 5200/1/5200 5196/1/5196 +f 5197/1/5197 5196/1/5196 5193/1/5193 +f 5193/1/5193 5196/1/5196 5192/1/5192 +f 5196/1/5196 5194/1/5194 5192/1/5192 +f 5192/1/5192 5194/1/5194 5189/1/5189 +f 5192/1/5192 5189/1/5189 5190/1/5190 +f 5194/1/5194 5195/1/5195 5189/1/5189 +f 5189/1/5189 5195/1/5195 5186/1/5186 +f 5194/1/5194 5242/1/5242 5195/1/5195 +f 5242/1/5242 5241/1/5241 5195/1/5195 +f 5241/1/5241 5244/1/5244 5195/1/5195 +f 5195/1/5195 5244/1/5244 5245/1/5245 +f 5241/1/5241 5243/1/5243 5244/1/5244 +f 5243/1/5243 5246/1/5246 5244/1/5244 +f 5244/1/5244 5246/1/5246 5247/1/5247 +f 5246/1/5246 5249/1/5249 5247/1/5247 +f 5248/1/5248 5249/1/5249 5246/1/5246 +f 5248/1/5248 5252/1/5252 5249/1/5249 +f 5252/1/5252 6409/1/6409 5249/1/5249 +f 5249/1/5249 6409/1/6409 6415/1/6415 +f 5249/1/5249 6415/1/6415 5250/1/5250 +f 6409/1/6409 6414/1/6414 6415/1/6415 +f 6415/1/6415 6414/1/6414 6361/1/6361 +f 6414/1/6414 6420/1/6420 6361/1/6361 +f 6420/1/6420 6362/1/6362 6361/1/6361 +f 6359/1/6359 6361/1/6361 6362/1/6362 +f 6362/1/6362 6363/1/6363 6359/1/6359 +f 6362/1/6362 6367/1/6367 6363/1/6363 +f 6366/1/6366 6363/1/6363 6367/1/6367 +f 6365/1/6365 6363/1/6363 6366/1/6366 +f 6368/1/6368 6365/1/6365 6366/1/6366 +f 6420/1/6420 6367/1/6367 6362/1/6362 +f 6422/1/6422 6367/1/6367 6420/1/6420 +f 6416/1/6416 6422/1/6422 6420/1/6420 +f 6416/1/6416 6421/1/6421 6422/1/6422 +f 6421/1/6421 6377/1/6377 6422/1/6422 +f 6422/1/6422 6377/1/6377 6367/1/6367 +f 6414/1/6414 6416/1/6416 6420/1/6420 +f 6413/1/6413 6416/1/6416 6414/1/6414 +f 6413/1/6413 6412/1/6412 6416/1/6416 +f 6412/1/6412 6417/1/6417 6416/1/6416 +f 6417/1/6417 6418/1/6418 6416/1/6416 +f 6417/1/6417 6419/1/6419 6418/1/6418 +f 6410/1/6410 6419/1/6419 6417/1/6417 +f 6411/1/6411 6410/1/6410 6417/1/6417 +f 6408/1/6408 6410/1/6410 6411/1/6411 +f 6408/1/6408 6411/1/6411 6412/1/6412 +f 6403/1/6403 6410/1/6410 6408/1/6408 +f 6407/1/6407 6403/1/6403 6408/1/6408 +f 6407/1/6407 6408/1/6408 6409/1/6409 +f 6409/1/6409 6408/1/6408 6413/1/6413 +f 6405/1/6405 6403/1/6403 6407/1/6407 +f 5255/1/5255 6405/1/6405 6407/1/6407 +f 5255/1/5255 6407/1/6407 5252/1/5252 +f 5254/1/5254 5255/1/5255 5252/1/5252 +f 5254/1/5254 5252/1/5252 5253/1/5253 +f 5232/1/5232 5254/1/5254 5253/1/5253 +f 5232/1/5232 5253/1/5253 5237/1/5237 +f 5233/1/5233 5232/1/5232 5237/1/5237 +f 5233/1/5233 5237/1/5237 5234/1/5234 +f 5231/1/5231 5233/1/5233 5234/1/5234 +f 5231/1/5231 5234/1/5234 5235/1/5235 +f 5236/1/5236 5231/1/5231 5235/1/5235 +f 5236/1/5236 5235/1/5235 5200/1/5200 +f 5200/1/5200 5235/1/5235 5201/1/5201 +f 5235/1/5235 5238/1/5238 5201/1/5201 +f 5201/1/5201 5238/1/5238 5240/1/5240 +f 5201/1/5201 5240/1/5240 5194/1/5194 +f 5238/1/5238 5241/1/5241 5240/1/5240 +f 5213/1/5213 5231/1/5231 5236/1/5236 +f 5202/1/5202 5213/1/5213 5236/1/5236 +f 5213/1/5213 5228/1/5228 5231/1/5231 +f 5228/1/5228 5227/1/5227 5231/1/5231 +f 5226/1/5226 5227/1/5227 5228/1/5228 +f 5212/1/5212 5226/1/5226 5228/1/5228 +f 5211/1/5211 5226/1/5226 5212/1/5212 +f 5209/1/5209 5211/1/5211 5212/1/5212 +f 5209/1/5209 5212/1/5212 5213/1/5213 +f 5210/1/5210 5211/1/5211 5209/1/5209 +f 5210/1/5210 5215/1/5215 5211/1/5211 +f 5215/1/5215 5220/1/5220 5211/1/5211 +f 5215/1/5215 5219/1/5219 5220/1/5220 +f 5219/1/5219 5223/1/5223 5220/1/5220 +f 5220/1/5220 5223/1/5223 5225/1/5225 +f 5220/1/5220 5225/1/5225 5226/1/5226 +f 5223/1/5223 5229/1/5229 5225/1/5225 +f 5225/1/5225 5229/1/5229 5230/1/5230 +f 5225/1/5225 5230/1/5230 5227/1/5227 +f 5227/1/5227 5230/1/5230 5232/1/5232 +f 5229/1/5229 5254/1/5254 5230/1/5230 +f 5229/1/5229 5256/1/5256 5254/1/5254 +f 5259/1/5259 5256/1/5256 5229/1/5229 +f 5259/1/5259 5257/1/5257 5256/1/5256 +f 5257/1/5257 5255/1/5255 5256/1/5256 +f 5257/1/5257 5258/1/5258 5255/1/5255 +f 5261/1/5261 5258/1/5258 5257/1/5257 +f 5262/1/5262 5261/1/5261 5257/1/5257 +f 5262/1/5262 5257/1/5257 5260/1/5260 +f 5222/1/5222 5262/1/5262 5260/1/5260 +f 5222/1/5222 5260/1/5260 5224/1/5224 +f 5222/1/5222 5224/1/5224 5219/1/5219 +f 5221/1/5221 5222/1/5222 5219/1/5219 +f 5218/1/5218 5221/1/5221 5219/1/5219 +f 5217/1/5217 5221/1/5221 5218/1/5218 +f 5214/1/5214 5217/1/5217 5218/1/5218 +f 5214/1/5214 5218/1/5218 5215/1/5215 +f 5216/1/5216 5217/1/5217 5214/1/5214 +f 5208/1/5208 5216/1/5216 5214/1/5214 +f 5208/1/5208 5214/1/5214 5206/1/5206 +f 5207/1/5207 5208/1/5208 5206/1/5206 +f 5394/1/5394 5208/1/5208 5207/1/5207 +f 6384/1/6384 5394/1/5394 5207/1/5207 +f 6384/1/6384 5207/1/5207 6381/1/6381 +f 6425/1/6425 6384/1/6384 6381/1/6381 +f 6425/1/6425 6381/1/6381 6424/1/6424 +f 6424/1/6424 6419/1/6419 6425/1/6425 +f 6425/1/6425 6419/1/6419 6426/1/6426 +f 6425/1/6425 6426/1/6426 6428/1/6428 +f 6428/1/6428 6426/1/6426 6392/1/6392 +f 6428/1/6428 6392/1/6392 6391/1/6391 +f 6391/1/6391 6384/1/6384 6428/1/6428 +f 6387/1/6387 6384/1/6384 6391/1/6391 +f 6387/1/6387 6385/1/6385 6384/1/6384 +f 6386/1/6386 6385/1/6385 6387/1/6387 +f 6387/1/6387 6389/1/6389 6386/1/6386 +f 6386/1/6386 6389/1/6389 6390/1/6390 +f 6386/1/6386 6390/1/6390 6388/1/6388 +f 6388/1/6388 5370/1/5370 6386/1/6386 +f 5372/1/5372 5370/1/5370 6388/1/6388 +f 6388/1/6388 6395/1/6395 5372/1/5372 +f 5372/1/5372 6395/1/6395 6396/1/6396 +f 5372/1/5372 6396/1/6396 5371/1/5371 +f 5371/1/5371 6396/1/6396 5375/1/5375 +f 5371/1/5371 5375/1/5375 5374/1/5374 +f 5374/1/5374 5366/1/5366 5371/1/5371 +f 5371/1/5371 5366/1/5366 5370/1/5370 +f 5366/1/5366 5293/1/5293 5370/1/5370 +f 5370/1/5370 5293/1/5293 5294/1/5294 +f 5370/1/5370 5294/1/5294 6385/1/6385 +f 6385/1/6385 5294/1/5294 5394/1/5394 +f 5294/1/5294 5292/1/5292 5394/1/5394 +f 5294/1/5294 5291/1/5291 5292/1/5292 +f 5291/1/5291 5281/1/5281 5292/1/5292 +f 5292/1/5292 5281/1/5281 5216/1/5216 +f 5281/1/5281 5278/1/5278 5216/1/5216 +f 5216/1/5216 5278/1/5278 5280/1/5280 +f 5278/1/5278 5269/1/5269 5280/1/5280 +f 5280/1/5280 5269/1/5269 5267/1/5267 +f 5280/1/5280 5267/1/5267 5217/1/5217 +f 5269/1/5269 5266/1/5266 5267/1/5267 +f 5267/1/5267 5266/1/5266 5222/1/5222 +f 5269/1/5269 5268/1/5268 5266/1/5266 +f 5268/1/5268 5264/1/5264 5266/1/5266 +f 5266/1/5266 5264/1/5264 5262/1/5262 +f 5268/1/5268 5270/1/5270 5264/1/5264 +f 5270/1/5270 5265/1/5265 5264/1/5264 +f 5264/1/5264 5265/1/5265 5261/1/5261 +f 5265/1/5265 5263/1/5263 5261/1/5261 +f 5271/1/5271 5263/1/5263 5265/1/5265 +f 5271/1/5271 6430/1/6430 5263/1/5263 +f 6430/1/6430 6406/1/6406 5263/1/5263 +f 5263/1/5263 6406/1/6406 6404/1/6404 +f 5263/1/5263 6404/1/6404 5258/1/5258 +f 5258/1/5258 6404/1/6404 6405/1/6405 +f 6404/1/6404 6401/1/6401 6405/1/6405 +f 6404/1/6404 6400/1/6400 6401/1/6401 +f 6400/1/6400 6397/1/6397 6401/1/6401 +f 6401/1/6401 6397/1/6397 6398/1/6398 +f 6401/1/6401 6398/1/6398 6403/1/6403 +f 6403/1/6403 6398/1/6398 6399/1/6399 +f 6398/1/6398 6393/1/6393 6399/1/6399 +f 6393/1/6393 6392/1/6392 6399/1/6399 +f 6399/1/6399 6392/1/6392 6427/1/6427 +f 6399/1/6399 6427/1/6427 6410/1/6410 +f 6393/1/6393 6389/1/6389 6392/1/6392 +f 6397/1/6397 6393/1/6393 6398/1/6398 +f 6397/1/6397 6394/1/6394 6393/1/6393 +f 6394/1/6394 6390/1/6390 6393/1/6393 +f 6394/1/6394 6395/1/6395 6390/1/6390 +f 6547/1/6547 6395/1/6395 6394/1/6394 +f 6402/1/6402 6547/1/6547 6394/1/6394 +f 6400/1/6400 6547/1/6547 6402/1/6402 +f 6548/1/6548 6547/1/6547 6400/1/6400 +f 6406/1/6406 6548/1/6548 6400/1/6400 +f 5387/1/5387 6548/1/6548 6406/1/6406 +f 5387/1/5387 5385/1/5385 6548/1/6548 +f 5385/1/5385 5389/1/5389 6548/1/6548 +f 5385/1/5385 5382/1/5382 5389/1/5389 +f 5382/1/5382 5388/1/5388 5389/1/5389 +f 5388/1/5388 5375/1/5375 5389/1/5389 +f 5388/1/5388 5376/1/5376 5375/1/5375 +f 5373/1/5373 5375/1/5375 5376/1/5376 +f 5373/1/5373 5376/1/5376 5369/1/5369 +f 5369/1/5369 5366/1/5366 5373/1/5373 +f 5369/1/5369 5365/1/5365 5366/1/5366 +f 5365/1/5365 5295/1/5295 5366/1/5366 +f 5365/1/5365 5297/1/5297 5295/1/5295 +f 5297/1/5297 5296/1/5296 5295/1/5295 +f 5295/1/5295 5296/1/5296 5290/1/5290 +f 5295/1/5295 5290/1/5290 5293/1/5293 +f 5293/1/5293 5290/1/5290 5291/1/5291 +f 5290/1/5290 5285/1/5285 5291/1/5291 +f 5291/1/5291 5285/1/5285 5286/1/5286 +f 5285/1/5285 5282/1/5282 5286/1/5286 +f 5286/1/5286 5282/1/5282 5279/1/5279 +f 5286/1/5286 5279/1/5279 5281/1/5281 +f 5282/1/5282 5275/1/5275 5279/1/5279 +f 5279/1/5279 5275/1/5275 5276/1/5276 +f 5279/1/5279 5276/1/5276 5278/1/5278 +f 5278/1/5278 5276/1/5276 5274/1/5274 +f 5276/1/5276 5273/1/5273 5274/1/5274 +f 5273/1/5273 5268/1/5268 5274/1/5274 +f 5275/1/5275 5273/1/5273 5276/1/5276 +f 5275/1/5275 5277/1/5277 5273/1/5273 +f 5277/1/5277 5272/1/5272 5273/1/5273 +f 5273/1/5273 5272/1/5272 5270/1/5270 +f 5272/1/5272 5271/1/5271 5270/1/5270 +f 5396/1/5396 5271/1/5271 5272/1/5272 +f 5396/1/5396 6533/1/6533 5271/1/5271 +f 6532/1/6532 6533/1/6533 5396/1/5396 +f 5395/1/5395 6532/1/6532 5396/1/5396 +f 5395/1/5395 5396/1/5396 5277/1/5277 +f 5283/1/5283 5395/1/5395 5277/1/5277 +f 6528/1/6528 5395/1/5395 5283/1/5283 +f 5287/1/5287 6528/1/6528 5283/1/5283 +f 5284/1/5284 5287/1/5287 5283/1/5283 +f 5284/1/5284 5283/1/5283 5282/1/5282 +f 5288/1/5288 5287/1/5287 5284/1/5284 +f 5285/1/5285 5288/1/5288 5284/1/5284 +f 5289/1/5289 5288/1/5288 5285/1/5285 +f 5289/1/5289 6517/1/6517 5288/1/5288 +f 6517/1/6517 6518/1/6518 5288/1/5288 +f 6517/1/6517 6516/1/6516 6518/1/6518 +f 6516/1/6516 6525/1/6525 6518/1/6518 +f 6518/1/6518 6525/1/6525 6528/1/6528 +f 6525/1/6525 6529/1/6529 6528/1/6528 +f 6528/1/6528 6529/1/6529 6532/1/6532 +f 6529/1/6529 6531/1/6531 6532/1/6532 +f 6527/1/6527 6531/1/6531 6529/1/6529 +f 6527/1/6527 6530/1/6530 6531/1/6531 +f 6530/1/6530 6431/1/6431 6531/1/6531 +f 6531/1/6531 6431/1/6431 6430/1/6430 +f 6531/1/6531 6430/1/6430 6533/1/6533 +f 6431/1/6431 5387/1/5387 6430/1/6430 +f 6431/1/6431 5386/1/5386 5387/1/5387 +f 5386/1/5386 5383/1/5383 5387/1/5387 +f 5386/1/5386 5384/1/5384 5383/1/5383 +f 5384/1/5384 5378/1/5378 5383/1/5383 +f 5383/1/5383 5378/1/5378 5379/1/5379 +f 5383/1/5383 5379/1/5379 5382/1/5382 +f 5379/1/5379 5381/1/5381 5382/1/5382 +f 5379/1/5379 5377/1/5377 5381/1/5381 +f 5381/1/5381 5377/1/5377 5376/1/5376 +f 5368/1/5368 5376/1/5376 5377/1/5377 +f 5368/1/5368 5377/1/5377 5367/1/5367 +f 5367/1/5367 5365/1/5365 5368/1/5368 +f 5363/1/5363 5365/1/5365 5367/1/5367 +f 5363/1/5363 5364/1/5364 5365/1/5365 +f 5360/1/5360 5364/1/5364 5363/1/5363 +f 5363/1/5363 5361/1/5361 5360/1/5360 +f 5360/1/5360 5361/1/5361 5358/1/5358 +f 5360/1/5360 5358/1/5358 5359/1/5359 +f 5359/1/5359 5302/1/5302 5360/1/5360 +f 5353/1/5353 5302/1/5302 5359/1/5359 +f 5359/1/5359 5354/1/5354 5353/1/5353 +f 5353/1/5353 5354/1/5354 5350/1/5350 +f 5353/1/5353 5350/1/5350 5349/1/5349 +f 5349/1/5349 5350/1/5350 5345/1/5345 +f 5349/1/5349 5345/1/5345 5347/1/5347 +f 5347/1/5347 5303/1/5303 5349/1/5349 +f 5349/1/5349 5303/1/5303 5302/1/5302 +f 5303/1/5303 5301/1/5301 5302/1/5302 +f 5302/1/5302 5301/1/5301 5299/1/5299 +f 5302/1/5302 5299/1/5299 5364/1/5364 +f 5364/1/5364 5299/1/5299 5297/1/5297 +f 5299/1/5299 5298/1/5298 5297/1/5297 +f 5299/1/5299 5300/1/5300 5298/1/5298 +f 5300/1/5300 6504/1/6504 5298/1/5298 +f 5298/1/5298 6504/1/6504 6505/1/6505 +f 5298/1/5298 6505/1/6505 5296/1/5296 +f 5296/1/5296 6505/1/6505 6514/1/6514 +f 6505/1/6505 6506/1/6506 6514/1/6514 +f 6514/1/6514 6506/1/6506 6513/1/6513 +f 6514/1/6514 6513/1/6513 6515/1/6515 +f 6514/1/6514 6515/1/6515 5289/1/5289 +f 5290/1/5290 6514/1/6514 5289/1/5289 +f 6513/1/6513 6510/1/6510 6515/1/6515 +f 6515/1/6515 6510/1/6510 6516/1/6516 +f 6510/1/6510 6524/1/6524 6516/1/6516 +f 6510/1/6510 6512/1/6512 6524/1/6524 +f 6512/1/6512 6526/1/6526 6524/1/6524 +f 6524/1/6524 6526/1/6526 6527/1/6527 +f 6524/1/6524 6527/1/6527 6525/1/6525 +f 6512/1/6512 6511/1/6511 6526/1/6526 +f 6511/1/6511 6534/1/6534 6526/1/6526 +f 6526/1/6526 6534/1/6534 6530/1/6530 +f 6509/1/6509 6534/1/6534 6511/1/6511 +f 6507/1/6507 6509/1/6509 6511/1/6511 +f 6501/1/6501 6509/1/6509 6507/1/6507 +f 6502/1/6502 6501/1/6501 6507/1/6507 +f 6502/1/6502 6507/1/6507 6508/1/6508 +f 6506/1/6506 6502/1/6502 6508/1/6508 +f 6503/1/6503 6502/1/6502 6506/1/6506 +f 6503/1/6503 6499/1/6499 6502/1/6502 +f 6498/1/6498 6499/1/6499 6503/1/6503 +f 6505/1/6505 6498/1/6498 6503/1/6503 +f 6498/1/6498 6494/1/6494 6499/1/6499 +f 6494/1/6494 6495/1/6495 6499/1/6499 +f 6499/1/6499 6495/1/6495 6501/1/6501 +f 6495/1/6495 6500/1/6500 6501/1/6501 +f 6495/1/6495 6492/1/6492 6500/1/6500 +f 6492/1/6492 6536/1/6536 6500/1/6500 +f 6500/1/6500 6536/1/6536 6535/1/6535 +f 6500/1/6500 6535/1/6535 6509/1/6509 +f 6536/1/6536 6433/1/6433 6535/1/6535 +f 6535/1/6535 6433/1/6433 6432/1/6432 +f 6535/1/6535 6432/1/6432 6534/1/6534 +f 6534/1/6534 6432/1/6432 6431/1/6431 +f 6433/1/6433 5390/1/5390 6432/1/6432 +f 6432/1/6432 5390/1/5390 5386/1/5386 +f 6433/1/6433 5391/1/5391 5390/1/5390 +f 5391/1/5391 5356/1/5356 5390/1/5390 +f 5390/1/5390 5356/1/5356 5384/1/5384 +f 5356/1/5356 5380/1/5380 5384/1/5384 +f 5356/1/5356 5357/1/5357 5380/1/5380 +f 5357/1/5357 5355/1/5355 5380/1/5380 +f 5380/1/5380 5355/1/5355 5362/1/5362 +f 5380/1/5380 5362/1/5362 5378/1/5378 +f 5355/1/5355 5358/1/5358 5362/1/5362 +f 5355/1/5355 5354/1/5354 5358/1/5358 +f 5352/1/5352 5354/1/5354 5355/1/5355 +f 5357/1/5357 5352/1/5352 5355/1/5355 +f 5356/1/5356 5352/1/5352 5357/1/5357 +f 5351/1/5351 5352/1/5352 5356/1/5356 +f 5351/1/5351 5348/1/5348 5352/1/5352 +f 5352/1/5352 5348/1/5348 5350/1/5350 +f 5336/1/5336 5348/1/5348 5351/1/5351 +f 5337/1/5337 5336/1/5336 5351/1/5351 +f 5337/1/5337 5351/1/5351 5391/1/5391 +f 6434/1/6434 5337/1/5337 5391/1/5391 +f 6436/1/6436 5337/1/5337 6434/1/6434 +f 6435/1/6435 6436/1/6436 6434/1/6434 +f 6435/1/6435 6434/1/6434 6484/1/6484 +f 6481/1/6481 6435/1/6435 6484/1/6484 +f 6481/1/6481 6484/1/6484 6485/1/6485 +f 6483/1/6483 6481/1/6481 6485/1/6485 +f 6483/1/6483 6485/1/6485 6488/1/6488 +f 6489/1/6489 6483/1/6483 6488/1/6488 +f 6489/1/6489 6488/1/6488 6490/1/6490 +f 6496/1/6496 6489/1/6489 6490/1/6490 +f 6496/1/6496 6490/1/6490 6497/1/6497 +f 6519/1/6519 6496/1/6496 6497/1/6497 +f 6519/1/6519 6497/1/6497 6504/1/6504 +f 6504/1/6504 6497/1/6497 6498/1/6498 +f 6497/1/6497 6493/1/6493 6498/1/6498 +f 6520/1/6520 6496/1/6496 6519/1/6519 +f 5300/1/5300 6520/1/6520 6519/1/6519 +f 6350/1/6350 6520/1/6520 5300/1/5300 +f 5301/1/5301 6350/1/6350 5300/1/5300 +f 5304/1/5304 6350/1/6350 5301/1/5301 +f 5304/1/5304 6349/1/6349 6350/1/6350 +f 6349/1/6349 6466/1/6466 6350/1/6350 +f 6350/1/6350 6466/1/6466 6521/1/6521 +f 6466/1/6466 6470/1/6470 6521/1/6521 +f 6521/1/6521 6470/1/6470 6478/1/6478 +f 6521/1/6521 6478/1/6478 6522/1/6522 +f 6521/1/6521 6522/1/6522 6520/1/6520 +f 6520/1/6520 6522/1/6522 6523/1/6523 +f 6522/1/6522 6482/1/6482 6523/1/6523 +f 6523/1/6523 6482/1/6482 6489/1/6489 +f 6522/1/6522 6477/1/6477 6482/1/6482 +f 6477/1/6477 6479/1/6479 6482/1/6482 +f 6482/1/6482 6479/1/6479 6483/1/6483 +f 6477/1/6477 6475/1/6475 6479/1/6479 +f 6475/1/6475 6480/1/6480 6479/1/6479 +f 6479/1/6479 6480/1/6480 6481/1/6481 +f 6475/1/6475 6476/1/6476 6480/1/6480 +f 6476/1/6476 6435/1/6435 6480/1/6480 +f 6476/1/6476 6439/1/6439 6435/1/6435 +f 6474/1/6474 6439/1/6439 6476/1/6476 +f 6471/1/6471 6474/1/6474 6476/1/6476 +f 6473/1/6473 6474/1/6474 6471/1/6471 +f 6469/1/6469 6473/1/6473 6471/1/6471 +f 6469/1/6469 6471/1/6471 6472/1/6472 +f 6470/1/6470 6469/1/6469 6472/1/6472 +f 6468/1/6468 6469/1/6469 6470/1/6470 +f 6468/1/6468 6467/1/6467 6469/1/6469 +f 6467/1/6467 6450/1/6450 6469/1/6469 +f 6452/1/6452 6450/1/6450 6467/1/6467 +f 6465/1/6465 6452/1/6452 6467/1/6467 +f 6460/1/6460 6452/1/6452 6465/1/6465 +f 6464/1/6464 6460/1/6460 6465/1/6465 +f 6464/1/6464 6465/1/6465 6466/1/6466 +f 6466/1/6466 6465/1/6465 6468/1/6468 +f 6464/1/6464 6459/1/6459 6460/1/6460 +f 6459/1/6459 6451/1/6451 6460/1/6460 +f 6459/1/6459 6458/1/6458 6451/1/6451 +f 6458/1/6458 6447/1/6447 6451/1/6451 +f 6451/1/6451 6447/1/6447 6448/1/6448 +f 6451/1/6451 6448/1/6448 6452/1/6452 +f 6447/1/6447 6443/1/6443 6448/1/6448 +f 6448/1/6448 6443/1/6443 6444/1/6444 +f 6448/1/6448 6444/1/6444 6450/1/6450 +f 6450/1/6450 6444/1/6444 6449/1/6449 +f 6450/1/6450 6449/1/6449 6473/1/6473 +f 6444/1/6444 6437/1/6437 6449/1/6449 +f 6449/1/6449 6437/1/6437 6474/1/6474 +f 6444/1/6444 6440/1/6440 6437/1/6437 +f 6440/1/6440 6438/1/6438 6437/1/6437 +f 6437/1/6437 6438/1/6438 6436/1/6436 +f 6437/1/6437 6436/1/6436 6439/1/6439 +f 6438/1/6438 5333/1/5333 6436/1/6436 +f 6438/1/6438 5330/1/5330 5333/1/5333 +f 5330/1/5330 5328/1/5328 5333/1/5333 +f 5333/1/5333 5328/1/5328 5332/1/5332 +f 5333/1/5333 5332/1/5332 5337/1/5337 +f 5328/1/5328 5327/1/5327 5332/1/5332 +f 5332/1/5332 5327/1/5327 5334/1/5334 +f 5332/1/5332 5334/1/5334 5335/1/5335 +f 5332/1/5332 5335/1/5335 5336/1/5336 +f 5334/1/5334 5339/1/5339 5335/1/5335 +f 5335/1/5335 5339/1/5339 5343/1/5343 +f 5335/1/5335 5343/1/5343 5348/1/5348 +f 5343/1/5343 5345/1/5345 5348/1/5348 +f 5343/1/5343 5342/1/5342 5345/1/5345 +f 5344/1/5344 5345/1/5345 5342/1/5342 +f 5344/1/5344 5342/1/5342 5346/1/5346 +f 5346/1/5346 5303/1/5303 5344/1/5344 +f 5346/1/5346 5305/1/5305 5303/1/5303 +f 5305/1/5305 5304/1/5304 5303/1/5303 +f 5305/1/5305 5306/1/5306 5304/1/5304 +f 5307/1/5307 5306/1/5306 5305/1/5305 +f 5311/1/5311 5307/1/5307 5305/1/5305 +f 5311/1/5311 5305/1/5305 5340/1/5340 +f 5340/1/5340 5338/1/5338 5311/1/5311 +f 5311/1/5311 5338/1/5338 5315/1/5315 +f 5311/1/5311 5315/1/5315 5310/1/5310 +f 5310/1/5310 5315/1/5315 5316/1/5316 +f 5310/1/5310 5316/1/5316 5314/1/5314 +f 5314/1/5314 5309/1/5309 5310/1/5310 +f 5310/1/5310 5309/1/5309 5307/1/5307 +f 5309/1/5309 5308/1/5308 5307/1/5307 +f 5309/1/5309 6345/1/6345 5308/1/5308 +f 6345/1/6345 6346/1/6346 5308/1/5308 +f 5308/1/5308 6346/1/6346 6348/1/6348 +f 5308/1/5308 6348/1/6348 5306/1/5306 +f 5306/1/5306 6348/1/6348 6349/1/6349 +f 6348/1/6348 6464/1/6464 6349/1/6349 +f 6348/1/6348 6463/1/6463 6464/1/6464 +f 6346/1/6346 6463/1/6463 6348/1/6348 +f 6346/1/6346 6538/1/6538 6463/1/6463 +f 6538/1/6538 6462/1/6462 6463/1/6463 +f 6463/1/6463 6462/1/6462 6459/1/6459 +f 6462/1/6462 6461/1/6461 6459/1/6459 +f 6462/1/6462 6544/1/6544 6461/1/6461 +f 6544/1/6544 6453/1/6453 6461/1/6461 +f 6461/1/6461 6453/1/6453 6458/1/6458 +f 6544/1/6544 6456/1/6456 6453/1/6453 +f 6456/1/6456 6454/1/6454 6453/1/6453 +f 6453/1/6453 6454/1/6454 6446/1/6446 +f 6453/1/6453 6446/1/6446 6447/1/6447 +f 6454/1/6454 6445/1/6445 6446/1/6446 +f 6446/1/6446 6445/1/6445 6442/1/6442 +f 6446/1/6446 6442/1/6442 6443/1/6443 +f 6443/1/6443 6442/1/6442 6440/1/6440 +f 6442/1/6442 6441/1/6441 6440/1/6440 +f 6445/1/6445 6441/1/6441 6442/1/6442 +f 6445/1/6445 6892/1/6892 6441/1/6441 +f 6892/1/6892 5329/1/5329 6441/1/6441 +f 6441/1/6441 5329/1/5329 5330/1/5330 +f 5329/1/5329 5326/1/5326 5330/1/5330 +f 5329/1/5329 5331/1/5331 5326/1/5326 +f 5331/1/5331 5320/1/5320 5326/1/5326 +f 5326/1/5326 5320/1/5320 5324/1/5324 +f 5326/1/5326 5324/1/5324 5325/1/5325 +f 5326/1/5326 5325/1/5325 5328/1/5328 +f 5324/1/5324 5322/1/5322 5325/1/5325 +f 5325/1/5325 5322/1/5322 5323/1/5323 +f 5325/1/5325 5323/1/5323 5327/1/5327 +f 5322/1/5322 5316/1/5316 5323/1/5323 +f 5322/1/5322 5317/1/5317 5316/1/5316 +f 5320/1/5320 5317/1/5317 5322/1/5322 +f 5320/1/5320 5318/1/5318 5317/1/5317 +f 5313/1/5313 5317/1/5317 5318/1/5318 +f 5313/1/5313 5318/1/5318 5312/1/5312 +f 5312/1/5312 5309/1/5309 5313/1/5313 +f 5312/1/5312 6347/1/6347 5309/1/5309 +f 6351/1/6351 6347/1/6347 5312/1/5312 +f 5312/1/5312 5319/1/5319 6351/1/6351 +f 6351/1/6351 5319/1/5319 6353/1/6353 +f 6353/1/6353 5319/1/5319 6276/1/6276 +f 6353/1/6353 6276/1/6276 6352/1/6352 +f 6352/1/6352 6347/1/6347 6353/1/6353 +f 6352/1/6352 6340/1/6340 6347/1/6347 +f 6340/1/6340 6342/1/6342 6347/1/6347 +f 6347/1/6347 6342/1/6342 6345/1/6345 +f 6342/1/6342 6344/1/6344 6345/1/6345 +f 6342/1/6342 6341/1/6341 6344/1/6344 +f 6341/1/6341 6868/1/6868 6344/1/6344 +f 6344/1/6344 6868/1/6868 6540/1/6540 +f 6344/1/6344 6540/1/6540 6537/1/6537 +f 6344/1/6344 6537/1/6537 6346/1/6346 +f 6540/1/6540 6541/1/6541 6537/1/6537 +f 6537/1/6537 6541/1/6541 6542/1/6542 +f 6537/1/6537 6542/1/6542 6539/1/6539 +f 6537/1/6537 6539/1/6539 6538/1/6538 +f 6542/1/6542 6543/1/6543 6539/1/6539 +f 6539/1/6539 6543/1/6543 6544/1/6544 +f 6542/1/6542 6545/1/6545 6543/1/6543 +f 6545/1/6545 6546/1/6546 6543/1/6543 +f 6546/1/6546 6457/1/6457 6543/1/6543 +f 6543/1/6543 6457/1/6457 6456/1/6456 +f 6457/1/6457 6455/1/6455 6456/1/6456 +f 6457/1/6457 6894/1/6894 6455/1/6455 +f 6894/1/6894 6893/1/6893 6455/1/6455 +f 6455/1/6455 6893/1/6893 6445/1/6445 +f 6894/1/6894 6889/1/6889 6893/1/6893 +f 6889/1/6889 6892/1/6892 6893/1/6893 +f 6889/1/6889 6891/1/6891 6892/1/6892 +f 6891/1/6891 5392/1/5392 6892/1/6892 +f 6891/1/6891 6265/1/6265 5392/1/5392 +f 6265/1/6265 6268/1/6268 5392/1/5392 +f 5392/1/5392 6268/1/6268 5393/1/5393 +f 5392/1/5392 5393/1/5393 5331/1/5331 +f 5393/1/5393 5321/1/5321 5331/1/5331 +f 5393/1/5393 6270/1/6270 5321/1/5321 +f 6270/1/6270 6275/1/6275 5321/1/5321 +f 6275/1/6275 5319/1/5319 5321/1/5321 +f 5321/1/5321 5319/1/5319 5318/1/5318 +f 6270/1/6270 6273/1/6273 6275/1/6275 +f 6273/1/6273 6276/1/6276 6275/1/6275 +f 6273/1/6273 6274/1/6274 6276/1/6276 +f 6354/1/6354 6276/1/6276 6274/1/6274 +f 6354/1/6354 6274/1/6274 6355/1/6355 +f 6355/1/6355 6340/1/6340 6354/1/6354 +f 6279/1/6279 6340/1/6340 6355/1/6355 +f 6279/1/6279 6285/1/6285 6340/1/6340 +f 6285/1/6285 6339/1/6339 6340/1/6340 +f 6285/1/6285 6338/1/6338 6339/1/6339 +f 6338/1/6338 6343/1/6343 6339/1/6339 +f 6339/1/6339 6343/1/6343 6341/1/6341 +f 6343/1/6343 6866/1/6866 6341/1/6341 +f 6343/1/6343 6864/1/6864 6866/1/6866 +f 6864/1/6864 6863/1/6863 6866/1/6866 +f 6866/1/6866 6863/1/6863 6872/1/6872 +f 6866/1/6866 6872/1/6872 6869/1/6869 +f 6866/1/6866 6869/1/6869 6868/1/6868 +f 6868/1/6868 6869/1/6869 6870/1/6870 +f 6868/1/6868 6870/1/6870 6871/1/6871 +f 6870/1/6870 6875/1/6875 6871/1/6871 +f 6871/1/6871 6875/1/6875 6883/1/6883 +f 6871/1/6871 6883/1/6883 6905/1/6905 +f 6540/1/6540 6871/1/6871 6905/1/6905 +f 6905/1/6905 6883/1/6883 6904/1/6904 +f 6905/1/6905 6904/1/6904 6541/1/6541 +f 6541/1/6541 6904/1/6904 6545/1/6545 +f 6883/1/6883 6888/1/6888 6904/1/6904 +f 6904/1/6904 6888/1/6888 6546/1/6546 +f 6888/1/6888 6890/1/6890 6546/1/6546 +f 6546/1/6546 6890/1/6890 6894/1/6894 +f 6888/1/6888 6887/1/6887 6890/1/6890 +f 6887/1/6887 6889/1/6889 6890/1/6890 +f 6887/1/6887 6886/1/6886 6889/1/6889 +f 6884/1/6884 6886/1/6886 6887/1/6887 +f 6882/1/6882 6884/1/6884 6887/1/6887 +f 6881/1/6881 6884/1/6884 6882/1/6882 +f 6875/1/6875 6881/1/6881 6882/1/6882 +f 6876/1/6876 6881/1/6881 6875/1/6875 +f 6874/1/6874 6876/1/6876 6875/1/6875 +f 6873/1/6873 6876/1/6876 6874/1/6874 +f 6869/1/6869 6873/1/6873 6874/1/6874 +f 6873/1/6873 6878/1/6878 6876/1/6876 +f 6878/1/6878 6879/1/6879 6876/1/6876 +f 6876/1/6876 6879/1/6879 6880/1/6880 +f 6879/1/6879 6885/1/6885 6880/1/6880 +f 6880/1/6880 6885/1/6885 6884/1/6884 +f 6879/1/6879 6902/1/6902 6885/1/6885 +f 6902/1/6902 6895/1/6895 6885/1/6885 +f 6885/1/6885 6895/1/6895 6891/1/6891 +f 6885/1/6885 6891/1/6891 6886/1/6886 +f 6902/1/6902 6262/1/6262 6895/1/6895 +f 6262/1/6262 6263/1/6263 6895/1/6895 +f 6895/1/6895 6263/1/6263 6265/1/6265 +f 6263/1/6263 6264/1/6264 6265/1/6265 +f 6263/1/6263 6266/1/6266 6264/1/6264 +f 6266/1/6266 6267/1/6267 6264/1/6264 +f 6264/1/6264 6267/1/6267 6269/1/6269 +f 6264/1/6264 6269/1/6269 6268/1/6268 +f 6268/1/6268 6269/1/6269 6271/1/6271 +f 6268/1/6268 6271/1/6271 6270/1/6270 +f 6269/1/6269 6272/1/6272 6271/1/6271 +f 6272/1/6272 6274/1/6274 6271/1/6271 +f 6272/1/6272 6277/1/6277 6274/1/6274 +f 6279/1/6279 6274/1/6274 6277/1/6277 +f 6279/1/6279 6277/1/6277 6280/1/6280 +f 6280/1/6280 6277/1/6277 6278/1/6278 +f 6280/1/6280 6278/1/6278 6281/1/6281 +f 6281/1/6281 6284/1/6284 6280/1/6280 +f 6280/1/6280 6284/1/6284 6285/1/6285 +f 6286/1/6286 6284/1/6284 6281/1/6281 +f 6281/1/6281 6282/1/6282 6286/1/6286 +f 6286/1/6286 6282/1/6282 6288/1/6288 +f 6286/1/6286 6288/1/6288 6289/1/6289 +f 6289/1/6289 6288/1/6288 6291/1/6291 +f 6289/1/6289 6291/1/6291 6292/1/6292 +f 6292/1/6292 6293/1/6293 6289/1/6289 +f 6289/1/6289 6293/1/6293 6284/1/6284 +f 6293/1/6293 6337/1/6337 6284/1/6284 +f 6284/1/6284 6337/1/6337 6338/1/6338 +f 6337/1/6337 6865/1/6865 6338/1/6338 +f 6337/1/6337 6867/1/6867 6865/1/6865 +f 6867/1/6867 6858/1/6858 6865/1/6865 +f 6865/1/6865 6858/1/6858 6860/1/6860 +f 6865/1/6865 6860/1/6860 6864/1/6864 +f 6860/1/6860 6859/1/6859 6864/1/6864 +f 6860/1/6860 6855/1/6855 6859/1/6859 +f 6855/1/6855 6856/1/6856 6859/1/6859 +f 6859/1/6859 6856/1/6856 6862/1/6862 +f 6859/1/6859 6862/1/6862 6863/1/6863 +f 6863/1/6863 6862/1/6862 6903/1/6903 +f 6863/1/6863 6903/1/6903 6877/1/6877 +f 6903/1/6903 6901/1/6901 6877/1/6877 +f 6877/1/6877 6901/1/6901 6878/1/6878 +f 6901/1/6901 6900/1/6900 6878/1/6878 +f 6901/1/6901 6899/1/6899 6900/1/6900 +f 6899/1/6899 6897/1/6897 6900/1/6900 +f 6900/1/6900 6897/1/6897 6902/1/6902 +f 6899/1/6899 6896/1/6896 6897/1/6897 +f 6896/1/6896 6262/1/6262 6897/1/6897 +f 6896/1/6896 6260/1/6260 6262/1/6262 +f 6260/1/6260 6261/1/6261 6262/1/6262 +f 6260/1/6260 6259/1/6259 6261/1/6261 +f 6259/1/6259 6305/1/6305 6261/1/6261 +f 6261/1/6261 6305/1/6305 6266/1/6266 +f 6305/1/6305 6287/1/6287 6266/1/6266 +f 6266/1/6266 6287/1/6287 6357/1/6357 +f 6357/1/6357 6287/1/6287 6283/1/6283 +f 6357/1/6357 6283/1/6283 6267/1/6267 +f 6267/1/6267 6283/1/6283 6272/1/6272 +f 6283/1/6283 6278/1/6278 6272/1/6272 +f 6283/1/6283 6282/1/6282 6278/1/6278 +f 6287/1/6287 6282/1/6282 6283/1/6283 +f 6305/1/6305 6290/1/6290 6287/1/6287 +f 6287/1/6287 6290/1/6290 6288/1/6288 +f 6304/1/6304 6290/1/6290 6305/1/6305 +f 6304/1/6304 6302/1/6302 6290/1/6290 +f 6302/1/6302 6294/1/6294 6290/1/6290 +f 6294/1/6294 6291/1/6291 6290/1/6290 +f 6294/1/6294 6295/1/6295 6291/1/6291 +f 6296/1/6296 6291/1/6291 6295/1/6295 +f 6296/1/6296 6295/1/6295 6297/1/6297 +f 6297/1/6297 6293/1/6293 6296/1/6296 +f 6297/1/6297 6298/1/6298 6293/1/6293 +f 6298/1/6298 6336/1/6336 6293/1/6293 +f 6298/1/6298 6335/1/6335 6336/1/6336 +f 6335/1/6335 6906/1/6906 6336/1/6336 +f 6336/1/6336 6906/1/6906 6867/1/6867 +f 6906/1/6906 6907/1/6907 6867/1/6867 +f 6867/1/6867 6907/1/6907 6908/1/6908 +f 6907/1/6907 6837/1/6837 6908/1/6908 +f 6908/1/6908 6837/1/6837 6909/1/6909 +f 6908/1/6908 6909/1/6909 6857/1/6857 +f 6908/1/6908 6857/1/6857 6858/1/6858 +f 6858/1/6858 6857/1/6857 6854/1/6854 +f 6858/1/6858 6854/1/6854 6855/1/6855 +f 6854/1/6854 6850/1/6850 6855/1/6855 +f 6854/1/6854 6849/1/6849 6850/1/6850 +f 6849/1/6849 6847/1/6847 6850/1/6850 +f 6847/1/6847 6851/1/6851 6850/1/6850 +f 6850/1/6850 6851/1/6851 6853/1/6853 +f 6850/1/6850 6853/1/6853 6856/1/6856 +f 6856/1/6856 6853/1/6853 6861/1/6861 +f 6853/1/6853 6898/1/6898 6861/1/6861 +f 6861/1/6861 6898/1/6898 6899/1/6899 +f 6853/1/6853 6852/1/6852 6898/1/6898 +f 6852/1/6852 6896/1/6896 6898/1/6898 +f 6852/1/6852 6845/1/6845 6896/1/6896 +f 6846/1/6846 6845/1/6845 6852/1/6852 +f 6851/1/6851 6846/1/6846 6852/1/6852 +f 6846/1/6846 6843/1/6843 6845/1/6845 +f 6843/1/6843 6260/1/6260 6845/1/6845 +f 6843/1/6843 6255/1/6255 6260/1/6260 +f 6840/1/6840 6255/1/6255 6843/1/6843 +f 6841/1/6841 6840/1/6840 6843/1/6843 +f 6841/1/6841 6843/1/6843 6844/1/6844 +f 6842/1/6842 6841/1/6841 6844/1/6844 +f 6842/1/6842 6844/1/6844 6847/1/6847 +f 6848/1/6848 6842/1/6842 6847/1/6847 +f 6836/1/6836 6842/1/6842 6848/1/6848 +f 6909/1/6909 6836/1/6836 6848/1/6848 +f 6836/1/6836 6835/1/6835 6842/1/6842 +f 6833/1/6833 6835/1/6835 6836/1/6836 +f 6837/1/6837 6833/1/6833 6836/1/6836 +f 6834/1/6834 6833/1/6833 6837/1/6837 +f 6834/1/6834 6827/1/6827 6833/1/6833 +f 6827/1/6827 6828/1/6828 6833/1/6833 +f 6828/1/6828 6832/1/6832 6833/1/6833 +f 6828/1/6828 6831/1/6831 6832/1/6832 +f 6832/1/6832 6831/1/6831 6838/1/6838 +f 6832/1/6832 6838/1/6838 6835/1/6835 +f 6835/1/6835 6838/1/6838 6841/1/6841 +f 6831/1/6831 6839/1/6839 6838/1/6838 +f 6838/1/6838 6839/1/6839 6840/1/6840 +f 6829/1/6829 6839/1/6839 6831/1/6831 +f 6829/1/6829 6910/1/6910 6839/1/6839 +f 6910/1/6910 5627/1/5627 6839/1/6839 +f 6839/1/6839 5627/1/5627 6255/1/6255 +f 5627/1/5627 6254/1/6254 6255/1/6255 +f 6255/1/6255 6254/1/6254 6259/1/6259 +f 6254/1/6254 6258/1/6258 6259/1/6259 +f 6259/1/6259 6258/1/6258 6304/1/6304 +f 6254/1/6254 6257/1/6257 6258/1/6258 +f 6257/1/6257 6306/1/6306 6258/1/6258 +f 6258/1/6258 6306/1/6306 6303/1/6303 +f 6258/1/6258 6303/1/6303 6302/1/6302 +f 6303/1/6303 6299/1/6299 6302/1/6302 +f 6303/1/6303 6300/1/6300 6299/1/6299 +f 6299/1/6299 6300/1/6300 6295/1/6295 +f 6301/1/6301 6295/1/6295 6300/1/6300 +f 6301/1/6301 6300/1/6300 6334/1/6334 +f 6334/1/6334 6298/1/6298 6301/1/6301 +f 6333/1/6333 6298/1/6298 6334/1/6334 +f 6333/1/6333 6331/1/6331 6298/1/6298 +f 6327/1/6327 6331/1/6331 6333/1/6333 +f 6333/1/6333 6312/1/6312 6327/1/6327 +f 6327/1/6327 6312/1/6312 6311/1/6311 +f 6327/1/6327 6311/1/6311 6325/1/6325 +f 6325/1/6325 6328/1/6328 6327/1/6327 +f 6326/1/6326 6328/1/6328 6325/1/6325 +f 6325/1/6325 6314/1/6314 6326/1/6326 +f 6326/1/6326 6314/1/6314 6317/1/6317 +f 6326/1/6326 6317/1/6317 6329/1/6329 +f 6329/1/6329 6317/1/6317 6321/1/6321 +f 6329/1/6329 6321/1/6321 6356/1/6356 +f 6356/1/6356 6332/1/6332 6329/1/6329 +f 6329/1/6329 6332/1/6332 6328/1/6328 +f 6332/1/6332 6731/1/6731 6328/1/6328 +f 6328/1/6328 6731/1/6731 6330/1/6330 +f 6328/1/6328 6330/1/6330 6331/1/6331 +f 6331/1/6331 6330/1/6330 6335/1/6335 +f 6330/1/6330 6815/1/6815 6335/1/6335 +f 6330/1/6330 6733/1/6733 6815/1/6815 +f 6733/1/6733 6814/1/6814 6815/1/6815 +f 6815/1/6815 6814/1/6814 6817/1/6817 +f 6815/1/6815 6817/1/6817 6906/1/6906 +f 6814/1/6814 6816/1/6816 6817/1/6817 +f 6817/1/6817 6816/1/6816 6821/1/6821 +f 6817/1/6817 6821/1/6821 6826/1/6826 +f 6817/1/6817 6826/1/6826 6907/1/6907 +f 6907/1/6907 6826/1/6826 6834/1/6834 +f 6821/1/6821 6825/1/6825 6826/1/6826 +f 6826/1/6826 6825/1/6825 6827/1/6827 +f 6821/1/6821 6820/1/6820 6825/1/6825 +f 6820/1/6820 6824/1/6824 6825/1/6825 +f 6825/1/6825 6824/1/6824 6828/1/6828 +f 6824/1/6824 6829/1/6829 6828/1/6828 +f 6824/1/6824 6830/1/6830 6829/1/6829 +f 6823/1/6823 6830/1/6830 6824/1/6824 +f 6823/1/6823 6912/1/6912 6830/1/6830 +f 6912/1/6912 6911/1/6911 6830/1/6830 +f 6830/1/6830 6911/1/6911 6910/1/6910 +f 6911/1/6911 5623/1/5623 6910/1/6910 +f 5734/1/5734 5623/1/5623 6911/1/6911 +f 5734/1/5734 5626/1/5626 5623/1/5623 +f 5626/1/5626 5624/1/5624 5623/1/5623 +f 5623/1/5623 5624/1/5624 5625/1/5625 +f 5623/1/5623 5625/1/5625 5627/1/5627 +f 5624/1/5624 6256/1/6256 5625/1/5625 +f 5625/1/5625 6256/1/6256 6257/1/6257 +f 6256/1/6256 6308/1/6308 6257/1/6257 +f 6256/1/6256 6309/1/6309 6308/1/6308 +f 6309/1/6309 6310/1/6310 6308/1/6308 +f 6308/1/6308 6310/1/6310 6307/1/6307 +f 6308/1/6308 6307/1/6307 6306/1/6306 +f 6310/1/6310 6311/1/6311 6307/1/6307 +f 6310/1/6310 6314/1/6314 6311/1/6311 +f 6313/1/6313 6314/1/6314 6310/1/6310 +f 6309/1/6309 6313/1/6313 6310/1/6310 +f 6256/1/6256 6313/1/6313 6309/1/6309 +f 6315/1/6315 6313/1/6313 6256/1/6256 +f 6315/1/6315 6316/1/6316 6313/1/6313 +f 6313/1/6313 6316/1/6316 6317/1/6317 +f 6318/1/6318 6316/1/6316 6315/1/6315 +f 5628/1/5628 6318/1/6318 6315/1/6315 +f 5628/1/5628 6315/1/6315 5624/1/5624 +f 5628/1/5628 6322/1/6322 6318/1/6318 +f 6322/1/6322 6319/1/6319 6318/1/6318 +f 6322/1/6322 6806/1/6806 6319/1/6319 +f 6806/1/6806 6323/1/6323 6319/1/6319 +f 6319/1/6319 6323/1/6323 6320/1/6320 +f 6319/1/6319 6320/1/6320 6316/1/6316 +f 6320/1/6320 6321/1/6321 6316/1/6316 +f 6320/1/6320 6324/1/6324 6321/1/6321 +f 6791/1/6791 6321/1/6321 6324/1/6324 +f 6791/1/6791 6324/1/6324 6789/1/6789 +f 6789/1/6789 6332/1/6332 6791/1/6791 +f 6789/1/6789 6785/1/6785 6332/1/6332 +f 6785/1/6785 6734/1/6734 6332/1/6332 +f 6785/1/6785 6736/1/6736 6734/1/6734 +f 6736/1/6736 5707/1/5707 6734/1/6734 +f 6734/1/6734 5707/1/5707 6732/1/6732 +f 6734/1/6734 6732/1/6732 6731/1/6731 +f 6731/1/6731 6732/1/6732 6733/1/6733 +f 6732/1/6732 6735/1/6735 6733/1/6733 +f 6733/1/6733 6735/1/6735 6810/1/6810 +f 6735/1/6735 6809/1/6809 6810/1/6810 +f 6810/1/6810 6809/1/6809 6813/1/6813 +f 6810/1/6810 6813/1/6813 6814/1/6814 +f 6809/1/6809 6812/1/6812 6813/1/6813 +f 6813/1/6813 6812/1/6812 6818/1/6818 +f 6813/1/6813 6818/1/6818 6816/1/6816 +f 6816/1/6816 6818/1/6818 6819/1/6819 +f 6816/1/6816 6819/1/6819 6820/1/6820 +f 6819/1/6819 6823/1/6823 6820/1/6820 +f 6822/1/6822 6823/1/6823 6819/1/6819 +f 6818/1/6818 6822/1/6822 6819/1/6819 +f 6812/1/6812 6822/1/6822 6818/1/6818 +f 6812/1/6812 6914/1/6914 6822/1/6822 +f 6914/1/6914 6913/1/6913 6822/1/6822 +f 6822/1/6822 6913/1/6913 6912/1/6912 +f 6913/1/6913 5734/1/5734 6912/1/6912 +f 5733/1/5733 5734/1/5734 6913/1/6913 +f 5733/1/5733 5732/1/5732 5734/1/5734 +f 5730/1/5730 5732/1/5732 5733/1/5733 +f 6915/1/6915 5730/1/5730 5733/1/5733 +f 6915/1/6915 5733/1/5733 6914/1/6914 +f 6811/1/6811 6915/1/6915 6914/1/6914 +f 5729/1/5729 6915/1/6915 6811/1/6811 +f 5731/1/5731 5729/1/5729 6811/1/6811 +f 6808/1/6808 5731/1/5731 6811/1/6811 +f 6808/1/6808 6811/1/6811 6809/1/6809 +f 6807/1/6807 5731/1/5731 6808/1/6808 +f 6735/1/6735 6807/1/6807 6808/1/6808 +f 5710/1/5710 6807/1/6807 6735/1/6735 +f 5710/1/5710 5714/1/5714 6807/1/6807 +f 5714/1/5714 5715/1/5715 6807/1/6807 +f 5714/1/5714 5713/1/5713 5715/1/5715 +f 5713/1/5713 5725/1/5725 5715/1/5715 +f 5715/1/5715 5725/1/5725 5729/1/5729 +f 5725/1/5725 5728/1/5728 5729/1/5729 +f 5729/1/5729 5728/1/5728 5730/1/5730 +f 5728/1/5728 5727/1/5727 5730/1/5730 +f 5724/1/5724 5727/1/5727 5728/1/5728 +f 5724/1/5724 5726/1/5726 5727/1/5727 +f 5726/1/5726 5629/1/5629 5727/1/5727 +f 5727/1/5727 5629/1/5629 5626/1/5626 +f 5727/1/5727 5626/1/5626 5732/1/5732 +f 5629/1/5629 5628/1/5628 5626/1/5626 +f 5629/1/5629 5630/1/5630 5628/1/5628 +f 5631/1/5631 5630/1/5630 5629/1/5629 +f 5721/1/5721 5631/1/5631 5629/1/5629 +f 5720/1/5720 5631/1/5631 5721/1/5721 +f 5717/1/5717 5720/1/5720 5721/1/5721 +f 5717/1/5717 5721/1/5721 5718/1/5718 +f 5716/1/5716 5717/1/5717 5718/1/5718 +f 5716/1/5716 5718/1/5718 5719/1/5719 +f 5716/1/5716 5719/1/5719 5712/1/5712 +f 5711/1/5711 5716/1/5716 5712/1/5712 +f 5708/1/5708 5711/1/5711 5712/1/5712 +f 5708/1/5708 5712/1/5712 5709/1/5709 +f 5705/1/5705 5708/1/5708 5709/1/5709 +f 5705/1/5705 5709/1/5709 5710/1/5710 +f 6732/1/6732 5705/1/5705 5710/1/5710 +f 5705/1/5705 5704/1/5704 5708/1/5708 +f 5702/1/5702 5704/1/5704 5705/1/5705 +f 5707/1/5707 5702/1/5702 5705/1/5705 +f 5706/1/5706 5702/1/5702 5707/1/5707 +f 5706/1/5706 5680/1/5680 5702/1/5702 +f 5680/1/5680 5700/1/5700 5702/1/5702 +f 5702/1/5702 5700/1/5700 5701/1/5701 +f 5700/1/5700 5699/1/5699 5701/1/5701 +f 5701/1/5701 5699/1/5699 5703/1/5703 +f 5701/1/5701 5703/1/5703 5704/1/5704 +f 5704/1/5704 5703/1/5703 5711/1/5711 +f 5699/1/5699 5698/1/5698 5703/1/5703 +f 5703/1/5703 5698/1/5698 5716/1/5716 +f 5699/1/5699 5693/1/5693 5698/1/5698 +f 5693/1/5693 5697/1/5697 5698/1/5698 +f 5698/1/5698 5697/1/5697 5717/1/5717 +f 5693/1/5693 5692/1/5692 5697/1/5697 +f 5692/1/5692 5696/1/5696 5697/1/5697 +f 5697/1/5697 5696/1/5696 5720/1/5720 +f 5696/1/5696 5633/1/5633 5720/1/5720 +f 5695/1/5695 5633/1/5633 5696/1/5696 +f 5695/1/5695 5635/1/5635 5633/1/5633 +f 5635/1/5635 5634/1/5634 5633/1/5633 +f 5633/1/5633 5634/1/5634 5632/1/5632 +f 5633/1/5633 5632/1/5632 5631/1/5631 +f 5634/1/5634 6802/1/6802 5632/1/5632 +f 5632/1/5632 6802/1/6802 6804/1/6804 +f 5632/1/5632 6804/1/6804 5630/1/5630 +f 5630/1/5630 6804/1/6804 6322/1/6322 +f 6804/1/6804 6805/1/6805 6322/1/6322 +f 6804/1/6804 6800/1/6800 6805/1/6805 +f 6800/1/6800 6793/1/6793 6805/1/6805 +f 6805/1/6805 6793/1/6793 6806/1/6806 +f 6793/1/6793 6790/1/6790 6806/1/6806 +f 6793/1/6793 6792/1/6792 6790/1/6790 +f 6786/1/6786 6790/1/6790 6792/1/6792 +f 6786/1/6786 6792/1/6792 6784/1/6784 +f 6784/1/6784 6783/1/6783 6786/1/6786 +f 6786/1/6786 6783/1/6783 6785/1/6785 +f 6786/1/6786 6785/1/6785 6787/1/6787 +f 6787/1/6787 6785/1/6785 6788/1/6788 +f 6788/1/6788 6790/1/6790 6787/1/6787 +f 6788/1/6788 6324/1/6324 6790/1/6790 +f 6323/1/6323 6790/1/6790 6324/1/6324 +f 6784/1/6784 6782/1/6782 6783/1/6783 +f 6782/1/6782 6737/1/6737 6783/1/6783 +f 6783/1/6783 6737/1/6737 6736/1/6736 +f 6737/1/6737 5706/1/5706 6736/1/6736 +f 6737/1/6737 5681/1/5681 5706/1/5706 +f 6738/1/6738 5681/1/5681 6737/1/6737 +f 6738/1/6738 5676/1/5676 5681/1/5681 +f 5676/1/5676 5677/1/5677 5681/1/5681 +f 5681/1/5681 5677/1/5677 5680/1/5680 +f 5677/1/5677 5679/1/5679 5680/1/5680 +f 5680/1/5680 5679/1/5679 5690/1/5690 +f 5679/1/5679 5685/1/5685 5690/1/5690 +f 5690/1/5690 5685/1/5685 5691/1/5691 +f 5690/1/5690 5691/1/5691 5700/1/5700 +f 5700/1/5700 5691/1/5691 5694/1/5694 +f 5691/1/5691 5689/1/5689 5694/1/5694 +f 5689/1/5689 5693/1/5693 5694/1/5694 +f 5685/1/5685 5689/1/5689 5691/1/5691 +f 5685/1/5685 5684/1/5684 5689/1/5689 +f 5684/1/5684 5688/1/5688 5689/1/5689 +f 5689/1/5689 5688/1/5688 5692/1/5692 +f 5688/1/5688 5695/1/5695 5692/1/5692 +f 5687/1/5687 5695/1/5695 5688/1/5688 +f 5687/1/5687 5735/1/5735 5695/1/5695 +f 5686/1/5686 5735/1/5735 5687/1/5687 +f 5683/1/5683 5686/1/5686 5687/1/5687 +f 5683/1/5683 5687/1/5687 5684/1/5684 +f 5682/1/5682 5683/1/5683 5684/1/5684 +f 5664/1/5664 5683/1/5683 5682/1/5682 +f 5669/1/5669 5664/1/5664 5682/1/5682 +f 5678/1/5678 5669/1/5669 5682/1/5682 +f 5678/1/5678 5682/1/5682 5679/1/5679 +f 5668/1/5668 5669/1/5669 5678/1/5678 +f 5677/1/5677 5668/1/5668 5678/1/5678 +f 5670/1/5670 5668/1/5668 5677/1/5677 +f 5670/1/5670 5667/1/5667 5668/1/5668 +f 5667/1/5667 5665/1/5665 5668/1/5668 +f 5667/1/5667 5662/1/5662 5665/1/5665 +f 5662/1/5662 5661/1/5661 5665/1/5665 +f 5665/1/5665 5661/1/5661 5664/1/5664 +f 5661/1/5661 5663/1/5663 5664/1/5664 +f 5664/1/5664 5663/1/5663 5686/1/5686 +f 5663/1/5663 5641/1/5641 5686/1/5686 +f 5659/1/5659 5641/1/5641 5663/1/5663 +f 5659/1/5659 5640/1/5640 5641/1/5641 +f 5640/1/5640 5637/1/5637 5641/1/5641 +f 5641/1/5641 5637/1/5637 5635/1/5635 +f 5641/1/5641 5635/1/5635 5735/1/5735 +f 5637/1/5637 5636/1/5636 5635/1/5635 +f 5637/1/5637 6766/1/6766 5636/1/5636 +f 6766/1/6766 6767/1/6767 5636/1/5636 +f 5636/1/5636 6767/1/6767 6771/1/6771 +f 5636/1/5636 6771/1/6771 6803/1/6803 +f 5636/1/5636 6803/1/6803 5634/1/5634 +f 6771/1/6771 6773/1/6773 6803/1/6803 +f 6803/1/6803 6773/1/6773 6799/1/6799 +f 6803/1/6803 6799/1/6799 6802/1/6802 +f 6802/1/6802 6799/1/6799 6801/1/6801 +f 6802/1/6802 6801/1/6801 6800/1/6800 +f 6801/1/6801 6797/1/6797 6800/1/6800 +f 6801/1/6801 6799/1/6799 6797/1/6797 +f 6799/1/6799 6796/1/6796 6797/1/6797 +f 6797/1/6797 6796/1/6796 6794/1/6794 +f 6797/1/6797 6794/1/6794 6793/1/6793 +f 6794/1/6794 6796/1/6796 6795/1/6795 +f 6784/1/6784 6794/1/6794 6795/1/6795 +f 6795/1/6795 6796/1/6796 6798/1/6798 +f 6798/1/6798 6782/1/6782 6795/1/6795 +f 6779/1/6779 6782/1/6782 6798/1/6798 +f 6798/1/6798 6780/1/6780 6779/1/6779 +f 6779/1/6779 6780/1/6780 6777/1/6777 +f 6779/1/6779 6777/1/6777 6781/1/6781 +f 6781/1/6781 6739/1/6739 6779/1/6779 +f 6776/1/6776 6739/1/6739 6781/1/6781 +f 6778/1/6778 6739/1/6739 6776/1/6776 +f 6776/1/6776 6774/1/6774 6778/1/6778 +f 6778/1/6778 6774/1/6774 6775/1/6775 +f 6775/1/6775 6740/1/6740 6778/1/6778 +f 6747/1/6747 6740/1/6740 6775/1/6775 +f 6775/1/6775 6748/1/6748 6747/1/6747 +f 6747/1/6747 6748/1/6748 6743/1/6743 +f 6743/1/6743 6748/1/6748 6745/1/6745 +f 6743/1/6743 6745/1/6745 6742/1/6742 +f 6742/1/6742 6741/1/6741 6743/1/6743 +f 6743/1/6743 6741/1/6741 6740/1/6740 +f 6741/1/6741 5737/1/5737 6740/1/6740 +f 6740/1/6740 5737/1/5737 5736/1/5736 +f 6740/1/6740 5736/1/5736 6739/1/6739 +f 6739/1/6739 5736/1/5736 6738/1/6738 +f 6739/1/6739 6738/1/6738 6782/1/6782 +f 5737/1/5737 5675/1/5675 5736/1/5736 +f 5736/1/5736 5675/1/5675 5676/1/5676 +f 5675/1/5675 5672/1/5672 5676/1/5676 +f 5676/1/5676 5672/1/5672 5670/1/5670 +f 5672/1/5672 5666/1/5666 5670/1/5670 +f 5672/1/5672 5671/1/5671 5666/1/5666 +f 5671/1/5671 5656/1/5656 5666/1/5666 +f 5666/1/5666 5656/1/5656 5662/1/5662 +f 5656/1/5656 5660/1/5660 5662/1/5662 +f 5656/1/5656 5655/1/5655 5660/1/5660 +f 5655/1/5655 5658/1/5658 5660/1/5660 +f 5660/1/5660 5658/1/5658 5659/1/5659 +f 5660/1/5660 5659/1/5659 5661/1/5661 +f 5655/1/5655 5651/1/5651 5658/1/5658 +f 5651/1/5651 5638/1/5638 5658/1/5658 +f 5658/1/5658 5638/1/5638 5640/1/5640 +f 5646/1/5646 5638/1/5638 5651/1/5651 +f 5652/1/5652 5646/1/5646 5651/1/5651 +f 5650/1/5650 5646/1/5646 5652/1/5652 +f 5654/1/5654 5650/1/5650 5652/1/5652 +f 5654/1/5654 5652/1/5652 5657/1/5657 +f 5673/1/5673 5654/1/5654 5657/1/5657 +f 5673/1/5673 5657/1/5657 5671/1/5671 +f 6231/1/6231 5654/1/5654 5673/1/5673 +f 5674/1/5674 6231/1/6231 5673/1/5673 +f 5674/1/5674 5673/1/5673 5672/1/5672 +f 5674/1/5674 6230/1/6230 6231/1/6231 +f 6230/1/6230 5653/1/5653 6231/1/6231 +f 6230/1/6230 6246/1/6246 5653/1/5653 +f 6246/1/6246 5649/1/5649 5653/1/5653 +f 5653/1/5653 5649/1/5649 5650/1/5650 +f 5649/1/5649 5645/1/5645 5650/1/5650 +f 5649/1/5649 5648/1/5648 5645/1/5645 +f 5648/1/5648 5644/1/5644 5645/1/5645 +f 5645/1/5645 5644/1/5644 5642/1/5642 +f 5645/1/5645 5642/1/5642 5646/1/5646 +f 5644/1/5644 5643/1/5643 5642/1/5642 +f 5642/1/5642 5643/1/5643 5639/1/5639 +f 5642/1/5642 5639/1/5639 5638/1/5638 +f 5638/1/5638 5639/1/5639 5637/1/5637 +f 5643/1/5643 6763/1/6763 5639/1/5639 +f 5639/1/5639 6763/1/6763 6766/1/6766 +f 6763/1/6763 6764/1/6764 6766/1/6766 +f 6763/1/6763 6756/1/6756 6764/1/6764 +f 6756/1/6756 6762/1/6762 6764/1/6764 +f 6764/1/6764 6762/1/6762 6765/1/6765 +f 6764/1/6764 6765/1/6765 6767/1/6767 +f 6767/1/6767 6765/1/6765 6768/1/6768 +f 6767/1/6767 6768/1/6768 6770/1/6770 +f 6768/1/6768 6769/1/6769 6770/1/6770 +f 6770/1/6770 6769/1/6769 6772/1/6772 +f 6770/1/6770 6772/1/6772 6773/1/6773 +f 6772/1/6772 6777/1/6777 6773/1/6773 +f 6772/1/6772 6774/1/6774 6777/1/6777 +f 6769/1/6769 6774/1/6774 6772/1/6772 +f 6769/1/6769 6748/1/6748 6774/1/6774 +f 6768/1/6768 6748/1/6748 6769/1/6769 +f 6749/1/6749 6748/1/6748 6768/1/6768 +f 6765/1/6765 6749/1/6749 6768/1/6768 +f 6762/1/6762 6749/1/6749 6765/1/6765 +f 6762/1/6762 6750/1/6750 6749/1/6749 +f 6750/1/6750 6746/1/6746 6749/1/6749 +f 6749/1/6749 6746/1/6746 6745/1/6745 +f 6750/1/6750 6751/1/6751 6746/1/6746 +f 6746/1/6746 6751/1/6751 6744/1/6744 +f 6742/1/6742 6746/1/6746 6744/1/6744 +f 6744/1/6744 5741/1/5741 6742/1/6742 +f 6752/1/6752 5741/1/5741 6744/1/6744 +f 6753/1/6753 5741/1/5741 6752/1/6752 +f 6752/1/6752 6754/1/6754 6753/1/6753 +f 6753/1/6753 6754/1/6754 5837/1/5837 +f 6753/1/6753 5837/1/5837 5836/1/5836 +f 5836/1/5836 5744/1/5744 6753/1/6753 +f 5835/1/5835 5744/1/5744 5836/1/5836 +f 5834/1/5834 5744/1/5744 5835/1/5835 +f 5835/1/5835 5819/1/5819 5834/1/5834 +f 5834/1/5834 5819/1/5819 5833/1/5833 +f 5833/1/5833 5747/1/5747 5834/1/5834 +f 5832/1/5832 5747/1/5747 5833/1/5833 +f 5833/1/5833 5815/1/5815 5832/1/5832 +f 5832/1/5832 5815/1/5815 5753/1/5753 +f 5753/1/5753 5815/1/5815 5816/1/5816 +f 5753/1/5753 5816/1/5816 5752/1/5752 +f 5752/1/5752 5750/1/5750 5753/1/5753 +f 5753/1/5753 5750/1/5750 5747/1/5747 +f 5750/1/5750 5748/1/5748 5747/1/5747 +f 5747/1/5747 5748/1/5748 5745/1/5745 +f 5747/1/5747 5745/1/5745 5744/1/5744 +f 5744/1/5744 5745/1/5745 5742/1/5742 +f 5744/1/5744 5742/1/5742 5741/1/5741 +f 5741/1/5741 5742/1/5742 5739/1/5739 +f 5741/1/5741 5739/1/5739 6741/1/6741 +f 5742/1/5742 5740/1/5740 5739/1/5739 +f 5739/1/5739 5740/1/5740 5738/1/5738 +f 5739/1/5739 5738/1/5738 5737/1/5737 +f 5740/1/5740 6229/1/6229 5738/1/5738 +f 5738/1/5738 6229/1/6229 5674/1/5674 +f 5738/1/5738 5674/1/5674 5675/1/5675 +f 5740/1/5740 6232/1/6232 6229/1/6229 +f 6232/1/6232 6233/1/6233 6229/1/6229 +f 6229/1/6229 6233/1/6233 6234/1/6234 +f 6229/1/6229 6234/1/6234 6230/1/6230 +f 6234/1/6234 6240/1/6240 6230/1/6230 +f 6234/1/6234 6239/1/6239 6240/1/6240 +f 6239/1/6239 6245/1/6245 6240/1/6240 +f 6240/1/6240 6245/1/6245 6246/1/6246 +f 6239/1/6239 6241/1/6241 6245/1/6245 +f 6241/1/6241 6247/1/6247 6245/1/6245 +f 6245/1/6245 6247/1/6247 5648/1/5648 +f 6247/1/6247 5647/1/5647 5648/1/5648 +f 6248/1/6248 5647/1/5647 6247/1/6247 +f 6248/1/6248 6250/1/6250 5647/1/5647 +f 6250/1/6250 7412/1/7412 5647/1/5647 +f 5647/1/5647 7412/1/7412 5643/1/5643 +f 7412/1/7412 6760/1/6760 5643/1/5643 +f 7412/1/7412 5821/1/5821 6760/1/6760 +f 5821/1/5821 6758/1/6758 6760/1/6760 +f 6760/1/6760 6758/1/6758 6756/1/6756 +f 6758/1/6758 6755/1/6755 6756/1/6756 +f 6756/1/6756 6755/1/6755 6757/1/6757 +f 6757/1/6757 6755/1/6755 6750/1/6750 +f 6758/1/6758 6759/1/6759 6755/1/6755 +f 6755/1/6755 6759/1/6759 6754/1/6754 +f 6755/1/6755 6754/1/6754 6751/1/6751 +f 5820/1/5820 6759/1/6759 6758/1/6758 +f 5820/1/5820 5818/1/5818 6759/1/6759 +f 5818/1/5818 6761/1/6761 6759/1/6759 +f 6761/1/6761 5837/1/5837 6759/1/6759 +f 6761/1/6761 5819/1/5819 5837/1/5837 +f 5817/1/5817 5819/1/5819 6761/1/6761 +f 5817/1/5817 5815/1/5815 5819/1/5819 +f 5814/1/5814 5815/1/5815 5817/1/5817 +f 5814/1/5814 5817/1/5817 5818/1/5818 +f 5809/1/5809 5814/1/5814 5818/1/5818 +f 5809/1/5809 5808/1/5808 5814/1/5814 +f 5808/1/5808 5811/1/5811 5814/1/5814 +f 5805/1/5805 5811/1/5811 5808/1/5808 +f 5806/1/5806 5805/1/5805 5808/1/5808 +f 5802/1/5802 5805/1/5805 5806/1/5806 +f 5803/1/5803 5802/1/5802 5806/1/5806 +f 5803/1/5803 5806/1/5806 5807/1/5807 +f 7413/1/7413 5803/1/5803 5807/1/5807 +f 7413/1/7413 5807/1/5807 7411/1/7411 +f 7406/1/7406 7413/1/7413 7411/1/7411 +f 7406/1/7406 7411/1/7411 7407/1/7407 +f 7405/1/7405 7406/1/7406 7407/1/7407 +f 7405/1/7405 7407/1/7407 7408/1/7408 +f 7402/1/7402 7405/1/7405 7408/1/7408 +f 7402/1/7402 7408/1/7408 6253/1/6253 +f 7403/1/7403 7402/1/7402 6253/1/6253 +f 7403/1/7403 6253/1/6253 6252/1/6252 +f 6251/1/6251 7403/1/7403 6252/1/6252 +f 6251/1/6251 6252/1/6252 6236/1/6236 +f 6235/1/6235 6251/1/6251 6236/1/6236 +f 6235/1/6235 6236/1/6236 6232/1/6232 +f 5743/1/5743 6235/1/6235 6232/1/6232 +f 5743/1/5743 7392/1/7392 6235/1/6235 +f 7392/1/7392 7404/1/7404 6235/1/6235 +f 7392/1/7392 7395/1/7395 7404/1/7404 +f 7395/1/7395 7398/1/7398 7404/1/7404 +f 7404/1/7404 7398/1/7398 7403/1/7403 +f 7395/1/7395 7394/1/7394 7398/1/7398 +f 7394/1/7394 7397/1/7397 7398/1/7398 +f 7397/1/7397 7401/1/7401 7398/1/7398 +f 7398/1/7398 7401/1/7401 7402/1/7402 +f 7397/1/7397 7400/1/7400 7401/1/7401 +f 7401/1/7401 7400/1/7400 7405/1/7405 +f 7397/1/7397 7399/1/7399 7400/1/7400 +f 7399/1/7399 7406/1/7406 7400/1/7400 +f 7399/1/7399 7414/1/7414 7406/1/7406 +f 7415/1/7415 7414/1/7414 7399/1/7399 +f 7396/1/7396 7415/1/7415 7399/1/7399 +f 7416/1/7416 7415/1/7415 7396/1/7396 +f 7388/1/7388 7416/1/7416 7396/1/7396 +f 7388/1/7388 7396/1/7396 7393/1/7393 +f 7389/1/7389 7388/1/7388 7393/1/7393 +f 7389/1/7389 7393/1/7393 7391/1/7391 +f 7390/1/7390 7389/1/7389 7391/1/7391 +f 7390/1/7390 7391/1/7391 7392/1/7392 +f 5746/1/5746 7390/1/7390 7392/1/7392 +f 5749/1/5749 7390/1/7390 5746/1/5746 +f 5748/1/5748 5749/1/5749 5746/1/5746 +f 5751/1/5751 5749/1/5749 5748/1/5748 +f 5751/1/5751 7328/1/7328 5749/1/5749 +f 7328/1/7328 7386/1/7386 5749/1/5749 +f 7328/1/7328 7384/1/7384 7386/1/7386 +f 7384/1/7384 7383/1/7383 7386/1/7386 +f 7386/1/7386 7383/1/7383 7385/1/7385 +f 7386/1/7386 7385/1/7385 7390/1/7390 +f 7383/1/7383 7382/1/7382 7385/1/7385 +f 7385/1/7385 7382/1/7382 7387/1/7387 +f 7385/1/7385 7387/1/7387 7388/1/7388 +f 7382/1/7382 7378/1/7378 7387/1/7387 +f 7378/1/7378 7416/1/7416 7387/1/7387 +f 7378/1/7378 7377/1/7377 7416/1/7416 +f 7378/1/7378 7374/1/7374 7377/1/7377 +f 7374/1/7374 7372/1/7372 7377/1/7377 +f 7377/1/7377 7372/1/7372 7376/1/7376 +f 7377/1/7377 7376/1/7376 7415/1/7415 +f 7372/1/7372 5796/1/5796 7376/1/7376 +f 7376/1/7376 5796/1/5796 7414/1/7414 +f 7414/1/7414 5796/1/5796 7413/1/7413 +f 7372/1/7372 5794/1/5794 5796/1/5796 +f 5794/1/5794 5795/1/5795 5796/1/5796 +f 5796/1/5796 5795/1/5795 5803/1/5803 +f 5794/1/5794 5793/1/5793 5795/1/5795 +f 5793/1/5793 5798/1/5798 5795/1/5795 +f 5795/1/5795 5798/1/5798 5802/1/5802 +f 5798/1/5798 5801/1/5801 5802/1/5802 +f 5802/1/5802 5801/1/5801 5804/1/5804 +f 5804/1/5804 5801/1/5801 5810/1/5810 +f 5804/1/5804 5810/1/5810 5805/1/5805 +f 5801/1/5801 5813/1/5813 5810/1/5810 +f 5810/1/5810 5813/1/5813 5812/1/5812 +f 5810/1/5810 5812/1/5812 5811/1/5811 +f 5811/1/5811 5812/1/5812 5816/1/5816 +f 5812/1/5812 5813/1/5813 5757/1/5757 +f 5752/1/5752 5812/1/5812 5757/1/5757 +f 5757/1/5757 5754/1/5754 5752/1/5752 +f 5756/1/5756 5754/1/5754 5757/1/5757 +f 5758/1/5758 5754/1/5754 5756/1/5756 +f 5756/1/5756 5822/1/5822 5758/1/5758 +f 5758/1/5758 5822/1/5822 5823/1/5823 +f 5758/1/5758 5823/1/5823 5824/1/5824 +f 5824/1/5824 5759/1/5759 5758/1/5758 +f 5825/1/5825 5759/1/5759 5824/1/5824 +f 5829/1/5829 5759/1/5759 5825/1/5825 +f 5825/1/5825 5826/1/5826 5829/1/5829 +f 5829/1/5829 5826/1/5826 5830/1/5830 +f 5830/1/5830 5761/1/5761 5829/1/5829 +f 5831/1/5831 5761/1/5761 5830/1/5830 +f 5830/1/5830 5777/1/5777 5831/1/5831 +f 5831/1/5831 5777/1/5777 5767/1/5767 +f 5767/1/5767 5777/1/5777 5769/1/5769 +f 5767/1/5767 5769/1/5769 5765/1/5765 +f 5765/1/5765 5763/1/5763 5767/1/5767 +f 5767/1/5767 5763/1/5763 5761/1/5761 +f 5763/1/5763 5762/1/5762 5761/1/5761 +f 5761/1/5761 5762/1/5762 5760/1/5760 +f 5761/1/5761 5760/1/5760 5759/1/5759 +f 5759/1/5759 5760/1/5760 5755/1/5755 +f 5759/1/5759 5755/1/5755 5754/1/5754 +f 5754/1/5754 5755/1/5755 5751/1/5751 +f 5754/1/5754 5751/1/5751 5750/1/5750 +f 5760/1/5760 7325/1/7325 5755/1/5755 +f 5755/1/5755 7325/1/7325 7328/1/7328 +f 7325/1/7325 7327/1/7327 7328/1/7328 +f 7325/1/7325 7326/1/7326 7327/1/7327 +f 7326/1/7326 7331/1/7331 7327/1/7327 +f 7327/1/7327 7331/1/7331 7337/1/7337 +f 7327/1/7327 7337/1/7337 7381/1/7381 +f 7327/1/7327 7381/1/7381 7384/1/7384 +f 7337/1/7337 7379/1/7379 7381/1/7381 +f 7381/1/7381 7379/1/7379 7380/1/7380 +f 7381/1/7381 7380/1/7380 7383/1/7383 +f 7379/1/7379 7375/1/7375 7380/1/7380 +f 7380/1/7380 7375/1/7375 7378/1/7378 +f 7379/1/7379 7343/1/7343 7375/1/7375 +f 7343/1/7343 7373/1/7373 7375/1/7375 +f 7375/1/7375 7373/1/7373 7374/1/7374 +f 7343/1/7343 7344/1/7344 7373/1/7373 +f 7344/1/7344 7371/1/7371 7373/1/7373 +f 7373/1/7373 7371/1/7371 7372/1/7372 +f 7344/1/7344 7345/1/7345 7371/1/7371 +f 7345/1/7345 5794/1/5794 7371/1/7371 +f 7345/1/7345 5792/1/5792 5794/1/5794 +f 7347/1/7347 5792/1/5792 7345/1/7345 +f 7341/1/7341 7347/1/7347 7345/1/7345 +f 7341/1/7341 7345/1/7345 7342/1/7342 +f 7338/1/7338 7341/1/7341 7342/1/7342 +f 7338/1/7338 7342/1/7342 7339/1/7339 +f 7335/1/7335 7338/1/7338 7339/1/7339 +f 7335/1/7335 7339/1/7339 7336/1/7336 +f 7331/1/7331 7335/1/7335 7336/1/7336 +f 7330/1/7330 7335/1/7335 7331/1/7331 +f 7330/1/7330 7334/1/7334 7335/1/7335 +f 7329/1/7329 7334/1/7334 7330/1/7330 +f 7326/1/7326 7329/1/7329 7330/1/7330 +f 7324/1/7324 7329/1/7329 7326/1/7326 +f 7324/1/7324 7332/1/7332 7329/1/7329 +f 7332/1/7332 7333/1/7333 7329/1/7329 +f 7332/1/7332 7354/1/7354 7333/1/7333 +f 7354/1/7354 7353/1/7353 7333/1/7333 +f 7353/1/7353 7348/1/7348 7333/1/7333 +f 7333/1/7333 7348/1/7348 7340/1/7340 +f 7333/1/7333 7340/1/7340 7334/1/7334 +f 7334/1/7334 7340/1/7340 7338/1/7338 +f 7348/1/7348 7346/1/7346 7340/1/7340 +f 7340/1/7340 7346/1/7346 7341/1/7341 +f 7348/1/7348 7349/1/7349 7346/1/7346 +f 7349/1/7349 7350/1/7350 7346/1/7346 +f 7346/1/7346 7350/1/7350 7347/1/7347 +f 7352/1/7352 7350/1/7350 7349/1/7349 +f 7353/1/7353 7352/1/7352 7349/1/7349 +f 7356/1/7356 7352/1/7352 7353/1/7353 +f 7355/1/7355 7356/1/7356 7353/1/7353 +f 7358/1/7358 7356/1/7356 7355/1/7355 +f 7360/1/7360 7358/1/7358 7355/1/7355 +f 7360/1/7360 7355/1/7355 7361/1/7361 +f 7321/1/7321 7360/1/7360 7361/1/7361 +f 7321/1/7321 7361/1/7361 7324/1/7324 +f 7323/1/7323 7321/1/7321 7324/1/7324 +f 7323/1/7323 7324/1/7324 7325/1/7325 +f 7322/1/7322 7321/1/7321 7323/1/7323 +f 5762/1/5762 7322/1/7322 7323/1/7323 +f 5764/1/5764 7322/1/7322 5762/1/5762 +f 5764/1/5764 7308/1/7308 7322/1/7322 +f 7308/1/7308 7320/1/7320 7322/1/7322 +f 7308/1/7308 7317/1/7317 7320/1/7320 +f 7317/1/7317 7316/1/7316 7320/1/7320 +f 7320/1/7320 7316/1/7316 7319/1/7319 +f 7320/1/7320 7319/1/7319 7321/1/7321 +f 7316/1/7316 7318/1/7318 7319/1/7319 +f 7319/1/7319 7318/1/7318 7362/1/7362 +f 7319/1/7319 7362/1/7362 7358/1/7358 +f 7362/1/7362 7359/1/7359 7358/1/7358 +f 7363/1/7363 7359/1/7359 7362/1/7362 +f 7363/1/7363 7366/1/7366 7359/1/7359 +f 7359/1/7359 7366/1/7366 7357/1/7357 +f 7359/1/7359 7357/1/7357 7356/1/7356 +f 7366/1/7366 7370/1/7370 7357/1/7357 +f 7357/1/7357 7370/1/7370 7351/1/7351 +f 7357/1/7357 7351/1/7351 7352/1/7352 +f 7370/1/7370 5790/1/5790 7351/1/7351 +f 7351/1/7351 5790/1/5790 5791/1/5791 +f 7351/1/7351 5791/1/5791 7350/1/7350 +f 7350/1/7350 5791/1/5791 5792/1/5792 +f 5791/1/5791 5787/1/5787 5792/1/5792 +f 5792/1/5792 5787/1/5787 5793/1/5793 +f 5787/1/5787 5785/1/5785 5793/1/5793 +f 5793/1/5793 5785/1/5785 5797/1/5797 +f 5785/1/5785 5799/1/5799 5797/1/5797 +f 5797/1/5797 5799/1/5799 5800/1/5800 +f 5797/1/5797 5800/1/5800 5798/1/5798 +f 5799/1/5799 5827/1/5827 5800/1/5800 +f 5827/1/5827 5823/1/5823 5800/1/5800 +f 5827/1/5827 5826/1/5826 5823/1/5823 +f 5828/1/5828 5826/1/5826 5827/1/5827 +f 5828/1/5828 5777/1/5777 5826/1/5826 +f 5779/1/5779 5777/1/5777 5828/1/5828 +f 5779/1/5779 5828/1/5828 5799/1/5799 +f 5776/1/5776 5777/1/5777 5779/1/5779 +f 5778/1/5778 5776/1/5776 5779/1/5779 +f 5785/1/5785 5778/1/5778 5779/1/5779 +f 5783/1/5783 5778/1/5778 5785/1/5785 +f 5783/1/5783 5780/1/5780 5778/1/5778 +f 5784/1/5784 5780/1/5780 5783/1/5783 +f 5786/1/5786 5784/1/5784 5783/1/5783 +f 5786/1/5786 5783/1/5783 5787/1/5787 +f 5788/1/5788 5784/1/5784 5786/1/5786 +f 5790/1/5790 5788/1/5788 5786/1/5786 +f 5838/1/5838 5788/1/5788 5790/1/5790 +f 5943/1/5943 5838/1/5838 5790/1/5790 +f 5938/1/5938 5838/1/5838 5943/1/5943 +f 7368/1/7368 5938/1/5938 5943/1/5943 +f 7368/1/7368 5943/1/5943 7365/1/7365 +f 7364/1/7364 7368/1/7368 7365/1/7365 +f 7364/1/7364 7365/1/7365 7363/1/7363 +f 7315/1/7315 7364/1/7364 7363/1/7363 +f 7315/1/7315 7363/1/7363 7318/1/7318 +f 7313/1/7313 7364/1/7364 7315/1/7315 +f 7314/1/7314 7313/1/7313 7315/1/7315 +f 7314/1/7314 7315/1/7315 7316/1/7316 +f 7312/1/7312 7313/1/7313 7314/1/7314 +f 7307/1/7307 7312/1/7312 7314/1/7314 +f 7307/1/7307 7314/1/7314 7317/1/7317 +f 7307/1/7307 7310/1/7310 7312/1/7312 +f 7310/1/7310 7311/1/7311 7312/1/7312 +f 7310/1/7310 5942/1/5942 7311/1/7311 +f 5942/1/5942 7369/1/7369 7311/1/7311 +f 7311/1/7311 7369/1/7369 7313/1/7313 +f 7369/1/7369 7367/1/7367 7313/1/7313 +f 7369/1/7369 5940/1/5940 7367/1/7367 +f 7367/1/7367 5940/1/5940 7368/1/7368 +f 7369/1/7369 5939/1/5939 5940/1/5940 +f 5939/1/5939 5937/1/5937 5940/1/5940 +f 5940/1/5940 5937/1/5937 5938/1/5938 +f 5935/1/5935 5937/1/5937 5939/1/5939 +f 5941/1/5941 5935/1/5935 5939/1/5939 +f 5936/1/5936 5935/1/5935 5941/1/5941 +f 5926/1/5926 5936/1/5936 5941/1/5941 +f 5926/1/5926 5941/1/5941 5942/1/5942 +f 7309/1/7309 5926/1/5926 5942/1/5942 +f 5924/1/5924 5926/1/5926 7309/1/7309 +f 7306/1/7306 5924/1/5924 7309/1/7309 +f 7306/1/7306 7309/1/7309 7310/1/7310 +f 5919/1/5919 5924/1/5924 7306/1/7306 +f 7304/1/7304 5919/1/5919 7306/1/7306 +f 7304/1/7304 7306/1/7306 7307/1/7307 +f 7304/1/7304 7307/1/7307 7308/1/7308 +f 7305/1/7305 7304/1/7304 7308/1/7308 +f 7303/1/7303 7304/1/7304 7305/1/7305 +f 5773/1/5773 7303/1/7303 7305/1/7305 +f 5773/1/5773 7305/1/7305 5766/1/5766 +f 5772/1/5772 5773/1/5773 5766/1/5766 +f 5772/1/5772 5766/1/5766 5771/1/5771 +f 5771/1/5771 6222/1/6222 5772/1/5772 +f 5772/1/5772 6222/1/6222 6224/1/6224 +f 5772/1/5772 6224/1/6224 6227/1/6227 +f 6227/1/6227 6224/1/6224 6228/1/6228 +f 6228/1/6228 5773/1/5773 6227/1/6227 +f 7418/1/7418 5773/1/5773 6228/1/6228 +f 6228/1/6228 6226/1/6226 7418/1/7418 +f 7418/1/7418 6226/1/6226 7417/1/7417 +f 7417/1/7417 7249/1/7249 7418/1/7418 +f 7248/1/7248 7249/1/7249 7417/1/7417 +f 7417/1/7417 7247/1/7247 7248/1/7248 +f 7248/1/7248 7247/1/7247 7245/1/7245 +f 7245/1/7245 7247/1/7247 7241/1/7241 +f 7245/1/7245 7241/1/7241 7240/1/7240 +f 7240/1/7240 7246/1/7246 7245/1/7245 +f 7245/1/7245 7246/1/7246 7249/1/7249 +f 7246/1/7246 7251/1/7251 7249/1/7249 +f 7249/1/7249 7251/1/7251 7303/1/7303 +f 7251/1/7251 5921/1/5921 7303/1/7303 +f 7251/1/7251 5920/1/5920 5921/1/5921 +f 5920/1/5920 5916/1/5916 5921/1/5921 +f 5921/1/5921 5916/1/5916 5919/1/5919 +f 5916/1/5916 5918/1/5918 5919/1/5919 +f 5919/1/5919 5918/1/5918 5923/1/5923 +f 5918/1/5918 5922/1/5922 5923/1/5923 +f 5923/1/5923 5922/1/5922 5925/1/5925 +f 5923/1/5923 5925/1/5925 5924/1/5924 +f 5922/1/5922 5927/1/5927 5925/1/5925 +f 5927/1/5927 5930/1/5930 5925/1/5925 +f 5925/1/5925 5930/1/5930 5936/1/5936 +f 5930/1/5930 5934/1/5934 5936/1/5936 +f 5930/1/5930 5929/1/5929 5934/1/5934 +f 5929/1/5929 5932/1/5932 5934/1/5934 +f 5934/1/5934 5932/1/5932 5933/1/5933 +f 5934/1/5934 5933/1/5933 5935/1/5935 +f 5932/1/5932 5839/1/5839 5933/1/5933 +f 5933/1/5933 5839/1/5839 5937/1/5937 +f 5937/1/5937 5839/1/5839 5838/1/5838 +f 5839/1/5839 5840/1/5840 5838/1/5838 +f 5839/1/5839 5841/1/5841 5840/1/5840 +f 5841/1/5841 5844/1/5844 5840/1/5840 +f 5840/1/5840 5844/1/5844 6218/1/6218 +f 5840/1/5840 6218/1/6218 5789/1/5789 +f 5840/1/5840 5789/1/5789 5788/1/5788 +f 6218/1/6218 6221/1/6221 5789/1/5789 +f 5789/1/5789 6221/1/6221 5782/1/5782 +f 5789/1/5789 5782/1/5782 5784/1/5784 +f 5784/1/5784 5782/1/5782 5781/1/5781 +f 5781/1/5781 5782/1/5782 5775/1/5775 +f 5781/1/5781 5775/1/5775 5780/1/5780 +f 5780/1/5780 5775/1/5775 5776/1/5776 +f 5775/1/5775 5770/1/5770 5776/1/5776 +f 5776/1/5776 5770/1/5770 5769/1/5769 +f 5775/1/5775 5774/1/5774 5770/1/5770 +f 5770/1/5770 5774/1/5774 5768/1/5768 +f 5765/1/5765 5770/1/5770 5768/1/5768 +f 5768/1/5768 5766/1/5766 5765/1/5765 +f 5768/1/5768 5774/1/5774 5771/1/5771 +f 5782/1/5782 5774/1/5774 5775/1/5775 +f 5782/1/5782 6222/1/6222 5774/1/5774 +f 5782/1/5782 6221/1/6221 6222/1/6222 +f 6218/1/6218 6219/1/6219 6221/1/6221 +f 6219/1/6219 6223/1/6223 6221/1/6221 +f 6223/1/6223 6224/1/6224 6221/1/6221 +f 6223/1/6223 6226/1/6226 6224/1/6224 +f 6225/1/6225 6226/1/6226 6223/1/6223 +f 6225/1/6225 7247/1/7247 6226/1/6226 +f 6220/1/6220 7247/1/7247 6225/1/6225 +f 6220/1/6220 6225/1/6225 6219/1/6219 +f 5844/1/5844 6220/1/6220 6219/1/6219 +f 5844/1/5844 7294/1/7294 6220/1/6220 +f 7294/1/7294 7242/1/7242 6220/1/6220 +f 7293/1/7293 7242/1/7242 7294/1/7294 +f 5843/1/5843 7293/1/7293 7294/1/7294 +f 7290/1/7290 7293/1/7293 5843/1/5843 +f 5845/1/5845 7290/1/7290 5843/1/5843 +f 5845/1/5845 5843/1/5843 5841/1/5841 +f 5842/1/5842 5845/1/5845 5841/1/5841 +f 5846/1/5846 5845/1/5845 5842/1/5842 +f 5931/1/5931 5846/1/5846 5842/1/5842 +f 5931/1/5931 5842/1/5842 5932/1/5932 +f 5928/1/5928 5931/1/5931 5932/1/5932 +f 5911/1/5911 5931/1/5931 5928/1/5928 +f 5912/1/5912 5911/1/5911 5928/1/5928 +f 5912/1/5912 5928/1/5928 5927/1/5927 +f 5917/1/5917 5912/1/5912 5927/1/5927 +f 5913/1/5913 5912/1/5912 5917/1/5917 +f 5915/1/5915 5913/1/5913 5917/1/5917 +f 5915/1/5915 5917/1/5917 5918/1/5918 +f 5914/1/5914 5913/1/5913 5915/1/5915 +f 5916/1/5916 5914/1/5914 5915/1/5915 +f 5894/1/5894 5914/1/5914 5916/1/5916 +f 5894/1/5894 5904/1/5904 5914/1/5914 +f 5904/1/5904 5905/1/5905 5914/1/5914 +f 5914/1/5914 5905/1/5905 5908/1/5908 +f 5905/1/5905 5903/1/5903 5908/1/5908 +f 5903/1/5903 5907/1/5907 5908/1/5908 +f 5908/1/5908 5907/1/5907 5913/1/5913 +f 5903/1/5903 5906/1/5906 5907/1/5907 +f 5907/1/5907 5906/1/5906 5911/1/5911 +f 5906/1/5906 5910/1/5910 5911/1/5911 +f 5906/1/5906 5909/1/5909 5910/1/5910 +f 5909/1/5909 5846/1/5846 5910/1/5910 +f 5909/1/5909 5848/1/5848 5846/1/5846 +f 5848/1/5848 5847/1/5847 5846/1/5846 +f 5848/1/5848 5849/1/5849 5847/1/5847 +f 5849/1/5849 7292/1/7292 5847/1/5847 +f 5847/1/5847 7292/1/7292 7290/1/7290 +f 7292/1/7292 7288/1/7288 7290/1/7290 +f 7290/1/7290 7288/1/7288 7291/1/7291 +f 7291/1/7291 7288/1/7288 7239/1/7239 +f 7291/1/7291 7239/1/7239 7293/1/7293 +f 7288/1/7288 7237/1/7237 7239/1/7239 +f 7239/1/7239 7237/1/7237 7236/1/7236 +f 7239/1/7239 7236/1/7236 7242/1/7242 +f 7242/1/7242 7236/1/7236 7241/1/7241 +f 7236/1/7236 7237/1/7237 7238/1/7238 +f 7240/1/7240 7236/1/7236 7238/1/7238 +f 7238/1/7238 7244/1/7244 7240/1/7240 +f 7243/1/7243 7244/1/7244 7238/1/7238 +f 7286/1/7286 7244/1/7244 7243/1/7243 +f 7243/1/7243 7287/1/7287 7286/1/7286 +f 7286/1/7286 7287/1/7287 7282/1/7282 +f 7286/1/7286 7282/1/7282 7285/1/7285 +f 7285/1/7285 7253/1/7253 7286/1/7286 +f 7281/1/7281 7253/1/7253 7285/1/7285 +f 7259/1/7259 7253/1/7253 7281/1/7281 +f 7281/1/7281 7280/1/7280 7259/1/7259 +f 7259/1/7259 7280/1/7280 7258/1/7258 +f 7258/1/7258 7254/1/7254 7259/1/7259 +f 7257/1/7257 7254/1/7254 7258/1/7258 +f 7258/1/7258 7277/1/7277 7257/1/7257 +f 7257/1/7257 7277/1/7277 7256/1/7256 +f 7256/1/7256 7277/1/7277 7273/1/7273 +f 7256/1/7256 7273/1/7273 7264/1/7264 +f 7264/1/7264 7255/1/7255 7256/1/7256 +f 7256/1/7256 7255/1/7255 7254/1/7254 +f 7255/1/7255 5946/1/5946 7254/1/7254 +f 7254/1/7254 5946/1/5946 5945/1/5945 +f 7254/1/7254 5945/1/5945 7253/1/7253 +f 7253/1/7253 5945/1/5945 7252/1/7252 +f 7253/1/7253 7252/1/7252 7244/1/7244 +f 7244/1/7244 7252/1/7252 7250/1/7250 +f 7244/1/7244 7250/1/7250 7246/1/7246 +f 7252/1/7252 5895/1/5895 7250/1/7250 +f 7250/1/7250 5895/1/5895 5920/1/5920 +f 5895/1/5895 5894/1/5894 5920/1/5920 +f 5895/1/5895 5891/1/5891 5894/1/5894 +f 5891/1/5891 5893/1/5893 5894/1/5894 +f 5891/1/5891 5892/1/5892 5893/1/5893 +f 5892/1/5892 5896/1/5896 5893/1/5893 +f 5893/1/5893 5896/1/5896 5899/1/5899 +f 5893/1/5893 5899/1/5899 5904/1/5904 +f 5896/1/5896 5898/1/5898 5899/1/5899 +f 5899/1/5899 5898/1/5898 5903/1/5903 +f 5898/1/5898 5902/1/5902 5903/1/5903 +f 5898/1/5898 5901/1/5901 5902/1/5902 +f 5901/1/5901 5909/1/5909 5902/1/5902 +f 5901/1/5901 5944/1/5944 5909/1/5909 +f 5900/1/5900 5944/1/5944 5901/1/5901 +f 5897/1/5897 5900/1/5900 5901/1/5901 +f 5879/1/5879 5900/1/5900 5897/1/5897 +f 5879/1/5879 5897/1/5897 5896/1/5896 +f 5882/1/5882 5879/1/5879 5896/1/5896 +f 5878/1/5878 5879/1/5879 5882/1/5882 +f 5883/1/5883 5878/1/5878 5882/1/5882 +f 5883/1/5883 5882/1/5882 5892/1/5892 +f 5881/1/5881 5878/1/5878 5883/1/5883 +f 5884/1/5884 5881/1/5881 5883/1/5883 +f 5884/1/5884 5883/1/5883 5891/1/5891 +f 5890/1/5890 5884/1/5884 5891/1/5891 +f 5890/1/5890 5886/1/5886 5884/1/5884 +f 5886/1/5886 5880/1/5880 5884/1/5884 +f 5886/1/5886 5885/1/5885 5880/1/5880 +f 5885/1/5885 5870/1/5870 5880/1/5880 +f 5880/1/5880 5870/1/5870 5875/1/5875 +f 5880/1/5880 5875/1/5875 5881/1/5881 +f 5870/1/5870 5874/1/5874 5875/1/5875 +f 5875/1/5875 5874/1/5874 5876/1/5876 +f 5875/1/5875 5876/1/5876 5878/1/5878 +f 5874/1/5874 5873/1/5873 5876/1/5876 +f 5876/1/5876 5873/1/5873 5877/1/5877 +f 5876/1/5876 5877/1/5877 5879/1/5879 +f 5873/1/5873 5854/1/5854 5877/1/5877 +f 5877/1/5877 5854/1/5854 5900/1/5900 +f 5873/1/5873 5853/1/5853 5854/1/5854 +f 5853/1/5853 5850/1/5850 5854/1/5854 +f 5854/1/5854 5850/1/5850 5848/1/5848 +f 5854/1/5854 5848/1/5848 5944/1/5944 +f 5851/1/5851 5850/1/5850 5853/1/5853 +f 5872/1/5872 5851/1/5851 5853/1/5853 +f 5865/1/5865 5851/1/5851 5872/1/5872 +f 5871/1/5871 5865/1/5865 5872/1/5872 +f 5871/1/5871 5872/1/5872 5874/1/5874 +f 5866/1/5866 5865/1/5865 5871/1/5871 +f 5866/1/5866 5871/1/5871 5870/1/5870 +f 5869/1/5869 5866/1/5866 5870/1/5870 +f 5867/1/5867 5866/1/5866 5869/1/5869 +f 5887/1/5887 5867/1/5867 5869/1/5869 +f 5887/1/5887 5869/1/5869 5885/1/5885 +f 6189/1/6189 5867/1/5867 5887/1/5887 +f 5888/1/5888 6189/1/6189 5887/1/5887 +f 5888/1/5888 5887/1/5887 5886/1/5886 +f 5889/1/5889 5888/1/5888 5886/1/5886 +f 5947/1/5947 5888/1/5888 5889/1/5889 +f 5946/1/5946 5947/1/5947 5889/1/5889 +f 5948/1/5948 5947/1/5947 5946/1/5946 +f 5948/1/5948 5949/1/5949 5947/1/5947 +f 5949/1/5949 6187/1/6187 5947/1/5947 +f 5949/1/5949 6190/1/6190 6187/1/6187 +f 6190/1/6190 6191/1/6191 6187/1/6187 +f 6187/1/6187 6191/1/6191 6192/1/6192 +f 6187/1/6187 6192/1/6192 6188/1/6188 +f 6187/1/6187 6188/1/6188 5888/1/5888 +f 6192/1/6192 6198/1/6198 6188/1/6188 +f 6188/1/6188 6198/1/6198 6201/1/6201 +f 6188/1/6188 6201/1/6201 5868/1/5868 +f 6188/1/6188 5868/1/5868 6189/1/6189 +f 6201/1/6201 5863/1/5863 5868/1/5868 +f 5868/1/5868 5863/1/5863 5864/1/5864 +f 5868/1/5868 5864/1/5864 5867/1/5867 +f 5863/1/5863 5858/1/5858 5864/1/5864 +f 5864/1/5864 5858/1/5858 5859/1/5859 +f 5864/1/5864 5859/1/5859 5866/1/5866 +f 5858/1/5858 5855/1/5855 5859/1/5859 +f 5859/1/5859 5855/1/5855 5851/1/5851 +f 5855/1/5855 5852/1/5852 5851/1/5851 +f 5855/1/5855 5856/1/5856 5852/1/5852 +f 5856/1/5856 7229/1/7229 5852/1/5852 +f 5852/1/5852 7229/1/7229 7230/1/7230 +f 5852/1/5852 7230/1/7230 5850/1/5850 +f 5850/1/5850 7230/1/7230 5849/1/5849 +f 7230/1/7230 7295/1/7295 5849/1/5849 +f 5849/1/5849 7295/1/7295 7296/1/7296 +f 7295/1/7295 7297/1/7297 7296/1/7296 +f 7296/1/7296 7297/1/7297 7289/1/7289 +f 7296/1/7296 7289/1/7289 7292/1/7292 +f 7297/1/7297 7284/1/7284 7289/1/7289 +f 7284/1/7284 7282/1/7282 7289/1/7289 +f 7284/1/7284 7280/1/7280 7282/1/7282 +f 7283/1/7283 7280/1/7280 7284/1/7284 +f 7283/1/7283 7277/1/7277 7280/1/7280 +f 7278/1/7278 7277/1/7277 7283/1/7283 +f 7278/1/7278 7283/1/7283 7297/1/7297 +f 7274/1/7274 7277/1/7277 7278/1/7278 +f 7279/1/7279 7274/1/7274 7278/1/7278 +f 7295/1/7295 7279/1/7279 7278/1/7278 +f 7298/1/7298 7279/1/7279 7295/1/7295 +f 7298/1/7298 7275/1/7275 7279/1/7279 +f 7299/1/7299 7275/1/7275 7298/1/7298 +f 7229/1/7229 7299/1/7299 7298/1/7298 +f 7228/1/7228 7299/1/7299 7229/1/7229 +f 7228/1/7228 7300/1/7300 7299/1/7299 +f 7300/1/7300 7269/1/7269 7299/1/7299 +f 7299/1/7299 7269/1/7269 7276/1/7276 +f 7276/1/7276 7269/1/7269 7272/1/7272 +f 7276/1/7276 7272/1/7272 7275/1/7275 +f 7275/1/7275 7272/1/7272 7274/1/7274 +f 7272/1/7272 7271/1/7271 7274/1/7274 +f 7274/1/7274 7271/1/7271 7273/1/7273 +f 7272/1/7272 7268/1/7268 7271/1/7271 +f 7271/1/7271 7268/1/7268 7263/1/7263 +f 7264/1/7264 7271/1/7271 7263/1/7263 +f 7263/1/7263 7260/1/7260 7264/1/7264 +f 7262/1/7262 7260/1/7260 7263/1/7263 +f 7261/1/7261 7260/1/7260 7262/1/7262 +f 7262/1/7262 7267/1/7267 7261/1/7261 +f 7261/1/7261 7267/1/7267 7266/1/7266 +f 7261/1/7261 7266/1/7266 7265/1/7265 +f 7265/1/7265 5953/1/5953 7261/1/7261 +f 6186/1/6186 5953/1/5953 7265/1/7265 +f 6185/1/6185 5953/1/5953 6186/1/6186 +f 6186/1/6186 6179/1/6179 6185/1/6185 +f 6185/1/6185 6179/1/6179 6184/1/6184 +f 6184/1/6184 5955/1/5955 6185/1/6185 +f 6183/1/6183 5955/1/5955 6184/1/6184 +f 6184/1/6184 6174/1/6174 6183/1/6183 +f 6183/1/6183 6174/1/6174 6182/1/6182 +f 6182/1/6182 6174/1/6174 6172/1/6172 +f 6182/1/6182 6172/1/6172 6173/1/6173 +f 6173/1/6173 5958/1/5958 6182/1/6182 +f 6182/1/6182 5958/1/5958 5955/1/5955 +f 5958/1/5958 5956/1/5956 5955/1/5955 +f 5955/1/5955 5956/1/5956 5952/1/5952 +f 5955/1/5955 5952/1/5952 5953/1/5953 +f 5953/1/5953 5952/1/5952 5950/1/5950 +f 5953/1/5953 5950/1/5950 7260/1/7260 +f 7260/1/7260 5950/1/5950 5948/1/5948 +f 7260/1/7260 5948/1/5948 7255/1/7255 +f 5952/1/5952 5951/1/5951 5950/1/5950 +f 5950/1/5950 5951/1/5951 5949/1/5949 +f 5952/1/5952 5954/1/5954 5951/1/5951 +f 5954/1/5954 6216/1/6216 5951/1/5951 +f 5951/1/5951 6216/1/6216 6193/1/6193 +f 5951/1/5951 6193/1/6193 6190/1/6190 +f 6193/1/6193 6194/1/6194 6190/1/6190 +f 6190/1/6190 6194/1/6194 6195/1/6195 +f 6194/1/6194 6211/1/6211 6195/1/6195 +f 6195/1/6195 6211/1/6211 6196/1/6196 +f 6195/1/6195 6196/1/6196 6191/1/6191 +f 6191/1/6191 6196/1/6196 6197/1/6197 +f 6196/1/6196 6200/1/6200 6197/1/6197 +f 6197/1/6197 6200/1/6200 6199/1/6199 +f 6197/1/6197 6199/1/6199 6198/1/6198 +f 6200/1/6200 6202/1/6202 6199/1/6199 +f 6199/1/6199 6202/1/6202 5862/1/5862 +f 6199/1/6199 5862/1/5862 5863/1/5863 +f 6202/1/6202 5860/1/5860 5862/1/5862 +f 5862/1/5862 5860/1/5860 5857/1/5857 +f 5862/1/5862 5857/1/5857 5858/1/5858 +f 5860/1/5860 5856/1/5856 5857/1/5857 +f 5860/1/5860 5861/1/5861 5856/1/5856 +f 5861/1/5861 7228/1/7228 5856/1/5856 +f 5861/1/5861 6181/1/6181 7228/1/7228 +f 7226/1/7226 6181/1/6181 5861/1/5861 +f 6209/1/6209 7226/1/7226 5861/1/5861 +f 6209/1/6209 5861/1/5861 6206/1/6206 +f 6205/1/6205 6209/1/6209 6206/1/6206 +f 6205/1/6205 6206/1/6206 6204/1/6204 +f 6203/1/6203 6205/1/6205 6204/1/6204 +f 6203/1/6203 6204/1/6204 6200/1/6200 +f 6207/1/6207 6205/1/6205 6203/1/6203 +f 6207/1/6207 6203/1/6203 6196/1/6196 +f 6207/1/6207 6208/1/6208 6205/1/6205 +f 6210/1/6210 6208/1/6208 6207/1/6207 +f 6212/1/6212 6210/1/6210 6207/1/6207 +f 6212/1/6212 6207/1/6207 6211/1/6211 +f 6215/1/6215 6210/1/6210 6212/1/6212 +f 6213/1/6213 6215/1/6215 6212/1/6212 +f 6213/1/6213 6212/1/6212 6194/1/6194 +f 6214/1/6214 6215/1/6215 6213/1/6213 +f 6193/1/6193 6214/1/6214 6213/1/6213 +f 6214/1/6214 7214/1/7214 6215/1/6215 +f 7214/1/7214 6217/1/6217 6215/1/6215 +f 7214/1/7214 7234/1/7234 6217/1/6217 +f 7234/1/7234 7232/1/7232 6217/1/6217 +f 6217/1/6217 7232/1/7232 7231/1/7231 +f 6217/1/6217 7231/1/7231 6210/1/6210 +f 7232/1/7232 7227/1/7227 7231/1/7231 +f 7231/1/7231 7227/1/7227 6209/1/6209 +f 7231/1/7231 6209/1/6209 6208/1/6208 +f 7232/1/7232 7225/1/7225 7227/1/7227 +f 7225/1/7225 7226/1/7226 7227/1/7227 +f 7225/1/7225 7224/1/7224 7226/1/7226 +f 7224/1/7224 6180/1/6180 7226/1/7226 +f 7224/1/7224 6166/1/6166 6180/1/6180 +f 6166/1/6166 6165/1/6165 6180/1/6180 +f 6180/1/6180 6165/1/6165 6176/1/6176 +f 6180/1/6180 6176/1/6176 6181/1/6181 +f 6181/1/6181 6176/1/6176 7301/1/7301 +f 6181/1/6181 7301/1/7301 7300/1/7300 +f 7301/1/7301 7270/1/7270 7300/1/7300 +f 7301/1/7301 6178/1/6178 7270/1/7270 +f 6178/1/6178 7302/1/7302 7270/1/7270 +f 7302/1/7302 7266/1/7266 7270/1/7270 +f 7302/1/7302 6179/1/6179 7266/1/7266 +f 6177/1/6177 6179/1/6179 7302/1/7302 +f 6177/1/6177 6174/1/6174 6179/1/6179 +f 6175/1/6175 6174/1/6174 6177/1/6177 +f 6175/1/6175 6177/1/6177 6178/1/6178 +f 6176/1/6176 6175/1/6175 6178/1/6178 +f 6176/1/6176 6169/1/6169 6175/1/6175 +f 6169/1/6169 6168/1/6168 6175/1/6175 +f 6164/1/6164 6168/1/6168 6169/1/6169 +f 6165/1/6165 6164/1/6164 6169/1/6169 +f 6019/1/6019 6164/1/6164 6165/1/6165 +f 6019/1/6019 6163/1/6163 6164/1/6164 +f 6163/1/6163 6167/1/6167 6164/1/6164 +f 6163/1/6163 6011/1/6011 6167/1/6167 +f 6011/1/6011 6012/1/6012 6167/1/6167 +f 6167/1/6167 6012/1/6012 6170/1/6170 +f 6167/1/6167 6170/1/6170 6168/1/6168 +f 6168/1/6168 6170/1/6170 6172/1/6172 +f 6170/1/6170 6012/1/6012 6171/1/6171 +f 6173/1/6173 6170/1/6170 6171/1/6171 +f 6171/1/6171 5962/1/5962 6173/1/6173 +f 6010/1/6010 5962/1/5962 6171/1/6171 +f 6004/1/6004 5962/1/5962 6010/1/6010 +f 6010/1/6010 6008/1/6008 6004/1/6004 +f 6004/1/6004 6008/1/6008 6005/1/6005 +f 6004/1/6004 6005/1/6005 6003/1/6003 +f 6003/1/6003 5963/1/5963 6004/1/6004 +f 6002/1/6002 5963/1/5963 6003/1/6003 +f 6000/1/6000 5963/1/5963 6002/1/6002 +f 6002/1/6002 6001/1/6001 6000/1/6000 +f 6000/1/6000 6001/1/6001 5999/1/5999 +f 5999/1/5999 5965/1/5965 6000/1/6000 +f 5998/1/5998 5965/1/5965 5999/1/5999 +f 5999/1/5999 5997/1/5997 5998/1/5998 +f 5998/1/5998 5997/1/5997 5971/1/5971 +f 5971/1/5971 5997/1/5997 5996/1/5996 +f 5971/1/5971 5996/1/5996 5970/1/5970 +f 5970/1/5970 5967/1/5967 5971/1/5971 +f 5971/1/5971 5967/1/5967 5965/1/5965 +f 5967/1/5967 5966/1/5966 5965/1/5965 +f 5965/1/5965 5966/1/5966 5964/1/5964 +f 5965/1/5965 5964/1/5964 5963/1/5963 +f 5963/1/5963 5964/1/5964 5961/1/5961 +f 5963/1/5963 5961/1/5961 5962/1/5962 +f 5962/1/5962 5961/1/5961 5959/1/5959 +f 5962/1/5962 5959/1/5959 5958/1/5958 +f 5961/1/5961 5960/1/5960 5959/1/5959 +f 5959/1/5959 5960/1/5960 5957/1/5957 +f 5959/1/5959 5957/1/5957 5956/1/5956 +f 5956/1/5956 5957/1/5957 5954/1/5954 +f 5957/1/5957 7207/1/7207 5954/1/5954 +f 5957/1/5957 7205/1/7205 7207/1/7207 +f 7205/1/7205 7206/1/7206 7207/1/7207 +f 7207/1/7207 7206/1/7206 7208/1/7208 +f 7207/1/7207 7208/1/7208 7209/1/7209 +f 7207/1/7207 7209/1/7209 6216/1/6216 +f 6216/1/6216 7209/1/7209 7213/1/7213 +f 6216/1/6216 7213/1/7213 6214/1/6214 +f 7209/1/7209 7212/1/7212 7213/1/7213 +f 7213/1/7213 7212/1/7212 7214/1/7214 +f 7212/1/7212 7216/1/7216 7214/1/7214 +f 7211/1/7211 7216/1/7216 7212/1/7212 +f 7211/1/7211 7215/1/7215 7216/1/7216 +f 7215/1/7215 7219/1/7219 7216/1/7216 +f 7216/1/7216 7219/1/7219 7233/1/7233 +f 7216/1/7216 7233/1/7233 7234/1/7234 +f 7219/1/7219 7225/1/7225 7233/1/7233 +f 7219/1/7219 7223/1/7223 7225/1/7225 +f 7218/1/7218 7223/1/7223 7219/1/7219 +f 7218/1/7218 7222/1/7222 7223/1/7223 +f 7222/1/7222 7185/1/7185 7223/1/7223 +f 7223/1/7223 7185/1/7185 7224/1/7224 +f 7184/1/7184 7185/1/7185 7222/1/7222 +f 7220/1/7220 7184/1/7184 7222/1/7222 +f 7193/1/7193 7184/1/7184 7220/1/7220 +f 7194/1/7194 7193/1/7193 7220/1/7220 +f 7194/1/7194 7220/1/7220 7217/1/7217 +f 7194/1/7194 7217/1/7217 7221/1/7221 +f 7198/1/7198 7194/1/7194 7221/1/7221 +f 7206/1/7206 7198/1/7198 7221/1/7221 +f 7206/1/7206 7221/1/7221 7210/1/7210 +f 7199/1/7199 7198/1/7198 7206/1/7206 +f 7199/1/7199 7195/1/7195 7198/1/7198 +f 7197/1/7197 7195/1/7195 7199/1/7199 +f 7201/1/7201 7197/1/7197 7199/1/7199 +f 7201/1/7201 7199/1/7199 7205/1/7205 +f 5960/1/5960 7201/1/7201 7205/1/7205 +f 5960/1/5960 7200/1/7200 7201/1/7201 +f 7204/1/7204 7200/1/7200 5960/1/5960 +f 7204/1/7204 7203/1/7203 7200/1/7200 +f 7203/1/7203 7202/1/7202 7200/1/7200 +f 7200/1/7200 7202/1/7202 7196/1/7196 +f 7200/1/7200 7196/1/7196 7197/1/7197 +f 7196/1/7196 7190/1/7190 7197/1/7197 +f 7196/1/7196 7189/1/7189 7190/1/7190 +f 7189/1/7189 7187/1/7187 7190/1/7190 +f 7187/1/7187 7188/1/7188 7190/1/7190 +f 7190/1/7190 7188/1/7188 7192/1/7192 +f 7190/1/7190 7192/1/7192 7195/1/7195 +f 7195/1/7195 7192/1/7192 7194/1/7194 +f 7188/1/7188 7186/1/7186 7192/1/7192 +f 7192/1/7192 7186/1/7186 7193/1/7193 +f 7188/1/7188 7183/1/7183 7186/1/7186 +f 7183/1/7183 7182/1/7182 7186/1/7186 +f 7186/1/7186 7182/1/7182 7184/1/7184 +f 7182/1/7182 6162/1/6162 7184/1/7184 +f 7178/1/7178 6162/1/6162 7182/1/7182 +f 7178/1/7178 6023/1/6023 6162/1/6162 +f 6023/1/6023 6017/1/6017 6162/1/6162 +f 6162/1/6162 6017/1/6017 6018/1/6018 +f 6162/1/6162 6018/1/6018 7185/1/7185 +f 7185/1/7185 6018/1/6018 6166/1/6166 +f 6018/1/6018 6019/1/6019 6166/1/6166 +f 6018/1/6018 6015/1/6015 6019/1/6019 +f 6015/1/6015 6011/1/6011 6019/1/6019 +f 6015/1/6015 6009/1/6009 6011/1/6011 +f 6011/1/6011 6009/1/6009 6008/1/6008 +f 6014/1/6014 6009/1/6009 6015/1/6015 +f 6017/1/6017 6014/1/6014 6015/1/6015 +f 6017/1/6017 6016/1/6016 6014/1/6014 +f 6016/1/6016 6013/1/6013 6014/1/6014 +f 6016/1/6016 5995/1/5995 6013/1/6013 +f 5995/1/5995 6007/1/6007 6013/1/6013 +f 6013/1/6013 6007/1/6007 6006/1/6006 +f 6013/1/6013 6006/1/6006 6009/1/6009 +f 6006/1/6006 6005/1/6005 6009/1/6009 +f 6006/1/6006 6001/1/6001 6005/1/6005 +f 6007/1/6007 6001/1/6001 6006/1/6006 +f 6007/1/6007 5997/1/5997 6001/1/6001 +f 5995/1/5995 5997/1/5997 6007/1/6007 +f 5991/1/5991 5997/1/5997 5995/1/5995 +f 5994/1/5994 5991/1/5991 5995/1/5995 +f 5990/1/5990 5991/1/5991 5994/1/5994 +f 5993/1/5993 5990/1/5990 5994/1/5994 +f 5993/1/5993 5994/1/5994 6016/1/6016 +f 6020/1/6020 5993/1/5993 6016/1/6016 +f 6022/1/6022 5993/1/5993 6020/1/6020 +f 6021/1/6021 6022/1/6022 6020/1/6020 +f 6021/1/6021 6020/1/6020 6023/1/6023 +f 7166/1/7166 6021/1/6021 6023/1/6023 +f 7166/1/7166 6023/1/6023 7177/1/7177 +f 7165/1/7165 7166/1/7166 7177/1/7177 +f 7165/1/7165 7177/1/7177 7179/1/7179 +f 7160/1/7160 7165/1/7165 7179/1/7179 +f 7160/1/7160 7179/1/7179 7181/1/7181 +f 7161/1/7161 7160/1/7160 7181/1/7181 +f 7161/1/7161 7181/1/7181 7191/1/7191 +f 7235/1/7235 7161/1/7161 7191/1/7191 +f 7235/1/7235 7191/1/7191 7202/1/7202 +f 7202/1/7202 7191/1/7191 7189/1/7189 +f 7159/1/7159 7161/1/7161 7235/1/7235 +f 7203/1/7203 7159/1/7159 7235/1/7235 +f 7152/1/7152 7159/1/7159 7203/1/7203 +f 7152/1/7152 7156/1/7156 7159/1/7159 +f 7156/1/7156 7158/1/7158 7159/1/7159 +f 7156/1/7156 7155/1/7155 7158/1/7158 +f 7155/1/7155 7157/1/7157 7158/1/7158 +f 7157/1/7157 7162/1/7162 7158/1/7158 +f 7158/1/7158 7162/1/7162 7160/1/7160 +f 7157/1/7157 7164/1/7164 7162/1/7162 +f 7162/1/7162 7164/1/7164 7165/1/7165 +f 7157/1/7157 7163/1/7163 7164/1/7164 +f 7163/1/7163 7166/1/7166 7164/1/7164 +f 7163/1/7163 7168/1/7168 7166/1/7166 +f 7167/1/7167 7168/1/7168 7163/1/7163 +f 7149/1/7149 7167/1/7167 7163/1/7163 +f 7144/1/7144 7167/1/7167 7149/1/7149 +f 7145/1/7145 7144/1/7144 7149/1/7149 +f 7145/1/7145 7149/1/7149 7150/1/7150 +f 7146/1/7146 7145/1/7145 7150/1/7150 +f 7146/1/7146 7150/1/7150 7151/1/7151 +f 7148/1/7148 7146/1/7146 7151/1/7151 +f 7148/1/7148 7151/1/7151 7152/1/7152 +f 7154/1/7154 7148/1/7148 7152/1/7152 +f 7154/1/7154 7152/1/7152 7204/1/7204 +f 5964/1/5964 7154/1/7154 7204/1/7204 +f 7153/1/7153 7148/1/7148 7154/1/7154 +f 5966/1/5966 7153/1/7153 7154/1/7154 +f 5968/1/5968 7153/1/7153 5966/1/5966 +f 5968/1/5968 7125/1/7125 7153/1/7153 +f 7125/1/7125 7147/1/7147 7153/1/7153 +f 7125/1/7125 7138/1/7138 7147/1/7147 +f 7138/1/7138 7137/1/7137 7147/1/7147 +f 7147/1/7147 7137/1/7137 7143/1/7143 +f 7147/1/7147 7143/1/7143 7148/1/7148 +f 7137/1/7137 7140/1/7140 7143/1/7143 +f 7143/1/7143 7140/1/7140 7142/1/7142 +f 7143/1/7143 7142/1/7142 7145/1/7145 +f 7140/1/7140 7139/1/7139 7142/1/7142 +f 7139/1/7139 7144/1/7144 7142/1/7142 +f 7139/1/7139 7169/1/7169 7144/1/7144 +f 7139/1/7139 7171/1/7171 7169/1/7169 +f 7171/1/7171 6159/1/6159 7169/1/7169 +f 7169/1/7169 6159/1/6159 7170/1/7170 +f 7169/1/7169 7170/1/7170 7167/1/7167 +f 6159/1/6159 6024/1/6024 7170/1/7170 +f 7170/1/7170 6024/1/6024 7168/1/7168 +f 7168/1/7168 6024/1/6024 6021/1/6021 +f 6159/1/6159 6156/1/6156 6024/1/6024 +f 6156/1/6156 6025/1/6025 6024/1/6024 +f 6024/1/6024 6025/1/6025 6022/1/6022 +f 6025/1/6025 5987/1/5987 6022/1/6022 +f 6025/1/6025 5989/1/5989 5987/1/5987 +f 5989/1/5989 5983/1/5983 5987/1/5987 +f 5987/1/5987 5983/1/5983 5988/1/5988 +f 5987/1/5987 5988/1/5988 5990/1/5990 +f 5988/1/5988 5986/1/5986 5990/1/5990 +f 5988/1/5988 5983/1/5983 5986/1/5986 +f 5983/1/5983 5984/1/5984 5986/1/5986 +f 5986/1/5986 5984/1/5984 5992/1/5992 +f 5986/1/5986 5992/1/5992 5991/1/5991 +f 5991/1/5991 5992/1/5992 5996/1/5996 +f 5992/1/5992 5984/1/5984 5976/1/5976 +f 5970/1/5970 5992/1/5992 5976/1/5976 +f 5976/1/5976 5969/1/5969 5970/1/5970 +f 5975/1/5975 5969/1/5969 5976/1/5976 +f 5973/1/5973 5969/1/5969 5975/1/5975 +f 5975/1/5975 5977/1/5977 5973/1/5973 +f 5973/1/5973 5977/1/5977 5978/1/5978 +f 5973/1/5973 5978/1/5978 5979/1/5979 +f 5979/1/5979 5974/1/5974 5973/1/5973 +f 5980/1/5980 5974/1/5974 5979/1/5979 +f 5982/1/5982 5974/1/5974 5980/1/5980 +f 5980/1/5980 5981/1/5981 5982/1/5982 +f 5982/1/5982 5981/1/5981 7107/1/7107 +f 7107/1/7107 7104/1/7104 5982/1/5982 +f 7103/1/7103 7104/1/7104 7107/1/7107 +f 7107/1/7107 6161/1/6161 7103/1/7103 +f 7103/1/7103 6161/1/6161 7101/1/7101 +f 7101/1/7101 6161/1/6161 7100/1/7100 +f 7101/1/7101 7100/1/7100 7098/1/7098 +f 7098/1/7098 7102/1/7102 7101/1/7101 +f 7101/1/7101 7102/1/7102 7104/1/7104 +f 7102/1/7102 7105/1/7105 7104/1/7104 +f 7104/1/7104 7105/1/7105 7106/1/7106 +f 7104/1/7104 7106/1/7106 5974/1/5974 +f 5974/1/5974 7106/1/7106 5972/1/5972 +f 5974/1/5974 5972/1/5972 5969/1/5969 +f 5969/1/5969 5972/1/5972 5968/1/5968 +f 5969/1/5969 5968/1/5968 5967/1/5967 +f 7106/1/7106 7124/1/7124 5972/1/5972 +f 5972/1/5972 7124/1/7124 7125/1/7125 +f 7124/1/7124 7127/1/7127 7125/1/7125 +f 7124/1/7124 7126/1/7126 7127/1/7127 +f 7126/1/7126 7130/1/7130 7127/1/7127 +f 7127/1/7127 7130/1/7130 7133/1/7133 +f 7127/1/7127 7133/1/7133 7135/1/7135 +f 7127/1/7127 7135/1/7135 7138/1/7138 +f 7133/1/7133 7134/1/7134 7135/1/7135 +f 7135/1/7135 7134/1/7134 7136/1/7136 +f 7135/1/7135 7136/1/7136 7137/1/7137 +f 7134/1/7134 7141/1/7141 7136/1/7136 +f 7136/1/7136 7141/1/7141 7139/1/7139 +f 7134/1/7134 7174/1/7174 7141/1/7141 +f 7174/1/7174 7172/1/7172 7141/1/7141 +f 7141/1/7141 7172/1/7172 7171/1/7171 +f 7174/1/7174 7173/1/7173 7172/1/7172 +f 7173/1/7173 6157/1/6157 7172/1/7172 +f 7172/1/7172 6157/1/6157 6159/1/6159 +f 7173/1/7173 6155/1/6155 6157/1/6157 +f 6155/1/6155 6156/1/6156 6157/1/6157 +f 6155/1/6155 6036/1/6036 6156/1/6156 +f 6036/1/6036 6026/1/6026 6156/1/6156 +f 6036/1/6036 6028/1/6028 6026/1/6026 +f 6028/1/6028 6029/1/6029 6026/1/6026 +f 6026/1/6026 6029/1/6029 6027/1/6027 +f 6026/1/6026 6027/1/6027 5989/1/5989 +f 6027/1/6027 5985/1/5985 5989/1/5989 +f 6027/1/6027 6030/1/6030 5985/1/5985 +f 6030/1/6030 6031/1/6031 5985/1/5985 +f 6031/1/6031 5978/1/5978 5985/1/5985 +f 6031/1/6031 5981/1/5981 5978/1/5978 +f 6033/1/6033 5981/1/5981 6031/1/6031 +f 6033/1/6033 6161/1/6161 5981/1/5981 +f 6032/1/6032 6161/1/6161 6033/1/6033 +f 6032/1/6032 6033/1/6033 6030/1/6030 +f 6029/1/6029 6032/1/6032 6030/1/6030 +f 6029/1/6029 7108/1/7108 6032/1/6032 +f 7108/1/7108 7099/1/7099 6032/1/6032 +f 7109/1/7109 7099/1/7099 7108/1/7108 +f 6034/1/6034 7109/1/7109 7108/1/7108 +f 7111/1/7111 7109/1/7109 6034/1/6034 +f 6037/1/6037 7111/1/7111 6034/1/6034 +f 6037/1/6037 6034/1/6034 6028/1/6028 +f 6035/1/6035 6037/1/6037 6028/1/6028 +f 6038/1/6038 6037/1/6037 6035/1/6035 +f 6149/1/6149 6038/1/6038 6035/1/6035 +f 6149/1/6149 6035/1/6035 6150/1/6150 +f 6146/1/6146 6149/1/6149 6150/1/6150 +f 6146/1/6146 6150/1/6150 6147/1/6147 +f 6145/1/6145 6146/1/6146 6147/1/6147 +f 6145/1/6145 6147/1/6147 6148/1/6148 +f 6145/1/6145 6148/1/6148 6104/1/6104 +f 6102/1/6102 6145/1/6145 6104/1/6104 +f 6103/1/6103 6102/1/6102 6104/1/6104 +f 6103/1/6103 6104/1/6104 7128/1/7128 +f 6100/1/6100 6103/1/6103 7128/1/7128 +f 6100/1/6100 7128/1/7128 7126/1/7126 +f 7126/1/7126 7128/1/7128 7129/1/7129 +f 7128/1/7128 6160/1/6160 7129/1/7129 +f 7129/1/7129 6160/1/6160 7131/1/7131 +f 7129/1/7129 7131/1/7131 7130/1/7130 +f 7130/1/7130 7131/1/7131 7132/1/7132 +f 7131/1/7131 7175/1/7175 7132/1/7132 +f 7132/1/7132 7175/1/7175 7134/1/7134 +f 7131/1/7131 7176/1/7176 7175/1/7175 +f 7176/1/7176 6158/1/6158 7175/1/7175 +f 7175/1/7175 6158/1/6158 7173/1/7173 +f 7176/1/7176 6153/1/6153 6158/1/6158 +f 6153/1/6153 6155/1/6155 6158/1/6158 +f 6153/1/6153 6151/1/6151 6155/1/6155 +f 6152/1/6152 6151/1/6151 6153/1/6153 +f 6154/1/6154 6152/1/6152 6153/1/6153 +f 6148/1/6148 6152/1/6152 6154/1/6154 +f 6152/1/6152 6150/1/6150 6151/1/6151 +f 6150/1/6150 6036/1/6036 6151/1/6151 +f 6154/1/6154 6153/1/6153 7176/1/7176 +f 6160/1/6160 6154/1/6154 7176/1/7176 +f 6104/1/6104 6154/1/6154 6160/1/6160 +f 6160/1/6160 7176/1/7176 7131/1/7131 +f 6100/1/6100 6099/1/6099 6103/1/6103 +f 6097/1/6097 6099/1/6099 6100/1/6100 +f 7123/1/7123 6097/1/6097 6100/1/6100 +f 7123/1/7123 6100/1/6100 7124/1/7124 +f 6101/1/6101 6097/1/6097 7123/1/7123 +f 7105/1/7105 6101/1/6101 7123/1/7123 +f 7053/1/7053 6101/1/6101 7105/1/7105 +f 7053/1/7053 6106/1/6106 6101/1/6101 +f 6106/1/6106 6096/1/6096 6101/1/6101 +f 6106/1/6106 6105/1/6105 6096/1/6096 +f 6105/1/6105 6081/1/6081 6096/1/6096 +f 6096/1/6096 6081/1/6081 6094/1/6094 +f 6096/1/6096 6094/1/6094 6093/1/6093 +f 6096/1/6096 6093/1/6093 6097/1/6097 +f 6097/1/6097 6093/1/6093 6095/1/6095 +f 6093/1/6093 6092/1/6092 6095/1/6095 +f 6095/1/6095 6092/1/6092 6098/1/6098 +f 6095/1/6095 6098/1/6098 6099/1/6099 +f 6099/1/6099 6098/1/6098 6102/1/6102 +f 6092/1/6092 6091/1/6091 6098/1/6098 +f 6098/1/6098 6091/1/6091 6145/1/6145 +f 6092/1/6092 6087/1/6087 6091/1/6091 +f 6087/1/6087 6090/1/6090 6091/1/6091 +f 6091/1/6091 6090/1/6090 6146/1/6146 +f 6087/1/6087 6085/1/6085 6090/1/6090 +f 6085/1/6085 6089/1/6089 6090/1/6090 +f 6090/1/6090 6089/1/6089 6149/1/6149 +f 6085/1/6085 6084/1/6084 6089/1/6089 +f 6084/1/6084 6038/1/6038 6089/1/6089 +f 6084/1/6084 6040/1/6040 6038/1/6038 +f 6040/1/6040 6039/1/6039 6038/1/6038 +f 6040/1/6040 6041/1/6041 6039/1/6039 +f 6041/1/6041 7112/1/7112 6039/1/6039 +f 6039/1/6039 7112/1/7112 7111/1/7111 +f 7112/1/7112 7093/1/7093 7111/1/7111 +f 7111/1/7111 7093/1/7093 7110/1/7110 +f 7110/1/7110 7093/1/7093 7097/1/7097 +f 7110/1/7110 7097/1/7097 7109/1/7109 +f 7093/1/7093 7094/1/7094 7097/1/7097 +f 7097/1/7097 7094/1/7094 7096/1/7096 +f 7097/1/7097 7096/1/7096 7099/1/7099 +f 7099/1/7099 7096/1/7096 7100/1/7100 +f 7096/1/7096 7094/1/7094 7095/1/7095 +f 7098/1/7098 7096/1/7096 7095/1/7095 +f 7095/1/7095 7087/1/7087 7098/1/7098 +f 7090/1/7090 7087/1/7087 7095/1/7095 +f 7086/1/7086 7087/1/7087 7090/1/7090 +f 7090/1/7090 7089/1/7089 7086/1/7086 +f 7086/1/7086 7089/1/7089 7088/1/7088 +f 7086/1/7086 7088/1/7088 7085/1/7085 +f 7085/1/7085 7082/1/7082 7086/1/7086 +f 7084/1/7084 7082/1/7082 7085/1/7085 +f 7083/1/7083 7082/1/7082 7084/1/7084 +f 7084/1/7084 7080/1/7080 7083/1/7083 +f 7083/1/7083 7080/1/7080 7079/1/7079 +f 7079/1/7079 7055/1/7055 7083/1/7083 +f 7078/1/7078 7055/1/7055 7079/1/7079 +f 7079/1/7079 7077/1/7077 7078/1/7078 +f 7078/1/7078 7077/1/7077 7059/1/7059 +f 7059/1/7059 7077/1/7077 7071/1/7071 +f 7059/1/7059 7071/1/7071 7058/1/7058 +f 7058/1/7058 7056/1/7056 7059/1/7059 +f 7059/1/7059 7056/1/7056 7055/1/7055 +f 7056/1/7056 6602/1/6602 7055/1/7055 +f 7055/1/7055 6602/1/6602 7054/1/7054 +f 7055/1/7055 7054/1/7054 7082/1/7082 +f 7082/1/7082 7054/1/7054 7052/1/7052 +f 7082/1/7082 7052/1/7052 7087/1/7087 +f 7087/1/7087 7052/1/7052 7053/1/7053 +f 7087/1/7087 7053/1/7053 7102/1/7102 +f 7054/1/7054 6109/1/6109 7052/1/7052 +f 7052/1/7052 6109/1/6109 6106/1/6106 +f 7054/1/7054 6117/1/6117 6109/1/6109 +f 6117/1/6117 6108/1/6108 6109/1/6109 +f 6109/1/6109 6108/1/6108 6107/1/6107 +f 6109/1/6109 6107/1/6107 6105/1/6105 +f 6107/1/6107 6072/1/6072 6105/1/6105 +f 6105/1/6105 6072/1/6072 6079/1/6079 +f 6072/1/6072 6071/1/6071 6079/1/6079 +f 6079/1/6079 6071/1/6071 6077/1/6077 +f 6079/1/6079 6077/1/6077 6081/1/6081 +f 6081/1/6081 6077/1/6077 6080/1/6080 +f 6077/1/6077 6078/1/6078 6080/1/6080 +f 6080/1/6080 6078/1/6078 6083/1/6083 +f 6080/1/6080 6083/1/6083 6086/1/6086 +f 6094/1/6094 6080/1/6080 6086/1/6086 +f 6086/1/6086 6083/1/6083 6088/1/6088 +f 6093/1/6093 6086/1/6086 6088/1/6088 +f 6083/1/6083 6087/1/6087 6088/1/6088 +f 6078/1/6078 6082/1/6082 6083/1/6083 +f 6083/1/6083 6082/1/6082 6085/1/6085 +f 6078/1/6078 6076/1/6076 6082/1/6082 +f 6076/1/6076 6084/1/6084 6082/1/6082 +f 6076/1/6076 6075/1/6075 6084/1/6084 +f 6074/1/6074 6075/1/6075 6076/1/6076 +f 6073/1/6073 6074/1/6074 6076/1/6076 +f 6068/1/6068 6074/1/6074 6073/1/6073 +f 6071/1/6071 6068/1/6068 6073/1/6073 +f 6067/1/6067 6068/1/6068 6071/1/6071 +f 6067/1/6067 6065/1/6065 6068/1/6068 +f 6065/1/6065 6066/1/6066 6068/1/6068 +f 6065/1/6065 6062/1/6062 6066/1/6066 +f 6062/1/6062 6045/1/6045 6066/1/6066 +f 6066/1/6066 6045/1/6045 6074/1/6074 +f 6062/1/6062 6044/1/6044 6045/1/6045 +f 6044/1/6044 6042/1/6042 6045/1/6045 +f 6045/1/6045 6042/1/6042 6040/1/6040 +f 6045/1/6045 6040/1/6040 6075/1/6075 +f 6043/1/6043 6042/1/6042 6044/1/6044 +f 6061/1/6061 6043/1/6043 6044/1/6044 +f 6054/1/6054 6043/1/6043 6061/1/6061 +f 6060/1/6060 6054/1/6054 6061/1/6061 +f 6060/1/6060 6061/1/6061 6063/1/6063 +f 6059/1/6059 6060/1/6060 6063/1/6063 +f 6059/1/6059 6063/1/6063 6064/1/6064 +f 6069/1/6069 6059/1/6059 6064/1/6064 +f 6069/1/6069 6064/1/6064 6070/1/6070 +f 6107/1/6107 6069/1/6069 6070/1/6070 +f 6070/1/6070 6064/1/6064 6067/1/6067 +f 6070/1/6070 6067/1/6067 6072/1/6072 +f 6110/1/6110 6059/1/6059 6069/1/6069 +f 6108/1/6108 6110/1/6110 6069/1/6069 +f 6108/1/6108 6111/1/6111 6110/1/6110 +f 6111/1/6111 6058/1/6058 6110/1/6110 +f 6111/1/6111 6056/1/6056 6058/1/6058 +f 6056/1/6056 6055/1/6055 6058/1/6058 +f 6058/1/6058 6055/1/6055 6059/1/6059 +f 6056/1/6056 6053/1/6053 6055/1/6055 +f 6053/1/6053 6049/1/6049 6055/1/6055 +f 6055/1/6055 6049/1/6049 6054/1/6054 +f 6053/1/6053 6048/1/6048 6049/1/6049 +f 6048/1/6048 6046/1/6046 6049/1/6049 +f 6049/1/6049 6046/1/6046 6043/1/6043 +f 6046/1/6046 5595/1/5595 6043/1/6043 +f 6046/1/6046 5593/1/5593 5595/1/5595 +f 5593/1/5593 5594/1/5594 5595/1/5595 +f 5595/1/5595 5594/1/5594 5596/1/5596 +f 5595/1/5595 5596/1/5596 6042/1/6042 +f 6042/1/6042 5596/1/5596 6041/1/6041 +f 5596/1/5596 7114/1/7114 6041/1/6041 +f 6041/1/6041 7114/1/7114 7113/1/7113 +f 7114/1/7114 7115/1/7115 7113/1/7113 +f 7113/1/7113 7115/1/7115 7092/1/7092 +f 7113/1/7113 7092/1/7092 7112/1/7112 +f 7115/1/7115 7091/1/7091 7092/1/7092 +f 7091/1/7091 7088/1/7088 7092/1/7092 +f 7091/1/7091 7080/1/7080 7088/1/7088 +f 7081/1/7081 7080/1/7080 7091/1/7091 +f 7081/1/7081 7077/1/7077 7080/1/7080 +f 7076/1/7076 7077/1/7077 7081/1/7081 +f 7076/1/7076 7081/1/7081 7115/1/7115 +f 7073/1/7073 7077/1/7077 7076/1/7076 +f 7075/1/7075 7073/1/7073 7076/1/7076 +f 7114/1/7114 7075/1/7075 7076/1/7076 +f 7116/1/7116 7075/1/7075 7114/1/7114 +f 7116/1/7116 7074/1/7074 7075/1/7075 +f 7117/1/7117 7074/1/7074 7116/1/7116 +f 5594/1/5594 7117/1/7117 7116/1/7116 +f 5592/1/5592 7117/1/7117 5594/1/5594 +f 5592/1/5592 7118/1/7118 7117/1/7117 +f 7118/1/7118 7068/1/7068 7117/1/7117 +f 7118/1/7118 7120/1/7120 7068/1/7068 +f 7120/1/7120 7067/1/7067 7068/1/7068 +f 7067/1/7067 7064/1/7064 7068/1/7068 +f 7068/1/7068 7064/1/7064 7066/1/7066 +f 7068/1/7068 7066/1/7066 7072/1/7072 +f 7068/1/7068 7072/1/7072 7074/1/7074 +f 7074/1/7074 7072/1/7072 7073/1/7073 +f 7072/1/7072 7070/1/7070 7073/1/7073 +f 7073/1/7073 7070/1/7070 7071/1/7071 +f 7072/1/7072 7066/1/7066 7070/1/7070 +f 7070/1/7070 7066/1/7066 7069/1/7069 +f 7058/1/7058 7070/1/7070 7069/1/7069 +f 7069/1/7069 7057/1/7057 7058/1/7058 +f 7065/1/7065 7057/1/7057 7069/1/7069 +f 7062/1/7062 7057/1/7057 7065/1/7065 +f 7065/1/7065 7064/1/7064 7062/1/7062 +f 7062/1/7062 7064/1/7064 7061/1/7061 +f 7061/1/7061 6600/1/6600 7062/1/7062 +f 7060/1/7060 6600/1/6600 7061/1/7061 +f 7061/1/7061 7063/1/7063 7060/1/7060 +f 7060/1/7060 7063/1/7063 6611/1/6611 +f 6611/1/6611 6598/1/6598 7060/1/7060 +f 6612/1/6612 6598/1/6598 6611/1/6611 +f 6611/1/6611 6610/1/6610 6612/1/6612 +f 6612/1/6612 6610/1/6610 6604/1/6604 +f 6604/1/6604 6610/1/6610 6609/1/6609 +f 6604/1/6604 6609/1/6609 6603/1/6603 +f 6603/1/6603 6597/1/6597 6604/1/6604 +f 6604/1/6604 6597/1/6597 6598/1/6598 +f 6597/1/6597 6595/1/6595 6598/1/6598 +f 6598/1/6598 6595/1/6595 6596/1/6596 +f 6598/1/6598 6596/1/6596 6600/1/6600 +f 6600/1/6600 6596/1/6596 6599/1/6599 +f 6600/1/6600 6599/1/6599 7057/1/7057 +f 7057/1/7057 6599/1/6599 6601/1/6601 +f 7057/1/7057 6601/1/6601 7056/1/7056 +f 6599/1/6599 6120/1/6120 6601/1/6601 +f 6601/1/6601 6120/1/6120 6116/1/6116 +f 6601/1/6601 6116/1/6116 6602/1/6602 +f 6602/1/6602 6116/1/6116 6117/1/6117 +f 6116/1/6116 6113/1/6113 6117/1/6117 +f 6116/1/6116 6115/1/6115 6113/1/6113 +f 6115/1/6115 6114/1/6114 6113/1/6113 +f 6113/1/6113 6114/1/6114 6112/1/6112 +f 6113/1/6113 6112/1/6112 6111/1/6111 +f 6114/1/6114 6057/1/6057 6112/1/6112 +f 6112/1/6112 6057/1/6057 6056/1/6056 +f 6114/1/6114 6144/1/6144 6057/1/6057 +f 6144/1/6144 6052/1/6052 6057/1/6057 +f 6057/1/6057 6052/1/6052 6053/1/6053 +f 6140/1/6140 6052/1/6052 6144/1/6144 +f 6125/1/6125 6140/1/6140 6144/1/6144 +f 6124/1/6124 6140/1/6140 6125/1/6125 +f 6119/1/6119 6124/1/6124 6125/1/6125 +f 6119/1/6119 6125/1/6125 6114/1/6114 +f 6123/1/6123 6124/1/6124 6119/1/6119 +f 6118/1/6118 6123/1/6123 6119/1/6119 +f 6118/1/6118 6119/1/6119 6115/1/6115 +f 6120/1/6120 6118/1/6118 6115/1/6115 +f 6120/1/6120 6121/1/6121 6118/1/6118 +f 6121/1/6121 6122/1/6122 6118/1/6118 +f 6121/1/6121 6127/1/6127 6122/1/6122 +f 6127/1/6127 6128/1/6128 6122/1/6122 +f 6122/1/6122 6128/1/6128 6126/1/6126 +f 6122/1/6122 6126/1/6126 6123/1/6123 +f 6128/1/6128 6129/1/6129 6126/1/6126 +f 6129/1/6129 6131/1/6131 6126/1/6126 +f 6126/1/6126 6131/1/6131 6130/1/6130 +f 6126/1/6126 6130/1/6130 6124/1/6124 +f 6131/1/6131 6138/1/6138 6130/1/6130 +f 6130/1/6130 6138/1/6138 6139/1/6139 +f 6130/1/6130 6139/1/6139 6140/1/6140 +f 6140/1/6140 6139/1/6139 6051/1/6051 +f 6139/1/6139 6050/1/6050 6051/1/6051 +f 6051/1/6051 6050/1/6050 6047/1/6047 +f 6051/1/6051 6047/1/6047 6048/1/6048 +f 6052/1/6052 6051/1/6051 6048/1/6048 +f 6050/1/6050 5593/1/5593 6047/1/6047 +f 6050/1/6050 5591/1/5591 5593/1/5593 +f 5591/1/5591 5592/1/5592 5593/1/5593 +f 5591/1/5591 5590/1/5590 5592/1/5592 +f 5590/1/5590 7119/1/7119 5592/1/5592 +f 5590/1/5590 6728/1/6728 7119/1/7119 +f 6728/1/6728 7121/1/7121 7119/1/7119 +f 7119/1/7119 7121/1/7121 7120/1/7120 +f 6728/1/6728 6726/1/6726 7121/1/7121 +f 6726/1/6726 7122/1/7122 7121/1/7121 +f 7121/1/7121 7122/1/7122 7067/1/7067 +f 7122/1/7122 7063/1/7063 7067/1/7067 +f 7122/1/7122 6610/1/6610 7063/1/7063 +f 6727/1/6727 6610/1/6610 7122/1/7122 +f 6725/1/6725 6610/1/6610 6727/1/6727 +f 6726/1/6726 6725/1/6725 6727/1/6727 +f 6724/1/6724 6725/1/6725 6726/1/6726 +f 6724/1/6724 6722/1/6722 6725/1/6725 +f 6722/1/6722 6609/1/6609 6725/1/6725 +f 6722/1/6722 6613/1/6613 6609/1/6609 +f 6609/1/6609 6613/1/6613 6608/1/6608 +f 6608/1/6608 6613/1/6613 6606/1/6606 +f 6608/1/6608 6606/1/6606 6594/1/6594 +f 6605/1/6605 6608/1/6608 6594/1/6594 +f 6594/1/6594 6592/1/6592 6605/1/6605 +f 6605/1/6605 6592/1/6592 6603/1/6603 +f 6594/1/6594 6591/1/6591 6592/1/6592 +f 6591/1/6591 5608/1/5608 6592/1/6592 +f 6592/1/6592 5608/1/5608 6595/1/6595 +f 5608/1/5608 5555/1/5555 6595/1/6595 +f 6595/1/6595 5555/1/5555 5605/1/5605 +f 5555/1/5555 5554/1/5554 5605/1/5605 +f 5605/1/5605 5554/1/5554 5603/1/5603 +f 5605/1/5605 5603/1/5603 6137/1/6137 +f 6596/1/6596 5605/1/5605 6137/1/6137 +f 6596/1/6596 6137/1/6137 6136/1/6136 +f 6137/1/6137 5604/1/5604 6136/1/6136 +f 6136/1/6136 5604/1/5604 6121/1/6121 +f 5604/1/5604 6133/1/6133 6121/1/6121 +f 5604/1/5604 6135/1/6135 6133/1/6133 +f 6135/1/6135 5606/1/5606 6133/1/6133 +f 6133/1/6133 5606/1/5606 6132/1/6132 +f 6133/1/6133 6132/1/6132 6127/1/6127 +f 5606/1/5606 6134/1/6134 6132/1/6132 +f 6132/1/6132 6134/1/6134 6129/1/6129 +f 6134/1/6134 6142/1/6142 6129/1/6129 +f 6129/1/6129 6142/1/6142 6141/1/6141 +f 6142/1/6142 6143/1/6143 6141/1/6141 +f 6141/1/6141 6143/1/6143 6138/1/6138 +f 6138/1/6138 6143/1/6143 6050/1/6050 +f 6142/1/6142 5586/1/5586 6143/1/6143 +f 5586/1/5586 5580/1/5580 6143/1/6143 +f 6143/1/6143 5580/1/5580 5591/1/5591 +f 5581/1/5581 5580/1/5580 5586/1/5586 +f 5587/1/5587 5581/1/5581 5586/1/5586 +f 5584/1/5584 5581/1/5581 5587/1/5587 +f 5588/1/5588 5584/1/5584 5587/1/5587 +f 5588/1/5588 5587/1/5587 6134/1/6134 +f 5585/1/5585 5584/1/5584 5588/1/5588 +f 5585/1/5585 5588/1/5588 5606/1/5606 +f 5601/1/5601 5585/1/5585 5606/1/5606 +f 5598/1/5598 5585/1/5585 5601/1/5601 +f 5602/1/5602 5598/1/5598 5601/1/5601 +f 5602/1/5602 5601/1/5601 6135/1/6135 +f 5600/1/5600 5598/1/5598 5602/1/5602 +f 5603/1/5603 5600/1/5600 5602/1/5602 +f 5603/1/5603 5602/1/5602 5604/1/5604 +f 5603/1/5603 5599/1/5599 5600/1/5600 +f 5599/1/5599 5597/1/5597 5600/1/5600 +f 5599/1/5599 5559/1/5559 5597/1/5597 +f 5559/1/5559 5563/1/5563 5597/1/5597 +f 5597/1/5597 5563/1/5563 5598/1/5598 +f 5563/1/5563 5583/1/5583 5598/1/5598 +f 5563/1/5563 5565/1/5565 5583/1/5583 +f 5565/1/5565 5578/1/5578 5583/1/5583 +f 5583/1/5583 5578/1/5578 5582/1/5582 +f 5583/1/5583 5582/1/5582 5585/1/5585 +f 5578/1/5578 5577/1/5577 5582/1/5582 +f 5582/1/5582 5577/1/5577 5581/1/5581 +f 5577/1/5577 5576/1/5576 5581/1/5581 +f 5567/1/5567 5576/1/5576 5577/1/5577 +f 5567/1/5567 5570/1/5570 5576/1/5576 +f 5576/1/5576 5570/1/5570 5579/1/5579 +f 5576/1/5576 5579/1/5579 5580/1/5580 +f 5580/1/5580 5579/1/5579 5589/1/5589 +f 5580/1/5580 5589/1/5589 5590/1/5590 +f 5579/1/5579 6724/1/6724 5589/1/5589 +f 5589/1/5589 6724/1/6724 6728/1/6728 +f 5579/1/5579 6721/1/6721 6724/1/6724 +f 5570/1/5570 6721/1/6721 5579/1/5579 +f 5570/1/5570 6622/1/6622 6721/1/6721 +f 6622/1/6622 6720/1/6720 6721/1/6721 +f 6721/1/6721 6720/1/6720 6722/1/6722 +f 6720/1/6720 6723/1/6723 6722/1/6722 +f 6720/1/6720 6606/1/6606 6723/1/6723 +f 6720/1/6720 6615/1/6615 6606/1/6606 +f 6615/1/6615 6607/1/6607 6606/1/6606 +f 6614/1/6614 6607/1/6607 6615/1/6615 +f 6616/1/6616 6614/1/6614 6615/1/6615 +f 6620/1/6620 6616/1/6616 6615/1/6615 +f 6620/1/6620 6615/1/6615 6622/1/6622 +f 5569/1/5569 6620/1/6620 6622/1/6622 +f 5572/1/5572 6620/1/6620 5569/1/5569 +f 5571/1/5571 5572/1/5572 5569/1/5569 +f 5571/1/5571 5569/1/5569 5566/1/5566 +f 5568/1/5568 5571/1/5571 5566/1/5566 +f 5568/1/5568 5566/1/5566 5561/1/5561 +f 5557/1/5557 5568/1/5568 5561/1/5561 +f 5557/1/5557 5561/1/5561 5558/1/5558 +f 5551/1/5551 5557/1/5557 5558/1/5558 +f 5551/1/5551 5558/1/5558 5556/1/5556 +f 5552/1/5552 5551/1/5551 5556/1/5556 +f 5552/1/5552 5556/1/5556 5553/1/5553 +f 5550/1/5550 5552/1/5552 5553/1/5553 +f 5550/1/5550 5553/1/5553 5554/1/5554 +f 5554/1/5554 5553/1/5553 5599/1/5599 +f 5550/1/5550 5547/1/5547 5552/1/5552 +f 5548/1/5548 5547/1/5547 5550/1/5550 +f 5549/1/5549 5548/1/5548 5550/1/5550 +f 5549/1/5549 5550/1/5550 5555/1/5555 +f 5542/1/5542 5548/1/5548 5549/1/5549 +f 5543/1/5543 5542/1/5542 5549/1/5549 +f 5543/1/5543 5549/1/5549 5607/1/5607 +f 5460/1/5460 5543/1/5543 5607/1/5607 +f 6590/1/6590 5460/1/5460 5607/1/5607 +f 6590/1/6590 5607/1/5607 6591/1/6591 +f 6589/1/6589 6590/1/6590 6591/1/6591 +f 6589/1/6589 6591/1/6591 6593/1/6593 +f 6593/1/6593 6607/1/6607 6589/1/6589 +f 6589/1/6589 6607/1/6607 6588/1/6588 +f 6589/1/6589 6588/1/6588 6587/1/6587 +f 6587/1/6587 6588/1/6588 6584/1/6584 +f 6587/1/6587 6584/1/6584 6583/1/6583 +f 6583/1/6583 6586/1/6586 6587/1/6587 +f 6587/1/6587 6586/1/6586 6590/1/6590 +f 6582/1/6582 6586/1/6586 6583/1/6583 +f 6583/1/6583 6580/1/6580 6582/1/6582 +f 6582/1/6582 6580/1/6580 6581/1/6581 +f 6581/1/6581 6573/1/6573 6582/1/6582 +f 6574/1/6574 6573/1/6573 6581/1/6581 +f 6581/1/6581 6575/1/6575 6574/1/6574 +f 6574/1/6574 6575/1/6575 6571/1/6571 +f 6571/1/6571 6568/1/6568 6574/1/6574 +f 6569/1/6569 6568/1/6568 6571/1/6571 +f 6569/1/6569 6571/1/6571 6572/1/6572 +f 6570/1/6570 6569/1/6569 6572/1/6572 +f 6570/1/6570 6572/1/6572 6577/1/6577 +f 6570/1/6570 6577/1/6577 6563/1/6563 +f 6570/1/6570 6563/1/6563 6560/1/6560 +f 6563/1/6563 6558/1/6558 6560/1/6560 +f 6560/1/6560 6558/1/6558 6557/1/6557 +f 6557/1/6557 6561/1/6561 6560/1/6560 +f 6560/1/6560 6561/1/6561 6566/1/6566 +f 6560/1/6560 6566/1/6566 6569/1/6569 +f 6561/1/6561 5461/1/5461 6566/1/6566 +f 6566/1/6566 5461/1/5461 5456/1/5456 +f 6566/1/6566 5456/1/5456 6568/1/6568 +f 6568/1/6568 5456/1/5456 6573/1/6573 +f 6573/1/6573 5456/1/5456 5453/1/5453 +f 6573/1/6573 5453/1/5453 6586/1/6586 +f 6586/1/6586 5453/1/5453 5460/1/5460 +f 5453/1/5453 5459/1/5459 5460/1/5460 +f 5453/1/5453 5455/1/5455 5459/1/5459 +f 5459/1/5459 5455/1/5455 5540/1/5540 +f 5459/1/5459 5540/1/5540 5543/1/5543 +f 5540/1/5540 5455/1/5455 5537/1/5537 +f 5536/1/5536 5540/1/5540 5537/1/5537 +f 5536/1/5536 5537/1/5537 5532/1/5532 +f 5535/1/5535 5536/1/5536 5532/1/5532 +f 5535/1/5535 5532/1/5532 5531/1/5531 +f 5531/1/5531 5534/1/5534 5535/1/5535 +f 5535/1/5535 5534/1/5534 5539/1/5539 +f 5535/1/5535 5539/1/5539 5538/1/5538 +f 5538/1/5538 5539/1/5539 5544/1/5544 +f 5538/1/5538 5544/1/5544 5542/1/5542 +f 5542/1/5542 5540/1/5540 5538/1/5538 +f 5539/1/5539 5545/1/5545 5544/1/5544 +f 5544/1/5544 5545/1/5545 5546/1/5546 +f 5544/1/5544 5546/1/5546 5547/1/5547 +f 5547/1/5547 5546/1/5546 5551/1/5551 +f 5546/1/5546 5545/1/5545 5575/1/5575 +f 5546/1/5546 5575/1/5575 5557/1/5557 +f 5545/1/5545 5574/1/5574 5575/1/5575 +f 5575/1/5575 5574/1/5574 5568/1/5568 +f 5574/1/5574 5573/1/5573 5568/1/5568 +f 5534/1/5534 5573/1/5573 5574/1/5574 +f 5533/1/5533 5573/1/5573 5534/1/5534 +f 5533/1/5533 5571/1/5571 5573/1/5573 +f 5527/1/5527 5571/1/5571 5533/1/5533 +f 5529/1/5529 5527/1/5527 5533/1/5533 +f 5529/1/5529 5533/1/5533 5531/1/5531 +f 5531/1/5531 5528/1/5528 5529/1/5529 +f 5529/1/5529 5528/1/5528 5524/1/5524 +f 5528/1/5528 5525/1/5525 5524/1/5524 +f 5524/1/5524 5525/1/5525 5522/1/5522 +f 5524/1/5524 5522/1/5522 5520/1/5520 +f 5527/1/5527 5524/1/5524 5520/1/5520 +f 5527/1/5527 5520/1/5520 5526/1/5526 +f 5526/1/5526 5572/1/5572 5527/1/5527 +f 5526/1/5526 6623/1/6623 5572/1/5572 +f 6623/1/6623 6619/1/6619 5572/1/5572 +f 5572/1/5572 6619/1/6619 6621/1/6621 +f 6619/1/6619 6617/1/6617 6621/1/6621 +f 6621/1/6621 6617/1/6617 6620/1/6620 +f 6619/1/6619 6618/1/6618 6617/1/6617 +f 6618/1/6618 6585/1/6585 6617/1/6617 +f 6617/1/6617 6585/1/6585 6614/1/6614 +f 6585/1/6585 6588/1/6588 6614/1/6614 +f 6618/1/6618 6579/1/6579 6585/1/6585 +f 6579/1/6579 6580/1/6580 6585/1/6585 +f 6585/1/6585 6580/1/6580 6584/1/6584 +f 6579/1/6579 6575/1/6575 6580/1/6580 +f 6578/1/6578 6575/1/6575 6579/1/6579 +f 6719/1/6719 6578/1/6578 6579/1/6579 +f 6578/1/6578 6719/1/6719 6624/1/6624 +f 6718/1/6718 6578/1/6578 6624/1/6624 +f 6718/1/6718 6624/1/6624 6625/1/6625 +f 6718/1/6718 6625/1/6625 6577/1/6577 +f 6577/1/6577 6625/1/6625 6627/1/6627 +f 6625/1/6625 6626/1/6626 6627/1/6627 +f 6627/1/6627 6626/1/6626 6628/1/6628 +f 6627/1/6627 6628/1/6628 6564/1/6564 +f 6563/1/6563 6627/1/6627 6564/1/6564 +f 6564/1/6564 6628/1/6628 6631/1/6631 +f 6564/1/6564 6631/1/6631 6562/1/6562 +f 6558/1/6558 6564/1/6564 6562/1/6562 +f 6558/1/6558 6562/1/6562 6559/1/6559 +f 6559/1/6559 6562/1/6562 6565/1/6565 +f 6559/1/6559 6565/1/6565 6561/1/6561 +f 6562/1/6562 6567/1/6567 6565/1/6565 +f 6567/1/6567 5479/1/5479 6565/1/6565 +f 5479/1/5479 5461/1/5461 6565/1/6565 +f 5478/1/5478 5461/1/5461 5479/1/5479 +f 5478/1/5478 5479/1/5479 5480/1/5480 +f 5478/1/5478 5480/1/5480 5481/1/5481 +f 5478/1/5478 5481/1/5481 5503/1/5503 +f 5476/1/5476 5478/1/5478 5503/1/5503 +f 5476/1/5476 5503/1/5503 5502/1/5502 +f 5477/1/5477 5476/1/5476 5502/1/5502 +f 5477/1/5477 5502/1/5502 5621/1/5621 +f 5477/1/5477 5621/1/5621 5620/1/5620 +f 5620/1/5620 5619/1/5619 5477/1/5477 +f 5477/1/5477 5619/1/5619 5475/1/5475 +f 5477/1/5477 5475/1/5475 5474/1/5474 +f 5474/1/5474 5475/1/5475 5473/1/5473 +f 5474/1/5474 5473/1/5473 5462/1/5462 +f 5478/1/5478 5474/1/5474 5462/1/5462 +f 5462/1/5462 5473/1/5473 5466/1/5466 +f 5462/1/5462 5466/1/5466 5463/1/5463 +f 5462/1/5462 5463/1/5463 5457/1/5457 +f 5461/1/5461 5462/1/5462 5457/1/5457 +f 5457/1/5457 5463/1/5463 5458/1/5458 +f 5457/1/5457 5458/1/5458 5453/1/5453 +f 5453/1/5453 5458/1/5458 5454/1/5454 +f 5454/1/5454 5458/1/5458 5464/1/5464 +f 5610/1/5610 5454/1/5454 5464/1/5464 +f 5610/1/5610 5464/1/5464 5507/1/5507 +f 5611/1/5611 5610/1/5610 5507/1/5507 +f 5611/1/5611 5507/1/5507 5515/1/5515 +f 5523/1/5523 5611/1/5611 5515/1/5515 +f 5523/1/5523 5515/1/5515 5516/1/5516 +f 5522/1/5522 5523/1/5523 5516/1/5516 +f 5522/1/5522 5516/1/5516 5517/1/5517 +f 5516/1/5516 5514/1/5514 5517/1/5517 +f 5517/1/5517 5514/1/5514 5513/1/5513 +f 5517/1/5517 5513/1/5513 5518/1/5518 +f 5521/1/5521 5517/1/5517 5518/1/5518 +f 5521/1/5521 5518/1/5518 6625/1/6625 +f 5526/1/5526 5521/1/5521 6625/1/6625 +f 6625/1/6625 5518/1/5518 5519/1/5519 +f 5520/1/5520 5517/1/5517 5521/1/5521 +f 5518/1/5518 5513/1/5513 5519/1/5519 +f 5513/1/5513 5512/1/5512 5519/1/5519 +f 5519/1/5519 5512/1/5512 5613/1/5613 +f 5519/1/5519 5613/1/5613 6626/1/6626 +f 6626/1/6626 5613/1/5613 6629/1/6629 +f 5613/1/5613 6632/1/6632 6629/1/6629 +f 6629/1/6629 6632/1/6632 6633/1/6633 +f 6629/1/6629 6633/1/6633 6630/1/6630 +f 6628/1/6628 6629/1/6629 6630/1/6630 +f 6630/1/6630 6633/1/6633 6636/1/6636 +f 6630/1/6630 6636/1/6636 6715/1/6715 +f 6716/1/6716 6630/1/6630 6715/1/6715 +f 6716/1/6716 6715/1/6715 6717/1/6717 +f 6716/1/6716 6717/1/6717 6567/1/6567 +f 6567/1/6567 6717/1/6717 5480/1/5480 +f 6717/1/6717 7419/1/7419 5480/1/5480 +f 5480/1/5480 7419/1/7419 5482/1/5482 +f 7419/1/7419 6952/1/6952 5482/1/5482 +f 6952/1/6952 5484/1/5484 5482/1/5482 +f 5484/1/5484 5483/1/5483 5482/1/5482 +f 5482/1/5482 5483/1/5483 5481/1/5481 +f 6708/1/6708 5481/1/5481 5483/1/5483 +f 5483/1/5483 6705/1/6705 6708/1/6708 +f 6709/1/6709 6708/1/6708 6705/1/6705 +f 6709/1/6709 6705/1/6705 6703/1/6703 +f 6702/1/6702 6709/1/6709 6703/1/6703 +f 6702/1/6702 6703/1/6703 6700/1/6700 +f 6704/1/6704 6702/1/6702 6700/1/6700 +f 6704/1/6704 6700/1/6700 6639/1/6639 +f 6634/1/6634 6704/1/6704 6639/1/6639 +f 6634/1/6634 6639/1/6639 6638/1/6638 +f 6638/1/6638 6635/1/6635 6634/1/6634 +f 6632/1/6632 6634/1/6634 6635/1/6635 +f 6638/1/6638 6637/1/6637 6635/1/6635 +f 6633/1/6633 6635/1/6635 6637/1/6637 +f 6637/1/6637 6638/1/6638 6947/1/6947 +f 6637/1/6637 6947/1/6947 6948/1/6948 +f 6948/1/6948 6950/1/6950 6637/1/6637 +f 6636/1/6636 6637/1/6637 6950/1/6950 +f 6948/1/6948 6951/1/6951 6950/1/6950 +f 6950/1/6950 6951/1/6951 6952/1/6952 +f 6953/1/6953 6950/1/6950 6952/1/6952 +f 6715/1/6715 6950/1/6950 6953/1/6953 +f 6952/1/6952 6951/1/6951 6949/1/6949 +f 6949/1/6949 6951/1/6951 6948/1/6948 +f 6949/1/6949 6948/1/6948 6944/1/6944 +f 6949/1/6949 6944/1/6944 6943/1/6943 +f 6943/1/6943 5484/1/5484 6949/1/6949 +f 5485/1/5485 5484/1/5484 6943/1/6943 +f 6943/1/6943 6941/1/6941 5485/1/5485 +f 5485/1/5485 6941/1/6941 5487/1/5487 +f 5486/1/5486 5485/1/5485 5487/1/5487 +f 5486/1/5486 5487/1/5487 5488/1/5488 +f 6692/1/6692 5486/1/5486 5488/1/5488 +f 6692/1/6692 5488/1/5488 6691/1/6691 +f 6691/1/6691 6690/1/6690 6692/1/6692 +f 6692/1/6692 6690/1/6690 6693/1/6693 +f 6690/1/6690 6694/1/6694 6693/1/6693 +f 6693/1/6693 6694/1/6694 6696/1/6696 +f 6693/1/6693 6696/1/6696 6698/1/6698 +f 6693/1/6693 6698/1/6698 6707/1/6707 +f 5486/1/5486 6693/1/6693 6707/1/6707 +f 5486/1/5486 6707/1/6707 5483/1/5483 +f 6707/1/6707 6706/1/6706 5483/1/5483 +f 6707/1/6707 6698/1/6698 6706/1/6706 +f 6698/1/6698 6699/1/6699 6706/1/6706 +f 6706/1/6706 6699/1/6699 6701/1/6701 +f 6706/1/6706 6701/1/6701 6705/1/6705 +f 6699/1/6699 6697/1/6697 6701/1/6701 +f 6700/1/6700 6701/1/6701 6697/1/6697 +f 6700/1/6700 6697/1/6697 6640/1/6640 +f 6695/1/6695 6640/1/6640 6697/1/6697 +f 6696/1/6696 6695/1/6695 6697/1/6697 +f 6695/1/6695 6642/1/6642 6640/1/6640 +f 6642/1/6642 6643/1/6643 6640/1/6640 +f 6640/1/6640 6643/1/6643 6641/1/6641 +f 6638/1/6638 6640/1/6640 6641/1/6641 +f 6643/1/6643 6920/1/6920 6641/1/6641 +f 6947/1/6947 6641/1/6641 6920/1/6920 +f 6947/1/6947 6920/1/6920 6946/1/6946 +f 6946/1/6946 6920/1/6920 6945/1/6945 +f 6944/1/6944 6946/1/6946 6945/1/6945 +f 6944/1/6944 6945/1/6945 6941/1/6941 +f 6945/1/6945 6942/1/6942 6941/1/6941 +f 6941/1/6941 6942/1/6942 6939/1/6939 +f 6940/1/6940 6939/1/6939 6942/1/6942 +f 6918/1/6918 6940/1/6940 6942/1/6942 +f 6917/1/6917 6940/1/6940 6918/1/6918 +f 6916/1/6916 6917/1/6917 6918/1/6918 +f 6916/1/6916 6918/1/6918 6920/1/6920 +f 6919/1/6919 6917/1/6917 6916/1/6916 +f 6645/1/6645 6919/1/6919 6916/1/6916 +f 6645/1/6645 6916/1/6916 6643/1/6643 +f 6644/1/6644 6645/1/6645 6643/1/6643 +f 6684/1/6684 6645/1/6645 6644/1/6644 +f 6684/1/6684 6644/1/6644 6686/1/6686 +f 6685/1/6685 6684/1/6684 6686/1/6686 +f 6685/1/6685 6686/1/6686 6689/1/6689 +f 6687/1/6687 6685/1/6685 6689/1/6689 +f 6687/1/6687 6689/1/6689 6690/1/6690 +f 6683/1/6683 6685/1/6685 6687/1/6687 +f 6688/1/6688 6683/1/6683 6687/1/6687 +f 6688/1/6688 6687/1/6687 6691/1/6691 +f 6681/1/6681 6683/1/6683 6688/1/6688 +f 5488/1/5488 6681/1/6681 6688/1/6688 +f 6681/1/6681 5488/1/5488 6676/1/6676 +f 6676/1/6676 6680/1/6680 6681/1/6681 +f 6676/1/6676 6678/1/6678 6680/1/6680 +f 6678/1/6678 6679/1/6679 6680/1/6680 +f 6680/1/6680 6679/1/6679 6682/1/6682 +f 6680/1/6680 6682/1/6682 6683/1/6683 +f 6679/1/6679 6684/1/6684 6682/1/6682 +f 6679/1/6679 6646/1/6646 6684/1/6684 +f 6677/1/6677 6646/1/6646 6679/1/6679 +f 6651/1/6651 6646/1/6646 6677/1/6677 +f 6675/1/6675 6651/1/6651 6677/1/6677 +f 6675/1/6675 6677/1/6677 6678/1/6678 +f 6674/1/6674 6651/1/6651 6675/1/6675 +f 5491/1/5491 6674/1/6674 6675/1/6675 +f 6676/1/6676 5491/1/5491 6675/1/6675 +f 5493/1/5493 6674/1/6674 5491/1/5491 +f 5490/1/5490 5493/1/5493 5491/1/5491 +f 5490/1/5490 5491/1/5491 5488/1/5488 +f 5488/1/5488 5489/1/5489 5490/1/5490 +f 5489/1/5489 6930/1/6930 5490/1/5490 +f 6926/1/6926 5490/1/5490 6930/1/6930 +f 6924/1/6924 6926/1/6926 6930/1/6930 +f 6924/1/6924 6930/1/6930 6938/1/6938 +f 6924/1/6924 6938/1/6938 6940/1/6940 +f 6921/1/6921 6926/1/6926 6924/1/6924 +f 6921/1/6921 6924/1/6924 6917/1/6917 +f 6921/1/6921 6925/1/6925 6926/1/6926 +f 6925/1/6925 6929/1/6929 6926/1/6926 +f 6925/1/6925 5492/1/5492 6929/1/6929 +f 5490/1/5490 6929/1/6929 5492/1/5492 +f 6928/1/6928 5492/1/5492 6925/1/6925 +f 6923/1/6923 6928/1/6928 6925/1/6925 +f 6927/1/6927 6928/1/6928 6923/1/6923 +f 6922/1/6922 6927/1/6927 6923/1/6923 +f 6922/1/6922 6923/1/6923 6650/1/6650 +f 6649/1/6649 6922/1/6922 6650/1/6650 +f 6649/1/6649 6650/1/6650 6647/1/6647 +f 6653/1/6653 6649/1/6649 6647/1/6647 +f 6648/1/6648 6653/1/6653 6647/1/6647 +f 6648/1/6648 6647/1/6647 6646/1/6646 +f 6646/1/6646 6647/1/6647 6645/1/6645 +f 6652/1/6652 6653/1/6653 6648/1/6648 +f 6655/1/6655 6652/1/6652 6648/1/6648 +f 6655/1/6655 6648/1/6648 6654/1/6654 +f 6673/1/6673 6655/1/6655 6654/1/6654 +f 6673/1/6673 6654/1/6654 6674/1/6674 +f 6672/1/6672 6655/1/6655 6673/1/6673 +f 6672/1/6672 6673/1/6673 5493/1/5493 +f 6672/1/6672 5493/1/5493 5495/1/5495 +f 5495/1/5495 6671/1/6671 6672/1/6672 +f 6671/1/6671 6664/1/6664 6672/1/6672 +f 6671/1/6671 6665/1/6665 6664/1/6664 +f 6665/1/6665 6658/1/6658 6664/1/6664 +f 6664/1/6664 6658/1/6658 6652/1/6652 +f 6658/1/6658 6656/1/6656 6652/1/6652 +f 6658/1/6658 6659/1/6659 6656/1/6656 +f 6659/1/6659 6660/1/6660 6656/1/6656 +f 6656/1/6656 6660/1/6660 6657/1/6657 +f 6656/1/6656 6657/1/6657 6653/1/6653 +f 6660/1/6660 6932/1/6932 6657/1/6657 +f 6657/1/6657 6932/1/6932 6922/1/6922 +f 6660/1/6660 6934/1/6934 6932/1/6932 +f 6934/1/6934 6933/1/6933 6932/1/6932 +f 6932/1/6932 6933/1/6933 6931/1/6931 +f 6932/1/6932 6931/1/6931 6927/1/6927 +f 6933/1/6933 5497/1/5497 6931/1/6931 +f 6931/1/6931 5497/1/5497 5494/1/5494 +f 6931/1/6931 5494/1/5494 6928/1/6928 +f 5496/1/5496 5494/1/5494 5497/1/5497 +f 5496/1/5496 5497/1/5497 5498/1/5498 +f 5498/1/5498 5499/1/5499 5496/1/5496 +f 6669/1/6669 5496/1/5496 5499/1/5499 +f 5499/1/5499 6663/1/6663 6669/1/6669 +f 6669/1/6669 6663/1/6663 6670/1/6670 +f 6670/1/6670 6663/1/6663 6665/1/6665 +f 5499/1/5499 6666/1/6666 6663/1/6663 +f 6666/1/6666 6661/1/6661 6663/1/6663 +f 6663/1/6663 6661/1/6661 6658/1/6658 +f 6666/1/6666 6659/1/6659 6661/1/6661 +f 6668/1/6668 6659/1/6659 6666/1/6666 +f 6668/1/6668 6666/1/6666 6667/1/6667 +f 5501/1/5501 6668/1/6668 6667/1/6667 +f 6667/1/6667 5499/1/5499 5501/1/5501 +f 5500/1/5500 5501/1/5501 5499/1/5499 +f 6730/1/6730 5501/1/5501 5500/1/5500 +f 6730/1/6730 5500/1/5500 6937/1/6937 +f 6936/1/6936 6730/1/6730 6937/1/6937 +f 6936/1/6936 6937/1/6937 6935/1/6935 +f 6936/1/6936 6935/1/6935 6933/1/6933 +f 6937/1/6937 5498/1/5498 6935/1/6935 +f 6729/1/6729 6730/1/6730 6936/1/6936 +f 6729/1/6729 6936/1/6936 6934/1/6934 +f 6662/1/6662 6729/1/6729 6934/1/6934 +f 6729/1/6729 6662/1/6662 5501/1/5501 +f 5501/1/5501 6662/1/6662 6659/1/6659 +f 6937/1/6937 5500/1/5500 5498/1/5498 +f 6730/1/6730 6729/1/6729 5501/1/5501 +f 6668/1/6668 5501/1/5501 6659/1/6659 +f 6667/1/6667 6666/1/6666 5499/1/5499 +f 5496/1/5496 6669/1/6669 6670/1/6670 +f 6670/1/6670 6671/1/6671 5496/1/5496 +f 5500/1/5500 5499/1/5499 5498/1/5498 +f 6935/1/6935 5498/1/5498 5497/1/5497 +f 5495/1/5495 5494/1/5494 5496/1/5496 +f 6935/1/6935 5497/1/5497 6933/1/6933 +f 6934/1/6934 6936/1/6936 6933/1/6933 +f 6662/1/6662 6934/1/6934 6660/1/6660 +f 6659/1/6659 6662/1/6662 6660/1/6660 +f 6661/1/6661 6659/1/6659 6658/1/6658 +f 6663/1/6663 6658/1/6658 6665/1/6665 +f 6670/1/6670 6665/1/6665 6671/1/6671 +f 5496/1/5496 6671/1/6671 5495/1/5495 +f 5493/1/5493 5494/1/5494 5495/1/5495 +f 5493/1/5493 5492/1/5492 5494/1/5494 +f 6672/1/6672 6664/1/6664 6655/1/6655 +f 6654/1/6654 6648/1/6648 6651/1/6651 +f 6664/1/6664 6652/1/6652 6655/1/6655 +f 6652/1/6652 6656/1/6656 6653/1/6653 +f 6653/1/6653 6657/1/6657 6649/1/6649 +f 6647/1/6647 6650/1/6650 6919/1/6919 +f 6650/1/6650 6921/1/6921 6919/1/6919 +f 6657/1/6657 6922/1/6922 6649/1/6649 +f 6650/1/6650 6923/1/6923 6921/1/6921 +f 6932/1/6932 6927/1/6927 6922/1/6922 +f 6927/1/6927 6931/1/6931 6928/1/6928 +f 6928/1/6928 5494/1/5494 5492/1/5492 +f 6923/1/6923 6925/1/6925 6921/1/6921 +f 5490/1/5490 6926/1/6926 6929/1/6929 +f 6938/1/6938 6930/1/6930 5489/1/5489 +f 6938/1/6938 5489/1/5489 6939/1/6939 +f 5489/1/5489 5487/1/5487 6939/1/6939 +f 5492/1/5492 5493/1/5493 5490/1/5490 +f 5493/1/5493 6673/1/6673 6674/1/6674 +f 6674/1/6674 6654/1/6654 6651/1/6651 +f 6651/1/6651 6648/1/6648 6646/1/6646 +f 6678/1/6678 6677/1/6677 6679/1/6679 +f 6675/1/6675 6678/1/6678 6676/1/6676 +f 5488/1/5488 5491/1/5491 6676/1/6676 +f 6681/1/6681 6680/1/6680 6683/1/6683 +f 6683/1/6683 6682/1/6682 6685/1/6685 +f 6689/1/6689 6686/1/6686 6694/1/6694 +f 6694/1/6694 6686/1/6686 6695/1/6695 +f 6682/1/6682 6684/1/6684 6685/1/6685 +f 6686/1/6686 6644/1/6644 6642/1/6642 +f 6646/1/6646 6645/1/6645 6684/1/6684 +f 6647/1/6647 6919/1/6919 6645/1/6645 +f 6919/1/6919 6921/1/6921 6917/1/6917 +f 6917/1/6917 6924/1/6924 6940/1/6940 +f 6940/1/6940 6938/1/6938 6939/1/6939 +f 6918/1/6918 6942/1/6942 6945/1/6945 +f 6920/1/6920 6918/1/6918 6945/1/6945 +f 6643/1/6643 6916/1/6916 6920/1/6920 +f 6644/1/6644 6643/1/6643 6642/1/6642 +f 6686/1/6686 6642/1/6642 6695/1/6695 +f 6696/1/6696 6697/1/6697 6699/1/6699 +f 6698/1/6698 6696/1/6696 6699/1/6699 +f 6694/1/6694 6695/1/6695 6696/1/6696 +f 6690/1/6690 6689/1/6689 6694/1/6694 +f 6691/1/6691 6687/1/6687 6690/1/6690 +f 6691/1/6691 5488/1/5488 6688/1/6688 +f 6692/1/6692 6693/1/6693 5486/1/5486 +f 5488/1/5488 5487/1/5487 5489/1/5489 +f 5483/1/5483 5485/1/5485 5486/1/5486 +f 5487/1/5487 6941/1/6941 6939/1/6939 +f 6943/1/6943 6944/1/6944 6941/1/6941 +f 6948/1/6948 6946/1/6946 6944/1/6944 +f 6948/1/6948 6947/1/6947 6946/1/6946 +f 6638/1/6638 6641/1/6641 6947/1/6947 +f 6639/1/6639 6640/1/6640 6638/1/6638 +f 6714/1/6714 6704/1/6704 6634/1/6634 +f 5615/1/5615 6714/1/6714 6634/1/6634 +f 5613/1/5613 5615/1/5615 6634/1/6634 +f 5615/1/5615 5618/1/5618 6714/1/6714 +f 5622/1/5622 6714/1/6714 5618/1/5618 +f 5622/1/5622 5618/1/5618 5620/1/5620 +f 5622/1/5622 6713/1/6713 6714/1/6714 +f 5622/1/5622 5621/1/5621 6713/1/6713 +f 5621/1/5621 6711/1/6711 6713/1/6713 +f 6713/1/6713 6711/1/6711 6702/1/6702 +f 5621/1/5621 6712/1/6712 6711/1/6711 +f 6712/1/6712 6710/1/6710 6711/1/6711 +f 6711/1/6711 6710/1/6710 6709/1/6709 +f 6712/1/6712 5481/1/5481 6710/1/6710 +f 5616/1/5616 5618/1/5618 5615/1/5615 +f 5614/1/5614 5616/1/5616 5615/1/5615 +f 5512/1/5512 5614/1/5614 5615/1/5615 +f 5511/1/5511 5614/1/5614 5512/1/5512 +f 5510/1/5510 5511/1/5511 5512/1/5512 +f 5510/1/5510 5506/1/5506 5511/1/5511 +f 5506/1/5506 5504/1/5504 5511/1/5511 +f 5469/1/5469 5504/1/5504 5506/1/5506 +f 5505/1/5505 5469/1/5469 5506/1/5506 +f 5470/1/5470 5469/1/5469 5505/1/5505 +f 5508/1/5508 5470/1/5470 5505/1/5505 +f 5508/1/5508 5505/1/5505 5509/1/5509 +f 5514/1/5514 5508/1/5508 5509/1/5509 +f 5515/1/5515 5508/1/5508 5514/1/5514 +f 5509/1/5509 5505/1/5505 5510/1/5510 +f 5509/1/5509 5510/1/5510 5513/1/5513 +f 5507/1/5507 5470/1/5470 5508/1/5508 +f 5470/1/5470 5465/1/5465 5469/1/5469 +f 5465/1/5465 5468/1/5468 5469/1/5469 +f 5469/1/5469 5468/1/5468 5471/1/5471 +f 5468/1/5468 5467/1/5467 5471/1/5471 +f 5471/1/5471 5467/1/5467 5472/1/5472 +f 5471/1/5471 5472/1/5472 5504/1/5504 +f 5504/1/5504 5472/1/5472 5617/1/5617 +f 5504/1/5504 5617/1/5617 5614/1/5614 +f 5472/1/5472 5475/1/5475 5617/1/5617 +f 5467/1/5467 5473/1/5473 5472/1/5472 +f 5468/1/5468 5463/1/5463 5467/1/5467 +f 5465/1/5465 5463/1/5463 5468/1/5468 +f 5464/1/5464 5465/1/5465 5470/1/5470 +f 5469/1/5469 5471/1/5471 5504/1/5504 +f 5505/1/5505 5506/1/5506 5510/1/5510 +f 5511/1/5511 5504/1/5504 5614/1/5614 +f 5614/1/5614 5617/1/5617 5616/1/5616 +f 5617/1/5617 5619/1/5619 5616/1/5616 +f 5616/1/5616 5619/1/5619 5618/1/5618 +f 6714/1/6714 6713/1/6713 6704/1/6704 +f 6639/1/6639 6700/1/6700 6640/1/6640 +f 6713/1/6713 6702/1/6702 6704/1/6704 +f 6703/1/6703 6701/1/6701 6700/1/6700 +f 6711/1/6711 6709/1/6709 6702/1/6702 +f 6703/1/6703 6705/1/6705 6701/1/6701 +f 6710/1/6710 6708/1/6708 6709/1/6709 +f 5483/1/5483 6706/1/6706 6705/1/6705 +f 6710/1/6710 5481/1/5481 6708/1/6708 +f 5484/1/5484 5485/1/5485 5483/1/5483 +f 6952/1/6952 6949/1/6949 5484/1/5484 +f 6953/1/6953 6952/1/6952 7419/1/7419 +f 6717/1/6717 6953/1/6953 7419/1/7419 +f 6717/1/6717 6715/1/6715 6953/1/6953 +f 6631/1/6631 6630/1/6630 6716/1/6716 +f 6715/1/6715 6636/1/6636 6950/1/6950 +f 6633/1/6633 6637/1/6637 6636/1/6636 +f 6632/1/6632 6635/1/6635 6633/1/6633 +f 5613/1/5613 6634/1/6634 6632/1/6632 +f 5512/1/5512 5615/1/5615 5613/1/5613 +f 5513/1/5513 5510/1/5510 5512/1/5512 +f 5514/1/5514 5509/1/5509 5513/1/5513 +f 5516/1/5516 5515/1/5515 5514/1/5514 +f 5612/1/5612 5611/1/5611 5523/1/5523 +f 5530/1/5530 5612/1/5612 5523/1/5523 +f 5530/1/5530 5523/1/5523 5525/1/5525 +f 5530/1/5530 5541/1/5541 5612/1/5612 +f 5541/1/5541 5609/1/5609 5612/1/5612 +f 5541/1/5541 5455/1/5455 5609/1/5609 +f 5455/1/5455 5454/1/5454 5609/1/5609 +f 5537/1/5537 5541/1/5541 5530/1/5530 +f 5612/1/5612 5609/1/5609 5611/1/5611 +f 5515/1/5515 5507/1/5507 5508/1/5508 +f 5609/1/5609 5610/1/5610 5611/1/5611 +f 5507/1/5507 5464/1/5464 5470/1/5470 +f 5609/1/5609 5454/1/5454 5610/1/5610 +f 5464/1/5464 5458/1/5458 5465/1/5465 +f 5458/1/5458 5463/1/5463 5465/1/5465 +f 5463/1/5463 5466/1/5466 5467/1/5467 +f 5467/1/5467 5466/1/5466 5473/1/5473 +f 5472/1/5472 5473/1/5473 5475/1/5475 +f 5617/1/5617 5475/1/5475 5619/1/5619 +f 5620/1/5620 5618/1/5618 5619/1/5619 +f 5620/1/5620 5621/1/5621 5622/1/5622 +f 5502/1/5502 6712/1/6712 5621/1/5621 +f 5474/1/5474 5476/1/5476 5477/1/5477 +f 5502/1/5502 5503/1/5503 6712/1/6712 +f 5478/1/5478 5476/1/5476 5474/1/5474 +f 5503/1/5503 5481/1/5481 6712/1/6712 +f 5482/1/5482 5481/1/5481 5480/1/5480 +f 5462/1/5462 5461/1/5461 5478/1/5478 +f 6567/1/6567 5480/1/5480 5479/1/5479 +f 6562/1/6562 6716/1/6716 6567/1/6567 +f 6562/1/6562 6631/1/6631 6716/1/6716 +f 6628/1/6628 6630/1/6630 6631/1/6631 +f 6626/1/6626 6629/1/6629 6628/1/6628 +f 6625/1/6625 5519/1/5519 6626/1/6626 +f 6625/1/6625 6624/1/6624 6623/1/6623 +f 6577/1/6577 6578/1/6578 6718/1/6718 +f 6577/1/6577 6576/1/6576 6578/1/6578 +f 6624/1/6624 6719/1/6719 6619/1/6619 +f 6576/1/6576 6575/1/6575 6578/1/6578 +f 6572/1/6572 6575/1/6575 6576/1/6576 +f 6719/1/6719 6579/1/6579 6618/1/6618 +f 6619/1/6619 6719/1/6719 6618/1/6618 +f 6623/1/6623 6624/1/6624 6619/1/6619 +f 6625/1/6625 6623/1/6623 5526/1/5526 +f 5526/1/5526 5520/1/5520 5521/1/5521 +f 5520/1/5520 5522/1/5522 5517/1/5517 +f 5525/1/5525 5523/1/5523 5522/1/5522 +f 5528/1/5528 5530/1/5530 5525/1/5525 +f 5532/1/5532 5530/1/5530 5528/1/5528 +f 5529/1/5529 5524/1/5524 5527/1/5527 +f 5534/1/5534 5574/1/5574 5545/1/5545 +f 5534/1/5534 5545/1/5545 5539/1/5539 +f 5531/1/5531 5533/1/5533 5534/1/5534 +f 5531/1/5531 5532/1/5532 5528/1/5528 +f 5538/1/5538 5536/1/5536 5535/1/5535 +f 5532/1/5532 5537/1/5537 5530/1/5530 +f 5538/1/5538 5540/1/5540 5536/1/5536 +f 5537/1/5537 5455/1/5455 5541/1/5541 +f 5453/1/5453 5454/1/5454 5455/1/5455 +f 5456/1/5456 5457/1/5457 5453/1/5453 +f 5461/1/5461 5457/1/5457 5456/1/5456 +f 6565/1/6565 5461/1/5461 6561/1/6561 +f 6559/1/6559 6561/1/6561 6557/1/6557 +f 6557/1/6557 6558/1/6558 6559/1/6559 +f 6563/1/6563 6564/1/6564 6558/1/6558 +f 6577/1/6577 6627/1/6627 6563/1/6563 +f 6577/1/6577 6572/1/6572 6576/1/6576 +f 6570/1/6570 6560/1/6560 6569/1/6569 +f 6569/1/6569 6566/1/6566 6568/1/6568 +f 6572/1/6572 6571/1/6571 6575/1/6575 +f 6574/1/6574 6568/1/6568 6573/1/6573 +f 6581/1/6581 6580/1/6580 6575/1/6575 +f 6582/1/6582 6573/1/6573 6586/1/6586 +f 6583/1/6583 6584/1/6584 6580/1/6580 +f 6585/1/6585 6584/1/6584 6588/1/6588 +f 6594/1/6594 6607/1/6607 6593/1/6593 +f 6587/1/6587 6590/1/6590 6589/1/6589 +f 6586/1/6586 5460/1/5460 6590/1/6590 +f 5460/1/5460 5459/1/5459 5543/1/5543 +f 5607/1/5607 5549/1/5549 5608/1/5608 +f 5543/1/5543 5540/1/5540 5542/1/5542 +f 5542/1/5542 5544/1/5544 5548/1/5548 +f 5544/1/5544 5547/1/5547 5548/1/5548 +f 5553/1/5553 5556/1/5556 5559/1/5559 +f 5556/1/5556 5560/1/5560 5559/1/5559 +f 5547/1/5547 5551/1/5551 5552/1/5552 +f 5556/1/5556 5558/1/5558 5560/1/5560 +f 5558/1/5558 5562/1/5562 5560/1/5560 +f 5560/1/5560 5562/1/5562 5564/1/5564 +f 5560/1/5560 5564/1/5564 5565/1/5565 +f 5562/1/5562 5567/1/5567 5564/1/5564 +f 5564/1/5564 5567/1/5567 5578/1/5578 +f 5562/1/5562 5566/1/5566 5567/1/5567 +f 5546/1/5546 5557/1/5557 5551/1/5551 +f 5558/1/5558 5561/1/5561 5562/1/5562 +f 5575/1/5575 5568/1/5568 5557/1/5557 +f 5561/1/5561 5566/1/5566 5562/1/5562 +f 5573/1/5573 5571/1/5571 5568/1/5568 +f 5566/1/5566 5569/1/5569 5570/1/5570 +f 5527/1/5527 5572/1/5572 5571/1/5571 +f 5572/1/5572 6621/1/6621 6620/1/6620 +f 6620/1/6620 6617/1/6617 6616/1/6616 +f 6617/1/6617 6614/1/6614 6616/1/6616 +f 6614/1/6614 6588/1/6588 6607/1/6607 +f 6622/1/6622 6615/1/6615 6720/1/6720 +f 5569/1/5569 6622/1/6622 5570/1/5570 +f 5566/1/5566 5570/1/5570 5567/1/5567 +f 5578/1/5578 5567/1/5567 5577/1/5577 +f 5565/1/5565 5564/1/5564 5578/1/5578 +f 5560/1/5560 5565/1/5565 5563/1/5563 +f 5559/1/5559 5560/1/5560 5563/1/5563 +f 5553/1/5553 5559/1/5559 5599/1/5599 +f 5600/1/5600 5597/1/5597 5598/1/5598 +f 5598/1/5598 5583/1/5583 5585/1/5585 +f 5585/1/5585 5582/1/5582 5584/1/5584 +f 5582/1/5582 5581/1/5581 5584/1/5584 +f 5581/1/5581 5576/1/5576 5580/1/5580 +f 5587/1/5587 5586/1/5586 6142/1/6142 +f 6134/1/6134 5587/1/5587 6142/1/6142 +f 5606/1/5606 5588/1/5588 6134/1/6134 +f 6135/1/6135 5601/1/5601 5606/1/5606 +f 5604/1/5604 5602/1/5602 6135/1/6135 +f 6137/1/6137 5603/1/5603 5604/1/5604 +f 5554/1/5554 5599/1/5599 5603/1/5603 +f 5555/1/5555 5550/1/5550 5554/1/5554 +f 5608/1/5608 5549/1/5549 5555/1/5555 +f 6591/1/6591 5607/1/5607 5608/1/5608 +f 6593/1/6593 6591/1/6591 6594/1/6594 +f 6603/1/6603 6608/1/6608 6605/1/6605 +f 6594/1/6594 6606/1/6606 6607/1/6607 +f 6723/1/6723 6606/1/6606 6613/1/6613 +f 6723/1/6723 6613/1/6613 6722/1/6722 +f 6721/1/6721 6722/1/6722 6724/1/6724 +f 6726/1/6726 6727/1/6727 7122/1/7122 +f 6724/1/6724 6726/1/6726 6728/1/6728 +f 5589/1/5589 6728/1/6728 5590/1/5590 +f 5580/1/5580 5590/1/5590 5591/1/5591 +f 6143/1/6143 5591/1/5591 6050/1/6050 +f 6138/1/6138 6050/1/6050 6139/1/6139 +f 6131/1/6131 6141/1/6141 6138/1/6138 +f 6129/1/6129 6141/1/6141 6131/1/6131 +f 6132/1/6132 6129/1/6129 6128/1/6128 +f 6127/1/6127 6132/1/6132 6128/1/6128 +f 6121/1/6121 6133/1/6133 6127/1/6127 +f 6136/1/6136 6121/1/6121 6120/1/6120 +f 6118/1/6118 6122/1/6122 6123/1/6123 +f 6123/1/6123 6126/1/6126 6124/1/6124 +f 6124/1/6124 6130/1/6130 6140/1/6140 +f 6140/1/6140 6051/1/6051 6052/1/6052 +f 6114/1/6114 6125/1/6125 6144/1/6144 +f 6115/1/6115 6119/1/6119 6114/1/6114 +f 6120/1/6120 6115/1/6115 6116/1/6116 +f 6599/1/6599 6136/1/6136 6120/1/6120 +f 6596/1/6596 6136/1/6136 6599/1/6599 +f 6595/1/6595 5605/1/5605 6596/1/6596 +f 6592/1/6592 6595/1/6595 6597/1/6597 +f 6603/1/6603 6592/1/6592 6597/1/6597 +f 6603/1/6603 6609/1/6609 6608/1/6608 +f 6725/1/6725 6609/1/6609 6610/1/6610 +f 6604/1/6604 6598/1/6598 6612/1/6612 +f 6611/1/6611 7063/1/7063 6610/1/6610 +f 7060/1/7060 6598/1/6598 6600/1/6600 +f 7061/1/7061 7064/1/7064 7063/1/7063 +f 7062/1/7062 6600/1/6600 7057/1/7057 +f 7069/1/7069 7066/1/7066 7065/1/7065 +f 7065/1/7065 7066/1/7066 7064/1/7064 +f 7067/1/7067 7063/1/7063 7064/1/7064 +f 7121/1/7121 7067/1/7067 7120/1/7120 +f 7119/1/7119 7120/1/7120 7118/1/7118 +f 5592/1/5592 7119/1/7119 7118/1/7118 +f 7117/1/7117 7068/1/7068 7074/1/7074 +f 7074/1/7074 7073/1/7073 7075/1/7075 +f 7115/1/7115 7081/1/7081 7091/1/7091 +f 7114/1/7114 7076/1/7076 7115/1/7115 +f 5596/1/5596 7116/1/7116 7114/1/7114 +f 5594/1/5594 7116/1/7116 5596/1/5596 +f 5593/1/5593 5592/1/5592 5594/1/5594 +f 6047/1/6047 5593/1/5593 6046/1/6046 +f 6048/1/6048 6047/1/6047 6046/1/6046 +f 6052/1/6052 6048/1/6048 6053/1/6053 +f 6057/1/6057 6053/1/6053 6056/1/6056 +f 6112/1/6112 6056/1/6056 6111/1/6111 +f 6113/1/6113 6111/1/6111 6108/1/6108 +f 6110/1/6110 6058/1/6058 6059/1/6059 +f 6064/1/6064 6063/1/6063 6065/1/6065 +f 6055/1/6055 6060/1/6060 6059/1/6059 +f 6063/1/6063 6061/1/6061 6062/1/6062 +f 6055/1/6055 6054/1/6054 6060/1/6060 +f 6049/1/6049 6043/1/6043 6054/1/6054 +f 6043/1/6043 5595/1/5595 6042/1/6042 +f 6061/1/6061 6044/1/6044 6062/1/6062 +f 6063/1/6063 6062/1/6062 6065/1/6065 +f 6064/1/6064 6065/1/6065 6067/1/6067 +f 6068/1/6068 6066/1/6066 6074/1/6074 +f 6074/1/6074 6045/1/6045 6075/1/6075 +f 6073/1/6073 6076/1/6076 6078/1/6078 +f 6077/1/6077 6073/1/6073 6078/1/6078 +f 6071/1/6071 6073/1/6073 6077/1/6077 +f 6072/1/6072 6067/1/6067 6071/1/6071 +f 6107/1/6107 6070/1/6070 6072/1/6072 +f 6108/1/6108 6069/1/6069 6107/1/6107 +f 6117/1/6117 6113/1/6113 6108/1/6108 +f 6602/1/6602 6117/1/6117 7054/1/7054 +f 7056/1/7056 6601/1/6601 6602/1/6602 +f 7058/1/7058 7057/1/7057 7056/1/7056 +f 7058/1/7058 7071/1/7071 7070/1/7070 +f 7073/1/7073 7071/1/7071 7077/1/7077 +f 7059/1/7059 7055/1/7055 7078/1/7078 +f 7079/1/7079 7080/1/7080 7077/1/7077 +f 7084/1/7084 7088/1/7088 7080/1/7080 +f 7083/1/7083 7055/1/7055 7082/1/7082 +f 7085/1/7085 7088/1/7088 7084/1/7084 +f 7092/1/7092 7088/1/7088 7089/1/7089 +f 7093/1/7093 7092/1/7092 7089/1/7089 +f 7090/1/7090 7094/1/7094 7089/1/7089 +f 7086/1/7086 7082/1/7082 7087/1/7087 +f 7095/1/7095 7094/1/7094 7090/1/7090 +f 7093/1/7093 7089/1/7089 7094/1/7094 +f 7112/1/7112 7092/1/7092 7093/1/7093 +f 6041/1/6041 7113/1/7113 7112/1/7112 +f 6042/1/6042 6041/1/6041 6040/1/6040 +f 6075/1/6075 6040/1/6040 6084/1/6084 +f 6082/1/6082 6084/1/6084 6085/1/6085 +f 6083/1/6083 6085/1/6085 6087/1/6087 +f 6088/1/6088 6087/1/6087 6092/1/6092 +f 6093/1/6093 6088/1/6088 6092/1/6092 +f 6094/1/6094 6086/1/6086 6093/1/6093 +f 6081/1/6081 6080/1/6080 6094/1/6094 +f 6105/1/6105 6079/1/6079 6081/1/6081 +f 6109/1/6109 6105/1/6105 6106/1/6106 +f 7052/1/7052 6106/1/6106 7053/1/7053 +f 6101/1/6101 6096/1/6096 6097/1/6097 +f 6097/1/6097 6095/1/6095 6099/1/6099 +f 7128/1/7128 6104/1/6104 6160/1/6160 +f 6099/1/6099 6102/1/6102 6103/1/6103 +f 6098/1/6098 6145/1/6145 6102/1/6102 +f 6104/1/6104 6148/1/6148 6154/1/6154 +f 6148/1/6148 6147/1/6147 6152/1/6152 +f 6091/1/6091 6146/1/6146 6145/1/6145 +f 6147/1/6147 6150/1/6150 6152/1/6152 +f 6090/1/6090 6149/1/6149 6146/1/6146 +f 6150/1/6150 6035/1/6035 6036/1/6036 +f 6089/1/6089 6038/1/6038 6149/1/6149 +f 6038/1/6038 6039/1/6039 6037/1/6037 +f 6039/1/6039 7111/1/7111 6037/1/6037 +f 7111/1/7111 7110/1/7110 7109/1/7109 +f 7109/1/7109 7097/1/7097 7099/1/7099 +f 6034/1/6034 7108/1/7108 6029/1/6029 +f 7099/1/7099 6161/1/6161 6032/1/6032 +f 6030/1/6030 6033/1/6033 6031/1/6031 +f 6029/1/6029 6030/1/6030 6027/1/6027 +f 6028/1/6028 6034/1/6034 6029/1/6029 +f 6035/1/6035 6028/1/6028 6036/1/6036 +f 6151/1/6151 6036/1/6036 6155/1/6155 +f 6158/1/6158 6155/1/6155 7173/1/7173 +f 7175/1/7175 7173/1/7173 7174/1/7174 +f 7175/1/7175 7174/1/7174 7134/1/7134 +f 7133/1/7133 7132/1/7132 7134/1/7134 +f 7130/1/7130 7132/1/7132 7133/1/7133 +f 7126/1/7126 7129/1/7129 7130/1/7130 +f 7124/1/7124 6100/1/6100 7126/1/7126 +f 7106/1/7106 7123/1/7123 7124/1/7124 +f 7105/1/7105 7123/1/7123 7106/1/7106 +f 7102/1/7102 7053/1/7053 7105/1/7105 +f 7098/1/7098 7087/1/7087 7102/1/7102 +f 7098/1/7098 7100/1/7100 7096/1/7096 +f 7099/1/7099 7100/1/7100 6161/1/6161 +f 7101/1/7101 7104/1/7104 7103/1/7103 +f 7107/1/7107 5981/1/5981 6161/1/6161 +f 5980/1/5980 5978/1/5978 5981/1/5981 +f 5982/1/5982 7104/1/7104 5974/1/5974 +f 5979/1/5979 5978/1/5978 5980/1/5980 +f 5985/1/5985 5978/1/5978 5977/1/5977 +f 5983/1/5983 5985/1/5985 5977/1/5977 +f 5975/1/5975 5984/1/5984 5977/1/5977 +f 5973/1/5973 5974/1/5974 5969/1/5969 +f 5976/1/5976 5984/1/5984 5975/1/5975 +f 5983/1/5983 5977/1/5977 5984/1/5984 +f 5989/1/5989 5985/1/5985 5983/1/5983 +f 6026/1/6026 5989/1/5989 6025/1/6025 +f 6156/1/6156 6026/1/6026 6025/1/6025 +f 6157/1/6157 6156/1/6156 6159/1/6159 +f 7172/1/7172 6159/1/6159 7171/1/7171 +f 7141/1/7141 7171/1/7171 7139/1/7139 +f 7136/1/7136 7139/1/7139 7140/1/7140 +f 7137/1/7137 7136/1/7136 7140/1/7140 +f 7138/1/7138 7135/1/7135 7137/1/7137 +f 7125/1/7125 7127/1/7127 7138/1/7138 +f 5972/1/5972 7125/1/7125 5968/1/5968 +f 7153/1/7153 7147/1/7147 7148/1/7148 +f 7148/1/7148 7143/1/7143 7146/1/7146 +f 7151/1/7151 7150/1/7150 7155/1/7155 +f 7143/1/7143 7145/1/7145 7146/1/7146 +f 7150/1/7150 7149/1/7149 7157/1/7157 +f 7142/1/7142 7144/1/7144 7145/1/7145 +f 7144/1/7144 7169/1/7169 7167/1/7167 +f 7167/1/7167 7170/1/7170 7168/1/7168 +f 7149/1/7149 7163/1/7163 7157/1/7157 +f 7150/1/7150 7157/1/7157 7155/1/7155 +f 7151/1/7151 7155/1/7155 7156/1/7156 +f 7152/1/7152 7151/1/7151 7156/1/7156 +f 7159/1/7159 7158/1/7158 7161/1/7161 +f 7191/1/7191 7181/1/7181 7187/1/7187 +f 7181/1/7181 7180/1/7180 7187/1/7187 +f 7187/1/7187 7180/1/7180 7183/1/7183 +f 7180/1/7180 7178/1/7178 7183/1/7183 +f 7179/1/7179 7178/1/7178 7180/1/7180 +f 7158/1/7158 7160/1/7160 7161/1/7161 +f 7181/1/7181 7179/1/7179 7180/1/7180 +f 7162/1/7162 7165/1/7165 7160/1/7160 +f 7179/1/7179 7177/1/7177 7178/1/7178 +f 7164/1/7164 7166/1/7166 7165/1/7165 +f 7168/1/7168 6021/1/6021 7166/1/7166 +f 6024/1/6024 6022/1/6022 6021/1/6021 +f 6022/1/6022 5987/1/5987 5993/1/5993 +f 5987/1/5987 5990/1/5990 5993/1/5993 +f 5990/1/5990 5986/1/5986 5991/1/5991 +f 6016/1/6016 5994/1/5994 5995/1/5995 +f 6020/1/6020 6016/1/6016 6017/1/6017 +f 6014/1/6014 6013/1/6013 6009/1/6009 +f 6017/1/6017 6015/1/6015 6018/1/6018 +f 6023/1/6023 6020/1/6020 6017/1/6017 +f 7177/1/7177 6023/1/6023 7178/1/7178 +f 7183/1/7183 7178/1/7178 7182/1/7182 +f 7187/1/7187 7183/1/7183 7188/1/7188 +f 7191/1/7191 7187/1/7187 7189/1/7189 +f 7202/1/7202 7189/1/7189 7196/1/7196 +f 7203/1/7203 7235/1/7235 7202/1/7202 +f 7204/1/7204 7152/1/7152 7203/1/7203 +f 7200/1/7200 7197/1/7197 7201/1/7201 +f 7197/1/7197 7190/1/7190 7195/1/7195 +f 7195/1/7195 7194/1/7194 7198/1/7198 +f 7221/1/7221 7217/1/7217 7210/1/7210 +f 7210/1/7210 7217/1/7217 7215/1/7215 +f 7217/1/7217 7218/1/7218 7215/1/7215 +f 7217/1/7217 7220/1/7220 7218/1/7218 +f 7192/1/7192 7193/1/7193 7194/1/7194 +f 7186/1/7186 7184/1/7184 7193/1/7193 +f 7184/1/7184 6162/1/6162 7185/1/7185 +f 7220/1/7220 7222/1/7222 7218/1/7218 +f 7215/1/7215 7218/1/7218 7219/1/7219 +f 7210/1/7210 7215/1/7215 7211/1/7211 +f 7208/1/7208 7210/1/7210 7211/1/7211 +f 7209/1/7209 7211/1/7211 7212/1/7212 +f 7208/1/7208 7211/1/7211 7209/1/7209 +f 7206/1/7206 7210/1/7210 7208/1/7208 +f 7205/1/7205 7199/1/7199 7206/1/7206 +f 5960/1/5960 7205/1/7205 5957/1/5957 +f 5961/1/5961 7204/1/7204 5960/1/5960 +f 5964/1/5964 7204/1/7204 5961/1/5961 +f 5966/1/5966 7154/1/7154 5964/1/5964 +f 5967/1/5967 5968/1/5968 5966/1/5966 +f 5970/1/5970 5969/1/5969 5967/1/5967 +f 5970/1/5970 5996/1/5996 5992/1/5992 +f 5991/1/5991 5996/1/5996 5997/1/5997 +f 5971/1/5971 5965/1/5965 5998/1/5998 +f 5999/1/5999 6001/1/6001 5997/1/5997 +f 6002/1/6002 6005/1/6005 6001/1/6001 +f 6000/1/6000 5965/1/5965 5963/1/5963 +f 6003/1/6003 6005/1/6005 6002/1/6002 +f 6009/1/6009 6005/1/6005 6008/1/6008 +f 6010/1/6010 6012/1/6012 6008/1/6008 +f 6004/1/6004 5963/1/5963 5962/1/5962 +f 6171/1/6171 6012/1/6012 6010/1/6010 +f 6011/1/6011 6008/1/6008 6012/1/6012 +f 6019/1/6019 6011/1/6011 6163/1/6163 +f 6164/1/6164 6167/1/6167 6168/1/6168 +f 6168/1/6168 6174/1/6174 6175/1/6175 +f 6178/1/6178 6177/1/6177 7302/1/7302 +f 6176/1/6176 6178/1/6178 7301/1/7301 +f 6165/1/6165 6169/1/6169 6176/1/6176 +f 6166/1/6166 6019/1/6019 6165/1/6165 +f 7185/1/7185 6166/1/6166 7224/1/7224 +f 7223/1/7223 7224/1/7224 7225/1/7225 +f 7233/1/7233 7225/1/7225 7232/1/7232 +f 7234/1/7234 7233/1/7233 7232/1/7232 +f 7216/1/7216 7234/1/7234 7214/1/7214 +f 7213/1/7213 7214/1/7214 6214/1/6214 +f 6215/1/6215 6217/1/6217 6210/1/6210 +f 6210/1/6210 7231/1/7231 6208/1/6208 +f 6204/1/6204 6206/1/6206 5860/1/5860 +f 6208/1/6208 6209/1/6209 6205/1/6205 +f 7227/1/7227 7226/1/7226 6209/1/6209 +f 7226/1/7226 6180/1/6180 6181/1/6181 +f 6206/1/6206 5861/1/5861 5860/1/5860 +f 6204/1/6204 5860/1/5860 6202/1/6202 +f 6200/1/6200 6204/1/6204 6202/1/6202 +f 6196/1/6196 6203/1/6203 6200/1/6200 +f 6211/1/6211 6207/1/6207 6196/1/6196 +f 6194/1/6194 6212/1/6212 6211/1/6211 +f 6193/1/6193 6213/1/6213 6194/1/6194 +f 6216/1/6216 6214/1/6214 6193/1/6193 +f 5954/1/5954 7207/1/7207 6216/1/6216 +f 5956/1/5956 5954/1/5954 5952/1/5952 +f 5958/1/5958 5959/1/5959 5956/1/5956 +f 6173/1/6173 5962/1/5962 5958/1/5958 +f 6173/1/6173 6172/1/6172 6170/1/6170 +f 6168/1/6168 6172/1/6172 6174/1/6174 +f 6182/1/6182 5955/1/5955 6183/1/6183 +f 6184/1/6184 6179/1/6179 6174/1/6174 +f 6186/1/6186 7266/1/7266 6179/1/6179 +f 6185/1/6185 5955/1/5955 5953/1/5953 +f 7265/1/7265 7266/1/7266 6186/1/6186 +f 7270/1/7270 7266/1/7266 7267/1/7267 +f 7269/1/7269 7270/1/7270 7267/1/7267 +f 7269/1/7269 7267/1/7267 7268/1/7268 +f 7262/1/7262 7268/1/7268 7267/1/7267 +f 7261/1/7261 5953/1/5953 7260/1/7260 +f 7263/1/7263 7268/1/7268 7262/1/7262 +f 7269/1/7269 7268/1/7268 7272/1/7272 +f 7300/1/7300 7270/1/7270 7269/1/7269 +f 6181/1/6181 7300/1/7300 7228/1/7228 +f 7299/1/7299 7276/1/7276 7275/1/7275 +f 7275/1/7275 7274/1/7274 7279/1/7279 +f 7297/1/7297 7283/1/7283 7284/1/7284 +f 7295/1/7295 7278/1/7278 7297/1/7297 +f 7230/1/7230 7298/1/7298 7295/1/7295 +f 7229/1/7229 7298/1/7298 7230/1/7230 +f 5856/1/5856 7228/1/7228 7229/1/7229 +f 5857/1/5857 5856/1/5856 5855/1/5855 +f 5858/1/5858 5857/1/5857 5855/1/5855 +f 5863/1/5863 5862/1/5862 5858/1/5858 +f 6199/1/6199 5863/1/5863 6201/1/6201 +f 6198/1/6198 6199/1/6199 6201/1/6201 +f 6192/1/6192 6197/1/6197 6198/1/6198 +f 6191/1/6191 6197/1/6197 6192/1/6192 +f 6190/1/6190 6195/1/6195 6191/1/6191 +f 5951/1/5951 6190/1/6190 5949/1/5949 +f 5950/1/5950 5949/1/5949 5948/1/5948 +f 5947/1/5947 6187/1/6187 5888/1/5888 +f 5888/1/5888 6188/1/6188 6189/1/6189 +f 6189/1/6189 5868/1/5868 5867/1/5867 +f 5867/1/5867 5864/1/5864 5866/1/5866 +f 5866/1/5866 5859/1/5859 5865/1/5865 +f 5859/1/5859 5851/1/5851 5865/1/5865 +f 5851/1/5851 5852/1/5852 5850/1/5850 +f 5872/1/5872 5853/1/5853 5873/1/5873 +f 5874/1/5874 5872/1/5872 5873/1/5873 +f 5870/1/5870 5871/1/5871 5874/1/5874 +f 5885/1/5885 5869/1/5869 5870/1/5870 +f 5886/1/5886 5887/1/5887 5885/1/5885 +f 5889/1/5889 5886/1/5886 5890/1/5890 +f 5945/1/5945 5889/1/5889 5890/1/5890 +f 5884/1/5884 5880/1/5880 5881/1/5881 +f 5881/1/5881 5875/1/5875 5878/1/5878 +f 5878/1/5878 5876/1/5876 5879/1/5879 +f 5879/1/5879 5877/1/5877 5900/1/5900 +f 5900/1/5900 5854/1/5854 5944/1/5944 +f 5897/1/5897 5901/1/5901 5898/1/5898 +f 5896/1/5896 5897/1/5897 5898/1/5898 +f 5892/1/5892 5882/1/5882 5896/1/5896 +f 5891/1/5891 5883/1/5883 5892/1/5892 +f 5890/1/5890 5891/1/5891 5895/1/5895 +f 7252/1/7252 5890/1/5890 5895/1/5895 +f 5945/1/5945 5890/1/5890 7252/1/7252 +f 5946/1/5946 5889/1/5889 5945/1/5945 +f 7255/1/7255 5948/1/5948 5946/1/5946 +f 7264/1/7264 7260/1/7260 7255/1/7255 +f 7264/1/7264 7273/1/7273 7271/1/7271 +f 7274/1/7274 7273/1/7273 7277/1/7277 +f 7256/1/7256 7254/1/7254 7257/1/7257 +f 7258/1/7258 7280/1/7280 7277/1/7277 +f 7281/1/7281 7282/1/7282 7280/1/7280 +f 7259/1/7259 7254/1/7254 7253/1/7253 +f 7285/1/7285 7282/1/7282 7281/1/7281 +f 7289/1/7289 7282/1/7282 7287/1/7287 +f 7288/1/7288 7289/1/7289 7287/1/7287 +f 7243/1/7243 7237/1/7237 7287/1/7287 +f 7286/1/7286 7253/1/7253 7244/1/7244 +f 7238/1/7238 7237/1/7237 7243/1/7243 +f 7288/1/7288 7287/1/7287 7237/1/7237 +f 7292/1/7292 7289/1/7289 7288/1/7288 +f 5849/1/5849 7296/1/7296 7292/1/7292 +f 5850/1/5850 5849/1/5849 5848/1/5848 +f 5944/1/5944 5848/1/5848 5909/1/5909 +f 5902/1/5902 5909/1/5909 5906/1/5906 +f 5903/1/5903 5902/1/5902 5906/1/5906 +f 5899/1/5899 5903/1/5903 5905/1/5905 +f 5904/1/5904 5899/1/5899 5905/1/5905 +f 5894/1/5894 5893/1/5893 5904/1/5904 +f 5914/1/5914 5908/1/5908 5913/1/5913 +f 5913/1/5913 5907/1/5907 5912/1/5912 +f 5927/1/5927 5928/1/5928 5929/1/5929 +f 5907/1/5907 5911/1/5911 5912/1/5912 +f 5911/1/5911 5910/1/5910 5931/1/5931 +f 5910/1/5910 5846/1/5846 5931/1/5931 +f 5846/1/5846 5847/1/5847 5845/1/5845 +f 5847/1/5847 7290/1/7290 5845/1/5845 +f 7290/1/7290 7291/1/7291 7293/1/7293 +f 7293/1/7293 7239/1/7239 7242/1/7242 +f 5843/1/5843 7294/1/7294 5844/1/5844 +f 7242/1/7242 7247/1/7247 6220/1/6220 +f 6219/1/6219 6225/1/6225 6223/1/6223 +f 5844/1/5844 6219/1/6219 6218/1/6218 +f 5841/1/5841 5843/1/5843 5844/1/5844 +f 5842/1/5842 5841/1/5841 5839/1/5839 +f 5932/1/5932 5842/1/5842 5839/1/5839 +f 5928/1/5928 5932/1/5932 5929/1/5929 +f 5927/1/5927 5929/1/5929 5930/1/5930 +f 5917/1/5917 5927/1/5927 5922/1/5922 +f 5918/1/5918 5917/1/5917 5922/1/5922 +f 5916/1/5916 5915/1/5915 5918/1/5918 +f 5920/1/5920 5894/1/5894 5916/1/5916 +f 7250/1/7250 5920/1/5920 7251/1/7251 +f 7246/1/7246 7250/1/7250 7251/1/7251 +f 7240/1/7240 7244/1/7244 7246/1/7246 +f 7240/1/7240 7241/1/7241 7236/1/7236 +f 7242/1/7242 7241/1/7241 7247/1/7247 +f 7245/1/7245 7249/1/7249 7248/1/7248 +f 7417/1/7417 6226/1/6226 7247/1/7247 +f 7418/1/7418 7249/1/7249 5773/1/5773 +f 6228/1/6228 6224/1/6224 6226/1/6226 +f 6221/1/6221 6224/1/6224 6222/1/6222 +f 5771/1/5771 5774/1/5774 6222/1/6222 +f 5771/1/5771 5766/1/5766 5768/1/5768 +f 6227/1/6227 5773/1/5773 5772/1/5772 +f 5766/1/5766 7305/1/7305 5764/1/5764 +f 5766/1/5766 5764/1/5764 5763/1/5763 +f 7249/1/7249 7303/1/7303 5773/1/5773 +f 7303/1/7303 5921/1/5921 7304/1/7304 +f 5921/1/5921 5919/1/5919 7304/1/7304 +f 5919/1/5919 5923/1/5923 5924/1/5924 +f 5924/1/5924 5925/1/5925 5926/1/5926 +f 5925/1/5925 5936/1/5936 5926/1/5926 +f 5936/1/5936 5934/1/5934 5935/1/5935 +f 5935/1/5935 5933/1/5933 5937/1/5937 +f 5941/1/5941 5939/1/5939 7369/1/7369 +f 5942/1/5942 5941/1/5941 7369/1/7369 +f 7309/1/7309 5942/1/5942 7310/1/7310 +f 7306/1/7306 7310/1/7310 7307/1/7307 +f 7312/1/7312 7311/1/7311 7313/1/7313 +f 7313/1/7313 7367/1/7367 7364/1/7364 +f 7367/1/7367 7368/1/7368 7364/1/7364 +f 7365/1/7365 5943/1/5943 7366/1/7366 +f 5940/1/5940 5938/1/5938 7368/1/7368 +f 5937/1/5937 5838/1/5838 5938/1/5938 +f 5838/1/5838 5840/1/5840 5788/1/5788 +f 5788/1/5788 5789/1/5789 5784/1/5784 +f 5784/1/5784 5781/1/5781 5780/1/5780 +f 5780/1/5780 5776/1/5776 5778/1/5778 +f 5799/1/5799 5828/1/5828 5827/1/5827 +f 5785/1/5785 5779/1/5779 5799/1/5799 +f 5787/1/5787 5783/1/5783 5785/1/5785 +f 5791/1/5791 5786/1/5786 5787/1/5787 +f 5790/1/5790 5786/1/5786 5791/1/5791 +f 5943/1/5943 5790/1/5790 7370/1/7370 +f 7366/1/7366 5943/1/5943 7370/1/7370 +f 7363/1/7363 7365/1/7365 7366/1/7366 +f 7318/1/7318 7363/1/7363 7362/1/7362 +f 7316/1/7316 7315/1/7315 7318/1/7318 +f 7317/1/7317 7314/1/7314 7316/1/7316 +f 7308/1/7308 7307/1/7307 7317/1/7317 +f 7305/1/7305 7308/1/7308 5764/1/5764 +f 7322/1/7322 7320/1/7320 7321/1/7321 +f 7321/1/7321 7319/1/7319 7360/1/7360 +f 7361/1/7361 7355/1/7355 7354/1/7354 +f 7319/1/7319 7358/1/7358 7360/1/7360 +f 7358/1/7358 7359/1/7359 7356/1/7356 +f 7356/1/7356 7357/1/7357 7352/1/7352 +f 7352/1/7352 7351/1/7351 7350/1/7350 +f 7353/1/7353 7349/1/7349 7348/1/7348 +f 7355/1/7355 7353/1/7353 7354/1/7354 +f 7361/1/7361 7354/1/7354 7332/1/7332 +f 7324/1/7324 7361/1/7361 7332/1/7332 +f 7329/1/7329 7333/1/7333 7334/1/7334 +f 7336/1/7336 7339/1/7339 7343/1/7343 +f 7334/1/7334 7338/1/7338 7335/1/7335 +f 7339/1/7339 7342/1/7342 7344/1/7344 +f 7340/1/7340 7341/1/7341 7338/1/7338 +f 7346/1/7346 7347/1/7347 7341/1/7341 +f 7350/1/7350 5792/1/5792 7347/1/7347 +f 7342/1/7342 7345/1/7345 7344/1/7344 +f 7339/1/7339 7344/1/7344 7343/1/7343 +f 7336/1/7336 7343/1/7343 7379/1/7379 +f 7337/1/7337 7336/1/7336 7379/1/7379 +f 7331/1/7331 7336/1/7336 7337/1/7337 +f 7326/1/7326 7330/1/7330 7331/1/7331 +f 7325/1/7325 7324/1/7324 7326/1/7326 +f 5760/1/5760 7323/1/7323 7325/1/7325 +f 5762/1/5762 7323/1/7323 5760/1/5760 +f 5763/1/5763 5764/1/5764 5762/1/5762 +f 5765/1/5765 5766/1/5766 5763/1/5763 +f 5765/1/5765 5769/1/5769 5770/1/5770 +f 5776/1/5776 5769/1/5769 5777/1/5777 +f 5767/1/5767 5761/1/5761 5831/1/5831 +f 5830/1/5830 5826/1/5826 5777/1/5777 +f 5825/1/5825 5823/1/5823 5826/1/5826 +f 5829/1/5829 5761/1/5761 5759/1/5759 +f 5824/1/5824 5823/1/5823 5825/1/5825 +f 5800/1/5800 5823/1/5823 5822/1/5822 +f 5801/1/5801 5800/1/5800 5822/1/5822 +f 5756/1/5756 5813/1/5813 5822/1/5822 +f 5758/1/5758 5759/1/5759 5754/1/5754 +f 5757/1/5757 5813/1/5813 5756/1/5756 +f 5801/1/5801 5822/1/5822 5813/1/5813 +f 5798/1/5798 5800/1/5800 5801/1/5801 +f 5793/1/5793 5797/1/5797 5798/1/5798 +f 5792/1/5792 5793/1/5793 5794/1/5794 +f 7371/1/7371 5794/1/5794 7372/1/7372 +f 7373/1/7373 7372/1/7372 7374/1/7374 +f 7375/1/7375 7374/1/7374 7378/1/7378 +f 7380/1/7380 7378/1/7378 7382/1/7382 +f 7383/1/7383 7380/1/7380 7382/1/7382 +f 7384/1/7384 7381/1/7381 7383/1/7383 +f 7328/1/7328 7327/1/7327 7384/1/7384 +f 5755/1/5755 7328/1/7328 5751/1/5751 +f 5749/1/5749 7386/1/7386 7390/1/7390 +f 7390/1/7390 7385/1/7385 7389/1/7389 +f 7391/1/7391 7393/1/7393 7394/1/7394 +f 7385/1/7385 7388/1/7388 7389/1/7389 +f 7393/1/7393 7396/1/7396 7397/1/7397 +f 7387/1/7387 7416/1/7416 7388/1/7388 +f 7416/1/7416 7377/1/7377 7415/1/7415 +f 7415/1/7415 7376/1/7376 7414/1/7414 +f 7396/1/7396 7399/1/7399 7397/1/7397 +f 7393/1/7393 7397/1/7397 7394/1/7394 +f 7391/1/7391 7394/1/7394 7395/1/7395 +f 7392/1/7392 7391/1/7391 7395/1/7395 +f 5746/1/5746 7392/1/7392 5743/1/5743 +f 5745/1/5745 5746/1/5746 5743/1/5743 +f 6232/1/6232 6236/1/6236 6237/1/6237 +f 6236/1/6236 6242/1/6242 6237/1/6237 +f 6237/1/6237 6242/1/6242 6238/1/6238 +f 6237/1/6237 6238/1/6238 6233/1/6233 +f 6233/1/6233 6238/1/6238 6239/1/6239 +f 6242/1/6242 6243/1/6243 6238/1/6238 +f 6243/1/6243 6244/1/6244 6238/1/6238 +f 6238/1/6238 6244/1/6244 6241/1/6241 +f 6244/1/6244 6248/1/6248 6241/1/6241 +f 6244/1/6244 6249/1/6249 6248/1/6248 +f 6243/1/6243 6249/1/6249 6244/1/6244 +f 6243/1/6243 7410/1/7410 6249/1/6249 +f 7410/1/7410 7409/1/7409 6249/1/6249 +f 6249/1/6249 7409/1/7409 6250/1/6250 +f 7408/1/7408 7409/1/7409 7410/1/7410 +f 6253/1/6253 7410/1/7410 6243/1/6243 +f 6252/1/6252 6243/1/6243 6242/1/6242 +f 6235/1/6235 7404/1/7404 6251/1/6251 +f 6236/1/6236 6252/1/6252 6242/1/6242 +f 7404/1/7404 7403/1/7403 6251/1/6251 +f 6252/1/6252 6253/1/6253 6243/1/6243 +f 7398/1/7398 7402/1/7402 7403/1/7403 +f 6253/1/6253 7408/1/7408 7410/1/7410 +f 7401/1/7401 7405/1/7405 7402/1/7402 +f 7408/1/7408 7407/1/7407 7409/1/7409 +f 7400/1/7400 7406/1/7406 7405/1/7405 +f 7407/1/7407 7411/1/7411 7409/1/7409 +f 7409/1/7409 7411/1/7411 7412/1/7412 +f 7414/1/7414 7413/1/7413 7406/1/7406 +f 7411/1/7411 5807/1/5807 5821/1/5821 +f 5807/1/5807 5809/1/5809 5821/1/5821 +f 5821/1/5821 5809/1/5809 5820/1/5820 +f 5796/1/5796 5803/1/5803 7413/1/7413 +f 5807/1/5807 5806/1/5806 5809/1/5809 +f 5795/1/5795 5802/1/5802 5803/1/5803 +f 5802/1/5802 5804/1/5804 5805/1/5805 +f 5805/1/5805 5810/1/5810 5811/1/5811 +f 5806/1/5806 5808/1/5808 5809/1/5809 +f 5811/1/5811 5815/1/5815 5814/1/5814 +f 5818/1/5818 5817/1/5817 6761/1/6761 +f 5809/1/5809 5818/1/5818 5820/1/5820 +f 5821/1/5821 5820/1/5820 6758/1/6758 +f 7411/1/7411 5821/1/5821 7412/1/7412 +f 7409/1/7409 7412/1/7412 6250/1/6250 +f 6249/1/6249 6250/1/6250 6248/1/6248 +f 6241/1/6241 6248/1/6248 6247/1/6247 +f 6238/1/6238 6241/1/6241 6239/1/6239 +f 6233/1/6233 6239/1/6239 6234/1/6234 +f 6232/1/6232 6237/1/6237 6233/1/6233 +f 5743/1/5743 6232/1/6232 5740/1/5740 +f 5742/1/5742 5743/1/5743 5740/1/5740 +f 5745/1/5745 5743/1/5743 5742/1/5742 +f 5748/1/5748 5746/1/5746 5745/1/5745 +f 5750/1/5750 5751/1/5751 5748/1/5748 +f 5752/1/5752 5754/1/5754 5750/1/5750 +f 5752/1/5752 5816/1/5816 5812/1/5812 +f 5811/1/5811 5816/1/5816 5815/1/5815 +f 5753/1/5753 5747/1/5747 5832/1/5832 +f 5833/1/5833 5819/1/5819 5815/1/5815 +f 5835/1/5835 5837/1/5837 5819/1/5819 +f 5834/1/5834 5747/1/5747 5744/1/5744 +f 5836/1/5836 5837/1/5837 5835/1/5835 +f 6759/1/6759 5837/1/5837 6754/1/6754 +f 6752/1/6752 6751/1/6751 6754/1/6754 +f 6753/1/6753 5744/1/5744 5741/1/5741 +f 6744/1/6744 6751/1/6751 6752/1/6752 +f 6755/1/6755 6751/1/6751 6750/1/6750 +f 6757/1/6757 6750/1/6750 6762/1/6762 +f 6756/1/6756 6757/1/6757 6762/1/6762 +f 6760/1/6760 6756/1/6756 6763/1/6763 +f 5643/1/5643 6760/1/6760 6763/1/6763 +f 5647/1/5647 5643/1/5643 5644/1/5644 +f 5648/1/5648 5647/1/5647 5644/1/5644 +f 6245/1/6245 5648/1/5648 5649/1/5649 +f 6245/1/6245 5649/1/5649 6246/1/6246 +f 6230/1/6230 6240/1/6240 6246/1/6246 +f 6229/1/6229 6230/1/6230 5674/1/5674 +f 6231/1/6231 5653/1/5653 5654/1/5654 +f 5657/1/5657 5652/1/5652 5656/1/5656 +f 5653/1/5653 5650/1/5650 5654/1/5654 +f 5650/1/5650 5645/1/5645 5646/1/5646 +f 5646/1/5646 5642/1/5642 5638/1/5638 +f 5652/1/5652 5651/1/5651 5655/1/5655 +f 5652/1/5652 5655/1/5655 5656/1/5656 +f 5671/1/5671 5657/1/5657 5656/1/5656 +f 5672/1/5672 5673/1/5673 5671/1/5671 +f 5675/1/5675 5674/1/5674 5672/1/5672 +f 5737/1/5737 5738/1/5738 5675/1/5675 +f 6741/1/6741 5739/1/5739 5737/1/5737 +f 6742/1/6742 5741/1/5741 6741/1/6741 +f 6742/1/6742 6745/1/6745 6746/1/6746 +f 6749/1/6749 6745/1/6745 6748/1/6748 +f 6743/1/6743 6740/1/6740 6747/1/6747 +f 6775/1/6775 6774/1/6774 6748/1/6748 +f 6776/1/6776 6777/1/6777 6774/1/6774 +f 6778/1/6778 6740/1/6740 6739/1/6739 +f 6781/1/6781 6777/1/6777 6776/1/6776 +f 6773/1/6773 6777/1/6777 6780/1/6780 +f 6779/1/6779 6739/1/6739 6782/1/6782 +f 6798/1/6798 6796/1/6796 6780/1/6780 +f 6799/1/6799 6780/1/6780 6796/1/6796 +f 6799/1/6799 6773/1/6773 6780/1/6780 +f 6771/1/6771 6770/1/6770 6773/1/6773 +f 6767/1/6767 6770/1/6770 6771/1/6771 +f 6766/1/6766 6764/1/6764 6767/1/6767 +f 5639/1/5639 6766/1/6766 5637/1/5637 +f 5638/1/5638 5637/1/5637 5640/1/5640 +f 5658/1/5658 5640/1/5640 5659/1/5659 +f 5661/1/5661 5659/1/5659 5663/1/5663 +f 5662/1/5662 5660/1/5660 5661/1/5661 +f 5666/1/5666 5662/1/5662 5667/1/5667 +f 5670/1/5670 5666/1/5666 5667/1/5667 +f 5668/1/5668 5665/1/5665 5669/1/5669 +f 5665/1/5665 5664/1/5664 5669/1/5669 +f 5664/1/5664 5686/1/5686 5683/1/5683 +f 5686/1/5686 5641/1/5641 5735/1/5735 +f 5684/1/5684 5687/1/5687 5688/1/5688 +f 5682/1/5682 5684/1/5684 5685/1/5685 +f 5679/1/5679 5682/1/5682 5685/1/5685 +f 5677/1/5677 5678/1/5678 5679/1/5679 +f 5676/1/5676 5670/1/5670 5677/1/5677 +f 5736/1/5736 5676/1/5676 6738/1/6738 +f 6782/1/6782 6738/1/6738 6737/1/6737 +f 6795/1/6795 6782/1/6782 6784/1/6784 +f 6784/1/6784 6792/1/6792 6794/1/6794 +f 6787/1/6787 6790/1/6790 6786/1/6786 +f 6793/1/6793 6794/1/6794 6792/1/6792 +f 6800/1/6800 6797/1/6797 6793/1/6793 +f 6802/1/6802 6800/1/6800 6804/1/6804 +f 5634/1/5634 6803/1/6803 6802/1/6802 +f 5635/1/5635 5636/1/5636 5634/1/5634 +f 5735/1/5735 5635/1/5635 5695/1/5695 +f 5692/1/5692 5695/1/5695 5696/1/5696 +f 5689/1/5689 5692/1/5692 5693/1/5693 +f 5694/1/5694 5693/1/5693 5699/1/5699 +f 5700/1/5700 5694/1/5694 5699/1/5699 +f 5680/1/5680 5690/1/5690 5700/1/5700 +f 5681/1/5681 5680/1/5680 5706/1/5706 +f 5702/1/5702 5701/1/5701 5704/1/5704 +f 5709/1/5709 5712/1/5712 5713/1/5713 +f 5712/1/5712 5723/1/5723 5713/1/5713 +f 5704/1/5704 5711/1/5711 5708/1/5708 +f 5703/1/5703 5716/1/5716 5711/1/5711 +f 5712/1/5712 5719/1/5719 5723/1/5723 +f 5719/1/5719 5722/1/5722 5723/1/5723 +f 5723/1/5723 5722/1/5722 5724/1/5724 +f 5723/1/5723 5724/1/5724 5725/1/5725 +f 5719/1/5719 5718/1/5718 5722/1/5722 +f 5698/1/5698 5717/1/5717 5716/1/5716 +f 5718/1/5718 5721/1/5721 5722/1/5722 +f 5722/1/5722 5721/1/5721 5726/1/5726 +f 5697/1/5697 5720/1/5720 5717/1/5717 +f 5720/1/5720 5633/1/5633 5631/1/5631 +f 5631/1/5631 5632/1/5632 5630/1/5630 +f 5721/1/5721 5629/1/5629 5726/1/5726 +f 5722/1/5722 5726/1/5726 5724/1/5724 +f 5725/1/5725 5724/1/5724 5728/1/5728 +f 5713/1/5713 5723/1/5723 5725/1/5725 +f 5709/1/5709 5713/1/5713 5714/1/5714 +f 5710/1/5710 5709/1/5709 5714/1/5714 +f 6807/1/6807 5715/1/5715 5731/1/5731 +f 5715/1/5715 5729/1/5729 5731/1/5731 +f 5729/1/5729 5730/1/5730 6915/1/6915 +f 5730/1/5730 5727/1/5727 5732/1/5732 +f 6914/1/6914 5733/1/5733 6913/1/6913 +f 6811/1/6811 6914/1/6914 6812/1/6812 +f 6809/1/6809 6811/1/6811 6812/1/6812 +f 6735/1/6735 6808/1/6808 6809/1/6809 +f 6732/1/6732 5710/1/5710 6735/1/6735 +f 5707/1/5707 5705/1/5705 6732/1/6732 +f 6736/1/6736 5706/1/5706 5707/1/5707 +f 6783/1/6783 6736/1/6736 6785/1/6785 +f 6788/1/6788 6785/1/6785 6789/1/6789 +f 6789/1/6789 6324/1/6324 6788/1/6788 +f 6323/1/6323 6324/1/6324 6320/1/6320 +f 6806/1/6806 6790/1/6790 6323/1/6323 +f 6322/1/6322 6805/1/6805 6806/1/6806 +f 5630/1/5630 6322/1/6322 5628/1/5628 +f 6318/1/6318 6319/1/6319 6316/1/6316 +f 5624/1/5624 6315/1/6315 6256/1/6256 +f 5626/1/5626 5628/1/5628 5624/1/5624 +f 5732/1/5732 5626/1/5626 5734/1/5734 +f 6912/1/6912 5734/1/5734 6911/1/6911 +f 6822/1/6822 6912/1/6912 6823/1/6823 +f 6820/1/6820 6823/1/6823 6824/1/6824 +f 6816/1/6816 6820/1/6820 6821/1/6821 +f 6814/1/6814 6813/1/6813 6816/1/6816 +f 6733/1/6733 6810/1/6810 6814/1/6814 +f 6731/1/6731 6733/1/6733 6330/1/6330 +f 6332/1/6332 6734/1/6734 6731/1/6731 +f 6791/1/6791 6332/1/6332 6356/1/6356 +f 6356/1/6356 6321/1/6321 6791/1/6791 +f 6316/1/6316 6321/1/6321 6317/1/6317 +f 6313/1/6313 6317/1/6317 6314/1/6314 +f 6329/1/6329 6328/1/6328 6326/1/6326 +f 6311/1/6311 6314/1/6314 6325/1/6325 +f 6307/1/6307 6311/1/6311 6312/1/6312 +f 6307/1/6307 6312/1/6312 6300/1/6300 +f 6333/1/6333 6300/1/6300 6312/1/6312 +f 6327/1/6327 6328/1/6328 6331/1/6331 +f 6334/1/6334 6300/1/6300 6333/1/6333 +f 6307/1/6307 6300/1/6300 6303/1/6303 +f 6306/1/6306 6307/1/6307 6303/1/6303 +f 6257/1/6257 6308/1/6308 6306/1/6306 +f 5625/1/5625 6257/1/6257 6254/1/6254 +f 5627/1/5627 5625/1/5625 6254/1/6254 +f 6910/1/6910 5623/1/5623 5627/1/5627 +f 6830/1/6830 6910/1/6910 6829/1/6829 +f 6828/1/6828 6829/1/6829 6831/1/6831 +f 6825/1/6825 6828/1/6828 6827/1/6827 +f 6826/1/6826 6827/1/6827 6834/1/6834 +f 6833/1/6833 6832/1/6832 6835/1/6835 +f 6847/1/6847 6844/1/6844 6846/1/6846 +f 6835/1/6835 6841/1/6841 6842/1/6842 +f 6838/1/6838 6840/1/6840 6841/1/6841 +f 6839/1/6839 6255/1/6255 6840/1/6840 +f 6844/1/6844 6843/1/6843 6846/1/6846 +f 6851/1/6851 6852/1/6852 6853/1/6853 +f 6847/1/6847 6846/1/6846 6851/1/6851 +f 6848/1/6848 6847/1/6847 6849/1/6849 +f 6857/1/6857 6848/1/6848 6849/1/6849 +f 6857/1/6857 6849/1/6849 6854/1/6854 +f 6909/1/6909 6848/1/6848 6857/1/6857 +f 6837/1/6837 6836/1/6836 6909/1/6909 +f 6907/1/6907 6834/1/6834 6837/1/6837 +f 6906/1/6906 6817/1/6817 6907/1/6907 +f 6335/1/6335 6815/1/6815 6906/1/6906 +f 6331/1/6331 6335/1/6335 6298/1/6298 +f 6301/1/6301 6298/1/6298 6297/1/6297 +f 6297/1/6297 6295/1/6295 6301/1/6301 +f 6299/1/6299 6295/1/6295 6294/1/6294 +f 6302/1/6302 6299/1/6299 6294/1/6294 +f 6258/1/6258 6302/1/6302 6304/1/6304 +f 6259/1/6259 6304/1/6304 6305/1/6305 +f 6255/1/6255 6259/1/6259 6260/1/6260 +f 6845/1/6845 6260/1/6260 6896/1/6896 +f 6898/1/6898 6896/1/6896 6899/1/6899 +f 6861/1/6861 6899/1/6899 6901/1/6901 +f 6861/1/6861 6901/1/6901 6903/1/6903 +f 6862/1/6862 6861/1/6861 6903/1/6903 +f 6856/1/6856 6861/1/6861 6862/1/6862 +f 6855/1/6855 6850/1/6850 6856/1/6856 +f 6858/1/6858 6855/1/6855 6860/1/6860 +f 6867/1/6867 6908/1/6908 6858/1/6858 +f 6336/1/6336 6867/1/6867 6337/1/6337 +f 6293/1/6293 6336/1/6336 6337/1/6337 +f 6296/1/6296 6293/1/6293 6292/1/6292 +f 6292/1/6292 6291/1/6291 6296/1/6296 +f 6290/1/6290 6291/1/6291 6288/1/6288 +f 6287/1/6287 6288/1/6288 6282/1/6282 +f 6289/1/6289 6284/1/6284 6286/1/6286 +f 6278/1/6278 6282/1/6282 6281/1/6281 +f 6272/1/6272 6278/1/6278 6277/1/6277 +f 6267/1/6267 6272/1/6272 6269/1/6269 +f 6266/1/6266 6357/1/6357 6267/1/6267 +f 6261/1/6261 6266/1/6266 6263/1/6263 +f 6262/1/6262 6261/1/6261 6263/1/6263 +f 6897/1/6897 6262/1/6262 6902/1/6902 +f 6900/1/6900 6902/1/6902 6879/1/6879 +f 6878/1/6878 6900/1/6900 6879/1/6879 +f 6877/1/6877 6878/1/6878 6873/1/6873 +f 6872/1/6872 6877/1/6877 6873/1/6873 +f 6876/1/6876 6880/1/6880 6881/1/6881 +f 6881/1/6881 6880/1/6880 6884/1/6884 +f 6884/1/6884 6885/1/6885 6886/1/6886 +f 6882/1/6882 6887/1/6887 6888/1/6888 +f 6883/1/6883 6882/1/6882 6888/1/6888 +f 6875/1/6875 6882/1/6882 6883/1/6883 +f 6870/1/6870 6874/1/6874 6875/1/6875 +f 6869/1/6869 6874/1/6874 6870/1/6870 +f 6872/1/6872 6873/1/6873 6869/1/6869 +f 6863/1/6863 6877/1/6877 6872/1/6872 +f 6864/1/6864 6859/1/6859 6863/1/6863 +f 6865/1/6865 6864/1/6864 6343/1/6343 +f 6338/1/6338 6865/1/6865 6343/1/6343 +f 6284/1/6284 6338/1/6338 6285/1/6285 +f 6280/1/6280 6285/1/6285 6279/1/6279 +f 6355/1/6355 6274/1/6274 6279/1/6279 +f 6271/1/6271 6274/1/6274 6273/1/6273 +f 6271/1/6271 6273/1/6273 6270/1/6270 +f 6268/1/6268 6270/1/6270 5393/1/5393 +f 6265/1/6265 6264/1/6264 6268/1/6268 +f 6895/1/6895 6265/1/6265 6891/1/6891 +f 6886/1/6886 6891/1/6891 6889/1/6889 +f 6890/1/6890 6889/1/6889 6894/1/6894 +f 6546/1/6546 6894/1/6894 6457/1/6457 +f 6904/1/6904 6546/1/6546 6545/1/6545 +f 6541/1/6541 6545/1/6545 6542/1/6542 +f 6540/1/6540 6905/1/6905 6541/1/6541 +f 6868/1/6868 6871/1/6871 6540/1/6540 +f 6341/1/6341 6866/1/6866 6868/1/6868 +f 6339/1/6339 6341/1/6341 6342/1/6342 +f 6340/1/6340 6339/1/6339 6342/1/6342 +f 6354/1/6354 6340/1/6340 6352/1/6352 +f 6352/1/6352 6276/1/6276 6354/1/6354 +f 6275/1/6275 6276/1/6276 5319/1/5319 +f 6353/1/6353 6347/1/6347 6351/1/6351 +f 5312/1/5312 5318/1/5318 5319/1/5319 +f 5314/1/5314 5317/1/5317 5313/1/5313 +f 5320/1/5320 5321/1/5321 5318/1/5318 +f 5324/1/5324 5320/1/5320 5322/1/5322 +f 5331/1/5331 5321/1/5321 5320/1/5320 +f 5392/1/5392 5331/1/5331 5329/1/5329 +f 6892/1/6892 5392/1/5392 5329/1/5329 +f 6893/1/6893 6892/1/6892 6445/1/6445 +f 6455/1/6455 6445/1/6445 6454/1/6454 +f 6456/1/6456 6455/1/6455 6454/1/6454 +f 6543/1/6543 6456/1/6456 6544/1/6544 +f 6539/1/6539 6544/1/6544 6462/1/6462 +f 6538/1/6538 6539/1/6539 6462/1/6462 +f 6346/1/6346 6537/1/6537 6538/1/6538 +f 6345/1/6345 6344/1/6344 6346/1/6346 +f 6347/1/6347 6345/1/6345 5309/1/5309 +f 5313/1/5313 5309/1/5309 5314/1/5314 +f 5316/1/5316 5317/1/5317 5314/1/5314 +f 5323/1/5323 5316/1/5316 5315/1/5315 +f 5323/1/5323 5315/1/5315 5338/1/5338 +f 5323/1/5323 5338/1/5338 5334/1/5334 +f 5341/1/5341 5338/1/5338 5340/1/5340 +f 5341/1/5341 5342/1/5342 5338/1/5338 +f 5339/1/5339 5338/1/5338 5342/1/5342 +f 5340/1/5340 5305/1/5305 5341/1/5341 +f 5310/1/5310 5307/1/5307 5311/1/5311 +f 5307/1/5307 5308/1/5308 5306/1/5306 +f 5341/1/5341 5305/1/5305 5346/1/5346 +f 5346/1/5346 5342/1/5342 5341/1/5341 +f 5339/1/5339 5342/1/5342 5343/1/5343 +f 5334/1/5334 5338/1/5338 5339/1/5339 +f 5327/1/5327 5323/1/5323 5334/1/5334 +f 5328/1/5328 5325/1/5325 5327/1/5327 +f 5330/1/5330 5326/1/5326 5328/1/5328 +f 6441/1/6441 5330/1/5330 6438/1/6438 +f 6440/1/6440 6441/1/6441 6438/1/6438 +f 6443/1/6443 6440/1/6440 6444/1/6444 +f 6447/1/6447 6446/1/6446 6443/1/6443 +f 6453/1/6453 6447/1/6447 6458/1/6458 +f 6459/1/6459 6461/1/6461 6458/1/6458 +f 6463/1/6463 6459/1/6459 6464/1/6464 +f 6460/1/6460 6451/1/6451 6452/1/6452 +f 6452/1/6452 6448/1/6448 6450/1/6450 +f 6465/1/6465 6467/1/6467 6468/1/6468 +f 6472/1/6472 6471/1/6471 6475/1/6475 +f 6450/1/6450 6473/1/6473 6469/1/6469 +f 6473/1/6473 6449/1/6449 6474/1/6474 +f 6474/1/6474 6437/1/6437 6439/1/6439 +f 6471/1/6471 6476/1/6476 6475/1/6475 +f 6472/1/6472 6475/1/6475 6477/1/6477 +f 6478/1/6478 6472/1/6472 6477/1/6477 +f 6478/1/6478 6477/1/6477 6522/1/6522 +f 6470/1/6470 6472/1/6472 6478/1/6478 +f 6466/1/6466 6468/1/6468 6470/1/6470 +f 6349/1/6349 6464/1/6464 6466/1/6466 +f 5306/1/5306 6349/1/6349 5304/1/5304 +f 6350/1/6350 6521/1/6521 6520/1/6520 +f 6520/1/6520 6523/1/6523 6496/1/6496 +f 6497/1/6497 6490/1/6490 6493/1/6493 +f 6490/1/6490 6491/1/6491 6493/1/6493 +f 6493/1/6493 6491/1/6491 6494/1/6494 +f 6523/1/6523 6489/1/6489 6496/1/6496 +f 6490/1/6490 6488/1/6488 6491/1/6491 +f 6488/1/6488 6487/1/6487 6491/1/6491 +f 6491/1/6491 6487/1/6487 6492/1/6492 +f 6487/1/6487 6486/1/6486 6492/1/6492 +f 6485/1/6485 6486/1/6486 6487/1/6487 +f 6482/1/6482 6483/1/6483 6489/1/6489 +f 6488/1/6488 6485/1/6485 6487/1/6487 +f 6479/1/6479 6481/1/6481 6483/1/6483 +f 6485/1/6485 6484/1/6484 6486/1/6486 +f 6480/1/6480 6435/1/6435 6481/1/6481 +f 6484/1/6484 6434/1/6434 6486/1/6486 +f 6486/1/6486 6434/1/6434 6433/1/6433 +f 6439/1/6439 6436/1/6436 6435/1/6435 +f 6436/1/6436 5333/1/5333 5337/1/5337 +f 5337/1/5337 5332/1/5332 5336/1/5336 +f 5336/1/5336 5335/1/5335 5348/1/5348 +f 5391/1/5391 5351/1/5351 5356/1/5356 +f 6434/1/6434 5391/1/5391 6433/1/6433 +f 6486/1/6486 6433/1/6433 6536/1/6536 +f 6492/1/6492 6486/1/6486 6536/1/6536 +f 6491/1/6491 6492/1/6492 6495/1/6495 +f 6491/1/6491 6495/1/6495 6494/1/6494 +f 6498/1/6498 6493/1/6493 6494/1/6494 +f 6508/1/6508 6507/1/6507 6510/1/6510 +f 6499/1/6499 6501/1/6501 6502/1/6502 +f 6501/1/6501 6500/1/6500 6509/1/6509 +f 6509/1/6509 6535/1/6535 6534/1/6534 +f 6507/1/6507 6511/1/6511 6512/1/6512 +f 6507/1/6507 6512/1/6512 6510/1/6510 +f 6513/1/6513 6508/1/6508 6510/1/6510 +f 6506/1/6506 6508/1/6508 6513/1/6513 +f 6505/1/6505 6503/1/6503 6506/1/6506 +f 6504/1/6504 6498/1/6498 6505/1/6505 +f 5300/1/5300 6519/1/6519 6504/1/6504 +f 5301/1/5301 5300/1/5300 5299/1/5299 +f 5303/1/5303 5304/1/5304 5301/1/5301 +f 5344/1/5344 5303/1/5303 5347/1/5347 +f 5347/1/5347 5345/1/5345 5344/1/5344 +f 5348/1/5348 5345/1/5345 5350/1/5350 +f 5352/1/5352 5350/1/5350 5354/1/5354 +f 5349/1/5349 5302/1/5302 5353/1/5353 +f 5358/1/5358 5354/1/5354 5359/1/5359 +f 5362/1/5362 5358/1/5358 5361/1/5361 +f 5362/1/5362 5361/1/5361 5377/1/5377 +f 5363/1/5363 5377/1/5377 5361/1/5361 +f 5360/1/5360 5302/1/5302 5364/1/5364 +f 5367/1/5367 5377/1/5377 5363/1/5363 +f 5362/1/5362 5377/1/5377 5379/1/5379 +f 5378/1/5378 5362/1/5362 5379/1/5379 +f 5384/1/5384 5380/1/5380 5378/1/5378 +f 5390/1/5390 5384/1/5384 5386/1/5386 +f 6432/1/6432 5386/1/5386 6431/1/6431 +f 6534/1/6534 6431/1/6431 6530/1/6530 +f 6526/1/6526 6530/1/6530 6527/1/6527 +f 6525/1/6525 6527/1/6527 6529/1/6529 +f 6516/1/6516 6524/1/6524 6525/1/6525 +f 6515/1/6515 6516/1/6516 6517/1/6517 +f 5289/1/5289 6515/1/6515 6517/1/6517 +f 5288/1/5288 6518/1/6518 5287/1/5287 +f 6518/1/6518 6528/1/6528 5287/1/5287 +f 6528/1/6528 6532/1/6532 5395/1/5395 +f 6532/1/6532 6531/1/6531 6533/1/6533 +f 5277/1/5277 5396/1/5396 5272/1/5272 +f 5283/1/5283 5277/1/5277 5275/1/5275 +f 5282/1/5282 5283/1/5283 5275/1/5275 +f 5285/1/5285 5284/1/5284 5282/1/5282 +f 5290/1/5290 5289/1/5289 5285/1/5285 +f 5296/1/5296 6514/1/6514 5290/1/5290 +f 5297/1/5297 5298/1/5298 5296/1/5296 +f 5364/1/5364 5297/1/5297 5365/1/5365 +f 5368/1/5368 5365/1/5365 5369/1/5369 +f 5369/1/5369 5376/1/5376 5368/1/5368 +f 5381/1/5381 5376/1/5376 5388/1/5388 +f 5382/1/5382 5381/1/5381 5388/1/5388 +f 5383/1/5383 5382/1/5382 5385/1/5385 +f 5387/1/5387 5383/1/5383 5385/1/5385 +f 6548/1/6548 5389/1/5389 6547/1/6547 +f 6547/1/6547 5389/1/5389 6396/1/6396 +f 6402/1/6402 6394/1/6394 6397/1/6397 +f 6400/1/6400 6402/1/6402 6397/1/6397 +f 6406/1/6406 6400/1/6400 6404/1/6404 +f 6430/1/6430 5387/1/5387 6406/1/6406 +f 6533/1/6533 6430/1/6430 5271/1/5271 +f 5270/1/5270 5271/1/5271 5265/1/5265 +f 5273/1/5273 5270/1/5270 5268/1/5268 +f 5274/1/5274 5268/1/5268 5269/1/5269 +f 5278/1/5278 5274/1/5274 5269/1/5269 +f 5281/1/5281 5279/1/5279 5278/1/5278 +f 5291/1/5291 5286/1/5286 5281/1/5281 +f 5293/1/5293 5291/1/5291 5294/1/5294 +f 5366/1/5366 5295/1/5295 5293/1/5293 +f 5373/1/5373 5366/1/5366 5374/1/5374 +f 5374/1/5374 5375/1/5375 5373/1/5373 +f 5389/1/5389 5375/1/5375 6396/1/6396 +f 6547/1/6547 6396/1/6396 6395/1/6395 +f 5371/1/5371 5370/1/5370 5372/1/5372 +f 6390/1/6390 6395/1/6395 6388/1/6388 +f 6393/1/6393 6390/1/6390 6389/1/6389 +f 6387/1/6387 6392/1/6392 6389/1/6389 +f 6386/1/6386 5370/1/5370 6385/1/6385 +f 6391/1/6391 6392/1/6392 6387/1/6387 +f 6427/1/6427 6392/1/6392 6426/1/6426 +f 6427/1/6427 6426/1/6426 6419/1/6419 +f 6423/1/6423 6419/1/6419 6424/1/6424 +f 6428/1/6428 6384/1/6384 6425/1/6425 +f 6385/1/6385 5394/1/5394 6384/1/6384 +f 5394/1/5394 5292/1/5292 5208/1/5208 +f 5206/1/5206 5214/1/5214 5210/1/5210 +f 5292/1/5292 5216/1/5216 5208/1/5208 +f 5216/1/5216 5280/1/5280 5217/1/5217 +f 5217/1/5217 5267/1/5267 5221/1/5221 +f 5267/1/5267 5222/1/5222 5221/1/5221 +f 5224/1/5224 5260/1/5260 5259/1/5259 +f 5224/1/5224 5259/1/5259 5223/1/5223 +f 5266/1/5266 5262/1/5262 5222/1/5222 +f 5264/1/5264 5261/1/5261 5262/1/5262 +f 5261/1/5261 5263/1/5263 5258/1/5258 +f 5260/1/5260 5257/1/5257 5259/1/5259 +f 5223/1/5223 5259/1/5259 5229/1/5229 +f 5219/1/5219 5224/1/5224 5223/1/5223 +f 5218/1/5218 5219/1/5219 5215/1/5215 +f 5214/1/5214 5215/1/5215 5210/1/5210 +f 5211/1/5211 5220/1/5220 5226/1/5226 +f 5226/1/5226 5225/1/5225 5227/1/5227 +f 5212/1/5212 5228/1/5228 5213/1/5213 +f 5235/1/5235 5234/1/5234 5238/1/5238 +f 5234/1/5234 5239/1/5239 5238/1/5238 +f 5238/1/5238 5239/1/5239 5243/1/5243 +f 5239/1/5239 5248/1/5248 5243/1/5243 +f 5237/1/5237 5248/1/5248 5239/1/5239 +f 5227/1/5227 5233/1/5233 5231/1/5231 +f 5234/1/5234 5237/1/5237 5239/1/5239 +f 5227/1/5227 5232/1/5232 5233/1/5233 +f 5237/1/5237 5253/1/5253 5248/1/5248 +f 5230/1/5230 5254/1/5254 5232/1/5232 +f 5256/1/5256 5255/1/5255 5254/1/5254 +f 5258/1/5258 6405/1/6405 5255/1/5255 +f 6405/1/6405 6401/1/6401 6403/1/6403 +f 6403/1/6403 6399/1/6399 6410/1/6410 +f 6427/1/6427 6419/1/6419 6410/1/6410 +f 6411/1/6411 6417/1/6417 6412/1/6412 +f 6408/1/6408 6412/1/6412 6413/1/6413 +f 6409/1/6409 6413/1/6413 6414/1/6414 +f 5252/1/5252 6407/1/6407 6409/1/6409 +f 5253/1/5253 5252/1/5252 5248/1/5248 +f 5243/1/5243 5248/1/5248 5246/1/5246 +f 5238/1/5238 5243/1/5243 5241/1/5241 +f 5240/1/5240 5241/1/5241 5242/1/5242 +f 5194/1/5194 5240/1/5240 5242/1/5242 +f 5196/1/5196 5201/1/5201 5194/1/5194 +f 5200/1/5200 5201/1/5201 5196/1/5196 +f 5202/1/5202 5236/1/5236 5200/1/5200 +f 5209/1/5209 5213/1/5213 5202/1/5202 +f 5206/1/5206 5210/1/5210 5209/1/5209 +f 5207/1/5207 5206/1/5206 5205/1/5205 +f 6381/1/6381 5207/1/5207 5205/1/5205 +f 6424/1/6424 6381/1/6381 6423/1/6423 +f 6423/1/6423 6418/1/6418 6419/1/6419 +f 6416/1/6416 6418/1/6418 6421/1/6421 +f 6382/1/6382 6379/1/6379 6383/1/6383 +f 6377/1/6377 6421/1/6421 6378/1/6378 +f 6371/1/6371 6367/1/6367 6377/1/6377 +f 6366/1/6366 6367/1/6367 6371/1/6371 +f 6368/1/6368 6366/1/6366 6369/1/6369 +f 6375/1/6375 6376/1/6376 6370/1/6370 +f 6379/1/6379 5204/1/5204 6376/1/6376 +f 5204/1/5204 5203/1/5203 5198/1/5198 +f 5198/1/5198 5197/1/5197 5193/1/5193 +f 5193/1/5193 5192/1/5192 5190/1/5190 +f 5190/1/5190 5189/1/5189 5185/1/5185 +f 5189/1/5189 5186/1/5186 5185/1/5185 +f 5183/1/5183 5187/1/5187 5178/1/5178 +f 5187/1/5187 5398/1/5398 5177/1/5177 +f 5195/1/5195 5245/1/5245 5186/1/5186 +f 5398/1/5398 5251/1/5251 5177/1/5177 +f 5244/1/5244 5247/1/5247 5245/1/5245 +f 5247/1/5247 5249/1/5249 5250/1/5250 +f 5250/1/5250 6415/1/6415 6361/1/6361 +f 5251/1/5251 5397/1/5397 5172/1/5172 +f 5172/1/5172 5171/1/5171 5175/1/5175 +f 5165/1/5165 5167/1/5167 5168/1/5168 +f 5171/1/5171 5173/1/5173 5176/1/5176 +f 5174/1/5174 5180/1/5180 5173/1/5173 +f 5174/1/5174 5405/1/5405 5180/1/5180 +f 6976/1/6976 5405/1/5405 5174/1/5174 +f 6964/1/6964 5405/1/5405 6976/1/6976 +f 6957/1/6957 6964/1/6964 6963/1/6963 +f 6977/1/6977 5405/1/5405 6964/1/6964 +f 5180/1/5180 5405/1/5405 6977/1/6977 +f 5404/1/5404 5179/1/5179 5180/1/5180 +f 5401/1/5401 5179/1/5179 5404/1/5404 +f 5184/1/5184 5182/1/5182 5401/1/5401 +f 5191/1/5191 5188/1/5188 5184/1/5184 +f 5199/1/5199 5191/1/5191 5400/1/5400 +f 6549/1/6549 5199/1/5199 5400/1/5400 +f 6373/1/6373 6380/1/6380 6549/1/6549 +f 6369/1/6369 6373/1/6373 6368/1/6368 +f 6372/1/6372 6365/1/6365 6368/1/6368 +f 6365/1/6365 6360/1/6360 6363/1/6363 +f 5081/1/5081 5083/1/5083 6364/1/6364 +f 6359/1/6359 6363/1/6363 6360/1/6360 +f 6359/1/6359 6358/1/6358 6361/1/6361 +f 5087/1/5087 5088/1/5088 5091/1/5091 +f 5086/1/5086 5088/1/5088 5087/1/5087 +f 5086/1/5086 5089/1/5089 5088/1/5088 +f 6358/1/6358 5170/1/5170 6429/1/6429 +f 5166/1/5166 5168/1/5168 5170/1/5170 +f 5088/1/5088 5089/1/5089 5095/1/5095 +f 5095/1/5095 5089/1/5089 5094/1/5094 +f 5095/1/5095 5094/1/5094 5096/1/5096 +f 5166/1/5166 5165/1/5165 5168/1/5168 +f 5165/1/5165 6975/1/6975 5167/1/5167 +f 6974/1/6974 6965/1/6965 6975/1/6975 +f 6974/1/6974 6971/1/6971 6965/1/6965 +f 6972/1/6972 6970/1/6970 6971/1/6971 +f 5169/1/5169 5095/1/5095 5164/1/5164 +f 5164/1/5164 5095/1/5095 5096/1/5096 +f 6972/1/6972 5163/1/5163 6978/1/6978 +f 6978/1/6978 6981/1/6981 6979/1/6979 +f 6985/1/6985 6983/1/6983 6981/1/6981 +f 7051/1/7051 6991/1/6991 6980/1/6980 +f 7051/1/7051 7046/1/7046 6991/1/6991 +f 7041/1/7041 7046/1/7046 7051/1/7051 +f 6985/1/6985 6990/1/6990 6983/1/6983 +f 7046/1/7046 6992/1/6992 6991/1/6991 +f 7046/1/7046 7042/1/7042 6992/1/6992 +f 7042/1/7042 6993/1/6993 6992/1/6992 +f 7042/1/7042 7045/1/7045 6993/1/6993 +f 6988/1/6988 6983/1/6983 6990/1/6990 +f 6984/1/6984 6983/1/6983 6988/1/6988 +f 6987/1/6987 6982/1/6982 6984/1/6984 +f 6986/1/6986 6982/1/6982 6987/1/6987 +f 6961/1/6961 6969/1/6969 6986/1/6986 +f 6956/1/6956 6960/1/6960 6961/1/6961 +f 6954/1/6954 6958/1/6958 6956/1/6956 +f 5402/1/5402 6955/1/6955 6954/1/6954 +f 5399/1/5399 5402/1/5402 5403/1/5403 +f 6550/1/6550 5403/1/5403 6553/1/6553 +f 6551/1/6551 6550/1/6550 6553/1/6553 +f 6552/1/6552 6374/1/6374 6551/1/6551 +f 6552/1/6552 5081/1/5081 6364/1/6364 +f 5075/1/5075 5079/1/5079 5074/1/5074 +f 5082/1/5082 5083/1/5083 5081/1/5081 +f 5075/1/5075 5080/1/5080 5079/1/5079 +f 5078/1/5078 5080/1/5080 5075/1/5075 +f 5082/1/5082 5084/1/5084 5083/1/5083 +f 5087/1/5087 5084/1/5084 5086/1/5086 +f 5078/1/5078 5085/1/5085 5080/1/5080 +f 5090/1/5090 5089/1/5089 5086/1/5086 +f 5090/1/5090 5094/1/5094 5089/1/5089 +f 5096/1/5096 5094/1/5094 5097/1/5097 +f 5098/1/5098 5107/1/5107 5097/1/5097 +f 5106/1/5106 5107/1/5107 5098/1/5098 +f 5092/1/5092 5085/1/5085 5093/1/5093 +f 5098/1/5098 5101/1/5101 5105/1/5105 +f 5098/1/5098 5105/1/5105 5106/1/5106 +f 5106/1/5106 5109/1/5109 5107/1/5107 +f 5110/1/5110 5109/1/5109 5111/1/5111 +f 5114/1/5114 5111/1/5111 5115/1/5115 +f 7051/1/7051 5114/1/5114 7041/1/7041 +f 7041/1/7041 7042/1/7042 7046/1/7046 +f 7038/1/7038 7043/1/7043 7042/1/7042 +f 7033/1/7033 7037/1/7037 7038/1/7038 +f 7039/1/7039 7040/1/7040 7031/1/7031 +f 7030/1/7030 7029/1/7029 7033/1/7033 +f 7029/1/7029 7032/1/7032 7033/1/7033 +f 7025/1/7025 7024/1/7024 7027/1/7027 +f 7022/1/7022 7024/1/7024 7025/1/7025 +f 7024/1/7024 7015/1/7015 7027/1/7027 +f 7017/1/7017 7015/1/7015 7024/1/7024 +f 7017/1/7017 7013/1/7013 7015/1/7015 +f 7013/1/7013 7012/1/7012 7015/1/7015 +f 7012/1/7012 7013/1/7013 7011/1/7011 +f 7029/1/7029 7028/1/7028 7032/1/7032 +f 7033/1/7033 7032/1/7032 7037/1/7037 +f 7038/1/7038 7037/1/7037 7043/1/7043 +f 7043/1/7043 7045/1/7045 7042/1/7042 +f 6999/1/6999 6993/1/6993 7045/1/7045 +f 6997/1/6997 6994/1/6994 6999/1/6999 +f 6995/1/6995 6994/1/6994 6997/1/6997 +f 6996/1/6996 6989/1/6989 6995/1/6995 +f 6556/1/6556 6959/1/6959 6996/1/6996 +f 6555/1/6555 6959/1/6959 6556/1/6556 +f 5065/1/5065 6554/1/6554 6555/1/6555 +f 5070/1/5070 6554/1/6554 5065/1/5065 +f 5071/1/5071 5072/1/5072 5070/1/5070 +f 5074/1/5074 5071/1/5071 5075/1/5075 +f 5076/1/5076 5078/1/5078 5075/1/5075 +f 5078/1/5078 5093/1/5093 5085/1/5085 +f 5077/1/5077 5073/1/5073 5066/1/5066 +f 5099/1/5099 5100/1/5100 5093/1/5093 +f 5067/1/5067 5066/1/5066 5064/1/5064 +f 5068/1/5068 5102/1/5102 5100/1/5100 +f 5069/1/5069 5064/1/5064 5061/1/5061 +f 5122/1/5122 5119/1/5119 5123/1/5123 +f 5103/1/5103 5104/1/5104 5102/1/5102 +f 5122/1/5122 5118/1/5118 5119/1/5119 +f 5108/1/5108 5104/1/5104 5112/1/5112 +f 5108/1/5108 5112/1/5112 5113/1/5113 +f 5116/1/5116 5113/1/5113 5117/1/5117 +f 5129/1/5129 5148/1/5148 5121/1/5121 +f 5116/1/5116 5117/1/5117 5150/1/5150 +f 5150/1/5150 5151/1/5151 5116/1/5116 +f 5156/1/5156 5152/1/5152 5147/1/5147 +f 5154/1/5154 5151/1/5151 5153/1/5153 +f 7031/1/7031 5153/1/5153 7026/1/7026 +f 7025/1/7025 7026/1/7026 7022/1/7022 +f 7022/1/7022 7017/1/7017 7024/1/7024 +f 7017/1/7017 7016/1/7016 7013/1/7013 +f 7020/1/7020 7018/1/7018 7019/1/7019 +f 7020/1/7020 5055/1/5055 7018/1/7018 +f 5055/1/5055 7010/1/7010 7018/1/7018 +f 7011/1/7011 7013/1/7013 7016/1/7016 +f 7007/1/7007 7012/1/7012 7011/1/7011 +f 7015/1/7015 7012/1/7012 7014/1/7014 +f 7050/1/7050 7034/1/7034 7014/1/7014 +f 7049/1/7049 7034/1/7034 7050/1/7050 +f 7048/1/7048 7035/1/7035 7049/1/7049 +f 7047/1/7047 7036/1/7036 7048/1/7048 +f 7003/1/7003 7044/1/7044 7047/1/7047 +f 7000/1/7000 7001/1/7001 7003/1/7003 +f 5059/1/5059 6998/1/6998 7000/1/7000 +f 5060/1/5060 5059/1/5059 5058/1/5058 +f 5061/1/5061 5062/1/5062 5060/1/5060 +f 5123/1/5123 5061/1/5061 5122/1/5122 +f 5120/1/5120 5118/1/5118 5122/1/5122 +f 5120/1/5120 5121/1/5121 5118/1/5118 +f 5063/1/5063 5125/1/5125 5124/1/5124 +f 5126/1/5126 5129/1/5129 5121/1/5121 +f 5131/1/5131 5148/1/5148 5129/1/5129 +f 5128/1/5128 5125/1/5125 5127/1/5127 +f 5135/1/5135 5131/1/5131 5130/1/5130 +f 5135/1/5135 5149/1/5149 5131/1/5131 +f 5156/1/5156 5147/1/5147 5149/1/5149 +f 5156/1/5156 5157/1/5157 5152/1/5152 +f 5161/1/5161 5158/1/5158 5159/1/5159 +f 5155/1/5155 5152/1/5152 5157/1/5157 +f 5155/1/5155 7021/1/7021 7023/1/7023 +f 7019/1/7019 7021/1/7021 7020/1/7020 +f 5055/1/5055 7020/1/7020 4999/1/4999 +f 4999/1/4999 5054/1/5054 5055/1/5055 +f 5054/1/5054 4994/1/4994 5055/1/5055 +f 4999/1/4999 5053/1/5053 5054/1/5054 +f 4993/1/4993 5054/1/5054 5053/1/5053 +f 4999/1/4999 4997/1/4997 5053/1/5053 +f 4997/1/4997 4992/1/4992 5053/1/5053 +f 4988/1/4988 5053/1/5053 4992/1/4992 +f 4991/1/4991 4992/1/4992 4997/1/4997 +f 4997/1/4997 4995/1/4995 4991/1/4991 +f 4995/1/4995 4996/1/4996 4991/1/4991 +f 4990/1/4990 4991/1/4991 4996/1/4996 +f 4990/1/4990 4996/1/4996 5001/1/5001 +f 4985/1/4985 4990/1/4990 5001/1/5001 +f 4985/1/4985 5001/1/5001 5002/1/5002 +f 4985/1/4985 5002/1/5002 5007/1/5007 +f 5007/1/5007 5002/1/5002 5006/1/5006 +f 5007/1/5007 5006/1/5006 5008/1/5008 +f 4986/1/4986 5007/1/5007 5008/1/5008 +f 5008/1/5008 5006/1/5006 5009/1/5009 +f 5008/1/5008 5009/1/5009 5011/1/5011 +f 5012/1/5012 5008/1/5008 5011/1/5011 +f 5012/1/5012 5011/1/5011 5013/1/5013 +f 5012/1/5012 5013/1/5013 5014/1/5014 +f 5014/1/5014 5013/1/5013 5017/1/5017 +f 5014/1/5014 5017/1/5017 5019/1/5019 +f 5020/1/5020 5014/1/5014 5019/1/5019 +f 5020/1/5020 5019/1/5019 5037/1/5037 +f 5045/1/5045 5020/1/5020 5037/1/5037 +f 5045/1/5045 5037/1/5037 5446/1/5446 +f 5422/1/5422 5045/1/5045 5446/1/5446 +f 5422/1/5422 5446/1/5446 5447/1/5447 +f 5449/1/5449 5422/1/5422 5447/1/5447 +f 5449/1/5449 5447/1/5447 5450/1/5450 +f 5450/1/5450 5452/1/5452 5449/1/5449 +f 5449/1/5449 5452/1/5452 5448/1/5448 +f 5452/1/5452 5421/1/5421 5448/1/5448 +f 5448/1/5448 5421/1/5421 5420/1/5420 +f 5420/1/5420 5422/1/5422 5448/1/5448 +f 5419/1/5419 5422/1/5422 5420/1/5420 +f 5420/1/5420 5414/1/5414 5419/1/5419 +f 5419/1/5419 5414/1/5414 5413/1/5413 +f 5419/1/5419 5413/1/5413 5415/1/5415 +f 5415/1/5415 5418/1/5418 5419/1/5419 +f 5413/1/5413 5414/1/5414 5408/1/5408 +f 5413/1/5413 5408/1/5408 5412/1/5412 +f 5414/1/5414 5030/1/5030 5408/1/5408 +f 5408/1/5408 5030/1/5030 5025/1/5025 +f 5025/1/5025 5406/1/5406 5408/1/5408 +f 5406/1/5406 5025/1/5025 5024/1/5024 +f 5406/1/5406 5024/1/5024 5444/1/5444 +f 5024/1/5024 5004/1/5004 5444/1/5444 +f 5004/1/5004 5024/1/5024 5016/1/5016 +f 5016/1/5016 5010/1/5010 5004/1/5004 +f 5013/1/5013 5010/1/5010 5016/1/5016 +f 5013/1/5013 5016/1/5016 5018/1/5018 +f 5016/1/5016 5024/1/5024 5018/1/5018 +f 5018/1/5018 5024/1/5024 5022/1/5022 +f 5017/1/5017 5018/1/5018 5022/1/5022 +f 5017/1/5017 5022/1/5022 5023/1/5023 +f 5017/1/5017 5023/1/5023 5021/1/5021 +f 5021/1/5021 5023/1/5023 5026/1/5026 +f 5021/1/5021 5026/1/5026 5027/1/5027 +f 5019/1/5019 5021/1/5021 5027/1/5027 +f 5019/1/5019 5027/1/5027 5031/1/5031 +f 5031/1/5031 5027/1/5027 5032/1/5032 +f 5031/1/5031 5032/1/5032 5036/1/5036 +f 5031/1/5031 5036/1/5036 5038/1/5038 +f 5031/1/5031 5038/1/5038 5037/1/5037 +f 5037/1/5037 5038/1/5038 5043/1/5043 +f 5037/1/5037 5043/1/5043 5044/1/5044 +f 5043/1/5043 5451/1/5451 5044/1/5044 +f 5044/1/5044 5451/1/5451 5447/1/5447 +f 5451/1/5451 5043/1/5043 5052/1/5052 +f 5052/1/5052 5450/1/5450 5451/1/5451 +f 5450/1/5450 5052/1/5052 7420/1/7420 +f 5052/1/5052 5421/1/5421 7420/1/7420 +f 5052/1/5052 5035/1/5035 5421/1/5421 +f 5421/1/5421 5035/1/5035 5414/1/5414 +f 5052/1/5052 5039/1/5039 5035/1/5035 +f 5034/1/5034 5035/1/5035 5039/1/5039 +f 5034/1/5034 5039/1/5039 5036/1/5036 +f 5033/1/5033 5034/1/5034 5036/1/5036 +f 5033/1/5033 5030/1/5030 5034/1/5034 +f 5030/1/5030 5033/1/5033 5029/1/5029 +f 5032/1/5032 5029/1/5029 5033/1/5033 +f 5036/1/5036 5039/1/5039 5040/1/5040 +f 5039/1/5039 5041/1/5041 5040/1/5040 +f 5041/1/5041 5042/1/5042 5040/1/5040 +f 5040/1/5040 5042/1/5042 5043/1/5043 +f 5041/1/5041 5052/1/5052 5042/1/5042 +f 5030/1/5030 5035/1/5035 5034/1/5034 +f 5039/1/5039 5052/1/5052 5041/1/5041 +f 5043/1/5043 5042/1/5042 5052/1/5052 +f 5038/1/5038 5040/1/5040 5043/1/5043 +f 5036/1/5036 5040/1/5040 5038/1/5038 +f 5032/1/5032 5033/1/5033 5036/1/5036 +f 5027/1/5027 5029/1/5029 5032/1/5032 +f 5027/1/5027 5028/1/5028 5029/1/5029 +f 5028/1/5028 5025/1/5025 5029/1/5029 +f 5026/1/5026 5025/1/5025 5028/1/5028 +f 5027/1/5027 5026/1/5026 5028/1/5028 +f 5025/1/5025 5026/1/5026 5023/1/5023 +f 5022/1/5022 5024/1/5024 5023/1/5023 +f 5023/1/5023 5024/1/5024 5025/1/5025 +f 5029/1/5029 5025/1/5025 5030/1/5030 +f 5414/1/5414 5035/1/5035 5030/1/5030 +f 5419/1/5419 5418/1/5418 5422/1/5422 +f 5420/1/5420 5421/1/5421 5414/1/5414 +f 5452/1/5452 7420/1/7420 5421/1/5421 +f 5452/1/5452 5450/1/5450 7420/1/7420 +f 5450/1/5450 5447/1/5447 5451/1/5451 +f 5448/1/5448 5422/1/5422 5449/1/5449 +f 5447/1/5447 5446/1/5446 5044/1/5044 +f 5418/1/5418 5045/1/5045 5422/1/5422 +f 5418/1/5418 5046/1/5046 5045/1/5045 +f 5417/1/5417 5046/1/5046 5418/1/5418 +f 5446/1/5446 5037/1/5037 5044/1/5044 +f 5046/1/5046 5020/1/5020 5045/1/5045 +f 5046/1/5046 5015/1/5015 5020/1/5020 +f 5037/1/5037 5019/1/5019 5031/1/5031 +f 5015/1/5015 5014/1/5014 5020/1/5020 +f 5019/1/5019 5017/1/5017 5021/1/5021 +f 5013/1/5013 5018/1/5018 5017/1/5017 +f 5011/1/5011 5010/1/5010 5013/1/5013 +f 5011/1/5011 5009/1/5009 5010/1/5010 +f 5009/1/5009 5005/1/5005 5010/1/5010 +f 5006/1/5006 5005/1/5005 5009/1/5009 +f 5002/1/5002 5003/1/5003 5006/1/5006 +f 5001/1/5001 4998/1/4998 5002/1/5002 +f 5001/1/5001 4996/1/4996 4998/1/4998 +f 4989/1/4989 4991/1/4991 4990/1/4990 +f 4989/1/4989 4992/1/4992 4991/1/4991 +f 4997/1/4997 4999/1/4999 4995/1/4995 +f 5158/1/5158 5161/1/5161 5162/1/5162 +f 5141/1/5141 5441/1/5441 5162/1/5162 +f 5442/1/5442 4995/1/4995 4999/1/4999 +f 4996/1/4996 4995/1/4995 4998/1/4998 +f 5002/1/5002 4998/1/4998 5003/1/5003 +f 5006/1/5006 5003/1/5003 5005/1/5005 +f 5004/1/5004 5010/1/5010 5005/1/5005 +f 5000/1/5000 5437/1/5437 5434/1/5434 +f 5004/1/5004 5438/1/5438 5444/1/5444 +f 5406/1/5406 5444/1/5444 5410/1/5410 +f 5406/1/5406 5407/1/5407 5408/1/5408 +f 5412/1/5412 5408/1/5408 5407/1/5407 +f 5415/1/5415 5413/1/5413 5412/1/5412 +f 5415/1/5415 5417/1/5417 5418/1/5418 +f 5409/1/5409 5416/1/5416 5411/1/5411 +f 5417/1/5417 5047/1/5047 5046/1/5046 +f 5423/1/5423 5048/1/5048 5416/1/5416 +f 5423/1/5423 5049/1/5049 5048/1/5048 +f 5047/1/5047 5015/1/5015 5046/1/5046 +f 5049/1/5049 4982/1/4982 5048/1/5048 +f 5015/1/5015 5012/1/5012 5014/1/5014 +f 4986/1/4986 5008/1/5008 5012/1/5012 +f 4986/1/4986 4985/1/4985 5007/1/5007 +f 4984/1/4984 4990/1/4990 4985/1/4985 +f 4984/1/4984 4989/1/4989 4990/1/4990 +f 4988/1/4988 4992/1/4992 4989/1/4989 +f 4993/1/4993 5053/1/5053 4988/1/4988 +f 4994/1/4994 5054/1/5054 4993/1/4993 +f 5055/1/5055 4994/1/4994 7010/1/7010 +f 7006/1/7006 7009/1/7009 7010/1/7010 +f 4972/1/4972 7008/1/7008 7006/1/7006 +f 7004/1/7004 7005/1/7005 4972/1/4972 +f 4978/1/4978 7002/1/7002 7004/1/7004 +f 5056/1/5056 5057/1/5057 4978/1/4978 +f 5125/1/5125 5056/1/5056 5127/1/5127 +f 5132/1/5132 5127/1/5127 5133/1/5133 +f 5136/1/5136 5137/1/5137 5133/1/5133 +f 5141/1/5141 5160/1/5160 5137/1/5137 +f 5143/1/5143 5441/1/5441 5141/1/5141 +f 5142/1/5142 5440/1/5440 5143/1/5143 +f 5142/1/5142 5140/1/5140 5144/1/5144 +f 5138/1/5138 5134/1/5134 5139/1/5139 +f 5134/1/5134 4977/1/4977 4976/1/4976 +f 4976/1/4976 4975/1/4975 4971/1/4971 +f 5140/1/5140 4979/1/4979 5144/1/5144 +f 5432/1/5432 5144/1/5144 5145/1/5145 +f 5145/1/5145 5431/1/5431 5433/1/5433 +f 5430/1/5430 5434/1/5434 5431/1/5431 +f 5436/1/5436 5434/1/5434 5430/1/5430 +f 5445/1/5445 5443/1/5443 5436/1/5436 +f 5425/1/5425 5445/1/5445 5428/1/5428 +f 5428/1/5428 5424/1/5424 5425/1/5425 +f 5429/1/5429 5146/1/5146 5427/1/5427 +f 5424/1/5424 5049/1/5049 5423/1/5423 +f 5051/1/5051 5050/1/5050 5146/1/5146 +f 5049/1/5049 4981/1/4981 4982/1/4982 +f 5051/1/5051 4973/1/4973 5050/1/5050 +f 4981/1/4981 4980/1/4980 4982/1/4982 +f 4970/1/4970 4983/1/4983 4980/1/4980 +f 4971/1/4971 4968/1/4968 4973/1/4973 +f 4970/1/4970 4969/1/4969 4987/1/4987 +f 4968/1/4968 4974/1/4974 4969/1/4969 +f 7421/1/7421 7422/1/7422 7423/1/7423 +f 7421/1/7421 7423/1/7423 7424/1/7424 +f 7421/1/7421 7424/1/7424 7444/1/7444 +f 7444/1/7444 7526/1/7526 7421/1/7421 +f 7421/1/7421 7526/1/7526 7525/1/7525 +f 7421/1/7421 7525/1/7525 7425/1/7425 +f 7425/1/7425 7525/1/7525 7524/1/7524 +f 7425/1/7425 7524/1/7524 7427/1/7427 +f 7427/1/7427 7426/1/7426 7425/1/7425 +f 7425/1/7425 7426/1/7426 7422/1/7422 +f 7503/1/7503 7422/1/7422 7426/1/7426 +f 7503/1/7503 7426/1/7426 7504/1/7504 +f 7508/1/7508 7503/1/7503 7504/1/7504 +f 7508/1/7508 7504/1/7504 7505/1/7505 +f 7505/1/7505 7506/1/7506 7508/1/7508 +f 7508/1/7508 7506/1/7506 7507/1/7507 +f 7508/1/7508 7507/1/7507 7490/1/7490 +f 7490/1/7490 7489/1/7489 7508/1/7508 +f 7508/1/7508 7489/1/7489 7487/1/7487 +f 7508/1/7508 7487/1/7487 7486/1/7486 +f 7486/1/7486 7484/1/7484 7508/1/7508 +f 7508/1/7508 7484/1/7484 7483/1/7483 +f 7508/1/7508 7483/1/7483 7482/1/7482 +f 7482/1/7482 7481/1/7481 7508/1/7508 +f 7508/1/7508 7481/1/7481 7480/1/7480 +f 7508/1/7508 7480/1/7480 7479/1/7479 +f 7479/1/7479 7478/1/7478 7508/1/7508 +f 7508/1/7508 7478/1/7478 7477/1/7477 +f 7508/1/7508 7477/1/7477 7476/1/7476 +f 7476/1/7476 7475/1/7475 7508/1/7508 +f 7508/1/7508 7475/1/7475 7473/1/7473 +f 7508/1/7508 7473/1/7473 7474/1/7474 +f 7474/1/7474 7491/1/7491 7508/1/7508 +f 7508/1/7508 7491/1/7491 7492/1/7492 +f 7508/1/7508 7492/1/7492 7493/1/7493 +f 7493/1/7493 7494/1/7494 7508/1/7508 +f 7508/1/7508 7494/1/7494 7495/1/7495 +f 7508/1/7508 7495/1/7495 7496/1/7496 +f 7496/1/7496 7497/1/7497 7508/1/7508 +f 7508/1/7508 7497/1/7497 7498/1/7498 +f 7508/1/7508 7498/1/7498 7499/1/7499 +f 7499/1/7499 7500/1/7500 7508/1/7508 +f 7508/1/7508 7500/1/7500 7501/1/7501 +f 7508/1/7508 7501/1/7501 7502/1/7502 +f 7501/1/7501 7423/1/7423 7502/1/7502 +f 7500/1/7500 7424/1/7424 7501/1/7501 +f 7500/1/7500 7445/1/7445 7424/1/7424 +f 7499/1/7499 7445/1/7445 7500/1/7500 +f 7499/1/7499 7446/1/7446 7445/1/7445 +f 7444/1/7444 7445/1/7445 7446/1/7446 +f 7444/1/7444 7446/1/7446 7447/1/7447 +f 7447/1/7447 7527/1/7527 7444/1/7444 +f 7447/1/7447 7530/1/7530 7527/1/7527 +f 7511/1/7511 7527/1/7527 7530/1/7530 +f 7511/1/7511 7530/1/7530 7528/1/7528 +f 7528/1/7528 7529/1/7529 7511/1/7511 +f 7511/1/7511 7529/1/7529 7512/1/7512 +f 7511/1/7511 7512/1/7512 7509/1/7509 +f 7509/1/7509 7510/1/7510 7511/1/7511 +f 7511/1/7511 7510/1/7510 7513/1/7513 +f 7511/1/7511 7513/1/7513 7514/1/7514 +f 7514/1/7514 7515/1/7515 7511/1/7511 +f 7511/1/7511 7515/1/7515 7516/1/7516 +f 7511/1/7511 7516/1/7516 7517/1/7517 +f 7517/1/7517 7518/1/7518 7511/1/7511 +f 7511/1/7511 7518/1/7518 7519/1/7519 +f 7511/1/7511 7519/1/7519 7520/1/7520 +f 7520/1/7520 7521/1/7521 7511/1/7511 +f 7511/1/7511 7521/1/7521 7522/1/7522 +f 7511/1/7511 7522/1/7522 7523/1/7523 +f 7523/1/7523 7524/1/7524 7511/1/7511 +f 7430/1/7430 7523/1/7523 7522/1/7522 +f 7430/1/7430 7522/1/7522 7432/1/7432 +f 7432/1/7432 7431/1/7431 7430/1/7430 +f 7430/1/7430 7431/1/7431 7429/1/7429 +f 7430/1/7430 7429/1/7429 7427/1/7427 +f 7429/1/7429 7428/1/7428 7427/1/7427 +f 7505/1/7505 7428/1/7428 7429/1/7429 +f 7506/1/7506 7429/1/7429 7431/1/7431 +f 7432/1/7432 7433/1/7433 7431/1/7431 +f 7507/1/7507 7431/1/7431 7433/1/7433 +f 7432/1/7432 7435/1/7435 7433/1/7433 +f 7490/1/7490 7433/1/7433 7435/1/7435 +f 7434/1/7434 7435/1/7435 7432/1/7432 +f 7432/1/7432 7521/1/7521 7434/1/7434 +f 7434/1/7434 7437/1/7437 7435/1/7435 +f 7489/1/7489 7435/1/7435 7437/1/7437 +f 7436/1/7436 7437/1/7437 7434/1/7434 +f 7434/1/7434 7520/1/7520 7436/1/7436 +f 7436/1/7436 7488/1/7488 7437/1/7437 +f 7487/1/7487 7437/1/7437 7488/1/7488 +f 7436/1/7436 7439/1/7439 7488/1/7488 +f 7486/1/7486 7488/1/7488 7439/1/7439 +f 7438/1/7438 7439/1/7439 7436/1/7436 +f 7436/1/7436 7519/1/7519 7438/1/7438 +f 7438/1/7438 7485/1/7485 7439/1/7439 +f 7484/1/7484 7439/1/7439 7485/1/7485 +f 7438/1/7438 7441/1/7441 7485/1/7485 +f 7483/1/7483 7485/1/7485 7441/1/7441 +f 7440/1/7440 7441/1/7441 7438/1/7438 +f 7438/1/7438 7518/1/7518 7440/1/7440 +f 7440/1/7440 7443/1/7443 7441/1/7441 +f 7482/1/7482 7441/1/7441 7443/1/7443 +f 7442/1/7442 7443/1/7443 7440/1/7440 +f 7440/1/7440 7517/1/7517 7442/1/7442 +f 7442/1/7442 7454/1/7454 7443/1/7443 +f 7481/1/7481 7443/1/7443 7454/1/7454 +f 7442/1/7442 7453/1/7453 7454/1/7454 +f 7480/1/7480 7454/1/7454 7453/1/7453 +f 7450/1/7450 7453/1/7453 7442/1/7442 +f 7442/1/7442 7516/1/7516 7450/1/7450 +f 7450/1/7450 7449/1/7449 7453/1/7453 +f 7479/1/7479 7453/1/7453 7449/1/7449 +f 7448/1/7448 7449/1/7449 7450/1/7450 +f 7450/1/7450 7515/1/7515 7448/1/7448 +f 7448/1/7448 7472/1/7472 7449/1/7449 +f 7478/1/7478 7449/1/7449 7472/1/7472 +f 7448/1/7448 7452/1/7452 7472/1/7472 +f 7477/1/7477 7472/1/7472 7452/1/7452 +f 7451/1/7451 7452/1/7452 7448/1/7448 +f 7448/1/7448 7514/1/7514 7451/1/7451 +f 7451/1/7451 7456/1/7456 7452/1/7452 +f 7476/1/7476 7452/1/7452 7456/1/7456 +f 7455/1/7455 7456/1/7456 7451/1/7451 +f 7451/1/7451 7513/1/7513 7455/1/7455 +f 7455/1/7455 7459/1/7459 7456/1/7456 +f 7475/1/7475 7456/1/7456 7459/1/7459 +f 7455/1/7455 7458/1/7458 7459/1/7459 +f 7473/1/7473 7459/1/7459 7458/1/7458 +f 7457/1/7457 7458/1/7458 7455/1/7455 +f 7455/1/7455 7510/1/7510 7457/1/7457 +f 7457/1/7457 7461/1/7461 7458/1/7458 +f 7474/1/7474 7458/1/7458 7461/1/7461 +f 7460/1/7460 7461/1/7461 7457/1/7457 +f 7462/1/7462 7460/1/7460 7457/1/7457 +f 7457/1/7457 7509/1/7509 7462/1/7462 +f 7462/1/7462 7463/1/7463 7460/1/7460 +f 7492/1/7492 7460/1/7460 7463/1/7463 +f 7464/1/7464 7463/1/7463 7462/1/7462 +f 7462/1/7462 7512/1/7512 7464/1/7464 +f 7464/1/7464 7465/1/7465 7463/1/7463 +f 7493/1/7493 7463/1/7463 7465/1/7465 +f 7466/1/7466 7465/1/7465 7464/1/7464 +f 7467/1/7467 7466/1/7466 7464/1/7464 +f 7464/1/7464 7529/1/7529 7467/1/7467 +f 7467/1/7467 7468/1/7468 7466/1/7466 +f 7495/1/7495 7466/1/7466 7468/1/7468 +f 7469/1/7469 7468/1/7468 7467/1/7467 +f 7467/1/7467 7528/1/7528 7469/1/7469 +f 7469/1/7469 7470/1/7470 7468/1/7468 +f 7496/1/7496 7468/1/7468 7470/1/7470 +f 7469/1/7469 7471/1/7471 7470/1/7470 +f 7497/1/7497 7470/1/7470 7471/1/7471 +f 7447/1/7447 7471/1/7471 7469/1/7469 +f 7494/1/7494 7465/1/7465 7466/1/7466 +f 7491/1/7491 7461/1/7461 7460/1/7460 +f 7427/1/7427 7523/1/7523 7430/1/7430 +f 7432/1/7432 7522/1/7522 7521/1/7521 +f 7434/1/7434 7521/1/7521 7520/1/7520 +f 7436/1/7436 7520/1/7520 7519/1/7519 +f 7438/1/7438 7519/1/7519 7518/1/7518 +f 7440/1/7440 7518/1/7518 7517/1/7517 +f 7442/1/7442 7517/1/7517 7516/1/7516 +f 7450/1/7450 7516/1/7516 7515/1/7515 +f 7448/1/7448 7515/1/7515 7514/1/7514 +f 7451/1/7451 7514/1/7514 7513/1/7513 +f 7455/1/7455 7513/1/7513 7510/1/7510 +f 7457/1/7457 7510/1/7510 7509/1/7509 +f 7462/1/7462 7509/1/7509 7512/1/7512 +f 7464/1/7464 7512/1/7512 7529/1/7529 +f 7467/1/7467 7529/1/7529 7528/1/7528 +f 7469/1/7469 7528/1/7528 7530/1/7530 +f 7526/1/7526 7527/1/7527 7511/1/7511 +f 7469/1/7469 7530/1/7530 7447/1/7447 +f 7447/1/7447 7446/1/7446 7471/1/7471 +f 7498/1/7498 7471/1/7471 7446/1/7446 +f 7498/1/7498 7446/1/7446 7499/1/7499 +f 7497/1/7497 7471/1/7471 7498/1/7498 +f 7496/1/7496 7470/1/7470 7497/1/7497 +f 7495/1/7495 7468/1/7468 7496/1/7496 +f 7494/1/7494 7466/1/7466 7495/1/7495 +f 7493/1/7493 7465/1/7465 7494/1/7494 +f 7492/1/7492 7463/1/7463 7493/1/7493 +f 7491/1/7491 7460/1/7460 7492/1/7492 +f 7474/1/7474 7461/1/7461 7491/1/7491 +f 7473/1/7473 7458/1/7458 7474/1/7474 +f 7475/1/7475 7459/1/7459 7473/1/7473 +f 7476/1/7476 7456/1/7456 7475/1/7475 +f 7477/1/7477 7452/1/7452 7476/1/7476 +f 7478/1/7478 7472/1/7472 7477/1/7477 +f 7479/1/7479 7449/1/7449 7478/1/7478 +f 7480/1/7480 7453/1/7453 7479/1/7479 +f 7481/1/7481 7454/1/7454 7480/1/7480 +f 7482/1/7482 7443/1/7443 7481/1/7481 +f 7483/1/7483 7441/1/7441 7482/1/7482 +f 7484/1/7484 7485/1/7485 7483/1/7483 +f 7486/1/7486 7439/1/7439 7484/1/7484 +f 7487/1/7487 7488/1/7488 7486/1/7486 +f 7489/1/7489 7437/1/7437 7487/1/7487 +f 7490/1/7490 7435/1/7435 7489/1/7489 +f 7507/1/7507 7433/1/7433 7490/1/7490 +f 7506/1/7506 7431/1/7431 7507/1/7507 +f 7505/1/7505 7429/1/7429 7506/1/7506 +f 7504/1/7504 7428/1/7428 7505/1/7505 +f 7502/1/7502 7503/1/7503 7508/1/7508 +f 7504/1/7504 7426/1/7426 7428/1/7428 +f 7502/1/7502 7422/1/7422 7503/1/7503 +f 7427/1/7427 7428/1/7428 7426/1/7426 +f 7427/1/7427 7524/1/7524 7523/1/7523 +f 7511/1/7511 7524/1/7524 7525/1/7525 +f 7511/1/7511 7525/1/7525 7526/1/7526 +f 7444/1/7444 7527/1/7527 7526/1/7526 +f 7444/1/7444 7424/1/7424 7445/1/7445 +f 7501/1/7501 7424/1/7424 7423/1/7423 +f 7502/1/7502 7423/1/7423 7422/1/7422 +f 7425/1/7425 7422/1/7422 7421/1/7421 +f 7531/1/7531 7532/1/7532 7533/1/7533 +f 7531/1/7531 7533/1/7533 7534/1/7534 +f 7531/1/7531 7534/1/7534 7535/1/7535 +f 7535/1/7535 7636/1/7636 7531/1/7531 +f 7531/1/7531 7636/1/7636 7635/1/7635 +f 7531/1/7531 7635/1/7635 7536/1/7536 +f 7536/1/7536 7635/1/7635 7634/1/7634 +f 7536/1/7536 7634/1/7634 7538/1/7538 +f 7538/1/7538 7537/1/7537 7536/1/7536 +f 7536/1/7536 7537/1/7537 7532/1/7532 +f 7612/1/7612 7532/1/7532 7537/1/7537 +f 7612/1/7612 7537/1/7537 7613/1/7613 +f 7618/1/7618 7612/1/7612 7613/1/7613 +f 7618/1/7618 7613/1/7613 7614/1/7614 +f 7614/1/7614 7615/1/7615 7618/1/7618 +f 7618/1/7618 7615/1/7615 7616/1/7616 +f 7618/1/7618 7616/1/7616 7617/1/7617 +f 7617/1/7617 7601/1/7601 7618/1/7618 +f 7618/1/7618 7601/1/7601 7600/1/7600 +f 7618/1/7618 7600/1/7600 7599/1/7599 +f 7599/1/7599 7598/1/7598 7618/1/7618 +f 7618/1/7618 7598/1/7598 7597/1/7597 +f 7618/1/7618 7597/1/7597 7596/1/7596 +f 7596/1/7596 7595/1/7595 7618/1/7618 +f 7618/1/7618 7595/1/7595 7594/1/7594 +f 7618/1/7618 7594/1/7594 7593/1/7593 +f 7593/1/7593 7592/1/7592 7618/1/7618 +f 7618/1/7618 7592/1/7592 7591/1/7591 +f 7618/1/7618 7591/1/7591 7590/1/7590 +f 7590/1/7590 7587/1/7587 7618/1/7618 +f 7618/1/7618 7587/1/7587 7585/1/7585 +f 7618/1/7618 7585/1/7585 7586/1/7586 +f 7586/1/7586 7588/1/7588 7618/1/7618 +f 7618/1/7618 7588/1/7588 7589/1/7589 +f 7618/1/7618 7589/1/7589 7602/1/7602 +f 7602/1/7602 7603/1/7603 7618/1/7618 +f 7618/1/7618 7603/1/7603 7604/1/7604 +f 7618/1/7618 7604/1/7604 7605/1/7605 +f 7605/1/7605 7606/1/7606 7618/1/7618 +f 7618/1/7618 7606/1/7606 7607/1/7607 +f 7618/1/7618 7607/1/7607 7608/1/7608 +f 7608/1/7608 7609/1/7609 7618/1/7618 +f 7618/1/7618 7609/1/7609 7610/1/7610 +f 7618/1/7618 7610/1/7610 7611/1/7611 +f 7610/1/7610 7533/1/7533 7611/1/7611 +f 7609/1/7609 7534/1/7534 7610/1/7610 +f 7609/1/7609 7584/1/7584 7534/1/7534 +f 7608/1/7608 7584/1/7584 7609/1/7609 +f 7608/1/7608 7583/1/7583 7584/1/7584 +f 7535/1/7535 7584/1/7584 7583/1/7583 +f 7535/1/7535 7583/1/7583 7580/1/7580 +f 7580/1/7580 7637/1/7637 7535/1/7535 +f 7580/1/7580 7640/1/7640 7637/1/7637 +f 7621/1/7621 7637/1/7637 7640/1/7640 +f 7621/1/7621 7640/1/7640 7638/1/7638 +f 7638/1/7638 7639/1/7639 7621/1/7621 +f 7621/1/7621 7639/1/7639 7622/1/7622 +f 7621/1/7621 7622/1/7622 7619/1/7619 +f 7619/1/7619 7620/1/7620 7621/1/7621 +f 7621/1/7621 7620/1/7620 7623/1/7623 +f 7621/1/7621 7623/1/7623 7624/1/7624 +f 7624/1/7624 7625/1/7625 7621/1/7621 +f 7621/1/7621 7625/1/7625 7626/1/7626 +f 7621/1/7621 7626/1/7626 7627/1/7627 +f 7627/1/7627 7628/1/7628 7621/1/7621 +f 7621/1/7621 7628/1/7628 7629/1/7629 +f 7621/1/7621 7629/1/7629 7630/1/7630 +f 7630/1/7630 7631/1/7631 7621/1/7621 +f 7621/1/7621 7631/1/7631 7632/1/7632 +f 7621/1/7621 7632/1/7632 7633/1/7633 +f 7633/1/7633 7634/1/7634 7621/1/7621 +f 7540/1/7540 7633/1/7633 7632/1/7632 +f 7540/1/7540 7632/1/7632 7542/1/7542 +f 7542/1/7542 7543/1/7543 7540/1/7540 +f 7540/1/7540 7543/1/7543 7541/1/7541 +f 7540/1/7540 7541/1/7541 7538/1/7538 +f 7541/1/7541 7539/1/7539 7538/1/7538 +f 7614/1/7614 7539/1/7539 7541/1/7541 +f 7615/1/7615 7541/1/7541 7543/1/7543 +f 7542/1/7542 7546/1/7546 7543/1/7543 +f 7616/1/7616 7543/1/7543 7546/1/7546 +f 7542/1/7542 7545/1/7545 7546/1/7546 +f 7617/1/7617 7546/1/7546 7545/1/7545 +f 7544/1/7544 7545/1/7545 7542/1/7542 +f 7542/1/7542 7631/1/7631 7544/1/7544 +f 7544/1/7544 7548/1/7548 7545/1/7545 +f 7601/1/7601 7545/1/7545 7548/1/7548 +f 7547/1/7547 7548/1/7548 7544/1/7544 +f 7544/1/7544 7630/1/7630 7547/1/7547 +f 7547/1/7547 7551/1/7551 7548/1/7548 +f 7600/1/7600 7548/1/7548 7551/1/7551 +f 7547/1/7547 7550/1/7550 7551/1/7551 +f 7599/1/7599 7551/1/7551 7550/1/7550 +f 7549/1/7549 7550/1/7550 7547/1/7547 +f 7547/1/7547 7629/1/7629 7549/1/7549 +f 7549/1/7549 7554/1/7554 7550/1/7550 +f 7598/1/7598 7550/1/7550 7554/1/7554 +f 7549/1/7549 7553/1/7553 7554/1/7554 +f 7597/1/7597 7554/1/7554 7553/1/7553 +f 7552/1/7552 7553/1/7553 7549/1/7549 +f 7549/1/7549 7628/1/7628 7552/1/7552 +f 7552/1/7552 7556/1/7556 7553/1/7553 +f 7596/1/7596 7553/1/7553 7556/1/7556 +f 7555/1/7555 7556/1/7556 7552/1/7552 +f 7552/1/7552 7627/1/7627 7555/1/7555 +f 7555/1/7555 7559/1/7559 7556/1/7556 +f 7595/1/7595 7556/1/7556 7559/1/7559 +f 7555/1/7555 7558/1/7558 7559/1/7559 +f 7594/1/7594 7559/1/7559 7558/1/7558 +f 7557/1/7557 7558/1/7558 7555/1/7555 +f 7555/1/7555 7626/1/7626 7557/1/7557 +f 7557/1/7557 7561/1/7561 7558/1/7558 +f 7593/1/7593 7558/1/7558 7561/1/7561 +f 7560/1/7560 7561/1/7561 7557/1/7557 +f 7557/1/7557 7625/1/7625 7560/1/7560 +f 7560/1/7560 7564/1/7564 7561/1/7561 +f 7592/1/7592 7561/1/7561 7564/1/7564 +f 7560/1/7560 7563/1/7563 7564/1/7564 +f 7591/1/7591 7564/1/7564 7563/1/7563 +f 7562/1/7562 7563/1/7563 7560/1/7560 +f 7560/1/7560 7624/1/7624 7562/1/7562 +f 7562/1/7562 7566/1/7566 7563/1/7563 +f 7590/1/7590 7563/1/7563 7566/1/7566 +f 7565/1/7565 7566/1/7566 7562/1/7562 +f 7562/1/7562 7623/1/7623 7565/1/7565 +f 7565/1/7565 7569/1/7569 7566/1/7566 +f 7587/1/7587 7566/1/7566 7569/1/7569 +f 7565/1/7565 7568/1/7568 7569/1/7569 +f 7585/1/7585 7569/1/7569 7568/1/7568 +f 7567/1/7567 7568/1/7568 7565/1/7565 +f 7565/1/7565 7620/1/7620 7567/1/7567 +f 7567/1/7567 7571/1/7571 7568/1/7568 +f 7586/1/7586 7568/1/7568 7571/1/7571 +f 7570/1/7570 7571/1/7571 7567/1/7567 +f 7572/1/7572 7570/1/7570 7567/1/7567 +f 7567/1/7567 7619/1/7619 7572/1/7572 +f 7572/1/7572 7573/1/7573 7570/1/7570 +f 7589/1/7589 7570/1/7570 7573/1/7573 +f 7574/1/7574 7573/1/7573 7572/1/7572 +f 7572/1/7572 7622/1/7622 7574/1/7574 +f 7574/1/7574 7575/1/7575 7573/1/7573 +f 7602/1/7602 7573/1/7573 7575/1/7575 +f 7577/1/7577 7575/1/7575 7574/1/7574 +f 7576/1/7576 7577/1/7577 7574/1/7574 +f 7574/1/7574 7639/1/7639 7576/1/7576 +f 7576/1/7576 7579/1/7579 7577/1/7577 +f 7604/1/7604 7577/1/7577 7579/1/7579 +f 7578/1/7578 7579/1/7579 7576/1/7576 +f 7576/1/7576 7638/1/7638 7578/1/7578 +f 7578/1/7578 7582/1/7582 7579/1/7579 +f 7605/1/7605 7579/1/7579 7582/1/7582 +f 7578/1/7578 7581/1/7581 7582/1/7582 +f 7606/1/7606 7582/1/7582 7581/1/7581 +f 7580/1/7580 7581/1/7581 7578/1/7578 +f 7603/1/7603 7575/1/7575 7577/1/7577 +f 7588/1/7588 7571/1/7571 7570/1/7570 +f 7538/1/7538 7633/1/7633 7540/1/7540 +f 7542/1/7542 7632/1/7632 7631/1/7631 +f 7544/1/7544 7631/1/7631 7630/1/7630 +f 7547/1/7547 7630/1/7630 7629/1/7629 +f 7549/1/7549 7629/1/7629 7628/1/7628 +f 7552/1/7552 7628/1/7628 7627/1/7627 +f 7555/1/7555 7627/1/7627 7626/1/7626 +f 7557/1/7557 7626/1/7626 7625/1/7625 +f 7560/1/7560 7625/1/7625 7624/1/7624 +f 7562/1/7562 7624/1/7624 7623/1/7623 +f 7565/1/7565 7623/1/7623 7620/1/7620 +f 7567/1/7567 7620/1/7620 7619/1/7619 +f 7572/1/7572 7619/1/7619 7622/1/7622 +f 7574/1/7574 7622/1/7622 7639/1/7639 +f 7576/1/7576 7639/1/7639 7638/1/7638 +f 7578/1/7578 7638/1/7638 7640/1/7640 +f 7636/1/7636 7637/1/7637 7621/1/7621 +f 7578/1/7578 7640/1/7640 7580/1/7580 +f 7580/1/7580 7583/1/7583 7581/1/7581 +f 7607/1/7607 7581/1/7581 7583/1/7583 +f 7607/1/7607 7583/1/7583 7608/1/7608 +f 7606/1/7606 7581/1/7581 7607/1/7607 +f 7605/1/7605 7582/1/7582 7606/1/7606 +f 7604/1/7604 7579/1/7579 7605/1/7605 +f 7603/1/7603 7577/1/7577 7604/1/7604 +f 7602/1/7602 7575/1/7575 7603/1/7603 +f 7589/1/7589 7573/1/7573 7602/1/7602 +f 7588/1/7588 7570/1/7570 7589/1/7589 +f 7586/1/7586 7571/1/7571 7588/1/7588 +f 7585/1/7585 7568/1/7568 7586/1/7586 +f 7587/1/7587 7569/1/7569 7585/1/7585 +f 7590/1/7590 7566/1/7566 7587/1/7587 +f 7591/1/7591 7563/1/7563 7590/1/7590 +f 7592/1/7592 7564/1/7564 7591/1/7591 +f 7593/1/7593 7561/1/7561 7592/1/7592 +f 7594/1/7594 7558/1/7558 7593/1/7593 +f 7595/1/7595 7559/1/7559 7594/1/7594 +f 7596/1/7596 7556/1/7556 7595/1/7595 +f 7597/1/7597 7553/1/7553 7596/1/7596 +f 7598/1/7598 7554/1/7554 7597/1/7597 +f 7599/1/7599 7550/1/7550 7598/1/7598 +f 7600/1/7600 7551/1/7551 7599/1/7599 +f 7601/1/7601 7548/1/7548 7600/1/7600 +f 7617/1/7617 7545/1/7545 7601/1/7601 +f 7616/1/7616 7546/1/7546 7617/1/7617 +f 7615/1/7615 7543/1/7543 7616/1/7616 +f 7614/1/7614 7541/1/7541 7615/1/7615 +f 7613/1/7613 7539/1/7539 7614/1/7614 +f 7611/1/7611 7612/1/7612 7618/1/7618 +f 7613/1/7613 7537/1/7537 7539/1/7539 +f 7611/1/7611 7532/1/7532 7612/1/7612 +f 7538/1/7538 7539/1/7539 7537/1/7537 +f 7538/1/7538 7634/1/7634 7633/1/7633 +f 7621/1/7621 7634/1/7634 7635/1/7635 +f 7621/1/7621 7635/1/7635 7636/1/7636 +f 7535/1/7535 7637/1/7637 7636/1/7636 +f 7535/1/7535 7534/1/7534 7584/1/7584 +f 7610/1/7610 7534/1/7534 7533/1/7533 +f 7611/1/7611 7533/1/7533 7532/1/7532 +f 7536/1/7536 7532/1/7532 7531/1/7531 +f 7641/1/7641 7642/1/7642 7643/1/7643 +f 7641/1/7641 7643/1/7643 7644/1/7644 +f 7641/1/7641 7644/1/7644 7645/1/7645 +f 7645/1/7645 7746/1/7746 7641/1/7641 +f 7641/1/7641 7746/1/7746 7745/1/7745 +f 7641/1/7641 7745/1/7745 7646/1/7646 +f 7646/1/7646 7745/1/7745 7744/1/7744 +f 7646/1/7646 7744/1/7744 7648/1/7648 +f 7648/1/7648 7647/1/7647 7646/1/7646 +f 7646/1/7646 7647/1/7647 7642/1/7642 +f 7709/1/7709 7642/1/7642 7647/1/7647 +f 7709/1/7709 7647/1/7647 7710/1/7710 +f 7728/1/7728 7709/1/7709 7710/1/7710 +f 7728/1/7728 7710/1/7710 7711/1/7711 +f 7711/1/7711 7712/1/7712 7728/1/7728 +f 7728/1/7728 7712/1/7712 7713/1/7713 +f 7728/1/7728 7713/1/7713 7714/1/7714 +f 7714/1/7714 7715/1/7715 7728/1/7728 +f 7728/1/7728 7715/1/7715 7716/1/7716 +f 7728/1/7728 7716/1/7716 7717/1/7717 +f 7717/1/7717 7718/1/7718 7728/1/7728 +f 7728/1/7728 7718/1/7718 7719/1/7719 +f 7728/1/7728 7719/1/7719 7720/1/7720 +f 7720/1/7720 7721/1/7721 7728/1/7728 +f 7728/1/7728 7721/1/7721 7722/1/7722 +f 7728/1/7728 7722/1/7722 7723/1/7723 +f 7723/1/7723 7724/1/7724 7728/1/7728 +f 7728/1/7728 7724/1/7724 7725/1/7725 +f 7728/1/7728 7725/1/7725 7726/1/7726 +f 7726/1/7726 7727/1/7727 7728/1/7728 +f 7728/1/7728 7727/1/7727 7695/1/7695 +f 7728/1/7728 7695/1/7695 7696/1/7696 +f 7696/1/7696 7697/1/7697 7728/1/7728 +f 7728/1/7728 7697/1/7697 7698/1/7698 +f 7728/1/7728 7698/1/7698 7699/1/7699 +f 7699/1/7699 7700/1/7700 7728/1/7728 +f 7728/1/7728 7700/1/7700 7701/1/7701 +f 7728/1/7728 7701/1/7701 7702/1/7702 +f 7702/1/7702 7703/1/7703 7728/1/7728 +f 7728/1/7728 7703/1/7703 7704/1/7704 +f 7728/1/7728 7704/1/7704 7705/1/7705 +f 7705/1/7705 7706/1/7706 7728/1/7728 +f 7728/1/7728 7706/1/7706 7707/1/7707 +f 7728/1/7728 7707/1/7707 7708/1/7708 +f 7707/1/7707 7643/1/7643 7708/1/7708 +f 7706/1/7706 7644/1/7644 7707/1/7707 +f 7706/1/7706 7694/1/7694 7644/1/7644 +f 7705/1/7705 7694/1/7694 7706/1/7706 +f 7705/1/7705 7693/1/7693 7694/1/7694 +f 7645/1/7645 7694/1/7694 7693/1/7693 +f 7645/1/7645 7693/1/7693 7690/1/7690 +f 7690/1/7690 7747/1/7747 7645/1/7645 +f 7690/1/7690 7750/1/7750 7747/1/7747 +f 7731/1/7731 7747/1/7747 7750/1/7750 +f 7731/1/7731 7750/1/7750 7748/1/7748 +f 7748/1/7748 7749/1/7749 7731/1/7731 +f 7731/1/7731 7749/1/7749 7732/1/7732 +f 7731/1/7731 7732/1/7732 7729/1/7729 +f 7729/1/7729 7730/1/7730 7731/1/7731 +f 7731/1/7731 7730/1/7730 7733/1/7733 +f 7731/1/7731 7733/1/7733 7734/1/7734 +f 7734/1/7734 7735/1/7735 7731/1/7731 +f 7731/1/7731 7735/1/7735 7736/1/7736 +f 7731/1/7731 7736/1/7736 7737/1/7737 +f 7737/1/7737 7738/1/7738 7731/1/7731 +f 7731/1/7731 7738/1/7738 7739/1/7739 +f 7731/1/7731 7739/1/7739 7740/1/7740 +f 7740/1/7740 7741/1/7741 7731/1/7731 +f 7731/1/7731 7741/1/7741 7742/1/7742 +f 7731/1/7731 7742/1/7742 7743/1/7743 +f 7743/1/7743 7744/1/7744 7731/1/7731 +f 7650/1/7650 7743/1/7743 7742/1/7742 +f 7650/1/7650 7742/1/7742 7652/1/7652 +f 7652/1/7652 7653/1/7653 7650/1/7650 +f 7650/1/7650 7653/1/7653 7651/1/7651 +f 7650/1/7650 7651/1/7651 7648/1/7648 +f 7651/1/7651 7649/1/7649 7648/1/7648 +f 7711/1/7711 7649/1/7649 7651/1/7651 +f 7712/1/7712 7651/1/7651 7653/1/7653 +f 7652/1/7652 7656/1/7656 7653/1/7653 +f 7713/1/7713 7653/1/7653 7656/1/7656 +f 7652/1/7652 7655/1/7655 7656/1/7656 +f 7714/1/7714 7656/1/7656 7655/1/7655 +f 7654/1/7654 7655/1/7655 7652/1/7652 +f 7652/1/7652 7741/1/7741 7654/1/7654 +f 7654/1/7654 7658/1/7658 7655/1/7655 +f 7715/1/7715 7655/1/7655 7658/1/7658 +f 7657/1/7657 7658/1/7658 7654/1/7654 +f 7654/1/7654 7740/1/7740 7657/1/7657 +f 7657/1/7657 7661/1/7661 7658/1/7658 +f 7716/1/7716 7658/1/7658 7661/1/7661 +f 7657/1/7657 7660/1/7660 7661/1/7661 +f 7717/1/7717 7661/1/7661 7660/1/7660 +f 7659/1/7659 7660/1/7660 7657/1/7657 +f 7657/1/7657 7739/1/7739 7659/1/7659 +f 7659/1/7659 7664/1/7664 7660/1/7660 +f 7718/1/7718 7660/1/7660 7664/1/7664 +f 7659/1/7659 7663/1/7663 7664/1/7664 +f 7719/1/7719 7664/1/7664 7663/1/7663 +f 7662/1/7662 7663/1/7663 7659/1/7659 +f 7659/1/7659 7738/1/7738 7662/1/7662 +f 7662/1/7662 7666/1/7666 7663/1/7663 +f 7720/1/7720 7663/1/7663 7666/1/7666 +f 7665/1/7665 7666/1/7666 7662/1/7662 +f 7662/1/7662 7737/1/7737 7665/1/7665 +f 7665/1/7665 7669/1/7669 7666/1/7666 +f 7721/1/7721 7666/1/7666 7669/1/7669 +f 7665/1/7665 7668/1/7668 7669/1/7669 +f 7722/1/7722 7669/1/7669 7668/1/7668 +f 7667/1/7667 7668/1/7668 7665/1/7665 +f 7665/1/7665 7736/1/7736 7667/1/7667 +f 7667/1/7667 7671/1/7671 7668/1/7668 +f 7723/1/7723 7668/1/7668 7671/1/7671 +f 7670/1/7670 7671/1/7671 7667/1/7667 +f 7667/1/7667 7735/1/7735 7670/1/7670 +f 7670/1/7670 7674/1/7674 7671/1/7671 +f 7724/1/7724 7671/1/7671 7674/1/7674 +f 7670/1/7670 7673/1/7673 7674/1/7674 +f 7725/1/7725 7674/1/7674 7673/1/7673 +f 7672/1/7672 7673/1/7673 7670/1/7670 +f 7670/1/7670 7734/1/7734 7672/1/7672 +f 7672/1/7672 7676/1/7676 7673/1/7673 +f 7726/1/7726 7673/1/7673 7676/1/7676 +f 7675/1/7675 7676/1/7676 7672/1/7672 +f 7672/1/7672 7733/1/7733 7675/1/7675 +f 7675/1/7675 7679/1/7679 7676/1/7676 +f 7727/1/7727 7676/1/7676 7679/1/7679 +f 7675/1/7675 7678/1/7678 7679/1/7679 +f 7695/1/7695 7679/1/7679 7678/1/7678 +f 7677/1/7677 7678/1/7678 7675/1/7675 +f 7675/1/7675 7730/1/7730 7677/1/7677 +f 7677/1/7677 7681/1/7681 7678/1/7678 +f 7696/1/7696 7678/1/7678 7681/1/7681 +f 7680/1/7680 7681/1/7681 7677/1/7677 +f 7682/1/7682 7680/1/7680 7677/1/7677 +f 7677/1/7677 7729/1/7729 7682/1/7682 +f 7682/1/7682 7683/1/7683 7680/1/7680 +f 7698/1/7698 7680/1/7680 7683/1/7683 +f 7684/1/7684 7683/1/7683 7682/1/7682 +f 7682/1/7682 7732/1/7732 7684/1/7684 +f 7684/1/7684 7685/1/7685 7683/1/7683 +f 7699/1/7699 7683/1/7683 7685/1/7685 +f 7687/1/7687 7685/1/7685 7684/1/7684 +f 7686/1/7686 7687/1/7687 7684/1/7684 +f 7684/1/7684 7749/1/7749 7686/1/7686 +f 7686/1/7686 7689/1/7689 7687/1/7687 +f 7701/1/7701 7687/1/7687 7689/1/7689 +f 7688/1/7688 7689/1/7689 7686/1/7686 +f 7686/1/7686 7748/1/7748 7688/1/7688 +f 7688/1/7688 7692/1/7692 7689/1/7689 +f 7702/1/7702 7689/1/7689 7692/1/7692 +f 7688/1/7688 7691/1/7691 7692/1/7692 +f 7703/1/7703 7692/1/7692 7691/1/7691 +f 7690/1/7690 7691/1/7691 7688/1/7688 +f 7700/1/7700 7685/1/7685 7687/1/7687 +f 7697/1/7697 7681/1/7681 7680/1/7680 +f 7648/1/7648 7743/1/7743 7650/1/7650 +f 7652/1/7652 7742/1/7742 7741/1/7741 +f 7654/1/7654 7741/1/7741 7740/1/7740 +f 7657/1/7657 7740/1/7740 7739/1/7739 +f 7659/1/7659 7739/1/7739 7738/1/7738 +f 7662/1/7662 7738/1/7738 7737/1/7737 +f 7665/1/7665 7737/1/7737 7736/1/7736 +f 7667/1/7667 7736/1/7736 7735/1/7735 +f 7670/1/7670 7735/1/7735 7734/1/7734 +f 7672/1/7672 7734/1/7734 7733/1/7733 +f 7675/1/7675 7733/1/7733 7730/1/7730 +f 7677/1/7677 7730/1/7730 7729/1/7729 +f 7682/1/7682 7729/1/7729 7732/1/7732 +f 7684/1/7684 7732/1/7732 7749/1/7749 +f 7686/1/7686 7749/1/7749 7748/1/7748 +f 7688/1/7688 7748/1/7748 7750/1/7750 +f 7746/1/7746 7747/1/7747 7731/1/7731 +f 7688/1/7688 7750/1/7750 7690/1/7690 +f 7690/1/7690 7693/1/7693 7691/1/7691 +f 7704/1/7704 7691/1/7691 7693/1/7693 +f 7704/1/7704 7693/1/7693 7705/1/7705 +f 7703/1/7703 7691/1/7691 7704/1/7704 +f 7702/1/7702 7692/1/7692 7703/1/7703 +f 7701/1/7701 7689/1/7689 7702/1/7702 +f 7700/1/7700 7687/1/7687 7701/1/7701 +f 7699/1/7699 7685/1/7685 7700/1/7700 +f 7698/1/7698 7683/1/7683 7699/1/7699 +f 7697/1/7697 7680/1/7680 7698/1/7698 +f 7696/1/7696 7681/1/7681 7697/1/7697 +f 7695/1/7695 7678/1/7678 7696/1/7696 +f 7727/1/7727 7679/1/7679 7695/1/7695 +f 7726/1/7726 7676/1/7676 7727/1/7727 +f 7725/1/7725 7673/1/7673 7726/1/7726 +f 7724/1/7724 7674/1/7674 7725/1/7725 +f 7723/1/7723 7671/1/7671 7724/1/7724 +f 7722/1/7722 7668/1/7668 7723/1/7723 +f 7721/1/7721 7669/1/7669 7722/1/7722 +f 7720/1/7720 7666/1/7666 7721/1/7721 +f 7719/1/7719 7663/1/7663 7720/1/7720 +f 7718/1/7718 7664/1/7664 7719/1/7719 +f 7717/1/7717 7660/1/7660 7718/1/7718 +f 7716/1/7716 7661/1/7661 7717/1/7717 +f 7715/1/7715 7658/1/7658 7716/1/7716 +f 7714/1/7714 7655/1/7655 7715/1/7715 +f 7713/1/7713 7656/1/7656 7714/1/7714 +f 7712/1/7712 7653/1/7653 7713/1/7713 +f 7711/1/7711 7651/1/7651 7712/1/7712 +f 7710/1/7710 7649/1/7649 7711/1/7711 +f 7708/1/7708 7709/1/7709 7728/1/7728 +f 7710/1/7710 7647/1/7647 7649/1/7649 +f 7708/1/7708 7642/1/7642 7709/1/7709 +f 7648/1/7648 7649/1/7649 7647/1/7647 +f 7648/1/7648 7744/1/7744 7743/1/7743 +f 7731/1/7731 7744/1/7744 7745/1/7745 +f 7731/1/7731 7745/1/7745 7746/1/7746 +f 7645/1/7645 7747/1/7747 7746/1/7746 +f 7645/1/7645 7644/1/7644 7694/1/7694 +f 7707/1/7707 7644/1/7644 7643/1/7643 +f 7708/1/7708 7643/1/7643 7642/1/7642 +f 7646/1/7646 7642/1/7642 7641/1/7641 +f 7751/1/7751 7752/1/7752 7753/1/7753 +f 7751/1/7751 7753/1/7753 7754/1/7754 +f 7755/1/7755 7751/1/7751 7754/1/7754 +f 7755/1/7755 7754/1/7754 7759/1/7759 +f 7760/1/7760 7755/1/7755 7759/1/7759 +f 7760/1/7760 7759/1/7759 7761/1/7761 +f 7765/1/7765 7760/1/7760 7761/1/7761 +f 7765/1/7765 7761/1/7761 7766/1/7766 +f 7769/1/7769 7765/1/7765 7766/1/7766 +f 7770/1/7770 7769/1/7769 7766/1/7766 +f 7770/1/7770 7766/1/7766 7768/1/7768 +f 7802/1/7802 7770/1/7770 7768/1/7768 +f 7802/1/7802 7768/1/7768 7803/1/7803 +f 7803/1/7803 7804/1/7804 7802/1/7802 +f 7802/1/7802 7804/1/7804 7805/1/7805 +f 7802/1/7802 7805/1/7805 7800/1/7800 +f 7800/1/7800 7799/1/7799 7802/1/7802 +f 7800/1/7800 7801/1/7801 7799/1/7799 +f 7801/1/7801 7798/1/7798 7799/1/7799 +f 7799/1/7799 7798/1/7798 7769/1/7769 +f 7796/1/7796 7769/1/7769 7798/1/7798 +f 7797/1/7797 7796/1/7796 7798/1/7798 +f 7797/1/7797 7798/1/7798 7909/1/7909 +f 7905/1/7905 7797/1/7797 7909/1/7909 +f 7905/1/7905 7909/1/7909 7907/1/7907 +f 7907/1/7907 7908/1/7908 7905/1/7905 +f 7908/1/7908 7906/1/7906 7905/1/7905 +f 7905/1/7905 7906/1/7906 7904/1/7904 +f 7905/1/7905 7904/1/7904 7790/1/7790 +f 7790/1/7790 7904/1/7904 7791/1/7791 +f 7790/1/7790 7791/1/7791 7786/1/7786 +f 7786/1/7786 7789/1/7789 7790/1/7790 +f 7789/1/7789 7795/1/7795 7790/1/7790 +f 7790/1/7790 7795/1/7795 7797/1/7797 +f 7789/1/7789 7794/1/7794 7795/1/7795 +f 7795/1/7795 7794/1/7794 7796/1/7796 +f 7794/1/7794 7774/1/7774 7796/1/7796 +f 7794/1/7794 7793/1/7793 7774/1/7774 +f 7774/1/7774 7793/1/7793 7792/1/7792 +f 7774/1/7774 7792/1/7792 7775/1/7775 +f 7775/1/7775 7772/1/7772 7774/1/7774 +f 7774/1/7774 7772/1/7772 7771/1/7771 +f 7774/1/7774 7771/1/7771 7769/1/7769 +f 7772/1/7772 7773/1/7773 7771/1/7771 +f 7771/1/7771 7773/1/7773 7760/1/7760 +f 7772/1/7772 7776/1/7776 7773/1/7773 +f 7776/1/7776 7777/1/7777 7773/1/7773 +f 7773/1/7773 7777/1/7777 7755/1/7755 +f 7777/1/7777 7756/1/7756 7755/1/7755 +f 7777/1/7777 7779/1/7779 7756/1/7756 +f 7756/1/7756 7779/1/7779 7752/1/7752 +f 7779/1/7779 7782/1/7782 7752/1/7752 +f 7752/1/7752 7782/1/7782 7758/1/7758 +f 7782/1/7782 7902/1/7902 7758/1/7758 +f 7758/1/7758 7902/1/7902 7914/1/7914 +f 7758/1/7758 7914/1/7914 7952/1/7952 +f 7952/1/7952 7953/1/7953 7758/1/7758 +f 7758/1/7758 7953/1/7953 7757/1/7757 +f 7753/1/7753 7758/1/7758 7757/1/7757 +f 7954/1/7954 7757/1/7757 7953/1/7953 +f 7954/1/7954 7953/1/7953 7958/1/7958 +f 7759/1/7759 7954/1/7954 7958/1/7958 +f 7764/1/7764 7759/1/7759 7958/1/7958 +f 7958/1/7958 7960/1/7960 7764/1/7764 +f 7764/1/7764 7960/1/7960 7956/1/7956 +f 7764/1/7764 7956/1/7956 7763/1/7763 +f 7956/1/7956 7957/1/7957 7763/1/7763 +f 7763/1/7763 7957/1/7957 7955/1/7955 +f 7763/1/7763 7955/1/7955 7767/1/7767 +f 7767/1/7767 7762/1/7762 7763/1/7763 +f 7763/1/7763 7762/1/7762 7759/1/7759 +f 7766/1/7766 7762/1/7762 7767/1/7767 +f 7767/1/7767 7955/1/7955 7768/1/7768 +f 7957/1/7957 7967/1/7967 7955/1/7955 +f 7803/1/7803 7955/1/7955 7967/1/7967 +f 7957/1/7957 7966/1/7966 7967/1/7967 +f 7966/1/7966 7968/1/7968 7967/1/7967 +f 7968/1/7968 7812/1/7812 7967/1/7967 +f 7967/1/7967 7812/1/7812 7804/1/7804 +f 7968/1/7968 7993/1/7993 7812/1/7812 +f 7993/1/7993 7805/1/7805 7812/1/7812 +f 7993/1/7993 7994/1/7994 7805/1/7805 +f 7994/1/7994 7811/1/7811 7805/1/7805 +f 7805/1/7805 7811/1/7811 7809/1/7809 +f 7805/1/7805 7809/1/7809 7806/1/7806 +f 7809/1/7809 7810/1/7810 7806/1/7806 +f 7806/1/7806 7810/1/7810 7808/1/7808 +f 7807/1/7807 7806/1/7806 7808/1/7808 +f 7808/1/7808 7910/1/7910 7807/1/7807 +f 7807/1/7807 7910/1/7910 7907/1/7907 +f 7798/1/7798 7807/1/7807 7907/1/7907 +f 7819/1/7819 7910/1/7910 7808/1/7808 +f 7819/1/7819 7808/1/7808 7814/1/7814 +f 7818/1/7818 7819/1/7819 7814/1/7814 +f 7814/1/7814 7820/1/7820 7818/1/7818 +f 7820/1/7820 7824/1/7824 7818/1/7818 +f 7824/1/7824 7827/1/7827 7818/1/7818 +f 7818/1/7818 7827/1/7827 7911/1/7911 +f 7911/1/7911 7827/1/7827 7906/1/7906 +f 7906/1/7906 7827/1/7827 7826/1/7826 +f 7826/1/7826 7889/1/7889 7906/1/7906 +f 7906/1/7906 7889/1/7889 7885/1/7885 +f 7889/1/7889 7871/1/7871 7885/1/7885 +f 7871/1/7871 7884/1/7884 7885/1/7885 +f 7904/1/7904 7885/1/7885 7884/1/7884 +f 7871/1/7871 7888/1/7888 7884/1/7884 +f 7791/1/7791 7884/1/7884 7888/1/7888 +f 7791/1/7791 7888/1/7888 7787/1/7787 +f 7787/1/7787 7888/1/7888 7788/1/7788 +f 7787/1/7787 7788/1/7788 7784/1/7784 +f 7786/1/7786 7787/1/7787 7784/1/7784 +f 7786/1/7786 7784/1/7784 7781/1/7781 +f 7781/1/7781 7785/1/7785 7786/1/7786 +f 7781/1/7781 7775/1/7775 7785/1/7785 +f 7781/1/7781 7778/1/7778 7775/1/7775 +f 7775/1/7775 7778/1/7778 7776/1/7776 +f 7781/1/7781 7780/1/7780 7778/1/7778 +f 7778/1/7778 7780/1/7780 7779/1/7779 +f 7784/1/7784 7780/1/7780 7781/1/7781 +f 7784/1/7784 7783/1/7783 7780/1/7780 +f 7780/1/7780 7783/1/7783 7782/1/7782 +f 7788/1/7788 7783/1/7783 7784/1/7784 +f 7788/1/7788 7900/1/7900 7783/1/7783 +f 7902/1/7902 7783/1/7783 7900/1/7900 +f 7900/1/7900 7903/1/7903 7902/1/7902 +f 7902/1/7902 7903/1/7903 7912/1/7912 +f 7903/1/7903 7913/1/7913 7912/1/7912 +f 7912/1/7912 7913/1/7913 7916/1/7916 +f 7912/1/7912 7916/1/7916 7915/1/7915 +f 7914/1/7914 7912/1/7912 7915/1/7915 +f 7914/1/7914 7915/1/7915 7943/1/7943 +f 7943/1/7943 7915/1/7915 7942/1/7942 +f 7943/1/7943 7942/1/7942 7982/1/7982 +f 7952/1/7952 7943/1/7943 7982/1/7982 +f 7982/1/7982 7963/1/7963 7952/1/7952 +f 7963/1/7963 7959/1/7959 7952/1/7952 +f 7962/1/7962 7959/1/7959 7963/1/7963 +f 7962/1/7962 7963/1/7963 7981/1/7981 +f 7962/1/7962 7981/1/7981 7980/1/7980 +f 7965/1/7965 7962/1/7962 7980/1/7980 +f 7965/1/7965 7980/1/7980 7979/1/7979 +f 7979/1/7979 7978/1/7978 7965/1/7965 +f 7978/1/7978 7964/1/7964 7965/1/7965 +f 7964/1/7964 7961/1/7961 7965/1/7965 +f 7960/1/7960 7961/1/7961 7964/1/7964 +f 7974/1/7974 7964/1/7964 7978/1/7978 +f 7974/1/7974 7969/1/7969 7964/1/7964 +f 7969/1/7969 7966/1/7966 7964/1/7964 +f 7956/1/7956 7964/1/7964 7966/1/7966 +f 7969/1/7969 7970/1/7970 7966/1/7966 +f 7970/1/7970 7971/1/7971 7966/1/7966 +f 7970/1/7970 7989/1/7989 7971/1/7971 +f 7989/1/7989 7990/1/7990 7971/1/7971 +f 7971/1/7971 7990/1/7990 7993/1/7993 +f 7989/1/7989 7988/1/7988 7990/1/7990 +f 7988/1/7988 7992/1/7992 7990/1/7990 +f 7990/1/7990 7992/1/7992 7994/1/7994 +f 7992/1/7992 7995/1/7995 7994/1/7994 +f 7994/1/7994 7995/1/7995 7996/1/7996 +f 7995/1/7995 7997/1/7997 7996/1/7996 +f 7996/1/7996 7997/1/7997 7816/1/7816 +f 7996/1/7996 7816/1/7816 7811/1/7811 +f 7811/1/7811 7816/1/7816 7813/1/7813 +f 7816/1/7816 7815/1/7815 7813/1/7813 +f 7815/1/7815 7810/1/7810 7813/1/7813 +f 7814/1/7814 7810/1/7810 7815/1/7815 +f 7815/1/7815 7817/1/7817 7814/1/7814 +f 7815/1/7815 7821/1/7821 7817/1/7817 +f 7821/1/7821 7822/1/7822 7817/1/7817 +f 7817/1/7817 7822/1/7822 7823/1/7823 +f 7817/1/7817 7823/1/7823 7820/1/7820 +f 7822/1/7822 7828/1/7828 7823/1/7823 +f 7823/1/7823 7828/1/7828 7825/1/7825 +f 7823/1/7823 7825/1/7825 7824/1/7824 +f 7825/1/7825 7826/1/7826 7824/1/7824 +f 7825/1/7825 7830/1/7830 7826/1/7826 +f 7826/1/7826 7830/1/7830 7871/1/7871 +f 7871/1/7871 7830/1/7830 7872/1/7872 +f 7871/1/7871 7872/1/7872 7873/1/7873 +f 7873/1/7873 8060/1/8060 7871/1/7871 +f 8061/1/8061 7871/1/7871 8060/1/8060 +f 8060/1/8060 8059/1/8059 8061/1/8061 +f 8061/1/8061 8059/1/8059 8148/1/8148 +f 8148/1/8148 7890/1/7890 8061/1/8061 +f 8061/1/8061 7890/1/7890 7886/1/7886 +f 7890/1/7890 7891/1/7891 7886/1/7886 +f 7886/1/7886 7891/1/7891 7887/1/7887 +f 7886/1/7886 7887/1/7887 7871/1/7871 +f 7887/1/7887 7891/1/7891 7893/1/7893 +f 7893/1/7893 7898/1/7898 7887/1/7887 +f 7887/1/7887 7898/1/7898 7899/1/7899 +f 7887/1/7887 7899/1/7899 7900/1/7900 +f 7900/1/7900 7899/1/7899 7901/1/7901 +f 8056/1/8056 7901/1/7901 7899/1/7899 +f 8056/1/8056 7899/1/7899 8059/1/8059 +f 8059/1/8059 8051/1/8051 8056/1/8056 +f 8051/1/8051 8052/1/8052 8056/1/8056 +f 8056/1/8056 8052/1/8052 8053/1/8053 +f 8056/1/8056 8053/1/8053 8057/1/8057 +f 8057/1/8057 8053/1/8053 8058/1/8058 +f 8058/1/8058 8189/1/8189 8057/1/8057 +f 8057/1/8057 8189/1/8189 8186/1/8186 +f 8057/1/8057 8186/1/8186 8185/1/8185 +f 8185/1/8185 8183/1/8183 8057/1/8057 +f 8057/1/8057 8183/1/8183 8182/1/8182 +f 8057/1/8057 8182/1/8182 8180/1/8180 +f 8180/1/8180 8178/1/8178 8057/1/8057 +f 8057/1/8057 8178/1/8178 8175/1/8175 +f 8057/1/8057 8175/1/8175 8170/1/8170 +f 8170/1/8170 8168/1/8168 8057/1/8057 +f 8057/1/8057 8168/1/8168 8167/1/8167 +f 8057/1/8057 8167/1/8167 8166/1/8166 +f 8166/1/8166 8153/1/8153 8057/1/8057 +f 8153/1/8153 8150/1/8150 8057/1/8057 +f 8057/1/8057 8150/1/8150 8149/1/8149 +f 8057/1/8057 8149/1/8149 8115/1/8115 +f 8057/1/8057 8115/1/8115 8082/1/8082 +f 8057/1/8057 8082/1/8082 8113/1/8113 +f 8113/1/8113 7917/1/7917 8057/1/8057 +f 8057/1/8057 7917/1/7917 7901/1/7901 +f 7901/1/7901 7917/1/7917 7913/1/7913 +f 7913/1/7913 7917/1/7917 7918/1/7918 +f 7913/1/7913 7918/1/7918 7919/1/7919 +f 8118/1/8118 7913/1/7913 7919/1/7919 +f 8118/1/8118 7919/1/7919 8120/1/8120 +f 8119/1/8119 8118/1/8118 8120/1/8120 +f 8119/1/8119 8120/1/8120 8121/1/8121 +f 8119/1/8119 8121/1/8121 8122/1/8122 +f 8122/1/8122 7922/1/7922 8119/1/8119 +f 8119/1/8119 7922/1/7922 7920/1/7920 +f 8119/1/8119 7920/1/7920 8117/1/8117 +f 8117/1/8117 7920/1/7920 7918/1/7918 +f 8117/1/8117 7918/1/7918 8113/1/8113 +f 8113/1/8113 8114/1/8114 8117/1/8117 +f 8117/1/8117 8114/1/8114 8118/1/8118 +f 7921/1/7921 7920/1/7920 7922/1/7922 +f 7921/1/7921 7922/1/7922 7923/1/7923 +f 8121/1/8121 7921/1/7921 7923/1/7923 +f 8121/1/8121 7923/1/7923 8123/1/8123 +f 8123/1/8123 7923/1/7923 7925/1/7925 +f 8123/1/8123 7925/1/7925 8125/1/8125 +f 8123/1/8123 8125/1/8125 8124/1/8124 +f 8122/1/8122 8123/1/8123 8124/1/8124 +f 8124/1/8124 7924/1/7924 8122/1/8122 +f 8124/1/8124 7927/1/7927 7924/1/7924 +f 7926/1/7926 7924/1/7924 7927/1/7927 +f 7926/1/7926 7927/1/7927 7928/1/7928 +f 8126/1/8126 7926/1/7926 7928/1/7928 +f 8126/1/8126 7928/1/7928 8128/1/8128 +f 8127/1/8127 8126/1/8126 8128/1/8128 +f 8127/1/8127 8128/1/8128 8129/1/8129 +f 8129/1/8129 8130/1/8130 8127/1/8127 +f 8130/1/8130 7930/1/7930 8127/1/8127 +f 8127/1/8127 7930/1/7930 7927/1/7927 +f 7929/1/7929 7927/1/7927 7930/1/7930 +f 7929/1/7929 7930/1/7930 7931/1/7931 +f 8129/1/8129 7929/1/7929 7931/1/7931 +f 8129/1/8129 7931/1/7931 8131/1/8131 +f 8131/1/8131 7931/1/7931 7933/1/7933 +f 8131/1/8131 7933/1/7933 8132/1/8132 +f 8131/1/8131 8132/1/8132 8130/1/8130 +f 8130/1/8130 8132/1/8132 8133/1/8133 +f 8130/1/8130 8133/1/8133 8134/1/8134 +f 8134/1/8134 8135/1/8135 8130/1/8130 +f 8135/1/8135 8136/1/8136 8130/1/8130 +f 8130/1/8130 8136/1/8136 8137/1/8137 +f 8130/1/8130 8137/1/8137 8138/1/8138 +f 8138/1/8138 7938/1/7938 8130/1/8130 +f 8138/1/8138 7897/1/7897 7938/1/7938 +f 7897/1/7897 7940/1/7940 7938/1/7938 +f 7938/1/7938 7940/1/7940 7939/1/7939 +f 7938/1/7938 7939/1/7939 7930/1/7930 +f 7930/1/7930 7939/1/7939 7937/1/7937 +f 7930/1/7930 7937/1/7937 7936/1/7936 +f 7936/1/7936 7935/1/7935 7930/1/7930 +f 7930/1/7930 7935/1/7935 7934/1/7934 +f 7930/1/7930 7934/1/7934 7932/1/7932 +f 8133/1/8133 7932/1/7932 7934/1/7934 +f 7935/1/7935 8134/1/8134 7934/1/7934 +f 8136/1/8136 7935/1/7935 7936/1/7936 +f 8137/1/8137 7936/1/7936 7937/1/7937 +f 8137/1/8137 7937/1/7937 7939/1/7939 +f 8137/1/8137 7939/1/7939 8139/1/8139 +f 8139/1/8139 7939/1/7939 7940/1/7940 +f 8139/1/8139 7940/1/7940 8141/1/8141 +f 8140/1/8140 8139/1/8139 8141/1/8141 +f 8140/1/8140 8141/1/8141 8142/1/8142 +f 8140/1/8140 8142/1/8142 8143/1/8143 +f 8143/1/8143 7891/1/7891 8140/1/8140 +f 8140/1/8140 7891/1/7891 7897/1/7897 +f 7891/1/7891 7896/1/7896 7897/1/7897 +f 7891/1/7891 7895/1/7895 7896/1/7896 +f 8142/1/8142 7896/1/7896 7895/1/7895 +f 8142/1/8142 7895/1/7895 8144/1/8144 +f 8144/1/8144 7895/1/7895 7894/1/7894 +f 8144/1/8144 7894/1/7894 8146/1/8146 +f 8145/1/8145 8144/1/8144 8146/1/8146 +f 8145/1/8145 8146/1/8146 8059/1/8059 +f 8059/1/8059 7898/1/7898 8145/1/8145 +f 8059/1/8059 8146/1/8146 8147/1/8147 +f 8146/1/8146 7892/1/7892 8147/1/8147 +f 8147/1/8147 7892/1/7892 8148/1/8148 +f 8143/1/8143 8144/1/8144 8145/1/8145 +f 8145/1/8145 7893/1/7893 8143/1/8143 +f 8146/1/8146 7894/1/7894 7892/1/7892 +f 7891/1/7891 7892/1/7892 7894/1/7894 +f 7894/1/7894 7895/1/7895 7891/1/7891 +f 8143/1/8143 8142/1/8142 8144/1/8144 +f 8141/1/8141 7896/1/7896 8142/1/8142 +f 8138/1/8138 8139/1/8139 8140/1/8140 +f 8141/1/8141 7940/1/7940 7896/1/7896 +f 7897/1/7897 7896/1/7896 7940/1/7940 +f 8140/1/8140 7897/1/7897 8138/1/8138 +f 8138/1/8138 8137/1/8137 8139/1/8139 +f 8136/1/8136 7936/1/7936 8137/1/8137 +f 8135/1/8135 7935/1/7935 8136/1/8136 +f 8135/1/8135 8134/1/8134 7935/1/7935 +f 8133/1/8133 7934/1/7934 8134/1/8134 +f 8132/1/8132 7932/1/7932 8133/1/8133 +f 8132/1/8132 7933/1/7933 7932/1/7932 +f 7931/1/7931 7932/1/7932 7933/1/7933 +f 7931/1/7931 7930/1/7930 7932/1/7932 +f 8130/1/8130 7938/1/7938 7930/1/7930 +f 8131/1/8131 8130/1/8130 8129/1/8129 +f 8128/1/8128 7929/1/7929 8129/1/8129 +f 8124/1/8124 8126/1/8126 8127/1/8127 +f 8128/1/8128 7928/1/7928 7929/1/7929 +f 8125/1/8125 7926/1/7926 8126/1/8126 +f 7928/1/7928 7927/1/7927 7929/1/7929 +f 7925/1/7925 7924/1/7924 7926/1/7926 +f 7922/1/7922 7924/1/7924 7925/1/7925 +f 8127/1/8127 7927/1/7927 8124/1/8124 +f 8124/1/8124 8125/1/8125 8126/1/8126 +f 8125/1/8125 7925/1/7925 7926/1/7926 +f 7923/1/7923 7922/1/7922 7925/1/7925 +f 7919/1/7919 7920/1/7920 7921/1/7921 +f 8122/1/8122 7924/1/7924 7922/1/7922 +f 8122/1/8122 8121/1/8121 8123/1/8123 +f 8120/1/8120 7921/1/7921 8121/1/8121 +f 8117/1/8117 8118/1/8118 8119/1/8119 +f 8120/1/8120 7919/1/7919 7921/1/7921 +f 8118/1/8118 8114/1/8114 7913/1/7913 +f 7919/1/7919 7918/1/7918 7920/1/7920 +f 8113/1/8113 7918/1/7918 7917/1/7917 +f 8113/1/8113 8082/1/8082 8114/1/8114 +f 8114/1/8114 8082/1/8082 8331/1/8331 +f 8114/1/8114 8331/1/8331 8316/1/8316 +f 8315/1/8315 8114/1/8114 8316/1/8316 +f 8315/1/8315 8316/1/8316 8317/1/8317 +f 8317/1/8317 8370/1/8370 8315/1/8315 +f 8315/1/8315 8370/1/8370 8374/1/8374 +f 8315/1/8315 8374/1/8374 7916/1/7916 +f 7916/1/7916 8374/1/8374 7841/1/7841 +f 7841/1/7841 7944/1/7944 7916/1/7916 +f 7916/1/7916 7944/1/7944 7941/1/7941 +f 7944/1/7944 7942/1/7942 7941/1/7941 +f 7945/1/7945 7942/1/7942 7944/1/7944 +f 7946/1/7946 7945/1/7945 7944/1/7944 +f 7944/1/7944 7947/1/7947 7946/1/7946 +f 7946/1/7946 7947/1/7947 7948/1/7948 +f 7946/1/7946 7948/1/7948 7949/1/7949 +f 7979/1/7979 7946/1/7946 7949/1/7949 +f 7979/1/7979 7949/1/7949 7977/1/7977 +f 7977/1/7977 7974/1/7974 7979/1/7979 +f 7977/1/7977 7973/1/7973 7974/1/7974 +f 7976/1/7976 7973/1/7973 7977/1/7977 +f 7983/1/7983 7976/1/7976 7977/1/7977 +f 7977/1/7977 7951/1/7951 7983/1/7983 +f 7983/1/7983 7951/1/7951 8004/1/8004 +f 7983/1/7983 8004/1/8004 8002/1/8002 +f 7983/1/7983 8002/1/8002 7986/1/7986 +f 7986/1/7986 7984/1/7984 7983/1/7983 +f 7986/1/7986 7987/1/7987 7984/1/7984 +f 7984/1/7984 7987/1/7987 7985/1/7985 +f 7984/1/7984 7985/1/7985 7976/1/7976 +f 7985/1/7985 7975/1/7975 7976/1/7976 +f 7976/1/7976 7975/1/7975 7972/1/7972 +f 7972/1/7972 7975/1/7975 7970/1/7970 +f 7970/1/7970 7975/1/7975 7985/1/7985 +f 7970/1/7970 7985/1/7985 7987/1/7987 +f 7986/1/7986 7988/1/7988 7987/1/7987 +f 7991/1/7991 7988/1/7988 7986/1/7986 +f 7991/1/7991 7986/1/7986 8000/1/8000 +f 7991/1/7991 8000/1/8000 7998/1/7998 +f 7992/1/7992 7991/1/7991 7998/1/7998 +f 7998/1/7998 8000/1/8000 7999/1/7999 +f 7998/1/7998 7999/1/7999 7997/1/7997 +f 7997/1/7997 7999/1/7999 7815/1/7815 +f 8000/1/8000 8001/1/8001 7999/1/7999 +f 7999/1/7999 8001/1/8001 7821/1/7821 +f 7821/1/7821 8001/1/8001 7835/1/7835 +f 7835/1/7835 7832/1/7832 7821/1/7821 +f 7832/1/7832 7835/1/7835 7834/1/7834 +f 7834/1/7834 7833/1/7833 7832/1/7832 +f 7832/1/7832 7833/1/7833 7831/1/7831 +f 7832/1/7832 7831/1/7831 7822/1/7822 +f 8080/1/8080 7831/1/7831 7833/1/7833 +f 8080/1/8080 7833/1/7833 8084/1/8084 +f 8083/1/8083 8080/1/8080 8084/1/8084 +f 8083/1/8083 8084/1/8084 8085/1/8085 +f 8085/1/8085 7836/1/7836 8083/1/8083 +f 7841/1/7841 8083/1/8083 7836/1/7836 +f 7836/1/7836 7840/1/7840 7841/1/7841 +f 7841/1/7841 7840/1/7840 7950/1/7950 +f 7841/1/7841 7950/1/7950 7948/1/7948 +f 7951/1/7951 7950/1/7950 7840/1/7840 +f 7949/1/7949 7950/1/7950 7951/1/7951 +f 7836/1/7836 7838/1/7838 7840/1/7840 +f 7840/1/7840 7838/1/7838 8003/1/8003 +f 8004/1/8004 7840/1/7840 8003/1/8003 +f 7835/1/7835 8003/1/8003 7838/1/7838 +f 7834/1/7834 7838/1/7838 7836/1/7836 +f 7834/1/7834 7836/1/7836 7837/1/7837 +f 8086/1/8086 7834/1/7834 7837/1/7837 +f 8086/1/8086 7837/1/7837 8088/1/8088 +f 8087/1/8087 8086/1/8086 8088/1/8088 +f 8087/1/8087 8088/1/8088 8089/1/8089 +f 8089/1/8089 7842/1/7842 8087/1/8087 +f 8087/1/8087 7842/1/7842 7839/1/7839 +f 8087/1/8087 7839/1/7839 8085/1/8085 +f 7837/1/7837 7839/1/7839 7842/1/7842 +f 7837/1/7837 7842/1/7842 7843/1/7843 +f 7843/1/7843 7842/1/7842 7844/1/7844 +f 7843/1/7843 7844/1/7844 7845/1/7845 +f 8090/1/8090 7843/1/7843 7845/1/7845 +f 8090/1/8090 7845/1/7845 8092/1/8092 +f 8092/1/8092 8093/1/8093 8090/1/8090 +f 8090/1/8090 8093/1/8093 8091/1/8091 +f 8090/1/8090 8091/1/8091 8088/1/8088 +f 8093/1/8093 7846/1/7846 8091/1/8091 +f 8091/1/8091 7846/1/7846 7844/1/7844 +f 8091/1/8091 7844/1/7844 8089/1/8089 +f 8093/1/8093 7847/1/7847 7846/1/7846 +f 7845/1/7845 7846/1/7846 7847/1/7847 +f 7845/1/7845 7847/1/7847 7848/1/7848 +f 7848/1/7848 7847/1/7847 7849/1/7849 +f 7848/1/7848 7849/1/7849 7851/1/7851 +f 7850/1/7850 7848/1/7848 7851/1/7851 +f 7852/1/7852 7850/1/7850 7851/1/7851 +f 8097/1/8097 7852/1/7852 7851/1/7851 +f 8097/1/8097 7851/1/7851 8095/1/8095 +f 8097/1/8097 8095/1/8095 8094/1/8094 +f 8094/1/8094 8098/1/8098 8097/1/8097 +f 8094/1/8094 8099/1/8099 8098/1/8098 +f 8099/1/8099 7853/1/7853 8098/1/8098 +f 8098/1/8098 7853/1/7853 7852/1/7852 +f 8099/1/8099 7854/1/7854 7853/1/7853 +f 7854/1/7854 7855/1/7855 7853/1/7853 +f 7853/1/7853 7855/1/7855 7850/1/7850 +f 7855/1/7855 7856/1/7856 7850/1/7850 +f 7856/1/7856 7857/1/7857 7850/1/7850 +f 7850/1/7850 7857/1/7857 7858/1/7858 +f 7850/1/7850 7858/1/7858 7859/1/7859 +f 8105/1/8105 7850/1/7850 7859/1/7859 +f 8105/1/8105 7859/1/7859 8107/1/8107 +f 8106/1/8106 8105/1/8105 8107/1/8107 +f 8106/1/8106 8107/1/8107 8108/1/8108 +f 8108/1/8108 7862/1/7862 8106/1/8106 +f 8106/1/8106 7862/1/7862 7860/1/7860 +f 8106/1/8106 7860/1/7860 8104/1/8104 +f 8104/1/8104 7860/1/7860 7858/1/7858 +f 8104/1/8104 7858/1/7858 8103/1/8103 +f 8103/1/8103 8094/1/8094 8104/1/8104 +f 8104/1/8104 8094/1/8094 8105/1/8105 +f 8103/1/8103 8102/1/8102 8094/1/8094 +f 8094/1/8094 8102/1/8102 8101/1/8101 +f 8094/1/8094 8101/1/8101 8100/1/8100 +f 8100/1/8100 8101/1/8101 7855/1/7855 +f 8102/1/8102 7857/1/7857 8101/1/8101 +f 8103/1/8103 7858/1/7858 8102/1/8102 +f 7860/1/7860 7862/1/7862 7861/1/7861 +f 7859/1/7859 7860/1/7860 7861/1/7861 +f 7861/1/7861 7862/1/7862 7863/1/7863 +f 7861/1/7861 7863/1/7863 7864/1/7864 +f 8109/1/8109 7861/1/7861 7864/1/7864 +f 8109/1/8109 7864/1/7864 8112/1/8112 +f 8111/1/8111 8109/1/8109 8112/1/8112 +f 8111/1/8111 8112/1/8112 8066/1/8066 +f 8066/1/8066 7867/1/7867 8111/1/8111 +f 8111/1/8111 7867/1/7867 7865/1/7865 +f 8111/1/8111 7865/1/7865 8110/1/8110 +f 8110/1/8110 7865/1/7865 7863/1/7863 +f 8110/1/8110 7863/1/7863 8108/1/8108 +f 8108/1/8108 8109/1/8109 8110/1/8110 +f 7866/1/7866 7865/1/7865 7867/1/7867 +f 7866/1/7866 7867/1/7867 7829/1/7829 +f 8067/1/8067 7866/1/7866 7829/1/7829 +f 8067/1/8067 7829/1/7829 8077/1/8077 +f 8077/1/8077 8076/1/8076 8067/1/8067 +f 8067/1/8067 8076/1/8076 8075/1/8075 +f 8075/1/8075 8074/1/8074 8067/1/8067 +f 8067/1/8067 8074/1/8074 8073/1/8073 +f 8067/1/8067 8073/1/8073 8072/1/8072 +f 8072/1/8072 8071/1/8071 8067/1/8067 +f 8067/1/8067 8071/1/8071 8070/1/8070 +f 8067/1/8067 8070/1/8070 8069/1/8069 +f 8069/1/8069 8068/1/8068 8067/1/8067 +f 8067/1/8067 8068/1/8068 8065/1/8065 +f 8067/1/8067 8065/1/8065 8064/1/8064 +f 8066/1/8066 8067/1/8067 8064/1/8064 +f 8064/1/8064 7870/1/7870 8066/1/8066 +f 8066/1/8066 7870/1/7870 7868/1/7868 +f 7829/1/7829 7868/1/7868 7870/1/7870 +f 7869/1/7869 7829/1/7829 7870/1/7870 +f 7830/1/7830 7829/1/7829 7869/1/7869 +f 7830/1/7830 7869/1/7869 8062/1/8062 +f 8062/1/8062 7869/1/7869 8063/1/8063 +f 8063/1/8063 8036/1/8036 8062/1/8062 +f 8062/1/8062 8036/1/8036 8035/1/8035 +f 8062/1/8062 8035/1/8035 8034/1/8034 +f 8034/1/8034 8032/1/8032 8062/1/8062 +f 8062/1/8062 8032/1/8032 8030/1/8030 +f 8062/1/8062 8030/1/8030 8031/1/8031 +f 8031/1/8031 8038/1/8038 8062/1/8062 +f 8062/1/8062 8038/1/8038 8040/1/8040 +f 8040/1/8040 8041/1/8041 8062/1/8062 +f 8062/1/8062 8041/1/8041 8044/1/8044 +f 8062/1/8062 8044/1/8044 8060/1/8060 +f 8060/1/8060 8328/1/8328 8062/1/8062 +f 7872/1/7872 8062/1/8062 8328/1/8328 +f 7872/1/7872 8328/1/8328 7874/1/7874 +f 8328/1/8328 8330/1/8330 7874/1/7874 +f 7874/1/7874 8330/1/8330 7876/1/7876 +f 7876/1/7876 7875/1/7875 7874/1/7874 +f 7873/1/7873 7874/1/7874 7875/1/7875 +f 7875/1/7875 8321/1/8321 7873/1/7873 +f 7877/1/7877 8321/1/8321 7875/1/7875 +f 8322/1/8322 8321/1/8321 7877/1/7877 +f 7882/1/7882 8322/1/8322 7877/1/7877 +f 7881/1/7881 7882/1/7882 7877/1/7877 +f 7881/1/7881 7877/1/7877 7878/1/7878 +f 7878/1/7878 8325/1/8325 7881/1/7881 +f 7881/1/7881 8325/1/8325 8324/1/8324 +f 7881/1/7881 8324/1/8324 7883/1/7883 +f 7883/1/7883 8324/1/8324 8323/1/8323 +f 7883/1/7883 8323/1/8323 7882/1/7882 +f 8323/1/8323 8324/1/8324 8322/1/8322 +f 8322/1/8322 8324/1/8324 8325/1/8325 +f 8326/1/8326 8325/1/8325 7878/1/7878 +f 7879/1/7879 8326/1/8326 7878/1/7878 +f 7878/1/7878 7876/1/7876 7879/1/7879 +f 7879/1/7879 7876/1/7876 7880/1/7880 +f 7880/1/7880 8327/1/8327 7879/1/7879 +f 7880/1/7880 8329/1/8329 8327/1/8327 +f 8327/1/8327 8329/1/8329 8326/1/8326 +f 8326/1/8326 8329/1/8329 8330/1/8330 +f 7876/1/7876 8329/1/8329 7880/1/7880 +f 7879/1/7879 8327/1/8327 8326/1/8326 +f 8325/1/8325 8326/1/8326 8328/1/8328 +f 8321/1/8321 8325/1/8325 8328/1/8328 +f 7878/1/7878 7877/1/7877 7876/1/7876 +f 7883/1/7883 7882/1/7882 7881/1/7881 +f 7882/1/7882 8323/1/8323 8322/1/8322 +f 8322/1/8322 8325/1/8325 8321/1/8321 +f 7877/1/7877 7875/1/7875 7876/1/7876 +f 7876/1/7876 8330/1/8330 8329/1/8329 +f 8326/1/8326 8330/1/8330 8328/1/8328 +f 8321/1/8321 8328/1/8328 8060/1/8060 +f 8060/1/8060 8044/1/8044 8051/1/8051 +f 8044/1/8044 8046/1/8046 8051/1/8051 +f 8042/1/8042 8046/1/8046 8044/1/8044 +f 8042/1/8042 8045/1/8045 8046/1/8046 +f 8050/1/8050 8046/1/8046 8045/1/8045 +f 8049/1/8049 8050/1/8050 8045/1/8045 +f 8049/1/8049 8045/1/8045 8047/1/8047 +f 8049/1/8049 8047/1/8047 8048/1/8048 +f 8048/1/8048 8201/1/8201 8049/1/8049 +f 8049/1/8049 8201/1/8201 8202/1/8202 +f 8049/1/8049 8202/1/8202 8055/1/8055 +f 8055/1/8055 8202/1/8202 8192/1/8192 +f 8055/1/8055 8192/1/8192 8190/1/8190 +f 8190/1/8190 8054/1/8054 8055/1/8055 +f 8055/1/8055 8054/1/8054 8050/1/8050 +f 8053/1/8053 8050/1/8050 8054/1/8054 +f 8190/1/8190 8187/1/8187 8054/1/8054 +f 8187/1/8187 8189/1/8189 8054/1/8054 +f 8188/1/8188 8187/1/8187 8190/1/8190 +f 8191/1/8191 8188/1/8188 8190/1/8190 +f 8190/1/8190 8193/1/8193 8191/1/8191 +f 8194/1/8194 8191/1/8191 8193/1/8193 +f 8192/1/8192 8194/1/8194 8193/1/8193 +f 8192/1/8192 8198/1/8198 8194/1/8194 +f 8197/1/8197 8194/1/8194 8198/1/8198 +f 8197/1/8197 8198/1/8198 8200/1/8200 +f 8203/1/8203 8197/1/8197 8200/1/8200 +f 8016/1/8016 8203/1/8203 8200/1/8200 +f 8048/1/8048 8016/1/8016 8200/1/8200 +f 8017/1/8017 8016/1/8016 8048/1/8048 +f 8017/1/8017 8048/1/8048 8024/1/8024 +f 8017/1/8017 8024/1/8024 8018/1/8018 +f 8017/1/8017 8018/1/8018 8015/1/8015 +f 8015/1/8015 8018/1/8018 8019/1/8019 +f 8015/1/8015 8019/1/8019 8014/1/8014 +f 8014/1/8014 8012/1/8012 8015/1/8015 +f 8011/1/8011 8015/1/8015 8012/1/8012 +f 8011/1/8011 8012/1/8012 8007/1/8007 +f 8007/1/8007 8009/1/8009 8011/1/8011 +f 8011/1/8011 8009/1/8009 8203/1/8203 +f 8007/1/8007 8006/1/8006 8009/1/8009 +f 8006/1/8006 8010/1/8010 8009/1/8009 +f 8009/1/8009 8010/1/8010 8197/1/8197 +f 8205/1/8205 8197/1/8197 8010/1/8010 +f 8010/1/8010 8207/1/8207 8205/1/8205 +f 8205/1/8205 8207/1/8207 8208/1/8208 +f 8205/1/8205 8208/1/8208 8204/1/8204 +f 8204/1/8204 8208/1/8208 8211/1/8211 +f 8204/1/8204 8211/1/8211 8216/1/8216 +f 8216/1/8216 8196/1/8196 8204/1/8204 +f 8204/1/8204 8196/1/8196 8197/1/8197 +f 8216/1/8216 8219/1/8219 8196/1/8196 +f 8219/1/8219 8222/1/8222 8196/1/8196 +f 8196/1/8196 8222/1/8222 8199/1/8199 +f 8196/1/8196 8199/1/8199 8194/1/8194 +f 8199/1/8199 8195/1/8195 8194/1/8194 +f 8199/1/8199 8222/1/8222 8195/1/8195 +f 8195/1/8195 8222/1/8222 8219/1/8219 +f 8195/1/8195 8219/1/8219 8223/1/8223 +f 8223/1/8223 8179/1/8179 8195/1/8195 +f 8195/1/8195 8179/1/8179 8191/1/8191 +f 8223/1/8223 8176/1/8176 8179/1/8179 +f 8179/1/8179 8176/1/8176 8177/1/8177 +f 8177/1/8177 8181/1/8181 8179/1/8179 +f 8179/1/8179 8181/1/8181 8184/1/8184 +f 8179/1/8179 8184/1/8184 8188/1/8188 +f 8181/1/8181 8183/1/8183 8184/1/8184 +f 8177/1/8177 8180/1/8180 8181/1/8181 +f 8176/1/8176 8173/1/8173 8177/1/8177 +f 8177/1/8177 8173/1/8173 8175/1/8175 +f 8176/1/8176 8171/1/8171 8173/1/8173 +f 8171/1/8171 8169/1/8169 8173/1/8173 +f 8173/1/8173 8169/1/8169 8170/1/8170 +f 8171/1/8171 8172/1/8172 8169/1/8169 +f 8172/1/8172 8174/1/8174 8169/1/8169 +f 8169/1/8169 8174/1/8174 8164/1/8164 +f 8169/1/8169 8164/1/8164 8167/1/8167 +f 8165/1/8165 8164/1/8164 8174/1/8174 +f 8174/1/8174 8231/1/8231 8165/1/8165 +f 8165/1/8165 8231/1/8231 8232/1/8232 +f 8165/1/8165 8232/1/8232 8156/1/8156 +f 8156/1/8156 8154/1/8154 8165/1/8165 +f 8156/1/8156 8151/1/8151 8154/1/8154 +f 8150/1/8150 8154/1/8154 8151/1/8151 +f 8155/1/8155 8151/1/8151 8156/1/8156 +f 8233/1/8233 8155/1/8155 8156/1/8156 +f 8156/1/8156 8234/1/8234 8233/1/8233 +f 8233/1/8233 8234/1/8234 8232/1/8232 +f 8215/1/8215 8233/1/8233 8232/1/8232 +f 8215/1/8215 8232/1/8232 8212/1/8212 +f 8212/1/8212 8210/1/8210 8215/1/8215 +f 8214/1/8214 8215/1/8215 8210/1/8210 +f 8214/1/8214 8210/1/8210 8209/1/8209 +f 8209/1/8209 8236/1/8236 8214/1/8214 +f 8214/1/8214 8236/1/8236 8237/1/8237 +f 8214/1/8214 8237/1/8237 8238/1/8238 +f 8238/1/8238 8237/1/8237 8239/1/8239 +f 8239/1/8239 8241/1/8241 8238/1/8238 +f 8238/1/8238 8241/1/8241 8242/1/8242 +f 8215/1/8215 8238/1/8238 8242/1/8242 +f 8241/1/8241 8243/1/8243 8242/1/8242 +f 8242/1/8242 8243/1/8243 8233/1/8233 +f 8244/1/8244 8243/1/8243 8241/1/8241 +f 8246/1/8246 8244/1/8244 8241/1/8241 +f 8241/1/8241 8257/1/8257 8246/1/8246 +f 8246/1/8246 8257/1/8257 8250/1/8250 +f 8246/1/8246 8250/1/8250 8248/1/8248 +f 8248/1/8248 8160/1/8160 8246/1/8246 +f 8246/1/8246 8160/1/8160 8247/1/8247 +f 8160/1/8160 8158/1/8158 8247/1/8247 +f 8158/1/8158 8157/1/8157 8247/1/8247 +f 8247/1/8247 8157/1/8157 8245/1/8245 +f 8247/1/8247 8245/1/8245 8244/1/8244 +f 8157/1/8157 8152/1/8152 8245/1/8245 +f 8245/1/8245 8152/1/8152 8243/1/8243 +f 8243/1/8243 8152/1/8152 8155/1/8155 +f 8157/1/8157 8116/1/8116 8152/1/8152 +f 8115/1/8115 8152/1/8152 8116/1/8116 +f 8081/1/8081 8116/1/8116 8157/1/8157 +f 8082/1/8082 8116/1/8116 8081/1/8081 +f 8081/1/8081 8079/1/8079 8082/1/8082 +f 8082/1/8082 8079/1/8079 8080/1/8080 +f 8080/1/8080 8079/1/8079 8078/1/8078 +f 8078/1/8078 8079/1/8079 8077/1/8077 +f 8077/1/8077 7828/1/7828 8078/1/8078 +f 8078/1/8078 7828/1/7828 7831/1/7831 +f 8079/1/8079 8159/1/8159 8077/1/8077 +f 8079/1/8079 8158/1/8158 8159/1/8159 +f 8079/1/8079 8081/1/8081 8158/1/8158 +f 8158/1/8158 8081/1/8081 8157/1/8157 +f 8159/1/8159 8158/1/8158 8160/1/8160 +f 8159/1/8159 8160/1/8160 8076/1/8076 +f 8076/1/8076 8160/1/8160 8161/1/8161 +f 8248/1/8248 8161/1/8161 8160/1/8160 +f 8249/1/8249 8161/1/8161 8248/1/8248 +f 8248/1/8248 8251/1/8251 8249/1/8249 +f 8249/1/8249 8251/1/8251 8254/1/8254 +f 8249/1/8249 8254/1/8254 8252/1/8252 +f 8252/1/8252 8253/1/8253 8249/1/8249 +f 8253/1/8253 8162/1/8162 8249/1/8249 +f 8253/1/8253 8163/1/8163 8162/1/8162 +f 8163/1/8163 8073/1/8073 8162/1/8162 +f 8282/1/8282 8163/1/8163 8253/1/8253 +f 8282/1/8282 8283/1/8283 8163/1/8163 +f 8283/1/8283 8071/1/8071 8163/1/8163 +f 8281/1/8281 8283/1/8283 8282/1/8282 +f 8282/1/8282 8276/1/8276 8281/1/8281 +f 8037/1/8037 8281/1/8281 8276/1/8276 +f 8037/1/8037 8276/1/8276 8273/1/8273 +f 8273/1/8273 8033/1/8033 8037/1/8037 +f 8037/1/8037 8033/1/8033 8036/1/8036 +f 8037/1/8037 8036/1/8036 8065/1/8065 +f 8273/1/8273 8274/1/8274 8033/1/8033 +f 8274/1/8274 8029/1/8029 8033/1/8033 +f 8033/1/8033 8029/1/8029 8028/1/8028 +f 8033/1/8033 8028/1/8028 8034/1/8034 +f 8022/1/8022 8028/1/8028 8029/1/8029 +f 8029/1/8029 8020/1/8020 8022/1/8022 +f 8022/1/8022 8020/1/8020 8019/1/8019 +f 8022/1/8022 8019/1/8019 8023/1/8023 +f 8023/1/8023 8027/1/8027 8022/1/8022 +f 8023/1/8023 8026/1/8026 8027/1/8027 +f 8031/1/8031 8027/1/8027 8026/1/8026 +f 8025/1/8025 8026/1/8026 8023/1/8023 +f 8018/1/8018 8025/1/8025 8023/1/8023 +f 8023/1/8023 8021/1/8021 8018/1/8018 +f 8025/1/8025 8039/1/8039 8026/1/8026 +f 8038/1/8038 8026/1/8026 8039/1/8039 +f 8024/1/8024 8039/1/8039 8025/1/8025 +f 8043/1/8043 8039/1/8039 8024/1/8024 +f 8024/1/8024 8047/1/8047 8043/1/8043 +f 8042/1/8042 8039/1/8039 8043/1/8043 +f 8042/1/8042 8041/1/8041 8039/1/8039 +f 8023/1/8023 8019/1/8019 8021/1/8021 +f 8029/1/8029 8280/1/8280 8020/1/8020 +f 8014/1/8014 8020/1/8020 8280/1/8280 +f 8280/1/8280 8279/1/8279 8014/1/8014 +f 8279/1/8279 8265/1/8265 8014/1/8014 +f 8279/1/8279 8278/1/8278 8265/1/8265 +f 8265/1/8265 8278/1/8278 8271/1/8271 +f 8265/1/8265 8271/1/8271 8268/1/8268 +f 8268/1/8268 8264/1/8264 8265/1/8265 +f 8265/1/8265 8264/1/8264 8262/1/8262 +f 8265/1/8265 8262/1/8262 8012/1/8012 +f 8012/1/8012 8262/1/8262 8013/1/8013 +f 8012/1/8012 8013/1/8013 8008/1/8008 +f 8013/1/8013 8260/1/8260 8008/1/8008 +f 8008/1/8008 8260/1/8260 8261/1/8261 +f 8008/1/8008 8261/1/8261 8005/1/8005 +f 8007/1/8007 8008/1/8008 8005/1/8005 +f 8005/1/8005 8261/1/8261 8235/1/8235 +f 8235/1/8235 8206/1/8206 8005/1/8005 +f 8005/1/8005 8206/1/8206 8006/1/8006 +f 8206/1/8206 8235/1/8235 8209/1/8209 +f 8209/1/8209 8207/1/8207 8206/1/8206 +f 8235/1/8235 8261/1/8261 8236/1/8236 +f 8236/1/8236 8261/1/8261 8240/1/8240 +f 8260/1/8260 8240/1/8240 8261/1/8261 +f 8259/1/8259 8240/1/8240 8260/1/8260 +f 8259/1/8259 8258/1/8258 8240/1/8240 +f 8258/1/8258 8256/1/8256 8240/1/8240 +f 8240/1/8240 8256/1/8256 8255/1/8255 +f 8240/1/8240 8255/1/8255 8239/1/8239 +f 8257/1/8257 8239/1/8239 8255/1/8255 +f 8251/1/8251 8255/1/8255 8256/1/8256 +f 8250/1/8250 8255/1/8255 8251/1/8251 +f 8258/1/8258 8285/1/8285 8256/1/8256 +f 8285/1/8285 8284/1/8284 8256/1/8256 +f 8256/1/8256 8284/1/8284 8252/1/8252 +f 8284/1/8284 8282/1/8282 8252/1/8252 +f 8275/1/8275 8282/1/8282 8284/1/8284 +f 8284/1/8284 8267/1/8267 8275/1/8275 +f 8275/1/8275 8267/1/8267 8269/1/8269 +f 8269/1/8269 8276/1/8276 8275/1/8275 +f 8267/1/8267 8266/1/8266 8269/1/8269 +f 8266/1/8266 8270/1/8270 8269/1/8269 +f 8273/1/8273 8269/1/8269 8270/1/8270 +f 8268/1/8268 8270/1/8270 8266/1/8266 +f 8270/1/8270 8268/1/8268 8272/1/8272 +f 8270/1/8270 8272/1/8272 8274/1/8274 +f 8272/1/8272 8277/1/8277 8274/1/8274 +f 8272/1/8272 8271/1/8271 8277/1/8277 +f 8266/1/8266 8267/1/8267 8263/1/8263 +f 8264/1/8264 8266/1/8266 8263/1/8263 +f 8263/1/8263 8267/1/8267 8258/1/8258 +f 8267/1/8267 8286/1/8286 8258/1/8258 +f 8284/1/8284 8286/1/8286 8267/1/8267 +f 8285/1/8285 8286/1/8286 8284/1/8284 +f 8258/1/8258 8286/1/8286 8285/1/8285 +f 8263/1/8263 8258/1/8258 8259/1/8259 +f 8262/1/8262 8263/1/8263 8259/1/8259 +f 8013/1/8013 8259/1/8259 8260/1/8260 +f 8262/1/8262 8259/1/8259 8013/1/8013 +f 8264/1/8264 8263/1/8263 8262/1/8262 +f 8268/1/8268 8266/1/8266 8264/1/8264 +f 8272/1/8272 8268/1/8268 8271/1/8271 +f 8271/1/8271 8278/1/8278 8277/1/8277 +f 8277/1/8277 8278/1/8278 8279/1/8279 +f 8277/1/8277 8279/1/8279 8280/1/8280 +f 8277/1/8277 8280/1/8280 8029/1/8029 +f 8022/1/8022 8027/1/8027 8028/1/8028 +f 8030/1/8030 8028/1/8028 8027/1/8027 +f 8274/1/8274 8277/1/8277 8029/1/8029 +f 8270/1/8270 8274/1/8274 8273/1/8273 +f 8273/1/8273 8276/1/8276 8269/1/8269 +f 8065/1/8065 8281/1/8281 8037/1/8037 +f 8275/1/8275 8276/1/8276 8282/1/8282 +f 8281/1/8281 8069/1/8069 8283/1/8283 +f 8252/1/8252 8282/1/8282 8253/1/8253 +f 8256/1/8256 8252/1/8252 8254/1/8254 +f 8251/1/8251 8256/1/8256 8254/1/8254 +f 8249/1/8249 8162/1/8162 8161/1/8161 +f 8162/1/8162 8074/1/8074 8161/1/8161 +f 8248/1/8248 8250/1/8250 8251/1/8251 +f 8257/1/8257 8255/1/8255 8250/1/8250 +f 8246/1/8246 8247/1/8247 8244/1/8244 +f 8244/1/8244 8245/1/8245 8243/1/8243 +f 8241/1/8241 8239/1/8239 8257/1/8257 +f 8237/1/8237 8240/1/8240 8239/1/8239 +f 8236/1/8236 8240/1/8240 8237/1/8237 +f 8209/1/8209 8235/1/8235 8236/1/8236 +f 8209/1/8209 8210/1/8210 8207/1/8207 +f 8238/1/8238 8215/1/8215 8214/1/8214 +f 8212/1/8212 8213/1/8213 8210/1/8210 +f 8213/1/8213 8211/1/8211 8210/1/8210 +f 8213/1/8213 8217/1/8217 8211/1/8211 +f 8220/1/8220 8217/1/8217 8213/1/8213 +f 8213/1/8213 8227/1/8227 8220/1/8220 +f 8225/1/8225 8220/1/8220 8227/1/8227 +f 8225/1/8225 8227/1/8227 8226/1/8226 +f 8225/1/8225 8226/1/8226 8172/1/8172 +f 8224/1/8224 8225/1/8225 8172/1/8172 +f 8227/1/8227 8228/1/8228 8226/1/8226 +f 8226/1/8226 8228/1/8228 8229/1/8229 +f 8226/1/8226 8229/1/8229 8230/1/8230 +f 8226/1/8226 8230/1/8230 8174/1/8174 +f 8230/1/8230 8229/1/8229 8212/1/8212 +f 8212/1/8212 8231/1/8231 8230/1/8230 +f 8229/1/8229 8228/1/8228 8213/1/8213 +f 8224/1/8224 8220/1/8220 8225/1/8225 +f 8224/1/8224 8221/1/8221 8220/1/8220 +f 8220/1/8220 8221/1/8221 8218/1/8218 +f 8219/1/8219 8218/1/8218 8221/1/8221 +f 8221/1/8221 8224/1/8224 8171/1/8171 +f 8213/1/8213 8228/1/8228 8227/1/8227 +f 8218/1/8218 8217/1/8217 8220/1/8220 +f 8216/1/8216 8217/1/8217 8218/1/8218 +f 8229/1/8229 8213/1/8213 8212/1/8212 +f 8242/1/8242 8233/1/8233 8215/1/8215 +f 8233/1/8233 8243/1/8243 8155/1/8155 +f 8155/1/8155 8152/1/8152 8151/1/8151 +f 8149/1/8149 8151/1/8151 8152/1/8152 +f 8156/1/8156 8232/1/8232 8234/1/8234 +f 8212/1/8212 8232/1/8232 8231/1/8231 +f 8174/1/8174 8230/1/8230 8231/1/8231 +f 8165/1/8165 8154/1/8154 8164/1/8164 +f 8153/1/8153 8164/1/8164 8154/1/8154 +f 8172/1/8172 8226/1/8226 8174/1/8174 +f 8224/1/8224 8172/1/8172 8171/1/8171 +f 8221/1/8221 8171/1/8171 8176/1/8176 +f 8221/1/8221 8176/1/8176 8223/1/8223 +f 8223/1/8223 8219/1/8219 8221/1/8221 +f 8218/1/8218 8219/1/8219 8216/1/8216 +f 8216/1/8216 8211/1/8211 8217/1/8217 +f 8210/1/8210 8211/1/8211 8208/1/8208 +f 8210/1/8210 8208/1/8208 8207/1/8207 +f 8010/1/8010 8206/1/8206 8207/1/8207 +f 8204/1/8204 8197/1/8197 8205/1/8205 +f 8006/1/8006 8206/1/8206 8010/1/8010 +f 8005/1/8005 8006/1/8006 8007/1/8007 +f 8007/1/8007 8012/1/8012 8008/1/8008 +f 8016/1/8016 8015/1/8015 8011/1/8011 +f 8014/1/8014 8265/1/8265 8012/1/8012 +f 8014/1/8014 8019/1/8019 8020/1/8020 +f 8018/1/8018 8021/1/8021 8019/1/8019 +f 8018/1/8018 8024/1/8024 8025/1/8025 +f 8015/1/8015 8016/1/8016 8017/1/8017 +f 8011/1/8011 8203/1/8203 8016/1/8016 +f 8009/1/8009 8197/1/8197 8203/1/8203 +f 8201/1/8201 8200/1/8200 8198/1/8198 +f 8196/1/8196 8194/1/8194 8197/1/8197 +f 8194/1/8194 8195/1/8195 8191/1/8191 +f 8191/1/8191 8179/1/8179 8188/1/8188 +f 8188/1/8188 8184/1/8184 8187/1/8187 +f 8184/1/8184 8186/1/8186 8187/1/8187 +f 8190/1/8190 8192/1/8192 8193/1/8193 +f 8202/1/8202 8198/1/8198 8192/1/8192 +f 8201/1/8201 8198/1/8198 8202/1/8202 +f 8048/1/8048 8200/1/8200 8201/1/8201 +f 8024/1/8024 8048/1/8048 8047/1/8047 +f 8043/1/8043 8047/1/8047 8045/1/8045 +f 8055/1/8055 8050/1/8050 8049/1/8049 +f 8052/1/8052 8046/1/8046 8050/1/8050 +f 8043/1/8043 8045/1/8045 8042/1/8042 +f 8044/1/8044 8041/1/8041 8042/1/8042 +f 8040/1/8040 8039/1/8039 8041/1/8041 +f 8038/1/8038 8039/1/8039 8040/1/8040 +f 8031/1/8031 8026/1/8026 8038/1/8038 +f 8030/1/8030 8027/1/8027 8031/1/8031 +f 8032/1/8032 8028/1/8028 8030/1/8030 +f 8034/1/8034 8028/1/8028 8032/1/8032 +f 8034/1/8034 8035/1/8035 8033/1/8033 +f 8033/1/8033 8035/1/8035 8036/1/8036 +f 8064/1/8064 8036/1/8036 8063/1/8063 +f 8063/1/8063 7869/1/7869 8064/1/8064 +f 8064/1/8064 7869/1/7869 7870/1/7870 +f 8064/1/8064 8065/1/8065 8036/1/8036 +f 8065/1/8065 8068/1/8068 8281/1/8281 +f 8068/1/8068 8069/1/8069 8281/1/8281 +f 8069/1/8069 8070/1/8070 8283/1/8283 +f 8283/1/8283 8070/1/8070 8071/1/8071 +f 8071/1/8071 8072/1/8072 8163/1/8163 +f 8163/1/8163 8072/1/8072 8073/1/8073 +f 8162/1/8162 8073/1/8073 8074/1/8074 +f 8075/1/8075 8161/1/8161 8074/1/8074 +f 8076/1/8076 8161/1/8161 8075/1/8075 +f 8077/1/8077 8159/1/8159 8076/1/8076 +f 8077/1/8077 7829/1/7829 7828/1/7828 +f 8112/1/8112 7866/1/7866 8067/1/8067 +f 7829/1/7829 7867/1/7867 7868/1/7868 +f 7864/1/7864 7865/1/7865 7866/1/7866 +f 8066/1/8066 7868/1/7868 7867/1/7867 +f 8066/1/8066 8112/1/8112 8067/1/8067 +f 8110/1/8110 8109/1/8109 8111/1/8111 +f 8112/1/8112 7864/1/7864 7866/1/7866 +f 8107/1/8107 7861/1/7861 8109/1/8109 +f 7864/1/7864 7863/1/7863 7865/1/7865 +f 8108/1/8108 7863/1/7863 7862/1/7862 +f 8108/1/8108 8107/1/8107 8109/1/8109 +f 8104/1/8104 8105/1/8105 8106/1/8106 +f 8107/1/8107 7859/1/7859 7861/1/7861 +f 8094/1/8094 7850/1/7850 8105/1/8105 +f 7859/1/7859 7858/1/7858 7860/1/7860 +f 8102/1/8102 7858/1/7858 7857/1/7857 +f 8101/1/8101 7857/1/7857 7856/1/7856 +f 7855/1/7855 8101/1/8101 7856/1/7856 +f 8100/1/8100 7855/1/7855 7854/1/7854 +f 8100/1/8100 7854/1/7854 8099/1/8099 +f 8100/1/8100 8099/1/8099 8094/1/8094 +f 8094/1/8094 8095/1/8095 8092/1/8092 +f 8092/1/8092 7848/1/7848 8094/1/8094 +f 8095/1/8095 8096/1/8096 8092/1/8092 +f 8095/1/8095 7849/1/7849 8096/1/8096 +f 8098/1/8098 7852/1/7852 8097/1/8097 +f 7853/1/7853 7850/1/7850 7852/1/7852 +f 8094/1/8094 7848/1/7848 7850/1/7850 +f 8095/1/8095 7851/1/7851 7849/1/7849 +f 8096/1/8096 7849/1/7849 7847/1/7847 +f 8096/1/8096 7847/1/7847 8093/1/8093 +f 8092/1/8092 8096/1/8096 8093/1/8093 +f 8092/1/8092 7845/1/7845 7848/1/7848 +f 8088/1/8088 7843/1/7843 8090/1/8090 +f 7845/1/7845 7844/1/7844 7846/1/7846 +f 8089/1/8089 7844/1/7844 7842/1/7842 +f 8089/1/8089 8088/1/8088 8091/1/8091 +f 8085/1/8085 8086/1/8086 8087/1/8087 +f 8088/1/8088 7837/1/7837 7843/1/7843 +f 8084/1/8084 7834/1/7834 8086/1/8086 +f 7837/1/7837 7836/1/7836 7839/1/7839 +f 8082/1/8082 8083/1/8083 7841/1/7841 +f 8085/1/8085 7839/1/7839 7836/1/7836 +f 8085/1/8085 8084/1/8084 8086/1/8086 +f 8082/1/8082 8080/1/8080 8083/1/8083 +f 8078/1/8078 7831/1/7831 8080/1/8080 +f 8084/1/8084 7833/1/7833 7834/1/7834 +f 7834/1/7834 7835/1/7835 7838/1/7838 +f 8001/1/8001 8003/1/8003 7835/1/7835 +f 8001/1/8001 8002/1/8002 8003/1/8003 +f 8000/1/8000 8002/1/8002 8001/1/8001 +f 8000/1/8000 7986/1/7986 8002/1/8002 +f 8004/1/8004 8003/1/8003 8002/1/8002 +f 7951/1/7951 7840/1/7840 8004/1/8004 +f 7983/1/7983 7984/1/7984 7976/1/7976 +f 7976/1/7976 7972/1/7972 7973/1/7973 +f 7973/1/7973 7972/1/7972 7969/1/7969 +f 7977/1/7977 7949/1/7949 7951/1/7951 +f 7949/1/7949 7948/1/7948 7950/1/7950 +f 7948/1/7948 7947/1/7947 7841/1/7841 +f 7981/1/7981 7945/1/7945 7946/1/7946 +f 7981/1/7981 7982/1/7982 7945/1/7945 +f 7841/1/7841 7947/1/7947 7944/1/7944 +f 8374/1/8374 8331/1/8331 7841/1/7841 +f 8374/1/8374 8332/1/8332 8331/1/8331 +f 8370/1/8370 8332/1/8332 8374/1/8374 +f 8370/1/8370 8333/1/8333 8332/1/8332 +f 8318/1/8318 8332/1/8332 8333/1/8333 +f 8318/1/8318 8333/1/8333 8320/1/8320 +f 8319/1/8319 8318/1/8318 8320/1/8320 +f 8319/1/8319 8320/1/8320 8366/1/8366 +f 8304/1/8304 8319/1/8319 8366/1/8366 +f 8304/1/8304 8366/1/8366 8367/1/8367 +f 8367/1/8367 8303/1/8303 8304/1/8304 +f 8304/1/8304 8303/1/8303 8302/1/8302 +f 8302/1/8302 8364/1/8364 8304/1/8304 +f 8304/1/8304 8364/1/8364 8365/1/8365 +f 8364/1/8364 8338/1/8338 8365/1/8365 +f 8365/1/8365 8338/1/8338 8334/1/8334 +f 8365/1/8365 8334/1/8334 8369/1/8369 +f 8369/1/8369 8368/1/8368 8365/1/8365 +f 8368/1/8368 8319/1/8319 8365/1/8365 +f 8319/1/8319 8368/1/8368 8317/1/8317 +f 8369/1/8369 8371/1/8371 8368/1/8368 +f 8371/1/8371 8333/1/8333 8368/1/8368 +f 8371/1/8371 8336/1/8336 8333/1/8333 +f 8335/1/8335 8333/1/8333 8336/1/8336 +f 8388/1/8388 8335/1/8335 8336/1/8336 +f 8336/1/8336 8387/1/8387 8388/1/8388 +f 8389/1/8389 8388/1/8388 8387/1/8387 +f 8393/1/8393 8389/1/8389 8387/1/8387 +f 8393/1/8393 8387/1/8387 8395/1/8395 +f 8395/1/8395 8394/1/8394 8393/1/8393 +f 8393/1/8393 8394/1/8394 8392/1/8392 +f 8393/1/8393 8392/1/8392 8391/1/8391 +f 8391/1/8391 8392/1/8392 8390/1/8390 +f 8391/1/8391 8390/1/8390 8389/1/8389 +f 8392/1/8392 8388/1/8388 8390/1/8390 +f 8394/1/8394 8388/1/8388 8392/1/8392 +f 8394/1/8394 8385/1/8385 8388/1/8388 +f 8396/1/8396 8385/1/8385 8394/1/8394 +f 8396/1/8396 8400/1/8400 8385/1/8385 +f 8386/1/8386 8385/1/8385 8400/1/8400 +f 8386/1/8386 8400/1/8400 8399/1/8399 +f 8397/1/8397 8386/1/8386 8399/1/8399 +f 8399/1/8399 8398/1/8398 8397/1/8397 +f 8397/1/8397 8398/1/8398 8396/1/8396 +f 8397/1/8397 8396/1/8396 8395/1/8395 +f 8395/1/8395 8386/1/8386 8397/1/8397 +f 8399/1/8399 8400/1/8400 8398/1/8398 +f 8372/1/8372 8385/1/8385 8386/1/8386 +f 8387/1/8387 8372/1/8372 8386/1/8386 +f 8373/1/8373 8372/1/8372 8387/1/8387 +f 8372/1/8372 8373/1/8373 8371/1/8371 +f 8335/1/8335 8385/1/8385 8372/1/8372 +f 8369/1/8369 8335/1/8335 8372/1/8372 +f 8398/1/8398 8400/1/8400 8396/1/8396 +f 8396/1/8396 8394/1/8394 8395/1/8395 +f 8395/1/8395 8387/1/8387 8386/1/8386 +f 8391/1/8391 8389/1/8389 8393/1/8393 +f 8389/1/8389 8390/1/8390 8388/1/8388 +f 8373/1/8373 8387/1/8387 8336/1/8336 +f 8385/1/8385 8335/1/8335 8388/1/8388 +f 8334/1/8334 8333/1/8333 8335/1/8335 +f 8334/1/8334 8303/1/8303 8333/1/8333 +f 8373/1/8373 8336/1/8336 8371/1/8371 +f 8372/1/8372 8371/1/8371 8369/1/8369 +f 8369/1/8369 8334/1/8334 8335/1/8335 +f 8303/1/8303 8334/1/8334 8338/1/8338 +f 8303/1/8303 8338/1/8338 8301/1/8301 +f 8301/1/8301 8338/1/8338 8348/1/8348 +f 8301/1/8301 8348/1/8348 8299/1/8299 +f 8300/1/8300 8301/1/8301 8299/1/8299 +f 8300/1/8300 8299/1/8299 8298/1/8298 +f 8298/1/8298 8362/1/8362 8300/1/8300 +f 8300/1/8300 8362/1/8362 8363/1/8363 +f 8300/1/8300 8363/1/8363 8302/1/8302 +f 8362/1/8362 8349/1/8349 8363/1/8363 +f 8363/1/8363 8349/1/8349 8348/1/8348 +f 8363/1/8363 8348/1/8348 8364/1/8364 +f 8362/1/8362 8350/1/8350 8349/1/8349 +f 8297/1/8297 8349/1/8349 8350/1/8350 +f 8297/1/8297 8350/1/8350 8295/1/8295 +f 8296/1/8296 8297/1/8297 8295/1/8295 +f 8295/1/8295 8293/1/8293 8296/1/8296 +f 8296/1/8296 8293/1/8293 8294/1/8294 +f 8360/1/8360 8296/1/8296 8294/1/8294 +f 8291/1/8291 8360/1/8360 8294/1/8294 +f 8291/1/8291 8359/1/8359 8360/1/8360 +f 8352/1/8352 8360/1/8360 8359/1/8359 +f 8352/1/8352 8359/1/8359 8353/1/8353 +f 8287/1/8287 8352/1/8352 8353/1/8353 +f 8311/1/8311 8287/1/8287 8353/1/8353 +f 8311/1/8311 8353/1/8353 8355/1/8355 +f 8355/1/8355 8313/1/8313 8311/1/8311 +f 8312/1/8312 8311/1/8311 8313/1/8313 +f 8312/1/8312 8313/1/8313 8314/1/8314 +f 8314/1/8314 8357/1/8357 8312/1/8312 +f 8312/1/8312 8357/1/8357 8358/1/8358 +f 8312/1/8312 8358/1/8358 8356/1/8356 +f 8310/1/8310 8312/1/8312 8356/1/8356 +f 8288/1/8288 8310/1/8310 8356/1/8356 +f 8288/1/8288 8356/1/8356 8359/1/8359 +f 8292/1/8292 8310/1/8310 8288/1/8288 +f 8292/1/8292 8288/1/8288 8290/1/8290 +f 8292/1/8292 8290/1/8290 8305/1/8305 +f 8292/1/8292 8305/1/8305 8306/1/8306 +f 8306/1/8306 8308/1/8308 8292/1/8292 +f 8306/1/8306 8307/1/8307 8308/1/8308 +f 8308/1/8308 8307/1/8307 8309/1/8309 +f 8308/1/8308 8309/1/8309 8310/1/8310 +f 8311/1/8311 8310/1/8310 8309/1/8309 +f 8309/1/8309 8307/1/8307 8305/1/8305 +f 8306/1/8306 8305/1/8305 8307/1/8307 +f 8305/1/8305 8290/1/8290 8309/1/8309 +f 8309/1/8309 8290/1/8290 8287/1/8287 +f 8290/1/8290 8288/1/8288 8287/1/8287 +f 8287/1/8287 8288/1/8288 8289/1/8289 +f 8289/1/8289 8288/1/8288 8291/1/8291 +f 8289/1/8289 8291/1/8291 8293/1/8293 +f 8293/1/8293 8351/1/8351 8289/1/8289 +f 8289/1/8289 8351/1/8351 8352/1/8352 +f 8351/1/8351 8293/1/8293 8350/1/8350 +f 8351/1/8351 8350/1/8350 8360/1/8360 +f 8360/1/8360 8350/1/8350 8361/1/8361 +f 8292/1/8292 8308/1/8308 8310/1/8310 +f 8356/1/8356 8358/1/8358 8353/1/8353 +f 8357/1/8357 8355/1/8355 8358/1/8358 +f 8357/1/8357 8354/1/8354 8355/1/8355 +f 8314/1/8314 8354/1/8354 8357/1/8357 +f 8314/1/8314 8313/1/8313 8354/1/8354 +f 8312/1/8312 8310/1/8310 8311/1/8311 +f 8354/1/8354 8313/1/8313 8355/1/8355 +f 8353/1/8353 8358/1/8358 8355/1/8355 +f 8309/1/8309 8287/1/8287 8311/1/8311 +f 8289/1/8289 8352/1/8352 8287/1/8287 +f 8353/1/8353 8359/1/8359 8356/1/8356 +f 8351/1/8351 8360/1/8360 8352/1/8352 +f 8288/1/8288 8359/1/8359 8291/1/8291 +f 8361/1/8361 8296/1/8296 8360/1/8360 +f 8296/1/8296 8361/1/8361 8298/1/8298 +f 8293/1/8293 8291/1/8291 8294/1/8294 +f 8298/1/8298 8297/1/8297 8296/1/8296 +f 8350/1/8350 8293/1/8293 8295/1/8295 +f 8299/1/8299 8349/1/8349 8297/1/8297 +f 8361/1/8361 8350/1/8350 8362/1/8362 +f 8298/1/8298 8361/1/8361 8362/1/8362 +f 8298/1/8298 8299/1/8299 8297/1/8297 +f 8302/1/8302 8301/1/8301 8300/1/8300 +f 8299/1/8299 8348/1/8348 8349/1/8349 +f 8364/1/8364 8348/1/8348 8338/1/8338 +f 8302/1/8302 8363/1/8363 8364/1/8364 +f 8302/1/8302 8303/1/8303 8301/1/8301 +f 8367/1/8367 8339/1/8339 8303/1/8303 +f 8339/1/8339 8337/1/8337 8303/1/8303 +f 8303/1/8303 8337/1/8337 8320/1/8320 +f 8337/1/8337 8339/1/8339 8340/1/8340 +f 8340/1/8340 8375/1/8375 8337/1/8337 +f 8366/1/8366 8337/1/8337 8375/1/8375 +f 8377/1/8377 8375/1/8375 8340/1/8340 +f 8377/1/8377 8340/1/8340 8343/1/8343 +f 8377/1/8377 8343/1/8343 8381/1/8381 +f 8380/1/8380 8377/1/8377 8381/1/8381 +f 8381/1/8381 8347/1/8347 8380/1/8380 +f 8380/1/8380 8347/1/8347 8342/1/8342 +f 8380/1/8380 8342/1/8342 8379/1/8379 +f 8342/1/8342 8344/1/8344 8379/1/8379 +f 8379/1/8379 8344/1/8344 8382/1/8382 +f 8382/1/8382 8378/1/8378 8379/1/8379 +f 8379/1/8379 8378/1/8378 8377/1/8377 +f 8378/1/8378 8376/1/8376 8377/1/8377 +f 8378/1/8378 8339/1/8339 8376/1/8376 +f 8341/1/8341 8339/1/8339 8378/1/8378 +f 8383/1/8383 8341/1/8341 8378/1/8378 +f 8383/1/8383 8346/1/8346 8341/1/8341 +f 8345/1/8345 8341/1/8341 8346/1/8346 +f 8384/1/8384 8345/1/8345 8346/1/8346 +f 8382/1/8382 8345/1/8345 8384/1/8384 +f 8384/1/8384 8383/1/8383 8382/1/8382 +f 8344/1/8344 8341/1/8341 8345/1/8345 +f 8344/1/8344 8340/1/8340 8341/1/8341 +f 8384/1/8384 8346/1/8346 8383/1/8383 +f 8382/1/8382 8383/1/8383 8378/1/8378 +f 8382/1/8382 8344/1/8344 8345/1/8345 +f 8342/1/8342 8340/1/8340 8344/1/8344 +f 8347/1/8347 8343/1/8343 8342/1/8342 +f 8379/1/8379 8377/1/8377 8380/1/8380 +f 8381/1/8381 8343/1/8343 8347/1/8347 +f 8342/1/8342 8343/1/8343 8340/1/8340 +f 8377/1/8377 8376/1/8376 8375/1/8375 +f 8367/1/8367 8375/1/8375 8376/1/8376 +f 8340/1/8340 8339/1/8339 8341/1/8341 +f 8376/1/8376 8339/1/8339 8367/1/8367 +f 8367/1/8367 8366/1/8366 8375/1/8375 +f 8365/1/8365 8319/1/8319 8304/1/8304 +f 8366/1/8366 8320/1/8320 8337/1/8337 +f 8317/1/8317 8318/1/8318 8319/1/8319 +f 8333/1/8333 8303/1/8303 8320/1/8320 +f 8316/1/8316 8332/1/8332 8318/1/8318 +f 8368/1/8368 8333/1/8333 8370/1/8370 +f 8317/1/8317 8368/1/8368 8370/1/8370 +f 8317/1/8317 8316/1/8316 8318/1/8318 +f 7916/1/7916 8114/1/8114 8315/1/8315 +f 8316/1/8316 8331/1/8331 8332/1/8332 +f 7841/1/7841 8331/1/8331 8082/1/8082 +f 8082/1/8082 8115/1/8115 8116/1/8116 +f 8149/1/8149 8152/1/8152 8115/1/8115 +f 8150/1/8150 8151/1/8151 8149/1/8149 +f 8153/1/8153 8154/1/8154 8150/1/8150 +f 8166/1/8166 8164/1/8164 8153/1/8153 +f 8167/1/8167 8164/1/8164 8166/1/8166 +f 8167/1/8167 8168/1/8168 8169/1/8169 +f 8169/1/8169 8168/1/8168 8170/1/8170 +f 8173/1/8173 8170/1/8170 8175/1/8175 +f 8177/1/8177 8175/1/8175 8178/1/8178 +f 8178/1/8178 8180/1/8180 8177/1/8177 +f 8180/1/8180 8182/1/8182 8181/1/8181 +f 8181/1/8181 8182/1/8182 8183/1/8183 +f 8183/1/8183 8185/1/8185 8184/1/8184 +f 8184/1/8184 8185/1/8185 8186/1/8186 +f 8187/1/8187 8186/1/8186 8189/1/8189 +f 8058/1/8058 8054/1/8054 8189/1/8189 +f 8053/1/8053 8054/1/8054 8058/1/8058 +f 8052/1/8052 8050/1/8050 8053/1/8053 +f 8051/1/8051 8046/1/8046 8052/1/8052 +f 8057/1/8057 7901/1/7901 8056/1/8056 +f 8059/1/8059 7899/1/7899 7898/1/7898 +f 8145/1/8145 7898/1/7898 7893/1/7893 +f 8143/1/8143 7893/1/7893 7891/1/7891 +f 7890/1/7890 7892/1/7892 7891/1/7891 +f 8148/1/8148 7892/1/7892 7890/1/7890 +f 8059/1/8059 8147/1/8147 8148/1/8148 +f 8060/1/8060 8051/1/8051 8059/1/8059 +f 7886/1/7886 7871/1/7871 8061/1/8061 +f 7873/1/7873 8321/1/8321 8060/1/8060 +f 7873/1/7873 7872/1/7872 7874/1/7874 +f 7830/1/7830 8062/1/8062 7872/1/7872 +f 7825/1/7825 7829/1/7829 7830/1/7830 +f 7828/1/7828 7829/1/7829 7825/1/7825 +f 7822/1/7822 7831/1/7831 7828/1/7828 +f 7821/1/7821 7832/1/7832 7822/1/7822 +f 7999/1/7999 7821/1/7821 7815/1/7815 +f 7997/1/7997 7815/1/7815 7816/1/7816 +f 7995/1/7995 7998/1/7998 7997/1/7997 +f 7992/1/7992 7998/1/7998 7995/1/7995 +f 7988/1/7988 7991/1/7991 7992/1/7992 +f 7987/1/7987 7988/1/7988 7989/1/7989 +f 7987/1/7987 7989/1/7989 7970/1/7970 +f 7972/1/7972 7970/1/7970 7969/1/7969 +f 7973/1/7973 7969/1/7969 7974/1/7974 +f 7979/1/7979 7974/1/7974 7978/1/7978 +f 7980/1/7980 7946/1/7946 7979/1/7979 +f 7961/1/7961 7962/1/7962 7965/1/7965 +f 7980/1/7980 7981/1/7981 7946/1/7946 +f 7961/1/7961 7959/1/7959 7962/1/7962 +f 7961/1/7961 7958/1/7958 7959/1/7959 +f 7981/1/7981 7963/1/7963 7982/1/7982 +f 7945/1/7945 7982/1/7982 7942/1/7942 +f 7915/1/7915 7941/1/7941 7942/1/7942 +f 7916/1/7916 7941/1/7941 7915/1/7915 +f 7913/1/7913 8114/1/8114 7916/1/7916 +f 7903/1/7903 7901/1/7901 7913/1/7913 +f 7900/1/7900 7901/1/7901 7903/1/7903 +f 7887/1/7887 7900/1/7900 7788/1/7788 +f 7888/1/7888 7887/1/7887 7788/1/7788 +f 7871/1/7871 7887/1/7887 7888/1/7888 +f 7826/1/7826 7871/1/7871 7889/1/7889 +f 7824/1/7824 7826/1/7826 7827/1/7827 +f 7820/1/7820 7823/1/7823 7824/1/7824 +f 7814/1/7814 7817/1/7817 7820/1/7820 +f 7818/1/7818 7911/1/7911 7819/1/7819 +f 7819/1/7819 7911/1/7911 7910/1/7910 +f 7910/1/7910 7911/1/7911 7908/1/7908 +f 7801/1/7801 7806/1/7806 7807/1/7807 +f 7814/1/7814 7808/1/7808 7810/1/7810 +f 7809/1/7809 7813/1/7813 7810/1/7810 +f 7811/1/7811 7813/1/7813 7809/1/7809 +f 7994/1/7994 7996/1/7996 7811/1/7811 +f 7990/1/7990 7994/1/7994 7993/1/7993 +f 7971/1/7971 7993/1/7993 7968/1/7968 +f 7966/1/7966 7971/1/7971 7968/1/7968 +f 7956/1/7956 7966/1/7966 7957/1/7957 +f 7960/1/7960 7964/1/7964 7956/1/7956 +f 7960/1/7960 7958/1/7958 7961/1/7961 +f 7763/1/7763 7759/1/7759 7764/1/7764 +f 7958/1/7958 7953/1/7953 7959/1/7959 +f 7754/1/7754 7757/1/7757 7954/1/7954 +f 7952/1/7952 7959/1/7959 7953/1/7953 +f 7952/1/7952 7914/1/7914 7943/1/7943 +f 7902/1/7902 7912/1/7912 7914/1/7914 +f 7782/1/7782 7783/1/7783 7902/1/7902 +f 7779/1/7779 7780/1/7780 7782/1/7782 +f 7777/1/7777 7778/1/7778 7779/1/7779 +f 7776/1/7776 7778/1/7778 7777/1/7777 +f 7775/1/7775 7776/1/7776 7772/1/7772 +f 7785/1/7785 7775/1/7775 7792/1/7792 +f 7785/1/7785 7792/1/7792 7789/1/7789 +f 7792/1/7792 7793/1/7793 7789/1/7789 +f 7789/1/7789 7793/1/7793 7794/1/7794 +f 7786/1/7786 7785/1/7785 7789/1/7789 +f 7786/1/7786 7791/1/7791 7787/1/7787 +f 7904/1/7904 7884/1/7884 7791/1/7791 +f 7906/1/7906 7885/1/7885 7904/1/7904 +f 7908/1/7908 7911/1/7911 7906/1/7906 +f 7907/1/7907 7910/1/7910 7908/1/7908 +f 7790/1/7790 7797/1/7797 7905/1/7905 +f 7909/1/7909 7798/1/7798 7907/1/7907 +f 7795/1/7795 7796/1/7796 7797/1/7797 +f 7796/1/7796 7774/1/7774 7769/1/7769 +f 7801/1/7801 7807/1/7807 7798/1/7798 +f 7806/1/7806 7801/1/7801 7800/1/7800 +f 7800/1/7800 7805/1/7805 7806/1/7806 +f 7812/1/7812 7805/1/7805 7804/1/7804 +f 7967/1/7967 7804/1/7804 7803/1/7803 +f 7768/1/7768 7955/1/7955 7803/1/7803 +f 7799/1/7799 7770/1/7770 7802/1/7802 +f 7766/1/7766 7767/1/7767 7768/1/7768 +f 7799/1/7799 7769/1/7769 7770/1/7770 +f 7769/1/7769 7771/1/7771 7765/1/7765 +f 7761/1/7761 7762/1/7762 7766/1/7766 +f 7771/1/7771 7760/1/7760 7765/1/7765 +f 7761/1/7761 7759/1/7759 7762/1/7762 +f 7773/1/7773 7755/1/7755 7760/1/7760 +f 7759/1/7759 7754/1/7754 7954/1/7954 +f 7755/1/7755 7756/1/7756 7751/1/7751 +f 7754/1/7754 7753/1/7753 7757/1/7757 +f 7752/1/7752 7758/1/7758 7753/1/7753 +f 7756/1/7756 7752/1/7752 7751/1/7751 +f 8401/1/8401 8402/1/8402 8403/1/8403 +f 8401/1/8401 8403/1/8403 8404/1/8404 +f 8405/1/8405 8401/1/8401 8404/1/8404 +f 8405/1/8405 8404/1/8404 8410/1/8410 +f 8427/1/8427 8405/1/8405 8410/1/8410 +f 8427/1/8427 8410/1/8410 8428/1/8428 +f 8431/1/8431 8427/1/8427 8428/1/8428 +f 8431/1/8431 8428/1/8428 8571/1/8571 +f 8452/1/8452 8431/1/8431 8571/1/8571 +f 8567/1/8567 8452/1/8452 8571/1/8571 +f 8567/1/8567 8571/1/8571 8570/1/8570 +f 8565/1/8565 8567/1/8567 8570/1/8570 +f 8565/1/8565 8570/1/8570 8568/1/8568 +f 8568/1/8568 8569/1/8569 8565/1/8565 +f 8565/1/8565 8569/1/8569 8566/1/8566 +f 8565/1/8565 8566/1/8566 8563/1/8563 +f 8563/1/8563 8564/1/8564 8565/1/8565 +f 8563/1/8563 8562/1/8562 8564/1/8564 +f 8562/1/8562 8560/1/8560 8564/1/8564 +f 8564/1/8564 8560/1/8560 8452/1/8452 +f 8451/1/8451 8452/1/8452 8560/1/8560 +f 8572/1/8572 8451/1/8451 8560/1/8560 +f 8572/1/8572 8560/1/8560 8561/1/8561 +f 8559/1/8559 8572/1/8572 8561/1/8561 +f 8559/1/8559 8561/1/8561 8558/1/8558 +f 8558/1/8558 8552/1/8552 8559/1/8559 +f 8552/1/8552 8543/1/8543 8559/1/8559 +f 8559/1/8559 8543/1/8543 8573/1/8573 +f 8559/1/8559 8573/1/8573 8450/1/8450 +f 8450/1/8450 8573/1/8573 8453/1/8453 +f 8450/1/8450 8453/1/8453 8444/1/8444 +f 8444/1/8444 8446/1/8446 8450/1/8450 +f 8446/1/8446 8449/1/8449 8450/1/8450 +f 8450/1/8450 8449/1/8449 8572/1/8572 +f 8446/1/8446 8448/1/8448 8449/1/8449 +f 8449/1/8449 8448/1/8448 8451/1/8451 +f 8448/1/8448 8443/1/8443 8451/1/8451 +f 8448/1/8448 8447/1/8447 8443/1/8443 +f 8443/1/8443 8447/1/8447 8442/1/8442 +f 8443/1/8443 8442/1/8442 8440/1/8440 +f 8440/1/8440 8433/1/8433 8443/1/8443 +f 8443/1/8443 8433/1/8433 8429/1/8429 +f 8443/1/8443 8429/1/8429 8452/1/8452 +f 8433/1/8433 8430/1/8430 8429/1/8429 +f 8429/1/8429 8430/1/8430 8427/1/8427 +f 8433/1/8433 8434/1/8434 8430/1/8430 +f 8434/1/8434 8432/1/8432 8430/1/8430 +f 8430/1/8430 8432/1/8432 8405/1/8405 +f 8432/1/8432 8406/1/8406 8405/1/8405 +f 8432/1/8432 8436/1/8436 8406/1/8406 +f 8406/1/8406 8436/1/8436 8402/1/8402 +f 8436/1/8436 8438/1/8438 8402/1/8402 +f 8402/1/8402 8438/1/8438 8408/1/8408 +f 8438/1/8438 8459/1/8459 8408/1/8408 +f 8408/1/8408 8459/1/8459 8460/1/8460 +f 8408/1/8408 8460/1/8460 8414/1/8414 +f 8414/1/8414 8411/1/8411 8408/1/8408 +f 8408/1/8408 8411/1/8411 8407/1/8407 +f 8403/1/8403 8408/1/8408 8407/1/8407 +f 8409/1/8409 8407/1/8407 8411/1/8411 +f 8409/1/8409 8411/1/8411 8412/1/8412 +f 8410/1/8410 8409/1/8409 8412/1/8412 +f 8417/1/8417 8410/1/8410 8412/1/8412 +f 8412/1/8412 8415/1/8415 8417/1/8417 +f 8417/1/8417 8415/1/8415 8422/1/8422 +f 8417/1/8417 8422/1/8422 8423/1/8423 +f 8422/1/8422 8424/1/8424 8423/1/8423 +f 8423/1/8423 8424/1/8424 8644/1/8644 +f 8423/1/8423 8644/1/8644 8425/1/8425 +f 8425/1/8425 8426/1/8426 8423/1/8423 +f 8423/1/8423 8426/1/8426 8410/1/8410 +f 8571/1/8571 8426/1/8426 8425/1/8425 +f 8425/1/8425 8644/1/8644 8570/1/8570 +f 8424/1/8424 8642/1/8642 8644/1/8644 +f 8568/1/8568 8644/1/8644 8642/1/8642 +f 8424/1/8424 8471/1/8471 8642/1/8642 +f 8471/1/8471 8643/1/8643 8642/1/8642 +f 8643/1/8643 8578/1/8578 8642/1/8642 +f 8642/1/8642 8578/1/8578 8569/1/8569 +f 8643/1/8643 8577/1/8577 8578/1/8578 +f 8577/1/8577 8566/1/8566 8578/1/8578 +f 8577/1/8577 8574/1/8574 8566/1/8566 +f 8574/1/8574 8575/1/8575 8566/1/8566 +f 8566/1/8566 8575/1/8575 8576/1/8576 +f 8566/1/8566 8576/1/8576 8557/1/8557 +f 8576/1/8576 8554/1/8554 8557/1/8557 +f 8557/1/8557 8554/1/8554 8553/1/8553 +f 8556/1/8556 8557/1/8557 8553/1/8553 +f 8553/1/8553 8551/1/8551 8556/1/8556 +f 8556/1/8556 8551/1/8551 8558/1/8558 +f 8560/1/8560 8556/1/8556 8558/1/8558 +f 8550/1/8550 8551/1/8551 8553/1/8553 +f 8550/1/8550 8553/1/8553 8548/1/8548 +f 8544/1/8544 8550/1/8550 8548/1/8548 +f 8548/1/8548 8545/1/8545 8544/1/8544 +f 8545/1/8545 8540/1/8540 8544/1/8544 +f 8540/1/8540 8542/1/8542 8544/1/8544 +f 8544/1/8544 8542/1/8542 8549/1/8549 +f 8549/1/8549 8542/1/8542 8543/1/8543 +f 8543/1/8543 8542/1/8542 8528/1/8528 +f 8528/1/8528 8527/1/8527 8543/1/8543 +f 8543/1/8543 8527/1/8527 8526/1/8526 +f 8527/1/8527 8497/1/8497 8526/1/8526 +f 8497/1/8497 8525/1/8525 8526/1/8526 +f 8573/1/8573 8526/1/8526 8525/1/8525 +f 8497/1/8497 8473/1/8473 8525/1/8525 +f 8453/1/8453 8525/1/8525 8473/1/8473 +f 8453/1/8453 8473/1/8473 8454/1/8454 +f 8454/1/8454 8473/1/8473 8455/1/8455 +f 8454/1/8454 8455/1/8455 8445/1/8445 +f 8444/1/8444 8454/1/8454 8445/1/8445 +f 8444/1/8444 8445/1/8445 8439/1/8439 +f 8439/1/8439 8441/1/8441 8444/1/8444 +f 8439/1/8439 8440/1/8440 8441/1/8441 +f 8439/1/8439 8435/1/8435 8440/1/8440 +f 8440/1/8440 8435/1/8435 8434/1/8434 +f 8439/1/8439 8437/1/8437 8435/1/8435 +f 8435/1/8435 8437/1/8437 8436/1/8436 +f 8445/1/8445 8437/1/8437 8439/1/8439 +f 8445/1/8445 8456/1/8456 8437/1/8437 +f 8437/1/8437 8456/1/8456 8438/1/8438 +f 8455/1/8455 8456/1/8456 8445/1/8445 +f 8455/1/8455 8458/1/8458 8456/1/8456 +f 8459/1/8459 8456/1/8456 8458/1/8458 +f 8458/1/8458 8487/1/8487 8459/1/8459 +f 8459/1/8459 8487/1/8487 8485/1/8485 +f 8487/1/8487 8486/1/8486 8485/1/8485 +f 8485/1/8485 8486/1/8486 8484/1/8484 +f 8485/1/8485 8484/1/8484 8476/1/8476 +f 8460/1/8460 8485/1/8485 8476/1/8476 +f 8460/1/8460 8476/1/8476 8461/1/8461 +f 8461/1/8461 8476/1/8476 8463/1/8463 +f 8461/1/8461 8463/1/8463 8462/1/8462 +f 8414/1/8414 8461/1/8461 8462/1/8462 +f 8462/1/8462 8419/1/8419 8414/1/8414 +f 8419/1/8419 8413/1/8413 8414/1/8414 +f 8418/1/8418 8413/1/8413 8419/1/8419 +f 8418/1/8418 8419/1/8419 8464/1/8464 +f 8418/1/8418 8464/1/8464 8467/1/8467 +f 8421/1/8421 8418/1/8418 8467/1/8467 +f 8421/1/8421 8467/1/8467 8468/1/8468 +f 8468/1/8468 8469/1/8469 8421/1/8421 +f 8469/1/8469 8420/1/8420 8421/1/8421 +f 8420/1/8420 8416/1/8416 8421/1/8421 +f 8415/1/8415 8416/1/8416 8420/1/8420 +f 8472/1/8472 8420/1/8420 8469/1/8469 +f 8472/1/8472 8470/1/8470 8420/1/8420 +f 8470/1/8470 8471/1/8471 8420/1/8420 +f 8422/1/8422 8420/1/8420 8471/1/8471 +f 8470/1/8470 8599/1/8599 8471/1/8471 +f 8599/1/8599 8593/1/8593 8471/1/8471 +f 8599/1/8599 8592/1/8592 8593/1/8593 +f 8592/1/8592 8591/1/8591 8593/1/8593 +f 8593/1/8593 8591/1/8591 8577/1/8577 +f 8592/1/8592 8590/1/8590 8591/1/8591 +f 8590/1/8590 8587/1/8587 8591/1/8591 +f 8591/1/8591 8587/1/8587 8574/1/8574 +f 8587/1/8587 8585/1/8585 8574/1/8574 +f 8574/1/8574 8585/1/8585 8581/1/8581 +f 8585/1/8585 8582/1/8582 8581/1/8581 +f 8581/1/8581 8582/1/8582 8580/1/8580 +f 8581/1/8581 8580/1/8580 8575/1/8575 +f 8575/1/8575 8580/1/8580 8579/1/8579 +f 8580/1/8580 8555/1/8555 8579/1/8579 +f 8555/1/8555 8554/1/8554 8579/1/8579 +f 8548/1/8548 8554/1/8554 8555/1/8555 +f 8555/1/8555 8546/1/8546 8548/1/8548 +f 8555/1/8555 8584/1/8584 8546/1/8546 +f 8584/1/8584 8547/1/8547 8546/1/8546 +f 8546/1/8546 8547/1/8547 8541/1/8541 +f 8546/1/8546 8541/1/8541 8545/1/8545 +f 8547/1/8547 8539/1/8539 8541/1/8541 +f 8541/1/8541 8539/1/8539 8532/1/8532 +f 8541/1/8541 8532/1/8532 8540/1/8540 +f 8532/1/8532 8528/1/8528 8540/1/8540 +f 8532/1/8532 8529/1/8529 8528/1/8528 +f 8528/1/8528 8529/1/8529 8497/1/8497 +f 8497/1/8497 8529/1/8529 8530/1/8530 +f 8497/1/8497 8530/1/8530 8531/1/8531 +f 8531/1/8531 8720/1/8720 8497/1/8497 +f 8723/1/8723 8497/1/8497 8720/1/8720 +f 8720/1/8720 8722/1/8722 8723/1/8723 +f 8723/1/8723 8722/1/8722 8725/1/8725 +f 8725/1/8725 8498/1/8498 8723/1/8723 +f 8723/1/8723 8498/1/8498 8495/1/8495 +f 8498/1/8498 8496/1/8496 8495/1/8495 +f 8495/1/8495 8496/1/8496 8457/1/8457 +f 8495/1/8495 8457/1/8457 8497/1/8497 +f 8457/1/8457 8496/1/8496 8494/1/8494 +f 8494/1/8494 8493/1/8493 8457/1/8457 +f 8457/1/8457 8493/1/8493 8492/1/8492 +f 8457/1/8457 8492/1/8492 8458/1/8458 +f 8458/1/8458 8492/1/8492 8488/1/8488 +f 8724/1/8724 8488/1/8488 8492/1/8492 +f 8724/1/8724 8492/1/8492 8722/1/8722 +f 8722/1/8722 8721/1/8721 8724/1/8724 +f 8721/1/8721 8804/1/8804 8724/1/8724 +f 8724/1/8724 8804/1/8804 8761/1/8761 +f 8724/1/8724 8761/1/8761 8759/1/8759 +f 8759/1/8759 8761/1/8761 8762/1/8762 +f 8762/1/8762 8768/1/8768 8759/1/8759 +f 8759/1/8759 8768/1/8768 8769/1/8769 +f 8759/1/8759 8769/1/8769 8770/1/8770 +f 8770/1/8770 8774/1/8774 8759/1/8759 +f 8759/1/8759 8774/1/8774 8775/1/8775 +f 8759/1/8759 8775/1/8775 8776/1/8776 +f 8776/1/8776 8777/1/8777 8759/1/8759 +f 8759/1/8759 8777/1/8777 8778/1/8778 +f 8759/1/8759 8778/1/8778 8771/1/8771 +f 8771/1/8771 8772/1/8772 8759/1/8759 +f 8759/1/8759 8772/1/8772 8773/1/8773 +f 8759/1/8759 8773/1/8773 8763/1/8763 +f 8763/1/8763 8764/1/8764 8759/1/8759 +f 8764/1/8764 8766/1/8766 8759/1/8759 +f 8759/1/8759 8766/1/8766 8767/1/8767 +f 8759/1/8759 8767/1/8767 8765/1/8765 +f 8759/1/8759 8765/1/8765 8760/1/8760 +f 8759/1/8759 8760/1/8760 8757/1/8757 +f 8757/1/8757 8489/1/8489 8759/1/8759 +f 8759/1/8759 8489/1/8489 8488/1/8488 +f 8488/1/8488 8489/1/8489 8486/1/8486 +f 8486/1/8486 8489/1/8489 8490/1/8490 +f 8486/1/8486 8490/1/8490 8491/1/8491 +f 8755/1/8755 8486/1/8486 8491/1/8491 +f 8755/1/8755 8491/1/8491 8756/1/8756 +f 8752/1/8752 8755/1/8755 8756/1/8756 +f 8752/1/8752 8756/1/8756 8753/1/8753 +f 8752/1/8752 8753/1/8753 8749/1/8749 +f 8749/1/8749 8521/1/8521 8752/1/8752 +f 8752/1/8752 8521/1/8521 8524/1/8524 +f 8752/1/8752 8524/1/8524 8754/1/8754 +f 8754/1/8754 8524/1/8524 8490/1/8490 +f 8754/1/8754 8490/1/8490 8757/1/8757 +f 8757/1/8757 8758/1/8758 8754/1/8754 +f 8754/1/8754 8758/1/8758 8755/1/8755 +f 8523/1/8523 8524/1/8524 8521/1/8521 +f 8523/1/8523 8521/1/8521 8522/1/8522 +f 8753/1/8753 8523/1/8523 8522/1/8522 +f 8753/1/8753 8522/1/8522 8750/1/8750 +f 8750/1/8750 8522/1/8522 8520/1/8520 +f 8750/1/8750 8520/1/8520 8751/1/8751 +f 8750/1/8750 8751/1/8751 8747/1/8747 +f 8749/1/8749 8750/1/8750 8747/1/8747 +f 8747/1/8747 8519/1/8519 8749/1/8749 +f 8747/1/8747 8514/1/8514 8519/1/8519 +f 8518/1/8518 8519/1/8519 8514/1/8514 +f 8518/1/8518 8514/1/8514 8517/1/8517 +f 8748/1/8748 8518/1/8518 8517/1/8517 +f 8748/1/8748 8517/1/8517 8746/1/8746 +f 8745/1/8745 8748/1/8748 8746/1/8746 +f 8745/1/8745 8746/1/8746 8744/1/8744 +f 8744/1/8744 8736/1/8736 8745/1/8745 +f 8736/1/8736 8507/1/8507 8745/1/8745 +f 8745/1/8745 8507/1/8507 8514/1/8514 +f 8513/1/8513 8514/1/8514 8507/1/8507 +f 8513/1/8513 8507/1/8507 8515/1/8515 +f 8744/1/8744 8513/1/8513 8515/1/8515 +f 8744/1/8744 8515/1/8515 8743/1/8743 +f 8743/1/8743 8515/1/8515 8516/1/8516 +f 8743/1/8743 8516/1/8516 8742/1/8742 +f 8743/1/8743 8742/1/8742 8736/1/8736 +f 8736/1/8736 8742/1/8742 8741/1/8741 +f 8736/1/8736 8741/1/8741 8740/1/8740 +f 8740/1/8740 8739/1/8739 8736/1/8736 +f 8739/1/8739 8738/1/8738 8736/1/8736 +f 8736/1/8736 8738/1/8738 8737/1/8737 +f 8736/1/8736 8737/1/8737 8733/1/8733 +f 8733/1/8733 8505/1/8505 8736/1/8736 +f 8733/1/8733 8503/1/8503 8505/1/8505 +f 8503/1/8503 8504/1/8504 8505/1/8505 +f 8505/1/8505 8504/1/8504 8506/1/8506 +f 8505/1/8505 8506/1/8506 8507/1/8507 +f 8507/1/8507 8506/1/8506 8508/1/8508 +f 8507/1/8507 8508/1/8508 8509/1/8509 +f 8509/1/8509 8510/1/8510 8507/1/8507 +f 8507/1/8507 8510/1/8510 8511/1/8511 +f 8507/1/8507 8511/1/8511 8512/1/8512 +f 8741/1/8741 8512/1/8512 8511/1/8511 +f 8510/1/8510 8740/1/8740 8511/1/8511 +f 8738/1/8738 8510/1/8510 8509/1/8509 +f 8737/1/8737 8509/1/8509 8508/1/8508 +f 8737/1/8737 8508/1/8508 8506/1/8506 +f 8737/1/8737 8506/1/8506 8734/1/8734 +f 8734/1/8734 8506/1/8506 8504/1/8504 +f 8734/1/8734 8504/1/8504 8735/1/8735 +f 8731/1/8731 8734/1/8734 8735/1/8735 +f 8731/1/8731 8735/1/8735 8732/1/8732 +f 8731/1/8731 8732/1/8732 8729/1/8729 +f 8729/1/8729 8496/1/8496 8731/1/8731 +f 8731/1/8731 8496/1/8496 8503/1/8503 +f 8496/1/8496 8502/1/8502 8503/1/8503 +f 8496/1/8496 8501/1/8501 8502/1/8502 +f 8732/1/8732 8502/1/8502 8501/1/8501 +f 8732/1/8732 8501/1/8501 8730/1/8730 +f 8730/1/8730 8501/1/8501 8500/1/8500 +f 8730/1/8730 8500/1/8500 8727/1/8727 +f 8726/1/8726 8730/1/8730 8727/1/8727 +f 8726/1/8726 8727/1/8727 8722/1/8722 +f 8722/1/8722 8493/1/8493 8726/1/8726 +f 8722/1/8722 8727/1/8727 8728/1/8728 +f 8727/1/8727 8499/1/8499 8728/1/8728 +f 8728/1/8728 8499/1/8499 8725/1/8725 +f 8729/1/8729 8730/1/8730 8726/1/8726 +f 8726/1/8726 8494/1/8494 8729/1/8729 +f 8727/1/8727 8500/1/8500 8499/1/8499 +f 8496/1/8496 8499/1/8499 8500/1/8500 +f 8500/1/8500 8501/1/8501 8496/1/8496 +f 8729/1/8729 8732/1/8732 8730/1/8730 +f 8735/1/8735 8502/1/8502 8732/1/8732 +f 8733/1/8733 8734/1/8734 8731/1/8731 +f 8735/1/8735 8504/1/8504 8502/1/8502 +f 8503/1/8503 8502/1/8502 8504/1/8504 +f 8731/1/8731 8503/1/8503 8733/1/8733 +f 8733/1/8733 8737/1/8737 8734/1/8734 +f 8738/1/8738 8509/1/8509 8737/1/8737 +f 8739/1/8739 8510/1/8510 8738/1/8738 +f 8739/1/8739 8740/1/8740 8510/1/8510 +f 8741/1/8741 8511/1/8511 8740/1/8740 +f 8742/1/8742 8512/1/8512 8741/1/8741 +f 8742/1/8742 8516/1/8516 8512/1/8512 +f 8515/1/8515 8512/1/8512 8516/1/8516 +f 8515/1/8515 8507/1/8507 8512/1/8512 +f 8736/1/8736 8505/1/8505 8507/1/8507 +f 8743/1/8743 8736/1/8736 8744/1/8744 +f 8746/1/8746 8513/1/8513 8744/1/8744 +f 8747/1/8747 8748/1/8748 8745/1/8745 +f 8746/1/8746 8517/1/8517 8513/1/8513 +f 8751/1/8751 8518/1/8518 8748/1/8748 +f 8517/1/8517 8514/1/8514 8513/1/8513 +f 8520/1/8520 8519/1/8519 8518/1/8518 +f 8521/1/8521 8519/1/8519 8520/1/8520 +f 8745/1/8745 8514/1/8514 8747/1/8747 +f 8747/1/8747 8751/1/8751 8748/1/8748 +f 8751/1/8751 8520/1/8520 8518/1/8518 +f 8522/1/8522 8521/1/8521 8520/1/8520 +f 8491/1/8491 8524/1/8524 8523/1/8523 +f 8749/1/8749 8519/1/8519 8521/1/8521 +f 8749/1/8749 8753/1/8753 8750/1/8750 +f 8756/1/8756 8523/1/8523 8753/1/8753 +f 8754/1/8754 8755/1/8755 8752/1/8752 +f 8756/1/8756 8491/1/8491 8523/1/8523 +f 8755/1/8755 8758/1/8758 8486/1/8486 +f 8491/1/8491 8490/1/8490 8524/1/8524 +f 8757/1/8757 8490/1/8490 8489/1/8489 +f 8757/1/8757 8760/1/8760 8758/1/8758 +f 8758/1/8758 8760/1/8760 8975/1/8975 +f 8758/1/8758 8975/1/8975 8960/1/8960 +f 8959/1/8959 8758/1/8758 8960/1/8960 +f 8959/1/8959 8960/1/8960 8961/1/8961 +f 8961/1/8961 9020/1/9020 8959/1/8959 +f 8959/1/8959 9020/1/9020 9032/1/9032 +f 8959/1/8959 9032/1/9032 8484/1/8484 +f 8484/1/8484 9032/1/9032 8479/1/8479 +f 8479/1/8479 8474/1/8474 8484/1/8484 +f 8484/1/8484 8474/1/8474 8475/1/8475 +f 8474/1/8474 8463/1/8463 8475/1/8475 +f 8465/1/8465 8463/1/8463 8474/1/8474 +f 8466/1/8466 8465/1/8465 8474/1/8474 +f 8474/1/8474 8477/1/8477 8466/1/8466 +f 8466/1/8466 8477/1/8477 8478/1/8478 +f 8466/1/8466 8478/1/8478 8481/1/8481 +f 8468/1/8468 8466/1/8466 8481/1/8481 +f 8468/1/8468 8481/1/8481 8605/1/8605 +f 8605/1/8605 8472/1/8472 8468/1/8468 +f 8605/1/8605 8604/1/8604 8472/1/8472 +f 8603/1/8603 8604/1/8604 8605/1/8605 +f 8598/1/8598 8603/1/8603 8605/1/8605 +f 8605/1/8605 8606/1/8606 8598/1/8598 +f 8598/1/8598 8606/1/8606 8607/1/8607 +f 8598/1/8598 8607/1/8607 8597/1/8597 +f 8598/1/8598 8597/1/8597 8594/1/8594 +f 8594/1/8594 8596/1/8596 8598/1/8598 +f 8594/1/8594 8595/1/8595 8596/1/8596 +f 8596/1/8596 8595/1/8595 8600/1/8600 +f 8596/1/8596 8600/1/8600 8603/1/8603 +f 8600/1/8600 8602/1/8602 8603/1/8603 +f 8603/1/8603 8602/1/8602 8601/1/8601 +f 8601/1/8601 8602/1/8602 8599/1/8599 +f 8599/1/8599 8602/1/8602 8600/1/8600 +f 8599/1/8599 8600/1/8600 8595/1/8595 +f 8594/1/8594 8590/1/8590 8595/1/8595 +f 8588/1/8588 8590/1/8590 8594/1/8594 +f 8588/1/8588 8594/1/8594 8589/1/8589 +f 8588/1/8588 8589/1/8589 8586/1/8586 +f 8587/1/8587 8588/1/8588 8586/1/8586 +f 8586/1/8586 8589/1/8589 8583/1/8583 +f 8586/1/8586 8583/1/8583 8582/1/8582 +f 8582/1/8582 8583/1/8583 8555/1/8555 +f 8589/1/8589 8610/1/8610 8583/1/8583 +f 8583/1/8583 8610/1/8610 8584/1/8584 +f 8584/1/8584 8610/1/8610 8611/1/8611 +f 8611/1/8611 8612/1/8612 8584/1/8584 +f 8612/1/8612 8611/1/8611 8613/1/8613 +f 8613/1/8613 8615/1/8615 8612/1/8612 +f 8612/1/8612 8615/1/8615 8616/1/8616 +f 8612/1/8612 8616/1/8616 8547/1/8547 +f 8808/1/8808 8616/1/8616 8615/1/8615 +f 8808/1/8808 8615/1/8615 8814/1/8814 +f 8809/1/8809 8808/1/8808 8814/1/8814 +f 8809/1/8809 8814/1/8814 8815/1/8815 +f 8815/1/8815 8482/1/8482 8809/1/8809 +f 8479/1/8479 8809/1/8809 8482/1/8482 +f 8482/1/8482 8483/1/8483 8479/1/8479 +f 8479/1/8479 8483/1/8483 8480/1/8480 +f 8479/1/8479 8480/1/8480 8478/1/8478 +f 8606/1/8606 8480/1/8480 8483/1/8483 +f 8481/1/8481 8480/1/8480 8606/1/8606 +f 8482/1/8482 8609/1/8609 8483/1/8483 +f 8483/1/8483 8609/1/8609 8608/1/8608 +f 8607/1/8607 8483/1/8483 8608/1/8608 +f 8611/1/8611 8608/1/8608 8609/1/8609 +f 8613/1/8613 8609/1/8609 8482/1/8482 +f 8613/1/8613 8482/1/8482 8614/1/8614 +f 8816/1/8816 8613/1/8613 8614/1/8614 +f 8816/1/8816 8614/1/8614 8818/1/8818 +f 8817/1/8817 8816/1/8816 8818/1/8818 +f 8817/1/8817 8818/1/8818 8819/1/8819 +f 8819/1/8819 8617/1/8617 8817/1/8817 +f 8817/1/8817 8617/1/8617 8619/1/8619 +f 8817/1/8817 8619/1/8619 8815/1/8815 +f 8614/1/8614 8619/1/8619 8617/1/8617 +f 8614/1/8614 8617/1/8617 8618/1/8618 +f 8618/1/8618 8617/1/8617 8620/1/8620 +f 8618/1/8618 8620/1/8620 8621/1/8621 +f 8820/1/8820 8618/1/8618 8621/1/8621 +f 8820/1/8820 8621/1/8621 8822/1/8822 +f 8822/1/8822 8823/1/8823 8820/1/8820 +f 8820/1/8820 8823/1/8823 8821/1/8821 +f 8820/1/8820 8821/1/8821 8818/1/8818 +f 8823/1/8823 8622/1/8622 8821/1/8821 +f 8821/1/8821 8622/1/8622 8620/1/8620 +f 8821/1/8821 8620/1/8620 8819/1/8819 +f 8823/1/8823 8623/1/8623 8622/1/8622 +f 8621/1/8621 8622/1/8622 8623/1/8623 +f 8621/1/8621 8623/1/8623 8624/1/8624 +f 8624/1/8624 8623/1/8623 8625/1/8625 +f 8624/1/8624 8625/1/8625 8626/1/8626 +f 8627/1/8627 8624/1/8624 8626/1/8626 +f 8628/1/8628 8627/1/8627 8626/1/8626 +f 8827/1/8827 8628/1/8628 8626/1/8626 +f 8827/1/8827 8626/1/8626 8825/1/8825 +f 8827/1/8827 8825/1/8825 8824/1/8824 +f 8824/1/8824 8828/1/8828 8827/1/8827 +f 8824/1/8824 8829/1/8829 8828/1/8828 +f 8829/1/8829 8629/1/8629 8828/1/8828 +f 8828/1/8828 8629/1/8629 8628/1/8628 +f 8829/1/8829 8630/1/8630 8629/1/8629 +f 8630/1/8630 8631/1/8631 8629/1/8629 +f 8629/1/8629 8631/1/8631 8627/1/8627 +f 8631/1/8631 8632/1/8632 8627/1/8627 +f 8632/1/8632 8633/1/8633 8627/1/8627 +f 8627/1/8627 8633/1/8633 8634/1/8634 +f 8627/1/8627 8634/1/8634 8635/1/8635 +f 8835/1/8835 8627/1/8627 8635/1/8635 +f 8835/1/8835 8635/1/8635 8837/1/8837 +f 8836/1/8836 8835/1/8835 8837/1/8837 +f 8836/1/8836 8837/1/8837 8838/1/8838 +f 8838/1/8838 8638/1/8638 8836/1/8836 +f 8836/1/8836 8638/1/8638 8636/1/8636 +f 8836/1/8836 8636/1/8636 8834/1/8834 +f 8834/1/8834 8636/1/8636 8634/1/8634 +f 8834/1/8834 8634/1/8634 8833/1/8833 +f 8833/1/8833 8824/1/8824 8834/1/8834 +f 8834/1/8834 8824/1/8824 8835/1/8835 +f 8833/1/8833 8832/1/8832 8824/1/8824 +f 8824/1/8824 8832/1/8832 8831/1/8831 +f 8824/1/8824 8831/1/8831 8830/1/8830 +f 8830/1/8830 8831/1/8831 8631/1/8631 +f 8832/1/8832 8633/1/8633 8831/1/8831 +f 8833/1/8833 8634/1/8634 8832/1/8832 +f 8636/1/8636 8638/1/8638 8637/1/8637 +f 8635/1/8635 8636/1/8636 8637/1/8637 +f 8637/1/8637 8638/1/8638 8639/1/8639 +f 8637/1/8637 8639/1/8639 8640/1/8640 +f 8839/1/8839 8637/1/8637 8640/1/8640 +f 8839/1/8839 8640/1/8640 8842/1/8842 +f 8841/1/8841 8839/1/8839 8842/1/8842 +f 8841/1/8841 8842/1/8842 8843/1/8843 +f 8843/1/8843 8537/1/8537 8841/1/8841 +f 8841/1/8841 8537/1/8537 8641/1/8641 +f 8841/1/8841 8641/1/8641 8840/1/8840 +f 8840/1/8840 8641/1/8641 8639/1/8639 +f 8840/1/8840 8639/1/8639 8838/1/8838 +f 8838/1/8838 8839/1/8839 8840/1/8840 +f 8536/1/8536 8641/1/8641 8537/1/8537 +f 8536/1/8536 8537/1/8537 8533/1/8533 +f 8844/1/8844 8536/1/8536 8533/1/8533 +f 8844/1/8844 8533/1/8533 8811/1/8811 +f 8811/1/8811 8875/1/8875 8844/1/8844 +f 8844/1/8844 8875/1/8875 8874/1/8874 +f 8874/1/8874 8868/1/8868 8844/1/8844 +f 8844/1/8844 8868/1/8868 8867/1/8867 +f 8844/1/8844 8867/1/8867 8871/1/8871 +f 8871/1/8871 8870/1/8870 8844/1/8844 +f 8844/1/8844 8870/1/8870 8873/1/8873 +f 8844/1/8844 8873/1/8873 8872/1/8872 +f 8872/1/8872 8848/1/8848 8844/1/8844 +f 8844/1/8844 8848/1/8848 8846/1/8846 +f 8844/1/8844 8846/1/8846 8845/1/8845 +f 8843/1/8843 8844/1/8844 8845/1/8845 +f 8845/1/8845 8535/1/8535 8843/1/8843 +f 8843/1/8843 8535/1/8535 8538/1/8538 +f 8533/1/8533 8538/1/8538 8535/1/8535 +f 8534/1/8534 8533/1/8533 8535/1/8535 +f 8529/1/8529 8533/1/8533 8534/1/8534 +f 8529/1/8529 8534/1/8534 8715/1/8715 +f 8715/1/8715 8534/1/8534 8850/1/8850 +f 8850/1/8850 8847/1/8847 8715/1/8715 +f 8715/1/8715 8847/1/8847 8851/1/8851 +f 8715/1/8715 8851/1/8851 8883/1/8883 +f 8883/1/8883 8884/1/8884 8715/1/8715 +f 8715/1/8715 8884/1/8884 8714/1/8714 +f 8715/1/8715 8714/1/8714 8712/1/8712 +f 8712/1/8712 8713/1/8713 8715/1/8715 +f 8715/1/8715 8713/1/8713 8716/1/8716 +f 8716/1/8716 8717/1/8717 8715/1/8715 +f 8715/1/8715 8717/1/8717 8718/1/8718 +f 8715/1/8715 8718/1/8718 8720/1/8720 +f 8720/1/8720 8971/1/8971 8715/1/8715 +f 8530/1/8530 8715/1/8715 8971/1/8971 +f 8530/1/8530 8971/1/8971 8645/1/8645 +f 8971/1/8971 8974/1/8974 8645/1/8645 +f 8645/1/8645 8974/1/8974 8647/1/8647 +f 8647/1/8647 8646/1/8646 8645/1/8645 +f 8531/1/8531 8645/1/8645 8646/1/8646 +f 8646/1/8646 8965/1/8965 8531/1/8531 +f 8648/1/8648 8965/1/8965 8646/1/8646 +f 8966/1/8966 8965/1/8965 8648/1/8648 +f 8653/1/8653 8966/1/8966 8648/1/8648 +f 8652/1/8652 8653/1/8653 8648/1/8648 +f 8652/1/8652 8648/1/8648 8649/1/8649 +f 8649/1/8649 8969/1/8969 8652/1/8652 +f 8652/1/8652 8969/1/8969 8968/1/8968 +f 8652/1/8652 8968/1/8968 8654/1/8654 +f 8654/1/8654 8968/1/8968 8967/1/8967 +f 8654/1/8654 8967/1/8967 8653/1/8653 +f 8967/1/8967 8968/1/8968 8966/1/8966 +f 8966/1/8966 8968/1/8968 8969/1/8969 +f 8970/1/8970 8969/1/8969 8649/1/8649 +f 8650/1/8650 8970/1/8970 8649/1/8649 +f 8649/1/8649 8647/1/8647 8650/1/8650 +f 8650/1/8650 8647/1/8647 8651/1/8651 +f 8651/1/8651 8972/1/8972 8650/1/8650 +f 8651/1/8651 8973/1/8973 8972/1/8972 +f 8972/1/8972 8973/1/8973 8970/1/8970 +f 8970/1/8970 8973/1/8973 8974/1/8974 +f 8647/1/8647 8973/1/8973 8651/1/8651 +f 8650/1/8650 8972/1/8972 8970/1/8970 +f 8969/1/8969 8970/1/8970 8971/1/8971 +f 8965/1/8965 8969/1/8969 8971/1/8971 +f 8649/1/8649 8648/1/8648 8647/1/8647 +f 8654/1/8654 8653/1/8653 8652/1/8652 +f 8653/1/8653 8967/1/8967 8966/1/8966 +f 8966/1/8966 8969/1/8969 8965/1/8965 +f 8648/1/8648 8646/1/8646 8647/1/8647 +f 8647/1/8647 8974/1/8974 8973/1/8973 +f 8970/1/8970 8974/1/8974 8971/1/8971 +f 8965/1/8965 8971/1/8971 8720/1/8720 +f 8720/1/8720 8718/1/8718 8721/1/8721 +f 8718/1/8718 8803/1/8803 8721/1/8721 +f 8719/1/8719 8803/1/8803 8718/1/8718 +f 8719/1/8719 8798/1/8798 8803/1/8803 +f 8779/1/8779 8803/1/8803 8798/1/8798 +f 8793/1/8793 8779/1/8779 8798/1/8798 +f 8793/1/8793 8798/1/8798 8797/1/8797 +f 8793/1/8793 8797/1/8797 8796/1/8796 +f 8796/1/8796 8792/1/8792 8793/1/8793 +f 8793/1/8793 8792/1/8792 8789/1/8789 +f 8793/1/8793 8789/1/8789 8782/1/8782 +f 8782/1/8782 8789/1/8789 8787/1/8787 +f 8782/1/8782 8787/1/8787 8784/1/8784 +f 8784/1/8784 8780/1/8780 8782/1/8782 +f 8782/1/8782 8780/1/8780 8779/1/8779 +f 8761/1/8761 8779/1/8779 8780/1/8780 +f 8784/1/8784 8781/1/8781 8780/1/8780 +f 8781/1/8781 8768/1/8768 8780/1/8780 +f 8786/1/8786 8781/1/8781 8784/1/8784 +f 8925/1/8925 8786/1/8786 8784/1/8784 +f 8784/1/8784 8788/1/8788 8925/1/8925 +f 8791/1/8791 8925/1/8925 8788/1/8788 +f 8787/1/8787 8791/1/8791 8788/1/8788 +f 8787/1/8787 8790/1/8790 8791/1/8791 +f 8794/1/8794 8791/1/8791 8790/1/8790 +f 8794/1/8794 8790/1/8790 8795/1/8795 +f 8800/1/8800 8794/1/8794 8795/1/8795 +f 8799/1/8799 8800/1/8800 8795/1/8795 +f 8796/1/8796 8799/1/8799 8795/1/8795 +f 8706/1/8706 8799/1/8799 8796/1/8796 +f 8706/1/8706 8796/1/8796 8707/1/8707 +f 8706/1/8706 8707/1/8707 8703/1/8703 +f 8706/1/8706 8703/1/8703 8701/1/8701 +f 8701/1/8701 8703/1/8703 8702/1/8702 +f 8701/1/8701 8702/1/8702 8700/1/8700 +f 8700/1/8700 8662/1/8662 8701/1/8701 +f 8661/1/8661 8701/1/8701 8662/1/8662 +f 8661/1/8661 8662/1/8662 8657/1/8657 +f 8657/1/8657 8659/1/8659 8661/1/8661 +f 8661/1/8661 8659/1/8659 8800/1/8800 +f 8657/1/8657 8656/1/8656 8659/1/8659 +f 8656/1/8656 8660/1/8660 8659/1/8659 +f 8659/1/8659 8660/1/8660 8794/1/8794 +f 8801/1/8801 8794/1/8794 8660/1/8660 +f 8660/1/8660 8887/1/8887 8801/1/8801 +f 8801/1/8801 8887/1/8887 8930/1/8930 +f 8801/1/8801 8930/1/8930 8929/1/8929 +f 8929/1/8929 8930/1/8930 8931/1/8931 +f 8929/1/8929 8931/1/8931 8932/1/8932 +f 8932/1/8932 8927/1/8927 8929/1/8929 +f 8929/1/8929 8927/1/8927 8794/1/8794 +f 8932/1/8932 8935/1/8935 8927/1/8927 +f 8935/1/8935 8936/1/8936 8927/1/8927 +f 8927/1/8927 8936/1/8936 8928/1/8928 +f 8927/1/8927 8928/1/8928 8791/1/8791 +f 8928/1/8928 8926/1/8926 8791/1/8791 +f 8928/1/8928 8936/1/8936 8926/1/8926 +f 8926/1/8926 8936/1/8936 8935/1/8935 +f 8926/1/8926 8935/1/8935 8924/1/8924 +f 8924/1/8924 8923/1/8923 8926/1/8926 +f 8926/1/8926 8923/1/8923 8925/1/8925 +f 8924/1/8924 8921/1/8921 8923/1/8923 +f 8923/1/8923 8921/1/8921 8922/1/8922 +f 8922/1/8922 8785/1/8785 8923/1/8923 +f 8923/1/8923 8785/1/8785 8783/1/8783 +f 8923/1/8923 8783/1/8783 8786/1/8786 +f 8785/1/8785 8774/1/8774 8783/1/8783 +f 8922/1/8922 8776/1/8776 8785/1/8785 +f 8921/1/8921 8920/1/8920 8922/1/8922 +f 8922/1/8922 8920/1/8920 8778/1/8778 +f 8921/1/8921 8919/1/8919 8920/1/8920 +f 8919/1/8919 8906/1/8906 8920/1/8920 +f 8920/1/8920 8906/1/8906 8771/1/8771 +f 8919/1/8919 8909/1/8909 8906/1/8906 +f 8909/1/8909 8904/1/8904 8906/1/8906 +f 8906/1/8906 8904/1/8904 8882/1/8882 +f 8906/1/8906 8882/1/8882 8773/1/8773 +f 8901/1/8901 8882/1/8882 8904/1/8904 +f 8904/1/8904 8905/1/8905 8901/1/8901 +f 8901/1/8901 8905/1/8905 8902/1/8902 +f 8901/1/8901 8902/1/8902 8900/1/8900 +f 8900/1/8900 8881/1/8881 8901/1/8901 +f 8900/1/8900 8880/1/8880 8881/1/8881 +f 8766/1/8766 8881/1/8881 8880/1/8880 +f 8898/1/8898 8880/1/8880 8900/1/8900 +f 8899/1/8899 8898/1/8898 8900/1/8900 +f 8900/1/8900 8903/1/8903 8899/1/8899 +f 8899/1/8899 8903/1/8903 8902/1/8902 +f 8889/1/8889 8899/1/8899 8902/1/8902 +f 8889/1/8889 8902/1/8902 8910/1/8910 +f 8910/1/8910 8886/1/8886 8889/1/8889 +f 8885/1/8885 8889/1/8889 8886/1/8886 +f 8885/1/8885 8886/1/8886 8673/1/8673 +f 8673/1/8673 8665/1/8665 8885/1/8885 +f 8885/1/8885 8665/1/8665 8672/1/8672 +f 8885/1/8885 8672/1/8672 8888/1/8888 +f 8888/1/8888 8672/1/8672 8890/1/8890 +f 8890/1/8890 8891/1/8891 8888/1/8888 +f 8888/1/8888 8891/1/8891 8892/1/8892 +f 8889/1/8889 8888/1/8888 8892/1/8892 +f 8891/1/8891 8897/1/8897 8892/1/8892 +f 8892/1/8892 8897/1/8897 8899/1/8899 +f 8894/1/8894 8897/1/8897 8891/1/8891 +f 8877/1/8877 8894/1/8894 8891/1/8891 +f 8891/1/8891 8893/1/8893 8877/1/8877 +f 8877/1/8877 8893/1/8893 8861/1/8861 +f 8877/1/8877 8861/1/8861 8863/1/8863 +f 8863/1/8863 8876/1/8876 8877/1/8877 +f 8877/1/8877 8876/1/8876 8895/1/8895 +f 8876/1/8876 8812/1/8812 8895/1/8895 +f 8812/1/8812 8878/1/8878 8895/1/8895 +f 8895/1/8895 8878/1/8878 8896/1/8896 +f 8895/1/8895 8896/1/8896 8894/1/8894 +f 8878/1/8878 8879/1/8879 8896/1/8896 +f 8896/1/8896 8879/1/8879 8897/1/8897 +f 8897/1/8897 8879/1/8879 8898/1/8898 +f 8878/1/8878 8805/1/8805 8879/1/8879 +f 8765/1/8765 8879/1/8879 8805/1/8805 +f 8806/1/8806 8805/1/8805 8878/1/8878 +f 8760/1/8760 8805/1/8805 8806/1/8806 +f 8806/1/8806 8807/1/8807 8760/1/8760 +f 8760/1/8760 8807/1/8807 8808/1/8808 +f 8808/1/8808 8807/1/8807 8810/1/8810 +f 8810/1/8810 8807/1/8807 8811/1/8811 +f 8811/1/8811 8539/1/8539 8810/1/8810 +f 8810/1/8810 8539/1/8539 8616/1/8616 +f 8807/1/8807 8813/1/8813 8811/1/8811 +f 8807/1/8807 8812/1/8812 8813/1/8813 +f 8807/1/8807 8806/1/8806 8812/1/8812 +f 8812/1/8812 8806/1/8806 8878/1/8878 +f 8813/1/8813 8812/1/8812 8876/1/8876 +f 8813/1/8813 8876/1/8876 8875/1/8875 +f 8875/1/8875 8876/1/8876 8865/1/8865 +f 8863/1/8863 8865/1/8865 8876/1/8876 +f 8860/1/8860 8865/1/8865 8863/1/8863 +f 8863/1/8863 8857/1/8857 8860/1/8860 +f 8860/1/8860 8857/1/8857 8858/1/8858 +f 8860/1/8860 8858/1/8858 8855/1/8855 +f 8855/1/8855 8859/1/8859 8860/1/8860 +f 8859/1/8859 8864/1/8864 8860/1/8860 +f 8859/1/8859 8866/1/8866 8864/1/8864 +f 8866/1/8866 8867/1/8867 8864/1/8864 +f 8852/1/8852 8866/1/8866 8859/1/8859 +f 8852/1/8852 8869/1/8869 8866/1/8866 +f 8869/1/8869 8870/1/8870 8866/1/8866 +f 8849/1/8849 8869/1/8869 8852/1/8852 +f 8852/1/8852 8689/1/8689 8849/1/8849 +f 8690/1/8690 8849/1/8849 8689/1/8689 +f 8690/1/8690 8689/1/8689 8686/1/8686 +f 8686/1/8686 8691/1/8691 8690/1/8690 +f 8690/1/8690 8691/1/8691 8847/1/8847 +f 8690/1/8690 8847/1/8847 8846/1/8846 +f 8686/1/8686 8687/1/8687 8691/1/8691 +f 8687/1/8687 8693/1/8693 8691/1/8691 +f 8691/1/8691 8693/1/8693 8698/1/8698 +f 8691/1/8691 8698/1/8698 8883/1/8883 +f 8697/1/8697 8698/1/8698 8693/1/8693 +f 8693/1/8693 8699/1/8699 8697/1/8697 +f 8697/1/8697 8699/1/8699 8702/1/8702 +f 8697/1/8697 8702/1/8702 8705/1/8705 +f 8705/1/8705 8710/1/8710 8697/1/8697 +f 8705/1/8705 8709/1/8709 8710/1/8710 +f 8712/1/8712 8710/1/8710 8709/1/8709 +f 8708/1/8708 8709/1/8709 8705/1/8705 +f 8703/1/8703 8708/1/8708 8705/1/8705 +f 8705/1/8705 8704/1/8704 8703/1/8703 +f 8708/1/8708 8711/1/8711 8709/1/8709 +f 8713/1/8713 8709/1/8709 8711/1/8711 +f 8707/1/8707 8711/1/8711 8708/1/8708 +f 8802/1/8802 8711/1/8711 8707/1/8707 +f 8707/1/8707 8797/1/8797 8802/1/8802 +f 8719/1/8719 8711/1/8711 8802/1/8802 +f 8719/1/8719 8717/1/8717 8711/1/8711 +f 8705/1/8705 8702/1/8702 8704/1/8704 +f 8693/1/8693 8696/1/8696 8699/1/8699 +f 8700/1/8700 8699/1/8699 8696/1/8696 +f 8696/1/8696 8695/1/8695 8700/1/8700 +f 8695/1/8695 8678/1/8678 8700/1/8700 +f 8695/1/8695 8694/1/8694 8678/1/8678 +f 8678/1/8678 8694/1/8694 8684/1/8684 +f 8678/1/8678 8684/1/8684 8681/1/8681 +f 8681/1/8681 8677/1/8677 8678/1/8678 +f 8678/1/8678 8677/1/8677 8675/1/8675 +f 8678/1/8678 8675/1/8675 8662/1/8662 +f 8662/1/8662 8675/1/8675 8674/1/8674 +f 8662/1/8662 8674/1/8674 8658/1/8658 +f 8674/1/8674 8671/1/8671 8658/1/8658 +f 8658/1/8658 8671/1/8671 8663/1/8663 +f 8658/1/8658 8663/1/8663 8655/1/8655 +f 8657/1/8657 8658/1/8658 8655/1/8655 +f 8655/1/8655 8663/1/8663 8664/1/8664 +f 8664/1/8664 8667/1/8667 8655/1/8655 +f 8655/1/8655 8667/1/8667 8656/1/8656 +f 8667/1/8667 8664/1/8664 8673/1/8673 +f 8673/1/8673 8887/1/8887 8667/1/8667 +f 8664/1/8664 8663/1/8663 8665/1/8665 +f 8665/1/8665 8663/1/8663 8666/1/8666 +f 8671/1/8671 8666/1/8666 8663/1/8663 +f 8670/1/8670 8666/1/8666 8671/1/8671 +f 8670/1/8670 8668/1/8668 8666/1/8666 +f 8668/1/8668 8669/1/8669 8666/1/8666 +f 8666/1/8666 8669/1/8669 8862/1/8862 +f 8666/1/8666 8862/1/8862 8890/1/8890 +f 8893/1/8893 8890/1/8890 8862/1/8862 +f 8857/1/8857 8862/1/8862 8669/1/8669 +f 8861/1/8861 8862/1/8862 8857/1/8857 +f 8668/1/8668 8854/1/8854 8669/1/8669 +f 8854/1/8854 8853/1/8853 8669/1/8669 +f 8669/1/8669 8853/1/8853 8855/1/8855 +f 8853/1/8853 8852/1/8852 8855/1/8855 +f 8688/1/8688 8852/1/8852 8853/1/8853 +f 8853/1/8853 8680/1/8680 8688/1/8688 +f 8688/1/8688 8680/1/8680 8682/1/8682 +f 8682/1/8682 8689/1/8689 8688/1/8688 +f 8680/1/8680 8679/1/8679 8682/1/8682 +f 8679/1/8679 8683/1/8683 8682/1/8682 +f 8686/1/8686 8682/1/8682 8683/1/8683 +f 8681/1/8681 8683/1/8683 8679/1/8679 +f 8683/1/8683 8681/1/8681 8685/1/8685 +f 8683/1/8683 8685/1/8685 8687/1/8687 +f 8685/1/8685 8692/1/8692 8687/1/8687 +f 8685/1/8685 8684/1/8684 8692/1/8692 +f 8679/1/8679 8680/1/8680 8676/1/8676 +f 8677/1/8677 8679/1/8679 8676/1/8676 +f 8676/1/8676 8680/1/8680 8668/1/8668 +f 8680/1/8680 8856/1/8856 8668/1/8668 +f 8853/1/8853 8856/1/8856 8680/1/8680 +f 8854/1/8854 8856/1/8856 8853/1/8853 +f 8668/1/8668 8856/1/8856 8854/1/8854 +f 8676/1/8676 8668/1/8668 8670/1/8670 +f 8675/1/8675 8676/1/8676 8670/1/8670 +f 8674/1/8674 8670/1/8670 8671/1/8671 +f 8675/1/8675 8670/1/8670 8674/1/8674 +f 8677/1/8677 8676/1/8676 8675/1/8675 +f 8681/1/8681 8679/1/8679 8677/1/8677 +f 8685/1/8685 8681/1/8681 8684/1/8684 +f 8684/1/8684 8694/1/8694 8692/1/8692 +f 8692/1/8692 8694/1/8694 8695/1/8695 +f 8692/1/8692 8695/1/8695 8696/1/8696 +f 8692/1/8692 8696/1/8696 8693/1/8693 +f 8697/1/8697 8710/1/8710 8698/1/8698 +f 8714/1/8714 8698/1/8698 8710/1/8710 +f 8687/1/8687 8692/1/8692 8693/1/8693 +f 8683/1/8683 8687/1/8687 8686/1/8686 +f 8686/1/8686 8689/1/8689 8682/1/8682 +f 8846/1/8846 8849/1/8849 8690/1/8690 +f 8688/1/8688 8689/1/8689 8852/1/8852 +f 8849/1/8849 8872/1/8872 8869/1/8869 +f 8855/1/8855 8852/1/8852 8859/1/8859 +f 8669/1/8669 8855/1/8855 8858/1/8858 +f 8857/1/8857 8669/1/8669 8858/1/8858 +f 8860/1/8860 8864/1/8864 8865/1/8865 +f 8864/1/8864 8868/1/8868 8865/1/8865 +f 8863/1/8863 8861/1/8861 8857/1/8857 +f 8893/1/8893 8862/1/8862 8861/1/8861 +f 8877/1/8877 8895/1/8895 8894/1/8894 +f 8894/1/8894 8896/1/8896 8897/1/8897 +f 8891/1/8891 8890/1/8890 8893/1/8893 +f 8672/1/8672 8666/1/8666 8890/1/8890 +f 8665/1/8665 8666/1/8666 8672/1/8672 +f 8673/1/8673 8664/1/8664 8665/1/8665 +f 8673/1/8673 8886/1/8886 8887/1/8887 +f 8888/1/8888 8889/1/8889 8885/1/8885 +f 8910/1/8910 8912/1/8912 8886/1/8886 +f 8912/1/8912 8931/1/8931 8886/1/8886 +f 8912/1/8912 8933/1/8933 8931/1/8931 +f 8915/1/8915 8933/1/8933 8912/1/8912 +f 8912/1/8912 8914/1/8914 8915/1/8915 +f 8916/1/8916 8915/1/8915 8914/1/8914 +f 8916/1/8916 8914/1/8914 8907/1/8907 +f 8916/1/8916 8907/1/8907 8909/1/8909 +f 8917/1/8917 8916/1/8916 8909/1/8909 +f 8914/1/8914 8913/1/8913 8907/1/8907 +f 8907/1/8907 8913/1/8913 8911/1/8911 +f 8907/1/8907 8911/1/8911 8908/1/8908 +f 8907/1/8907 8908/1/8908 8904/1/8904 +f 8908/1/8908 8911/1/8911 8910/1/8910 +f 8910/1/8910 8905/1/8905 8908/1/8908 +f 8911/1/8911 8913/1/8913 8912/1/8912 +f 8917/1/8917 8915/1/8915 8916/1/8916 +f 8917/1/8917 8918/1/8918 8915/1/8915 +f 8915/1/8915 8918/1/8918 8934/1/8934 +f 8935/1/8935 8934/1/8934 8918/1/8918 +f 8918/1/8918 8917/1/8917 8919/1/8919 +f 8912/1/8912 8913/1/8913 8914/1/8914 +f 8934/1/8934 8933/1/8933 8915/1/8915 +f 8932/1/8932 8933/1/8933 8934/1/8934 +f 8911/1/8911 8912/1/8912 8910/1/8910 +f 8892/1/8892 8899/1/8899 8889/1/8889 +f 8899/1/8899 8897/1/8897 8898/1/8898 +f 8898/1/8898 8879/1/8879 8880/1/8880 +f 8767/1/8767 8880/1/8880 8879/1/8879 +f 8900/1/8900 8902/1/8902 8903/1/8903 +f 8910/1/8910 8902/1/8902 8905/1/8905 +f 8904/1/8904 8908/1/8908 8905/1/8905 +f 8901/1/8901 8881/1/8881 8882/1/8882 +f 8764/1/8764 8882/1/8882 8881/1/8881 +f 8909/1/8909 8907/1/8907 8904/1/8904 +f 8917/1/8917 8909/1/8909 8919/1/8919 +f 8918/1/8918 8919/1/8919 8921/1/8921 +f 8918/1/8918 8921/1/8921 8924/1/8924 +f 8924/1/8924 8935/1/8935 8918/1/8918 +f 8934/1/8934 8935/1/8935 8932/1/8932 +f 8932/1/8932 8931/1/8931 8933/1/8933 +f 8886/1/8886 8931/1/8931 8930/1/8930 +f 8886/1/8886 8930/1/8930 8887/1/8887 +f 8660/1/8660 8667/1/8667 8887/1/8887 +f 8929/1/8929 8794/1/8794 8801/1/8801 +f 8656/1/8656 8667/1/8667 8660/1/8660 +f 8655/1/8655 8656/1/8656 8657/1/8657 +f 8657/1/8657 8662/1/8662 8658/1/8658 +f 8799/1/8799 8701/1/8701 8661/1/8661 +f 8700/1/8700 8678/1/8678 8662/1/8662 +f 8700/1/8700 8702/1/8702 8699/1/8699 +f 8703/1/8703 8704/1/8704 8702/1/8702 +f 8703/1/8703 8707/1/8707 8708/1/8708 +f 8701/1/8701 8799/1/8799 8706/1/8706 +f 8661/1/8661 8800/1/8800 8799/1/8799 +f 8659/1/8659 8794/1/8794 8800/1/8800 +f 8792/1/8792 8795/1/8795 8790/1/8790 +f 8927/1/8927 8791/1/8791 8794/1/8794 +f 8791/1/8791 8926/1/8926 8925/1/8925 +f 8925/1/8925 8923/1/8923 8786/1/8786 +f 8786/1/8786 8783/1/8783 8781/1/8781 +f 8783/1/8783 8769/1/8769 8781/1/8781 +f 8784/1/8784 8787/1/8787 8788/1/8788 +f 8789/1/8789 8790/1/8790 8787/1/8787 +f 8792/1/8792 8790/1/8790 8789/1/8789 +f 8796/1/8796 8795/1/8795 8792/1/8792 +f 8707/1/8707 8796/1/8796 8797/1/8797 +f 8802/1/8802 8797/1/8797 8798/1/8798 +f 8782/1/8782 8779/1/8779 8793/1/8793 +f 8804/1/8804 8803/1/8803 8779/1/8779 +f 8802/1/8802 8798/1/8798 8719/1/8719 +f 8718/1/8718 8717/1/8717 8719/1/8719 +f 8716/1/8716 8711/1/8711 8717/1/8717 +f 8713/1/8713 8711/1/8711 8716/1/8716 +f 8712/1/8712 8709/1/8709 8713/1/8713 +f 8714/1/8714 8710/1/8710 8712/1/8712 +f 8884/1/8884 8698/1/8698 8714/1/8714 +f 8883/1/8883 8698/1/8698 8884/1/8884 +f 8883/1/8883 8851/1/8851 8691/1/8691 +f 8691/1/8691 8851/1/8851 8847/1/8847 +f 8845/1/8845 8847/1/8847 8850/1/8850 +f 8850/1/8850 8534/1/8534 8845/1/8845 +f 8845/1/8845 8534/1/8534 8535/1/8535 +f 8845/1/8845 8846/1/8846 8847/1/8847 +f 8846/1/8846 8848/1/8848 8849/1/8849 +f 8848/1/8848 8872/1/8872 8849/1/8849 +f 8872/1/8872 8873/1/8873 8869/1/8869 +f 8869/1/8869 8873/1/8873 8870/1/8870 +f 8870/1/8870 8871/1/8871 8866/1/8866 +f 8866/1/8866 8871/1/8871 8867/1/8867 +f 8864/1/8864 8867/1/8867 8868/1/8868 +f 8874/1/8874 8865/1/8865 8868/1/8868 +f 8875/1/8875 8865/1/8865 8874/1/8874 +f 8811/1/8811 8813/1/8813 8875/1/8875 +f 8811/1/8811 8533/1/8533 8539/1/8539 +f 8842/1/8842 8536/1/8536 8844/1/8844 +f 8533/1/8533 8537/1/8537 8538/1/8538 +f 8640/1/8640 8641/1/8641 8536/1/8536 +f 8843/1/8843 8538/1/8538 8537/1/8537 +f 8843/1/8843 8842/1/8842 8844/1/8844 +f 8840/1/8840 8839/1/8839 8841/1/8841 +f 8842/1/8842 8640/1/8640 8536/1/8536 +f 8837/1/8837 8637/1/8637 8839/1/8839 +f 8640/1/8640 8639/1/8639 8641/1/8641 +f 8838/1/8838 8639/1/8639 8638/1/8638 +f 8838/1/8838 8837/1/8837 8839/1/8839 +f 8834/1/8834 8835/1/8835 8836/1/8836 +f 8837/1/8837 8635/1/8635 8637/1/8637 +f 8824/1/8824 8627/1/8627 8835/1/8835 +f 8635/1/8635 8634/1/8634 8636/1/8636 +f 8832/1/8832 8634/1/8634 8633/1/8633 +f 8831/1/8831 8633/1/8633 8632/1/8632 +f 8631/1/8631 8831/1/8831 8632/1/8632 +f 8830/1/8830 8631/1/8631 8630/1/8630 +f 8830/1/8830 8630/1/8630 8829/1/8829 +f 8830/1/8830 8829/1/8829 8824/1/8824 +f 8824/1/8824 8825/1/8825 8822/1/8822 +f 8822/1/8822 8624/1/8624 8824/1/8824 +f 8825/1/8825 8826/1/8826 8822/1/8822 +f 8825/1/8825 8625/1/8625 8826/1/8826 +f 8828/1/8828 8628/1/8628 8827/1/8827 +f 8629/1/8629 8627/1/8627 8628/1/8628 +f 8824/1/8824 8624/1/8624 8627/1/8627 +f 8825/1/8825 8626/1/8626 8625/1/8625 +f 8826/1/8826 8625/1/8625 8623/1/8623 +f 8826/1/8826 8623/1/8623 8823/1/8823 +f 8822/1/8822 8826/1/8826 8823/1/8823 +f 8822/1/8822 8621/1/8621 8624/1/8624 +f 8818/1/8818 8618/1/8618 8820/1/8820 +f 8621/1/8621 8620/1/8620 8622/1/8622 +f 8819/1/8819 8620/1/8620 8617/1/8617 +f 8819/1/8819 8818/1/8818 8821/1/8821 +f 8815/1/8815 8816/1/8816 8817/1/8817 +f 8818/1/8818 8614/1/8614 8618/1/8618 +f 8814/1/8814 8613/1/8613 8816/1/8816 +f 8614/1/8614 8482/1/8482 8619/1/8619 +f 8760/1/8760 8809/1/8809 8479/1/8479 +f 8815/1/8815 8619/1/8619 8482/1/8482 +f 8815/1/8815 8814/1/8814 8816/1/8816 +f 8760/1/8760 8808/1/8808 8809/1/8809 +f 8810/1/8810 8616/1/8616 8808/1/8808 +f 8814/1/8814 8615/1/8615 8613/1/8613 +f 8613/1/8613 8611/1/8611 8609/1/8609 +f 8610/1/8610 8608/1/8608 8611/1/8611 +f 8610/1/8610 8597/1/8597 8608/1/8608 +f 8589/1/8589 8597/1/8597 8610/1/8610 +f 8589/1/8589 8594/1/8594 8597/1/8597 +f 8607/1/8607 8608/1/8608 8597/1/8597 +f 8606/1/8606 8483/1/8483 8607/1/8607 +f 8598/1/8598 8596/1/8596 8603/1/8603 +f 8603/1/8603 8601/1/8601 8604/1/8604 +f 8604/1/8604 8601/1/8601 8470/1/8470 +f 8605/1/8605 8481/1/8481 8606/1/8606 +f 8481/1/8481 8478/1/8478 8480/1/8480 +f 8478/1/8478 8477/1/8477 8479/1/8479 +f 8464/1/8464 8465/1/8465 8466/1/8466 +f 8464/1/8464 8462/1/8462 8465/1/8465 +f 8479/1/8479 8477/1/8477 8474/1/8474 +f 9032/1/9032 8975/1/8975 8479/1/8479 +f 9032/1/9032 8976/1/8976 8975/1/8975 +f 9020/1/9020 8976/1/8976 9032/1/9032 +f 9020/1/9020 8977/1/8977 8976/1/8976 +f 8962/1/8962 8976/1/8976 8977/1/8977 +f 8962/1/8962 8977/1/8977 8964/1/8964 +f 8963/1/8963 8962/1/8962 8964/1/8964 +f 8963/1/8963 8964/1/8964 9016/1/9016 +f 8954/1/8954 8963/1/8963 9016/1/9016 +f 8954/1/8954 9016/1/9016 9017/1/9017 +f 9017/1/9017 8953/1/8953 8954/1/8954 +f 8954/1/8954 8953/1/8953 8952/1/8952 +f 8952/1/8952 9014/1/9014 8954/1/8954 +f 8954/1/8954 9014/1/9014 9015/1/9015 +f 9014/1/9014 8982/1/8982 9015/1/9015 +f 9015/1/9015 8982/1/8982 8978/1/8978 +f 9015/1/9015 8978/1/8978 9019/1/9019 +f 9019/1/9019 9018/1/9018 9015/1/9015 +f 9018/1/9018 8963/1/8963 9015/1/9015 +f 8963/1/8963 9018/1/9018 8961/1/8961 +f 9019/1/9019 9021/1/9021 9018/1/9018 +f 9021/1/9021 8977/1/8977 9018/1/9018 +f 9021/1/9021 8980/1/8980 8977/1/8977 +f 8979/1/8979 8977/1/8977 8980/1/8980 +f 8986/1/8986 8979/1/8979 8980/1/8980 +f 8980/1/8980 9024/1/9024 8986/1/8986 +f 9027/1/9027 8986/1/8986 9024/1/9024 +f 9026/1/9026 9027/1/9027 9024/1/9024 +f 9026/1/9026 9024/1/9024 9028/1/9028 +f 9028/1/9028 8988/1/8988 9026/1/9026 +f 9026/1/9026 8988/1/8988 8989/1/8989 +f 9026/1/9026 8989/1/8989 9031/1/9031 +f 9031/1/9031 8989/1/8989 8990/1/8990 +f 9031/1/9031 8990/1/8990 9027/1/9027 +f 8989/1/8989 8986/1/8986 8990/1/8990 +f 8988/1/8988 8986/1/8986 8989/1/8989 +f 8988/1/8988 8987/1/8987 8986/1/8986 +f 8991/1/8991 8987/1/8987 8988/1/8988 +f 8991/1/8991 8992/1/8992 8987/1/8987 +f 9025/1/9025 8987/1/8987 8992/1/8992 +f 9025/1/9025 8992/1/8992 9030/1/9030 +f 9029/1/9029 9025/1/9025 9030/1/9030 +f 9030/1/9030 8993/1/8993 9029/1/9029 +f 9029/1/9029 8993/1/8993 8991/1/8991 +f 9029/1/9029 8991/1/8991 9028/1/9028 +f 9028/1/9028 9025/1/9025 9029/1/9029 +f 9030/1/9030 8992/1/8992 8993/1/8993 +f 9022/1/9022 8987/1/8987 9025/1/9025 +f 9024/1/9024 9022/1/9022 9025/1/9025 +f 9023/1/9023 9022/1/9022 9024/1/9024 +f 9022/1/9022 9023/1/9023 9021/1/9021 +f 8979/1/8979 8987/1/8987 9022/1/9022 +f 9019/1/9019 8979/1/8979 9022/1/9022 +f 8993/1/8993 8992/1/8992 8991/1/8991 +f 8991/1/8991 8988/1/8988 9028/1/9028 +f 9028/1/9028 9024/1/9024 9025/1/9025 +f 9031/1/9031 9027/1/9027 9026/1/9026 +f 9027/1/9027 8990/1/8990 8986/1/8986 +f 9023/1/9023 9024/1/9024 8980/1/8980 +f 8987/1/8987 8979/1/8979 8986/1/8986 +f 8978/1/8978 8977/1/8977 8979/1/8979 +f 8978/1/8978 8953/1/8953 8977/1/8977 +f 9023/1/9023 8980/1/8980 9021/1/9021 +f 9022/1/9022 9021/1/9021 9019/1/9019 +f 9019/1/9019 8978/1/8978 8979/1/8979 +f 8953/1/8953 8978/1/8978 8982/1/8982 +f 8953/1/8953 8982/1/8982 8951/1/8951 +f 8951/1/8951 8982/1/8982 8984/1/8984 +f 8951/1/8951 8984/1/8984 8949/1/8949 +f 8950/1/8950 8951/1/8951 8949/1/8949 +f 8950/1/8950 8949/1/8949 8948/1/8948 +f 8948/1/8948 9012/1/9012 8950/1/8950 +f 8950/1/8950 9012/1/9012 9013/1/9013 +f 8950/1/8950 9013/1/9013 8952/1/8952 +f 9012/1/9012 8985/1/8985 9013/1/9013 +f 9013/1/9013 8985/1/8985 8984/1/8984 +f 9013/1/9013 8984/1/8984 9014/1/9014 +f 9012/1/9012 8994/1/8994 8985/1/8985 +f 8947/1/8947 8985/1/8985 8994/1/8994 +f 8947/1/8947 8994/1/8994 8945/1/8945 +f 8946/1/8946 8947/1/8947 8945/1/8945 +f 8945/1/8945 8943/1/8943 8946/1/8946 +f 8946/1/8946 8943/1/8943 8944/1/8944 +f 9010/1/9010 8946/1/8946 8944/1/8944 +f 8941/1/8941 9010/1/9010 8944/1/8944 +f 8941/1/8941 9009/1/9009 9010/1/9010 +f 8996/1/8996 9010/1/9010 9009/1/9009 +f 8996/1/8996 9009/1/9009 8997/1/8997 +f 8937/1/8937 8996/1/8996 8997/1/8997 +f 9001/1/9001 8937/1/8937 8997/1/8997 +f 9001/1/9001 8997/1/8997 9000/1/9000 +f 9000/1/9000 8999/1/8999 9001/1/9001 +f 9003/1/9003 9001/1/9001 8999/1/8999 +f 9003/1/9003 8999/1/8999 9005/1/9005 +f 9005/1/9005 9006/1/9006 9003/1/9003 +f 9003/1/9003 9006/1/9006 9007/1/9007 +f 9003/1/9003 9007/1/9007 9008/1/9008 +f 9004/1/9004 9003/1/9003 9008/1/9008 +f 8938/1/8938 9004/1/9004 9008/1/9008 +f 8938/1/8938 9008/1/9008 9009/1/9009 +f 8942/1/8942 9004/1/9004 8938/1/8938 +f 8942/1/8942 8938/1/8938 8940/1/8940 +f 8942/1/8942 8940/1/8940 8955/1/8955 +f 8942/1/8942 8955/1/8955 8956/1/8956 +f 8956/1/8956 8958/1/8958 8942/1/8942 +f 8956/1/8956 8957/1/8957 8958/1/8958 +f 8958/1/8958 8957/1/8957 9002/1/9002 +f 8958/1/8958 9002/1/9002 9004/1/9004 +f 9001/1/9001 9004/1/9004 9002/1/9002 +f 9002/1/9002 8957/1/8957 8955/1/8955 +f 8956/1/8956 8955/1/8955 8957/1/8957 +f 8955/1/8955 8940/1/8940 9002/1/9002 +f 9002/1/9002 8940/1/8940 8937/1/8937 +f 8940/1/8940 8938/1/8938 8937/1/8937 +f 8937/1/8937 8938/1/8938 8939/1/8939 +f 8939/1/8939 8938/1/8938 8941/1/8941 +f 8939/1/8939 8941/1/8941 8943/1/8943 +f 8943/1/8943 8995/1/8995 8939/1/8939 +f 8939/1/8939 8995/1/8995 8996/1/8996 +f 8995/1/8995 8943/1/8943 8994/1/8994 +f 8995/1/8995 8994/1/8994 9010/1/9010 +f 9010/1/9010 8994/1/8994 9011/1/9011 +f 8942/1/8942 8958/1/8958 9004/1/9004 +f 9008/1/9008 9007/1/9007 8997/1/8997 +f 9006/1/9006 9000/1/9000 9007/1/9007 +f 9006/1/9006 8998/1/8998 9000/1/9000 +f 9005/1/9005 8998/1/8998 9006/1/9006 +f 9005/1/9005 8999/1/8999 8998/1/8998 +f 9003/1/9003 9004/1/9004 9001/1/9001 +f 8998/1/8998 8999/1/8999 9000/1/9000 +f 8997/1/8997 9007/1/9007 9000/1/9000 +f 9002/1/9002 8937/1/8937 9001/1/9001 +f 8939/1/8939 8996/1/8996 8937/1/8937 +f 8997/1/8997 9009/1/9009 9008/1/9008 +f 8995/1/8995 9010/1/9010 8996/1/8996 +f 8938/1/8938 9009/1/9009 8941/1/8941 +f 9011/1/9011 8946/1/8946 9010/1/9010 +f 8946/1/8946 9011/1/9011 8948/1/8948 +f 8943/1/8943 8941/1/8941 8944/1/8944 +f 8948/1/8948 8947/1/8947 8946/1/8946 +f 8994/1/8994 8943/1/8943 8945/1/8945 +f 8949/1/8949 8985/1/8985 8947/1/8947 +f 9011/1/9011 8994/1/8994 9012/1/9012 +f 8948/1/8948 9011/1/9011 9012/1/9012 +f 8948/1/8948 8949/1/8949 8947/1/8947 +f 8952/1/8952 8951/1/8951 8950/1/8950 +f 8949/1/8949 8984/1/8984 8985/1/8985 +f 9014/1/9014 8984/1/8984 8982/1/8982 +f 8952/1/8952 9013/1/9013 9014/1/9014 +f 8952/1/8952 8953/1/8953 8951/1/8951 +f 9017/1/9017 8983/1/8983 8953/1/8953 +f 8983/1/8983 8981/1/8981 8953/1/8953 +f 8953/1/8953 8981/1/8981 8964/1/8964 +f 8981/1/8981 8983/1/8983 9037/1/9037 +f 9037/1/9037 9033/1/9033 8981/1/8981 +f 9016/1/9016 8981/1/8981 9033/1/9033 +f 9038/1/9038 9033/1/9033 9037/1/9037 +f 9038/1/9038 9037/1/9037 9039/1/9039 +f 9038/1/9038 9039/1/9039 9040/1/9040 +f 9042/1/9042 9038/1/9038 9040/1/9040 +f 9040/1/9040 9041/1/9041 9042/1/9042 +f 9042/1/9042 9041/1/9041 9043/1/9043 +f 9042/1/9042 9043/1/9043 9044/1/9044 +f 9043/1/9043 9045/1/9045 9044/1/9044 +f 9044/1/9044 9045/1/9045 9046/1/9046 +f 9046/1/9046 9035/1/9035 9044/1/9044 +f 9044/1/9044 9035/1/9035 9038/1/9038 +f 9035/1/9035 9034/1/9034 9038/1/9038 +f 9035/1/9035 8983/1/8983 9034/1/9034 +f 9036/1/9036 8983/1/8983 9035/1/9035 +f 9050/1/9050 9036/1/9036 9035/1/9035 +f 9050/1/9050 9049/1/9049 9036/1/9036 +f 9047/1/9047 9036/1/9036 9049/1/9049 +f 9048/1/9048 9047/1/9047 9049/1/9049 +f 9046/1/9046 9047/1/9047 9048/1/9048 +f 9048/1/9048 9050/1/9050 9046/1/9046 +f 9045/1/9045 9036/1/9036 9047/1/9047 +f 9045/1/9045 9037/1/9037 9036/1/9036 +f 9048/1/9048 9049/1/9049 9050/1/9050 +f 9046/1/9046 9050/1/9050 9035/1/9035 +f 9046/1/9046 9045/1/9045 9047/1/9047 +f 9043/1/9043 9037/1/9037 9045/1/9045 +f 9041/1/9041 9039/1/9039 9043/1/9043 +f 9044/1/9044 9038/1/9038 9042/1/9042 +f 9040/1/9040 9039/1/9039 9041/1/9041 +f 9043/1/9043 9039/1/9039 9037/1/9037 +f 9038/1/9038 9034/1/9034 9033/1/9033 +f 9017/1/9017 9033/1/9033 9034/1/9034 +f 9037/1/9037 8983/1/8983 9036/1/9036 +f 9034/1/9034 8983/1/8983 9017/1/9017 +f 9017/1/9017 9016/1/9016 9033/1/9033 +f 9015/1/9015 8963/1/8963 8954/1/8954 +f 9016/1/9016 8964/1/8964 8981/1/8981 +f 8961/1/8961 8962/1/8962 8963/1/8963 +f 8977/1/8977 8953/1/8953 8964/1/8964 +f 8960/1/8960 8976/1/8976 8962/1/8962 +f 9018/1/9018 8977/1/8977 9020/1/9020 +f 8961/1/8961 9018/1/9018 9020/1/9020 +f 8961/1/8961 8960/1/8960 8962/1/8962 +f 8484/1/8484 8758/1/8758 8959/1/8959 +f 8960/1/8960 8975/1/8975 8976/1/8976 +f 8479/1/8479 8975/1/8975 8760/1/8760 +f 8760/1/8760 8765/1/8765 8805/1/8805 +f 8767/1/8767 8879/1/8879 8765/1/8765 +f 8766/1/8766 8880/1/8880 8767/1/8767 +f 8764/1/8764 8881/1/8881 8766/1/8766 +f 8763/1/8763 8882/1/8882 8764/1/8764 +f 8773/1/8773 8882/1/8882 8763/1/8763 +f 8773/1/8773 8772/1/8772 8906/1/8906 +f 8906/1/8906 8772/1/8772 8771/1/8771 +f 8920/1/8920 8771/1/8771 8778/1/8778 +f 8922/1/8922 8778/1/8778 8777/1/8777 +f 8777/1/8777 8776/1/8776 8922/1/8922 +f 8776/1/8776 8775/1/8775 8785/1/8785 +f 8785/1/8785 8775/1/8775 8774/1/8774 +f 8774/1/8774 8770/1/8770 8783/1/8783 +f 8783/1/8783 8770/1/8770 8769/1/8769 +f 8781/1/8781 8769/1/8769 8768/1/8768 +f 8762/1/8762 8780/1/8780 8768/1/8768 +f 8761/1/8761 8780/1/8780 8762/1/8762 +f 8804/1/8804 8779/1/8779 8761/1/8761 +f 8721/1/8721 8803/1/8803 8804/1/8804 +f 8759/1/8759 8488/1/8488 8724/1/8724 +f 8722/1/8722 8492/1/8492 8493/1/8493 +f 8726/1/8726 8493/1/8493 8494/1/8494 +f 8729/1/8729 8494/1/8494 8496/1/8496 +f 8498/1/8498 8499/1/8499 8496/1/8496 +f 8725/1/8725 8499/1/8499 8498/1/8498 +f 8722/1/8722 8728/1/8728 8725/1/8725 +f 8720/1/8720 8721/1/8721 8722/1/8722 +f 8495/1/8495 8497/1/8497 8723/1/8723 +f 8531/1/8531 8965/1/8965 8720/1/8720 +f 8531/1/8531 8530/1/8530 8645/1/8645 +f 8529/1/8529 8715/1/8715 8530/1/8530 +f 8532/1/8532 8533/1/8533 8529/1/8529 +f 8539/1/8539 8533/1/8533 8532/1/8532 +f 8547/1/8547 8616/1/8616 8539/1/8539 +f 8584/1/8584 8612/1/8612 8547/1/8547 +f 8583/1/8583 8584/1/8584 8555/1/8555 +f 8582/1/8582 8555/1/8555 8580/1/8580 +f 8585/1/8585 8586/1/8586 8582/1/8582 +f 8587/1/8587 8586/1/8586 8585/1/8585 +f 8590/1/8590 8588/1/8588 8587/1/8587 +f 8595/1/8595 8590/1/8590 8592/1/8592 +f 8595/1/8595 8592/1/8592 8599/1/8599 +f 8601/1/8601 8599/1/8599 8470/1/8470 +f 8604/1/8604 8470/1/8470 8472/1/8472 +f 8468/1/8468 8472/1/8472 8469/1/8469 +f 8467/1/8467 8466/1/8466 8468/1/8468 +f 8416/1/8416 8418/1/8418 8421/1/8421 +f 8467/1/8467 8464/1/8464 8466/1/8466 +f 8416/1/8416 8413/1/8413 8418/1/8418 +f 8416/1/8416 8412/1/8412 8413/1/8413 +f 8464/1/8464 8419/1/8419 8462/1/8462 +f 8465/1/8465 8462/1/8462 8463/1/8463 +f 8476/1/8476 8475/1/8475 8463/1/8463 +f 8484/1/8484 8475/1/8475 8476/1/8476 +f 8486/1/8486 8758/1/8758 8484/1/8484 +f 8487/1/8487 8488/1/8488 8486/1/8486 +f 8458/1/8458 8488/1/8488 8487/1/8487 +f 8457/1/8457 8458/1/8458 8455/1/8455 +f 8473/1/8473 8457/1/8457 8455/1/8455 +f 8497/1/8497 8457/1/8457 8473/1/8473 +f 8528/1/8528 8497/1/8497 8527/1/8527 +f 8540/1/8540 8528/1/8528 8542/1/8542 +f 8545/1/8545 8541/1/8541 8540/1/8540 +f 8548/1/8548 8546/1/8546 8545/1/8545 +f 8544/1/8544 8549/1/8549 8550/1/8550 +f 8550/1/8550 8549/1/8549 8551/1/8551 +f 8551/1/8551 8549/1/8549 8552/1/8552 +f 8562/1/8562 8557/1/8557 8556/1/8556 +f 8548/1/8548 8553/1/8553 8554/1/8554 +f 8576/1/8576 8579/1/8579 8554/1/8554 +f 8575/1/8575 8579/1/8579 8576/1/8576 +f 8574/1/8574 8581/1/8581 8575/1/8575 +f 8591/1/8591 8574/1/8574 8577/1/8577 +f 8593/1/8593 8577/1/8577 8643/1/8643 +f 8471/1/8471 8593/1/8593 8643/1/8643 +f 8422/1/8422 8471/1/8471 8424/1/8424 +f 8415/1/8415 8420/1/8420 8422/1/8422 +f 8415/1/8415 8412/1/8412 8416/1/8416 +f 8423/1/8423 8410/1/8410 8417/1/8417 +f 8412/1/8412 8411/1/8411 8413/1/8413 +f 8404/1/8404 8407/1/8407 8409/1/8409 +f 8414/1/8414 8413/1/8413 8411/1/8411 +f 8414/1/8414 8460/1/8460 8461/1/8461 +f 8459/1/8459 8485/1/8485 8460/1/8460 +f 8438/1/8438 8456/1/8456 8459/1/8459 +f 8436/1/8436 8437/1/8437 8438/1/8438 +f 8432/1/8432 8435/1/8435 8436/1/8436 +f 8434/1/8434 8435/1/8435 8432/1/8432 +f 8440/1/8440 8434/1/8434 8433/1/8433 +f 8441/1/8441 8440/1/8440 8442/1/8442 +f 8441/1/8441 8442/1/8442 8446/1/8446 +f 8442/1/8442 8447/1/8447 8446/1/8446 +f 8446/1/8446 8447/1/8447 8448/1/8448 +f 8444/1/8444 8441/1/8441 8446/1/8446 +f 8444/1/8444 8453/1/8453 8454/1/8454 +f 8573/1/8573 8525/1/8525 8453/1/8453 +f 8543/1/8543 8526/1/8526 8573/1/8573 +f 8552/1/8552 8549/1/8549 8543/1/8543 +f 8558/1/8558 8551/1/8551 8552/1/8552 +f 8450/1/8450 8572/1/8572 8559/1/8559 +f 8561/1/8561 8560/1/8560 8558/1/8558 +f 8449/1/8449 8451/1/8451 8572/1/8572 +f 8451/1/8451 8443/1/8443 8452/1/8452 +f 8562/1/8562 8556/1/8556 8560/1/8560 +f 8557/1/8557 8562/1/8562 8563/1/8563 +f 8563/1/8563 8566/1/8566 8557/1/8557 +f 8578/1/8578 8566/1/8566 8569/1/8569 +f 8642/1/8642 8569/1/8569 8568/1/8568 +f 8570/1/8570 8644/1/8644 8568/1/8568 +f 8564/1/8564 8567/1/8567 8565/1/8565 +f 8571/1/8571 8425/1/8425 8570/1/8570 +f 8564/1/8564 8452/1/8452 8567/1/8567 +f 8452/1/8452 8429/1/8429 8431/1/8431 +f 8428/1/8428 8426/1/8426 8571/1/8571 +f 8429/1/8429 8427/1/8427 8431/1/8431 +f 8428/1/8428 8410/1/8410 8426/1/8426 +f 8430/1/8430 8405/1/8405 8427/1/8427 +f 8410/1/8410 8404/1/8404 8409/1/8409 +f 8405/1/8405 8406/1/8406 8401/1/8401 +f 8404/1/8404 8403/1/8403 8407/1/8407 +f 8402/1/8402 8408/1/8408 8403/1/8403 +f 8406/1/8406 8402/1/8402 8401/1/8401 +f 9051/1/9051 9052/1/9052 9053/1/9053 +f 9051/1/9051 9053/1/9053 9054/1/9054 +f 9057/1/9057 9051/1/9051 9054/1/9054 +f 9057/1/9057 9054/1/9054 9059/1/9059 +f 9059/1/9059 9058/1/9058 9057/1/9057 +f 9057/1/9057 9058/1/9058 9056/1/9056 +f 9057/1/9057 9056/1/9056 9055/1/9055 +f 9055/1/9055 9056/1/9056 9052/1/9052 +f 9060/1/9060 9052/1/9052 9056/1/9056 +f 9060/1/9060 9056/1/9056 9058/1/9058 +f 9059/1/9059 9060/1/9060 9058/1/9058 +f 9199/1/9199 9060/1/9060 9059/1/9059 +f 9245/1/9245 9060/1/9060 9199/1/9199 +f 9245/1/9245 9199/1/9199 9243/1/9243 +f 9243/1/9243 9244/1/9244 9245/1/9245 +f 9245/1/9245 9244/1/9244 9246/1/9246 +f 9246/1/9246 9053/1/9053 9245/1/9245 +f 9069/1/9069 9053/1/9053 9246/1/9246 +f 9246/1/9246 9070/1/9070 9069/1/9069 +f 9068/1/9068 9069/1/9069 9070/1/9070 +f 9061/1/9061 9068/1/9068 9070/1/9070 +f 9200/1/9200 9061/1/9061 9070/1/9070 +f 9200/1/9200 9054/1/9054 9061/1/9061 +f 9061/1/9061 9054/1/9054 9062/1/9062 +f 9061/1/9061 9062/1/9062 9063/1/9063 +f 9061/1/9061 9063/1/9063 9064/1/9064 +f 9064/1/9064 9066/1/9066 9061/1/9061 +f 9064/1/9064 9065/1/9065 9066/1/9066 +f 9066/1/9066 9065/1/9065 9067/1/9067 +f 9066/1/9066 9067/1/9067 9068/1/9068 +f 9065/1/9065 9063/1/9063 9067/1/9067 +f 9064/1/9064 9063/1/9063 9065/1/9065 +f 9067/1/9067 9063/1/9063 9062/1/9062 +f 9067/1/9067 9062/1/9062 9069/1/9069 +f 9199/1/9199 9054/1/9054 9200/1/9200 +f 9199/1/9199 9200/1/9200 9198/1/9198 +f 9199/1/9199 9198/1/9198 9197/1/9197 +f 9197/1/9197 9198/1/9198 9100/1/9100 +f 9197/1/9197 9100/1/9100 9165/1/9165 +f 9166/1/9166 9197/1/9197 9165/1/9165 +f 9165/1/9165 9164/1/9164 9166/1/9166 +f 9123/1/9123 9166/1/9166 9164/1/9164 +f 9123/1/9123 9164/1/9164 9126/1/9126 +f 9125/1/9125 9123/1/9123 9126/1/9126 +f 9125/1/9125 9126/1/9126 9127/1/9127 +f 9127/1/9127 9161/1/9161 9125/1/9125 +f 9125/1/9125 9161/1/9161 9163/1/9163 +f 9125/1/9125 9163/1/9163 9124/1/9124 +f 9124/1/9124 9163/1/9163 9165/1/9165 +f 9161/1/9161 9162/1/9162 9163/1/9163 +f 9163/1/9163 9162/1/9162 9164/1/9164 +f 9161/1/9161 9159/1/9159 9162/1/9162 +f 9128/1/9128 9162/1/9162 9159/1/9159 +f 9128/1/9128 9159/1/9159 9130/1/9130 +f 9129/1/9129 9128/1/9128 9130/1/9130 +f 9235/1/9235 9129/1/9129 9130/1/9130 +f 9130/1/9130 9234/1/9234 9235/1/9235 +f 9234/1/9234 9236/1/9236 9235/1/9235 +f 9235/1/9235 9236/1/9236 9237/1/9237 +f 9235/1/9235 9237/1/9237 9238/1/9238 +f 9238/1/9238 9208/1/9208 9235/1/9235 +f 9238/1/9238 9204/1/9204 9208/1/9208 +f 9204/1/9204 9207/1/9207 9208/1/9208 +f 9208/1/9208 9207/1/9207 9209/1/9209 +f 9208/1/9208 9209/1/9209 9129/1/9129 +f 9129/1/9129 9209/1/9209 9210/1/9210 +f 9129/1/9129 9210/1/9210 9160/1/9160 +f 9129/1/9129 9160/1/9160 9127/1/9127 +f 9160/1/9160 9210/1/9210 9211/1/9211 +f 9160/1/9160 9211/1/9211 9212/1/9212 +f 9138/1/9138 9160/1/9160 9212/1/9212 +f 9138/1/9138 9212/1/9212 9192/1/9192 +f 9138/1/9138 9192/1/9192 9137/1/9137 +f 9137/1/9137 9135/1/9135 9138/1/9138 +f 9135/1/9135 9158/1/9158 9138/1/9138 +f 9156/1/9156 9158/1/9158 9135/1/9135 +f 9156/1/9156 9135/1/9135 9154/1/9154 +f 9156/1/9156 9154/1/9154 9155/1/9155 +f 9155/1/9155 9154/1/9154 9153/1/9153 +f 9145/1/9145 9155/1/9155 9153/1/9153 +f 9153/1/9153 9151/1/9151 9145/1/9145 +f 9145/1/9145 9151/1/9151 9149/1/9149 +f 9145/1/9145 9149/1/9149 9147/1/9147 +f 9147/1/9147 9146/1/9146 9145/1/9145 +f 9146/1/9146 9144/1/9144 9145/1/9145 +f 9145/1/9145 9144/1/9144 9143/1/9143 +f 9143/1/9143 9136/1/9136 9145/1/9145 +f 9132/1/9132 9136/1/9136 9143/1/9143 +f 9143/1/9143 9133/1/9133 9132/1/9132 +f 9131/1/9131 9132/1/9132 9133/1/9133 +f 9131/1/9131 9133/1/9133 9134/1/9134 +f 9131/1/9131 9134/1/9134 9140/1/9140 +f 9140/1/9140 9142/1/9142 9131/1/9131 +f 9131/1/9131 9142/1/9142 9144/1/9144 +f 9131/1/9131 9144/1/9144 9154/1/9154 +f 9140/1/9140 9141/1/9141 9142/1/9142 +f 9142/1/9142 9141/1/9141 9143/1/9143 +f 9141/1/9141 9139/1/9139 9143/1/9143 +f 9140/1/9140 9139/1/9139 9141/1/9141 +f 9134/1/9134 9139/1/9139 9140/1/9140 +f 9134/1/9134 9133/1/9133 9139/1/9139 +f 9135/1/9135 9132/1/9132 9131/1/9131 +f 9143/1/9143 9139/1/9139 9133/1/9133 +f 9136/1/9136 9132/1/9132 9135/1/9135 +f 9142/1/9142 9143/1/9143 9144/1/9144 +f 9154/1/9154 9144/1/9144 9146/1/9146 +f 9154/1/9154 9146/1/9146 9148/1/9148 +f 9150/1/9150 9154/1/9154 9148/1/9148 +f 9149/1/9149 9150/1/9150 9148/1/9148 +f 9150/1/9150 9152/1/9152 9154/1/9154 +f 9151/1/9151 9152/1/9152 9150/1/9150 +f 9147/1/9147 9148/1/9148 9146/1/9146 +f 9149/1/9149 9148/1/9148 9147/1/9147 +f 9151/1/9151 9150/1/9150 9149/1/9149 +f 9153/1/9153 9152/1/9152 9151/1/9151 +f 9145/1/9145 9136/1/9136 9155/1/9155 +f 9136/1/9136 9157/1/9157 9155/1/9155 +f 9157/1/9157 9158/1/9158 9155/1/9155 +f 9157/1/9157 9159/1/9159 9158/1/9158 +f 9158/1/9158 9159/1/9159 9160/1/9160 +f 9157/1/9157 9137/1/9137 9159/1/9159 +f 9159/1/9159 9137/1/9137 9233/1/9233 +f 9233/1/9233 9137/1/9137 9232/1/9232 +f 9232/1/9232 9212/1/9212 9233/1/9233 +f 9232/1/9232 9213/1/9213 9212/1/9212 +f 9213/1/9213 9186/1/9186 9212/1/9212 +f 9212/1/9212 9186/1/9186 9188/1/9188 +f 9212/1/9212 9188/1/9188 9190/1/9190 +f 9187/1/9187 9190/1/9190 9188/1/9188 +f 9189/1/9189 9190/1/9190 9187/1/9187 +f 9232/1/9232 9189/1/9189 9187/1/9187 +f 9232/1/9232 9187/1/9187 9231/1/9231 +f 9231/1/9231 9187/1/9187 9185/1/9185 +f 9231/1/9231 9185/1/9185 9230/1/9230 +f 9230/1/9230 9214/1/9214 9231/1/9231 +f 9231/1/9231 9214/1/9214 9213/1/9213 +f 9214/1/9214 9184/1/9184 9213/1/9213 +f 9214/1/9214 9182/1/9182 9184/1/9184 +f 9183/1/9183 9184/1/9184 9182/1/9182 +f 9183/1/9183 9182/1/9182 9181/1/9181 +f 9230/1/9230 9183/1/9183 9181/1/9181 +f 9230/1/9230 9181/1/9181 9229/1/9229 +f 9229/1/9229 9215/1/9215 9230/1/9230 +f 9229/1/9229 9216/1/9216 9215/1/9215 +f 9216/1/9216 9178/1/9178 9215/1/9215 +f 9215/1/9215 9178/1/9178 9180/1/9180 +f 9215/1/9215 9180/1/9180 9182/1/9182 +f 9179/1/9179 9180/1/9180 9178/1/9178 +f 9179/1/9179 9178/1/9178 9177/1/9177 +f 9228/1/9228 9179/1/9179 9177/1/9177 +f 9228/1/9228 9177/1/9177 9223/1/9223 +f 9223/1/9223 9217/1/9217 9228/1/9228 +f 9228/1/9228 9217/1/9217 9216/1/9216 +f 9217/1/9217 9176/1/9176 9216/1/9216 +f 9217/1/9217 9174/1/9174 9176/1/9176 +f 9173/1/9173 9176/1/9176 9174/1/9174 +f 9173/1/9173 9174/1/9174 9171/1/9171 +f 9223/1/9223 9173/1/9173 9171/1/9171 +f 9223/1/9223 9171/1/9171 9224/1/9224 +f 9222/1/9222 9223/1/9223 9224/1/9224 +f 9224/1/9224 9225/1/9225 9222/1/9222 +f 9222/1/9222 9225/1/9225 9226/1/9226 +f 9222/1/9222 9226/1/9226 9227/1/9227 +f 9227/1/9227 9205/1/9205 9222/1/9222 +f 9222/1/9222 9205/1/9205 9220/1/9220 +f 9221/1/9221 9220/1/9220 9205/1/9205 +f 9221/1/9221 9205/1/9205 9206/1/9206 +f 9226/1/9226 9221/1/9221 9206/1/9206 +f 9226/1/9226 9206/1/9206 9242/1/9242 +f 9242/1/9242 9206/1/9206 9202/1/9202 +f 9242/1/9242 9202/1/9202 9241/1/9241 +f 9227/1/9227 9242/1/9242 9241/1/9241 +f 9227/1/9227 9241/1/9241 9239/1/9239 +f 9239/1/9239 9203/1/9203 9227/1/9227 +f 9239/1/9239 9207/1/9207 9203/1/9203 +f 9237/1/9237 9207/1/9207 9239/1/9239 +f 9239/1/9239 9241/1/9241 9240/1/9240 +f 9239/1/9239 9240/1/9240 9238/1/9238 +f 9241/1/9241 9201/1/9201 9240/1/9240 +f 9240/1/9240 9201/1/9201 9204/1/9204 +f 9201/1/9201 9203/1/9203 9204/1/9204 +f 9201/1/9201 9202/1/9202 9203/1/9203 +f 9203/1/9203 9202/1/9202 9205/1/9205 +f 9241/1/9241 9202/1/9202 9201/1/9201 +f 9206/1/9206 9205/1/9205 9202/1/9202 +f 9219/1/9219 9220/1/9220 9221/1/9221 +f 9225/1/9225 9219/1/9219 9221/1/9221 +f 9219/1/9219 9217/1/9217 9220/1/9220 +f 9218/1/9218 9217/1/9217 9219/1/9219 +f 9224/1/9224 9218/1/9218 9219/1/9219 +f 9196/1/9196 9218/1/9218 9224/1/9224 +f 9224/1/9224 9167/1/9167 9196/1/9196 +f 9196/1/9196 9167/1/9167 9194/1/9194 +f 9194/1/9194 9195/1/9195 9196/1/9196 +f 9194/1/9194 9193/1/9193 9195/1/9195 +f 9193/1/9193 9169/1/9169 9195/1/9195 +f 9195/1/9195 9169/1/9169 9168/1/9168 +f 9195/1/9195 9168/1/9168 9218/1/9218 +f 9167/1/9167 9168/1/9168 9169/1/9169 +f 9167/1/9167 9169/1/9169 9170/1/9170 +f 9171/1/9171 9168/1/9168 9167/1/9167 +f 9172/1/9172 9168/1/9168 9171/1/9171 +f 9168/1/9168 9172/1/9172 9217/1/9217 +f 9170/1/9170 9169/1/9169 9193/1/9193 +f 9170/1/9170 9193/1/9193 9194/1/9194 +f 9167/1/9167 9170/1/9170 9194/1/9194 +f 9196/1/9196 9195/1/9195 9218/1/9218 +f 9218/1/9218 9168/1/9168 9217/1/9217 +f 9227/1/9227 9203/1/9203 9205/1/9205 +f 9227/1/9227 9226/1/9226 9242/1/9242 +f 9225/1/9225 9221/1/9221 9226/1/9226 +f 9224/1/9224 9219/1/9219 9225/1/9225 +f 9222/1/9222 9220/1/9220 9223/1/9223 +f 9224/1/9224 9171/1/9171 9167/1/9167 +f 9175/1/9175 9173/1/9173 9223/1/9223 +f 9171/1/9171 9174/1/9174 9172/1/9172 +f 9175/1/9175 9176/1/9176 9173/1/9173 +f 9177/1/9177 9176/1/9176 9175/1/9175 +f 9172/1/9172 9174/1/9174 9217/1/9217 +f 9223/1/9223 9220/1/9220 9217/1/9217 +f 9223/1/9223 9177/1/9177 9175/1/9175 +f 9229/1/9229 9179/1/9179 9228/1/9228 +f 9177/1/9177 9178/1/9178 9176/1/9176 +f 9181/1/9181 9180/1/9180 9179/1/9179 +f 9216/1/9216 9176/1/9176 9178/1/9178 +f 9228/1/9228 9216/1/9216 9229/1/9229 +f 9229/1/9229 9181/1/9181 9179/1/9179 +f 9181/1/9181 9182/1/9182 9180/1/9180 +f 9185/1/9185 9184/1/9184 9183/1/9183 +f 9185/1/9185 9186/1/9186 9184/1/9184 +f 9215/1/9215 9182/1/9182 9214/1/9214 +f 9230/1/9230 9215/1/9215 9214/1/9214 +f 9230/1/9230 9185/1/9185 9183/1/9183 +f 9187/1/9187 9186/1/9186 9185/1/9185 +f 9191/1/9191 9189/1/9189 9232/1/9232 +f 9191/1/9191 9192/1/9192 9189/1/9189 +f 9189/1/9189 9192/1/9192 9190/1/9190 +f 9187/1/9187 9188/1/9188 9186/1/9186 +f 9213/1/9213 9184/1/9184 9186/1/9186 +f 9231/1/9231 9213/1/9213 9232/1/9232 +f 9232/1/9232 9137/1/9137 9191/1/9191 +f 9137/1/9137 9157/1/9157 9136/1/9136 +f 9153/1/9153 9154/1/9154 9152/1/9152 +f 9154/1/9154 9135/1/9135 9131/1/9131 +f 9155/1/9155 9158/1/9158 9156/1/9156 +f 9136/1/9136 9135/1/9135 9137/1/9137 +f 9137/1/9137 9192/1/9192 9191/1/9191 +f 9192/1/9192 9212/1/9212 9190/1/9190 +f 9158/1/9158 9160/1/9160 9138/1/9138 +f 9233/1/9233 9212/1/9212 9211/1/9211 +f 9233/1/9233 9211/1/9211 9234/1/9234 +f 9234/1/9234 9211/1/9211 9210/1/9210 +f 9236/1/9236 9210/1/9210 9209/1/9209 +f 9237/1/9237 9209/1/9209 9207/1/9207 +f 9204/1/9204 9203/1/9203 9207/1/9207 +f 9240/1/9240 9204/1/9204 9238/1/9238 +f 9238/1/9238 9237/1/9237 9239/1/9239 +f 9236/1/9236 9209/1/9209 9237/1/9237 +f 9234/1/9234 9210/1/9210 9236/1/9236 +f 9130/1/9130 9233/1/9233 9234/1/9234 +f 9208/1/9208 9129/1/9129 9235/1/9235 +f 9127/1/9127 9128/1/9128 9129/1/9129 +f 9159/1/9159 9233/1/9233 9130/1/9130 +f 9126/1/9126 9162/1/9162 9128/1/9128 +f 9160/1/9160 9159/1/9159 9161/1/9161 +f 9127/1/9127 9160/1/9160 9161/1/9161 +f 9127/1/9127 9126/1/9126 9128/1/9128 +f 9124/1/9124 9123/1/9123 9125/1/9125 +f 9121/1/9121 9123/1/9123 9124/1/9124 +f 9121/1/9121 9124/1/9124 9100/1/9100 +f 9121/1/9121 9100/1/9100 9119/1/9119 +f 9119/1/9119 9120/1/9120 9121/1/9121 +f 9121/1/9121 9120/1/9120 9122/1/9122 +f 9120/1/9120 9099/1/9099 9122/1/9122 +f 9166/1/9166 9122/1/9122 9099/1/9099 +f 9166/1/9166 9099/1/9099 9243/1/9243 +f 9120/1/9120 9097/1/9097 9099/1/9099 +f 9098/1/9098 9099/1/9099 9097/1/9097 +f 9098/1/9098 9097/1/9097 9096/1/9096 +f 9117/1/9117 9098/1/9098 9096/1/9096 +f 9117/1/9117 9096/1/9096 9115/1/9115 +f 9115/1/9115 9116/1/9116 9117/1/9117 +f 9117/1/9117 9116/1/9116 9118/1/9118 +f 9117/1/9117 9118/1/9118 9119/1/9119 +f 9116/1/9116 9095/1/9095 9118/1/9118 +f 9118/1/9118 9095/1/9095 9097/1/9097 +f 9116/1/9116 9093/1/9093 9095/1/9095 +f 9094/1/9094 9095/1/9095 9093/1/9093 +f 9094/1/9094 9093/1/9093 9092/1/9092 +f 9114/1/9114 9094/1/9094 9092/1/9092 +f 9090/1/9090 9114/1/9114 9092/1/9092 +f 9092/1/9092 9089/1/9089 9090/1/9090 +f 9089/1/9089 9088/1/9088 9090/1/9090 +f 9112/1/9112 9090/1/9090 9088/1/9088 +f 9112/1/9112 9088/1/9088 9110/1/9110 +f 9109/1/9109 9112/1/9112 9110/1/9110 +f 9109/1/9109 9110/1/9110 9107/1/9107 +f 9107/1/9107 9086/1/9086 9109/1/9109 +f 9109/1/9109 9086/1/9086 9087/1/9087 +f 9109/1/9109 9087/1/9087 9111/1/9111 +f 9111/1/9111 9087/1/9087 9089/1/9089 +f 9091/1/9091 9111/1/9111 9089/1/9089 +f 9113/1/9113 9111/1/9111 9091/1/9091 +f 9113/1/9113 9091/1/9091 9093/1/9093 +f 9111/1/9111 9113/1/9113 9112/1/9112 +f 9112/1/9112 9113/1/9113 9114/1/9114 +f 9114/1/9114 9113/1/9113 9115/1/9115 +f 9086/1/9086 9085/1/9085 9087/1/9087 +f 9087/1/9087 9085/1/9085 9088/1/9088 +f 9086/1/9086 9084/1/9084 9085/1/9085 +f 9085/1/9085 9084/1/9084 9083/1/9083 +f 9083/1/9083 9075/1/9075 9085/1/9085 +f 9085/1/9085 9075/1/9075 9106/1/9106 +f 9085/1/9085 9106/1/9106 9108/1/9108 +f 9110/1/9110 9085/1/9085 9108/1/9108 +f 9108/1/9108 9106/1/9106 9107/1/9107 +f 9107/1/9107 9106/1/9106 9105/1/9105 +f 9105/1/9105 9084/1/9084 9107/1/9107 +f 9105/1/9105 9072/1/9072 9084/1/9084 +f 9072/1/9072 9076/1/9076 9084/1/9084 +f 9076/1/9076 9078/1/9078 9084/1/9084 +f 9084/1/9084 9078/1/9078 9080/1/9080 +f 9084/1/9084 9080/1/9080 9082/1/9082 +f 9081/1/9081 9082/1/9082 9080/1/9080 +f 9081/1/9081 9080/1/9080 9079/1/9079 +f 9075/1/9075 9081/1/9081 9079/1/9079 +f 9075/1/9075 9079/1/9079 9077/1/9077 +f 9077/1/9077 9076/1/9076 9075/1/9075 +f 9079/1/9079 9078/1/9078 9077/1/9077 +f 9083/1/9083 9082/1/9082 9081/1/9081 +f 9079/1/9079 9080/1/9080 9078/1/9078 +f 9077/1/9077 9078/1/9078 9076/1/9076 +f 9076/1/9076 9072/1/9072 9075/1/9075 +f 9075/1/9075 9072/1/9072 9071/1/9071 +f 9071/1/9071 9072/1/9072 9073/1/9073 +f 9071/1/9071 9073/1/9073 9074/1/9074 +f 9074/1/9074 9106/1/9106 9071/1/9071 +f 9074/1/9074 9104/1/9104 9106/1/9106 +f 9102/1/9102 9104/1/9104 9074/1/9074 +f 9074/1/9074 9101/1/9101 9102/1/9102 +f 9102/1/9102 9101/1/9101 9103/1/9103 +f 9101/1/9101 9073/1/9073 9103/1/9103 +f 9102/1/9102 9103/1/9103 9104/1/9104 +f 9104/1/9104 9103/1/9103 9105/1/9105 +f 9074/1/9074 9073/1/9073 9101/1/9101 +f 9103/1/9103 9073/1/9073 9072/1/9072 +f 9103/1/9103 9072/1/9072 9105/1/9105 +f 9104/1/9104 9105/1/9105 9106/1/9106 +f 9071/1/9071 9106/1/9106 9075/1/9075 +f 9083/1/9083 9081/1/9081 9075/1/9075 +f 9083/1/9083 9084/1/9084 9082/1/9082 +f 9107/1/9107 9084/1/9084 9086/1/9086 +f 9107/1/9107 9110/1/9110 9108/1/9108 +f 9111/1/9111 9112/1/9112 9109/1/9109 +f 9110/1/9110 9088/1/9088 9085/1/9085 +f 9087/1/9087 9088/1/9088 9089/1/9089 +f 9091/1/9091 9089/1/9089 9092/1/9092 +f 9112/1/9112 9114/1/9114 9090/1/9090 +f 9115/1/9115 9094/1/9094 9114/1/9114 +f 9092/1/9092 9093/1/9093 9091/1/9091 +f 9096/1/9096 9095/1/9095 9094/1/9094 +f 9113/1/9113 9093/1/9093 9116/1/9116 +f 9115/1/9115 9113/1/9113 9116/1/9116 +f 9115/1/9115 9096/1/9096 9094/1/9094 +f 9119/1/9119 9098/1/9098 9117/1/9117 +f 9096/1/9096 9097/1/9097 9095/1/9095 +f 9100/1/9100 9099/1/9099 9098/1/9098 +f 9099/1/9099 9100/1/9100 9244/1/9244 +f 9118/1/9118 9097/1/9097 9120/1/9120 +f 9119/1/9119 9118/1/9118 9120/1/9120 +f 9119/1/9119 9100/1/9100 9098/1/9098 +f 9122/1/9122 9123/1/9123 9121/1/9121 +f 9126/1/9126 9164/1/9164 9162/1/9162 +f 9123/1/9123 9122/1/9122 9166/1/9166 +f 9163/1/9163 9164/1/9164 9165/1/9165 +f 9243/1/9243 9197/1/9197 9166/1/9166 +f 9100/1/9100 9124/1/9124 9165/1/9165 +f 9244/1/9244 9100/1/9100 9198/1/9198 +f 9246/1/9246 9198/1/9198 9200/1/9200 +f 9061/1/9061 9066/1/9066 9068/1/9068 +f 9068/1/9068 9067/1/9067 9069/1/9069 +f 9200/1/9200 9070/1/9070 9246/1/9246 +f 9069/1/9069 9062/1/9062 9053/1/9053 +f 9244/1/9244 9198/1/9198 9246/1/9246 +f 9243/1/9243 9099/1/9099 9244/1/9244 +f 9243/1/9243 9199/1/9199 9197/1/9197 +f 9060/1/9060 9245/1/9245 9053/1/9053 +f 9059/1/9059 9054/1/9054 9199/1/9199 +f 9055/1/9055 9051/1/9051 9057/1/9057 +f 9062/1/9062 9054/1/9054 9053/1/9053 +f 9053/1/9053 9052/1/9052 9060/1/9060 +f 9055/1/9055 9052/1/9052 9051/1/9051 +f 9247/1/9247 9248/1/9248 9249/1/9249 +f 9247/1/9247 9249/1/9249 9250/1/9250 +f 9253/1/9253 9247/1/9247 9250/1/9250 +f 9253/1/9253 9250/1/9250 9255/1/9255 +f 9255/1/9255 9254/1/9254 9253/1/9253 +f 9253/1/9253 9254/1/9254 9252/1/9252 +f 9253/1/9253 9252/1/9252 9251/1/9251 +f 9251/1/9251 9252/1/9252 9248/1/9248 +f 9252/1/9252 9254/1/9254 9248/1/9248 +f 9248/1/9248 9254/1/9254 9256/1/9256 +f 9255/1/9255 9256/1/9256 9254/1/9254 +f 9255/1/9255 9257/1/9257 9256/1/9256 +f 9256/1/9256 9257/1/9257 9258/1/9258 +f 9258/1/9258 9266/1/9266 9256/1/9256 +f 9249/1/9249 9256/1/9256 9266/1/9266 +f 9249/1/9249 9266/1/9266 9442/1/9442 +f 9442/1/9442 9266/1/9266 9441/1/9441 +f 9442/1/9442 9441/1/9441 9439/1/9439 +f 9439/1/9439 9394/1/9394 9442/1/9442 +f 9442/1/9442 9394/1/9394 9396/1/9396 +f 9250/1/9250 9442/1/9442 9396/1/9396 +f 9396/1/9396 9395/1/9395 9250/1/9250 +f 9250/1/9250 9395/1/9395 9265/1/9265 +f 9250/1/9250 9265/1/9265 9257/1/9257 +f 9257/1/9257 9265/1/9265 9261/1/9261 +f 9257/1/9257 9261/1/9261 9259/1/9259 +f 9261/1/9261 9260/1/9260 9259/1/9259 +f 9259/1/9259 9260/1/9260 9258/1/9258 +f 9261/1/9261 9262/1/9262 9260/1/9260 +f 9262/1/9262 9264/1/9264 9260/1/9260 +f 9260/1/9260 9264/1/9264 9266/1/9266 +f 9265/1/9265 9266/1/9266 9264/1/9264 +f 9265/1/9265 9264/1/9264 9263/1/9263 +f 9263/1/9263 9264/1/9264 9262/1/9262 +f 9263/1/9263 9262/1/9262 9261/1/9261 +f 9265/1/9265 9263/1/9263 9261/1/9261 +f 9265/1/9265 9395/1/9395 9266/1/9266 +f 9394/1/9394 9395/1/9395 9396/1/9396 +f 9394/1/9394 9393/1/9393 9395/1/9395 +f 9440/1/9440 9395/1/9395 9393/1/9393 +f 9440/1/9440 9393/1/9393 9326/1/9326 +f 9352/1/9352 9440/1/9440 9326/1/9326 +f 9326/1/9326 9287/1/9287 9352/1/9352 +f 9289/1/9289 9352/1/9352 9287/1/9287 +f 9288/1/9288 9289/1/9289 9287/1/9287 +f 9287/1/9287 9285/1/9285 9288/1/9288 +f 9288/1/9288 9285/1/9285 9286/1/9286 +f 9288/1/9288 9286/1/9286 9351/1/9351 +f 9288/1/9288 9351/1/9351 9290/1/9290 +f 9290/1/9290 9351/1/9351 9349/1/9349 +f 9290/1/9290 9349/1/9349 9292/1/9292 +f 9292/1/9292 9291/1/9291 9290/1/9290 +f 9290/1/9290 9291/1/9291 9289/1/9289 +f 9291/1/9291 9350/1/9350 9289/1/9289 +f 9291/1/9291 9348/1/9348 9350/1/9350 +f 9347/1/9347 9350/1/9350 9348/1/9348 +f 9347/1/9347 9348/1/9348 9345/1/9345 +f 9294/1/9294 9347/1/9347 9345/1/9345 +f 9345/1/9345 9417/1/9417 9294/1/9294 +f 9294/1/9294 9417/1/9417 9400/1/9400 +f 9294/1/9294 9400/1/9400 9397/1/9397 +f 9294/1/9294 9397/1/9397 9293/1/9293 +f 9294/1/9294 9293/1/9293 9292/1/9292 +f 9293/1/9293 9397/1/9397 9438/1/9438 +f 9437/1/9437 9293/1/9293 9438/1/9438 +f 9437/1/9437 9438/1/9438 9435/1/9435 +f 9435/1/9435 9398/1/9398 9437/1/9437 +f 9437/1/9437 9398/1/9398 9401/1/9401 +f 9437/1/9437 9401/1/9401 9420/1/9420 +f 9420/1/9420 9401/1/9401 9400/1/9400 +f 9420/1/9420 9400/1/9400 9418/1/9418 +f 9418/1/9418 9346/1/9346 9420/1/9420 +f 9420/1/9420 9346/1/9346 9293/1/9293 +f 9293/1/9293 9346/1/9346 9348/1/9348 +f 9346/1/9346 9418/1/9418 9419/1/9419 +f 9362/1/9362 9346/1/9346 9419/1/9419 +f 9362/1/9362 9419/1/9419 9391/1/9391 +f 9391/1/9391 9361/1/9361 9362/1/9362 +f 9361/1/9361 9359/1/9359 9362/1/9362 +f 9359/1/9359 9342/1/9342 9362/1/9362 +f 9362/1/9362 9342/1/9342 9344/1/9344 +f 9341/1/9341 9344/1/9344 9342/1/9342 +f 9340/1/9340 9341/1/9341 9342/1/9342 +f 9342/1/9342 9332/1/9332 9340/1/9340 +f 9332/1/9332 9338/1/9338 9340/1/9340 +f 9338/1/9338 9339/1/9339 9340/1/9340 +f 9338/1/9338 9337/1/9337 9339/1/9339 +f 9337/1/9337 9331/1/9331 9339/1/9339 +f 9339/1/9339 9331/1/9331 9341/1/9341 +f 9341/1/9341 9331/1/9331 9360/1/9360 +f 9361/1/9361 9341/1/9341 9360/1/9360 +f 9343/1/9343 9341/1/9341 9361/1/9361 +f 9343/1/9343 9361/1/9361 9345/1/9345 +f 9345/1/9345 9344/1/9344 9343/1/9343 +f 9346/1/9346 9344/1/9344 9345/1/9345 +f 9360/1/9360 9331/1/9331 9327/1/9327 +f 9360/1/9360 9327/1/9327 9358/1/9358 +f 9358/1/9358 9359/1/9359 9360/1/9360 +f 9357/1/9357 9359/1/9359 9358/1/9358 +f 9356/1/9356 9357/1/9357 9358/1/9358 +f 9356/1/9356 9355/1/9355 9357/1/9357 +f 9355/1/9355 9328/1/9328 9357/1/9357 +f 9355/1/9355 9329/1/9329 9328/1/9328 +f 9327/1/9327 9328/1/9328 9329/1/9329 +f 9327/1/9327 9329/1/9329 9330/1/9330 +f 9330/1/9330 9354/1/9354 9327/1/9327 +f 9327/1/9327 9354/1/9354 9356/1/9356 +f 9330/1/9330 9353/1/9353 9354/1/9354 +f 9354/1/9354 9353/1/9353 9355/1/9355 +f 9330/1/9330 9329/1/9329 9353/1/9353 +f 9353/1/9353 9329/1/9329 9355/1/9355 +f 9354/1/9354 9355/1/9355 9356/1/9356 +f 9357/1/9357 9328/1/9328 9359/1/9359 +f 9327/1/9327 9356/1/9356 9358/1/9358 +f 9327/1/9327 9331/1/9331 9328/1/9328 +f 9328/1/9328 9331/1/9331 9332/1/9332 +f 9332/1/9332 9331/1/9331 9333/1/9333 +f 9332/1/9332 9333/1/9333 9334/1/9334 +f 9334/1/9334 9336/1/9336 9332/1/9332 +f 9334/1/9334 9335/1/9335 9336/1/9336 +f 9336/1/9336 9335/1/9335 9337/1/9337 +f 9335/1/9335 9333/1/9333 9337/1/9337 +f 9334/1/9334 9333/1/9333 9335/1/9335 +f 9337/1/9337 9333/1/9333 9331/1/9331 +f 9336/1/9336 9337/1/9337 9338/1/9338 +f 9332/1/9332 9336/1/9336 9338/1/9338 +f 9342/1/9342 9328/1/9328 9332/1/9332 +f 9339/1/9339 9341/1/9341 9340/1/9340 +f 9343/1/9343 9344/1/9344 9341/1/9341 +f 9359/1/9359 9328/1/9328 9342/1/9342 +f 9360/1/9360 9359/1/9359 9361/1/9361 +f 9392/1/9392 9361/1/9361 9391/1/9391 +f 9391/1/9391 9390/1/9390 9392/1/9392 +f 9392/1/9392 9390/1/9390 9416/1/9416 +f 9416/1/9416 9390/1/9390 9387/1/9387 +f 9416/1/9416 9387/1/9387 9415/1/9415 +f 9421/1/9421 9416/1/9416 9415/1/9415 +f 9421/1/9421 9415/1/9415 9422/1/9422 +f 9422/1/9422 9384/1/9384 9421/1/9421 +f 9421/1/9421 9384/1/9384 9386/1/9386 +f 9421/1/9421 9386/1/9386 9419/1/9419 +f 9419/1/9419 9386/1/9386 9388/1/9388 +f 9419/1/9419 9388/1/9388 9389/1/9389 +f 9388/1/9388 9387/1/9387 9389/1/9389 +f 9386/1/9386 9387/1/9387 9388/1/9388 +f 9386/1/9386 9385/1/9385 9387/1/9387 +f 9384/1/9384 9385/1/9385 9386/1/9386 +f 9384/1/9384 9383/1/9383 9385/1/9385 +f 9414/1/9414 9385/1/9385 9383/1/9383 +f 9414/1/9414 9383/1/9383 9381/1/9381 +f 9414/1/9414 9381/1/9381 9413/1/9413 +f 9423/1/9423 9414/1/9414 9413/1/9413 +f 9423/1/9423 9413/1/9413 9424/1/9424 +f 9424/1/9424 9378/1/9378 9423/1/9423 +f 9423/1/9423 9378/1/9378 9380/1/9380 +f 9423/1/9423 9380/1/9380 9382/1/9382 +f 9423/1/9423 9382/1/9382 9422/1/9422 +f 9380/1/9380 9381/1/9381 9382/1/9382 +f 9380/1/9380 9379/1/9379 9381/1/9381 +f 9378/1/9378 9379/1/9379 9380/1/9380 +f 9378/1/9378 9377/1/9377 9379/1/9379 +f 9412/1/9412 9379/1/9379 9377/1/9377 +f 9412/1/9412 9377/1/9377 9409/1/9409 +f 9425/1/9425 9412/1/9412 9409/1/9409 +f 9425/1/9425 9409/1/9409 9428/1/9428 +f 9427/1/9427 9425/1/9425 9428/1/9428 +f 9427/1/9427 9428/1/9428 9429/1/9429 +f 9429/1/9429 9411/1/9411 9427/1/9427 +f 9427/1/9427 9411/1/9411 9410/1/9410 +f 9427/1/9427 9410/1/9410 9426/1/9426 +f 9426/1/9426 9410/1/9410 9364/1/9364 +f 9426/1/9426 9364/1/9364 9363/1/9363 +f 9363/1/9363 9370/1/9370 9426/1/9426 +f 9426/1/9426 9370/1/9370 9425/1/9425 +f 9370/1/9370 9372/1/9372 9425/1/9425 +f 9372/1/9372 9373/1/9373 9425/1/9425 +f 9425/1/9425 9373/1/9373 9375/1/9375 +f 9425/1/9425 9375/1/9375 9424/1/9424 +f 9373/1/9373 9374/1/9374 9375/1/9375 +f 9375/1/9375 9374/1/9374 9376/1/9376 +f 9375/1/9375 9376/1/9376 9377/1/9377 +f 9376/1/9376 9374/1/9374 9409/1/9409 +f 9409/1/9409 9374/1/9374 9371/1/9371 +f 9409/1/9409 9371/1/9371 9410/1/9410 +f 9406/1/9406 9409/1/9409 9410/1/9410 +f 9410/1/9410 9371/1/9371 9369/1/9369 +f 9369/1/9369 9371/1/9371 9370/1/9370 +f 9368/1/9368 9369/1/9369 9370/1/9370 +f 9368/1/9368 9367/1/9367 9369/1/9369 +f 9369/1/9369 9367/1/9367 9365/1/9365 +f 9364/1/9364 9369/1/9369 9365/1/9365 +f 9366/1/9366 9365/1/9365 9367/1/9367 +f 9363/1/9363 9365/1/9365 9366/1/9366 +f 9366/1/9366 9368/1/9368 9363/1/9363 +f 9366/1/9366 9367/1/9367 9368/1/9368 +f 9373/1/9373 9371/1/9371 9374/1/9374 +f 9372/1/9372 9371/1/9371 9373/1/9373 +f 9370/1/9370 9371/1/9371 9372/1/9372 +f 9363/1/9363 9368/1/9368 9370/1/9370 +f 9363/1/9363 9364/1/9364 9365/1/9365 +f 9410/1/9410 9369/1/9369 9364/1/9364 +f 9410/1/9410 9411/1/9411 9406/1/9406 +f 9406/1/9406 9411/1/9411 9407/1/9407 +f 9406/1/9406 9407/1/9407 9404/1/9404 +f 9430/1/9430 9406/1/9406 9404/1/9404 +f 9430/1/9430 9404/1/9404 9433/1/9433 +f 9432/1/9432 9430/1/9430 9433/1/9433 +f 9433/1/9433 9434/1/9434 9432/1/9432 +f 9434/1/9434 9405/1/9405 9432/1/9432 +f 9432/1/9432 9405/1/9405 9408/1/9408 +f 9432/1/9432 9408/1/9408 9431/1/9431 +f 9431/1/9431 9408/1/9408 9407/1/9407 +f 9431/1/9431 9407/1/9407 9429/1/9429 +f 9429/1/9429 9430/1/9430 9431/1/9431 +f 9404/1/9404 9408/1/9408 9405/1/9405 +f 9404/1/9404 9405/1/9405 9402/1/9402 +f 9402/1/9402 9405/1/9405 9403/1/9403 +f 9402/1/9402 9403/1/9403 9399/1/9399 +f 9399/1/9399 9398/1/9398 9402/1/9402 +f 9397/1/9397 9398/1/9398 9399/1/9399 +f 9436/1/9436 9399/1/9399 9403/1/9403 +f 9436/1/9436 9403/1/9403 9434/1/9434 +f 9438/1/9438 9399/1/9399 9436/1/9436 +f 9434/1/9434 9403/1/9403 9405/1/9405 +f 9433/1/9433 9436/1/9436 9434/1/9434 +f 9435/1/9435 9436/1/9436 9433/1/9433 +f 9433/1/9433 9402/1/9402 9435/1/9435 +f 9431/1/9431 9430/1/9430 9432/1/9432 +f 9433/1/9433 9404/1/9404 9402/1/9402 +f 9428/1/9428 9406/1/9406 9430/1/9430 +f 9404/1/9404 9407/1/9407 9408/1/9408 +f 9429/1/9429 9407/1/9407 9411/1/9411 +f 9429/1/9429 9428/1/9428 9430/1/9430 +f 9426/1/9426 9425/1/9425 9427/1/9427 +f 9428/1/9428 9409/1/9409 9406/1/9406 +f 9424/1/9424 9412/1/9412 9425/1/9425 +f 9409/1/9409 9377/1/9377 9376/1/9376 +f 9413/1/9413 9379/1/9379 9412/1/9412 +f 9375/1/9375 9377/1/9377 9378/1/9378 +f 9424/1/9424 9375/1/9375 9378/1/9378 +f 9424/1/9424 9413/1/9413 9412/1/9412 +f 9422/1/9422 9414/1/9414 9423/1/9423 +f 9413/1/9413 9381/1/9381 9379/1/9379 +f 9382/1/9382 9381/1/9381 9383/1/9383 +f 9415/1/9415 9385/1/9385 9414/1/9414 +f 9382/1/9382 9383/1/9383 9384/1/9384 +f 9422/1/9422 9382/1/9382 9384/1/9384 +f 9422/1/9422 9415/1/9415 9414/1/9414 +f 9419/1/9419 9416/1/9416 9421/1/9421 +f 9419/1/9419 9417/1/9417 9416/1/9416 +f 9417/1/9417 9361/1/9361 9416/1/9416 +f 9415/1/9415 9387/1/9387 9385/1/9385 +f 9389/1/9389 9387/1/9387 9390/1/9390 +f 9389/1/9389 9390/1/9390 9391/1/9391 +f 9416/1/9416 9361/1/9361 9392/1/9392 +f 9391/1/9391 9419/1/9419 9389/1/9389 +f 9344/1/9344 9346/1/9346 9362/1/9362 +f 9418/1/9418 9417/1/9417 9419/1/9419 +f 9397/1/9397 9401/1/9401 9398/1/9398 +f 9435/1/9435 9402/1/9402 9398/1/9398 +f 9435/1/9435 9438/1/9438 9436/1/9436 +f 9420/1/9420 9293/1/9293 9437/1/9437 +f 9438/1/9438 9397/1/9397 9399/1/9399 +f 9397/1/9397 9400/1/9400 9401/1/9401 +f 9418/1/9418 9400/1/9400 9417/1/9417 +f 9345/1/9345 9361/1/9361 9417/1/9417 +f 9292/1/9292 9347/1/9347 9294/1/9294 +f 9345/1/9345 9348/1/9348 9346/1/9346 +f 9349/1/9349 9350/1/9350 9347/1/9347 +f 9349/1/9349 9352/1/9352 9350/1/9350 +f 9293/1/9293 9348/1/9348 9291/1/9291 +f 9292/1/9292 9293/1/9293 9291/1/9291 +f 9292/1/9292 9349/1/9349 9347/1/9347 +f 9351/1/9351 9352/1/9352 9349/1/9349 +f 9352/1/9352 9351/1/9351 9439/1/9439 +f 9351/1/9351 9286/1/9286 9325/1/9325 +f 9351/1/9351 9325/1/9325 9393/1/9393 +f 9286/1/9286 9323/1/9323 9325/1/9325 +f 9323/1/9323 9324/1/9324 9325/1/9325 +f 9325/1/9325 9324/1/9324 9326/1/9326 +f 9285/1/9285 9326/1/9326 9324/1/9324 +f 9285/1/9285 9324/1/9324 9283/1/9283 +f 9284/1/9284 9285/1/9285 9283/1/9283 +f 9284/1/9284 9283/1/9283 9282/1/9282 +f 9282/1/9282 9321/1/9321 9284/1/9284 +f 9284/1/9284 9321/1/9321 9323/1/9323 +f 9321/1/9321 9322/1/9322 9323/1/9323 +f 9321/1/9321 9320/1/9320 9322/1/9322 +f 9281/1/9281 9322/1/9322 9320/1/9320 +f 9281/1/9281 9320/1/9320 9279/1/9279 +f 9280/1/9280 9281/1/9281 9279/1/9279 +f 9280/1/9280 9279/1/9279 9278/1/9278 +f 9278/1/9278 9318/1/9318 9280/1/9280 +f 9280/1/9280 9318/1/9318 9319/1/9319 +f 9280/1/9280 9319/1/9319 9282/1/9282 +f 9318/1/9318 9317/1/9317 9319/1/9319 +f 9319/1/9319 9317/1/9317 9320/1/9320 +f 9316/1/9316 9317/1/9317 9318/1/9318 +f 9318/1/9318 9276/1/9276 9316/1/9316 +f 9274/1/9274 9316/1/9316 9276/1/9276 +f 9275/1/9275 9274/1/9274 9276/1/9276 +f 9278/1/9278 9275/1/9275 9276/1/9276 +f 9277/1/9277 9275/1/9275 9278/1/9278 +f 9275/1/9275 9277/1/9277 9315/1/9315 +f 9275/1/9275 9315/1/9315 9273/1/9273 +f 9273/1/9273 9315/1/9315 9313/1/9313 +f 9273/1/9273 9313/1/9313 9272/1/9272 +f 9272/1/9272 9271/1/9271 9273/1/9273 +f 9273/1/9273 9271/1/9271 9274/1/9274 +f 9271/1/9271 9314/1/9314 9274/1/9274 +f 9271/1/9271 9312/1/9312 9314/1/9314 +f 9311/1/9311 9314/1/9314 9312/1/9312 +f 9310/1/9310 9311/1/9311 9312/1/9312 +f 9312/1/9312 9302/1/9302 9310/1/9310 +f 9310/1/9310 9302/1/9302 9306/1/9306 +f 9310/1/9310 9306/1/9306 9308/1/9308 +f 9308/1/9308 9309/1/9309 9310/1/9310 +f 9308/1/9308 9307/1/9307 9309/1/9309 +f 9307/1/9307 9301/1/9301 9309/1/9309 +f 9309/1/9309 9301/1/9301 9311/1/9311 +f 9311/1/9311 9301/1/9301 9272/1/9272 +f 9272/1/9272 9301/1/9301 9299/1/9299 +f 9272/1/9272 9299/1/9299 9268/1/9268 +f 9268/1/9268 9299/1/9299 9295/1/9295 +f 9268/1/9268 9295/1/9295 9269/1/9269 +f 9267/1/9267 9268/1/9268 9269/1/9269 +f 9267/1/9267 9269/1/9269 9270/1/9270 +f 9267/1/9267 9270/1/9270 9300/1/9300 +f 9300/1/9300 9271/1/9271 9267/1/9267 +f 9300/1/9300 9270/1/9270 9296/1/9296 +f 9300/1/9300 9296/1/9296 9298/1/9298 +f 9298/1/9298 9299/1/9299 9300/1/9300 +f 9298/1/9298 9297/1/9297 9299/1/9299 +f 9296/1/9296 9297/1/9297 9298/1/9298 +f 9296/1/9296 9295/1/9295 9297/1/9297 +f 9270/1/9270 9295/1/9295 9296/1/9296 +f 9267/1/9267 9271/1/9271 9268/1/9268 +f 9270/1/9270 9269/1/9269 9295/1/9295 +f 9299/1/9299 9297/1/9297 9295/1/9295 +f 9299/1/9299 9301/1/9301 9300/1/9300 +f 9300/1/9300 9301/1/9301 9302/1/9302 +f 9302/1/9302 9301/1/9301 9303/1/9303 +f 9302/1/9302 9303/1/9303 9304/1/9304 +f 9304/1/9304 9303/1/9303 9305/1/9305 +f 9304/1/9304 9305/1/9305 9306/1/9306 +f 9306/1/9306 9305/1/9305 9307/1/9307 +f 9305/1/9305 9303/1/9303 9307/1/9307 +f 9307/1/9307 9303/1/9303 9301/1/9301 +f 9306/1/9306 9307/1/9307 9308/1/9308 +f 9302/1/9302 9304/1/9304 9306/1/9306 +f 9312/1/9312 9300/1/9300 9302/1/9302 +f 9309/1/9309 9311/1/9311 9310/1/9310 +f 9313/1/9313 9314/1/9314 9311/1/9311 +f 9313/1/9313 9316/1/9316 9314/1/9314 +f 9271/1/9271 9300/1/9300 9312/1/9312 +f 9268/1/9268 9271/1/9271 9272/1/9272 +f 9272/1/9272 9313/1/9313 9311/1/9311 +f 9315/1/9315 9316/1/9316 9313/1/9313 +f 9315/1/9315 9277/1/9277 9317/1/9317 +f 9279/1/9279 9317/1/9317 9277/1/9277 +f 9273/1/9273 9274/1/9274 9275/1/9275 +f 9274/1/9274 9314/1/9314 9316/1/9316 +f 9315/1/9315 9317/1/9317 9316/1/9316 +f 9278/1/9278 9276/1/9276 9318/1/9318 +f 9278/1/9278 9279/1/9279 9277/1/9277 +f 9282/1/9282 9281/1/9281 9280/1/9280 +f 9279/1/9279 9320/1/9320 9317/1/9317 +f 9283/1/9283 9322/1/9322 9281/1/9281 +f 9319/1/9319 9320/1/9320 9321/1/9321 +f 9282/1/9282 9319/1/9319 9321/1/9321 +f 9282/1/9282 9283/1/9283 9281/1/9281 +f 9283/1/9283 9324/1/9324 9322/1/9322 +f 9323/1/9323 9322/1/9322 9324/1/9324 +f 9284/1/9284 9323/1/9323 9286/1/9286 +f 9286/1/9286 9285/1/9285 9284/1/9284 +f 9290/1/9290 9289/1/9289 9288/1/9288 +f 9289/1/9289 9350/1/9350 9352/1/9352 +f 9285/1/9285 9287/1/9287 9326/1/9326 +f 9439/1/9439 9440/1/9440 9352/1/9352 +f 9326/1/9326 9393/1/9393 9325/1/9325 +f 9441/1/9441 9395/1/9395 9440/1/9440 +f 9351/1/9351 9393/1/9393 9394/1/9394 +f 9439/1/9439 9351/1/9351 9394/1/9394 +f 9439/1/9439 9441/1/9441 9440/1/9440 +f 9266/1/9266 9395/1/9395 9441/1/9441 +f 9260/1/9260 9266/1/9266 9258/1/9258 +f 9259/1/9259 9258/1/9258 9257/1/9257 +f 9255/1/9255 9250/1/9250 9257/1/9257 +f 9251/1/9251 9247/1/9247 9253/1/9253 +f 9249/1/9249 9442/1/9442 9250/1/9250 +f 9248/1/9248 9256/1/9256 9249/1/9249 +f 9251/1/9251 9248/1/9248 9247/1/9247 +f 9443/1/9443 9444/1/9444 9445/1/9445 +f 9443/1/9443 9445/1/9445 9446/1/9446 +f 9443/1/9443 9446/1/9446 9447/1/9447 +f 9447/1/9447 9456/1/9456 9443/1/9443 +f 9443/1/9443 9456/1/9456 9459/1/9459 +f 9456/1/9456 9457/1/9457 9459/1/9459 +f 9457/1/9457 9458/1/9458 9459/1/9459 +f 9459/1/9459 9458/1/9458 9460/1/9460 +f 9461/1/9461 9459/1/9459 9460/1/9460 +f 9463/1/9463 9461/1/9461 9460/1/9460 +f 9463/1/9463 9460/1/9460 9464/1/9464 +f 9464/1/9464 9469/1/9469 9463/1/9463 +f 9469/1/9469 9471/1/9471 9463/1/9463 +f 9463/1/9463 9471/1/9471 9462/1/9462 +f 9462/1/9462 9471/1/9471 9473/1/9473 +f 9462/1/9462 9473/1/9473 9466/1/9466 +f 9466/1/9466 9467/1/9467 9462/1/9462 +f 9462/1/9462 9467/1/9467 9461/1/9461 +f 9467/1/9467 9468/1/9468 9461/1/9461 +f 9468/1/9468 9454/1/9454 9461/1/9461 +f 9461/1/9461 9454/1/9454 9453/1/9453 +f 9453/1/9453 9454/1/9454 9452/1/9452 +f 9453/1/9453 9452/1/9452 9451/1/9451 +f 9449/1/9449 9453/1/9453 9451/1/9451 +f 9451/1/9451 9450/1/9450 9449/1/9449 +f 9449/1/9449 9450/1/9450 9448/1/9448 +f 9449/1/9449 9448/1/9448 9444/1/9444 +f 9450/1/9450 9452/1/9452 9448/1/9448 +f 9444/1/9444 9453/1/9453 9449/1/9449 +f 9444/1/9444 9459/1/9459 9453/1/9453 +f 9451/1/9451 9452/1/9452 9450/1/9450 +f 9448/1/9448 9452/1/9452 9454/1/9454 +f 9448/1/9448 9454/1/9454 9445/1/9445 +f 9445/1/9445 9454/1/9454 9457/1/9457 +f 9458/1/9458 9454/1/9454 9468/1/9468 +f 9471/1/9471 9458/1/9458 9468/1/9468 +f 9467/1/9467 9474/1/9474 9468/1/9468 +f 9473/1/9473 9468/1/9468 9474/1/9474 +f 9466/1/9466 9474/1/9474 9467/1/9467 +f 9466/1/9466 9473/1/9473 9474/1/9474 +f 9471/1/9471 9468/1/9468 9473/1/9473 +f 9469/1/9469 9458/1/9458 9471/1/9471 +f 9469/1/9469 9470/1/9470 9458/1/9458 +f 9472/1/9472 9470/1/9470 9469/1/9469 +f 9465/1/9465 9470/1/9470 9472/1/9472 +f 9465/1/9465 9472/1/9472 9464/1/9464 +f 9460/1/9460 9470/1/9470 9465/1/9465 +f 9464/1/9464 9472/1/9472 9469/1/9469 +f 9464/1/9464 9460/1/9460 9465/1/9465 +f 9462/1/9462 9461/1/9461 9463/1/9463 +f 9453/1/9453 9459/1/9459 9461/1/9461 +f 9460/1/9460 9458/1/9458 9470/1/9470 +f 9457/1/9457 9454/1/9454 9458/1/9458 +f 9456/1/9456 9455/1/9455 9457/1/9457 +f 9446/1/9446 9457/1/9457 9455/1/9455 +f 9447/1/9447 9455/1/9455 9456/1/9456 +f 9447/1/9447 9446/1/9446 9455/1/9455 +f 9445/1/9445 9457/1/9457 9446/1/9446 +f 9445/1/9445 9444/1/9444 9448/1/9448 +f 9443/1/9443 9459/1/9459 9444/1/9444 +f 9475/1/9475 9476/1/9476 9477/1/9477 +f 9479/1/9479 9475/1/9475 9477/1/9477 +f 9479/1/9479 9477/1/9477 9875/1/9875 +f 9875/1/9875 9496/1/9496 9479/1/9479 +f 9495/1/9495 9479/1/9479 9496/1/9496 +f 9495/1/9495 9496/1/9496 9497/1/9497 +f 9497/1/9497 9612/1/9612 9495/1/9495 +f 9495/1/9495 9612/1/9612 9613/1/9613 +f 9495/1/9495 9613/1/9613 9614/1/9614 +f 9478/1/9478 9495/1/9495 9614/1/9614 +f 9614/1/9614 9475/1/9475 9478/1/9478 +f 9613/1/9613 9876/1/9876 9614/1/9614 +f 9614/1/9614 9876/1/9876 9875/1/9875 +f 9614/1/9614 9875/1/9875 9601/1/9601 +f 9601/1/9601 9485/1/9485 9614/1/9614 +f 9614/1/9614 9485/1/9485 9483/1/9483 +f 9614/1/9614 9483/1/9483 9481/1/9481 +f 9481/1/9481 9476/1/9476 9614/1/9614 +f 9476/1/9476 9481/1/9481 9480/1/9480 +f 9480/1/9480 9481/1/9481 9482/1/9482 +f 9875/1/9875 9480/1/9480 9482/1/9482 +f 9482/1/9482 9484/1/9484 9875/1/9875 +f 9875/1/9875 9484/1/9484 9486/1/9486 +f 9875/1/9875 9486/1/9486 9874/1/9874 +f 9874/1/9874 9486/1/9486 9488/1/9488 +f 9874/1/9874 9488/1/9488 9871/1/9871 +f 9599/1/9599 9874/1/9874 9871/1/9871 +f 9599/1/9599 9871/1/9871 9602/1/9602 +f 9600/1/9600 9599/1/9599 9602/1/9602 +f 9602/1/9602 9603/1/9603 9600/1/9600 +f 9600/1/9600 9603/1/9603 9604/1/9604 +f 9600/1/9600 9604/1/9604 9605/1/9605 +f 9605/1/9605 9607/1/9607 9600/1/9600 +f 9600/1/9600 9607/1/9607 9642/1/9642 +f 9600/1/9600 9642/1/9642 9652/1/9652 +f 9652/1/9652 9653/1/9653 9600/1/9600 +f 9600/1/9600 9653/1/9653 9654/1/9654 +f 9600/1/9600 9654/1/9654 9655/1/9655 +f 9655/1/9655 9656/1/9656 9600/1/9600 +f 9600/1/9600 9656/1/9656 9657/1/9657 +f 9600/1/9600 9657/1/9657 9658/1/9658 +f 9658/1/9658 9659/1/9659 9600/1/9600 +f 9600/1/9600 9659/1/9659 9660/1/9660 +f 9600/1/9600 9660/1/9660 9661/1/9661 +f 9661/1/9661 9662/1/9662 9600/1/9600 +f 9600/1/9600 9662/1/9662 9663/1/9663 +f 9600/1/9600 9663/1/9663 9597/1/9597 +f 9597/1/9597 9490/1/9490 9600/1/9600 +f 9597/1/9597 9492/1/9492 9490/1/9490 +f 9491/1/9491 9490/1/9490 9492/1/9492 +f 9491/1/9491 9492/1/9492 9493/1/9493 +f 9870/1/9870 9491/1/9491 9493/1/9493 +f 9870/1/9870 9493/1/9493 9980/1/9980 +f 9974/1/9974 9870/1/9870 9980/1/9980 +f 9974/1/9974 9980/1/9980 9834/1/9834 +f 9972/1/9972 9974/1/9974 9834/1/9834 +f 9834/1/9834 9971/1/9971 9972/1/9972 +f 9714/1/9714 9972/1/9972 9971/1/9971 +f 9714/1/9714 9971/1/9971 9712/1/9712 +f 9713/1/9713 9714/1/9714 9712/1/9712 +f 9709/1/9709 9713/1/9713 9712/1/9712 +f 9709/1/9709 9712/1/9712 9711/1/9711 +f 9711/1/9711 9710/1/9710 9709/1/9709 +f 9709/1/9709 9710/1/9710 9708/1/9708 +f 9709/1/9709 9708/1/9708 9703/1/9703 +f 9703/1/9703 9772/1/9772 9709/1/9709 +f 9709/1/9709 9772/1/9772 9773/1/9773 +f 9773/1/9773 9774/1/9774 9709/1/9709 +f 9709/1/9709 9774/1/9774 9775/1/9775 +f 9709/1/9709 9775/1/9775 9776/1/9776 +f 9776/1/9776 9777/1/9777 9709/1/9709 +f 9709/1/9709 9777/1/9777 9801/1/9801 +f 9709/1/9709 9801/1/9801 9722/1/9722 +f 9722/1/9722 9801/1/9801 9802/1/9802 +f 9722/1/9722 9802/1/9802 9799/1/9799 +f 9799/1/9799 9800/1/9800 9722/1/9722 +f 9722/1/9722 9800/1/9800 9782/1/9782 +f 9722/1/9722 9782/1/9782 9768/1/9768 +f 9768/1/9768 9778/1/9778 9722/1/9722 +f 9722/1/9722 9778/1/9778 9784/1/9784 +f 9722/1/9722 9784/1/9784 9785/1/9785 +f 9786/1/9786 9722/1/9722 9785/1/9785 +f 9785/1/9785 9830/1/9830 9786/1/9786 +f 9786/1/9786 9830/1/9830 9829/1/9829 +f 9786/1/9786 9829/1/9829 9787/1/9787 +f 9787/1/9787 9829/1/9829 9832/1/9832 +f 9787/1/9787 9832/1/9832 9788/1/9788 +f 9788/1/9788 9761/1/9761 9787/1/9787 +f 9787/1/9787 9761/1/9761 9723/1/9723 +f 9787/1/9787 9723/1/9723 9722/1/9722 +f 9722/1/9722 9723/1/9723 9713/1/9713 +f 9723/1/9723 9730/1/9730 9713/1/9713 +f 9713/1/9713 9730/1/9730 9731/1/9731 +f 9713/1/9713 9731/1/9731 9732/1/9732 +f 9732/1/9732 9733/1/9733 9713/1/9713 +f 9713/1/9713 9733/1/9733 9734/1/9734 +f 9713/1/9713 9734/1/9734 9726/1/9726 +f 9726/1/9726 9727/1/9727 9713/1/9713 +f 9727/1/9727 9728/1/9728 9713/1/9713 +f 9713/1/9713 9728/1/9728 9729/1/9729 +f 9713/1/9713 9729/1/9729 9725/1/9725 +f 9724/1/9724 9713/1/9713 9725/1/9725 +f 9724/1/9724 9725/1/9725 9803/1/9803 +f 9803/1/9803 9804/1/9804 9724/1/9724 +f 9724/1/9724 9804/1/9804 9805/1/9805 +f 9724/1/9724 9805/1/9805 9806/1/9806 +f 9806/1/9806 9807/1/9807 9724/1/9724 +f 9724/1/9724 9807/1/9807 9808/1/9808 +f 9724/1/9724 9808/1/9808 9809/1/9809 +f 9809/1/9809 9810/1/9810 9724/1/9724 +f 9724/1/9724 9810/1/9810 9811/1/9811 +f 9724/1/9724 9811/1/9811 9812/1/9812 +f 9812/1/9812 9813/1/9813 9724/1/9724 +f 9724/1/9724 9813/1/9813 9814/1/9814 +f 9724/1/9724 9814/1/9814 9739/1/9739 +f 9739/1/9739 9571/1/9571 9724/1/9724 +f 9724/1/9724 9571/1/9571 9573/1/9573 +f 9724/1/9724 9573/1/9573 9718/1/9718 +f 9718/1/9718 9573/1/9573 9494/1/9494 +f 9718/1/9718 9494/1/9494 9598/1/9598 +f 9598/1/9598 9716/1/9716 9718/1/9718 +f 9718/1/9718 9716/1/9716 9713/1/9713 +f 9716/1/9716 9715/1/9715 9713/1/9713 +f 9716/1/9716 9696/1/9696 9715/1/9715 +f 9721/1/9721 9715/1/9715 9696/1/9696 +f 9721/1/9721 9696/1/9696 9720/1/9720 +f 9720/1/9720 10045/1/10045 9721/1/9721 +f 9721/1/9721 10045/1/10045 9979/1/9979 +f 10045/1/10045 9842/1/9842 9979/1/9979 +f 9979/1/9979 9842/1/9842 9973/1/9973 +f 9979/1/9979 9973/1/9973 9972/1/9972 +f 9715/1/9715 9979/1/9979 9972/1/9972 +f 9842/1/9842 9976/1/9976 9973/1/9973 +f 9973/1/9973 9976/1/9976 9977/1/9977 +f 9973/1/9973 9977/1/9977 9978/1/9978 +f 9978/1/9978 10061/1/10061 9973/1/9973 +f 10062/1/10062 9973/1/9973 10061/1/10061 +f 9818/1/9818 10062/1/10062 10061/1/10061 +f 9818/1/9818 10061/1/10061 9697/1/9697 +f 9696/1/9696 9818/1/9818 9697/1/9697 +f 9696/1/9696 9697/1/9697 9694/1/9694 +f 9694/1/9694 9700/1/9700 9696/1/9696 +f 9696/1/9696 9700/1/9700 9719/1/9719 +f 9700/1/9700 10047/1/10047 9719/1/9719 +f 9719/1/9719 10047/1/10047 10046/1/10046 +f 9719/1/9719 10046/1/10046 9720/1/9720 +f 10046/1/10046 10047/1/10047 9842/1/9842 +f 9842/1/9842 10047/1/10047 10048/1/10048 +f 9842/1/9842 10048/1/10048 9843/1/9843 +f 9529/1/9529 9842/1/9842 9843/1/9843 +f 9529/1/9529 9843/1/9843 9844/1/9844 +f 9845/1/9845 9529/1/9529 9844/1/9844 +f 9705/1/9705 9845/1/9845 9844/1/9844 +f 9705/1/9705 9844/1/9844 9695/1/9695 +f 9695/1/9695 9530/1/9530 9705/1/9705 +f 9705/1/9705 9530/1/9530 9704/1/9704 +f 9703/1/9703 9704/1/9704 9530/1/9530 +f 9703/1/9703 9530/1/9530 9527/1/9527 +f 9527/1/9527 9768/1/9768 9703/1/9703 +f 9703/1/9703 9768/1/9768 9781/1/9781 +f 9703/1/9703 9781/1/9781 9769/1/9769 +f 9769/1/9769 9770/1/9770 9703/1/9703 +f 9770/1/9770 9771/1/9771 9703/1/9703 +f 9770/1/9770 10057/1/10057 9771/1/9771 +f 9771/1/9771 10057/1/10057 10056/1/10056 +f 9771/1/9771 10056/1/10056 9772/1/9772 +f 9772/1/9772 10056/1/10056 10055/1/10055 +f 10054/1/10054 9772/1/9772 10055/1/10055 +f 9840/1/9840 10054/1/10054 10055/1/10055 +f 9835/1/9835 10054/1/10054 9840/1/9840 +f 9840/1/9840 9966/1/9966 9835/1/9835 +f 9835/1/9835 9966/1/9966 9967/1/9967 +f 9835/1/9835 9967/1/9967 9968/1/9968 +f 9968/1/9968 9969/1/9969 9835/1/9835 +f 9835/1/9835 9969/1/9969 9970/1/9970 +f 9835/1/9835 9970/1/9970 9834/1/9834 +f 9834/1/9834 9823/1/9823 9835/1/9835 +f 9835/1/9835 9823/1/9823 9828/1/9828 +f 9835/1/9835 9828/1/9828 10052/1/10052 +f 10050/1/10050 9835/1/9835 10052/1/10052 +f 9777/1/9777 10050/1/10050 10052/1/10052 +f 10050/1/10050 10051/1/10051 9835/1/9835 +f 10051/1/10051 10053/1/10053 9835/1/9835 +f 9775/1/9775 10053/1/10053 10051/1/10051 +f 9776/1/9776 10051/1/10051 10050/1/10050 +f 9828/1/9828 9777/1/9777 10052/1/10052 +f 9823/1/9823 9827/1/9827 9828/1/9828 +f 9802/1/9802 9828/1/9828 9827/1/9827 +f 9823/1/9823 9826/1/9826 9827/1/9827 +f 9799/1/9799 9827/1/9827 9826/1/9826 +f 9825/1/9825 9826/1/9826 9823/1/9823 +f 9823/1/9823 9824/1/9824 9825/1/9825 +f 9782/1/9782 9825/1/9825 9824/1/9824 +f 9820/1/9820 9782/1/9782 9824/1/9824 +f 9783/1/9783 9782/1/9782 9820/1/9820 +f 9783/1/9783 9820/1/9820 9779/1/9779 +f 9768/1/9768 9783/1/9783 9779/1/9779 +f 9779/1/9779 9780/1/9780 9768/1/9768 +f 9779/1/9779 9819/1/9819 9780/1/9780 +f 9780/1/9780 9819/1/9819 9822/1/9822 +f 9780/1/9780 9822/1/9822 9781/1/9781 +f 9781/1/9781 9822/1/9822 9838/1/9838 +f 10058/1/10058 9781/1/9781 9838/1/9838 +f 9840/1/9840 10058/1/10058 9838/1/9838 +f 9840/1/9840 9838/1/9838 9821/1/9821 +f 9821/1/9821 9525/1/9525 9840/1/9840 +f 9840/1/9840 9525/1/9525 9529/1/9529 +f 9525/1/9525 9527/1/9527 9529/1/9529 +f 9525/1/9525 9524/1/9524 9527/1/9527 +f 9524/1/9524 9766/1/9766 9527/1/9527 +f 9524/1/9524 9765/1/9765 9766/1/9766 +f 9765/1/9765 9841/1/9841 9766/1/9766 +f 9766/1/9766 9841/1/9841 9839/1/9839 +f 9766/1/9766 9839/1/9839 9767/1/9767 +f 9766/1/9766 9767/1/9767 9768/1/9768 +f 9767/1/9767 9839/1/9839 9837/1/9837 +f 9767/1/9767 9837/1/9837 9778/1/9778 +f 9778/1/9778 9837/1/9837 9836/1/9836 +f 9821/1/9821 9836/1/9836 9837/1/9837 +f 9821/1/9821 9831/1/9831 9836/1/9836 +f 9784/1/9784 9836/1/9836 9831/1/9831 +f 9823/1/9823 9831/1/9831 9821/1/9821 +f 9821/1/9821 9820/1/9820 9823/1/9823 +f 9819/1/9819 9820/1/9820 9821/1/9821 +f 9823/1/9823 9830/1/9830 9831/1/9831 +f 9837/1/9837 9839/1/9839 9821/1/9821 +f 9523/1/9523 9839/1/9839 9841/1/9841 +f 9523/1/9523 9841/1/9841 10001/1/10001 +f 10001/1/10001 9526/1/9526 9523/1/9523 +f 9523/1/9523 9526/1/9526 9524/1/9524 +f 9524/1/9524 9526/1/9526 9528/1/9528 +f 9528/1/9528 9763/1/9763 9524/1/9524 +f 9528/1/9528 9762/1/9762 9763/1/9763 +f 9764/1/9764 9763/1/9763 9762/1/9762 +f 9762/1/9762 9793/1/9793 9764/1/9764 +f 9793/1/9793 10003/1/10003 9764/1/9764 +f 9764/1/9764 10003/1/10003 10002/1/10002 +f 10000/1/10000 10002/1/10002 10003/1/10003 +f 10000/1/10000 10003/1/10003 9999/1/9999 +f 9541/1/9541 10000/1/10000 9999/1/9999 +f 9541/1/9541 9999/1/9999 9544/1/9544 +f 9543/1/9543 9541/1/9541 9544/1/9544 +f 9543/1/9543 9544/1/9544 9545/1/9545 +f 9760/1/9760 9543/1/9543 9545/1/9545 +f 9760/1/9760 9545/1/9545 9761/1/9761 +f 9789/1/9789 9760/1/9760 9761/1/9761 +f 9790/1/9790 9760/1/9760 9789/1/9789 +f 9789/1/9789 10006/1/10006 9790/1/9790 +f 9790/1/9790 10006/1/10006 10005/1/10005 +f 9790/1/9790 10005/1/10005 9791/1/9791 +f 9791/1/9791 10005/1/10005 10004/1/10004 +f 9791/1/9791 10004/1/10004 9792/1/9792 +f 9760/1/9760 9791/1/9791 9792/1/9792 +f 9760/1/9760 9792/1/9792 9762/1/9762 +f 9762/1/9762 9542/1/9542 9760/1/9760 +f 9540/1/9540 9542/1/9542 9762/1/9762 +f 9762/1/9762 9538/1/9538 9540/1/9540 +f 9537/1/9537 9540/1/9540 9538/1/9538 +f 9537/1/9537 9538/1/9538 9535/1/9535 +f 9535/1/9535 9536/1/9536 9537/1/9537 +f 9537/1/9537 9536/1/9536 9534/1/9534 +f 10000/1/10000 9537/1/9537 9534/1/9534 +f 10000/1/10000 9534/1/9534 10001/1/10001 +f 9539/1/9539 9537/1/9537 10000/1/10000 +f 9535/1/9535 9534/1/9534 9536/1/9536 +f 9533/1/9533 9534/1/9534 9535/1/9535 +f 9533/1/9533 9535/1/9535 9762/1/9762 +f 9533/1/9533 9526/1/9526 9534/1/9534 +f 9539/1/9539 9540/1/9540 9537/1/9537 +f 9762/1/9762 9535/1/9535 9538/1/9538 +f 9539/1/9539 9542/1/9542 9540/1/9540 +f 9541/1/9541 9542/1/9542 9539/1/9539 +f 9792/1/9792 10004/1/10004 10007/1/10007 +f 9792/1/9792 10007/1/10007 9793/1/9793 +f 9999/1/9999 10007/1/10007 10004/1/10004 +f 10004/1/10004 10005/1/10005 9999/1/9999 +f 9999/1/9999 10005/1/10005 10006/1/10006 +f 9999/1/9999 10006/1/10006 9990/1/9990 +f 9990/1/9990 10006/1/10006 10008/1/10008 +f 9990/1/9990 10008/1/10008 9832/1/9832 +f 9832/1/9832 9833/1/9833 9990/1/9990 +f 9833/1/9833 9989/1/9989 9990/1/9990 +f 9990/1/9990 9989/1/9989 9991/1/9991 +f 9991/1/9991 9992/1/9992 9990/1/9990 +f 9990/1/9990 9992/1/9992 9993/1/9993 +f 9990/1/9990 9993/1/9993 9994/1/9994 +f 9548/1/9548 9990/1/9990 9994/1/9994 +f 9548/1/9548 9994/1/9994 9550/1/9550 +f 9550/1/9550 9547/1/9547 9548/1/9548 +f 9547/1/9547 9546/1/9546 9548/1/9548 +f 9545/1/9545 9546/1/9546 9547/1/9547 +f 9545/1/9545 9547/1/9547 9758/1/9758 +f 9547/1/9547 9549/1/9549 9758/1/9758 +f 9758/1/9758 9549/1/9549 9551/1/9551 +f 9758/1/9758 9551/1/9551 9553/1/9553 +f 9553/1/9553 9555/1/9555 9758/1/9758 +f 9557/1/9557 9758/1/9758 9555/1/9555 +f 9557/1/9557 9555/1/9555 9558/1/9558 +f 9558/1/9558 9559/1/9559 9557/1/9557 +f 9560/1/9560 9559/1/9559 9558/1/9558 +f 9994/1/9994 9560/1/9560 9558/1/9558 +f 9994/1/9994 9558/1/9558 9556/1/9556 +f 9556/1/9556 9554/1/9554 9994/1/9994 +f 9994/1/9994 9554/1/9554 9552/1/9552 +f 9553/1/9553 9552/1/9552 9554/1/9554 +f 9556/1/9556 9553/1/9553 9554/1/9554 +f 9562/1/9562 9560/1/9560 9994/1/9994 +f 9998/1/9998 9562/1/9562 9994/1/9994 +f 9998/1/9998 9994/1/9994 9997/1/9997 +f 9759/1/9759 9998/1/9998 9997/1/9997 +f 9759/1/9759 9997/1/9997 9797/1/9797 +f 9758/1/9758 9759/1/9759 9797/1/9797 +f 9758/1/9758 9797/1/9797 9798/1/9798 +f 9794/1/9794 9758/1/9758 9798/1/9798 +f 9798/1/9798 9995/1/9995 9794/1/9794 +f 9794/1/9794 9995/1/9995 9993/1/9993 +f 9794/1/9794 9993/1/9993 9796/1/9796 +f 9796/1/9796 9761/1/9761 9794/1/9794 +f 9795/1/9795 9761/1/9761 9796/1/9796 +f 9796/1/9796 9992/1/9992 9795/1/9795 +f 9798/1/9798 9996/1/9996 9995/1/9995 +f 9994/1/9994 9995/1/9995 9996/1/9996 +f 9761/1/9761 9758/1/9758 9794/1/9794 +f 9797/1/9797 9996/1/9996 9798/1/9798 +f 9757/1/9757 9759/1/9759 9758/1/9758 +f 9559/1/9559 9757/1/9757 9758/1/9758 +f 9561/1/9561 9757/1/9757 9559/1/9559 +f 9561/1/9561 9563/1/9563 9757/1/9757 +f 9757/1/9757 9563/1/9563 9565/1/9565 +f 9757/1/9757 9565/1/9565 9756/1/9756 +f 9756/1/9756 9984/1/9984 9757/1/9757 +f 9757/1/9757 9984/1/9984 9998/1/9998 +f 9566/1/9566 9998/1/9998 9984/1/9984 +f 9566/1/9566 9984/1/9984 9568/1/9568 +f 9568/1/9568 9565/1/9565 9566/1/9566 +f 9567/1/9567 9565/1/9565 9568/1/9568 +f 9568/1/9568 9569/1/9569 9567/1/9567 +f 9755/1/9755 9567/1/9567 9569/1/9569 +f 9755/1/9755 9569/1/9569 9739/1/9739 +f 9739/1/9739 9754/1/9754 9755/1/9755 +f 9754/1/9754 9985/1/9985 9755/1/9755 +f 9755/1/9755 9985/1/9985 9983/1/9983 +f 9755/1/9755 9983/1/9983 9756/1/9756 +f 9985/1/9985 9982/1/9982 9983/1/9983 +f 9570/1/9570 9983/1/9983 9982/1/9982 +f 9570/1/9570 9982/1/9982 9572/1/9572 +f 9572/1/9572 9571/1/9571 9570/1/9570 +f 9570/1/9570 9571/1/9571 9569/1/9569 +f 9572/1/9572 9982/1/9982 9981/1/9981 +f 9572/1/9572 9981/1/9981 9574/1/9574 +f 9574/1/9574 9573/1/9573 9572/1/9572 +f 9980/1/9980 9574/1/9574 9981/1/9981 +f 9982/1/9982 10044/1/10044 9981/1/9981 +f 9981/1/9981 10044/1/10044 10031/1/10031 +f 9981/1/9981 10031/1/10031 10030/1/10030 +f 10029/1/10029 9981/1/9981 10030/1/10030 +f 10030/1/10030 9812/1/9812 10029/1/10029 +f 10029/1/10029 10028/1/10028 9981/1/9981 +f 10028/1/10028 10027/1/10027 9981/1/9981 +f 9981/1/9981 10027/1/10027 10026/1/10026 +f 9981/1/9981 10026/1/10026 10025/1/10025 +f 10025/1/10025 10024/1/10024 9981/1/9981 +f 10024/1/10024 10023/1/10023 9981/1/9981 +f 9981/1/9981 10023/1/10023 10022/1/10022 +f 9981/1/9981 10022/1/10022 10021/1/10021 +f 9981/1/9981 10021/1/10021 10020/1/10020 +f 9834/1/9834 9981/1/9981 10020/1/10020 +f 9834/1/9834 10020/1/10020 10010/1/10010 +f 10010/1/10010 9833/1/9833 9834/1/9834 +f 10010/1/10010 10011/1/10011 9833/1/9833 +f 10011/1/10011 10015/1/10015 9833/1/9833 +f 9833/1/9833 10015/1/10015 10016/1/10016 +f 9833/1/9833 10016/1/10016 10017/1/10017 +f 10017/1/10017 10018/1/10018 9833/1/9833 +f 9833/1/9833 10018/1/10018 10019/1/10019 +f 9833/1/9833 10019/1/10019 10012/1/10012 +f 10012/1/10012 10013/1/10013 9833/1/9833 +f 9833/1/9833 10013/1/10013 10014/1/10014 +f 9833/1/9833 10014/1/10014 10009/1/10009 +f 9833/1/9833 10009/1/10009 9982/1/9982 +f 9982/1/9982 9988/1/9988 9833/1/9833 +f 9982/1/9982 9987/1/9987 9988/1/9988 +f 9752/1/9752 9988/1/9988 9987/1/9987 +f 9752/1/9752 9987/1/9987 9753/1/9753 +f 9752/1/9752 9753/1/9753 9739/1/9739 +f 9739/1/9739 9751/1/9751 9752/1/9752 +f 9750/1/9750 9751/1/9751 9739/1/9739 +f 9750/1/9750 9739/1/9739 9723/1/9723 +f 9750/1/9750 9723/1/9723 9795/1/9795 +f 9795/1/9795 9991/1/9991 9750/1/9750 +f 9723/1/9723 9739/1/9739 9737/1/9737 +f 9723/1/9723 9737/1/9737 9736/1/9736 +f 9736/1/9736 9735/1/9735 9723/1/9723 +f 9735/1/9735 9736/1/9736 10009/1/10009 +f 10009/1/10009 9736/1/9736 10032/1/10032 +f 9736/1/9736 9737/1/9737 10032/1/10032 +f 10032/1/10032 9737/1/9737 10033/1/10033 +f 9982/1/9982 10032/1/10032 10033/1/10033 +f 10033/1/10033 10034/1/10034 9982/1/9982 +f 9982/1/9982 10034/1/10034 10035/1/10035 +f 9982/1/9982 10035/1/10035 10036/1/10036 +f 10036/1/10036 10037/1/10037 9982/1/9982 +f 9982/1/9982 10037/1/10037 10038/1/10038 +f 9982/1/9982 10038/1/10038 10039/1/10039 +f 10039/1/10039 10040/1/10040 9982/1/9982 +f 9982/1/9982 10040/1/10040 10041/1/10041 +f 9982/1/9982 10041/1/10041 10042/1/10042 +f 10042/1/10042 10043/1/10043 9982/1/9982 +f 10042/1/10042 9748/1/9748 10043/1/10043 +f 9748/1/9748 9749/1/9749 10043/1/10043 +f 10043/1/10043 9749/1/9749 10044/1/10044 +f 9749/1/9749 9814/1/9814 10044/1/10044 +f 9739/1/9739 9749/1/9749 9748/1/9748 +f 9748/1/9748 9747/1/9747 9739/1/9739 +f 9739/1/9739 9747/1/9747 9746/1/9746 +f 9739/1/9739 9746/1/9746 9745/1/9745 +f 9745/1/9745 9744/1/9744 9739/1/9739 +f 9739/1/9739 9744/1/9744 9743/1/9743 +f 9739/1/9739 9743/1/9743 9742/1/9742 +f 9742/1/9742 9741/1/9741 9739/1/9739 +f 9739/1/9739 9741/1/9741 9740/1/9740 +f 9739/1/9739 9740/1/9740 9738/1/9738 +f 9738/1/9738 9740/1/9740 10034/1/10034 +f 9740/1/9740 9741/1/9741 10035/1/10035 +f 9741/1/9741 9742/1/9742 10036/1/10036 +f 9742/1/9742 9743/1/9743 10037/1/10037 +f 9743/1/9743 9744/1/9744 10038/1/10038 +f 9744/1/9744 9745/1/9745 10039/1/10039 +f 9745/1/9745 9746/1/9746 10040/1/10040 +f 9746/1/9746 9747/1/9747 10041/1/10041 +f 9747/1/9747 9748/1/9748 10042/1/10042 +f 10041/1/10041 9747/1/9747 10042/1/10042 +f 10040/1/10040 9746/1/9746 10041/1/10041 +f 10039/1/10039 9745/1/9745 10040/1/10040 +f 10038/1/10038 9744/1/9744 10039/1/10039 +f 10037/1/10037 9743/1/9743 10038/1/10038 +f 10036/1/10036 9742/1/9742 10037/1/10037 +f 10035/1/10035 9741/1/9741 10036/1/10036 +f 10034/1/10034 9740/1/9740 10035/1/10035 +f 10033/1/10033 9738/1/9738 10034/1/10034 +f 9737/1/9737 9738/1/9738 10033/1/10033 +f 9738/1/9738 9737/1/9737 9739/1/9739 +f 9750/1/9750 9989/1/9989 9751/1/9751 +f 9751/1/9751 9989/1/9989 9988/1/9988 +f 9753/1/9753 9987/1/9987 9986/1/9986 +f 9753/1/9753 9986/1/9986 9754/1/9754 +f 9751/1/9751 9988/1/9988 9752/1/9752 +f 9986/1/9986 9987/1/9987 9982/1/9982 +f 9982/1/9982 10009/1/10009 10032/1/10032 +f 10014/1/10014 9735/1/9735 10009/1/10009 +f 9730/1/9730 9735/1/9735 10014/1/10014 +f 10013/1/10013 9730/1/9730 10014/1/10014 +f 10012/1/10012 9731/1/9731 10013/1/10013 +f 10019/1/10019 9732/1/9732 10012/1/10012 +f 10018/1/10018 9733/1/9733 10019/1/10019 +f 10017/1/10017 9734/1/9734 10018/1/10018 +f 10016/1/10016 9726/1/9726 10017/1/10017 +f 10015/1/10015 9727/1/9727 10016/1/10016 +f 10011/1/10011 9728/1/9728 10015/1/10015 +f 10010/1/10010 9729/1/9729 10011/1/10011 +f 10020/1/10020 9725/1/9725 10010/1/10010 +f 10021/1/10021 9803/1/9803 10020/1/10020 +f 10022/1/10022 9804/1/9804 10021/1/10021 +f 10023/1/10023 9805/1/9805 10022/1/10022 +f 10024/1/10024 9806/1/9806 10023/1/10023 +f 10025/1/10025 9807/1/9807 10024/1/10024 +f 10026/1/10026 9808/1/9808 10025/1/10025 +f 10027/1/10027 9809/1/9809 10026/1/10026 +f 10028/1/10028 9810/1/9810 10027/1/10027 +f 10029/1/10029 9811/1/9811 10028/1/10028 +f 10031/1/10031 9813/1/9813 10030/1/10030 +f 10044/1/10044 9814/1/9814 10031/1/10031 +f 9982/1/9982 10043/1/10043 10044/1/10044 +f 9568/1/9568 9983/1/9983 9570/1/9570 +f 9986/1/9986 9982/1/9982 9985/1/9985 +f 9754/1/9754 9986/1/9986 9985/1/9985 +f 9739/1/9739 9753/1/9753 9754/1/9754 +f 9756/1/9756 9567/1/9567 9755/1/9755 +f 9570/1/9570 9569/1/9569 9568/1/9568 +f 9568/1/9568 9984/1/9984 9983/1/9983 +f 9564/1/9564 9998/1/9998 9566/1/9566 +f 9566/1/9566 9563/1/9563 9564/1/9564 +f 9756/1/9756 9983/1/9983 9984/1/9984 +f 9756/1/9756 9565/1/9565 9567/1/9567 +f 9565/1/9565 9563/1/9563 9566/1/9566 +f 9563/1/9563 9561/1/9561 9564/1/9564 +f 9564/1/9564 9561/1/9561 9562/1/9562 +f 9797/1/9797 9997/1/9997 9996/1/9996 +f 9757/1/9757 9998/1/9998 9759/1/9759 +f 9997/1/9997 9994/1/9994 9996/1/9996 +f 9564/1/9564 9562/1/9562 9998/1/9998 +f 9562/1/9562 9561/1/9561 9560/1/9560 +f 9560/1/9560 9561/1/9561 9559/1/9559 +f 9558/1/9558 9555/1/9555 9556/1/9556 +f 9559/1/9559 9758/1/9758 9557/1/9557 +f 9555/1/9555 9553/1/9553 9556/1/9556 +f 9551/1/9551 9552/1/9552 9553/1/9553 +f 9551/1/9551 9550/1/9550 9552/1/9552 +f 9549/1/9549 9550/1/9550 9551/1/9551 +f 9549/1/9549 9547/1/9547 9550/1/9550 +f 9994/1/9994 9552/1/9552 9550/1/9550 +f 9546/1/9546 9990/1/9990 9548/1/9548 +f 9544/1/9544 9990/1/9990 9546/1/9546 +f 9994/1/9994 9993/1/9993 9995/1/9995 +f 9796/1/9796 9993/1/9993 9992/1/9992 +f 9795/1/9795 9992/1/9992 9991/1/9991 +f 9750/1/9750 9991/1/9991 9989/1/9989 +f 9833/1/9833 9988/1/9988 9989/1/9989 +f 9832/1/9832 9823/1/9823 9833/1/9833 +f 9789/1/9789 10008/1/10008 10006/1/10006 +f 9788/1/9788 10008/1/10008 9789/1/9789 +f 9790/1/9790 9791/1/9791 9760/1/9760 +f 9761/1/9761 9545/1/9545 9758/1/9758 +f 9542/1/9542 9543/1/9543 9760/1/9760 +f 9545/1/9545 9544/1/9544 9546/1/9546 +f 9542/1/9542 9541/1/9541 9543/1/9543 +f 9544/1/9544 9999/1/9999 9990/1/9990 +f 9539/1/9539 10000/1/10000 9541/1/9541 +f 9999/1/9999 10003/1/10003 10007/1/10007 +f 10001/1/10001 10002/1/10002 10000/1/10000 +f 9763/1/9763 10002/1/10002 10001/1/10001 +f 9763/1/9763 10001/1/10001 9765/1/9765 +f 9793/1/9793 10007/1/10007 10003/1/10003 +f 9762/1/9762 9792/1/9792 9793/1/9793 +f 9764/1/9764 10002/1/10002 9763/1/9763 +f 9533/1/9533 9762/1/9762 9528/1/9528 +f 9528/1/9528 9526/1/9526 9533/1/9533 +f 10001/1/10001 9534/1/9534 9526/1/9526 +f 9525/1/9525 9839/1/9839 9523/1/9523 +f 9765/1/9765 10001/1/10001 9841/1/9841 +f 9763/1/9763 9765/1/9765 9524/1/9524 +f 9523/1/9523 9524/1/9524 9525/1/9525 +f 9821/1/9821 9839/1/9839 9525/1/9525 +f 10057/1/10057 10058/1/10058 9840/1/9840 +f 9821/1/9821 9838/1/9838 9822/1/9822 +f 9821/1/9821 9822/1/9822 9819/1/9819 +f 9779/1/9779 9820/1/9820 9819/1/9819 +f 9823/1/9823 9820/1/9820 9824/1/9824 +f 9800/1/9800 9826/1/9826 9825/1/9825 +f 9834/1/9834 9833/1/9833 9823/1/9823 +f 9711/1/9711 9970/1/9970 9969/1/9969 +f 9710/1/9710 9969/1/9969 9968/1/9968 +f 9708/1/9708 9968/1/9968 9967/1/9967 +f 9708/1/9708 9967/1/9967 9707/1/9707 +f 9707/1/9707 9967/1/9967 9966/1/9966 +f 9707/1/9707 9966/1/9966 9706/1/9706 +f 9703/1/9703 9707/1/9707 9706/1/9706 +f 9706/1/9706 9966/1/9966 9965/1/9965 +f 9706/1/9706 9965/1/9965 9704/1/9704 +f 9704/1/9704 9965/1/9965 9845/1/9845 +f 9845/1/9845 9965/1/9965 9840/1/9840 +f 9840/1/9840 9965/1/9965 9966/1/9966 +f 9835/1/9835 10053/1/10053 10054/1/10054 +f 9774/1/9774 10054/1/10054 10053/1/10053 +f 9840/1/9840 10055/1/10055 10056/1/10056 +f 9840/1/9840 10056/1/10056 10057/1/10057 +f 9770/1/9770 10058/1/10058 10057/1/10057 +f 9769/1/9769 10058/1/10058 9770/1/9770 +f 9769/1/9769 9781/1/9781 10058/1/10058 +f 9768/1/9768 9780/1/9780 9781/1/9781 +f 9527/1/9527 9766/1/9766 9768/1/9768 +f 9529/1/9529 9527/1/9527 9530/1/9530 +f 9529/1/9529 9530/1/9530 9531/1/9531 +f 9531/1/9531 9530/1/9530 9532/1/9532 +f 9531/1/9531 9532/1/9532 9521/1/9521 +f 9521/1/9521 9846/1/9846 9531/1/9531 +f 9846/1/9846 10049/1/10049 9531/1/9531 +f 9531/1/9531 10049/1/10049 9842/1/9842 +f 9693/1/9693 10049/1/10049 9846/1/9846 +f 9693/1/9693 9846/1/9846 9691/1/9691 +f 9693/1/9693 9691/1/9691 9522/1/9522 +f 9693/1/9693 9522/1/9522 9532/1/9532 +f 9693/1/9693 9532/1/9532 9701/1/9701 +f 9694/1/9694 9701/1/9701 9532/1/9532 +f 9694/1/9694 9532/1/9532 9695/1/9695 +f 9695/1/9695 9699/1/9699 9694/1/9694 +f 9695/1/9695 9843/1/9843 9699/1/9699 +f 9702/1/9702 9701/1/9701 9694/1/9694 +f 9694/1/9694 9698/1/9698 9702/1/9702 +f 9698/1/9698 9977/1/9977 9702/1/9702 +f 9702/1/9702 9976/1/9976 9701/1/9701 +f 9701/1/9701 9976/1/9976 10049/1/10049 +f 9522/1/9522 9691/1/9691 9577/1/9577 +f 9522/1/9522 9577/1/9577 9520/1/9520 +f 9519/1/9519 9522/1/9522 9520/1/9520 +f 9519/1/9519 9520/1/9520 9517/1/9517 +f 9852/1/9852 9519/1/9519 9517/1/9517 +f 9852/1/9852 9517/1/9517 9949/1/9949 +f 9949/1/9949 9950/1/9950 9852/1/9852 +f 9852/1/9852 9950/1/9950 9951/1/9951 +f 9852/1/9852 9951/1/9951 9901/1/9901 +f 9901/1/9901 9959/1/9959 9852/1/9852 +f 9852/1/9852 9959/1/9959 9960/1/9960 +f 9852/1/9852 9960/1/9960 9961/1/9961 +f 9963/1/9963 9852/1/9852 9961/1/9961 +f 9638/1/9638 9963/1/9963 9961/1/9961 +f 9638/1/9638 9961/1/9961 9632/1/9632 +f 9582/1/9582 9638/1/9638 9632/1/9632 +f 9629/1/9629 9582/1/9582 9632/1/9632 +f 9629/1/9629 9632/1/9632 9633/1/9633 +f 9633/1/9633 9634/1/9634 9629/1/9629 +f 9629/1/9629 9634/1/9634 9635/1/9635 +f 9629/1/9629 9635/1/9635 9636/1/9636 +f 9636/1/9636 9637/1/9637 9629/1/9629 +f 9629/1/9629 9637/1/9637 9680/1/9680 +f 9629/1/9629 9680/1/9680 9585/1/9585 +f 9585/1/9585 9607/1/9607 9629/1/9629 +f 9629/1/9629 9607/1/9607 9617/1/9617 +f 9629/1/9629 9617/1/9617 9631/1/9631 +f 9630/1/9630 9629/1/9629 9631/1/9631 +f 9631/1/9631 9954/1/9954 9630/1/9630 +f 9630/1/9630 9954/1/9954 9953/1/9953 +f 9630/1/9630 9953/1/9953 9628/1/9628 +f 9628/1/9628 9953/1/9953 9952/1/9952 +f 9628/1/9628 9952/1/9952 9627/1/9627 +f 9628/1/9628 9627/1/9627 9582/1/9582 +f 9582/1/9582 9627/1/9627 9626/1/9626 +f 9582/1/9582 9626/1/9626 9625/1/9625 +f 9518/1/9518 9582/1/9582 9625/1/9625 +f 9518/1/9518 9625/1/9625 9516/1/9516 +f 9515/1/9515 9518/1/9518 9516/1/9516 +f 9514/1/9514 9515/1/9515 9516/1/9516 +f 9514/1/9514 9516/1/9516 9512/1/9512 +f 9512/1/9512 9513/1/9513 9514/1/9514 +f 9512/1/9512 9511/1/9511 9513/1/9513 +f 9511/1/9511 9947/1/9947 9513/1/9513 +f 9513/1/9513 9947/1/9947 9515/1/9515 +f 9948/1/9948 9515/1/9515 9947/1/9947 +f 9623/1/9623 9948/1/9948 9947/1/9947 +f 9623/1/9623 9947/1/9947 9622/1/9622 +f 9622/1/9622 9507/1/9507 9623/1/9623 +f 9509/1/9509 9623/1/9623 9507/1/9507 +f 9507/1/9507 9508/1/9508 9509/1/9509 +f 9508/1/9508 9510/1/9510 9509/1/9509 +f 9509/1/9509 9510/1/9510 9511/1/9511 +f 9510/1/9510 9508/1/9508 9511/1/9511 +f 9507/1/9507 9506/1/9506 9508/1/9508 +f 9506/1/9506 9944/1/9944 9508/1/9508 +f 9508/1/9508 9944/1/9944 9945/1/9945 +f 9508/1/9508 9945/1/9945 9946/1/9946 +f 9946/1/9946 9947/1/9947 9508/1/9508 +f 9621/1/9621 9946/1/9946 9945/1/9945 +f 9621/1/9621 9945/1/9945 9620/1/9620 +f 9620/1/9620 9505/1/9505 9621/1/9621 +f 9621/1/9621 9505/1/9505 9507/1/9507 +f 9620/1/9620 9503/1/9503 9505/1/9505 +f 9503/1/9503 9504/1/9504 9505/1/9505 +f 9505/1/9505 9504/1/9504 9506/1/9506 +f 9504/1/9504 9943/1/9943 9506/1/9506 +f 9504/1/9504 9942/1/9942 9943/1/9943 +f 9618/1/9618 9943/1/9943 9942/1/9942 +f 9618/1/9618 9942/1/9942 9615/1/9615 +f 9503/1/9503 9618/1/9618 9615/1/9615 +f 9503/1/9503 9615/1/9615 9501/1/9501 +f 9501/1/9501 9502/1/9502 9503/1/9503 +f 9501/1/9501 9500/1/9500 9502/1/9502 +f 9500/1/9500 9879/1/9879 9502/1/9502 +f 9502/1/9502 9879/1/9879 9880/1/9880 +f 9502/1/9502 9880/1/9880 9881/1/9881 +f 9502/1/9502 9881/1/9881 9882/1/9882 +f 9882/1/9882 9902/1/9902 9502/1/9502 +f 9502/1/9502 9902/1/9902 9941/1/9941 +f 9502/1/9502 9941/1/9941 9940/1/9940 +f 9940/1/9940 9504/1/9504 9502/1/9502 +f 9616/1/9616 9940/1/9940 9941/1/9941 +f 9616/1/9616 9941/1/9941 9617/1/9617 +f 9501/1/9501 9616/1/9616 9617/1/9617 +f 9615/1/9615 9940/1/9940 9616/1/9616 +f 9617/1/9617 9941/1/9941 9902/1/9902 +f 9882/1/9882 9901/1/9901 9902/1/9902 +f 9954/1/9954 9902/1/9902 9901/1/9901 +f 9900/1/9900 9901/1/9901 9882/1/9882 +f 9882/1/9882 9867/1/9867 9900/1/9900 +f 9867/1/9867 9912/1/9912 9900/1/9900 +f 9900/1/9900 9912/1/9912 9914/1/9914 +f 9900/1/9900 9914/1/9914 9915/1/9915 +f 9916/1/9916 9900/1/9900 9915/1/9915 +f 9587/1/9587 9916/1/9916 9915/1/9915 +f 9587/1/9587 9915/1/9915 9588/1/9588 +f 9588/1/9588 9585/1/9585 9587/1/9587 +f 9585/1/9585 9586/1/9586 9587/1/9587 +f 9585/1/9585 9584/1/9584 9586/1/9586 +f 9584/1/9584 9917/1/9917 9586/1/9586 +f 9586/1/9586 9917/1/9917 9916/1/9916 +f 9917/1/9917 9851/1/9851 9916/1/9916 +f 9917/1/9917 9918/1/9918 9851/1/9851 +f 9918/1/9918 9850/1/9850 9851/1/9851 +f 9851/1/9851 9850/1/9850 9519/1/9519 +f 9849/1/9849 9519/1/9519 9850/1/9850 +f 9580/1/9580 9849/1/9849 9850/1/9850 +f 9580/1/9580 9850/1/9850 9583/1/9583 +f 9580/1/9580 9583/1/9583 9581/1/9581 +f 9580/1/9580 9581/1/9581 9520/1/9520 +f 9520/1/9520 9579/1/9579 9580/1/9580 +f 9520/1/9520 9576/1/9576 9579/1/9579 +f 9576/1/9576 9848/1/9848 9579/1/9579 +f 9579/1/9579 9848/1/9848 9849/1/9849 +f 9576/1/9576 9853/1/9853 9848/1/9848 +f 9847/1/9847 9848/1/9848 9853/1/9853 +f 9847/1/9847 9853/1/9853 9854/1/9854 +f 9854/1/9854 9860/1/9860 9847/1/9847 +f 9847/1/9847 9860/1/9860 10059/1/10059 +f 9847/1/9847 10059/1/10059 9863/1/9863 +f 9863/1/9863 9864/1/9864 9847/1/9847 +f 9847/1/9847 9864/1/9864 9865/1/9865 +f 9865/1/9865 9866/1/9866 9847/1/9847 +f 9847/1/9847 9866/1/9866 9521/1/9521 +f 9692/1/9692 9866/1/9866 9865/1/9865 +f 9692/1/9692 9865/1/9865 9686/1/9686 +f 9577/1/9577 9692/1/9692 9686/1/9686 +f 9577/1/9577 9686/1/9686 9593/1/9593 +f 9593/1/9593 9690/1/9690 9577/1/9577 +f 9577/1/9577 9690/1/9690 9578/1/9578 +f 9577/1/9577 9578/1/9578 9575/1/9575 +f 9575/1/9575 9576/1/9576 9577/1/9577 +f 9578/1/9578 9855/1/9855 9575/1/9575 +f 9575/1/9575 9855/1/9855 9853/1/9853 +f 9578/1/9578 9856/1/9856 9855/1/9855 +f 9854/1/9854 9855/1/9855 9856/1/9856 +f 9856/1/9856 9857/1/9857 9854/1/9854 +f 9854/1/9854 9857/1/9857 9858/1/9858 +f 9854/1/9854 9858/1/9858 9859/1/9859 +f 9862/1/9862 9854/1/9854 9859/1/9859 +f 9862/1/9862 9859/1/9859 9867/1/9867 +f 9867/1/9867 9869/1/9869 9862/1/9862 +f 9862/1/9862 9869/1/9869 9870/1/9870 +f 9867/1/9867 9913/1/9913 9869/1/9869 +f 9913/1/9913 9932/1/9932 9869/1/9869 +f 9869/1/9869 9932/1/9932 9933/1/9933 +f 9933/1/9933 9934/1/9934 9869/1/9869 +f 9869/1/9869 9934/1/9934 9935/1/9935 +f 9869/1/9869 9935/1/9935 9927/1/9927 +f 9927/1/9927 9928/1/9928 9869/1/9869 +f 9928/1/9928 9929/1/9929 9869/1/9869 +f 9869/1/9869 9929/1/9929 9930/1/9930 +f 9869/1/9869 9930/1/9930 9931/1/9931 +f 9931/1/9931 9936/1/9936 9869/1/9869 +f 9869/1/9869 9936/1/9936 9937/1/9937 +f 9869/1/9869 9937/1/9937 9938/1/9938 +f 9939/1/9939 9869/1/9869 9938/1/9938 +f 9938/1/9938 9677/1/9677 9939/1/9939 +f 9677/1/9677 9663/1/9663 9939/1/9939 +f 9939/1/9939 9663/1/9663 9895/1/9895 +f 9939/1/9939 9895/1/9895 9872/1/9872 +f 9872/1/9872 9895/1/9895 9896/1/9896 +f 9872/1/9872 9896/1/9896 9887/1/9887 +f 9887/1/9887 9888/1/9888 9872/1/9872 +f 9888/1/9888 9889/1/9889 9872/1/9872 +f 9872/1/9872 9889/1/9889 9890/1/9890 +f 9872/1/9872 9890/1/9890 9891/1/9891 +f 9891/1/9891 9892/1/9892 9872/1/9872 +f 9872/1/9872 9892/1/9892 9893/1/9893 +f 9872/1/9872 9893/1/9893 9894/1/9894 +f 9894/1/9894 9897/1/9897 9872/1/9872 +f 9872/1/9872 9897/1/9897 9898/1/9898 +f 9872/1/9872 9898/1/9898 9882/1/9882 +f 9882/1/9882 9883/1/9883 9872/1/9872 +f 9872/1/9872 9883/1/9883 9884/1/9884 +f 9872/1/9872 9884/1/9884 9885/1/9885 +f 9885/1/9885 9886/1/9886 9872/1/9872 +f 9872/1/9872 9886/1/9886 9873/1/9873 +f 9872/1/9872 9873/1/9873 9871/1/9871 +f 9871/1/9871 9489/1/9489 9872/1/9872 +f 9872/1/9872 9489/1/9489 9869/1/9869 +f 9489/1/9489 9491/1/9491 9869/1/9869 +f 9603/1/9603 9873/1/9873 9886/1/9886 +f 9604/1/9604 9886/1/9886 9885/1/9885 +f 9605/1/9605 9885/1/9885 9884/1/9884 +f 9605/1/9605 9884/1/9884 9606/1/9606 +f 9606/1/9606 9884/1/9884 9883/1/9883 +f 9606/1/9606 9883/1/9883 9608/1/9608 +f 9501/1/9501 9606/1/9606 9608/1/9608 +f 9501/1/9501 9608/1/9608 9609/1/9609 +f 9499/1/9499 9501/1/9501 9609/1/9609 +f 9609/1/9609 9610/1/9610 9499/1/9499 +f 9499/1/9499 9610/1/9610 9611/1/9611 +f 9499/1/9499 9611/1/9611 9497/1/9497 +f 9499/1/9499 9497/1/9497 9500/1/9500 +f 9500/1/9500 9497/1/9497 9498/1/9498 +f 9498/1/9498 9878/1/9878 9500/1/9500 +f 9498/1/9498 9877/1/9877 9878/1/9878 +f 9612/1/9612 9878/1/9878 9877/1/9877 +f 9611/1/9611 9878/1/9878 9612/1/9612 +f 9611/1/9611 9879/1/9879 9878/1/9878 +f 9496/1/9496 9877/1/9877 9498/1/9498 +f 9496/1/9496 9876/1/9876 9877/1/9877 +f 9610/1/9610 9879/1/9879 9611/1/9611 +f 9609/1/9609 9880/1/9880 9610/1/9610 +f 9608/1/9608 9881/1/9881 9609/1/9609 +f 9607/1/9607 9606/1/9606 9501/1/9501 +f 9608/1/9608 9883/1/9883 9881/1/9881 +f 9882/1/9882 9898/1/9898 9899/1/9899 +f 9898/1/9898 9642/1/9642 9899/1/9899 +f 9642/1/9642 9646/1/9646 9899/1/9899 +f 9899/1/9899 9646/1/9646 9903/1/9903 +f 9867/1/9867 9899/1/9899 9903/1/9903 +f 9903/1/9903 9904/1/9904 9867/1/9867 +f 9867/1/9867 9904/1/9904 9905/1/9905 +f 9867/1/9867 9905/1/9905 9906/1/9906 +f 9906/1/9906 9907/1/9907 9867/1/9867 +f 9867/1/9867 9907/1/9907 9908/1/9908 +f 9867/1/9867 9908/1/9908 9909/1/9909 +f 9910/1/9910 9867/1/9867 9909/1/9909 +f 9909/1/9909 9648/1/9648 9910/1/9910 +f 9648/1/9648 9647/1/9647 9910/1/9910 +f 9910/1/9910 9647/1/9647 9911/1/9911 +f 9647/1/9647 9664/1/9664 9911/1/9911 +f 9911/1/9911 9664/1/9664 9913/1/9913 +f 9664/1/9664 9666/1/9666 9913/1/9913 +f 9666/1/9666 9664/1/9664 9591/1/9591 +f 9665/1/9665 9666/1/9666 9591/1/9591 +f 9665/1/9665 9591/1/9591 9597/1/9597 +f 9667/1/9667 9665/1/9665 9597/1/9597 +f 9597/1/9597 9668/1/9668 9667/1/9667 +f 9667/1/9667 9668/1/9668 9934/1/9934 +f 9597/1/9597 9669/1/9669 9668/1/9668 +f 9668/1/9668 9669/1/9669 9935/1/9935 +f 9670/1/9670 9669/1/9669 9597/1/9597 +f 9597/1/9597 9671/1/9671 9670/1/9670 +f 9670/1/9670 9671/1/9671 9928/1/9928 +f 9597/1/9597 9672/1/9672 9671/1/9671 +f 9671/1/9671 9672/1/9672 9929/1/9929 +f 9673/1/9673 9672/1/9672 9597/1/9597 +f 9597/1/9597 9674/1/9674 9673/1/9673 +f 9673/1/9673 9674/1/9674 9931/1/9931 +f 9597/1/9597 9675/1/9675 9674/1/9674 +f 9674/1/9674 9675/1/9675 9936/1/9936 +f 9676/1/9676 9675/1/9675 9597/1/9597 +f 9597/1/9597 9677/1/9677 9676/1/9676 +f 9675/1/9675 9676/1/9676 9937/1/9937 +f 9672/1/9672 9673/1/9673 9930/1/9930 +f 9669/1/9669 9670/1/9670 9927/1/9927 +f 9665/1/9665 9667/1/9667 9933/1/9933 +f 9597/1/9597 9591/1/9591 9594/1/9594 +f 9597/1/9597 9594/1/9594 9598/1/9598 +f 9592/1/9592 9594/1/9594 9591/1/9591 +f 9592/1/9592 9591/1/9591 9590/1/9590 +f 9590/1/9590 9868/1/9868 9592/1/9592 +f 9592/1/9592 9868/1/9868 9859/1/9859 +f 9592/1/9592 9859/1/9859 9688/1/9688 +f 9593/1/9593 9592/1/9592 9688/1/9688 +f 9688/1/9688 9689/1/9689 9593/1/9593 +f 9688/1/9688 9858/1/9858 9689/1/9689 +f 9590/1/9590 9912/1/9912 9868/1/9868 +f 9589/1/9589 9912/1/9912 9590/1/9590 +f 9590/1/9590 9591/1/9591 9589/1/9589 +f 9589/1/9589 9591/1/9591 9585/1/9585 +f 9593/1/9593 9594/1/9594 9592/1/9592 +f 9593/1/9593 9596/1/9596 9594/1/9594 +f 9595/1/9595 9594/1/9594 9596/1/9596 +f 9596/1/9596 9861/1/9861 9595/1/9595 +f 9595/1/9595 9861/1/9861 10060/1/10060 +f 9595/1/9595 10060/1/10060 9717/1/9717 +f 9717/1/9717 9716/1/9716 9595/1/9595 +f 9717/1/9717 10060/1/10060 9975/1/9975 +f 9717/1/9717 9975/1/9975 9817/1/9817 +f 9696/1/9696 9717/1/9717 9817/1/9817 +f 9817/1/9817 9975/1/9975 10062/1/10062 +f 9975/1/9975 10060/1/10060 9862/1/9862 +f 9862/1/9862 9974/1/9974 9975/1/9975 +f 9975/1/9975 9974/1/9974 9973/1/9973 +f 9862/1/9862 10060/1/10060 9861/1/9861 +f 9596/1/9596 9860/1/9860 9861/1/9861 +f 9816/1/9816 9860/1/9860 9596/1/9596 +f 9595/1/9595 9716/1/9716 9594/1/9594 +f 9816/1/9816 9596/1/9596 9593/1/9593 +f 9815/1/9815 9816/1/9816 9593/1/9593 +f 9593/1/9593 9687/1/9687 9815/1/9815 +f 9687/1/9687 9863/1/9863 9815/1/9815 +f 9815/1/9815 10059/1/10059 9816/1/9816 +f 9666/1/9666 9665/1/9665 9932/1/9932 +f 9591/1/9591 9664/1/9664 9647/1/9647 +f 9591/1/9591 9647/1/9647 9607/1/9607 +f 9607/1/9607 9647/1/9647 9648/1/9648 +f 9607/1/9607 9648/1/9648 9649/1/9649 +f 9649/1/9649 9650/1/9650 9607/1/9607 +f 9607/1/9607 9650/1/9650 9651/1/9651 +f 9607/1/9607 9651/1/9651 9643/1/9643 +f 9643/1/9643 9644/1/9644 9607/1/9607 +f 9644/1/9644 9645/1/9645 9607/1/9607 +f 9607/1/9607 9645/1/9645 9646/1/9646 +f 9645/1/9645 9644/1/9644 9904/1/9904 +f 9644/1/9644 9643/1/9643 9905/1/9905 +f 9643/1/9643 9651/1/9651 9906/1/9906 +f 9651/1/9651 9650/1/9650 9907/1/9907 +f 9650/1/9650 9649/1/9649 9908/1/9908 +f 9649/1/9649 9648/1/9648 9909/1/9909 +f 9910/1/9910 9911/1/9911 9867/1/9867 +f 9908/1/9908 9649/1/9649 9909/1/9909 +f 9907/1/9907 9650/1/9650 9908/1/9908 +f 9906/1/9906 9651/1/9651 9907/1/9907 +f 9905/1/9905 9643/1/9643 9906/1/9906 +f 9904/1/9904 9644/1/9644 9905/1/9905 +f 9903/1/9903 9645/1/9645 9904/1/9904 +f 9646/1/9646 9645/1/9645 9903/1/9903 +f 9897/1/9897 9652/1/9652 9898/1/9898 +f 9894/1/9894 9653/1/9653 9897/1/9897 +f 9893/1/9893 9654/1/9654 9894/1/9894 +f 9892/1/9892 9655/1/9655 9893/1/9893 +f 9891/1/9891 9656/1/9656 9892/1/9892 +f 9890/1/9890 9657/1/9657 9891/1/9891 +f 9889/1/9889 9658/1/9658 9890/1/9890 +f 9888/1/9888 9659/1/9659 9889/1/9889 +f 9887/1/9887 9660/1/9660 9888/1/9888 +f 9896/1/9896 9661/1/9661 9887/1/9887 +f 9895/1/9895 9662/1/9662 9896/1/9896 +f 9676/1/9676 9677/1/9677 9938/1/9938 +f 9872/1/9872 9869/1/9869 9939/1/9939 +f 9937/1/9937 9676/1/9676 9938/1/9938 +f 9936/1/9936 9675/1/9675 9937/1/9937 +f 9931/1/9931 9674/1/9674 9936/1/9936 +f 9930/1/9930 9673/1/9673 9931/1/9931 +f 9929/1/9929 9672/1/9672 9930/1/9930 +f 9928/1/9928 9671/1/9671 9929/1/9929 +f 9927/1/9927 9670/1/9670 9928/1/9928 +f 9935/1/9935 9669/1/9669 9927/1/9927 +f 9934/1/9934 9668/1/9668 9935/1/9935 +f 9933/1/9933 9667/1/9667 9934/1/9934 +f 9932/1/9932 9665/1/9665 9933/1/9933 +f 9913/1/9913 9666/1/9666 9932/1/9932 +f 9911/1/9911 9913/1/9913 9867/1/9867 +f 9867/1/9867 9859/1/9859 9868/1/9868 +f 9861/1/9861 9854/1/9854 9862/1/9862 +f 9688/1/9688 9859/1/9859 9858/1/9858 +f 9689/1/9689 9858/1/9858 9857/1/9857 +f 9689/1/9689 9857/1/9857 9690/1/9690 +f 9690/1/9690 9857/1/9857 9856/1/9856 +f 9690/1/9690 9856/1/9856 9578/1/9578 +f 9593/1/9593 9689/1/9689 9690/1/9690 +f 9593/1/9593 9686/1/9686 9687/1/9687 +f 9686/1/9686 9864/1/9864 9687/1/9687 +f 9691/1/9691 9866/1/9866 9692/1/9692 +f 9686/1/9686 9865/1/9865 9864/1/9864 +f 9687/1/9687 9864/1/9864 9863/1/9863 +f 9815/1/9815 9863/1/9863 10059/1/10059 +f 9816/1/9816 10059/1/10059 9860/1/9860 +f 9854/1/9854 9861/1/9861 9860/1/9860 +f 9854/1/9854 9853/1/9853 9855/1/9855 +f 9847/1/9847 9521/1/9521 9848/1/9848 +f 9848/1/9848 9521/1/9521 9519/1/9519 +f 9575/1/9575 9853/1/9853 9576/1/9576 +f 9520/1/9520 9581/1/9581 9582/1/9582 +f 9581/1/9581 9685/1/9685 9582/1/9582 +f 9582/1/9582 9685/1/9685 9641/1/9641 +f 9582/1/9582 9641/1/9641 9639/1/9639 +f 9639/1/9639 9640/1/9640 9582/1/9582 +f 9639/1/9639 9962/1/9962 9640/1/9640 +f 9640/1/9640 9962/1/9962 9963/1/9963 +f 9639/1/9639 9964/1/9964 9962/1/9962 +f 9962/1/9962 9964/1/9964 9852/1/9852 +f 9852/1/9852 9964/1/9964 9921/1/9921 +f 9852/1/9852 9921/1/9921 9851/1/9851 +f 9851/1/9851 9921/1/9921 9922/1/9922 +f 9851/1/9851 9922/1/9922 9919/1/9919 +f 9919/1/9919 9920/1/9920 9851/1/9851 +f 9851/1/9851 9920/1/9920 9900/1/9900 +f 9920/1/9920 9923/1/9923 9900/1/9900 +f 9900/1/9900 9923/1/9923 9924/1/9924 +f 9900/1/9900 9924/1/9924 9925/1/9925 +f 9925/1/9925 9926/1/9926 9900/1/9900 +f 9681/1/9681 9926/1/9926 9925/1/9925 +f 9681/1/9681 9925/1/9925 9679/1/9679 +f 9585/1/9585 9681/1/9681 9679/1/9679 +f 9678/1/9678 9585/1/9585 9679/1/9679 +f 9679/1/9679 9924/1/9924 9678/1/9678 +f 9678/1/9678 9581/1/9581 9585/1/9585 +f 9682/1/9682 9581/1/9581 9678/1/9678 +f 9682/1/9682 9678/1/9678 9920/1/9920 +f 9682/1/9682 9920/1/9920 9683/1/9683 +f 9682/1/9682 9683/1/9683 9581/1/9581 +f 9683/1/9683 9684/1/9684 9581/1/9581 +f 9683/1/9683 9919/1/9919 9684/1/9684 +f 9680/1/9680 9926/1/9926 9681/1/9681 +f 9679/1/9679 9925/1/9925 9924/1/9924 +f 9678/1/9678 9924/1/9924 9923/1/9923 +f 9920/1/9920 9678/1/9678 9923/1/9923 +f 9683/1/9683 9920/1/9920 9919/1/9919 +f 9684/1/9684 9919/1/9919 9922/1/9922 +f 9684/1/9684 9922/1/9922 9685/1/9685 +f 9685/1/9685 9922/1/9922 9921/1/9921 +f 9964/1/9964 9685/1/9685 9921/1/9921 +f 9641/1/9641 9964/1/9964 9639/1/9639 +f 9641/1/9641 9685/1/9685 9964/1/9964 +f 9581/1/9581 9684/1/9684 9685/1/9685 +f 9581/1/9581 9583/1/9583 9584/1/9584 +f 9583/1/9583 9918/1/9918 9584/1/9584 +f 9579/1/9579 9849/1/9849 9580/1/9580 +f 9848/1/9848 9519/1/9519 9849/1/9849 +f 9583/1/9583 9850/1/9850 9918/1/9918 +f 9584/1/9584 9918/1/9918 9917/1/9917 +f 9581/1/9581 9584/1/9584 9585/1/9585 +f 9588/1/9588 9589/1/9589 9585/1/9585 +f 9588/1/9588 9914/1/9914 9589/1/9589 +f 9586/1/9586 9916/1/9916 9587/1/9587 +f 9851/1/9851 9900/1/9900 9916/1/9916 +f 9588/1/9588 9915/1/9915 9914/1/9914 +f 9589/1/9589 9914/1/9914 9912/1/9912 +f 9867/1/9867 9868/1/9868 9912/1/9912 +f 9882/1/9882 9899/1/9899 9867/1/9867 +f 9900/1/9900 9926/1/9926 9901/1/9901 +f 9926/1/9926 9955/1/9955 9901/1/9901 +f 9901/1/9901 9955/1/9955 9956/1/9956 +f 9901/1/9901 9956/1/9956 9957/1/9957 +f 9957/1/9957 9958/1/9958 9901/1/9901 +f 9635/1/9635 9958/1/9958 9957/1/9957 +f 9636/1/9636 9957/1/9957 9956/1/9956 +f 9637/1/9637 9956/1/9956 9955/1/9955 +f 9926/1/9926 9637/1/9637 9955/1/9955 +f 9882/1/9882 9881/1/9881 9883/1/9883 +f 9609/1/9609 9881/1/9881 9880/1/9880 +f 9610/1/9610 9880/1/9880 9879/1/9879 +f 9500/1/9500 9878/1/9878 9879/1/9879 +f 9499/1/9499 9500/1/9500 9501/1/9501 +f 9615/1/9615 9616/1/9616 9501/1/9501 +f 9619/1/9619 9618/1/9618 9503/1/9503 +f 9615/1/9615 9942/1/9942 9940/1/9940 +f 9619/1/9619 9943/1/9943 9618/1/9618 +f 9619/1/9619 9944/1/9944 9943/1/9943 +f 9620/1/9620 9944/1/9944 9619/1/9619 +f 9940/1/9940 9942/1/9942 9504/1/9504 +f 9503/1/9503 9502/1/9502 9504/1/9504 +f 9619/1/9619 9503/1/9503 9620/1/9620 +f 9622/1/9622 9946/1/9946 9621/1/9621 +f 9620/1/9620 9945/1/9945 9944/1/9944 +f 9506/1/9506 9943/1/9943 9944/1/9944 +f 9505/1/9505 9506/1/9506 9507/1/9507 +f 9512/1/9512 9623/1/9623 9509/1/9509 +f 9621/1/9621 9507/1/9507 9622/1/9622 +f 9622/1/9622 9947/1/9947 9946/1/9946 +f 9624/1/9624 9948/1/9948 9623/1/9623 +f 9516/1/9516 9624/1/9624 9623/1/9623 +f 9624/1/9624 9949/1/9949 9948/1/9948 +f 9625/1/9625 9949/1/9949 9624/1/9624 +f 9949/1/9949 9515/1/9515 9948/1/9948 +f 9511/1/9511 9508/1/9508 9947/1/9947 +f 9509/1/9509 9511/1/9511 9512/1/9512 +f 9512/1/9512 9516/1/9516 9623/1/9623 +f 9514/1/9514 9513/1/9513 9515/1/9515 +f 9517/1/9517 9518/1/9518 9515/1/9515 +f 9516/1/9516 9625/1/9625 9624/1/9624 +f 9520/1/9520 9582/1/9582 9518/1/9518 +f 9626/1/9626 9950/1/9950 9625/1/9625 +f 9627/1/9627 9951/1/9951 9626/1/9626 +f 9627/1/9627 9952/1/9952 9951/1/9951 +f 9901/1/9901 9952/1/9952 9953/1/9953 +f 9954/1/9954 9901/1/9901 9953/1/9953 +f 9631/1/9631 9902/1/9902 9954/1/9954 +f 9628/1/9628 9629/1/9629 9630/1/9630 +f 9617/1/9617 9902/1/9902 9631/1/9631 +f 9501/1/9501 9617/1/9617 9607/1/9607 +f 9585/1/9585 9591/1/9591 9607/1/9607 +f 9585/1/9585 9680/1/9680 9681/1/9681 +f 9680/1/9680 9637/1/9637 9926/1/9926 +f 9636/1/9636 9956/1/9956 9637/1/9637 +f 9635/1/9635 9957/1/9957 9636/1/9636 +f 9634/1/9634 9958/1/9958 9635/1/9635 +f 9634/1/9634 9959/1/9959 9958/1/9958 +f 9633/1/9633 9959/1/9959 9634/1/9634 +f 9633/1/9633 9632/1/9632 9959/1/9959 +f 9628/1/9628 9582/1/9582 9629/1/9629 +f 9582/1/9582 9640/1/9640 9638/1/9638 +f 9640/1/9640 9963/1/9963 9638/1/9638 +f 9962/1/9962 9852/1/9852 9963/1/9963 +f 9632/1/9632 9961/1/9961 9960/1/9960 +f 9959/1/9959 9632/1/9632 9960/1/9960 +f 9901/1/9901 9958/1/9958 9959/1/9959 +f 9901/1/9901 9951/1/9951 9952/1/9952 +f 9626/1/9626 9951/1/9951 9950/1/9950 +f 9625/1/9625 9950/1/9950 9949/1/9949 +f 9949/1/9949 9517/1/9517 9515/1/9515 +f 9851/1/9851 9519/1/9519 9852/1/9852 +f 9517/1/9517 9520/1/9520 9518/1/9518 +f 9521/1/9521 9522/1/9522 9519/1/9519 +f 9520/1/9520 9577/1/9577 9576/1/9576 +f 9691/1/9691 9692/1/9692 9577/1/9577 +f 9691/1/9691 9846/1/9846 9866/1/9866 +f 9701/1/9701 10049/1/10049 9693/1/9693 +f 9866/1/9866 9846/1/9846 9521/1/9521 +f 9521/1/9521 9532/1/9532 9522/1/9522 +f 9706/1/9706 9704/1/9704 9703/1/9703 +f 9695/1/9695 9532/1/9532 9530/1/9530 +f 9704/1/9704 9845/1/9845 9705/1/9705 +f 9840/1/9840 9529/1/9529 9845/1/9845 +f 9695/1/9695 9844/1/9844 9843/1/9843 +f 9531/1/9531 9842/1/9842 9529/1/9529 +f 9699/1/9699 9843/1/9843 10048/1/10048 +f 9699/1/9699 10048/1/10048 9700/1/9700 +f 9700/1/9700 10048/1/10048 10047/1/10047 +f 9694/1/9694 9699/1/9699 9700/1/9700 +f 9694/1/9694 9697/1/9697 9698/1/9698 +f 9697/1/9697 9978/1/9978 9698/1/9698 +f 9817/1/9817 9818/1/9818 9696/1/9696 +f 9817/1/9817 10062/1/10062 9818/1/9818 +f 9975/1/9975 9973/1/9973 10062/1/10062 +f 9697/1/9697 10061/1/10061 9978/1/9978 +f 9698/1/9698 9978/1/9978 9977/1/9977 +f 9702/1/9702 9977/1/9977 9976/1/9976 +f 9842/1/9842 10049/1/10049 9976/1/9976 +f 10045/1/10045 10046/1/10046 9842/1/9842 +f 9720/1/9720 10046/1/10046 10045/1/10045 +f 9696/1/9696 9719/1/9719 9720/1/9720 +f 9721/1/9721 9979/1/9979 9715/1/9715 +f 9717/1/9717 9696/1/9696 9716/1/9716 +f 9598/1/9598 9594/1/9594 9716/1/9716 +f 9598/1/9598 9494/1/9494 9492/1/9492 +f 9574/1/9574 9494/1/9494 9573/1/9573 +f 9493/1/9493 9494/1/9494 9574/1/9574 +f 9572/1/9572 9573/1/9573 9571/1/9571 +f 9739/1/9739 9569/1/9569 9571/1/9571 +f 9739/1/9739 9814/1/9814 9749/1/9749 +f 9814/1/9814 9813/1/9813 10031/1/10031 +f 9813/1/9813 9812/1/9812 10030/1/10030 +f 9812/1/9812 9811/1/9811 10029/1/10029 +f 9811/1/9811 9810/1/9810 10028/1/10028 +f 9810/1/9810 9809/1/9809 10027/1/10027 +f 9809/1/9809 9808/1/9808 10026/1/10026 +f 9808/1/9808 9807/1/9807 10025/1/10025 +f 9807/1/9807 9806/1/9806 10024/1/10024 +f 9806/1/9806 9805/1/9805 10023/1/10023 +f 9805/1/9805 9804/1/9804 10022/1/10022 +f 9804/1/9804 9803/1/9803 10021/1/10021 +f 9803/1/9803 9725/1/9725 10020/1/10020 +f 9718/1/9718 9713/1/9713 9724/1/9724 +f 9725/1/9725 9729/1/9729 10010/1/10010 +f 9729/1/9729 9728/1/9728 10011/1/10011 +f 9728/1/9728 9727/1/9727 10015/1/10015 +f 9727/1/9727 9726/1/9726 10016/1/10016 +f 9726/1/9726 9734/1/9734 10017/1/10017 +f 9734/1/9734 9733/1/9733 10018/1/10018 +f 9733/1/9733 9732/1/9732 10019/1/10019 +f 9732/1/9732 9731/1/9731 10012/1/10012 +f 9731/1/9731 9730/1/9730 10013/1/10013 +f 9723/1/9723 9735/1/9735 9730/1/9730 +f 9795/1/9795 9723/1/9723 9761/1/9761 +f 9789/1/9789 9761/1/9761 9788/1/9788 +f 9788/1/9788 9832/1/9832 10008/1/10008 +f 9829/1/9829 9823/1/9823 9832/1/9832 +f 9829/1/9829 9830/1/9830 9823/1/9823 +f 9785/1/9785 9831/1/9831 9830/1/9830 +f 9787/1/9787 9722/1/9722 9786/1/9786 +f 9784/1/9784 9831/1/9831 9785/1/9785 +f 9778/1/9778 9836/1/9836 9784/1/9784 +f 9768/1/9768 9767/1/9767 9778/1/9778 +f 9768/1/9768 9782/1/9782 9783/1/9783 +f 9800/1/9800 9825/1/9825 9782/1/9782 +f 9799/1/9799 9826/1/9826 9800/1/9800 +f 9802/1/9802 9827/1/9827 9799/1/9799 +f 9801/1/9801 9828/1/9828 9802/1/9802 +f 9801/1/9801 9777/1/9777 9828/1/9828 +f 9776/1/9776 10050/1/10050 9777/1/9777 +f 9775/1/9775 10051/1/10051 9776/1/9776 +f 9774/1/9774 10053/1/10053 9775/1/9775 +f 9773/1/9773 10054/1/10054 9774/1/9774 +f 9773/1/9773 9772/1/9772 10054/1/10054 +f 9703/1/9703 9771/1/9771 9772/1/9772 +f 9703/1/9703 9708/1/9708 9707/1/9707 +f 9710/1/9710 9968/1/9968 9708/1/9708 +f 9711/1/9711 9969/1/9969 9710/1/9710 +f 9712/1/9712 9970/1/9970 9711/1/9711 +f 9722/1/9722 9713/1/9713 9709/1/9709 +f 9713/1/9713 9715/1/9715 9714/1/9714 +f 9712/1/9712 9971/1/9971 9970/1/9970 +f 9715/1/9715 9972/1/9972 9714/1/9714 +f 9834/1/9834 9970/1/9970 9971/1/9971 +f 9972/1/9972 9973/1/9973 9974/1/9974 +f 9980/1/9980 9981/1/9981 9834/1/9834 +f 9862/1/9862 9870/1/9870 9974/1/9974 +f 9493/1/9493 9574/1/9574 9980/1/9980 +f 9869/1/9869 9491/1/9491 9870/1/9870 +f 9493/1/9493 9492/1/9492 9494/1/9494 +f 9489/1/9489 9490/1/9490 9491/1/9491 +f 9489/1/9489 9487/1/9487 9490/1/9490 +f 9490/1/9490 9487/1/9487 9599/1/9599 +f 9599/1/9599 9487/1/9487 9601/1/9601 +f 9488/1/9488 9487/1/9487 9489/1/9489 +f 9598/1/9598 9492/1/9492 9597/1/9597 +f 9597/1/9597 9663/1/9663 9677/1/9677 +f 9663/1/9663 9662/1/9662 9895/1/9895 +f 9662/1/9662 9661/1/9661 9896/1/9896 +f 9661/1/9661 9660/1/9660 9887/1/9887 +f 9660/1/9660 9659/1/9659 9888/1/9888 +f 9659/1/9659 9658/1/9658 9889/1/9889 +f 9658/1/9658 9657/1/9657 9890/1/9890 +f 9657/1/9657 9656/1/9656 9891/1/9891 +f 9656/1/9656 9655/1/9655 9892/1/9892 +f 9655/1/9655 9654/1/9654 9893/1/9893 +f 9654/1/9654 9653/1/9653 9894/1/9894 +f 9653/1/9653 9652/1/9652 9897/1/9897 +f 9652/1/9652 9642/1/9642 9898/1/9898 +f 9607/1/9607 9646/1/9646 9642/1/9642 +f 9605/1/9605 9606/1/9606 9607/1/9607 +f 9604/1/9604 9885/1/9885 9605/1/9605 +f 9603/1/9603 9886/1/9886 9604/1/9604 +f 9602/1/9602 9873/1/9873 9603/1/9603 +f 9600/1/9600 9490/1/9490 9599/1/9599 +f 9602/1/9602 9871/1/9871 9873/1/9873 +f 9601/1/9601 9874/1/9874 9599/1/9599 +f 9871/1/9871 9488/1/9488 9489/1/9489 +f 9486/1/9486 9487/1/9487 9488/1/9488 +f 9485/1/9485 9487/1/9487 9486/1/9486 +f 9484/1/9484 9485/1/9485 9486/1/9486 +f 9482/1/9482 9483/1/9483 9484/1/9484 +f 9481/1/9481 9483/1/9483 9482/1/9482 +f 9483/1/9483 9485/1/9485 9484/1/9484 +f 9601/1/9601 9487/1/9487 9485/1/9485 +f 9601/1/9601 9875/1/9875 9874/1/9874 +f 9613/1/9613 9877/1/9877 9876/1/9876 +f 9612/1/9612 9877/1/9877 9613/1/9613 +f 9497/1/9497 9611/1/9611 9612/1/9612 +f 9497/1/9497 9496/1/9496 9498/1/9498 +f 9478/1/9478 9479/1/9479 9495/1/9495 +f 9875/1/9875 9876/1/9876 9496/1/9496 +f 9875/1/9875 9477/1/9477 9480/1/9480 +f 9478/1/9478 9475/1/9475 9479/1/9479 +f 9477/1/9477 9476/1/9476 9480/1/9480 +f 9614/1/9614 9476/1/9476 9475/1/9475 +f 10063/1/10063 10064/1/10064 10065/1/10065 +f 10063/1/10063 10065/1/10065 10066/1/10066 +f 10083/1/10083 10063/1/10063 10066/1/10066 +f 10083/1/10083 10066/1/10066 10080/1/10080 +f 10080/1/10080 10082/1/10082 10083/1/10083 +f 10083/1/10083 10082/1/10082 10089/1/10089 +f 10083/1/10083 10089/1/10089 10090/1/10090 +f 10089/1/10089 10093/1/10093 10090/1/10090 +f 10093/1/10093 10067/1/10067 10090/1/10090 +f 10090/1/10090 10067/1/10067 10063/1/10063 +f 10063/1/10063 10067/1/10067 10068/1/10068 +f 10068/1/10068 10067/1/10067 10076/1/10076 +f 10068/1/10068 10076/1/10076 10077/1/10077 +f 10094/1/10094 10068/1/10068 10077/1/10077 +f 10094/1/10094 10077/1/10077 10105/1/10105 +f 10098/1/10098 10094/1/10094 10105/1/10105 +f 10098/1/10098 10105/1/10105 10100/1/10100 +f 10099/1/10099 10098/1/10098 10100/1/10100 +f 10099/1/10099 10100/1/10100 10101/1/10101 +f 10128/1/10128 10099/1/10099 10101/1/10101 +f 10128/1/10128 10101/1/10101 10103/1/10103 +f 10103/1/10103 10130/1/10130 10128/1/10128 +f 10129/1/10129 10128/1/10128 10130/1/10130 +f 10129/1/10129 10130/1/10130 10155/1/10155 +f 10104/1/10104 10129/1/10129 10155/1/10155 +f 10154/1/10154 10104/1/10104 10155/1/10155 +f 10162/1/10162 10154/1/10154 10155/1/10155 +f 10155/1/10155 10171/1/10171 10162/1/10162 +f 10162/1/10162 10171/1/10171 10178/1/10178 +f 10162/1/10162 10178/1/10178 10161/1/10161 +f 10161/1/10161 10178/1/10178 10177/1/10177 +f 10176/1/10176 10161/1/10161 10177/1/10177 +f 10173/1/10173 10176/1/10176 10177/1/10177 +f 10173/1/10173 10177/1/10177 10169/1/10169 +f 10154/1/10154 10173/1/10173 10169/1/10169 +f 10154/1/10154 10169/1/10169 10209/1/10209 +f 10186/1/10186 10154/1/10154 10209/1/10209 +f 10186/1/10186 10209/1/10209 10182/1/10182 +f 10182/1/10182 10185/1/10185 10186/1/10186 +f 10186/1/10186 10185/1/10185 10187/1/10187 +f 10186/1/10186 10187/1/10187 10152/1/10152 +f 10152/1/10152 10187/1/10187 10170/1/10170 +f 10170/1/10170 10147/1/10147 10152/1/10152 +f 10147/1/10147 10151/1/10151 10152/1/10152 +f 10152/1/10152 10151/1/10151 10153/1/10153 +f 10152/1/10152 10153/1/10153 10154/1/10154 +f 10154/1/10154 10153/1/10153 10156/1/10156 +f 10164/1/10164 10156/1/10156 10153/1/10153 +f 10164/1/10164 10153/1/10153 10165/1/10165 +f 10165/1/10165 10170/1/10170 10164/1/10164 +f 10164/1/10164 10170/1/10170 10163/1/10163 +f 10169/1/10169 10163/1/10163 10170/1/10170 +f 10169/1/10169 10103/1/10103 10163/1/10163 +f 10103/1/10103 10104/1/10104 10163/1/10163 +f 10163/1/10163 10104/1/10104 10156/1/10156 +f 10103/1/10103 10102/1/10102 10104/1/10104 +f 10102/1/10102 10127/1/10127 10104/1/10104 +f 10102/1/10102 10125/1/10125 10127/1/10127 +f 10125/1/10125 10126/1/10126 10127/1/10127 +f 10127/1/10127 10126/1/10126 10128/1/10128 +f 10125/1/10125 10124/1/10124 10126/1/10126 +f 10124/1/10124 10099/1/10099 10126/1/10126 +f 10122/1/10122 10099/1/10099 10124/1/10124 +f 10123/1/10123 10122/1/10122 10124/1/10124 +f 10119/1/10119 10122/1/10122 10123/1/10123 +f 10119/1/10119 10123/1/10123 10100/1/10100 +f 10100/1/10100 10123/1/10123 10125/1/10125 +f 10119/1/10119 10118/1/10118 10122/1/10122 +f 10118/1/10118 10106/1/10106 10122/1/10122 +f 10106/1/10106 10097/1/10097 10122/1/10122 +f 10106/1/10106 10079/1/10079 10097/1/10097 +f 10079/1/10079 10095/1/10095 10097/1/10097 +f 10097/1/10097 10095/1/10095 10098/1/10098 +f 10095/1/10095 10079/1/10079 10096/1/10096 +f 10095/1/10095 10096/1/10096 10091/1/10091 +f 10091/1/10091 10094/1/10094 10095/1/10095 +f 10091/1/10091 10096/1/10096 10092/1/10092 +f 10091/1/10091 10092/1/10092 10089/1/10089 +f 10089/1/10089 10064/1/10064 10091/1/10091 +f 10091/1/10091 10064/1/10064 10068/1/10068 +f 10096/1/10096 10078/1/10078 10092/1/10092 +f 10092/1/10092 10078/1/10078 10076/1/10076 +f 10092/1/10092 10076/1/10076 10093/1/10093 +f 10096/1/10096 10079/1/10079 10078/1/10078 +f 10077/1/10077 10078/1/10078 10079/1/10079 +f 10077/1/10077 10079/1/10079 10106/1/10106 +f 10118/1/10118 10108/1/10108 10106/1/10106 +f 10107/1/10107 10106/1/10106 10108/1/10108 +f 10107/1/10107 10108/1/10108 10109/1/10109 +f 10107/1/10107 10109/1/10109 10134/1/10134 +f 10134/1/10134 10132/1/10132 10107/1/10107 +f 10107/1/10107 10132/1/10132 10120/1/10120 +f 10107/1/10107 10120/1/10120 10105/1/10105 +f 10105/1/10105 10120/1/10120 10117/1/10117 +f 10105/1/10105 10117/1/10117 10119/1/10119 +f 10120/1/10120 10121/1/10121 10117/1/10117 +f 10117/1/10117 10121/1/10121 10118/1/10118 +f 10118/1/10118 10121/1/10121 10110/1/10110 +f 10121/1/10121 10131/1/10131 10110/1/10110 +f 10110/1/10110 10131/1/10131 10133/1/10133 +f 10110/1/10110 10133/1/10133 10135/1/10135 +f 10135/1/10135 10112/1/10112 10110/1/10110 +f 10111/1/10111 10110/1/10110 10112/1/10112 +f 10111/1/10111 10112/1/10112 10113/1/10113 +f 10136/1/10136 10111/1/10111 10113/1/10113 +f 10136/1/10136 10113/1/10113 10138/1/10138 +f 10138/1/10138 10137/1/10137 10136/1/10136 +f 10136/1/10136 10137/1/10137 10135/1/10135 +f 10136/1/10136 10135/1/10135 10134/1/10134 +f 10137/1/10137 10114/1/10114 10135/1/10135 +f 10114/1/10114 10137/1/10137 10140/1/10140 +f 10146/1/10146 10114/1/10114 10140/1/10140 +f 10146/1/10146 10140/1/10140 10144/1/10144 +f 10144/1/10144 10145/1/10145 10146/1/10146 +f 10146/1/10146 10145/1/10145 10116/1/10116 +f 10116/1/10116 10145/1/10145 10115/1/10115 +f 10115/1/10115 10114/1/10114 10116/1/10116 +f 10113/1/10113 10114/1/10114 10115/1/10115 +f 10115/1/10115 10139/1/10139 10113/1/10113 +f 10145/1/10145 10139/1/10139 10115/1/10115 +f 10145/1/10145 10141/1/10141 10139/1/10139 +f 10140/1/10140 10139/1/10139 10141/1/10141 +f 10140/1/10140 10141/1/10141 10142/1/10142 +f 10142/1/10142 10141/1/10141 10143/1/10143 +f 10142/1/10142 10143/1/10143 10144/1/10144 +f 10143/1/10143 10141/1/10141 10145/1/10145 +f 10144/1/10144 10143/1/10143 10145/1/10145 +f 10144/1/10144 10140/1/10140 10142/1/10142 +f 10116/1/10116 10114/1/10114 10146/1/10146 +f 10137/1/10137 10139/1/10139 10140/1/10140 +f 10138/1/10138 10139/1/10139 10137/1/10137 +f 10139/1/10139 10138/1/10138 10113/1/10113 +f 10134/1/10134 10111/1/10111 10136/1/10136 +f 10113/1/10113 10112/1/10112 10114/1/10114 +f 10109/1/10109 10110/1/10110 10111/1/10111 +f 10135/1/10135 10114/1/10114 10112/1/10112 +f 10134/1/10134 10135/1/10135 10133/1/10133 +f 10132/1/10132 10133/1/10133 10131/1/10131 +f 10120/1/10120 10131/1/10131 10121/1/10121 +f 10132/1/10132 10131/1/10131 10120/1/10120 +f 10134/1/10134 10133/1/10133 10132/1/10132 +f 10134/1/10134 10109/1/10109 10111/1/10111 +f 10109/1/10109 10108/1/10108 10110/1/10110 +f 10105/1/10105 10106/1/10106 10107/1/10107 +f 10110/1/10110 10108/1/10108 10118/1/10118 +f 10117/1/10117 10118/1/10118 10119/1/10119 +f 10122/1/10122 10097/1/10097 10099/1/10099 +f 10123/1/10123 10124/1/10124 10125/1/10125 +f 10100/1/10100 10125/1/10125 10102/1/10102 +f 10169/1/10169 10171/1/10171 10103/1/10103 +f 10165/1/10165 10172/1/10172 10170/1/10170 +f 10166/1/10166 10172/1/10172 10165/1/10165 +f 10150/1/10150 10166/1/10166 10165/1/10165 +f 10150/1/10150 10165/1/10165 10151/1/10151 +f 10149/1/10149 10166/1/10166 10150/1/10150 +f 10149/1/10149 10150/1/10150 10147/1/10147 +f 10147/1/10147 10148/1/10148 10149/1/10149 +f 10148/1/10148 10167/1/10167 10149/1/10149 +f 10148/1/10148 10168/1/10168 10167/1/10167 +f 10167/1/10167 10168/1/10168 10166/1/10166 +f 10147/1/10147 10168/1/10168 10148/1/10148 +f 10147/1/10147 10172/1/10172 10168/1/10168 +f 10149/1/10149 10167/1/10167 10166/1/10166 +f 10166/1/10166 10168/1/10168 10172/1/10172 +f 10163/1/10163 10156/1/10156 10164/1/10164 +f 10165/1/10165 10153/1/10153 10151/1/10151 +f 10147/1/10147 10150/1/10150 10151/1/10151 +f 10172/1/10172 10147/1/10147 10170/1/10170 +f 10187/1/10187 10169/1/10169 10170/1/10170 +f 10187/1/10187 10208/1/10208 10169/1/10169 +f 10185/1/10185 10208/1/10208 10187/1/10187 +f 10185/1/10185 10204/1/10204 10208/1/10208 +f 10207/1/10207 10208/1/10208 10204/1/10204 +f 10207/1/10207 10204/1/10204 10203/1/10203 +f 10179/1/10179 10207/1/10207 10203/1/10203 +f 10179/1/10179 10203/1/10203 10193/1/10193 +f 10179/1/10179 10193/1/10193 10191/1/10191 +f 10191/1/10191 10180/1/10180 10179/1/10179 +f 10179/1/10179 10180/1/10180 10181/1/10181 +f 10179/1/10179 10181/1/10181 10182/1/10182 +f 10181/1/10181 10180/1/10180 10183/1/10183 +f 10183/1/10183 10192/1/10192 10181/1/10181 +f 10181/1/10181 10192/1/10192 10194/1/10194 +f 10181/1/10181 10194/1/10194 10201/1/10201 +f 10181/1/10181 10201/1/10201 10204/1/10204 +f 10216/1/10216 10201/1/10201 10194/1/10194 +f 10216/1/10216 10194/1/10194 10218/1/10218 +f 10217/1/10217 10216/1/10216 10218/1/10218 +f 10219/1/10219 10217/1/10217 10218/1/10218 +f 10221/1/10221 10219/1/10219 10218/1/10218 +f 10218/1/10218 10195/1/10195 10221/1/10221 +f 10221/1/10221 10195/1/10195 10200/1/10200 +f 10199/1/10199 10221/1/10221 10200/1/10200 +f 10199/1/10199 10200/1/10200 10198/1/10198 +f 10199/1/10199 10198/1/10198 10197/1/10197 +f 10199/1/10199 10197/1/10197 10196/1/10196 +f 10196/1/10196 10217/1/10217 10199/1/10199 +f 10199/1/10199 10217/1/10217 10222/1/10222 +f 10217/1/10217 10220/1/10220 10222/1/10222 +f 10221/1/10221 10222/1/10222 10220/1/10220 +f 10196/1/10196 10215/1/10215 10217/1/10217 +f 10193/1/10193 10215/1/10215 10196/1/10196 +f 10195/1/10195 10193/1/10193 10196/1/10196 +f 10194/1/10194 10193/1/10193 10195/1/10195 +f 10197/1/10197 10195/1/10195 10196/1/10196 +f 10197/1/10197 10198/1/10198 10195/1/10195 +f 10222/1/10222 10221/1/10221 10199/1/10199 +f 10195/1/10195 10198/1/10198 10200/1/10200 +f 10221/1/10221 10220/1/10220 10219/1/10219 +f 10219/1/10219 10220/1/10220 10217/1/10217 +f 10215/1/10215 10216/1/10216 10217/1/10217 +f 10215/1/10215 10213/1/10213 10216/1/10216 +f 10214/1/10214 10213/1/10213 10215/1/10215 +f 10203/1/10203 10214/1/10214 10215/1/10215 +f 10205/1/10205 10214/1/10214 10203/1/10203 +f 10203/1/10203 10202/1/10202 10205/1/10205 +f 10206/1/10206 10205/1/10205 10202/1/10202 +f 10206/1/10206 10202/1/10202 10213/1/10213 +f 10213/1/10213 10211/1/10211 10206/1/10206 +f 10211/1/10211 10210/1/10210 10206/1/10206 +f 10211/1/10211 10212/1/10212 10210/1/10210 +f 10210/1/10210 10212/1/10212 10205/1/10205 +f 10213/1/10213 10212/1/10212 10211/1/10211 +f 10213/1/10213 10202/1/10202 10201/1/10201 +f 10206/1/10206 10210/1/10210 10205/1/10205 +f 10201/1/10201 10202/1/10202 10203/1/10203 +f 10205/1/10205 10212/1/10212 10214/1/10214 +f 10213/1/10213 10214/1/10214 10212/1/10212 +f 10218/1/10218 10194/1/10194 10195/1/10195 +f 10213/1/10213 10201/1/10201 10216/1/10216 +f 10191/1/10191 10194/1/10194 10192/1/10192 +f 10191/1/10191 10192/1/10192 10190/1/10190 +f 10191/1/10191 10190/1/10190 10189/1/10189 +f 10189/1/10189 10184/1/10184 10191/1/10191 +f 10189/1/10189 10188/1/10188 10184/1/10184 +f 10184/1/10184 10188/1/10188 10183/1/10183 +f 10188/1/10188 10190/1/10190 10183/1/10183 +f 10189/1/10189 10190/1/10190 10188/1/10188 +f 10183/1/10183 10190/1/10190 10192/1/10192 +f 10184/1/10184 10183/1/10183 10180/1/10180 +f 10191/1/10191 10184/1/10184 10180/1/10180 +f 10193/1/10193 10194/1/10194 10191/1/10191 +f 10193/1/10193 10203/1/10203 10215/1/10215 +f 10182/1/10182 10207/1/10207 10179/1/10179 +f 10203/1/10203 10204/1/10204 10201/1/10201 +f 10209/1/10209 10208/1/10208 10207/1/10207 +f 10181/1/10181 10204/1/10204 10185/1/10185 +f 10182/1/10182 10181/1/10181 10185/1/10185 +f 10182/1/10182 10209/1/10209 10207/1/10207 +f 10152/1/10152 10154/1/10154 10186/1/10186 +f 10209/1/10209 10169/1/10169 10208/1/10208 +f 10160/1/10160 10173/1/10173 10154/1/10154 +f 10161/1/10161 10160/1/10160 10154/1/10154 +f 10159/1/10159 10160/1/10160 10161/1/10161 +f 10159/1/10159 10158/1/10158 10160/1/10160 +f 10157/1/10157 10158/1/10158 10159/1/10159 +f 10175/1/10175 10157/1/10157 10159/1/10159 +f 10175/1/10175 10159/1/10159 10176/1/10176 +f 10174/1/10174 10157/1/10157 10175/1/10175 +f 10173/1/10173 10174/1/10174 10175/1/10175 +f 10173/1/10173 10158/1/10158 10174/1/10174 +f 10174/1/10174 10158/1/10158 10157/1/10157 +f 10173/1/10173 10160/1/10160 10158/1/10158 +f 10175/1/10175 10176/1/10176 10173/1/10173 +f 10176/1/10176 10159/1/10159 10161/1/10161 +f 10169/1/10169 10177/1/10177 10178/1/10178 +f 10169/1/10169 10178/1/10178 10171/1/10171 +f 10161/1/10161 10154/1/10154 10162/1/10162 +f 10154/1/10154 10156/1/10156 10104/1/10104 +f 10104/1/10104 10127/1/10127 10129/1/10129 +f 10155/1/10155 10130/1/10130 10171/1/10171 +f 10127/1/10127 10128/1/10128 10129/1/10129 +f 10103/1/10103 10171/1/10171 10130/1/10130 +f 10101/1/10101 10102/1/10102 10103/1/10103 +f 10126/1/10126 10099/1/10099 10128/1/10128 +f 10101/1/10101 10100/1/10100 10102/1/10102 +f 10097/1/10097 10098/1/10098 10099/1/10099 +f 10100/1/10100 10105/1/10105 10119/1/10119 +f 10095/1/10095 10094/1/10094 10098/1/10098 +f 10105/1/10105 10077/1/10077 10106/1/10106 +f 10091/1/10091 10068/1/10068 10094/1/10094 +f 10077/1/10077 10076/1/10076 10078/1/10078 +f 10093/1/10093 10076/1/10076 10067/1/10067 +f 10089/1/10089 10092/1/10092 10093/1/10093 +f 10082/1/10082 10065/1/10065 10089/1/10089 +f 10082/1/10082 10069/1/10069 10065/1/10065 +f 10081/1/10081 10069/1/10069 10082/1/10082 +f 10081/1/10081 10071/1/10071 10069/1/10069 +f 10069/1/10069 10071/1/10071 10070/1/10070 +f 10066/1/10066 10069/1/10069 10070/1/10070 +f 10070/1/10070 10071/1/10071 10072/1/10072 +f 10070/1/10070 10072/1/10072 10073/1/10073 +f 10073/1/10073 10084/1/10084 10070/1/10070 +f 10070/1/10070 10084/1/10084 10080/1/10080 +f 10081/1/10081 10080/1/10080 10084/1/10084 +f 10086/1/10086 10081/1/10081 10084/1/10084 +f 10086/1/10086 10084/1/10084 10087/1/10087 +f 10087/1/10087 10072/1/10072 10086/1/10086 +f 10086/1/10086 10072/1/10072 10085/1/10085 +f 10087/1/10087 10074/1/10074 10072/1/10072 +f 10072/1/10072 10074/1/10074 10075/1/10075 +f 10088/1/10088 10075/1/10075 10074/1/10074 +f 10084/1/10084 10075/1/10075 10088/1/10088 +f 10088/1/10088 10074/1/10074 10087/1/10087 +f 10087/1/10087 10084/1/10084 10088/1/10088 +f 10085/1/10085 10081/1/10081 10086/1/10086 +f 10084/1/10084 10073/1/10073 10075/1/10075 +f 10073/1/10073 10072/1/10072 10075/1/10075 +f 10085/1/10085 10072/1/10072 10071/1/10071 +f 10085/1/10085 10071/1/10071 10081/1/10081 +f 10080/1/10080 10081/1/10081 10082/1/10082 +f 10080/1/10080 10066/1/10066 10070/1/10070 +f 10090/1/10090 10063/1/10063 10083/1/10083 +f 10066/1/10066 10065/1/10065 10069/1/10069 +f 10089/1/10089 10065/1/10065 10064/1/10064 +f 10068/1/10068 10064/1/10064 10063/1/10063 +# 20456 faces, 5 coords texture + +# End of File diff --git a/resources/meshes/z-bolt_classic_platform.stl b/resources/meshes/z-bolt_classic_platform.stl new file mode 100644 index 0000000000..6e1e2f2d58 Binary files /dev/null and b/resources/meshes/z-bolt_classic_platform.stl differ diff --git a/resources/meshes/z-bolt_plus_platform.stl b/resources/meshes/z-bolt_plus_platform.stl new file mode 100644 index 0000000000..10c92ab24d Binary files /dev/null and b/resources/meshes/z-bolt_plus_platform.stl differ diff --git a/resources/qml/AboutDialog.qml b/resources/qml/AboutDialog.qml deleted file mode 100644 index 5d3b1d1544..0000000000 --- a/resources/qml/AboutDialog.qml +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (c) 2015 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Window 2.1 - -import UM 1.1 as UM - -UM.Dialog -{ - id: base - - //: About dialog title - title: catalog.i18nc("@title:window","About Cura") - - minimumWidth: 500 * screenScaleFactor - minimumHeight: 650 * screenScaleFactor - width: minimumWidth - height: minimumHeight - - Image - { - id: logo - width: (base.minimumWidth * 0.85) | 0 - height: (width * (1/4.25)) | 0 - - source: UM.Theme.getImage("logo") - - sourceSize.width: width - sourceSize.height: height - anchors.top: parent.top - anchors.topMargin: ((base.minimumWidth - width) / 2) | 0 - anchors.horizontalCenter: parent.horizontalCenter - - UM.I18nCatalog{id: catalog; name:"cura"} - } - - Label - { - id: version - - text: catalog.i18nc("@label","version: %1").arg(UM.Application.version) - font: UM.Theme.getFont("large") - anchors.right : logo.right - anchors.top: logo.bottom - anchors.topMargin: (UM.Theme.getSize("default_margin").height / 2) | 0 - } - - Label - { - id: description - width: parent.width - - //: About dialog application description - text: catalog.i18nc("@label","End-to-end solution for fused filament 3D printing.") - font: UM.Theme.getFont("system") - wrapMode: Text.WordWrap - anchors.top: version.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - } - - Label - { - id: creditsNotes - width: parent.width - - //: About dialog application author note - text: catalog.i18nc("@info:credit","Cura is developed by Ultimaker B.V. in cooperation with the community.\nCura proudly uses the following open source projects:") - font: UM.Theme.getFont("system") - wrapMode: Text.WordWrap - anchors.top: description.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - } - - ScrollView - { - anchors.top: creditsNotes.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - - width: parent.width - height: base.height - y - (2 * UM.Theme.getSize("default_margin").height + closeButton.height) - - ListView - { - id: projectsList - - width: parent.width - - delegate: Row - { - Label - { - text: "%2".arg(model.url).arg(model.name) - width: (projectsList.width * 0.25) | 0 - elide: Text.ElideRight - onLinkActivated: Qt.openUrlExternally(link) - } - Label - { - text: model.description - elide: Text.ElideRight - width: (projectsList.width * 0.6) | 0 - } - Label - { - text: model.license - elide: Text.ElideRight - width: (projectsList.width * 0.15) | 0 - } - } - model: ListModel - { - id: projectsModel - } - Component.onCompleted: - { - projectsModel.append({ name:"Cura", description: catalog.i18nc("@label", "Graphical user interface"), license: "LGPLv3", url: "https://github.com/Ultimaker/Cura" }); - projectsModel.append({ name:"Uranium", description: catalog.i18nc("@label", "Application framework"), license: "LGPLv3", url: "https://github.com/Ultimaker/Uranium" }); - projectsModel.append({ name:"CuraEngine", description: catalog.i18nc("@label", "G-code generator"), license: "AGPLv3", url: "https://github.com/Ultimaker/CuraEngine" }); - projectsModel.append({ name:"libArcus", description: catalog.i18nc("@label", "Interprocess communication library"), license: "LGPLv3", url: "https://github.com/Ultimaker/libArcus" }); - - projectsModel.append({ name:"Python", description: catalog.i18nc("@label", "Programming language"), license: "Python", url: "http://python.org/" }); - projectsModel.append({ name:"Qt5", description: catalog.i18nc("@label", "GUI framework"), license: "LGPLv3", url: "https://www.qt.io/" }); - projectsModel.append({ name:"PyQt", description: catalog.i18nc("@label", "GUI framework bindings"), license: "GPL", url: "https://riverbankcomputing.com/software/pyqt" }); - projectsModel.append({ name:"SIP", description: catalog.i18nc("@label", "C/C++ Binding library"), license: "GPL", url: "https://riverbankcomputing.com/software/sip" }); - projectsModel.append({ name:"Protobuf", description: catalog.i18nc("@label", "Data interchange format"), license: "BSD", url: "https://developers.google.com/protocol-buffers" }); - 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:"libSavitar", description: catalog.i18nc("@label", "Support library for handling 3MF files"), license: "LGPLv3", url: "https://github.com/ultimaker/libsavitar" }); - 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:"Requests", description: catalog.i18nc("@Label", "Python HTTP library"), license: "GPL", url: "http://docs.python-requests.org" }); - - projectsModel.append({ name:"Noto Sans", description: catalog.i18nc("@label", "Font"), license: "Apache 2.0", url: "https://www.google.com/get/noto/" }); - projectsModel.append({ name:"Font-Awesome-SVG-PNG", description: catalog.i18nc("@label", "SVG icons"), license: "SIL OFL 1.1", url: "https://github.com/encharm/Font-Awesome-SVG-PNG" }); - projectsModel.append({ name:"AppImageKit", description: catalog.i18nc("@label", "Linux cross-distribution application deployment"), license: "MIT", url: "https://github.com/AppImage/AppImageKit" }); - } - } - } - - rightButtons: Button - { - //: Close about dialog button - id: closeButton - text: catalog.i18nc("@action:button","Close"); - - onClicked: base.visible = false; - } -} diff --git a/resources/qml/Account/AccountDetails.qml b/resources/qml/Account/AccountDetails.qml new file mode 100644 index 0000000000..265842e2b4 --- /dev/null +++ b/resources/qml/Account/AccountDetails.qml @@ -0,0 +1,37 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import UM 1.4 as UM +import Cura 1.1 as Cura + +Column +{ + property var profile: null + property var loggedIn: false + property var profileImage: "" + + padding: UM.Theme.getSize("wide_margin").height + spacing: UM.Theme.getSize("wide_margin").height + + Loader + { + id: accountOperations + anchors.horizontalCenter: parent.horizontalCenter + sourceComponent: loggedIn ? userOperations : generalOperations + } + + Component + { + id: userOperations + UserOperations { } + } + + Component + { + id: generalOperations + GeneralOperations { } + } +} \ No newline at end of file diff --git a/resources/qml/Account/AccountWidget.qml b/resources/qml/Account/AccountWidget.qml new file mode 100644 index 0000000000..26b491ce15 --- /dev/null +++ b/resources/qml/Account/AccountWidget.qml @@ -0,0 +1,145 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import UM 1.4 as UM +import Cura 1.1 as Cura + +Item +{ + property var profile: Cura.API.account.userProfile + property var loggedIn: Cura.API.account.isLoggedIn + + height: signInButton.height > accountWidget.height ? signInButton.height : accountWidget.height + width: signInButton.width > accountWidget.width ? signInButton.width : accountWidget.width + + Button + { + id: signInButton + + anchors.verticalCenter: parent.verticalCenter + + text: catalog.i18nc("@action:button", "Sign in") + + height: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) + onClicked: popup.opened ? popup.close() : popup.open() + visible: !loggedIn + + hoverEnabled: true + + background: Rectangle + { + radius: UM.Theme.getSize("action_button_radius").width + color: signInButton.hovered ? UM.Theme.getColor("primary_text") : UM.Theme.getColor("main_window_header_background") + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("primary_text") + } + + contentItem: Label + { + id: label + text: signInButton.text + font: UM.Theme.getFont("default") + color: signInButton.hovered ? UM.Theme.getColor("main_window_header_background") : UM.Theme.getColor("primary_text") + width: contentWidth + verticalAlignment: Text.AlignVCenter + renderType: Text.NativeRendering + } + } + + Button + { + id: accountWidget + + anchors.verticalCenter: parent.verticalCenter + + implicitHeight: UM.Theme.getSize("main_window_header").height + implicitWidth: UM.Theme.getSize("main_window_header").height + + hoverEnabled: true + + visible: loggedIn + + text: (loggedIn && profile["profile_image_url"] == "") ? profile["username"].charAt(0).toUpperCase() : "" + + background: AvatarImage + { + id: avatar + + width: Math.round(0.8 * accountWidget.width) + height: Math.round(0.8 * accountWidget.height) + anchors.verticalCenter: accountWidget.verticalCenter + anchors.horizontalCenter: accountWidget.horizontalCenter + + source: (loggedIn && profile["profile_image_url"]) ? profile["profile_image_url"] : "" + outlineColor: loggedIn ? UM.Theme.getColor("account_widget_outline_active") : UM.Theme.getColor("lining") + } + + contentItem: Item + { + anchors.verticalCenter: accountWidget.verticalCenter + anchors.horizontalCenter: accountWidget.horizontalCenter + visible: avatar.source == "" + Rectangle + { + id: initialCircle + anchors.centerIn: parent + width: Math.min(parent.width, parent.height) + height: width + radius: width + color: accountWidget.hovered ? UM.Theme.getColor("primary_text") : "transparent" + border.width: 1 + border.color: UM.Theme.getColor("primary_text") + } + + Label + { + id: initialLabel + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + text: accountWidget.text + font: UM.Theme.getFont("large_bold") + color: accountWidget.hovered ? UM.Theme.getColor("main_window_header_background") : UM.Theme.getColor("primary_text") + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + renderType: Text.NativeRendering + } + } + + onClicked: popup.opened ? popup.close() : popup.open() + } + + Popup + { + id: popup + + y: parent.height + UM.Theme.getSize("default_arrow").height + x: parent.width - width + + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + + opacity: opened ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } + + contentItem: AccountDetails + { + id: panel + profile: Cura.API.account.userProfile + loggedIn: Cura.API.account.isLoggedIn + profileImage: Cura.API.account.profileImageUrl + } + + background: UM.PointingRectangle + { + color: UM.Theme.getColor("tool_panel_background") + borderColor: UM.Theme.getColor("lining") + borderWidth: UM.Theme.getSize("default_lining").width + + target: Qt.point(width - (accountWidget.width / 2), -10) + + arrowSize: UM.Theme.getSize("default_arrow").width + } + } +} diff --git a/resources/qml/Account/AvatarImage.qml b/resources/qml/Account/AvatarImage.qml new file mode 100644 index 0000000000..a4f922a10d --- /dev/null +++ b/resources/qml/Account/AvatarImage.qml @@ -0,0 +1,59 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtGraphicalEffects 1.0 + +import UM 1.4 as UM + +Item +{ + // This item shows the provided image while applying a round mask to it. + // It also shows a round border around it. The color is defined by the outlineColor property. + + id: avatar + + property alias source: profileImage.source + property alias outlineColor: profileImageOutline.color + property bool hasAvatar: source != "" + + Image + { + id: profileImage + anchors.fill: parent + fillMode: Image.PreserveAspectCrop + visible: false + mipmap: true + } + + Rectangle + { + id: profileImageMask + anchors.fill: parent + radius: width + color: hasAvatar ? "white" : "transparent" + } + + OpacityMask + { + anchors.fill: parent + source: profileImage + maskSource: profileImageMask + visible: hasAvatar + cached: true + } + + UM.RecolorImage + { + id: profileImageOutline + 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 + visible: hasAvatar + source: UM.Theme.getIcon("circle_outline") + sourceSize: Qt.size(parent.width, parent.height) + color: UM.Theme.getColor("account_widget_ouline_active") + } +} diff --git a/resources/qml/Account/GeneralOperations.qml b/resources/qml/Account/GeneralOperations.qml new file mode 100644 index 0000000000..a648a5ad0b --- /dev/null +++ b/resources/qml/Account/GeneralOperations.qml @@ -0,0 +1,82 @@ +// Copyright (c) 2019 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import UM 1.4 as UM +import Cura 1.1 as Cura + +Column +{ + spacing: UM.Theme.getSize("default_margin").width + + Image + { + id: machinesImage + anchors.horizontalCenter: parent.horizontalCenter + source: UM.Theme.getIcon("sign_in_to_cloud") + horizontalAlignment: Image.AlignHCenter + verticalAlignment: Image.AlignVCenter + } + + Label + { + id: title + anchors.horizontalCenter: parent.horizontalCenter + horizontalAlignment: Text.AlignHCenter + renderType: Text.NativeRendering + text: catalog.i18nc("@label", "Ultimaker Cloud") + font: UM.Theme.getFont("large_bold") + color: UM.Theme.getColor("text") + } + + Label + { + id: generalInformation + anchors.horizontalCenter: parent.horizontalCenter + horizontalAlignment: Text.AlignHCenter + renderType: Text.NativeRendering + text: catalog.i18nc("@label", "The next generation 3D printing workflow") + font: UM.Theme.getFont("default_bold") + color: UM.Theme.getColor("text") + } + + Label + { + id: generalInformationPoints + anchors.horizontalCenter: parent.horizontalCenter + horizontalAlignment: Text.AlignLeft + renderType: Text.NativeRendering + text: catalog.i18nc("@text", "- Send print jobs to Ultimaker printers outside your local network\n- Store your Ultimaker Cura settings in the cloud for use anywhere\n- Get exclusive access to material profiles from leading brands") + lineHeight: 1.4 + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + } + + // placeholder + Label + { + text: " " + } + + Cura.PrimaryButton + { + anchors.horizontalCenter: parent.horizontalCenter + width: UM.Theme.getSize("account_button").width + height: UM.Theme.getSize("account_button").height + text: catalog.i18nc("@button", "Sign in") + onClicked: Cura.API.account.login() + fixedWidthMode: true + } + + Cura.SecondaryButton + { + anchors.horizontalCenter: parent.horizontalCenter + width: UM.Theme.getSize("account_button").width + height: UM.Theme.getSize("account_button").height + text: catalog.i18nc("@button", "Create account") + onClicked: Qt.openUrlExternally(CuraApplication.ultimakerCloudAccountRootUrl + "/app/create") + fixedWidthMode: true + } +} \ No newline at end of file diff --git a/resources/qml/Account/UserOperations.qml b/resources/qml/Account/UserOperations.qml new file mode 100644 index 0000000000..c9fb461696 --- /dev/null +++ b/resources/qml/Account/UserOperations.qml @@ -0,0 +1,63 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import UM 1.4 as UM +import Cura 1.1 as Cura + +Column +{ + width: Math.max(title.width, + accountButton.width) * 1.5 + + spacing: UM.Theme.getSize("default_margin").width + + Label + { + id: title + anchors.horizontalCenter: parent.horizontalCenter + horizontalAlignment: Text.AlignHCenter + renderType: Text.NativeRendering + text: catalog.i18nc("@label", "Hi " + profile.username) + font: UM.Theme.getFont("large_bold") + color: UM.Theme.getColor("text") + } + + // placeholder + Label + { + text: " " + } + + Cura.SecondaryButton + { + id: accountButton + anchors.horizontalCenter: parent.horizontalCenter + width: UM.Theme.getSize("account_button").width + height: UM.Theme.getSize("account_button").height + text: catalog.i18nc("@button", "Ultimaker account") + onClicked: Qt.openUrlExternally(CuraApplication.ultimakerCloudAccountRootUrl) + fixedWidthMode: false + } + + Label + { + id: signOutButton + anchors.horizontalCenter: parent.horizontalCenter + text: catalog.i18nc("@button", "Sign out") + color: UM.Theme.getColor("secondary_button_text") + font: UM.Theme.getFont("medium") + renderType: Text.NativeRendering + + MouseArea + { + anchors.fill: parent + onClicked: Cura.API.account.logout() + hoverEnabled: true + onEntered: signOutButton.font.underline = true + onExited: signOutButton.font.underline = false + } + } +} diff --git a/resources/qml/ActionButton.qml b/resources/qml/ActionButton.qml new file mode 100644 index 0000000000..e4e2aedb8a --- /dev/null +++ b/resources/qml/ActionButton.qml @@ -0,0 +1,147 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtGraphicalEffects 1.0 // For the dropshadow + +import UM 1.1 as UM +import Cura 1.0 as Cura + + +Button +{ + id: button + property bool isIconOnRightSide: false + + property alias iconSource: buttonIconLeft.source + property alias textFont: buttonText.font + property alias cornerRadius: backgroundRect.radius + property alias tooltip: tooltip.tooltipText + property alias cornerSide: backgroundRect.cornerSide + + property color color: UM.Theme.getColor("primary") + property color hoverColor: UM.Theme.getColor("primary_hover") + property color disabledColor: color + property color textColor: UM.Theme.getColor("button_text") + property color textHoverColor: textColor + property color textDisabledColor: textColor + property color outlineColor: color + property color outlineHoverColor: hoverColor + property color outlineDisabledColor: outlineColor + property alias shadowColor: shadow.color + property alias shadowEnabled: shadow.visible + property alias busy: busyIndicator.visible + + property alias toolTipContentAlignment: tooltip.contentAlignment + + // This property is used to indicate whether the button has a fixed width or the width would depend on the contents + // Be careful when using fixedWidthMode, the translated texts can be too long that they won't fit. In any case, + // we elide the text to the right so the text will be cut off with the three dots at the end. + property var fixedWidthMode: false + + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + height: UM.Theme.getSize("action_button").height + hoverEnabled: true + + contentItem: Row + { + spacing: UM.Theme.getSize("narrow_margin").width + height: button.height + //Left side icon. Only displayed if !isIconOnRightSide. + UM.RecolorImage + { + id: buttonIconLeft + source: "" + height: visible ? UM.Theme.getSize("action_button_icon").height : 0 + width: visible ? height : 0 + sourceSize.width: width + sourceSize.height: height + color: button.enabled ? (button.hovered ? button.textHoverColor : button.textColor) : button.textDisabledColor + visible: source != "" && !button.isIconOnRightSide + anchors.verticalCenter: parent.verticalCenter + } + + Label + { + id: buttonText + text: button.text + color: button.enabled ? (button.hovered ? button.textHoverColor : button.textColor): button.textDisabledColor + font: UM.Theme.getFont("medium") + visible: text != "" + renderType: Text.NativeRendering + height: parent.height + anchors.verticalCenter: parent.verticalCenter + width: fixedWidthMode ? button.width - button.leftPadding - button.rightPadding : undefined + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + //Right side icon. Only displayed if isIconOnRightSide. + UM.RecolorImage + { + id: buttonIconRight + source: buttonIconLeft.source + height: visible ? UM.Theme.getSize("action_button_icon").height : 0 + width: visible ? height : 0 + sourceSize.width: width + sourceSize.height: height + color: buttonIconLeft.color + visible: source != "" && button.isIconOnRightSide + anchors.verticalCenter: buttonIconLeft.verticalCenter + } + } + + background: Cura.RoundedRectangle + { + id: backgroundRect + cornerSide: Cura.RoundedRectangle.Direction.All + color: button.enabled ? (button.hovered ? button.hoverColor : button.color) : button.disabledColor + 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 + } + + DropShadow + { + id: shadow + // Don't blur the shadow + radius: 0 + anchors.fill: backgroundRect + source: backgroundRect + verticalOffset: 2 + visible: false + // Should always be drawn behind the background. + z: backgroundRect.z - 1 + } + + Cura.ToolTip + { + id: tooltip + visible: button.hovered + } + + BusyIndicator + { + id: busyIndicator + + anchors.centerIn: parent + + width: height + height: parent.height + + visible: false + + RotationAnimator + { + target: busyIndicator.contentItem + running: busyIndicator.visible && busyIndicator.running + from: 0 + to: 360 + loops: Animation.Infinite + duration: 2500 + } + } +} \ No newline at end of file diff --git a/resources/qml/ActionPanel/ActionPanelWidget.qml b/resources/qml/ActionPanel/ActionPanelWidget.qml new file mode 100644 index 0000000000..4d61380c99 --- /dev/null +++ b/resources/qml/ActionPanel/ActionPanelWidget.qml @@ -0,0 +1,106 @@ +// Copyright (c) 2019 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + + +// This element hold all the elements needed for the user to trigger the slicing process, and later +// to get information about the printing times, material consumption and the output process (such as +// saving to a file, printing over network, ... +Item +{ + id: base + width: childrenRect.width + height: childrenRect.height + visible: CuraApplication.platformActivity + + property bool hasPreviewButton: true + + Rectangle + { + id: actionPanelWidget + + width: UM.Theme.getSize("action_panel_widget").width + height: childrenRect.height + 2 * UM.Theme.getSize("thick_margin").height + anchors. right: parent.right + color: UM.Theme.getColor("main_background") + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + radius: UM.Theme.getSize("default_radius").width + z: 10 + + property bool outputAvailable: UM.Backend.state == UM.Backend.Done || UM.Backend.state == UM.Backend.Disabled + + Loader + { + id: loader + anchors + { + top: parent.top + topMargin: UM.Theme.getSize("thick_margin").height + left: parent.left + leftMargin: UM.Theme.getSize("thick_margin").width + right: parent.right + rightMargin: UM.Theme.getSize("thick_margin").width + } + sourceComponent: actionPanelWidget.outputAvailable ? outputProcessWidget : sliceProcessWidget + onLoaded: + { + if(actionPanelWidget.outputAvailable) + { + loader.item.hasPreviewButton = base.hasPreviewButton; + } + } + } + + Component + { + id: sliceProcessWidget + SliceProcessWidget { } + } + + Component + { + id: outputProcessWidget + OutputProcessWidget { } + } + } + + Item + { + id: additionalComponents + width: childrenRect.width + anchors.right: actionPanelWidget.left + anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.bottom: actionPanelWidget.bottom + anchors.bottomMargin: UM.Theme.getSize("thick_margin").height * 2 + visible: actionPanelWidget.visible + Row + { + id: additionalComponentsRow + anchors.verticalCenter: parent.verticalCenter + spacing: UM.Theme.getSize("default_margin").width + } + } + + Component.onCompleted: base.addAdditionalComponents() + + Connections + { + target: CuraApplication + onAdditionalComponentsChanged: base.addAdditionalComponents() + } + + function addAdditionalComponents() + { + for (var component in CuraApplication.additionalComponents["saveButton"]) + { + CuraApplication.additionalComponents["saveButton"][component].parent = additionalComponentsRow + } + } +} \ No newline at end of file diff --git a/resources/qml/ActionPanel/OutputDevicesActionButton.qml b/resources/qml/ActionPanel/OutputDevicesActionButton.qml new file mode 100644 index 0000000000..866b8cc627 --- /dev/null +++ b/resources/qml/ActionPanel/OutputDevicesActionButton.qml @@ -0,0 +1,116 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 + +import UM 1.1 as UM +import Cura 1.0 as Cura + +Item +{ + id: widget + + function requestWriteToDevice() + { + UM.OutputDeviceManager.requestWriteToDevice(UM.OutputDeviceManager.activeDevice, PrintInformation.jobName, + { "filter_by_machine": true, "preferred_mimetypes": Cura.MachineManager.activeMachine.preferred_output_file_formats }); + } + + Cura.PrimaryButton + { + id: saveToButton + height: parent.height + fixedWidthMode: true + cornerSide: deviceSelectionMenu.visible ? Cura.RoundedRectangle.Direction.Left : Cura.RoundedRectangle.Direction.All + + anchors + { + top: parent.top + left: parent.left + right: deviceSelectionMenu.visible ? deviceSelectionMenu.left : parent.right + } + + tooltip: UM.OutputDeviceManager.activeDeviceDescription + + text: UM.OutputDeviceManager.activeDeviceShortDescription + + onClicked: + { + forceActiveFocus() + widget.requestWriteToDevice() + } + } + + Cura.ActionButton + { + id: deviceSelectionMenu + height: parent.height + + shadowEnabled: true + shadowColor: UM.Theme.getColor("primary_shadow") + cornerSide: Cura.RoundedRectangle.Direction.Right + + anchors + { + top: parent.top + right: parent.right + } + + leftPadding: UM.Theme.getSize("narrow_margin").width //Need more space than usual here for wide text. + rightPadding: UM.Theme.getSize("narrow_margin").width + iconSource: popup.opened ? UM.Theme.getIcon("arrow_top") : UM.Theme.getIcon("arrow_bottom") + color: UM.Theme.getColor("action_panel_secondary") + visible: (devicesModel.deviceCount > 1) + + onClicked: popup.opened ? popup.close() : popup.open() + + Popup + { + id: popup + padding: 0 + + y: -height + x: parent.width - width + + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + + contentItem: ColumnLayout + { + Repeater + { + model: devicesModel + + delegate: Cura.ActionButton + { + text: model.description + visible: model.id != UM.OutputDeviceManager.activeDevice // Don't show the active device in the list + color: "transparent" + cornerRadius: 0 + hoverColor: UM.Theme.getColor("primary") + Layout.fillWidth: true + // The total width of the popup should be defined by the largest button. By stating that each + // button should be minimally the size of it's content (aka; implicitWidth) we can ensure that. + Layout.minimumWidth: implicitWidth + Layout.preferredHeight: widget.height + onClicked: + { + UM.OutputDeviceManager.setActiveDevice(model.id) + popup.close() + } + } + } + } + + background: Rectangle + { + opacity: visible ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } + color: UM.Theme.getColor("action_panel_secondary") + } + } + } + + UM.OutputDevicesModel { id: devicesModel } +} \ No newline at end of file diff --git a/resources/qml/ActionPanel/OutputProcessWidget.qml b/resources/qml/ActionPanel/OutputProcessWidget.qml new file mode 100644 index 0000000000..f4505c620c --- /dev/null +++ b/resources/qml/ActionPanel/OutputProcessWidget.qml @@ -0,0 +1,135 @@ +// Copyright (c) 2019 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 + +import UM 1.1 as UM +import Cura 1.0 as Cura + + +// This element contains all the elements the user needs to visualize the data +// that is gather after the slicing process, such as printint time, material usage, ... +// There are also two buttons: one to previsualize the output layers, and the other to +// select what to do with it (such as print over network, save to file, ...) +Column +{ + id: widget + + spacing: UM.Theme.getSize("thin_margin").height + property bool preSlicedData: PrintInformation.preSliced + property alias hasPreviewButton: previewStageShortcut.visible + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + Item + { + id: information + width: parent.width + height: childrenRect.height + + PrintInformationWidget + { + id: printInformationPanel + visible: !preSlicedData + anchors.right: parent.right + } + + Column + { + id: timeAndCostsInformation + spacing: UM.Theme.getSize("thin_margin").height + + anchors + { + left: parent.left + right: parent.right + } + + Cura.IconWithText + { + id: estimatedTime + width: parent.width + + text: preSlicedData ? catalog.i18nc("@label", "No time estimation available") : PrintInformation.currentPrintTime.getDisplayString(UM.DurationFormat.Long) + source: UM.Theme.getIcon("clock") + font: UM.Theme.getFont("medium_bold") + } + + Cura.IconWithText + { + id: estimatedCosts + width: parent.width + + property var printMaterialLengths: PrintInformation.materialLengths + property var printMaterialWeights: PrintInformation.materialWeights + + text: + { + if (preSlicedData) + { + return catalog.i18nc("@label", "No cost estimation available") + } + var totalLengths = 0 + var totalWeights = 0 + if (printMaterialLengths) + { + for(var index = 0; index < printMaterialLengths.length; index++) + { + if(printMaterialLengths[index] > 0) + { + totalLengths += printMaterialLengths[index] + totalWeights += Math.round(printMaterialWeights[index]) + } + } + } + return totalWeights + "g · " + totalLengths.toFixed(2) + "m" + } + source: UM.Theme.getIcon("spool") + } + } + } + + Item + { + id: buttonRow + anchors.right: parent.right + anchors.left: parent.left + height: UM.Theme.getSize("action_button").height + + Cura.SecondaryButton + { + id: previewStageShortcut + + anchors + { + left: parent.left + right: outputDevicesButton.left + rightMargin: UM.Theme.getSize("default_margin").width + } + + height: UM.Theme.getSize("action_button").height + text: catalog.i18nc("@button", "Preview") + tooltip: text + fixedWidthMode: true + + toolTipContentAlignment: Cura.ToolTip.ContentAlignment.AlignLeft + + onClicked: UM.Controller.setActiveStage("PreviewStage") + } + + Cura.OutputDevicesActionButton + { + id: outputDevicesButton + + anchors.right: parent.right + width: previewStageShortcut.visible ? UM.Theme.getSize("action_button").width : parent.width + height: UM.Theme.getSize("action_button").height + } + } +} \ No newline at end of file diff --git a/resources/qml/ActionPanel/PrintInformationWidget.qml b/resources/qml/ActionPanel/PrintInformationWidget.qml new file mode 100644 index 0000000000..2e108b05d7 --- /dev/null +++ b/resources/qml/ActionPanel/PrintInformationWidget.qml @@ -0,0 +1,58 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 + +import UM 1.1 as UM +import Cura 1.0 as Cura + +UM.RecolorImage +{ + id: widget + + source: UM.Theme.getIcon("info") + width: visible ? UM.Theme.getSize("section_icon").width : 0 + height: UM.Theme.getSize("section_icon").height + + color: UM.Theme.getColor("icon") + + MouseArea + { + anchors.fill: parent + hoverEnabled: true + onEntered: popup.open() + onExited: popup.close() + } + + Popup + { + id: popup + + y: -(height + UM.Theme.getSize("default_arrow").height + UM.Theme.getSize("thin_margin").height) + x: parent.width - width + UM.Theme.getSize("thin_margin").width + + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + + opacity: opened ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } + + contentItem: PrintJobInformation + { + id: printJobInformation + width: UM.Theme.getSize("action_panel_information_widget").width + } + + background: UM.PointingRectangle + { + color: UM.Theme.getColor("tool_panel_background") + borderColor: UM.Theme.getColor("lining") + borderWidth: UM.Theme.getSize("default_lining").width + + target: Qt.point(width - (widget.width / 2) - UM.Theme.getSize("thin_margin").width, + height + UM.Theme.getSize("default_arrow").height - UM.Theme.getSize("thin_margin").height) + + arrowSize: UM.Theme.getSize("default_arrow").width + } + } +} \ No newline at end of file diff --git a/resources/qml/ActionPanel/PrintJobInformation.qml b/resources/qml/ActionPanel/PrintJobInformation.qml new file mode 100644 index 0000000000..4b8461987b --- /dev/null +++ b/resources/qml/ActionPanel/PrintJobInformation.qml @@ -0,0 +1,207 @@ +// Copyright (c) 2019 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 + +import UM 1.1 as UM +import Cura 1.0 as Cura + +Column +{ + id: base + spacing: UM.Theme.getSize("default_margin").width + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + Column + { + id: timeSpecification + width: parent.width + topPadding: UM.Theme.getSize("default_margin").height + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + + Label + { + text: catalog.i18nc("@label", "Time specification").toUpperCase() + color: UM.Theme.getColor("primary") + font: UM.Theme.getFont("default_bold") + renderType: Text.NativeRendering + } + + Label + { + id: byLineType + + property var printDuration: PrintInformation.currentPrintTime + property var columnWidthMultipliers: [ 0.45, 0.3, 0.25 ] + property var columnHorizontalAligns: [ Text.AlignLeft, Text.AlignHCenter, Text.AlignRight ] + + function getMaterialTable() + { + var result = [] + + // All the time information for the different features is achieved + var printTime = PrintInformation.getFeaturePrintTimes() + var totalSeconds = parseInt(printDuration.getDisplayString(UM.DurationFormat.Seconds)) + + // A message is created and displayed when the user hover the time label + for(var feature in printTime) + { + if(!printTime[feature].isTotalDurationZero) + { + var row = [] + row.push(feature + ": ") + row.push("%1".arg(printTime[feature].getDisplayString(UM.DurationFormat.ISO8601).slice(0,-3))) + row.push("%1%".arg(Math.round(100 * parseInt(printTime[feature].getDisplayString(UM.DurationFormat.Seconds)) / totalSeconds))) + result.push(row) + } + } + + return result + } + + Column + { + Repeater + { + model: byLineType.getMaterialTable() + Row + { + Repeater + { + model: modelData + Label + { + width: Math.round(byLineType.width * byLineType.columnWidthMultipliers[index]) + height: contentHeight + horizontalAlignment: byLineType.columnHorizontalAligns[index] + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default") + wrapMode: Text.WrapAnywhere + text: modelData + renderType: Text.NativeRendering + } + } + } + } + } + + width: parent.width - 2 * UM.Theme.getSize("default_margin").width + height: childrenRect.height + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + textFormat: Text.RichText + } + } + + Column + { + id: materialSpecification + width: parent.width + bottomPadding: UM.Theme.getSize("default_margin").height + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + + Label + { + text: catalog.i18nc("@label", "Material specification").toUpperCase() + color: UM.Theme.getColor("primary") + font: UM.Theme.getFont("default_bold") + renderType: Text.NativeRendering + } + + Label + { + id: byMaterialType + + property var printMaterialLengths: PrintInformation.materialLengths + property var printMaterialWeights: PrintInformation.materialWeights + property var printMaterialCosts: PrintInformation.materialCosts + property var printMaterialNames: PrintInformation.materialNames + property var columnWidthMultipliers: [ 0.46, 0.18, 0.18, 0.18 ] + property var columnHorizontalAligns: [ Text.AlignLeft, Text.AlignHCenter, Text.AlignHCenter, Text.AlignRight ] + + function getMaterialTable() + { + var result = [] + + var lengths = [] + var weights = [] + var costs = [] + var names = [] + if(printMaterialLengths) + { + for(var index = 0; index < printMaterialLengths.length; index++) + { + if(printMaterialLengths[index] > 0) + { + names.push(printMaterialNames[index]) + lengths.push(printMaterialLengths[index].toFixed(2)) + weights.push(String(Math.round(printMaterialWeights[index]))) + var cost = printMaterialCosts[index] == undefined ? 0 : printMaterialCosts[index].toFixed(2) + costs.push(cost) + } + } + } + if(lengths.length == 0) + { + lengths = ["0.00"] + weights = ["0"] + costs = ["0.00"] + } + + for(var index = 0; index < lengths.length; index++) + { + var row = [] + row.push("%1".arg(names[index])) + row.push(catalog.i18nc("@label m for meter", "%1m").arg(lengths[index])) + row.push(catalog.i18nc("@label g for grams", "%1g").arg(weights[index])) + row.push("%1 %2".arg(UM.Preferences.getValue("cura/currency")).arg(costs[index])) + result.push(row) + } + + return result + } + + Column + { + Repeater + { + model: byMaterialType.getMaterialTable() + Row + { + Repeater + { + model: modelData + Label + { + width: Math.round(byMaterialType.width * byMaterialType.columnWidthMultipliers[index]) + height: contentHeight + horizontalAlignment: byMaterialType.columnHorizontalAligns[index] + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default") + wrapMode: Text.WrapAnywhere + text: modelData + renderType: Text.NativeRendering + } + } + } + } + } + + width: parent.width - 2 * UM.Theme.getSize("default_margin").width + height: childrenRect.height + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + textFormat: Text.RichText + } + } +} \ No newline at end of file diff --git a/resources/qml/ActionPanel/SliceProcessWidget.qml b/resources/qml/ActionPanel/SliceProcessWidget.qml new file mode 100644 index 0000000000..21d6fac2d8 --- /dev/null +++ b/resources/qml/ActionPanel/SliceProcessWidget.qml @@ -0,0 +1,174 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 1.4 as Controls1 + +import UM 1.1 as UM +import Cura 1.0 as Cura + + +// This element contains all the elements the user needs to create a printjob from the +// model(s) that is(are) on the buildplate. Mainly the button to start/stop the slicing +// process and a progress bar to see the progress of the process. +Column +{ + id: widget + + spacing: UM.Theme.getSize("thin_margin").height + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + property real progress: UM.Backend.progress + property int backendState: UM.Backend.state + + function sliceOrStopSlicing() + { + if (widget.backendState == UM.Backend.NotStarted) + { + CuraApplication.backend.forceSlice() + } + else + { + CuraApplication.backend.stopSlicing() + } + } + + Label + { + id: autoSlicingLabel + width: parent.width + visible: progressBar.visible + + text: catalog.i18nc("@label:PrintjobStatus", "Slicing...") + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } + + Cura.IconWithText + { + id: unableToSliceMessage + width: parent.width + visible: widget.backendState == UM.Backend.Error + + text: catalog.i18nc("@label:PrintjobStatus", "Unable to Slice") + source: UM.Theme.getIcon("warning") + iconColor: UM.Theme.getColor("warning") + } + + // Progress bar, only visible when the backend is in the process of slice the printjob + ProgressBar + { + id: progressBar + width: parent.width + height: UM.Theme.getSize("progressbar").height + value: progress + indeterminate: widget.backendState == UM.Backend.NotStarted + visible: (widget.backendState == UM.Backend.Processing || (prepareButtons.autoSlice && widget.backendState == UM.Backend.NotStarted)) + + background: Rectangle + { + anchors.fill: parent + radius: UM.Theme.getSize("progressbar_radius").width + color: UM.Theme.getColor("progressbar_background") + } + + contentItem: Item + { + anchors.fill: parent + Rectangle + { + width: progressBar.visualPosition * parent.width + height: parent.height + radius: UM.Theme.getSize("progressbar_radius").width + color: UM.Theme.getColor("progressbar_control") + } + } + } + + Item + { + id: prepareButtons + // Get the current value from the preferences + property bool autoSlice: UM.Preferences.getValue("general/auto_slice") + // Disable the slice process when + + width: parent.width + height: UM.Theme.getSize("action_button").height + visible: !autoSlice + Cura.PrimaryButton + { + id: sliceButton + fixedWidthMode: true + + height: parent.height + + anchors.right: parent.right + anchors.left: parent.left + + text: catalog.i18nc("@button", "Slice") + tooltip: catalog.i18nc("@label", "Start the slicing process") + enabled: widget.backendState != UM.Backend.Error + visible: widget.backendState == UM.Backend.NotStarted || widget.backendState == UM.Backend.Error + onClicked: sliceOrStopSlicing() + } + + Cura.SecondaryButton + { + id: cancelButton + fixedWidthMode: true + height: parent.height + anchors.left: parent.left + + anchors.right: parent.right + text: catalog.i18nc("@button", "Cancel") + enabled: sliceButton.enabled + visible: !sliceButton.visible + onClicked: sliceOrStopSlicing() + } + } + + + // React when the user changes the preference of having the auto slice enabled + Connections + { + target: UM.Preferences + onPreferenceChanged: + { + if (preference !== "general/auto_slice") + { + return; + } + + var autoSlice = UM.Preferences.getValue("general/auto_slice") + if(prepareButtons.autoSlice != autoSlice) + { + prepareButtons.autoSlice = autoSlice + if(autoSlice) + { + CuraApplication.backend.forceSlice() + } + } + } + } + + // Shortcut for "slice/stop" + Controls1.Action + { + shortcut: "Ctrl+P" + onTriggered: + { + if (sliceButton.enabled) + { + sliceOrStopSlicing() + } + } + } +} diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 21e6eebf58..1389801bca 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2015 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. pragma Singleton @@ -23,8 +23,6 @@ Item property alias viewLeftSideCamera: viewLeftSideCameraAction; property alias viewRightSideCamera: viewRightSideCameraAction; - property alias expandSidebar: expandSidebarAction; - property alias deleteSelection: deleteSelectionAction; property alias centerSelection: centerSelectionAction; property alias multiplySelection: multiplySelectionAction; @@ -58,9 +56,9 @@ Item property alias preferences: preferencesAction; - property alias showEngineLog: showEngineLogAction; property alias showProfileFolder: showProfileFolderAction; property alias documentation: documentationAction; + property alias showTroubleshooting: showTroubleShootingAction property alias reportBug: reportBugAction; property alias about: aboutAction; @@ -70,19 +68,28 @@ Item property alias browsePackages: browsePackagesAction - UM.I18nCatalog{id: catalog; name:"cura"} + UM.I18nCatalog{id: catalog; name: "cura"} + + + Action + { + id: showTroubleShootingAction + onTriggered: Qt.openUrlExternally("https://ultimaker.com/en/troubleshooting") + text: catalog.i18nc("@action:inmenu", "Show Online Troubleshooting Guide"); + } Action { id:toggleFullScreenAction - text: catalog.i18nc("@action:inmenu","Toggle Fu&ll Screen"); + shortcut: StandardKey.FullScreen; + text: catalog.i18nc("@action:inmenu", "Toggle Full Screen"); iconName: "view-fullscreen"; } Action { id: undoAction; - text: catalog.i18nc("@action:inmenu menubar:edit","&Undo"); + text: catalog.i18nc("@action:inmenu menubar:edit", "&Undo"); iconName: "edit-undo"; shortcut: StandardKey.Undo; onTriggered: UM.OperationStack.undo(); @@ -110,35 +117,35 @@ Item Action { id: view3DCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&3D View"); + text: catalog.i18nc("@action:inmenu menubar:view","3D View"); onTriggered: UM.Controller.rotateView("3d", 0); } Action { id: viewFrontCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&Front View"); + text: catalog.i18nc("@action:inmenu menubar:view","Front View"); onTriggered: UM.Controller.rotateView("home", 0); } Action { id: viewTopCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&Top View"); + text: catalog.i18nc("@action:inmenu menubar:view","Top View"); onTriggered: UM.Controller.rotateView("y", 90); } Action { id: viewLeftSideCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&Left Side View"); + text: catalog.i18nc("@action:inmenu menubar:view","Left Side View"); onTriggered: UM.Controller.rotateView("x", 90); } Action { id: viewRightSideCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","&Right Side View"); + text: catalog.i18nc("@action:inmenu menubar:view","Right Side View"); onTriggered: UM.Controller.rotateView("x", -90); } @@ -167,6 +174,7 @@ Item id: manageMaterialsAction text: catalog.i18nc("@action:inmenu", "Manage Materials...") iconName: "configure" + shortcut: "Ctrl+K" } Action @@ -181,7 +189,7 @@ Item { id: resetProfileAction; enabled: Cura.MachineManager.hasUserSettings - text: catalog.i18nc("@action:inmenu menubar:profile","&Discard current changes"); + text: catalog.i18nc("@action:inmenu menubar:profile", "&Discard current changes"); onTriggered: { forceActiveFocus(); @@ -193,20 +201,21 @@ Item { id: addProfileAction; enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings - text: catalog.i18nc("@action:inmenu menubar:profile","&Create profile from current settings/overrides..."); + text: catalog.i18nc("@action:inmenu menubar:profile", "&Create profile from current settings/overrides..."); } Action { - id: manageProfilesAction; - text: catalog.i18nc("@action:inmenu menubar:profile","Manage Profiles..."); - iconName: "configure"; + id: manageProfilesAction + text: catalog.i18nc("@action:inmenu menubar:profile", "Manage Profiles...") + iconName: "configure" + shortcut: "Ctrl+J" } Action { id: documentationAction; - text: catalog.i18nc("@action:inmenu menubar:help","Show Online &Documentation"); + text: catalog.i18nc("@action:inmenu menubar:help", "Show Online &Documentation"); iconName: "help-contents"; shortcut: StandardKey.Help; onTriggered: CuraActions.openDocumentation(); @@ -214,7 +223,7 @@ Item Action { id: reportBugAction; - text: catalog.i18nc("@action:inmenu menubar:help","Report a &Bug"); + text: catalog.i18nc("@action:inmenu menubar:help", "Report a &Bug"); iconName: "tools-report-bug"; onTriggered: CuraActions.openBugReportPage(); } @@ -222,30 +231,20 @@ Item Action { id: aboutAction; - text: catalog.i18nc("@action:inmenu menubar:help","&About..."); + text: catalog.i18nc("@action:inmenu menubar:help", "About..."); iconName: "help-about"; } Action { id: deleteSelectionAction; - text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete &Selected Model", "Delete &Selected Models", UM.Selection.selectionCount); + text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete Selected Model", "Delete Selected Models", UM.Selection.selectionCount); enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection; iconName: "edit-delete"; shortcut: StandardKey.Delete; onTriggered: CuraActions.deleteSelection(); } - Action //Also add backspace as the same function as delete because on Macintosh keyboards the button called "delete" is actually a backspace, and the user expects it to function as a delete. - { - id: backspaceSelectionAction - text: catalog.i18ncp("@action:inmenu menubar:edit", "Delete &Selected Model", "Delete &Selected Models", UM.Selection.selectionCount) - enabled: UM.Controller.toolsEnabled && UM.Selection.hasSelection - iconName: "edit-delete" - shortcut: StandardKey.Backspace - onTriggered: CuraActions.deleteSelection() - } - Action { id: centerSelectionAction; @@ -328,7 +327,7 @@ Item Action { id: selectAllAction; - text: catalog.i18nc("@action:inmenu menubar:edit","&Select All Models"); + text: catalog.i18nc("@action:inmenu menubar:edit","Select All Models"); enabled: UM.Controller.toolsEnabled; iconName: "edit-select-all"; shortcut: "Ctrl+A"; @@ -338,7 +337,7 @@ Item Action { id: deleteAllAction; - text: catalog.i18nc("@action:inmenu menubar:edit","&Clear Build Plate"); + text: catalog.i18nc("@action:inmenu menubar:edit","Clear Build Plate"); enabled: UM.Controller.toolsEnabled; iconName: "edit-delete"; shortcut: "Ctrl+D"; @@ -348,7 +347,7 @@ Item Action { id: reloadAllAction; - text: catalog.i18nc("@action:inmenu menubar:file","Re&load All Models"); + text: catalog.i18nc("@action:inmenu menubar:file","Reload All Models"); iconName: "document-revert"; shortcut: "F5" onTriggered: CuraApplication.reloadAll(); @@ -386,7 +385,7 @@ Item Action { id: resetAllAction; - text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model &Transformations"); + text: catalog.i18nc("@action:inmenu menubar:edit","Reset All Model Transformations"); onTriggered: CuraApplication.resetAll(); } @@ -405,14 +404,6 @@ Item shortcut: StandardKey.New } - Action - { - id: showEngineLogAction; - text: catalog.i18nc("@action:inmenu menubar:help","Show Engine &Log..."); - iconName: "view-list-text"; - shortcut: StandardKey.WhatsThis; - } - Action { id: showProfileFolderAction; @@ -430,14 +421,7 @@ Item Action { id: browsePackagesAction - text: catalog.i18nc("@action:menu", "Browse packages...") + text: catalog.i18nc("@action:menu", "&Marketplace") iconName: "plugins_browse" } - - Action - { - id: expandSidebarAction; - text: catalog.i18nc("@action:inmenu menubar:view","Expand/Collapse Sidebar"); - shortcut: "Ctrl+E"; - } } diff --git a/resources/qml/BorderGroup.qml b/resources/qml/BorderGroup.qml new file mode 100644 index 0000000000..38ad9fadff --- /dev/null +++ b/resources/qml/BorderGroup.qml @@ -0,0 +1,10 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.0 + +QtObject +{ + property real width: 0 + property color color: "black" +} diff --git a/resources/qml/CheckBoxWithTooltip.qml b/resources/qml/CheckBoxWithTooltip.qml new file mode 100644 index 0000000000..403efb4d7b --- /dev/null +++ b/resources/qml/CheckBoxWithTooltip.qml @@ -0,0 +1,63 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 + +import UM 1.3 as UM + +CheckBox +{ + id: checkbox + hoverEnabled: true + + property alias tooltip: tooltip.text + + indicator: Rectangle + { + implicitWidth: UM.Theme.getSize("checkbox").width + implicitHeight: UM.Theme.getSize("checkbox").height + x: 0 + anchors.verticalCenter: parent.verticalCenter + color: UM.Theme.getColor("main_background") + radius: UM.Theme.getSize("checkbox_radius").width + border.width: UM.Theme.getSize("default_lining").width + border.color: checkbox.hovered ? UM.Theme.getColor("checkbox_border_hover") : UM.Theme.getColor("checkbox_border") + + UM.RecolorImage + { + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + width: Math.round(parent.width / 2.5) + height: Math.round(parent.height / 2.5) + sourceSize.height: width + color: UM.Theme.getColor("checkbox_mark") + source: UM.Theme.getIcon("check") + opacity: checkbox.checked + Behavior on opacity { NumberAnimation { duration: 100; } } + } + } + + contentItem: Label + { + anchors + { + left: checkbox.indicator.right + leftMargin: UM.Theme.getSize("narrow_margin").width + } + text: checkbox.text + color: UM.Theme.getColor("checkbox_text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + ToolTip + { + id: tooltip + text: "" + delay: 500 + visible: text != "" && checkbox.hovered + } +} diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 60f6e77ea9..44ff31ef31 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2017 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 @@ -6,54 +6,42 @@ import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import QtQuick.Layouts 1.1 import QtQuick.Dialogs 1.2 +import QtGraphicalEffects 1.0 import UM 1.3 as UM -import Cura 1.0 as Cura +import Cura 1.1 as Cura +import "Dialogs" import "Menus" +import "MainWindow" UM.MainWindow { id: base - //: Cura application window title - title: catalog.i18nc("@title:window","Ultimaker Cura"); - viewportRect: Qt.rect(0, 0, (base.width - sidebar.width) / base.width, 1.0) - property bool showPrintMonitor: false + // Cura application window title + title: catalog.i18nc("@title:window", "Ultimaker Cura") backgroundColor: UM.Theme.getColor("viewport_background") - // This connection is here to support legacy printer output devices that use the showPrintMonitor signal on Application to switch to the monitor stage - // It should be phased out in newer plugin versions. - Connections + UM.I18nCatalog { - target: CuraApplication - onShowPrintMonitor: { - if (show) { - UM.Controller.setActiveStage("MonitorStage") - } else { - UM.Controller.setActiveStage("PrepareStage") - } - } + id: catalog + name: "cura" } - onWidthChanged: + function showTooltip(item, position, text) { - // If slidebar is collapsed then it should be invisible - // otherwise after the main_window resize the sidebar will be fully re-drawn - if (sidebar.collapsed){ - if (sidebar.visible == true){ - sidebar.visible = false - sidebar.initialWidth = 0 - } - } - else{ - if (sidebar.visible == false){ - sidebar.visible = true - sidebar.initialWidth = UM.Theme.getSize("sidebar").width - } - } + tooltip.text = text; + position = item.mapToItem(backgroundItem, position.x - UM.Theme.getSize("default_arrow").width, position.y); + tooltip.show(position); } + function hideTooltip() + { + tooltip.hide(); + } + + Component.onCompleted: { CuraApplication.setMinimumWindowSize(UM.Theme.getSize("window_minimum_size")) @@ -73,12 +61,12 @@ UM.MainWindow Item { - id: backgroundItem; - anchors.fill: parent; - UM.I18nCatalog{id: catalog; name:"cura"} + id: backgroundItem + anchors.fill: parent signal hasMesh(string name) //this signal sends the filebase name so it can be used for the JobSpecs.qml - function getMeshName(path){ + function getMeshName(path) + { //takes the path the complete path of the meshname and returns only the filebase var fileName = path.slice(path.lastIndexOf("/") + 1) var fileBase = fileName.slice(0, fileName.indexOf(".")) @@ -86,245 +74,97 @@ UM.MainWindow } //DeleteSelection on the keypress backspace event - Keys.onPressed: { + Keys.onPressed: + { if (event.key == Qt.Key_Backspace) { Cura.Actions.deleteSelection.trigger() } } - UM.ApplicationMenu + ApplicationMenu { - id: menu + id: applicationMenu window: base - - Menu - { - id: fileMenu - title: catalog.i18nc("@title:menu menubar:toplevel","&File"); - MenuItem - { - action: Cura.Actions.newProject; - } - - MenuItem - { - action: Cura.Actions.open; - } - - RecentFilesMenu { } - - MenuItem - { - id: saveWorkspaceMenu - text: catalog.i18nc("@title:menu menubar:file","&Save...") - onTriggered: - { - var args = { "filter_by_machine": false, "file_type": "workspace", "preferred_mimetype": "application/x-curaproject+xml" }; - if(UM.Preferences.getValue("cura/dialog_on_project_save")) - { - saveWorkspaceDialog.args = args; - saveWorkspaceDialog.open() - } - else - { - UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, args) - } - } - } - - MenuSeparator { } - - MenuItem - { - id: saveAsMenu - text: catalog.i18nc("@title:menu menubar:file", "&Export...") - onTriggered: - { - var localDeviceId = "local_file"; - UM.OutputDeviceManager.requestWriteToDevice(localDeviceId, PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetype": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}); - } - } - - MenuItem - { - text: catalog.i18nc("@action:inmenu menubar:file", "Export Selection..."); - enabled: UM.Selection.hasSelection; - iconName: "document-save-as"; - onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file", PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetype": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}); - } - - MenuSeparator { } - - MenuItem { action: Cura.Actions.reloadAll; } - - MenuSeparator { } - - MenuItem { action: Cura.Actions.quit; } - } - - Menu - { - title: catalog.i18nc("@title:menu menubar:toplevel","&Edit"); - - MenuItem { action: Cura.Actions.undo; } - MenuItem { action: Cura.Actions.redo; } - MenuSeparator { } - MenuItem { action: Cura.Actions.selectAll; } - MenuItem { action: Cura.Actions.arrangeAll; } - MenuItem { action: Cura.Actions.deleteSelection; } - MenuItem { action: Cura.Actions.deleteAll; } - MenuItem { action: Cura.Actions.resetAllTranslation; } - MenuItem { action: Cura.Actions.resetAll; } - MenuSeparator { } - MenuItem { action: Cura.Actions.groupObjects;} - MenuItem { action: Cura.Actions.mergeObjects;} - MenuItem { action: Cura.Actions.unGroupObjects;} - } - - ViewMenu { title: catalog.i18nc("@title:menu", "&View") } - - Menu - { - id: settingsMenu - title: catalog.i18nc("@title:menu", "&Settings") - - PrinterMenu { title: catalog.i18nc("@title:menu menubar:toplevel", "&Printer") } - - Instantiator - { - model: Cura.ExtrudersModel { simpleNames: true } - Menu { - title: model.name - - NozzleMenu { title: Cura.MachineManager.activeDefinitionVariantsName; visible: Cura.MachineManager.hasVariants; extruderIndex: index } - MaterialMenu { title: catalog.i18nc("@title:menu", "&Material"); visible: Cura.MachineManager.hasMaterials; extruderIndex: index } - - MenuSeparator - { - visible: Cura.MachineManager.hasVariants || Cura.MachineManager.hasMaterials - } - - MenuItem - { - text: catalog.i18nc("@action:inmenu", "Set as Active Extruder") - onTriggered: Cura.MachineManager.setExtruderIndex(model.index) - } - - MenuItem - { - text: catalog.i18nc("@action:inmenu", "Enable Extruder") - onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, true) - visible: !Cura.MachineManager.getExtruder(model.index).isEnabled - } - - MenuItem - { - text: catalog.i18nc("@action:inmenu", "Disable Extruder") - onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, false) - visible: Cura.MachineManager.getExtruder(model.index).isEnabled - enabled: Cura.MachineManager.numberExtrudersEnabled > 1 - } - - } - onObjectAdded: settingsMenu.insertItem(index, object) - onObjectRemoved: settingsMenu.removeItem(object) - } - - // TODO Only show in dev mode. Remove check when feature ready - BuildplateMenu { title: catalog.i18nc("@title:menu", "&Build plate"); visible: CuraSDKVersion == "dev" ? Cura.MachineManager.hasVariantBuildplates : false } - ProfileMenu { title: catalog.i18nc("@title:menu", "&Profile"); } - - MenuSeparator { } - - MenuItem { action: Cura.Actions.configureSettingVisibility } - } - - Menu - { - id: extension_menu - title: catalog.i18nc("@title:menu menubar:toplevel","E&xtensions"); - - Instantiator - { - id: extensions - model: UM.ExtensionModel { } - - Menu - { - id: sub_menu - title: model.name; - visible: actions != null - enabled: actions != null - Instantiator - { - model: actions - MenuItem - { - text: model.text - onTriggered: extensions.model.subMenuTriggered(name, model.text) - } - onObjectAdded: sub_menu.insertItem(index, object) - onObjectRemoved: sub_menu.removeItem(object) - } - } - - onObjectAdded: extension_menu.insertItem(index, object) - onObjectRemoved: extension_menu.removeItem(object) - } - } - - Menu - { - id: plugin_menu - title: catalog.i18nc("@title:menu menubar:toplevel", "&Toolbox") - - MenuItem { action: Cura.Actions.browsePackages } - } - - Menu - { - title: catalog.i18nc("@title:menu menubar:toplevel","P&references"); - - MenuItem { action: Cura.Actions.preferences; } - } - - Menu - { - //: Help menu - title: catalog.i18nc("@title:menu menubar:toplevel","&Help"); - - MenuItem { action: Cura.Actions.showProfileFolder; } - MenuItem { action: Cura.Actions.documentation; } - MenuItem { action: Cura.Actions.reportBug; } - MenuSeparator { } - MenuItem { action: Cura.Actions.about; } - } - } - - UM.SettingPropertyProvider - { - id: machineExtruderCount - - containerStackId: Cura.MachineManager.activeMachineId - key: "machine_extruder_count" - watchedProperties: [ "value" ] - storeIndex: 0 } Item { - id: contentItem; + id: headerBackground + anchors + { + top: applicationMenu.bottom + left: parent.left + right: parent.right + } + height: stageMenu.source != "" ? Math.round(mainWindowHeader.height + stageMenu.height / 2) : mainWindowHeader.height - y: menu.height - width: parent.width; - height: parent.height - menu.height; + LinearGradient + { + anchors.fill: parent + start: Qt.point(0, 0) + end: Qt.point(parent.width, 0) + gradient: Gradient + { + GradientStop + { + position: 0.0 + color: UM.Theme.getColor("main_window_header_background") + } + GradientStop + { + position: 0.5 + color: UM.Theme.getColor("main_window_header_background_gradient") + } + GradientStop + { + position: 1.0 + color: UM.Theme.getColor("main_window_header_background") + } + } + } - Keys.forwardTo: menu + // This is a placehoder for adding a pattern in the header + Image + { + id: backgroundPattern + anchors.fill: parent + fillMode: Image.Tile + source: UM.Theme.getImage("header_pattern") + horizontalAlignment: Image.AlignLeft + verticalAlignment: Image.AlignTop + } + } + + MainWindowHeader + { + id: mainWindowHeader + anchors + { + left: parent.left + right: parent.right + top: applicationMenu.bottom + } + } + + Item + { + id: contentItem + + anchors + { + top: mainWindowHeader.bottom + bottom: parent.bottom + left: parent.left + right: parent.right + } + + Keys.forwardTo: applicationMenu DropArea { - anchors.fill: parent; + // The drop area is here to handle files being dropped onto Cura. + anchors.fill: parent onDropped: { if (drop.urls.length > 0) @@ -352,178 +192,155 @@ UM.MainWindow } } - JobSpecs - { - id: jobSpecs - anchors - { - bottom: parent.bottom; - right: sidebar.left; - bottomMargin: UM.Theme.getSize("default_margin").height; - rightMargin: UM.Theme.getSize("default_margin").width; - } - } - - Button - { - id: openFileButton; - text: catalog.i18nc("@action:button","Open File"); - iconSource: UM.Theme.getIcon("load") - style: UM.Theme.styles.tool_button - tooltip: "" - anchors - { - top: topbar.bottom; - topMargin: UM.Theme.getSize("default_margin").height; - left: parent.left; - } - action: Cura.Actions.open; - } - Toolbar { - id: toolbar; + // The toolbar is the left bar that is populated by all the tools (which are dynamicly populated by + // plugins) + id: toolbar property int mouseX: base.mouseX property int mouseY: base.mouseY - anchors { - top: openFileButton.bottom; - topMargin: UM.Theme.getSize("window_margin").height; - left: parent.left; + anchors + { + verticalCenter: parent.verticalCenter + left: parent.left } + visible: CuraApplication.platformActivity && !PrintInformation.preSliced } ObjectsList { - id: objectsList; - visible: UM.Preferences.getValue("cura/use_multi_build_plate"); + id: objectsList + 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 } - } - Topbar + JobSpecs { - id: topbar - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top + id: jobSpecs + visible: CuraApplication.platformActivity + anchors + { + left: parent.left + bottom: viewOrientationControls.top + margins: UM.Theme.getSize("default_margin").width + bottomMargin: UM.Theme.getSize("thin_margin").width + } + } + + ViewOrientationControls + { + id: viewOrientationControls + + anchors + { + left: parent.left + bottom: parent.bottom + margins: UM.Theme.getSize("default_margin").width + } } Loader { + // A stage can control this area. If nothing is set, it will therefore show the 3D view. id: main anchors { - top: topbar.bottom - bottom: parent.bottom + // Align to the top of the stageMenu since the stageMenu may not exist + top: stageMenu.source ? stageMenu.verticalCenter : parent.top left: parent.left - right: sidebar.left + right: parent.right + bottom: parent.bottom } - MouseArea - { - visible: UM.Controller.activeStage.mainComponent != "" - anchors.fill: parent - acceptedButtons: Qt.AllButtons - onWheel: wheel.accepted = true - } - - source: UM.Controller.activeStage.mainComponent + source: UM.Controller.activeStage != null ? UM.Controller.activeStage.mainComponent : "" } Loader { - id: sidebar - - property bool collapsed: false; - property var initialWidth: UM.Theme.getSize("sidebar").width; - - function callExpandOrCollapse() { - if (collapsed) { - sidebar.visible = true; - sidebar.initialWidth = UM.Theme.getSize("sidebar").width; - viewportRect = Qt.rect(0, 0, (base.width - sidebar.width) / base.width, 1.0); - expandSidebarAnimation.start(); - } else { - viewportRect = Qt.rect(0, 0, 1, 1.0); - collapseSidebarAnimation.start(); - } - collapsed = !collapsed; - UM.Preferences.setValue("cura/sidebar_collapsed", collapsed); - } + // The stage menu is, as the name implies, a menu that is defined by the active stage. + // Note that this menu does not need to be set at all! It's perfectly acceptable to have a stage + // without this menu! + id: stageMenu anchors { - top: topbar.top - bottom: parent.bottom + left: parent.left + right: parent.right + top: parent.top } - width: initialWidth - x: base.width - sidebar.width - source: UM.Controller.activeStage.sidebarComponent + height: UM.Theme.getSize("stage_menu").height + source: UM.Controller.activeStage != null ? UM.Controller.activeStage.stageMenuComponent : "" - NumberAnimation { - id: collapseSidebarAnimation - target: sidebar - properties: "x" - to: base.width - duration: 100 - } - - NumberAnimation { - id: expandSidebarAnimation - target: sidebar - properties: "x" - to: base.width - sidebar.width - duration: 100 - } - - Component.onCompleted: + // HACK: This is to ensure that the parent never gets set to null, as this wreaks havoc on the focus. + function onParentDestroyed() { - var sidebar_collapsed = UM.Preferences.getValue("cura/sidebar_collapsed"); - - if (sidebar_collapsed) - { - sidebar.collapsed = true; - viewportRect = Qt.rect(0, 0, 1, 1.0) - collapseSidebarAnimation.start(); - } + printSetupSelector.parent = stageMenu + printSetupSelector.visible = false } + property Item oldParent: null - MouseArea + // The printSetupSelector is defined here so that the setting list doesn't need to get re-instantiated + // Every time the stage is changed. + property var printSetupSelector: Cura.PrintSetupSelector { - visible: UM.Controller.activeStage.sidebarComponent != "" - anchors.fill: parent - acceptedButtons: Qt.AllButtons - onWheel: wheel.accepted = true + width: UM.Theme.getSize("print_setup_widget").width + height: UM.Theme.getSize("stage_menu").height + headerCornerSide: RoundedRectangle.Direction.Right + onParentChanged: + { + if(stageMenu.oldParent !=null) + { + stageMenu.oldParent.Component.destruction.disconnect(stageMenu.onParentDestroyed) + } + stageMenu.oldParent = parent + visible = parent != stageMenu + parent.Component.destruction.connect(stageMenu.onParentDestroyed) + } } } - UM.MessageStack { anchors { horizontalCenter: parent.horizontalCenter - horizontalCenterOffset: -(Math.round(UM.Theme.getSize("sidebar").width / 2)) - top: parent.verticalCenter; - bottom: parent.bottom; + top: parent.verticalCenter + bottom: parent.bottom bottomMargin: UM.Theme.getSize("default_margin").height } + + primaryButton: Component + { + Cura.PrimaryButton + { + text: model.name + height: UM.Theme.getSize("message_action_button").height + } + } + + secondaryButton: Component + { + Cura.SecondaryButton + { + text: model.name + height: UM.Theme.getSize("message_action_button").height + } + } } } - } - // Expand or collapse sidebar - Connections - { - target: Cura.Actions.expandSidebar - onTriggered: sidebar.callExpandOrCollapse() + PrintSetupTooltip + { + id: tooltip + } } UM.PreferencesDialog @@ -541,13 +358,10 @@ UM.MainWindow insertPage(2, catalog.i18nc("@title:tab", "Printers"), Qt.resolvedUrl("Preferences/MachinesPage.qml")); - insertPage(3, catalog.i18nc("@title:tab", "Materials"), Qt.resolvedUrl("Preferences/MaterialsPage.qml")); + insertPage(3, catalog.i18nc("@title:tab", "Materials"), Qt.resolvedUrl("Preferences/Materials/MaterialsPage.qml")); insertPage(4, catalog.i18nc("@title:tab", "Profiles"), Qt.resolvedUrl("Preferences/ProfilesPage.qml")); - // Remove plug-ins page because we will use the shiny new plugin browser: - removePage(5); - //Force refresh setPage(0); } @@ -560,13 +374,6 @@ UM.MainWindow } } - WorkspaceSummaryDialog - { - id: saveWorkspaceDialog - property var args - onYes: UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, args) - } - Connections { target: Cura.Actions.preferences @@ -579,33 +386,6 @@ UM.MainWindow onShowPreferencesWindow: preferences.visible = true } - MessageDialog - { - id: newProjectDialog - modality: Qt.ApplicationModal - title: catalog.i18nc("@title:window", "New project") - text: catalog.i18nc("@info:question", "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings.") - standardButtons: StandardButton.Yes | StandardButton.No - icon: StandardIcon.Question - onYes: - { - CuraApplication.deleteAll(); - Cura.Actions.resetProfile.trigger(); - } - } - - Connections - { - target: Cura.Actions.newProject - onTriggered: - { - if(Printer.platformActivity || Cura.MachineManager.hasUserSettings) - { - newProjectDialog.visible = true - } - } - } - Connections { target: Cura.Actions.addProfile @@ -663,19 +443,6 @@ UM.MainWindow } } - UM.ExtensionModel { - id: curaExtensions - } - - // show the plugin browser dialog - Connections - { - target: Cura.Actions.browsePackages - onTriggered: { - curaExtensions.callExtensionMethod("Toolbox", "browsePackages") - } - } - Timer { id: createProfileTimer @@ -696,7 +463,8 @@ UM.MainWindow } } - ContextMenu { + ContextMenu + { id: contextMenu } @@ -863,7 +631,8 @@ UM.MainWindow modality: Qt.ApplicationModal } - MessageDialog { + MessageDialog + { id: infoMultipleFilesWithGcodeDialog title: catalog.i18nc("@title:window", "Open File(s)") icon: StandardIcon.Information @@ -907,11 +676,6 @@ UM.MainWindow } } - EngineLog - { - id: engineLog; - } - Connections { target: Cura.Actions.showProfileFolder @@ -1054,10 +818,27 @@ UM.MainWindow { restart(); } - else if(Cura.MachineManager.activeMachineId == null || Cura.MachineManager.activeMachineId == "") + else if(Cura.MachineManager.activeMachine == null) { addMachineDialog.open(); } } } + + /** + * Function to check whether a QML object has a certain type. + * Taken from StackOverflow: https://stackoverflow.com/a/28384228 and + * adapted to our code style. + * Licensed under CC BY-SA 3.0. + * \param obj The QtObject to get the name of. + * \param class_name (str) The name of the class to check against. Has to be + * the QtObject class name, not the QML entity name. + */ + function qmlTypeOf(obj, class_name) + { + //className plus "(" is the class instance without modification. + //className plus "_QML" is the class instance with user-defined properties. + var str = obj.toString(); + return str.indexOf(class_name + "(") == 0 || str.indexOf(class_name + "_QML") == 0; + } } diff --git a/resources/qml/Dialogs/AboutDialog.qml b/resources/qml/Dialogs/AboutDialog.qml new file mode 100644 index 0000000000..584903dd60 --- /dev/null +++ b/resources/qml/Dialogs/AboutDialog.qml @@ -0,0 +1,172 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 +import QtQuick.Window 2.1 + +import UM 1.1 as UM + +UM.Dialog +{ + id: base + + //: About dialog title + title: catalog.i18nc("@title:window","About Cura") + + minimumWidth: 500 * screenScaleFactor + minimumHeight: 650 * screenScaleFactor + width: minimumWidth + height: minimumHeight + + Rectangle + { + id: header + width: parent.width + 2 * margin // margin from Dialog.qml + height: childrenRect.height + topPadding + + anchors.top: parent.top + anchors.topMargin: -margin + anchors.horizontalCenter: parent.horizontalCenter + + property real topPadding: UM.Theme.getSize("wide_margin").height + + color: UM.Theme.getColor("main_window_header_background") + + Image + { + id: logo + width: (base.minimumWidth * 0.85) | 0 + height: (width * (UM.Theme.getSize("logo").height / UM.Theme.getSize("logo").width)) | 0 + source: UM.Theme.getImage("logo") + sourceSize.width: width + sourceSize.height: height + + anchors.top: parent.top + anchors.topMargin: parent.topPadding + anchors.horizontalCenter: parent.horizontalCenter + + UM.I18nCatalog{id: catalog; name: "cura"} + } + + Label + { + id: version + + text: catalog.i18nc("@label","version: %1").arg(UM.Application.version) + font: UM.Theme.getFont("large_bold") + color: UM.Theme.getColor("button_text") + anchors.right : logo.right + anchors.top: logo.bottom + anchors.topMargin: (UM.Theme.getSize("default_margin").height / 2) | 0 + } + } + + Label + { + id: description + width: parent.width + + //: About dialog application description + text: catalog.i18nc("@label","End-to-end solution for fused filament 3D printing.") + font: UM.Theme.getFont("system") + wrapMode: Text.WordWrap + anchors.top: header.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + } + + Label + { + id: creditsNotes + width: parent.width + + //: About dialog application author note + text: catalog.i18nc("@info:credit","Cura is developed by Ultimaker B.V. in cooperation with the community.\nCura proudly uses the following open source projects:") + font: UM.Theme.getFont("system") + wrapMode: Text.WordWrap + anchors.top: description.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + } + + ScrollView + { + id: credits + anchors.top: creditsNotes.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + + width: parent.width + height: base.height - y - (2 * UM.Theme.getSize("default_margin").height + closeButton.height) + + ListView + { + id: projectsList + + width: parent.width + + delegate: Row + { + Label + { + text: "%2".arg(model.url).arg(model.name) + width: (projectsList.width * 0.25) | 0 + elide: Text.ElideRight + onLinkActivated: Qt.openUrlExternally(link) + } + Label + { + text: model.description + elide: Text.ElideRight + width: (projectsList.width * 0.6) | 0 + } + Label + { + text: model.license + elide: Text.ElideRight + width: (projectsList.width * 0.15) | 0 + } + } + model: ListModel + { + id: projectsModel + } + Component.onCompleted: + { + projectsModel.append({ name: "Cura", description: catalog.i18nc("@label", "Graphical user interface"), license: "LGPLv3", url: "https://github.com/Ultimaker/Cura" }); + projectsModel.append({ name: "Uranium", description: catalog.i18nc("@label", "Application framework"), license: "LGPLv3", url: "https://github.com/Ultimaker/Uranium" }); + projectsModel.append({ name: "CuraEngine", description: catalog.i18nc("@label", "G-code generator"), license: "AGPLv3", url: "https://github.com/Ultimaker/CuraEngine" }); + projectsModel.append({ name: "libArcus", description: catalog.i18nc("@label", "Interprocess communication library"), license: "LGPLv3", url: "https://github.com/Ultimaker/libArcus" }); + + projectsModel.append({ name: "Python", description: catalog.i18nc("@label", "Programming language"), license: "Python", url: "http://python.org/" }); + projectsModel.append({ name: "Qt5", description: catalog.i18nc("@label", "GUI framework"), license: "LGPLv3", url: "https://www.qt.io/" }); + projectsModel.append({ name: "PyQt", description: catalog.i18nc("@label", "GUI framework bindings"), license: "GPL", url: "https://riverbankcomputing.com/software/pyqt" }); + projectsModel.append({ name: "SIP", description: catalog.i18nc("@label", "C/C++ Binding library"), license: "GPL", url: "https://riverbankcomputing.com/software/sip" }); + projectsModel.append({ name: "Protobuf", description: catalog.i18nc("@label", "Data interchange format"), license: "BSD", url: "https://developers.google.com/protocol-buffers" }); + 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: "NetworkX", description: catalog.i18nc("@label", "Support library for analysis of complex networks"), license: "3-clause BSD", url: "https://networkx.github.io/" }); + 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: "Requests", description: catalog.i18nc("@Label", "Python HTTP library"), license: "GPL", url: "http://docs.python-requests.org" }); + + projectsModel.append({ name: "Noto Sans", description: catalog.i18nc("@label", "Font"), license: "Apache 2.0", url: "https://www.google.com/get/noto/" }); + projectsModel.append({ name: "Font-Awesome-SVG-PNG", description: catalog.i18nc("@label", "SVG icons"), license: "SIL OFL 1.1", url: "https://github.com/encharm/Font-Awesome-SVG-PNG" }); + projectsModel.append({ name: "AppImageKit", description: catalog.i18nc("@label", "Linux cross-distribution application deployment"), license: "MIT", url: "https://github.com/AppImage/AppImageKit" }); + } + } + } + + rightButtons: Button + { + //: Close about dialog button + id: closeButton + text: catalog.i18nc("@action:button","Close"); + + onClicked: base.visible = false; + } +} diff --git a/resources/qml/AddMachineDialog.qml b/resources/qml/Dialogs/AddMachineDialog.qml similarity index 58% rename from resources/qml/AddMachineDialog.qml rename to resources/qml/Dialogs/AddMachineDialog.qml index a635f1f8d1..f00359869c 100644 --- a/resources/qml/AddMachineDialog.qml +++ b/resources/qml/Dialogs/AddMachineDialog.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2017 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 @@ -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. { @@ -45,10 +46,52 @@ UM.Dialog } signal machineAdded(string id) + function getMachineName() { - var name = machineList.model.getItem(machineList.currentIndex) != undefined ? machineList.model.getItem(machineList.currentIndex).name : "" - return name + if (machineList.model.getItem(machineList.currentIndex) != undefined) + { + return machineList.model.getItem(machineList.currentIndex).name; + } + return ""; + } + + function getMachineMetaDataEntry(key) + { + if (machineList.model.getItem(machineList.currentIndex) != undefined) + { + return machineList.model.getItem(machineList.currentIndex).metadata[key]; + } + return ""; + } + + Label + { + id: titleLabel + + anchors + { + top: parent.top + left: parent.left + topMargin: UM.Theme.getSize("default_margin").height + } + text: catalog.i18nc("@title:tab", "Add a printer to Cura") + + font.pointSize: 18 + } + + Label + { + id: captionLabel + anchors + { + left: parent.left + top: titleLabel.bottom + topMargin: UM.Theme.getSize("default_margin").height + } + text: catalog.i18nc("@title:tab", "Select the printer you want to use from the list below.\n\nIf your printer is not in the list, use the \"Custom FFF Printer\" from the \"Custom\" category and adjust the settings to match your printer in the next dialog.") + width: parent.width + wrapMode: Text.WordWrap } ScrollView @@ -57,13 +100,22 @@ UM.Dialog anchors { - left: parent.left; - top: parent.top; - right: parent.right; - bottom: machineNameRow.top; + top: captionLabel.visible ? captionLabel.bottom : parent.top; + topMargin: captionLabel.visible ? UM.Theme.getSize("default_margin").height : 0; + bottom: addPrinterButton.top; bottomMargin: UM.Theme.getSize("default_margin").height } + width: Math.round(parent.width * 0.45) + + frameVisible: true; + Rectangle + { + parent: viewport + anchors.fill: parent + color: palette.light + } + ListView { id: machineList @@ -79,6 +131,7 @@ UM.Dialog section.property: "section" section.delegate: Button { + id: machineSectionButton text: section width: machineList.width style: ButtonStyle @@ -103,7 +156,6 @@ UM.Dialog anchors.rightMargin: UM.Theme.getSize("default_margin").width width: UM.Theme.getSize("standard_arrow").width height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width sourceSize.height: width color: palette.windowText source: base.activeCategory == section ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_right") @@ -114,11 +166,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.count; i++) + { var item = machineList.model.getItem(i); - if (item.section == section) { + if (item.section == section) + { machineList.currentIndex = i; break; } @@ -157,63 +212,85 @@ UM.Dialog PropertyChanges { target: machineButton; opacity: 0; height: 0; } } - - transitions: - [ - Transition - { - to: "collapsed"; - SequentialAnimation - { - NumberAnimation { property: "opacity"; duration: 75; } - NumberAnimation { property: "height"; duration: 75; } - } - }, - Transition - { - from: "collapsed"; - SequentialAnimation - { - NumberAnimation { property: "height"; duration: 75; } - NumberAnimation { property: "opacity"; duration: 75; } - } - } - ] } } } - Row + Column { - id: machineNameRow - anchors.bottom:parent.bottom - spacing: UM.Theme.getSize("default_margin").width - - Label + anchors { - text: catalog.i18nc("@label", "Printer Name:") - anchors.verticalCenter: machineName.verticalCenter + top: machinesHolder.top + left: machinesHolder.right + right: parent.right + leftMargin: UM.Theme.getSize("default_margin").width } - TextField + spacing: UM.Theme.getSize("default_margin").height + Label { - id: machineName + width: parent.width + wrapMode: Text.WordWrap text: getMachineName() - implicitWidth: UM.Theme.getSize("standard_list_input").width - maximumLength: 40 - //validator: Cura.MachineNameValidator { } //TODO: Gives a segfault in PyQt5.6. For now, we must use a signal on text changed. - validator: RegExpValidator + font.pointSize: 16 + elide: Text.ElideRight + } + Grid + { + width: parent.width + columns: 2 + rowSpacing: UM.Theme.getSize("default_lining").height + columnSpacing: UM.Theme.getSize("default_margin").width + verticalItemAlignment: Grid.AlignVCenter + + Label { - regExp: { - machineName.machine_name_validator.machineNameRegex - } + wrapMode: Text.WordWrap + text: catalog.i18nc("@label", "Manufacturer") + } + Label + { + width: Math.floor(parent.width * 0.65) + wrapMode: Text.WordWrap + text: getMachineMetaDataEntry("manufacturer") + } + Label + { + wrapMode: Text.WordWrap + text: catalog.i18nc("@label", "Author") + } + Label + { + width: Math.floor(parent.width * 0.75) + wrapMode: Text.WordWrap + text: getMachineMetaDataEntry("author") + } + Label + { + wrapMode: Text.WordWrap + text: catalog.i18nc("@label", "Printer Name") + } + TextField + { + id: machineName + text: getMachineName() + width: Math.floor(parent.width * 0.75) + maximumLength: 40 + //validator: Cura.MachineNameValidator { } //TODO: Gives a segfault in PyQt5.6. For now, we must use a signal on text changed. + validator: RegExpValidator + { + regExp: { + machineName.machine_name_validator.machineNameRegex + } + } + property var machine_name_validator: Cura.MachineNameValidator { } } - property var machine_name_validator: Cura.MachineNameValidator { } } } Button { + id: addPrinterButton text: catalog.i18nc("@action:button", "Add Printer") anchors.bottom: parent.bottom anchors.right: parent.right diff --git a/resources/qml/AskOpenAsProjectOrModelsDialog.qml b/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml similarity index 100% rename from resources/qml/AskOpenAsProjectOrModelsDialog.qml rename to resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml diff --git a/resources/qml/DiscardOrKeepProfileChangesDialog.qml b/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml similarity index 100% rename from resources/qml/DiscardOrKeepProfileChangesDialog.qml rename to resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml diff --git a/resources/qml/OpenFilesIncludingProjectsDialog.qml b/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml similarity index 100% rename from resources/qml/OpenFilesIncludingProjectsDialog.qml rename to resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml diff --git a/resources/qml/WorkspaceSummaryDialog.qml b/resources/qml/Dialogs/WorkspaceSummaryDialog.qml similarity index 88% rename from resources/qml/WorkspaceSummaryDialog.qml rename to resources/qml/Dialogs/WorkspaceSummaryDialog.qml index 24e94beb88..25cde33c99 100644 --- a/resources/qml/WorkspaceSummaryDialog.qml +++ b/resources/qml/Dialogs/WorkspaceSummaryDialog.qml @@ -11,6 +11,7 @@ import Cura 1.0 as Cura UM.Dialog { + id: base title: catalog.i18nc("@title:window", "Save Project") minimumWidth: 500 * screenScaleFactor @@ -49,7 +50,7 @@ UM.Dialog UM.SettingDefinitionsModel { id: definitionsModel - containerId: Cura.MachineManager.activeDefinitionId + containerId: base.visible ? Cura.MachineManager.activeDefinitionId: "" showAll: true exclude: ["command_line_settings"] showAncestors: true @@ -117,7 +118,7 @@ UM.Dialog height: childrenRect.height Label { - text: catalog.i18nc("@action:label", Cura.MachineManager.activeMachineNetworkGroupName != "" ? "Printer Group" : "Name") + text: Cura.MachineManager.activeMachineNetworkGroupName != "" ? catalog.i18nc("@action:label", "Printer Group") : catalog.i18nc("@action:label", "Name") width: Math.floor(scroll.width / 3) | 0 } Label @@ -225,32 +226,6 @@ UM.Dialog text: Cura.MachineManager.activeQualityOrQualityChangesName width: Math.floor(scroll.width / 3) | 0 } - - } - } - Column - { - width: parent.width - height: childrenRect.height - Label - { - text: catalog.i18nc("@action:label", "Setting visibility") - font.bold: true - } - Row - { - width: parent.width - height: childrenRect.height - Label - { - text: catalog.i18nc("@action:label", "Visible settings:") - width: Math.floor(scroll.width / 3) | 0 - } - Label - { - text: catalog.i18nc("@action:label", "%1 out of %2" ).arg(definitionsModel.visibleCount).arg(Cura.MachineManager.totalNumberOfSettings) - width: Math.floor(scroll.width / 3) | 0 - } } } } diff --git a/resources/qml/EngineLog.qml b/resources/qml/EngineLog.qml deleted file mode 100644 index 965587b59e..0000000000 --- a/resources/qml/EngineLog.qml +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2015 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Layouts 1.1 - -import UM 1.1 as UM - -UM.Dialog -{ - id: dialog; - - //: Engine Log dialog title - title: catalog.i18nc("@title:window","Engine Log"); - - modality: Qt.NonModal; - - TextArea - { - id: textArea - anchors.fill: parent; - - Timer - { - id: updateTimer; - interval: 1000; - running: false; - repeat: true; - onTriggered: textArea.text = CuraApplication.getEngineLog(); - } - UM.I18nCatalog{id: catalog; name:"cura"} - } - - rightButtons: Button - { - //: Close engine log button - text: catalog.i18nc("@action:button","Close"); - onClicked: dialog.visible = false; - } - - onVisibleChanged: - { - if(visible) - { - textArea.text = CuraApplication.getEngineLog(); - updateTimer.start(); - } else - { - updateTimer.stop(); - } - } -} diff --git a/resources/qml/ExpandableComponent.qml b/resources/qml/ExpandableComponent.qml new file mode 100644 index 0000000000..025c63d754 --- /dev/null +++ b/resources/qml/ExpandableComponent.qml @@ -0,0 +1,262 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +import QtGraphicalEffects 1.0 // For the dropshadow + +// The expandable component has 2 major sub components: +// * The headerItem; Always visible and should hold some info about what happens if the component is expanded +// * The contentItem; The content that needs to be shown if the component is expanded. +Item +{ + id: base + + // Enumeration with the different possible alignments of the content with respect of the headerItem + enum ContentAlignment + { + AlignLeft, + AlignRight + } + + // The headerItem holds the QML item that is always displayed. + property alias headerItem: headerItemLoader.sourceComponent + + // The contentItem holds the QML item that is shown when the "open" button is pressed + property alias contentItem: content.contentItem + + property color contentBackgroundColor: UM.Theme.getColor("action_button") + + property color headerBackgroundColor: UM.Theme.getColor("action_button") + property color headerActiveColor: UM.Theme.getColor("secondary") + property color headerHoverColor: UM.Theme.getColor("action_button_hovered") + + property alias enabled: mouseArea.enabled + + // Text to show when this component is disabled + property alias disabledText: disabledLabel.text + + // Defines the alignment of the content with respect of the headerItem, by default to the right + property int contentAlignment: ExpandableComponent.ContentAlignment.AlignRight + + // How much spacing is needed around the contentItem + property alias contentPadding: content.padding + + // Adds a title to the content item + property alias contentHeaderTitle: contentHeader.headerTitle + + // How much spacing is needed for the contentItem by Y coordinate + property var contentSpacingY: UM.Theme.getSize("narrow_margin").width + + // How much padding is needed around the header & button + property alias headerPadding: background.padding + + // What icon should be displayed on the right. + property alias iconSource: collapseButton.source + + property alias iconColor: collapseButton.color + + // The icon size (it's always drawn as a square) + property alias iconSize: collapseButton.height + + // Is the "drawer" open? + property alias expanded: contentContainer.visible + + // What should the radius of the header be. This is also influenced by the headerCornerSide + property alias headerRadius: background.radius + + // On what side should the header corners be shown? 1 is down, 2 is left, 3 is up and 4 is right. + property alias headerCornerSide: background.cornerSide + + property alias headerShadowColor: shadow.color + + property alias enableHeaderShadow: shadow.visible + + property int shadowOffset: 2 + + function toggleContent() + { + contentContainer.visible = !expanded + } + + // Add this binding since the background color is not updated otherwise + Binding + { + target: background + property: "color" + value: + { + return base.enabled ? (expanded ? headerActiveColor : headerBackgroundColor) : UM.Theme.getColor("disabled") + } + } + + // The panel needs to close when it becomes disabled + Connections + { + target: base + onEnabledChanged: + { + if (!base.enabled && expanded) + { + toggleContent() + } + } + } + + implicitHeight: 100 * screenScaleFactor + implicitWidth: 400 * screenScaleFactor + + RoundedRectangle + { + id: background + property real padding: UM.Theme.getSize("default_margin").width + + color: base.enabled ? (base.expanded ? headerActiveColor : headerBackgroundColor) : UM.Theme.getColor("disabled") + anchors.fill: parent + + Label + { + id: disabledLabel + visible: !base.enabled + anchors.fill: parent + leftPadding: background.padding + rightPadding: background.padding + text: "" + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + verticalAlignment: Text.AlignVCenter + color: UM.Theme.getColor("text") + wrapMode: Text.WordWrap + } + + Item + { + anchors.fill: parent + visible: base.enabled + + Loader + { + id: headerItemLoader + anchors + { + left: parent.left + right: collapseButton.visible ? collapseButton.left : parent.right + top: parent.top + bottom: parent.bottom + margins: background.padding + } + } + + UM.RecolorImage + { + id: collapseButton + anchors + { + right: parent.right + verticalCenter: parent.verticalCenter + margins: background.padding + } + source: UM.Theme.getIcon("pencil") + visible: source != "" + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + color: UM.Theme.getColor("small_button_text") + } + } + + MouseArea + { + id: mouseArea + anchors.fill: parent + onClicked: toggleContent() + hoverEnabled: true + onEntered: background.color = headerHoverColor + onExited: background.color = base.enabled ? (base.expanded ? headerActiveColor : headerBackgroundColor) : UM.Theme.getColor("disabled") + } + } + + DropShadow + { + id: shadow + // Don't blur the shadow + radius: 0 + anchors.fill: background + source: background + verticalOffset: base.shadowOffset + visible: true + color: UM.Theme.getColor("action_button_shadow") + // Should always be drawn behind the background. + z: background.z - 1 + } + + Cura.RoundedRectangle + { + id: contentContainer + + visible: false + width: childrenRect.width + height: childrenRect.height + + // Ensure that the content is located directly below the headerItem + y: background.height + base.shadowOffset + base.contentSpacingY + + // Make the content aligned with the rest, using the property contentAlignment to decide whether is right or left. + // In case of right alignment, the 3x padding is due to left, right and padding between the button & text. + x: contentAlignment == ExpandableComponent.ContentAlignment.AlignRight ? -width + collapseButton.width + headerItemLoader.width + 3 * background.padding : 0 + + cornerSide: Cura.RoundedRectangle.Direction.All + color: contentBackgroundColor + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + radius: UM.Theme.getSize("default_radius").width + + ExpandableComponentHeader + { + id: contentHeader + headerTitle: "" + anchors + { + top: parent.top + right: parent.right + left: parent.left + } + + } + + Control + { + id: content + + anchors.top: contentHeader.bottom + padding: UM.Theme.getSize("default_margin").width + + contentItem: Item {} + + onContentItemChanged: + { + // Since we want the size of the content to be set by the size of the content, + // we need to do it like this. + content.width = contentItem.width + 2 * content.padding + content.height = contentItem.height + 2 * content.padding + } + } + } + + // DO NOT MOVE UP IN THE CODE: This connection has to be here, after the definition of the content item. + // Apparently the order in which these are handled matters and so the height is correctly updated if this is here. + Connections + { + // Since it could be that the content is dynamically populated, we should also take these changes into account. + target: content.contentItem + onWidthChanged: content.width = content.contentItem.width + 2 * content.padding + onHeightChanged: + { + content.height = content.contentItem.height + 2 * content.padding + contentContainer.height = contentHeader.height + content.height + } + } +} diff --git a/resources/qml/ExpandableComponentHeader.qml b/resources/qml/ExpandableComponentHeader.qml new file mode 100644 index 0000000000..94066340e3 --- /dev/null +++ b/resources/qml/ExpandableComponentHeader.qml @@ -0,0 +1,68 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +// Header of the popup +Cura.RoundedRectangle +{ + id: header + + property alias headerTitle: headerLabel.text + + height: UM.Theme.getSize("expandable_component_content_header").height + color: UM.Theme.getColor("secondary") + cornerSide: Cura.RoundedRectangle.Direction.Up + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + radius: UM.Theme.getSize("default_radius").width + + Label + { + id: headerLabel + text: "" + font: UM.Theme.getFont("medium") + renderType: Text.NativeRendering + verticalAlignment: Text.AlignVCenter + color: UM.Theme.getColor("small_button_text") + height: parent.height + + anchors + { + topMargin: UM.Theme.getSize("default_margin").height + left: parent.left + leftMargin: UM.Theme.getSize("default_margin").height + } + } + + Button + { + id: closeButton + width: UM.Theme.getSize("message_close").width + height: UM.Theme.getSize("message_close").height + hoverEnabled: true + + anchors + { + right: parent.right + rightMargin: UM.Theme.getSize("default_margin").width + verticalCenter: parent.verticalCenter + } + + contentItem: UM.RecolorImage + { + anchors.fill: parent + sourceSize.width: width + color: closeButton.hovered ? UM.Theme.getColor("small_button_text_hover") : UM.Theme.getColor("small_button_text") + source: UM.Theme.getIcon("cross1") + } + + background: Item {} + + onClicked: toggleContent() // Will hide the popup item + } +} \ No newline at end of file diff --git a/resources/qml/ExpandablePopup.qml b/resources/qml/ExpandablePopup.qml new file mode 100644 index 0000000000..2d2665373e --- /dev/null +++ b/resources/qml/ExpandablePopup.qml @@ -0,0 +1,250 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +import QtGraphicalEffects 1.0 // For the dropshadow + +// The expandable component has 2 major sub components: +// * The headerItem; Always visible and should hold some info about what happens if the component is expanded +// * The contentItem; The content that needs to be shown if the component is expanded. +Item +{ + id: base + + // Enumeration with the different possible alignments of the content with respect of the headerItem + enum ContentAlignment + { + AlignLeft, + AlignRight + } + + // The headerItem holds the QML item that is always displayed. + property alias headerItem: headerItemLoader.sourceComponent + + // The contentItem holds the QML item that is shown when the "open" button is pressed + property alias contentItem: content.contentItem + + property color contentBackgroundColor: UM.Theme.getColor("action_button") + + property color headerBackgroundColor: UM.Theme.getColor("action_button") + property color headerActiveColor: UM.Theme.getColor("secondary") + property color headerHoverColor: UM.Theme.getColor("action_button_hovered") + + property alias enabled: mouseArea.enabled + + // Text to show when this component is disabled + property alias disabledText: disabledLabel.text + + // Defines the alignment of the content with respect of the headerItem, by default to the right + property int contentAlignment: ExpandablePopup.ContentAlignment.AlignRight + + // How much spacing is needed around the contentItem + property alias contentPadding: content.padding + + // How much padding is needed around the header & button + property alias headerPadding: background.padding + + // What icon should be displayed on the right. + property alias iconSource: collapseButton.source + + property alias iconColor: collapseButton.color + + // The icon size (it's always drawn as a square) + property alias iconSize: collapseButton.height + + // Is the "drawer" open? + readonly property alias expanded: content.visible + + property alias expandedHighlightColor: expandedHighlight.color + + // What should the radius of the header be. This is also influenced by the headerCornerSide + property alias headerRadius: background.radius + + // On what side should the header corners be shown? 1 is down, 2 is left, 3 is up and 4 is right. + property alias headerCornerSide: background.cornerSide + + // Change the contentItem close behaviour + property alias contentClosePolicy : content.closePolicy + + property alias headerShadowColor: shadow.color + + property alias enableHeaderShadow: shadow.visible + + property int shadowOffset: 2 + + function toggleContent() + { + if (content.visible) + { + content.close() + } + else + { + content.open() + } + } + + // Add this binding since the background color is not updated otherwise + Binding + { + target: background + property: "color" + value: base.enabled ? headerBackgroundColor : UM.Theme.getColor("disabled") + } + + // The panel needs to close when it becomes disabled + Connections + { + target: base + onEnabledChanged: + { + if (!base.enabled && expanded) + { + toggleContent() + } + } + } + + implicitHeight: 100 * screenScaleFactor + implicitWidth: 400 * screenScaleFactor + + RoundedRectangle + { + id: background + property real padding: UM.Theme.getSize("default_margin").width + + color: base.enabled ? headerBackgroundColor : UM.Theme.getColor("disabled") + anchors.fill: parent + + Label + { + id: disabledLabel + visible: !base.enabled + leftPadding: background.padding + text: "" + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + verticalAlignment: Text.AlignVCenter + color: UM.Theme.getColor("text") + height: parent.height + } + + Item + { + anchors.fill: parent + visible: base.enabled + + Loader + { + id: headerItemLoader + anchors + { + left: parent.left + right: collapseButton.visible ? collapseButton.left : parent.right + top: parent.top + bottom: parent.bottom + margins: background.padding + } + } + + // A highlight that is shown when the content is expanded + Rectangle + { + id: expandedHighlight + width: parent.width + height: UM.Theme.getSize("thick_lining").height + color: UM.Theme.getColor("primary") + visible: expanded + anchors.bottom: parent.bottom + } + + UM.RecolorImage + { + id: collapseButton + anchors + { + right: parent.right + verticalCenter: parent.verticalCenter + margins: background.padding + } + source: expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") + visible: source != "" + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + color: UM.Theme.getColor("small_button_text") + } + } + + MouseArea + { + id: mouseArea + anchors.fill: parent + onClicked: toggleContent() + hoverEnabled: true + onEntered: background.color = headerHoverColor + onExited: background.color = base.enabled ? headerBackgroundColor : UM.Theme.getColor("disabled") + } + } + + DropShadow + { + id: shadow + // Don't blur the shadow + radius: 0 + anchors.fill: background + source: background + verticalOffset: base.shadowOffset + visible: true + color: UM.Theme.getColor("action_button_shadow") + // Should always be drawn behind the background. + z: background.z - 1 + } + + Popup + { + id: content + + // Ensure that the content is located directly below the headerItem + y: background.height + base.shadowOffset + + // Make the content aligned with the rest, using the property contentAlignment to decide whether is right or left. + // In case of right alignment, the 3x padding is due to left, right and padding between the button & text. + x: contentAlignment == ExpandablePopup.ContentAlignment.AlignRight ? -width + collapseButton.width + headerItemLoader.width + 3 * background.padding : 0 + padding: UM.Theme.getSize("default_margin").width + closePolicy: Popup.CloseOnPressOutsideParent + + background: Cura.RoundedRectangle + { + cornerSide: Cura.RoundedRectangle.Direction.Down + color: contentBackgroundColor + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + radius: UM.Theme.getSize("default_radius").width + } + + contentItem: Item {} + + onContentItemChanged: + { + // Since we want the size of the content to be set by the size of the content, + // we need to do it like this. + content.width = contentItem.width + 2 * content.padding + content.height = contentItem.height + 2 * content.padding + } + } + + // DO NOT MOVE UP IN THE CODE: This connection has to be here, after the definition of the content item. + // Apparently the order in which these are handled matters and so the height is correctly updated if this is here. + Connections + { + // Since it could be that the content is dynamically populated, we should also take these changes into account. + target: content.contentItem + onWidthChanged: content.width = content.contentItem.width + 2 * content.padding + onHeightChanged: content.height = content.contentItem.height + 2 * content.padding + } +} diff --git a/resources/qml/ExtruderButton.qml b/resources/qml/ExtruderButton.qml index 2c1b80047e..feb399d528 100644 --- a/resources/qml/ExtruderButton.qml +++ b/resources/qml/ExtruderButton.qml @@ -2,80 +2,32 @@ // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 -import QtQuick.Controls 1.1 +import QtQuick.Controls 2.0 import UM 1.2 as UM import Cura 1.0 as Cura -Button +Cura.ToolbarButton { id: base - property var extruder; + property var extruder text: catalog.i18ncp("@label %1 is filled in with the name of an extruder", "Print Selected Model with %1", "Print Selected Models with %1", UM.Selection.selectionCount).arg(extruder.name) - style: UM.Theme.styles.tool_button; - iconSource: UM.Theme.getIcon("extruder_button") - checked: Cura.ExtruderManager.selectedObjectExtruders.indexOf(extruder.id) != -1 enabled: UM.Selection.hasSelection && extruder.stack.isEnabled - property color customColor: base.hovered ? UM.Theme.getColor("button_hover") : UM.Theme.getColor("button"); - - Rectangle + toolItem: ExtruderIcon { - anchors.fill: parent - anchors.margins: UM.Theme.getSize("default_lining").width; - - color: "transparent" - - border.width: base.checked ? UM.Theme.getSize("default_lining").width : 0; - border.color: UM.Theme.getColor("button_text") - } - - Item - { - anchors.centerIn: parent - width: UM.Theme.getSize("default_margin").width - height: UM.Theme.getSize("default_margin").height - - Label - { - anchors.centerIn: parent; - text: index + 1; - color: parent.enabled ? UM.Theme.getColor("button_text") : UM.Theme.getColor("button_disabled_text") - font: UM.Theme.getFont("default_bold"); - } - } - - // Material colour circle - // Only draw the filling colour of the material inside the SVG border. - Rectangle - { - anchors - { - right: parent.right - top: parent.top - rightMargin: UM.Theme.getSize("extruder_button_material_margin").width - topMargin: UM.Theme.getSize("extruder_button_material_margin").height - } - - color: model.color - - width: UM.Theme.getSize("extruder_button_material").width - height: UM.Theme.getSize("extruder_button_material").height - radius: Math.round(width / 2) - - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("extruder_button_material_border") - - opacity: !base.enabled ? 0.2 : 1.0 + materialColor: extruder.color + extruderEnabled: extruder.stack.isEnabled + property int index: extruder.index } onClicked: { forceActiveFocus() //First grab focus, so all the text fields are updated - CuraActions.setExtruderForSelection(extruder.id); + CuraActions.setExtruderForSelection(extruder.id) } } diff --git a/resources/qml/ExtruderIcon.qml b/resources/qml/ExtruderIcon.qml new file mode 100644 index 0000000000..015ebea52e --- /dev/null +++ b/resources/qml/ExtruderIcon.qml @@ -0,0 +1,72 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.1 +import UM 1.2 as UM + +Item +{ + id: extruderIconItem + + implicitWidth: UM.Theme.getSize("extruder_icon").width + implicitHeight: UM.Theme.getSize("extruder_icon").height + + property bool checked: true + property color materialColor + property alias textColor: extruderNumberText.color + property bool extruderEnabled: true + + UM.RecolorImage + { + id: mainIcon + anchors.fill: parent + + source: UM.Theme.getIcon("extruder_button") + color: extruderEnabled ? materialColor: UM.Theme.getColor("disabled") + } + + Rectangle + { + id: extruderNumberCircle + + width: height + height: Math.round(parent.height / 2) + radius: Math.round(width / 2) + color: UM.Theme.getColor("toolbar_background") + + anchors + { + horizontalCenter: parent.horizontalCenter + top: parent.top + // The circle needs to be slightly off center (so it sits in the middle of the square bit of the icon) + topMargin: (parent.height - height) / 2 - 0.1 * parent.height + } + + Label + { + id: extruderNumberText + anchors.centerIn: parent + text: index + 1 + font: UM.Theme.getFont("small") + color: UM.Theme.getColor("text") + width: contentWidth + height: contentHeight + visible: extruderEnabled + renderType: Text.NativeRendering + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + UM.RecolorImage + { + id: disabledIcon + anchors.fill: parent + anchors.margins: UM.Theme.getSize("thick_lining").width + sourceSize.height: width + source: UM.Theme.getIcon("cross1") + visible: !extruderEnabled + color: UM.Theme.getColor("text") + } + } +} \ No newline at end of file diff --git a/resources/qml/IconWithText.qml b/resources/qml/IconWithText.qml new file mode 100644 index 0000000000..24b6dc7fe2 --- /dev/null +++ b/resources/qml/IconWithText.qml @@ -0,0 +1,70 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +// Reusable component that holds an (re-colorable) icon on the left with some text on the right. +// This component is also designed to be used with layouts. It will use the width of the text + icon as preferred width +// It sets the icon size + half of the content as its minium width (in which case it will elide the text) +Item +{ + property alias source: icon.source + property alias iconSize: icon.width + property alias iconColor: icon.color + property alias color: label.color + property alias text: label.text + property alias font: label.font + property real margin: UM.Theme.getSize("narrow_margin").width + + // These properties can be used in combination with layouts. + readonly property real contentWidth: icon.width + margin + label.contentWidth + readonly property real minContentWidth: Math.round(icon.width + margin + 0.5 * label.contentWidth) + + Layout.minimumWidth: minContentWidth + Layout.preferredWidth: contentWidth + Layout.fillHeight: true + Layout.fillWidth: true + + implicitWidth: icon.width + 100 + implicitHeight: icon.height + + UM.RecolorImage + { + id: icon + width: UM.Theme.getSize("section_icon").width + height: width + + color: UM.Theme.getColor("icon") + + anchors + { + left: parent.left + verticalCenter: parent.verticalCenter + } + } + + Label + { + id: label + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + + anchors + { + left: icon.right + right: parent.right + top: parent.top + bottom: parent.bottom + rightMargin: 0 + margins: margin + } + } +} \ No newline at end of file diff --git a/resources/qml/JobSpecs.qml b/resources/qml/JobSpecs.qml index 20ec8ce289..144616c22d 100644 --- a/resources/qml/JobSpecs.qml +++ b/resources/qml/JobSpecs.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2017 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 @@ -9,141 +9,145 @@ import QtQuick.Layouts 1.1 import UM 1.1 as UM import Cura 1.0 as Cura -Item { +Item +{ id: base property bool activity: CuraApplication.platformActivity property string fileBaseName: PrintInformation.baseName - UM.I18nCatalog { id: catalog; name:"cura"} + UM.I18nCatalog + { + id: catalog + name: "cura" + } + width: childrenRect.width height: childrenRect.height - onActivityChanged: { - if (activity == false) { + onActivityChanged: + { + if (!activity) + { //When there is no mesh in the buildplate; the printJobTextField is set to an empty string so it doesn't set an empty string as a jobName (which is later used for saving the file) - PrintInformation.baseName = '' + PrintInformation.baseName = "" } } - Rectangle + Item { id: jobNameRow anchors.top: parent.top - anchors.right: parent.right + anchors.left: parent.left height: UM.Theme.getSize("jobspecs_line").height - visible: base.activity - Item + Button { - width: parent.width - height: parent.height + id: printJobPencilIcon + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + width: UM.Theme.getSize("save_button_specs_icons").width + height: UM.Theme.getSize("save_button_specs_icons").height - Button + onClicked: { - id: printJobPencilIcon - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - width: UM.Theme.getSize("save_button_specs_icons").width - height: UM.Theme.getSize("save_button_specs_icons").height - - onClicked: - { - printJobTextfield.selectAll(); - printJobTextfield.focus = true; - } - style: ButtonStyle - { - background: Item - { - UM.RecolorImage - { - width: UM.Theme.getSize("save_button_specs_icons").width; - height: UM.Theme.getSize("save_button_specs_icons").height; - sourceSize.width: width; - sourceSize.height: width; - color: control.hovered ? UM.Theme.getColor("text_scene_hover") : UM.Theme.getColor("text_scene"); - source: UM.Theme.getIcon("pencil"); - } - } - } + printJobTextfield.selectAll() + printJobTextfield.focus = true } - TextField + style: ButtonStyle { - id: printJobTextfield - anchors.right: printJobPencilIcon.left - anchors.rightMargin: Math.round(UM.Theme.getSize("default_margin").width / 2) - height: UM.Theme.getSize("jobspecs_line").height - width: Math.max(__contentWidth + UM.Theme.getSize("default_margin").width, 50) - maximumLength: 120 - property int unremovableSpacing: 5 - text: PrintInformation.jobName - horizontalAlignment: TextInput.AlignRight - onEditingFinished: { - var new_name = text == "" ? catalog.i18nc("@text Print job name", "unnamed") : text; - PrintInformation.setJobName(new_name, true); - printJobTextfield.focus = false; - } - validator: RegExpValidator { - regExp: /^[^\\ \/ \*\?\|\[\]]*$/ - } - style: TextFieldStyle{ - textColor: UM.Theme.getColor("text_scene"); - font: UM.Theme.getFont("default_bold"); - background: Rectangle { - opacity: 0 - border.width: 0 + background: Item + { + UM.RecolorImage + { + width: UM.Theme.getSize("save_button_specs_icons").width + height: UM.Theme.getSize("save_button_specs_icons").height + sourceSize.width: width + sourceSize.height: width + color: control.hovered ? UM.Theme.getColor("text_scene_hover") : UM.Theme.getColor("text_scene") + source: UM.Theme.getIcon("pencil") } } } } - } - Row { - id: additionalComponentsRow - anchors.top: jobNameRow.bottom - anchors.right: parent.right + TextField + { + id: printJobTextfield + anchors.left: printJobPencilIcon.right + anchors.leftMargin: UM.Theme.getSize("narrow_margin").width + height: UM.Theme.getSize("jobspecs_line").height + width: Math.max(__contentWidth + UM.Theme.getSize("default_margin").width, 50) + maximumLength: 120 + text: PrintInformation.jobName + horizontalAlignment: TextInput.AlignLeft + + onEditingFinished: + { + var new_name = text == "" ? catalog.i18nc("@text Print job name", "Untitled") : text + PrintInformation.setJobName(new_name, true) + printJobTextfield.focus = false + } + + validator: RegExpValidator { + regExp: /^[^\\\/\*\?\|\[\]]*$/ + } + + style: TextFieldStyle + { + textColor: UM.Theme.getColor("text_scene") + font: UM.Theme.getFont("default") + background: Rectangle + { + opacity: 0 + border.width: 0 + } + } + } } Label { id: boundingSpec anchors.top: jobNameRow.bottom - anchors.right: additionalComponentsRow.left - anchors.rightMargin: - { - if (additionalComponentsRow.width > 0) - { - return UM.Theme.getSize("default_margin").width - } - else - { - return 0; - } - } + anchors.left: parent.left + height: UM.Theme.getSize("jobspecs_line").height verticalAlignment: Text.AlignVCenter - font: UM.Theme.getFont("small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text_scene") text: CuraApplication.getSceneBoundingBoxString } - Component.onCompleted: { + Row + { + id: additionalComponentsRow + anchors.top: boundingSpec.top + anchors.bottom: boundingSpec.bottom + anchors.left: boundingSpec.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + } + + Component.onCompleted: + { base.addAdditionalComponents("jobSpecsButton") } - Connections { + Connections + { target: CuraApplication onAdditionalComponentsChanged: base.addAdditionalComponents("jobSpecsButton") } - function addAdditionalComponents (areaId) { - if(areaId == "jobSpecsButton") { - for (var component in CuraApplication.additionalComponents["jobSpecsButton"]) { + function addAdditionalComponents(areaId) + { + if (areaId == "jobSpecsButton") + { + for (var component in CuraApplication.additionalComponents["jobSpecsButton"]) + { CuraApplication.additionalComponents["jobSpecsButton"][component].parent = additionalComponentsRow } } } - } diff --git a/resources/qml/MachineSelection.qml b/resources/qml/MachineSelection.qml deleted file mode 100644 index 7a8a6b476b..0000000000 --- a/resources/qml/MachineSelection.qml +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 - -import UM 1.2 as UM -import Cura 1.0 as Cura -import "Menus" - -ToolButton -{ - id: base - property bool isNetworkPrinter: Cura.MachineManager.activeMachineNetworkKey != "" - property bool printerConnected: Cura.MachineManager.printerConnected - property var printerStatus: Cura.MachineManager.printerConnected ? "connected" : "disconnected" - text: isNetworkPrinter ? Cura.MachineManager.activeMachineNetworkGroupName : Cura.MachineManager.activeMachineName - - tooltip: Cura.MachineManager.activeMachineName - - style: ButtonStyle - { - background: Rectangle - { - color: - { - if (control.pressed) { - return UM.Theme.getColor("sidebar_header_active"); - } - else if (control.hovered) { - return UM.Theme.getColor("sidebar_header_hover"); - } - else { - return UM.Theme.getColor("sidebar_header_bar"); - } - } - Behavior on color { ColorAnimation { duration: 50; } } - - UM.RecolorImage - { - id: downArrow - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: width - color: UM.Theme.getColor("text_emphasis") - source: UM.Theme.getIcon("arrow_bottom") - } - - PrinterStatusIcon - { - id: printerStatusIcon - visible: printerConnected || isNetworkPrinter - status: printerStatus - anchors - { - verticalCenter: parent.verticalCenter - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - } - } - - Label - { - id: sidebarComboBoxLabel - color: UM.Theme.getColor("sidebar_header_text_active") - text: control.text; - elide: Text.ElideRight; - anchors.left: printerStatusIcon.visible ? printerStatusIcon.right : parent.left; - anchors.leftMargin: printerStatusIcon.visible ? UM.Theme.getSize("sidebar_lining").width : UM.Theme.getSize("sidebar_margin").width - anchors.right: downArrow.left; - anchors.rightMargin: control.rightMargin; - anchors.verticalCenter: parent.verticalCenter; - font: UM.Theme.getFont("medium_bold") - } - } - label: Label {} - } - - menu: PrinterMenu { } -} diff --git a/resources/qml/MainWindow/ApplicationMenu.qml b/resources/qml/MainWindow/ApplicationMenu.qml new file mode 100644 index 0000000000..2f18df8914 --- /dev/null +++ b/resources/qml/MainWindow/ApplicationMenu.qml @@ -0,0 +1,164 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Layouts 1.1 +import QtQuick.Dialogs 1.2 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +import "../Menus" +import "../Dialogs" + +Item +{ + id: menu + width: applicationMenu.width + height: applicationMenu.height + property alias window: applicationMenu.window + + UM.ApplicationMenu + { + id: applicationMenu + + FileMenu { title: catalog.i18nc("@title:menu menubar:toplevel", "&File") } + + Menu + { + title: catalog.i18nc("@title:menu menubar:toplevel", "&Edit") + + MenuItem { action: Cura.Actions.undo } + MenuItem { action: Cura.Actions.redo } + MenuSeparator { } + MenuItem { action: Cura.Actions.selectAll } + MenuItem { action: Cura.Actions.arrangeAll } + MenuItem { action: Cura.Actions.deleteSelection } + MenuItem { action: Cura.Actions.deleteAll } + MenuItem { action: Cura.Actions.resetAllTranslation } + MenuItem { action: Cura.Actions.resetAll } + MenuSeparator { } + MenuItem { action: Cura.Actions.groupObjects } + MenuItem { action: Cura.Actions.mergeObjects } + MenuItem { action: Cura.Actions.unGroupObjects } + } + + ViewMenu { title: catalog.i18nc("@title:menu menubar:toplevel", "&View") } + + SettingsMenu { title: catalog.i18nc("@title:menu menubar:toplevel", "&Settings") } + + Menu + { + id: extensionMenu + title: catalog.i18nc("@title:menu menubar:toplevel", "E&xtensions") + + Instantiator + { + id: extensions + model: UM.ExtensionModel { } + + Menu + { + id: sub_menu + title: model.name; + visible: actions != null + enabled: actions != null + Instantiator + { + model: actions + MenuItem + { + text: model.text + onTriggered: extensions.model.subMenuTriggered(name, model.text) + } + onObjectAdded: sub_menu.insertItem(index, object) + onObjectRemoved: sub_menu.removeItem(object) + } + } + + onObjectAdded: extensionMenu.insertItem(index, object) + onObjectRemoved: extensionMenu.removeItem(object) + } + } + + Menu + { + id: preferencesMenu + title: catalog.i18nc("@title:menu menubar:toplevel", "P&references") + + MenuItem { action: Cura.Actions.preferences } + } + + Menu + { + id: helpMenu + title: catalog.i18nc("@title:menu menubar:toplevel", "&Help") + + MenuItem { action: Cura.Actions.showProfileFolder } + MenuItem { action: Cura.Actions.showTroubleshooting} + MenuItem { action: Cura.Actions.documentation } + MenuItem { action: Cura.Actions.reportBug } + MenuSeparator { } + MenuItem { action: Cura.Actions.about } + } + } + + // ############################################################################################### + // Definition of other components that are linked to the menus + // ############################################################################################### + + WorkspaceSummaryDialog + { + id: saveWorkspaceDialog + property var args + onYes: UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, args) + } + + MessageDialog + { + id: newProjectDialog + modality: Qt.ApplicationModal + title: catalog.i18nc("@title:window", "New project") + text: catalog.i18nc("@info:question", "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings.") + standardButtons: StandardButton.Yes | StandardButton.No + icon: StandardIcon.Question + onYes: + { + CuraApplication.deleteAll(); + Cura.Actions.resetProfile.trigger(); + } + } + + UM.ExtensionModel + { + id: curaExtensions + } + + // ############################################################################################### + // Definition of all the connections + // ############################################################################################### + + Connections + { + target: Cura.Actions.newProject + onTriggered: + { + if(Printer.platformActivity || Cura.MachineManager.hasUserSettings) + { + newProjectDialog.visible = true + } + } + } + + // show the plugin browser dialog + Connections + { + target: Cura.Actions.browsePackages + onTriggered: + { + curaExtensions.callExtensionMethod("Toolbox", "browsePackages") + } + } +} \ No newline at end of file diff --git a/resources/qml/MainWindow/MainWindowHeader.qml b/resources/qml/MainWindow/MainWindowHeader.qml new file mode 100644 index 0000000000..fab8010dd7 --- /dev/null +++ b/resources/qml/MainWindow/MainWindowHeader.qml @@ -0,0 +1,132 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.0 as Controls2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.1 + +import UM 1.4 as UM +import Cura 1.0 as Cura +import QtGraphicalEffects 1.0 + +import "../Account" + +Item +{ + id: base + + implicitHeight: UM.Theme.getSize("main_window_header").height + implicitWidth: UM.Theme.getSize("main_window_header").width + + Image + { + id: logo + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.verticalCenter: parent.verticalCenter + + source: UM.Theme.getImage("logo") + width: UM.Theme.getSize("logo").width + height: UM.Theme.getSize("logo").height + fillMode: Image.PreserveAspectFit + sourceSize.width: width + sourceSize.height: height + } + + Row + { + id: stagesListContainer + spacing: Math.round(UM.Theme.getSize("default_margin").width / 2) + + anchors + { + horizontalCenter: parent.horizontalCenter + verticalCenter: parent.verticalCenter + leftMargin: UM.Theme.getSize("default_margin").width + } + + // The main window header is dynamically filled with all available stages + Repeater + { + id: stagesHeader + + model: UM.StageModel { } + + delegate: Button + { + text: model.name.toUpperCase() + checkable: true + checked: UM.Controller.activeStage !== null && model.id == UM.Controller.activeStage.stageId + + anchors.verticalCenter: parent.verticalCenter + exclusiveGroup: mainWindowHeaderMenuGroup + style: UM.Theme.styles.main_window_header_tab + height: UM.Theme.getSize("main_window_header_button").height + iconSource: model.stage.iconSource + + property color overlayColor: "transparent" + property string overlayIconSource: "" + // This id is required to find the stage buttons through Squish + property string stageId: model.id + + // This is a trick to assure the activeStage is correctly changed. It doesn't work propertly if done in the onClicked (see CURA-6028) + MouseArea + { + anchors.fill: parent + onClicked: UM.Controller.setActiveStage(model.id) + } + } + } + + ExclusiveGroup { id: mainWindowHeaderMenuGroup } + } + + // Shortcut button to quick access the Toolbox + Controls2.Button + { + id: marketplaceButton + text: catalog.i18nc("@action:button", "Marketplace") + height: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) + onClicked: Cura.Actions.browsePackages.trigger() + + hoverEnabled: true + + background: Rectangle + { + radius: UM.Theme.getSize("action_button_radius").width + color: marketplaceButton.hovered ? UM.Theme.getColor("primary_text") : UM.Theme.getColor("main_window_header_background") + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("primary_text") + } + + contentItem: Label + { + id: label + text: marketplaceButton.text + font: UM.Theme.getFont("default") + color: marketplaceButton.hovered ? UM.Theme.getColor("main_window_header_background") : UM.Theme.getColor("primary_text") + width: contentWidth + verticalAlignment: Text.AlignVCenter + renderType: Text.NativeRendering + } + + anchors + { + right: accountWidget.left + rightMargin: UM.Theme.getSize("default_margin").width + verticalCenter: parent.verticalCenter + } + } + + AccountWidget + { + id: accountWidget + anchors + { + verticalCenter: parent.verticalCenter + right: parent.right + rightMargin: UM.Theme.getSize("default_margin").width + } + } +} diff --git a/resources/qml/Menus/ConfigurationMenu/AutoConfiguration.qml b/resources/qml/Menus/ConfigurationMenu/AutoConfiguration.qml new file mode 100644 index 0000000000..18409dd43a --- /dev/null +++ b/resources/qml/Menus/ConfigurationMenu/AutoConfiguration.qml @@ -0,0 +1,39 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.0 + +import UM 1.3 as UM +import Cura 1.0 as Cura + +Item +{ + width: parent.width + height: childrenRect.height + + Label + { + id: header + text: catalog.i18nc("@header", "Configurations") + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("small_button_text") + height: contentHeight + renderType: Text.NativeRendering + + anchors + { + left: parent.left + right: parent.right + } + } + + ConfigurationListView + { + anchors.top: header.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").width + width: parent.width + + outputDevice: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null + } +} \ No newline at end of file diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml index 942dd81d9c..5229d021f8 100644 --- a/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml +++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml @@ -7,51 +7,153 @@ import QtQuick.Controls 2.0 import UM 1.2 as UM import Cura 1.0 as Cura -Rectangle +Button { id: configurationItem property var configuration: null - property var selected: false - signal activateConfiguration() + hoverEnabled: isValidMaterial - height: childrenRect.height - border.width: UM.Theme.getSize("default_lining").width - border.color: updateBorderColor() - color: selected ? UM.Theme.getColor("configuration_item_active") : UM.Theme.getColor("configuration_item") - property var textColor: selected ? UM.Theme.getColor("configuration_item_text_active") : UM.Theme.getColor("configuration_item_text") - - function updateBorderColor() + property bool isValidMaterial: { - border.color = selected ? UM.Theme.getColor("configuration_item_border_active") : UM.Theme.getColor("configuration_item_border") + var extruderConfigurations = configuration.extruderConfigurations + + for (var index in extruderConfigurations) + { + var name = extruderConfigurations[index].material ? extruderConfigurations[index].material.name : "" + + if (name == "" || name == "Unknown") + { + return false + } + } + return true } - Column + background: Rectangle + { + color: parent.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") + border.color: parent.checked ? UM.Theme.getColor("primary") : UM.Theme.getColor("lining") + border.width: UM.Theme.getSize("default_lining").width + radius: UM.Theme.getSize("default_radius").width + } + + contentItem: Column { id: contentColumn width: parent.width padding: UM.Theme.getSize("default_margin").width - spacing: Math.round(UM.Theme.getSize("default_margin").height / 2) + spacing: UM.Theme.getSize("narrow_margin").height Row { id: extruderRow - width: parent.width - 2 * parent.padding + anchors + { + left: parent.left + leftMargin: UM.Theme.getSize("default_margin").width + right: parent.right + rightMargin: UM.Theme.getSize("wide_margin").width + } height: childrenRect.height - spacing: UM.Theme.getSize("default_margin").width Repeater { id: repeater - height: childrenRect.height model: configuration.extruderConfigurations + width: parent.width delegate: PrintCoreConfiguration { - width: Math.round(parent.width / 2) + width: Math.round(parent.width / configuration.extruderConfigurations.length) printCoreConfiguration: modelData - mainColor: textColor + visible: configurationItem.isValidMaterial + } + } + + // Unknown material + Item + { + id: unknownMaterial + height: unknownMaterialMessage.height + UM.Theme.getSize("thin_margin").width / 2 + width: parent.width + + anchors.top: parent.top + anchors.topMargin: UM.Theme.getSize("thin_margin").width / 2 + + visible: !configurationItem.isValidMaterial + + UM.RecolorImage + { + id: icon + anchors.verticalCenter: unknownMaterialMessage.verticalCenter + + source: UM.Theme.getIcon("warning") + color: UM.Theme.getColor("warning") + width: UM.Theme.getSize("section_icon").width + height: width + } + + Label + { + id: unknownMaterialMessage + text: + { + var extruderConfigurations = configuration.extruderConfigurations + var unknownMaterials = [] + for (var index in extruderConfigurations) + { + var name = extruderConfigurations[index].material ? extruderConfigurations[index].material.name : "" + if (name == "" || name == "Unknown") + { + var materialType = extruderConfigurations[index].material.type + if (extruderConfigurations[index].material.type == "") + { + materialType = "Unknown" + } + + var brand = extruderConfigurations[index].material.brand + if (brand == "") + { + brand = "Unknown" + } + + name = materialType + " (" + brand + ")" + unknownMaterials.push(name) + } + } + + unknownMaterials = "" + unknownMaterials + "" + var draftResult = catalog.i18nc("@label", "This configuration is not available because %1 is not recognized. Please visit %2 to download the correct material profile."); + var result = draftResult.arg(unknownMaterials).arg("" + catalog.i18nc("@label","Marketplace") + " ") + + return result + } + width: extruderRow.width + + anchors.left: icon.right + anchors.right: unknownMaterial.right + anchors.leftMargin: UM.Theme.getSize("wide_margin").height + anchors.top: unknownMaterial.top + + wrapMode: Text.WordWrap + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + verticalAlignment: Text.AlignVCenter + linkColor: UM.Theme.getColor("text_link") + + onLinkActivated: + { + Cura.Actions.browsePackages.trigger() + } + } + + MouseArea + { + anchors.fill: parent + cursorShape: unknownMaterialMessage.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor + acceptedButtons: Qt.NoButton } } } @@ -62,63 +164,38 @@ Rectangle id: separator visible: buildplateInformation.visible - width: parent.width - 2 * parent.padding - height: visible ? Math.round(UM.Theme.getSize("sidebar_lining_thin").height / 2) : 0 - color: textColor + anchors + { + left: parent.left + leftMargin: UM.Theme.getSize("wide_margin").width + right: parent.right + rightMargin: UM.Theme.getSize("wide_margin").width + } + height: visible ? Math.round(UM.Theme.getSize("default_lining").height / 2) : 0 + color: UM.Theme.getColor("lining") } Item { id: buildplateInformation - width: parent.width - 2 * parent.padding - height: childrenRect.height - visible: configuration.buildplateConfiguration != "" - UM.RecolorImage { - id: buildplateIcon - anchors.left: parent.left - width: UM.Theme.getSize("topbar_button_icon").width - height: UM.Theme.getSize("topbar_button_icon").height - sourceSize.width: width - sourceSize.height: height - source: UM.Theme.getIcon("buildplate") - color: textColor + anchors + { + left: parent.left + leftMargin: UM.Theme.getSize("wide_margin").width + right: parent.right + rightMargin: UM.Theme.getSize("wide_margin").width } + height: childrenRect.height + visible: configuration.buildplateConfiguration != "" && false //Buildplate is disabled as long as we have no printers that properly support buildplate swapping (so we can't test). - Label + // Show the type of buildplate. The first letter is capitalized + Cura.IconWithText { id: buildplateLabel - anchors.left: buildplateIcon.right - anchors.verticalCenter: buildplateIcon.verticalCenter - anchors.leftMargin: Math.round(UM.Theme.getSize("default_margin").height / 2) - text: configuration.buildplateConfiguration - renderType: Text.NativeRendering - color: textColor - } - } - } - - MouseArea - { - id: mouse - anchors.fill: parent - onClicked: activateConfiguration() - cursorShape: Qt.PointingHandCursor - hoverEnabled: true - onEntered: - { - parent.border.color = UM.Theme.getColor("configuration_item_border_hover") - if (configurationItem.selected == false) - { - configurationItem.color = UM.Theme.getColor("sidebar_lining") - } - } - onExited: - { - updateBorderColor() - if (configurationItem.selected == false) - { - configurationItem.color = UM.Theme.getColor("configuration_item") + source: UM.Theme.getIcon("buildplate") + text: configuration.buildplateConfiguration.charAt(0).toUpperCase() + configuration.buildplateConfiguration.substr(1) + anchors.left: parent.left } } } @@ -126,24 +203,23 @@ Rectangle Connections { target: Cura.MachineManager - onCurrentConfigurationChanged: { - configurationItem.selected = Cura.MachineManager.matchesConfiguration(configuration) - updateBorderColor() + onCurrentConfigurationChanged: + { + configurationItem.checked = Cura.MachineManager.matchesConfiguration(configuration) } } Component.onCompleted: { - configurationItem.selected = Cura.MachineManager.matchesConfiguration(configuration) - updateBorderColor() + configurationItem.checked = Cura.MachineManager.matchesConfiguration(configuration) } - onVisibleChanged: + onClicked: { - if(visible) + if(isValidMaterial) { - // I cannot trigger function updateBorderColor() after visibility change - color = selected ? UM.Theme.getColor("configuration_item_active") : UM.Theme.getColor("configuration_item") + toggleContent() + Cura.MachineManager.applyRemoteConfiguration(configuration) } } -} \ No newline at end of file +} diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml index 7aaf87b4df..afb3aba82b 100644 --- a/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml +++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml @@ -2,85 +2,122 @@ // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls 2.3 import UM 1.2 as UM import Cura 1.0 as Cura -Column +Item { id: base property var outputDevice: null - property var computedHeight: container.height + configurationListHeading.height + 3 * padding - height: childrenRect.height + 2 * padding - padding: UM.Theme.getSize("default_margin").width - spacing: Math.round(UM.Theme.getSize("default_margin").height / 2) + height: childrenRect.height function forceModelUpdate() { - // FIXME For now the model should be removed and then created again, otherwise changes in the printer don't automatically update the UI + // FIXME For now the model has to be removed and then created again, otherwise changes in the printer don't automatically update the UI configurationList.model = [] - if(outputDevice) + if (outputDevice) { configurationList.model = outputDevice.uniqueConfigurations } } - Label + // This component will appear when there are no configurations (e.g. when losing connection or when they are being loaded) + Item { - id: configurationListHeading - text: catalog.i18nc("@label:header configurations", "Available configurations") - font: UM.Theme.getFont("large") - width: parent.width - 2 * parent.padding - color: UM.Theme.getColor("configuration_item_text") - } + width: parent.width + visible: configurationList.model.length == 0 + height: label.height + UM.Theme.getSize("wide_margin").height + anchors.top: parent.top + anchors.topMargin: UM.Theme.getSize("default_margin").height - Component - { - id: sectionHeading - Rectangle + UM.RecolorImage { - height: childrenRect.height + UM.Theme.getSize("default_margin").height - Label - { - text: section - font: UM.Theme.getFont("default_bold") - color: UM.Theme.getColor("configuration_item_text") - } + id: icon + + anchors.left: parent.left + anchors.verticalCenter: label.verticalCenter + + source: UM.Theme.getIcon("warning") + color: UM.Theme.getColor("warning") + width: UM.Theme.getSize("section_icon").width + height: width + } + + Label + { + id: label + anchors.left: icon.right + anchors.right: parent.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + // There are two cases that we want to diferenciate, one is when Cura is loading the configurations and the + // other when the connection was lost + text: Cura.MachineManager.printerConnected ? + catalog.i18nc("@label", "Loading available configurations from the printer...") : + catalog.i18nc("@label", "The configurations are not available because the printer is disconnected.") + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + wrapMode: Text.WordWrap } } ScrollView { id: container - width: parent.width - parent.padding - height: Math.min(configurationList.contentHeight, 350 * screenScaleFactor) + width: parent.width + readonly property int maximumHeight: 350 * screenScaleFactor + height: Math.round(Math.min(configurationList.height, maximumHeight)) + contentHeight: configurationList.height + clip: true - style: UM.Theme.styles.scrollview - __wheelAreaScrollSpeed: 75 // Scroll three lines in one scroll event + ScrollBar.vertical.policy: (configurationList.height > maximumHeight) ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff //The AsNeeded policy also hides it when the cursor is away, and we don't want that. + ScrollBar.vertical.background: Rectangle + { + implicitWidth: UM.Theme.getSize("scrollbar").width + radius: width / 2 + color: UM.Theme.getColor("scrollbar_background") + } + ScrollBar.vertical.contentItem: Rectangle + { + implicitWidth: UM.Theme.getSize("scrollbar").width + radius: width / 2 + color: UM.Theme.getColor(parent.pressed ? "scrollbar_handle_down" : parent.hovered ? "scrollbar_handle_hover" : "scrollbar_handle") + } + + ButtonGroup + { + buttons: configurationList.children + } ListView { id: configurationList - spacing: Math.round(UM.Theme.getSize("default_margin").height / 2) - width: container.width - contentHeight: childrenRect.height + spacing: UM.Theme.getSize("narrow_margin").height + width: container.width - ((height > container.maximumHeight) ? container.ScrollBar.vertical.background.width : 0) //Make room for scroll bar if there is any. + height: childrenRect.height + interactive: false // let the ScrollView process scroll events. section.property: "modelData.printerType" section.criteria: ViewSection.FullString - section.delegate: sectionHeading + section.delegate: Item + { + height: printerTypeLabel.height + UM.Theme.getSize("wide_margin").height //Causes a default margin above the label and a default margin below the label. + Cura.PrinterTypeLabel + { + id: printerTypeLabel + text: Cura.MachineManager.getAbbreviatedMachineName(section) + anchors.verticalCenter: parent.verticalCenter //One default margin above and one below. + } + } model: (outputDevice != null) ? outputDevice.uniqueConfigurations : [] + delegate: ConfigurationItem { - width: parent.width - UM.Theme.getSize("default_margin").width + width: parent.width configuration: modelData - onActivateConfiguration: - { - switchPopupState() - Cura.MachineManager.applyRemoteConfiguration(configuration) - } } } } @@ -102,4 +139,4 @@ Column forceModelUpdate() } } -} \ No newline at end of file +} diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml new file mode 100644 index 0000000000..1e3b48b1df --- /dev/null +++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml @@ -0,0 +1,292 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Controls.Styles 1.4 + +import UM 1.2 as UM +import Cura 1.0 as Cura + + +/** + * Menu that allows you to select the configuration of the current printer, such + * as the nozzle sizes and materials in each extruder. + */ +Cura.ExpandablePopup +{ + id: base + + property var extrudersModel: CuraApplication.getExtrudersModel() + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + enum ConfigurationMethod + { + Auto, + Custom + } + + contentPadding: UM.Theme.getSize("default_lining").width + enabled: Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariants || Cura.MachineManager.hasVariantBuildplates; //Only let it drop down if there is any configuration that you could change. + + headerItem: Item + { + // Horizontal list that shows the extruders and their materials + ListView + { + id: extrudersList + + orientation: ListView.Horizontal + anchors.fill: parent + model: extrudersModel + visible: Cura.MachineManager.hasMaterials + + delegate: Item + { + height: parent.height + width: Math.round(ListView.view.width / extrudersModel.count) + + // Extruder icon. Shows extruder index and has the same color as the active material. + Cura.ExtruderIcon + { + id: extruderIcon + materialColor: model.color + extruderEnabled: model.enabled + height: parent.height + width: height + } + + // Label for the brand of the material + Label + { + id: typeAndBrandNameLabel + + text: model.material_brand + " " + model.material + elide: Text.ElideRight + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + + anchors + { + top: extruderIcon.top + left: extruderIcon.right + leftMargin: UM.Theme.getSize("default_margin").width + right: parent.right + rightMargin: UM.Theme.getSize("default_margin").width + } + } + // Label that shows the name of the variant + Label + { + id: variantLabel + + visible: Cura.MachineManager.hasVariants + + text: model.variant + elide: Text.ElideRight + font: UM.Theme.getFont("default_bold") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + + anchors + { + left: extruderIcon.right + leftMargin: UM.Theme.getSize("default_margin").width + top: typeAndBrandNameLabel.bottom + } + } + } + } + + //Placeholder text if there is a configuration to select but no materials (so we can't show the materials per extruder). + Label + { + text: catalog.i18nc("@label", "Select configuration") + elide: Text.ElideRight + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + + visible: !Cura.MachineManager.hasMaterials && (Cura.MachineManager.hasVariants || Cura.MachineManager.hasVariantBuildplates) + + anchors + { + left: parent.left + leftMargin: UM.Theme.getSize("default_margin").width + verticalCenter: parent.verticalCenter + } + } + } + + contentItem: Column + { + id: popupItem + width: UM.Theme.getSize("configuration_selector").width + height: implicitHeight // Required because ExpandableComponent will try to use this to determine the size of the background of the pop-up. + padding: UM.Theme.getSize("default_margin").height + spacing: UM.Theme.getSize("default_margin").height + + property bool is_connected: false // If current machine is connected to a printer. Only evaluated upon making popup visible. + property int configuration_method: ConfigurationMenu.ConfigurationMethod.Custom // Type of configuration being used. Only evaluated upon making popup visible. + property int manual_selected_method: -1 // It stores the configuration method selected by the user. By default the selected method is + + onVisibleChanged: + { + is_connected = Cura.MachineManager.activeMachineHasRemoteConnection && Cura.MachineManager.printerConnected && Cura.MachineManager.printerOutputDevices[0].uniqueConfigurations.length > 0 //Re-evaluate. + + // If the printer is not connected or does not have configurations, we switch always to the custom mode. If is connected instead, the auto mode + // or the previous state is selected + configuration_method = is_connected ? (manual_selected_method == -1 ? ConfigurationMenu.ConfigurationMethod.Auto : manual_selected_method) : ConfigurationMenu.ConfigurationMethod.Custom + } + + Item + { + width: parent.width - 2 * parent.padding + height: + { + var height = 0 + if (autoConfiguration.visible) + { + height += autoConfiguration.height + } + if (customConfiguration.visible) + { + height += customConfiguration.height + } + return height + } + + AutoConfiguration + { + id: autoConfiguration + visible: popupItem.configuration_method == ConfigurationMenu.ConfigurationMethod.Auto + } + + CustomConfiguration + { + id: customConfiguration + visible: popupItem.configuration_method == ConfigurationMenu.ConfigurationMethod.Custom + } + } + + Item + { + height: visible ? childrenRect.height: 0 + anchors.right: parent.right + anchors.rightMargin: UM.Theme.getSize("default_margin").width + width: childrenRect.width + UM.Theme.getSize("default_margin").width + visible: popupItem.configuration_method == ConfigurationMenu.ConfigurationMethod.Custom + UM.RecolorImage + { + id: externalLinkIcon + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + height: materialInfoLabel.height + width: height + sourceSize.height: width + color: UM.Theme.getColor("text_link") + source: UM.Theme.getIcon("external_link") + } + + Label + { + id: materialInfoLabel + wrapMode: Text.WordWrap + text: catalog.i18nc("@label", "See the material compatibility chart") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text_link") + linkColor: UM.Theme.getColor("text_link") + anchors.left: externalLinkIcon.right + anchors.leftMargin: UM.Theme.getSize("narrow_margin").width + renderType: Text.NativeRendering + + MouseArea + { + anchors.fill: parent + hoverEnabled: true + onClicked: + { + // open the material URL with web browser + var url = "https://ultimaker.com/incoming-links/cura/material-compatibilty" + Qt.openUrlExternally(url) + } + onEntered: + { + materialInfoLabel.font.underline = true + } + onExited: + { + materialInfoLabel.font.underline = false + } + } + } + } + + Rectangle + { + id: separator + visible: buttonBar.visible + x: -parent.padding + + width: parent.width + height: UM.Theme.getSize("default_lining").height + + color: UM.Theme.getColor("lining") + } + + //Allow switching between custom and auto. + Item + { + id: buttonBar + visible: popupItem.is_connected //Switching only makes sense if the "auto" part is possible. + + width: parent.width - 2 * parent.padding + height: childrenRect.height + + Cura.SecondaryButton + { + id: goToCustom + visible: popupItem.configuration_method == ConfigurationMenu.ConfigurationMethod.Auto + text: catalog.i18nc("@label", "Custom") + + anchors.right: parent.right + + iconSource: UM.Theme.getIcon("arrow_right") + isIconOnRightSide: true + + onClicked: + { + popupItem.configuration_method = ConfigurationMenu.ConfigurationMethod.Custom + popupItem.manual_selected_method = popupItem.configuration_method + } + } + + Cura.SecondaryButton + { + id: goToAuto + visible: popupItem.configuration_method == ConfigurationMenu.ConfigurationMethod.Custom + text: catalog.i18nc("@label", "Configurations") + + iconSource: UM.Theme.getIcon("arrow_left") + + onClicked: + { + popupItem.configuration_method = ConfigurationMenu.ConfigurationMethod.Auto + popupItem.manual_selected_method = popupItem.configuration_method + } + } + } + } + + Connections + { + target: Cura.MachineManager + onGlobalContainerChanged: popupItem.manual_selected_method = -1 // When switching printers, reset the value of the manual selected method + } +} diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationSelection.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationSelection.qml deleted file mode 100644 index d7ee2c68ee..0000000000 --- a/resources/qml/Menus/ConfigurationMenu/ConfigurationSelection.qml +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 2.0 -import QtQuick.Controls.Styles 1.4 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -Item -{ - id: configurationSelector - property var connectedDevice: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null - property var panelWidth: control.width - - function switchPopupState() - { - popup.visible ? popup.close() : popup.open() - } - - SyncButton - { - id: syncButton - onClicked: switchPopupState() - outputDevice: connectedDevice - } - - Popup - { - // TODO Change once updating to Qt5.10 - The 'opened' property is in 5.10 but the behavior is now implemented with the visible property - id: popup - clip: true - closePolicy: Popup.CloseOnPressOutsideParent - y: configurationSelector.height - UM.Theme.getSize("default_lining").height - x: configurationSelector.width - width - width: panelWidth - visible: false - padding: UM.Theme.getSize("default_lining").width - transformOrigin: Popup.Top - contentItem: ConfigurationListView - { - id: configList - width: panelWidth - 2 * popup.padding - outputDevice: connectedDevice - } - background: Rectangle - { - color: UM.Theme.getColor("setting_control") - border.color: UM.Theme.getColor("setting_control_border") - } - exit: Transition - { - // This applies a default NumberAnimation to any changes a state change makes to x or y properties - NumberAnimation { property: "visible"; duration: 75; } - } - enter: Transition - { - // This applies a default NumberAnimation to any changes a state change makes to x or y properties - NumberAnimation { property: "visible"; duration: 75; } - } - onClosed: visible = false - onOpened: visible = true - } -} \ No newline at end of file diff --git a/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml b/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml new file mode 100644 index 0000000000..708606f483 --- /dev/null +++ b/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml @@ -0,0 +1,386 @@ +// Copyright (c) 2019 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.6 +import QtQuick.Controls 2.0 +import QtQuick.Controls 1.1 as OldControls + +import Cura 1.0 as Cura +import UM 1.3 as UM + +Item +{ + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + width: parent.width + height: childrenRect.height + + Label + { + id: header + text: catalog.i18nc("@header", "Custom") + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("small_button_text") + height: contentHeight + renderType: Text.NativeRendering + + anchors + { + top: parent.top + left: parent.left + right: parent.right + } + } + + //Printer type selector. + Item + { + id: printerTypeSelectorRow + visible: + { + return Cura.MachineManager.printerOutputDevices.length >= 1 //If connected... + && Cura.MachineManager.printerOutputDevices[0].connectedPrintersTypeCount != null //...and we have configuration information... + && Cura.MachineManager.printerOutputDevices[0].connectedPrintersTypeCount.length > 1; //...and there is more than one type of printer in the configuration list. + } + height: visible ? childrenRect.height : 0 + + anchors + { + left: parent.left + right: parent.right + top: header.bottom + topMargin: visible ? UM.Theme.getSize("default_margin").height : 0 + } + + Label + { + text: catalog.i18nc("@label", "Printer") + width: Math.round(parent.width * 0.3) - UM.Theme.getSize("default_margin").width + height: contentHeight + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + anchors.verticalCenter: printerTypeSelector.verticalCenter + anchors.left: parent.left + } + + OldControls.ToolButton + { + id: printerTypeSelector + text: Cura.MachineManager.activeMachineDefinitionName + tooltip: Cura.MachineManager.activeMachineDefinitionName + height: UM.Theme.getSize("print_setup_big_item").height + width: Math.round(parent.width * 0.7) + UM.Theme.getSize("default_margin").width + anchors.right: parent.right + style: UM.Theme.styles.print_setup_header_button + + menu: Cura.PrinterTypeMenu { } + } + } + + UM.TabRow + { + id: tabBar + anchors.top: printerTypeSelectorRow.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + visible: extrudersModel.count > 1 + + Repeater + { + id: repeater + model: extrudersModel + delegate: UM.TabRowButton + { + contentItem: Item + { + Cura.ExtruderIcon + { + anchors.horizontalCenter: parent.horizontalCenter + materialColor: model.color + extruderEnabled: model.enabled + width: parent.height + height: parent.height + } + } + onClicked: + { + Cura.ExtruderManager.setActiveExtruderIndex(tabBar.currentIndex) + } + } + } + + //When active extruder changes for some other reason, switch tabs. + //Don't directly link currentIndex to Cura.ExtruderManager.activeExtruderIndex! + //This causes a segfault in Qt 5.11. Something with VisualItemModel removing index -1. We have to use setCurrentIndex instead. + Connections + { + target: Cura.ExtruderManager + onActiveExtruderChanged: + { + tabBar.setCurrentIndex(Cura.ExtruderManager.activeExtruderIndex); + } + } + + // Can't use 'item: ...activeExtruderIndex' directly apparently, see also the comment on the previous block. + onVisibleChanged: + { + if (tabBar.visible) + { + tabBar.setCurrentIndex(Cura.ExtruderManager.activeExtruderIndex); + } + } + + //When the model of the extruders is rebuilt, the list of extruders is briefly emptied and rebuilt. + //This causes the currentIndex of the tab to be in an invalid position which resets it to 0. + //Therefore we need to change it back to what it was: The active extruder index. + Connections + { + target: repeater.model + onModelChanged: + { + tabBar.setCurrentIndex(Cura.ExtruderManager.activeExtruderIndex) + } + } + } + + Rectangle + { + width: parent.width + height: childrenRect.height + anchors.top: tabBar.bottom + + radius: tabBar.visible ? UM.Theme.getSize("default_radius").width : 0 + border.width: tabBar.visible ? UM.Theme.getSize("default_lining").width : 0 + border.color: UM.Theme.getColor("lining") + color: UM.Theme.getColor("main_background") + + //Remove rounding and lining at the top. + Rectangle + { + width: parent.width + height: parent.radius + anchors.top: parent.top + color: UM.Theme.getColor("lining") + visible: tabBar.visible + Rectangle + { + anchors + { + left: parent.left + leftMargin: parent.parent.border.width + right: parent.right + rightMargin: parent.parent.border.width + top: parent.top + } + height: parent.parent.radius + color: parent.parent.color + } + } + + Column + { + id: selectors + padding: UM.Theme.getSize("default_margin").width + spacing: UM.Theme.getSize("default_margin").height + + property var model: extrudersModel.items[tabBar.currentIndex] + + readonly property real paddedWidth: parent.width - padding * 2 + property real textWidth: Math.round(paddedWidth * 0.3) + property real controlWidth: + { + if(instructionLink == "") + { + return paddedWidth - textWidth + } + else + { + return paddedWidth - textWidth - UM.Theme.getSize("print_setup_big_item").height * 0.5 - UM.Theme.getSize("default_margin").width + } + } + property string instructionLink: Cura.ContainerManager.getContainerMetaDataEntry(Cura.MachineManager.activeStack.material.id, "instruction_link", "") + + Row + { + height: visible ? childrenRect.height : 0 + visible: extrudersModel.count > 1 // If there is only one extruder, there is no point to enable/disable that. + + Label + { + text: catalog.i18nc("@label", "Enabled") + verticalAlignment: Text.AlignVCenter + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + height: parent.height + width: selectors.textWidth + renderType: Text.NativeRendering + } + + OldControls.CheckBox + { + checked: Cura.MachineManager.activeStack != null ? Cura.MachineManager.activeStack.isEnabled : false + enabled: !checked || Cura.MachineManager.numberExtrudersEnabled > 1 //Disable if it's the last enabled extruder. + height: UM.Theme.getSize("setting_control").height + style: UM.Theme.styles.checkbox + + /* Use a MouseArea to process the click on this checkbox. + This is necessary because actually clicking the checkbox + causes the "checked" property to be overwritten. After + it's been overwritten, the original link that made it + depend on the active extruder stack is broken. */ + MouseArea + { + anchors.fill: parent + onClicked: Cura.MachineManager.setExtruderEnabled(Cura.ExtruderManager.activeExtruderIndex, !parent.checked) + enabled: parent.enabled + } + } + } + + Row + { + height: visible ? childrenRect.height: 0 + visible: Cura.MachineManager.hasMaterials + + Label + { + text: catalog.i18nc("@label", "Material") + verticalAlignment: Text.AlignVCenter + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + height: parent.height + width: selectors.textWidth + renderType: Text.NativeRendering + } + + OldControls.ToolButton + { + id: materialSelection + + property bool valueError: Cura.MachineManager.activeStack !== null ? Cura.ContainerManager.getContainerMetaDataEntry(Cura.MachineManager.activeStack.material.id, "compatible", "") !== "True" : true + property bool valueWarning: !Cura.MachineManager.isActiveQualitySupported + + text: Cura.MachineManager.activeStack !== null ? Cura.MachineManager.activeStack.material.name : "" + tooltip: text + + width: selectors.controlWidth + height: UM.Theme.getSize("print_setup_big_item").height + + style: UM.Theme.styles.print_setup_header_button + activeFocusOnPress: true + menu: Cura.MaterialMenu + { + extruderIndex: Cura.ExtruderManager.activeExtruderIndex + updateModels: materialSelection.visible + } + } + Item + { + width: instructionButton.width + 2 * UM.Theme.getSize("default_margin").width + height: instructionButton.visible ? materialSelection.height: 0 + Button + { + id: instructionButton + hoverEnabled: true + contentItem: Item {} + height: 0.5 * materialSelection.height + width: height + anchors.centerIn: parent + background: UM.RecolorImage + { + source: UM.Theme.getIcon("printing_guideline") + color: instructionButton.hovered ? UM.Theme.getColor("primary") : UM.Theme.getColor("icon") + } + visible: selectors.instructionLink != "" + onClicked:Qt.openUrlExternally(selectors.instructionLink) + } + } + } + + Row + { + height: visible ? childrenRect.height: 0 + visible: Cura.MachineManager.hasVariants + + Label + { + text: Cura.MachineManager.activeDefinitionVariantsName + verticalAlignment: Text.AlignVCenter + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + height: parent.height + width: selectors.textWidth + renderType: Text.NativeRendering + } + + OldControls.ToolButton + { + id: variantSelection + text: Cura.MachineManager.activeVariantName + tooltip: Cura.MachineManager.activeVariantName + height: UM.Theme.getSize("print_setup_big_item").height + width: selectors.controlWidth + style: UM.Theme.styles.print_setup_header_button + activeFocusOnPress: true; + + menu: Cura.NozzleMenu { extruderIndex: Cura.ExtruderManager.activeExtruderIndex } + } + } + + Row + { + id: warnings + height: visible ? childrenRect.height : 0 + visible: buildplateCompatibilityError || buildplateCompatibilityWarning + + property bool buildplateCompatibilityError: !Cura.MachineManager.variantBuildplateCompatible && !Cura.MachineManager.variantBuildplateUsable + property bool buildplateCompatibilityWarning: Cura.MachineManager.variantBuildplateUsable + + // This is a space holder aligning the warning messages. + Label + { + text: "" + width: selectors.textWidth + renderType: Text.NativeRendering + } + + Item + { + width: selectors.controlWidth + height: childrenRect.height + + UM.RecolorImage + { + id: warningImage + anchors.left: parent.left + source: UM.Theme.getIcon("warning") + width: UM.Theme.getSize("section_icon").width + height: UM.Theme.getSize("section_icon").height + sourceSize.width: width + sourceSize.height: height + color: UM.Theme.getColor("material_compatibility_warning") + visible: !Cura.MachineManager.isCurrentSetupSupported || warnings.buildplateCompatibilityError || warnings.buildplateCompatibilityWarning + } + + Label + { + id: materialCompatibilityLabel + anchors.left: warningImage.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + verticalAlignment: Text.AlignVCenter + width: selectors.controlWidth - warningImage.width - UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@label", "Use glue for better adhesion with this material combination.") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + visible: CuraSDKVersion == "dev" ? false : warnings.buildplateCompatibilityError || warnings.buildplateCompatibilityWarning + wrapMode: Text.WordWrap + renderType: Text.NativeRendering + } + } + } + } + } +} diff --git a/resources/qml/Menus/ConfigurationMenu/PrintCoreConfiguration.qml b/resources/qml/Menus/ConfigurationMenu/PrintCoreConfiguration.qml index 97b5bee745..3a4dae425f 100644 --- a/resources/qml/Menus/ConfigurationMenu/PrintCoreConfiguration.qml +++ b/resources/qml/Menus/ConfigurationMenu/PrintCoreConfiguration.qml @@ -5,87 +5,60 @@ import QtQuick 2.7 import QtQuick.Controls 2.0 import UM 1.2 as UM +import Cura 1.0 as Cura - -Column +Item { id: extruderInfo property var printCoreConfiguration - property var mainColor: "black" - spacing: Math.round(UM.Theme.getSize("default_margin").height / 2) - height: childrenRect.height + height: information.height - Item + //Extruder icon. + Cura.ExtruderIcon { - id: extruder - width: parent.width - height: childrenRect.height + id: icon + materialColor: printCoreConfiguration.material.color + anchors.verticalCenter: parent.verticalCenter + extruderEnabled: printCoreConfiguration.material.brand !== "" && printCoreConfiguration.hotendID !== "" + } + + Column + { + id: information + anchors + { + left: icon.right + right: parent.right + margins: UM.Theme.getSize("default_margin").width + } Label { - id: extruderLabel - text: catalog.i18nc("@label:extruder label", "Extruder") + text: printCoreConfiguration.material.brand ? printCoreConfiguration.material.brand : " " //Use space so that the height is still correct. renderType: Text.NativeRendering elide: Text.ElideRight - anchors.left: parent.left font: UM.Theme.getFont("default") - color: mainColor + color: UM.Theme.getColor("text_inactive") + width: parent.width } - - // Rounded item to show the extruder number - Item + Label { - id: extruderIconItem - anchors.verticalCenter: extruderLabel.verticalCenter - anchors.left: extruderLabel.right - anchors.leftMargin: Math.round(UM.Theme.getSize("default_margin").width / 2) - - width: UM.Theme.getSize("section_icon").width - height: UM.Theme.getSize("section_icon").height - - UM.RecolorImage { - id: mainCircle - anchors.fill: parent - - anchors.centerIn: parent - sourceSize.width: parent.width - sourceSize.height: parent.height - source: UM.Theme.getIcon("extruder_button") - color: mainColor - } - - Label - { - id: extruderNumberText - anchors.centerIn: parent - text: printCoreConfiguration.position + 1 - renderType: Text.NativeRendering - font: UM.Theme.getFont("default") - color: mainColor - } + text: printCoreConfiguration.material.brand ? printCoreConfiguration.material.name : " " //Use space so that the height is still correct. + renderType: Text.NativeRendering + elide: Text.ElideRight + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text") + width: parent.width + } + Label + { + text: printCoreConfiguration.hotendID ? printCoreConfiguration.hotendID : " " //Use space so that the height is still correct. + renderType: Text.NativeRendering + elide: Text.ElideRight + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text_inactive") + width: parent.width } - } - - Label - { - id: materialLabel - text: printCoreConfiguration.material.name - renderType: Text.NativeRendering - elide: Text.ElideRight - width: parent.width - font: UM.Theme.getFont("default_bold") - color: mainColor - } - - Label - { - id: printCoreTypeLabel - text: printCoreConfiguration.hotendID - renderType: Text.NativeRendering - elide: Text.ElideRight - width: parent.width - font: UM.Theme.getFont("default") - color: mainColor } } diff --git a/resources/qml/Menus/ConfigurationMenu/SyncButton.qml b/resources/qml/Menus/ConfigurationMenu/SyncButton.qml deleted file mode 100644 index 3099d684c1..0000000000 --- a/resources/qml/Menus/ConfigurationMenu/SyncButton.qml +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -Button -{ - id: base - property var outputDevice: null - property var matched: updateOnSync() - text: matched == true ? catalog.i18nc("@label:extruder label", "Yes") : catalog.i18nc("@label:extruder label", "No") - width: parent.width - height: parent.height - - function updateOnSync() - { - if (outputDevice != undefined) - { - for (var index in outputDevice.uniqueConfigurations) - { - var configuration = outputDevice.uniqueConfigurations[index] - if (Cura.MachineManager.matchesConfiguration(configuration)) - { - base.matched = true; - return; - } - } - } - base.matched = false; - } - - style: ButtonStyle - { - background: Rectangle - { - color: - { - if(control.pressed) - { - return UM.Theme.getColor("sidebar_header_active"); - } - else if(control.hovered) - { - return UM.Theme.getColor("sidebar_header_hover"); - } - else - { - return UM.Theme.getColor("sidebar_header_bar"); - } - } - Behavior on color { ColorAnimation { duration: 50; } } - - UM.RecolorImage - { - id: downArrow - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: height - color: UM.Theme.getColor("text_emphasis") - source: UM.Theme.getIcon("arrow_bottom") - } - UM.RecolorImage - { - id: sidebarComboBoxLabel - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: parent.verticalCenter; - - width: UM.Theme.getSize("printer_sync_icon").width - height: UM.Theme.getSize("printer_sync_icon").height - - color: control.matched ? UM.Theme.getColor("printer_config_matched") : UM.Theme.getColor("printer_config_mismatch") - source: UM.Theme.getIcon("tab_status_connected") - sourceSize.width: width - sourceSize.height: height - } - } - label: Label {} - } - - Connections - { - target: outputDevice - onUniqueConfigurationsChanged: updateOnSync() - } - - Connections - { - target: Cura.MachineManager - onCurrentConfigurationChanged: updateOnSync() - onOutputDevicesChanged: updateOnSync() - } -} \ No newline at end of file diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml index e35aef5f20..cb10d50ce8 100644 --- a/resources/qml/Menus/ContextMenu.qml +++ b/resources/qml/Menus/ContextMenu.qml @@ -27,7 +27,7 @@ Menu MenuItem { id: extruderHeader; text: catalog.i18ncp("@label", "Print Selected Model With:", "Print Selected Models With:", UM.Selection.selectionCount); enabled: false; visible: base.shouldShowExtruders } Instantiator { - model: Cura.ExtrudersModel { id: extrudersModel } + model: CuraApplication.getExtrudersModel() MenuItem { text: "%1: %2 - %3".arg(model.name).arg(model.material).arg(model.variant) visible: base.shouldShowExtruders @@ -103,7 +103,7 @@ Menu { id: machineExtruderCount - containerStackId: Cura.MachineManager.activeMachineId + containerStack: Cura.MachineManager.activeMachine key: "machine_extruder_count" watchedProperties: [ "value" ] } diff --git a/resources/qml/Menus/FileMenu.qml b/resources/qml/Menus/FileMenu.qml new file mode 100644 index 0000000000..955ac89693 --- /dev/null +++ b/resources/qml/Menus/FileMenu.qml @@ -0,0 +1,81 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Menu +{ + id: base + title: catalog.i18nc("@title:menu menubar:toplevel", "&File") + + MenuItem + { + id: newProjectMenu + action: Cura.Actions.newProject + } + + MenuItem + { + id: openMenu + action: Cura.Actions.open + } + + RecentFilesMenu { } + + MenuItem + { + id: saveWorkspaceMenu + text: catalog.i18nc("@title:menu menubar:file", "&Save...") + onTriggered: + { + var args = { "filter_by_machine": false, "file_type": "workspace", "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml" }; + if(UM.Preferences.getValue("cura/dialog_on_project_save")) + { + saveWorkspaceDialog.args = args + saveWorkspaceDialog.open() + } + else + { + UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, args) + } + } + } + + MenuSeparator { } + + MenuItem + { + id: saveAsMenu + text: catalog.i18nc("@title:menu menubar:file", "&Export...") + onTriggered: + { + var localDeviceId = "local_file" + UM.OutputDeviceManager.requestWriteToDevice(localDeviceId, PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}) + } + } + + MenuItem + { + id: exportSelectionMenu + text: catalog.i18nc("@action:inmenu menubar:file", "Export Selection...") + enabled: UM.Selection.hasSelection + iconName: "document-save-as" + onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file", PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}) + } + + MenuSeparator { } + + MenuItem + { + id: reloadAllMenu + action: Cura.Actions.reloadAll + } + + MenuSeparator { } + + MenuItem { action: Cura.Actions.quit } +} \ No newline at end of file diff --git a/resources/qml/Menus/LocalPrinterMenu.qml b/resources/qml/Menus/LocalPrinterMenu.qml index 0bdd4f33b9..4da1de2abf 100644 --- a/resources/qml/Menus/LocalPrinterMenu.qml +++ b/resources/qml/Menus/LocalPrinterMenu.qml @@ -7,16 +7,18 @@ import QtQuick.Controls 1.4 import UM 1.2 as UM import Cura 1.0 as Cura -Instantiator { - model: UM.ContainerStacksModel { - filter: {"type": "machine", "um_network_key": null} - } - MenuItem { - text: model.name; - checkable: true; +Instantiator +{ + model: Cura.GlobalStacksModel {} + + MenuItem + { + text: model.name + checkable: true checked: Cura.MachineManager.activeMachineId == model.id - exclusiveGroup: group; - onTriggered: Cura.MachineManager.setActiveMachine(model.id); + exclusiveGroup: group + visible: !model.hasRemoteConnection + onTriggered: Cura.MachineManager.setActiveMachine(model.id) } onObjectAdded: menu.insertItem(index, object) onObjectRemoved: menu.removeItem(object) diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index 64b3130724..ba35a160ba 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -10,28 +10,79 @@ import Cura 1.0 as Cura Menu { id: menu - title: "Material" + title: catalog.i18nc("@label:category menu label", "Material") property int extruderIndex: 0 + property string currentRootMaterialId: Cura.MachineManager.currentRootMaterialId[extruderIndex] + property string activeMaterialId: Cura.MachineManager.allActiveMaterialIds[Cura.ExtruderManager.extruderIds[extruderIndex]] + property bool updateModels: true + Cura.FavoriteMaterialsModel + { + id: favoriteMaterialsModel + extruderPosition: menu.extruderIndex + enabled: updateModels + } + Cura.GenericMaterialsModel + { + id: genericMaterialsModel + extruderPosition: menu.extruderIndex + enabled: updateModels + } + + Cura.MaterialBrandsModel + { + id: brandModel + extruderPosition: menu.extruderIndex + enabled: updateModels + } + + MenuItem + { + text: catalog.i18nc("@label:category menu label", "Favorites") + enabled: false + visible: favoriteMaterialsModel.items.length > 0 + } Instantiator { - model: genericMaterialsModel - MenuItem + model: favoriteMaterialsModel + delegate: MenuItem { - text: model.name + text: model.brand + " " + model.name checkable: true - checked: model.root_material_id == Cura.MachineManager.currentRootMaterialId[extruderIndex] + checked: model.root_material_id === menu.currentRootMaterialId + onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node) exclusiveGroup: group - onTriggered: - { - Cura.MachineManager.setMaterial(extruderIndex, model.container_node); - } } onObjectAdded: menu.insertItem(index, object) - onObjectRemoved: menu.removeItem(object) + onObjectRemoved: menu.removeItem(object) // TODO: This ain't gonna work, removeItem() takes an index, not object } - MenuSeparator { } + + MenuSeparator {} + + Menu + { + id: genericMenu + title: catalog.i18nc("@label:category menu label", "Generic") + + Instantiator + { + model: genericMaterialsModel + delegate: MenuItem + { + text: model.name + checkable: true + checked: model.root_material_id === menu.currentRootMaterialId + exclusiveGroup: group + onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node) + } + onObjectAdded: genericMenu.insertItem(index, object) + onObjectRemoved: genericMenu.removeItem(object) // TODO: This ain't gonna work, removeItem() takes an index, not object + } + } + + MenuSeparator {} + Instantiator { model: brandModel @@ -40,12 +91,12 @@ Menu id: brandMenu title: brandName property string brandName: model.name - property var brandMaterials: model.materials + property var brandMaterials: model.material_types Instantiator { model: brandMaterials - Menu + delegate: Menu { id: brandMaterialsMenu title: materialName @@ -55,16 +106,13 @@ Menu Instantiator { model: brandMaterialColors - MenuItem + delegate: MenuItem { text: model.name checkable: true - checked: model.id == Cura.MachineManager.allActiveMaterialIds[Cura.ExtruderManager.extruderIds[extruderIndex]] + checked: model.id === menu.activeMaterialId exclusiveGroup: group - onTriggered: - { - Cura.MachineManager.setMaterial(extruderIndex, model.container_node); - } + onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node) } onObjectAdded: brandMaterialsMenu.insertItem(index, object) onObjectRemoved: brandMaterialsMenu.removeItem(object) @@ -78,21 +126,14 @@ Menu onObjectRemoved: menu.removeItem(object) } - Cura.GenericMaterialsModel - { - id: genericMaterialsModel - extruderPosition: menu.extruderIndex + ExclusiveGroup { + id: group } - Cura.BrandMaterialsModel + MenuSeparator {} + + MenuItem { - id: brandModel - extruderPosition: menu.extruderIndex + action: Cura.Actions.manageMaterials } - - ExclusiveGroup { id: group } - - MenuSeparator { } - - MenuItem { action: Cura.Actions.manageMaterials } } diff --git a/resources/qml/Menus/NetworkPrinterMenu.qml b/resources/qml/Menus/NetworkPrinterMenu.qml index 07a22202e4..845159f3b2 100644 --- a/resources/qml/Menus/NetworkPrinterMenu.qml +++ b/resources/qml/Menus/NetworkPrinterMenu.qml @@ -7,18 +7,25 @@ import QtQuick.Controls 1.4 import UM 1.2 as UM import Cura 1.0 as Cura -Instantiator { - model: UM.ContainerStacksModel { - filter: {"type": "machine", "um_network_key": "*", "hidden": "False"} - } - MenuItem { - // TODO: Use printer_group icon when it's a cluster. Not use it for now since it doesn't look as expected -// iconSource: UM.Theme.getIcon("printer_single") - text: model.metadata["connect_group_name"] - checkable: true; - checked: Cura.MachineManager.activeMachineNetworkGroupName == model.metadata["connect_group_name"] - exclusiveGroup: group; - onTriggered: Cura.MachineManager.setActiveMachine(model.id); +Instantiator +{ + model: Cura.GlobalStacksModel {} + MenuItem + { + property string connectGroupName: + { + if("group_name" in model.metadata) + { + return model.metadata["group_name"] + } + return "" + } + text: connectGroupName + checkable: true + visible: model.hasRemoteConnection + checked: Cura.MachineManager.activeMachineNetworkGroupName == connectGroupName + exclusiveGroup: group + onTriggered: Cura.MachineManager.setActiveMachine(model.id) } onObjectAdded: menu.insertItem(index, object) onObjectRemoved: menu.removeItem(object) diff --git a/resources/qml/Menus/PrinterStatusIcon.qml b/resources/qml/Menus/PrinterStatusIcon.qml deleted file mode 100644 index 6ff6b07af8..0000000000 --- a/resources/qml/Menus/PrinterStatusIcon.qml +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -Item -{ - property var status: "disconnected" - width: childrenRect.width - height: childrenRect.height - UM.RecolorImage - { - id: statusIcon - width: UM.Theme.getSize("printer_status_icon").width - height: UM.Theme.getSize("printer_status_icon").height - sourceSize.width: width - sourceSize.height: width - color: UM.Theme.getColor("tab_status_" + parent.status) - source: UM.Theme.getIcon(parent.status) - } -} - - - diff --git a/resources/qml/Menus/ProfileMenu.qml b/resources/qml/Menus/ProfileMenu.qml index ffd3c556b6..68260f2502 100644 --- a/resources/qml/Menus/ProfileMenu.qml +++ b/resources/qml/Menus/ProfileMenu.qml @@ -17,24 +17,27 @@ Menu MenuItem { - text: (model.layer_height != "") ? model.name + " - " + model.layer_height + model.layer_height_unit : model.name + text: + { + var full_text = (model.layer_height != "") ? model.name + " - " + model.layer_height + model.layer_height_unit : model.name + full_text += model.is_experimental ? " - " + catalog.i18nc("@label", "Experimental") : "" + return full_text + } checkable: true checked: Cura.MachineManager.activeQualityOrQualityChangesName == model.name exclusiveGroup: group - onTriggered: { - Cura.MachineManager.setQualityGroup(model.quality_group) - } + onTriggered: Cura.MachineManager.setQualityGroup(model.quality_group) visible: model.available } - onObjectAdded: menu.insertItem(index, object); - onObjectRemoved: menu.removeItem(object); + onObjectAdded: menu.insertItem(index, object) + onObjectRemoved: menu.removeItem(object) } MenuSeparator { id: customSeparator - visible: Cura.CustomQualityProfilesDropDownMenuModel.rowCount > 0 + visible: Cura.CustomQualityProfilesDropDownMenuModel.count > 0 } Instantiator @@ -45,7 +48,7 @@ Menu Connections { target: Cura.CustomQualityProfilesDropDownMenuModel - onModelReset: customSeparator.visible = Cura.CustomQualityProfilesDropDownMenuModel.rowCount() > 0 + onModelReset: customSeparator.visible = Cura.CustomQualityProfilesDropDownMenuModel.count > 0 } MenuItem @@ -59,12 +62,12 @@ Menu onObjectAdded: { - customSeparator.visible = model.rowCount() > 0; + customSeparator.visible = model.count > 0; menu.insertItem(index, object); } onObjectRemoved: { - customSeparator.visible = model.rowCount() > 0; + customSeparator.visible = model.count > 0; menu.removeItem(object); } } diff --git a/resources/qml/Menus/RecentFilesMenu.qml b/resources/qml/Menus/RecentFilesMenu.qml index 12f53fb517..0f1f67b6fa 100644 --- a/resources/qml/Menus/RecentFilesMenu.qml +++ b/resources/qml/Menus/RecentFilesMenu.qml @@ -7,6 +7,8 @@ import QtQuick.Controls 1.1 import UM 1.3 as UM import Cura 1.0 as Cura +import "../Dialogs" + Menu { id: menu diff --git a/resources/qml/Menus/SettingVisibilityPresetsMenu.qml b/resources/qml/Menus/SettingVisibilityPresetsMenu.qml index 2175cfa402..8116b6def1 100644 --- a/resources/qml/Menus/SettingVisibilityPresetsMenu.qml +++ b/resources/qml/Menus/SettingVisibilityPresetsMenu.qml @@ -18,18 +18,17 @@ Menu Instantiator { - model: settingVisibilityPresetsModel + model: settingVisibilityPresetsModel.items MenuItem { - text: model.name + text: modelData.name checkable: true - checked: model.id == settingVisibilityPresetsModel.activePreset + checked: modelData.presetId == settingVisibilityPresetsModel.activePreset exclusiveGroup: group onTriggered: { - settingVisibilityPresetsModel.setActivePreset(model.id); - showSettingVisibilityProfile(); + settingVisibilityPresetsModel.setActivePreset(modelData.presetId); } } diff --git a/resources/qml/Menus/SettingsMenu.qml b/resources/qml/Menus/SettingsMenu.qml new file mode 100644 index 0000000000..00337ea8e1 --- /dev/null +++ b/resources/qml/Menus/SettingsMenu.qml @@ -0,0 +1,74 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Menu +{ + id: base + title: catalog.i18nc("@title:menu menubar:toplevel", "&Settings") + + PrinterMenu { title: catalog.i18nc("@title:menu menubar:settings", "&Printer") } + + onAboutToShow: extruderInstantiator.active = true + onAboutToHide: extruderInstantiator.active = false + Instantiator + { + id: extruderInstantiator + model: Cura.MachineManager.activeMachine.extruderList + active: false + asynchronous: true + Menu + { + title: modelData.name + + NozzleMenu { title: Cura.MachineManager.activeDefinitionVariantsName; visible: Cura.MachineManager.hasVariants; extruderIndex: index } + MaterialMenu { title: catalog.i18nc("@title:menu", "&Material"); visible: Cura.MachineManager.hasMaterials; extruderIndex: index } + + MenuSeparator + { + visible: Cura.MachineManager.hasVariants || Cura.MachineManager.hasMaterials + } + + MenuItem + { + text: catalog.i18nc("@action:inmenu", "Set as Active Extruder") + onTriggered: Cura.ExtruderManager.setActiveExtruderIndex(model.index) + } + + MenuItem + { + text: catalog.i18nc("@action:inmenu", "Enable Extruder") + onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, true) + visible: !Cura.MachineManager.getExtruder(model.index).isEnabled + } + + MenuItem + { + text: catalog.i18nc("@action:inmenu", "Disable Extruder") + onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, false) + visible: Cura.MachineManager.getExtruder(model.index).isEnabled + enabled: Cura.MachineManager.numberExtrudersEnabled > 1 + } + + } + onObjectAdded: base.insertItem(index, object) + onObjectRemoved: base.removeItem(object) + } + + // TODO Only show in dev mode. Remove check when feature ready + BuildplateMenu + { + title: catalog.i18nc("@title:menu", "&Build plate") + visible: CuraSDKVersion == "dev" && Cura.MachineManager.hasVariantBuildplates + } + ProfileMenu { title: catalog.i18nc("@title:settings", "&Profile") } + + MenuSeparator { } + + MenuItem { action: Cura.Actions.configureSettingVisibility } +} \ No newline at end of file diff --git a/resources/qml/Menus/ViewMenu.qml b/resources/qml/Menus/ViewMenu.qml index 6bbb0b1e2e..59e6dd24d0 100644 --- a/resources/qml/Menus/ViewMenu.qml +++ b/resources/qml/Menus/ViewMenu.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2016 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 @@ -9,31 +9,11 @@ import Cura 1.0 as Cura Menu { - title: catalog.i18nc("@title:menu menubar:toplevel", "&View"); + title: catalog.i18nc("@title:menu menubar:toplevel", "&View") id: base - enabled: !PrintInformation.preSliced property var multiBuildPlateModel: CuraApplication.getMultiBuildPlateModel() - // main views - Instantiator - { - model: UM.ViewModel{} - MenuItem - { - text: model.name - checkable: true - checked: model.active - exclusiveGroup: group - onTriggered: UM.Controller.setActiveView(model.id) - } - onObjectAdded: base.insertItem(index, object) - onObjectRemoved: base.removeItem(object) - } - ExclusiveGroup { id: group } - - MenuSeparator {} - Menu { title: catalog.i18nc("@action:inmenu menubar:view","&Camera position"); @@ -44,33 +24,41 @@ Menu MenuItem { action: Cura.Actions.viewRightSideCamera; } } - MenuSeparator { + MenuSeparator + { visible: UM.Preferences.getValue("cura/use_multi_build_plate") } Menu { id: buildPlateMenu; - title: catalog.i18nc("@action:inmenu menubar:view","&Build plate"); + title: catalog.i18nc("@action:inmenu menubar:view","&Build plate") visible: UM.Preferences.getValue("cura/use_multi_build_plate") Instantiator { model: base.multiBuildPlateModel - MenuItem { + MenuItem + { text: base.multiBuildPlateModel.getItem(index).name; - onTriggered: Cura.SceneController.setActiveBuildPlate(base.multiBuildPlateModel.getItem(index).buildPlateNumber); - checkable: true; - checked: base.multiBuildPlateModel.getItem(index).buildPlateNumber == base.multiBuildPlateModel.activeBuildPlate; - exclusiveGroup: buildPlateGroup; + onTriggered: Cura.SceneController.setActiveBuildPlate(base.multiBuildPlateModel.getItem(index).buildPlateNumber) + checkable: true + checked: base.multiBuildPlateModel.getItem(index).buildPlateNumber == base.multiBuildPlateModel.activeBuildPlate + exclusiveGroup: buildPlateGroup visible: UM.Preferences.getValue("cura/use_multi_build_plate") } - onObjectAdded: buildPlateMenu.insertItem(index, object); + onObjectAdded: buildPlateMenu.insertItem(index, object) onObjectRemoved: buildPlateMenu.removeItem(object) } - ExclusiveGroup { id: buildPlateGroup; } + ExclusiveGroup + { + id: buildPlateGroup + } } MenuSeparator {} - MenuItem { action: Cura.Actions.expandSidebar; } + MenuItem + { + action: Cura.Actions.toggleFullScreen + } } diff --git a/resources/qml/MonitorButton.qml b/resources/qml/MonitorButton.qml index 0bae22e164..99640b1059 100644 --- a/resources/qml/MonitorButton.qml +++ b/resources/qml/MonitorButton.qml @@ -1,5 +1,5 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. +//Copyright (c) 2018 Ultimaker B.V. +//Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 import QtQuick.Controls 1.1 @@ -13,9 +13,9 @@ import Cura 1.0 as Cura Item { id: base; - UM.I18nCatalog { id: catalog; name:"cura"} + UM.I18nCatalog { id: catalog; name: "cura"} - height: childrenRect.height + UM.Theme.getSize("sidebar_margin").height + height: childrenRect.height + UM.Theme.getSize("thick_margin").height property bool printerConnected: Cura.MachineManager.printerConnected property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands @@ -162,13 +162,13 @@ Item Label { id: statusLabel - width: parent.width - 2 * UM.Theme.getSize("sidebar_margin").width + width: parent.width - 2 * UM.Theme.getSize("thick_margin").width anchors.top: parent.top anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width + anchors.leftMargin: UM.Theme.getSize("thick_margin").width color: base.statusColor - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") text: statusText } @@ -179,7 +179,7 @@ Item anchors.right: progressBar.right color: base.statusColor - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") text: Math.round(progress) + "%" visible: showProgress } @@ -224,12 +224,12 @@ Item property string backgroundColor: UM.Theme.getColor("progressbar_background"); property string controlColor: base.statusColor; - width: parent.width - 2 * UM.Theme.getSize("sidebar_margin").width; + width: parent.width - 2 * UM.Theme.getSize("thick_margin").width; height: UM.Theme.getSize("progressbar").height; anchors.top: statusLabel.bottom; - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height / 4); + anchors.topMargin: Math.round(UM.Theme.getSize("thick_margin").height / 4); anchors.left: parent.left; - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width; + anchors.leftMargin: UM.Theme.getSize("thick_margin").width; } Row @@ -237,9 +237,9 @@ Item id: buttonsRow height: abortButton.height anchors.top: progressBar.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + anchors.topMargin: UM.Theme.getSize("thick_margin").height anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width + anchors.rightMargin: UM.Theme.getSize("thick_margin").width spacing: UM.Theme.getSize("default_margin").width Row @@ -281,16 +281,16 @@ Item text: { if (!printerConnected || activePrintJob == null) { - return catalog.i18nc("@label:", "Pause"); + return catalog.i18nc("@label", "Pause"); } if (activePrintJob.state == "paused") { - return catalog.i18nc("@label:", "Resume"); + return catalog.i18nc("@label", "Resume"); } else { - return catalog.i18nc("@label:", "Pause"); + return catalog.i18nc("@label", "Pause"); } } onClicked: @@ -309,7 +309,7 @@ Item } } - style: UM.Theme.styles.sidebar_action_button + style: UM.Theme.styles.print_setup_action_button } Button @@ -322,10 +322,10 @@ Item height: UM.Theme.getSize("save_button_save_to_button").height - text: catalog.i18nc("@label:", "Abort Print") + text: catalog.i18nc("@label", "Abort Print") onClicked: confirmationDialog.visible = true - style: UM.Theme.styles.sidebar_action_button + style: UM.Theme.styles.print_setup_action_button } MessageDialog diff --git a/resources/qml/MonitorSidebar.qml b/resources/qml/MonitorSidebar.qml deleted file mode 100644 index b761b05380..0000000000 --- a/resources/qml/MonitorSidebar.qml +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 2.0 -import QtQuick.Layouts 1.3 - -import UM 1.2 as UM -import Cura 1.0 as Cura -import "Menus" -import "Menus/ConfigurationMenu" - -Rectangle -{ - id: base - - property int currentModeIndex - property bool hideSettings: PrintInformation.preSliced - property bool hideView: Cura.MachineManager.activeMachineName == "" - - // Is there an output device for this printer? - property bool isNetworkPrinter: Cura.MachineManager.activeMachineNetworkKey != "" - property bool printerConnected: Cura.MachineManager.printerConnected - property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands - property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null - - property variant printDuration: PrintInformation.currentPrintTime - property variant printMaterialLengths: PrintInformation.materialLengths - property variant printMaterialWeights: PrintInformation.materialWeights - property variant printMaterialCosts: PrintInformation.materialCosts - property variant printMaterialNames: PrintInformation.materialNames - - color: UM.Theme.getColor("sidebar") - UM.I18nCatalog { id: catalog; name:"cura"} - - Timer { - id: tooltipDelayTimer - interval: 500 - repeat: false - property var item - property string text - - onTriggered: - { - base.showTooltip(base, {x: 0, y: item.y}, text); - } - } - - function showTooltip(item, position, text) - { - tooltip.text = text; - position = item.mapToItem(base, position.x - UM.Theme.getSize("default_arrow").width, position.y); - tooltip.show(position); - } - - function hideTooltip() - { - tooltip.hide(); - } - - function strPadLeft(string, pad, length) { - return (new Array(length + 1).join(pad) + string).slice(-length); - } - - function getPrettyTime(time) - { - var hours = Math.floor(time / 3600) - time -= hours * 3600 - var minutes = Math.floor(time / 60); - time -= minutes * 60 - var seconds = Math.floor(time); - - var finalTime = strPadLeft(hours, "0", 2) + ':' + strPadLeft(minutes,'0',2)+ ':' + strPadLeft(seconds,'0',2); - return finalTime; - } - - MouseArea - { - anchors.fill: parent - acceptedButtons: Qt.AllButtons - - onWheel: - { - wheel.accepted = true; - } - } - - MachineSelection - { - id: machineSelection - width: base.width - configSelection.width - separator.width - height: UM.Theme.getSize("sidebar_header").height - anchors.top: base.top - anchors.left: parent.left - } - - Rectangle - { - id: separator - visible: configSelection.visible - width: visible ? Math.round(UM.Theme.getSize("sidebar_lining_thin").height / 2) : 0 - height: UM.Theme.getSize("sidebar_header").height - color: UM.Theme.getColor("sidebar_lining_thin") - anchors.left: machineSelection.right - } - - ConfigurationSelection - { - id: configSelection - visible: isNetworkPrinter && printerConnected - width: visible ? Math.round(base.width * 0.15) : 0 - height: UM.Theme.getSize("sidebar_header").height - anchors.top: base.top - anchors.right: parent.right - panelWidth: base.width - } - - Loader - { - id: controlItem - anchors.bottom: footerSeparator.top - anchors.top: machineSelection.bottom - anchors.left: base.left - anchors.right: base.right - sourceComponent: - { - if(connectedPrinter != null) - { - if(connectedPrinter.controlItem != null) - { - return connectedPrinter.controlItem - } - } - return null - } - } - - Loader - { - anchors.bottom: footerSeparator.top - anchors.top: machineSelection.bottom - anchors.left: base.left - anchors.right: base.right - source: - { - if(controlItem.sourceComponent == null) - { - return "PrintMonitor.qml" - } - else - { - return "" - } - } - } - - Rectangle - { - id: footerSeparator - width: parent.width - height: UM.Theme.getSize("sidebar_lining").height - color: UM.Theme.getColor("sidebar_lining") - anchors.bottom: monitorButton.top - anchors.bottomMargin: UM.Theme.getSize("sidebar_margin").height - } - - // MonitorButton is actually the bottom footer panel. - MonitorButton - { - id: monitorButton - implicitWidth: base.width - anchors.bottom: parent.bottom - } - - SidebarTooltip - { - id: tooltip - } - - UM.SettingPropertyProvider - { - id: machineExtruderCount - - containerStackId: Cura.MachineManager.activeMachineId - key: "machine_extruder_count" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: machineHeatedBed - - containerStackId: Cura.MachineManager.activeMachineId - key: "machine_heated_bed" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - // Make the ConfigurationSelector react when the global container changes, otherwise if Cura is not connected to the printer, - // switching printers make no reaction - Connections - { - target: Cura.MachineManager - onGlobalContainerChanged: - { - base.isNetworkPrinter = Cura.MachineManager.activeMachineNetworkKey != "" - base.printerConnected = Cura.MachineManager.printerOutputDevices.length != 0 - } - } -} diff --git a/resources/qml/ObjectsList.qml b/resources/qml/ObjectsList.qml index 8c8eaa16ae..fd5175fce2 100644 --- a/resources/qml/ObjectsList.qml +++ b/resources/qml/ObjectsList.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2017 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 @@ -55,7 +55,6 @@ Rectangle { width: control.width height: control.height - sourceSize.width: width sourceSize.height: width color: UM.Theme.getColor("setting_control_text") source: collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom") @@ -225,7 +224,7 @@ Rectangle { id: arrangeAllBuildPlatesButton; text: catalog.i18nc("@action:button","Arrange to all build plates"); - style: UM.Theme.styles.sidebar_action_button + style: UM.Theme.styles.print_setup_action_button height: UM.Theme.getSize("objects_menu_button").height; tooltip: ''; anchors @@ -245,7 +244,7 @@ Rectangle { id: arrangeBuildPlateButton; text: catalog.i18nc("@action:button","Arrange current build plate"); - style: UM.Theme.styles.sidebar_action_button + style: UM.Theme.styles.print_setup_action_button height: UM.Theme.getSize("objects_menu_button").height; tooltip: ''; anchors diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 5f60b23477..e8519c6abf 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2017 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.1 @@ -13,6 +13,7 @@ UM.PreferencesPage { //: General configuration page title title: catalog.i18nc("@title:tab","General") + id: generalPreferencesPage function setDefaultLanguage(languageCode) { @@ -100,24 +101,10 @@ UM.PreferencesPage UM.Preferences.resetPreference("cura/choice_on_open_project") setDefaultOpenProjectOption(UM.Preferences.getValue("cura/choice_on_open_project")) - if (pluginExistsAndEnabled("SliceInfoPlugin")) { - UM.Preferences.resetPreference("info/send_slice_info") - sendDataCheckbox.checked = boolCheck(UM.Preferences.getValue("info/send_slice_info")) - } - if (pluginExistsAndEnabled("UpdateChecker")) { - UM.Preferences.resetPreference("info/automatic_update_check") - checkUpdatesCheckbox.checked = boolCheck(UM.Preferences.getValue("info/automatic_update_check")) - } - } - - function pluginExistsAndEnabled(pluginName) - { - var pluginItem = plugins.find("id", pluginName) - if (pluginItem > -1) - { - return plugins.getItem(pluginItem).enabled - } - return false + UM.Preferences.resetPreference("info/send_slice_info") + sendDataCheckbox.checked = boolCheck(UM.Preferences.getValue("info/send_slice_info")) + UM.Preferences.resetPreference("info/automatic_update_check") + checkUpdatesCheckbox.checked = boolCheck(UM.Preferences.getValue("info/automatic_update_check")) } ScrollView @@ -129,11 +116,9 @@ UM.PreferencesPage Column { - //: Model used to check if a plugin exists - UM.PluginsModel { id: plugins } //: Language selection label - UM.I18nCatalog{id: catalog; name:"cura"} + UM.I18nCatalog{id: catalog; name: "cura"} Label { @@ -150,7 +135,6 @@ UM.PreferencesPage { id: languageLabel text: catalog.i18nc("@label","Language:") - anchors.verticalCenter: languageComboBox.verticalCenter } ComboBox @@ -218,7 +202,6 @@ UM.PreferencesPage { id: currencyLabel text: catalog.i18nc("@label","Currency:") - anchors.verticalCenter: currencyField.verticalCenter } TextField @@ -232,7 +215,6 @@ UM.PreferencesPage { id: themeLabel text: catalog.i18nc("@label","Theme:") - anchors.verticalCenter: themeComboBox.verticalCenter } ComboBox @@ -283,9 +265,6 @@ UM.PreferencesPage } } - - - Label { id: languageCaption @@ -308,7 +287,7 @@ UM.PreferencesPage width: childrenRect.width; height: childrenRect.height; - text: catalog.i18nc("@info:tooltip","Slice automatically when changing settings.") + text: catalog.i18nc("@info:tooltip", "Slice automatically when changing settings.") CheckBox { @@ -316,7 +295,7 @@ UM.PreferencesPage checked: boolCheck(UM.Preferences.getValue("general/auto_slice")) onClicked: UM.Preferences.setValue("general/auto_slice", checked) - text: catalog.i18nc("@option:check","Slice automatically"); + text: catalog.i18nc("@option:check", "Slice automatically"); } } @@ -330,7 +309,7 @@ UM.PreferencesPage Label { font.bold: true - text: catalog.i18nc("@label","Viewport behavior") + text: catalog.i18nc("@label", "Viewport behavior") } UM.TooltipArea @@ -338,7 +317,7 @@ UM.PreferencesPage width: childrenRect.width; height: childrenRect.height; - text: catalog.i18nc("@info:tooltip","Highlight unsupported areas of the model in red. Without support these areas will not print properly.") + text: catalog.i18nc("@info:tooltip", "Highlight unsupported areas of the model in red. Without support these areas will not print properly.") CheckBox { @@ -347,14 +326,14 @@ UM.PreferencesPage checked: boolCheck(UM.Preferences.getValue("view/show_overhang")) onClicked: UM.Preferences.setValue("view/show_overhang", checked) - text: catalog.i18nc("@option:check","Display overhang"); + text: catalog.i18nc("@option:check", "Display overhang"); } } UM.TooltipArea { width: childrenRect.width; height: childrenRect.height; - text: catalog.i18nc("@info:tooltip","Moves the camera so the model is in the center of the view when a model is selected") + text: catalog.i18nc("@info:tooltip", "Moves the camera so the model is in the center of the view when a model is selected") CheckBox { @@ -368,12 +347,12 @@ UM.PreferencesPage UM.TooltipArea { width: childrenRect.width; height: childrenRect.height; - text: catalog.i18nc("@info:tooltip","Should the default zoom behavior of cura be inverted?") + text: catalog.i18nc("@info:tooltip", "Should the default zoom behavior of cura be inverted?") CheckBox { id: invertZoomCheckbox - text: catalog.i18nc("@action:button","Invert the direction of camera zoom."); + text: catalog.i18nc("@action:button", "Invert the direction of camera zoom."); checked: boolCheck(UM.Preferences.getValue("view/invert_zoom")) onClicked: UM.Preferences.setValue("view/invert_zoom", checked) } @@ -677,7 +656,6 @@ UM.PreferencesPage UM.TooltipArea { - visible: pluginExistsAndEnabled("UpdateChecker") width: childrenRect.width height: visible ? childrenRect.height : 0 text: catalog.i18nc("@info:tooltip","Should Cura check for updates when the program is started?") @@ -693,7 +671,6 @@ UM.PreferencesPage UM.TooltipArea { - visible: pluginExistsAndEnabled("SliceInfoPlugin") width: childrenRect.width height: visible ? childrenRect.height : 0 text: catalog.i18nc("@info:tooltip","Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored.") @@ -751,6 +728,11 @@ UM.PreferencesPage target: UM.Preferences onPreferenceChanged: { + if (preference !== "info/send_slice_info") + { + return; + } + sendDataCheckbox.checked = boolCheck(UM.Preferences.getValue("info/send_slice_info")) } } diff --git a/resources/qml/Preferences/MachinesPage.qml b/resources/qml/Preferences/MachinesPage.qml index 4dc5465dc6..6f214a7efb 100644 --- a/resources/qml/Preferences/MachinesPage.qml +++ b/resources/qml/Preferences/MachinesPage.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2016 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 @@ -21,8 +21,10 @@ UM.ManagementPage function activeMachineIndex() { - for(var i = 0; i < model.rowCount(); i++) { - if (model.getItem(i).id == Cura.MachineManager.activeMachineId) { + for(var i = 0; i < model.count; i++) + { + if (model.getItem(i).id == Cura.MachineManager.activeMachineId) + { return i; } } @@ -47,14 +49,14 @@ UM.ManagementPage { text: catalog.i18nc("@action:button", "Remove"); iconName: "list-remove"; - enabled: base.currentItem != null && model.rowCount() > 1 + enabled: base.currentItem != null && model.count > 1 onClicked: confirmDialog.open(); }, Button { text: catalog.i18nc("@action:button", "Rename"); iconName: "edit-rename"; - enabled: base.currentItem != null && base.currentItem.metadata.connect_group_name == null + enabled: base.currentItem != null && base.currentItem.metadata.group_name == null onClicked: renameDialog.open(); } ] @@ -68,7 +70,7 @@ UM.ManagementPage { id: machineName text: base.currentItem && base.currentItem.name ? base.currentItem.name : "" - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") width: parent.width elide: Text.ElideRight } @@ -89,7 +91,7 @@ UM.ManagementPage Item { - width: childrenRect.width + 2 * screenScaleFactor + width: Math.round(childrenRect.width + 2 * screenScaleFactor) height: childrenRect.height Button { @@ -124,132 +126,15 @@ UM.ManagementPage } } - Grid - { - id: machineInfo - - anchors.top: machineActions.visible ? machineActions.bottom : machineActions.anchors.top - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.right: parent.right - spacing: UM.Theme.getSize("default_margin").height - rowSpacing: UM.Theme.getSize("default_lining").height - columns: 2 - - visible: base.currentItem - - property bool printerConnected: Cura.MachineManager.printerConnected - property var connectedPrinter: printerConnected ? Cura.MachineManager.printerOutputDevices[0] : null - property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands - property var printJob: connectedPrinter != null ? connectedPrinter.activePrintJob: null - Label - { - text: catalog.i18nc("@label", "Printer type:") - visible: base.currentItem && "definition_name" in base.currentItem.metadata - } - Label - { - text: (base.currentItem && "definition_name" in base.currentItem.metadata) ? base.currentItem.metadata.definition_name : "" - } - Label - { - text: catalog.i18nc("@label", "Connection:") - visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId - } - Label - { - width: (parent.width * 0.7) | 0 - text: machineInfo.printerConnected ? machineInfo.connectedPrinter.connectionText : catalog.i18nc("@info:status", "The printer is not connected.") - visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId - wrapMode: Text.WordWrap - } - Label - { - text: catalog.i18nc("@label", "State:") - visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId && machineInfo.printerAcceptsCommands - } - Label { - width: (parent.width * 0.7) | 0 - text: - { - if(!machineInfo.printerConnected || !machineInfo.printerAcceptsCommands) { - return ""; - } - - if (machineInfo.printJob == null) - { - return catalog.i18nc("@label:MonitorStatus", "Waiting for a printjob"); - } - - switch(machineInfo.printJob.state) - { - case "printing": - return catalog.i18nc("@label:MonitorStatus", "Printing..."); - case "paused": - return catalog.i18nc("@label:MonitorStatus", "Paused"); - case "pre_print": - return catalog.i18nc("@label:MonitorStatus", "Preparing..."); - case "wait_cleanup": - return catalog.i18nc("@label:MonitorStatus", "Waiting for someone to clear the build plate"); - case "error": - return printerOutputDevice.errorText; - case "maintenance": - return catalog.i18nc("@label:MonitorStatus", "In maintenance. Please check the printer"); - case "abort": // note sure if this jobState actually occurs in the wild - return catalog.i18nc("@label:MonitorStatus", "Aborting print..."); - - } - return "" - } - visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId && machineInfo.printerAcceptsCommands - wrapMode: Text.WordWrap - } - } - - Column { - id: additionalComponentsColumn - anchors.left: parent.left - anchors.right: parent.right - anchors.top: machineInfo.visible ? machineInfo.bottom : machineInfo.anchors.top - anchors.topMargin: UM.Theme.getSize("default_margin").width - - spacing: UM.Theme.getSize("default_margin").width - visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId - - Component.onCompleted: - { - for (var component in CuraApplication.additionalComponents["machinesDetailPane"]) { - CuraApplication.additionalComponents["machinesDetailPane"][component].parent = additionalComponentsColumn - } - } - } - - Component.onCompleted: { - addAdditionalComponents("machinesDetailPane") - } - - Connections { - target: CuraApplication - onAdditionalComponentsChanged: addAdditionalComponents - } - - function addAdditionalComponents (areaId) { - if(areaId == "machinesDetailPane") { - for (var component in CuraApplication.additionalComponents["machinesDetailPane"]) { - CuraApplication.additionalComponents["machinesDetailPane"][component].parent = additionalComponentsColumn - } - } - } - UM.I18nCatalog { id: catalog; name: "cura"; } UM.ConfirmRemoveDialog { - id: confirmDialog; - object: base.currentItem && base.currentItem.name ? base.currentItem.name : ""; + id: confirmDialog + object: base.currentItem && base.currentItem.name ? base.currentItem.name : "" onYes: { - Cura.MachineManager.removeMachine(base.currentItem.id); + Cura.MachineManager.removeMachine(base.currentItem.id) if(!base.currentItem) { objectList.currentIndex = activeMachineIndex() diff --git a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml new file mode 100644 index 0000000000..8db8e99d44 --- /dev/null +++ b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml @@ -0,0 +1,150 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Layouts 1.3 +import QtQuick.Dialogs 1.2 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Item +{ + id: brand_section + + property var sectionName: "" + property var elementsModel // This can be a MaterialTypesModel or GenericMaterialsModel or FavoriteMaterialsModel + property var hasMaterialTypes: true // It indicates wheather it has material types or not + property var expanded: materialList.expandedBrands.indexOf(sectionName) > -1 + + height: childrenRect.height + width: parent.width + Rectangle + { + id: brand_header_background + color: + { + if(!expanded && sectionName == materialList.currentBrand) + { + return UM.Theme.getColor("favorites_row_selected") + } + else + { + return UM.Theme.getColor("favorites_header_bar") + } + } + anchors.fill: brand_header + } + Row + { + id: brand_header + width: parent.width + Label + { + id: brand_name + text: sectionName + height: UM.Theme.getSize("favorites_row").height + width: parent.width - UM.Theme.getSize("favorites_button").width + verticalAlignment: Text.AlignVCenter + leftPadding: (UM.Theme.getSize("default_margin").width / 2) | 0 + } + Button + { + text: "" + implicitWidth: UM.Theme.getSize("favorites_button").width + implicitHeight: UM.Theme.getSize("favorites_button").height + UM.RecolorImage + { + anchors + { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + color: "black" + source: brand_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") + } + style: ButtonStyle + { + background: Item { } + } + } + } + MouseArea + { + anchors.fill: brand_header + onPressed: + { + const i = materialList.expandedBrands.indexOf(sectionName) + if (i > -1) + { + // Remove it + materialList.expandedBrands.splice(i, 1) + brand_section.expanded = false + } + else + { + // Add it + materialList.expandedBrands.push(sectionName) + brand_section.expanded = true + } + UM.Preferences.setValue("cura/expanded_brands", materialList.expandedBrands.join(";")); + } + } + Column + { + id: brandMaterialList + anchors.top: brand_header.bottom + width: parent.width + anchors.left: parent.left + height: brand_section.expanded ? childrenRect.height : 0 + visible: brand_section.expanded + + Repeater + { + model: elementsModel + delegate: Loader + { + id: loader + width: parent.width + property var element: model + sourceComponent: hasMaterialTypes ? materialsTypeSection : materialSlot + } + } + } + + Component + { + id: materialsTypeSection + MaterialsTypeSection + { + materialType: element + } + } + + Component + { + id: materialSlot + MaterialsSlot + { + material: element + } + } + + Connections + { + target: UM.Preferences + onPreferenceChanged: + { + if (preference !== "cura/expanded_types" && preference !== "cura/expanded_brands") + { + return; + } + + expanded = materialList.expandedBrands.indexOf(sectionName) > -1 + } + } +} \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml new file mode 100644 index 0000000000..eb4a63250f --- /dev/null +++ b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml @@ -0,0 +1,119 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Uranium is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Layouts 1.3 +import QtQuick.Dialogs 1.2 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Item +{ + id: detailsPanel + + property var currentItem: null + + onCurrentItemChanged: + { + // When the current item changes, the detail view needs to be updated + if (currentItem != null) + { + updateMaterialPropertiesObject() + materialDetailsView.currentMaterialNode = currentItem.container_node + } + } + + function updateMaterialPropertiesObject() + { + // DRAGON WARNING!!! DO NOT TOUCH THIS IF YOU DON'T KNOW. + // TL;DR: Always update "container_id" first! + // + // Other widgets such as MaterialsView have bindings towards "materialProperties" and its properties. Here the + // properties are updated one by one, and each change can trigger a reaction on those widgets that have + // connections to the property gets changed, and some reactions will use functions such as + // ContainerManager.getContainerMetaDataEntry() to fetch data using the "container_id" as the reference. + // We need to change "container_id" first so any underlying triggers will use the correct "container_id" to + // fetch data. Or, for example, if we change GUID first, which triggered the weight widget to fetch weight + // before we can update "container_id", so it will fetch weight with the wrong (old) "container_id". + materialProperties.container_id = currentItem.id + + materialProperties.name = currentItem.name || "Unknown" + materialProperties.guid = currentItem.GUID + materialProperties.brand = currentItem.brand || "Unknown" + materialProperties.material = currentItem.material || "Unknown" + materialProperties.color_name = currentItem.color_name || "Yellow" + materialProperties.color_code = currentItem.color_code || "yellow" + materialProperties.description = currentItem.description || "" + materialProperties.adhesion_info = currentItem.adhesion_info || "" + materialProperties.density = currentItem.density || 0.0 + materialProperties.diameter = currentItem.diameter || 0.0 + materialProperties.approximate_diameter = currentItem.approximate_diameter || "0" + } + + Item + { + anchors.fill: parent + + Item // Material title Label + { + id: profileName + + width: parent.width + height: childrenRect.height + + Label { + text: materialProperties.name + font: UM.Theme.getFont("large_bold") + } + } + + MaterialsView // Material detailed information view below the title Label + { + id: materialDetailsView + anchors + { + left: parent.left + right: parent.right + top: profileName.bottom + topMargin: UM.Theme.getSize("default_margin").height + bottom: parent.bottom + } + + editingEnabled: currentItem != null && !currentItem.is_read_only + + properties: materialProperties + containerId: currentItem != null ? currentItem.id : "" + currentMaterialNode: currentItem.container_node + } + + QtObject + { + id: materialProperties + + property string guid: "00000000-0000-0000-0000-000000000000" + property string container_id: "Unknown"; + property string name: "Unknown"; + property string profile_type: "Unknown"; + property string brand: "Unknown"; + property string material: "Unknown"; // This needs to be named as "material" to be consistent with + // the material container's metadata entry + + property string color_name: "Yellow"; + property color color_code: "yellow"; + + property real density: 0.0; + property real diameter: 0.0; + property string approximate_diameter: "0"; + + property real spool_cost: 0.0; + property real spool_weight: 0.0; + property real spool_length: 0.0; + property real cost_per_meter: 0.0; + + property string description: ""; + property string adhesion_info: ""; + } + } +} \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml new file mode 100644 index 0000000000..61f92db84c --- /dev/null +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -0,0 +1,168 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Uranium is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Layouts 1.3 +import QtQuick.Dialogs 1.2 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Item +{ + id: materialList + height: childrenRect.height + + // Children + UM.I18nCatalog { id: catalog; name: "cura"; } + Cura.MaterialBrandsModel + { + id: materialsModel + extruderPosition: Cura.ExtruderManager.activeExtruderIndex + } + + Cura.FavoriteMaterialsModel + { + id: favoriteMaterialsModel + extruderPosition: Cura.ExtruderManager.activeExtruderIndex + } + + Cura.GenericMaterialsModel + { + id: genericMaterialsModel + extruderPosition: Cura.ExtruderManager.activeExtruderIndex + } + + property var currentType: null + property var currentBrand: null + property var expandedBrands: UM.Preferences.getValue("cura/expanded_brands").split(";") + property var expandedTypes: UM.Preferences.getValue("cura/expanded_types").split(";") + + // Store information about which parts of the tree are expanded + function persistExpandedCategories() + { + UM.Preferences.setValue("cura/expanded_brands", materialList.expandedBrands.join(";")) + UM.Preferences.setValue("cura/expanded_types", materialList.expandedTypes.join(";")) + } + + // Expand the list of materials in order to select the current material + function expandActiveMaterial(search_root_id) + { + if (search_root_id == "") + { + // When this happens it means that the information of one of the materials has changed, so the model + // was updated and the list has to highlight the current item. + var currentItemId = base.currentItem == null ? "" : base.currentItem.root_material_id + search_root_id = currentItemId + } + for (var material_idx = 0; material_idx < genericMaterialsModel.count; material_idx++) + { + var material = genericMaterialsModel.getItem(material_idx) + if (material.root_material_id == search_root_id) + { + if (materialList.expandedBrands.indexOf("Generic") == -1) + { + materialList.expandedBrands.push("Generic") + } + materialList.currentBrand = "Generic" + base.currentItem = material + persistExpandedCategories() + return true + } + } + for (var brand_idx = 0; brand_idx < materialsModel.count; brand_idx++) + { + var brand = materialsModel.getItem(brand_idx) + var types_model = brand.material_types + for (var type_idx = 0; type_idx < types_model.count; type_idx++) + { + var type = types_model.getItem(type_idx) + var colors_model = type.colors + for (var material_idx = 0; material_idx < colors_model.count; material_idx++) + { + var material = colors_model.getItem(material_idx) + if (material.root_material_id == search_root_id) + { + if (materialList.expandedBrands.indexOf(brand.name) == -1) + { + materialList.expandedBrands.push(brand.name) + } + materialList.currentBrand = brand.name + if (materialList.expandedTypes.indexOf(brand.name + "_" + type.name) == -1) + { + materialList.expandedTypes.push(brand.name + "_" + type.name) + } + materialList.currentType = brand.name + "_" + type.name + base.currentItem = material + persistExpandedCategories() + return true + } + } + } + } + return false + } + + function updateAfterModelChanges() + { + var correctlyExpanded = materialList.expandActiveMaterial(base.newRootMaterialIdToSwitchTo) + if (correctlyExpanded) + { + if (base.toActivateNewMaterial) + { + var position = Cura.ExtruderManager.activeExtruderIndex + Cura.MachineManager.setMaterial(position, base.currentItem.container_node) + } + base.newRootMaterialIdToSwitchTo = "" + base.toActivateNewMaterial = false + } + } + + Connections + { + target: materialsModel + onItemsChanged: updateAfterModelChanges() + } + + Connections + { + target: genericMaterialsModel + onItemsChanged: updateAfterModelChanges() + } + + Column + { + width: materialList.width + height: childrenRect.height + + MaterialsBrandSection + { + id: favoriteSection + sectionName: "Favorites" + elementsModel: favoriteMaterialsModel + hasMaterialTypes: false + } + + MaterialsBrandSection + { + id: genericSection + sectionName: "Generic" + elementsModel: genericMaterialsModel + hasMaterialTypes: false + } + + Repeater + { + model: materialsModel + delegate: MaterialsBrandSection + { + id: brandSection + sectionName: model.name + elementsModel: model.material_types + hasMaterialTypes: true + } + } + } +} \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml new file mode 100644 index 0000000000..9118f16b4d --- /dev/null +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -0,0 +1,337 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Uranium is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Layouts 1.3 +import QtQuick.Dialogs 1.2 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Item +{ + id: base + + property QtObject materialManager: CuraApplication.getMaterialManager() + // Keep PreferencesDialog happy + property var resetEnabled: false + property var currentItem: null + + property var hasCurrentItem: base.currentItem != null + property var isCurrentItemActivated: + { + if (!hasCurrentItem) + { + return false + } + const extruder_position = Cura.ExtruderManager.activeExtruderIndex + const root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position] + return base.currentItem.root_material_id == root_material_id + } + property string newRootMaterialIdToSwitchTo: "" + property bool toActivateNewMaterial: false + + property var extruder_position: Cura.ExtruderManager.activeExtruderIndex + property var active_root_material_id: Cura.MachineManager.currentRootMaterialId[extruder_position] + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + // When loaded, try to select the active material in the tree + Component.onCompleted: materialListView.expandActiveMaterial(active_root_material_id) + + // Every time the selected item has changed, notify to the details panel + onCurrentItemChanged: + { + forceActiveFocus() + materialDetailsPanel.currentItem = currentItem + } + + // Main layout + Label + { + id: titleLabel + anchors + { + top: parent.top + left: parent.left + right: parent.right + margins: 5 * screenScaleFactor + } + font.pointSize: 18 + text: catalog.i18nc("@title:tab", "Materials") + } + + // Button Row + Row + { + id: buttonRow + anchors + { + left: parent.left + right: parent.right + top: titleLabel.bottom + } + height: childrenRect.height + + // Activate button + Button + { + text: catalog.i18nc("@action:button", "Activate") + iconName: "list-activate" + enabled: !isCurrentItemActivated && Cura.MachineManager.hasMaterials + onClicked: + { + forceActiveFocus() + + // Set the current material as the one to be activated (needed to force the UI update) + base.newRootMaterialIdToSwitchTo = base.currentItem.root_material_id + const extruder_position = Cura.ExtruderManager.activeExtruderIndex + Cura.MachineManager.setMaterial(extruder_position, base.currentItem.container_node) + } + } + + // Create button + Button + { + text: catalog.i18nc("@action:button", "Create") + iconName: "list-add" + onClicked: + { + forceActiveFocus(); + base.newRootMaterialIdToSwitchTo = base.materialManager.createMaterial(); + base.toActivateNewMaterial = true; + } + } + + // Duplicate button + Button + { + text: catalog.i18nc("@action:button", "Duplicate"); + iconName: "list-add" + enabled: base.hasCurrentItem + onClicked: + { + forceActiveFocus(); + base.newRootMaterialIdToSwitchTo = base.materialManager.duplicateMaterial(base.currentItem.container_node); + base.toActivateNewMaterial = true; + } + } + + // Remove button + Button + { + text: catalog.i18nc("@action:button", "Remove") + iconName: "list-remove" + enabled: base.hasCurrentItem && !base.currentItem.is_read_only && !base.isCurrentItemActivated + onClicked: + { + forceActiveFocus(); + confirmRemoveMaterialDialog.open(); + } + } + + // Import button + Button + { + text: catalog.i18nc("@action:button", "Import") + iconName: "document-import" + onClicked: + { + forceActiveFocus(); + importMaterialDialog.open(); + } + visible: true + } + + // Export button + Button + { + text: catalog.i18nc("@action:button", "Export") + iconName: "document-export" + onClicked: + { + forceActiveFocus(); + exportMaterialDialog.open(); + } + enabled: base.hasCurrentItem + } + } + + Item { + id: contentsItem + anchors + { + top: titleLabel.bottom + left: parent.left + right: parent.right + bottom: parent.bottom + margins: 5 * screenScaleFactor + bottomMargin: 0 + } + clip: true + } + + Item + { + anchors + { + top: buttonRow.bottom + topMargin: UM.Theme.getSize("default_margin").height + left: parent.left + right: parent.right + bottom: parent.bottom + } + + SystemPalette { id: palette } + + Label + { + id: captionLabel + anchors + { + top: parent.top + left: parent.left + } + visible: text != "" + text: + { + var caption = catalog.i18nc("@action:label", "Printer") + ": " + Cura.MachineManager.activeMachineName; + if (Cura.MachineManager.hasVariants) + { + caption += ", " + Cura.MachineManager.activeDefinitionVariantsName + ": " + Cura.MachineManager.activeVariantName; + } + return caption; + } + width: materialScrollView.width + elide: Text.ElideRight + } + + ScrollView + { + id: materialScrollView + anchors + { + top: captionLabel.visible ? captionLabel.bottom : parent.top + topMargin: captionLabel.visible ? UM.Theme.getSize("default_margin").height : 0 + bottom: parent.bottom + left: parent.left + } + + Rectangle + { + parent: viewport + anchors.fill: parent + color: palette.light + } + + width: (parent.width * 0.4) | 0 + frameVisible: true + horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff + + MaterialsList + { + id: materialListView + width: materialScrollView.viewport.width + } + } + + MaterialsDetailsPanel + { + id: materialDetailsPanel + anchors + { + left: materialScrollView.right + leftMargin: UM.Theme.getSize("default_margin").width + top: parent.top + bottom: parent.bottom + right: parent.right + } + } + } + + // Dialogs + MessageDialog + { + id: confirmRemoveMaterialDialog + icon: StandardIcon.Question; + title: catalog.i18nc("@title:window", "Confirm Remove") + text: catalog.i18nc("@label (%1 is object name)", "Are you sure you wish to remove %1? This cannot be undone!").arg(base.currentItem.name) + standardButtons: StandardButton.Yes | StandardButton.No + modality: Qt.ApplicationModal + onYes: + { + // Set the active material as the fallback. It will be selected when the current material is deleted + base.newRootMaterialIdToSwitchTo = base.active_root_material_id + base.materialManager.removeMaterial(base.currentItem.container_node); + } + } + + FileDialog + { + id: importMaterialDialog + title: catalog.i18nc("@title:window", "Import Material") + selectExisting: true + nameFilters: Cura.ContainerManager.getContainerNameFilters("material") + folder: CuraApplication.getDefaultPath("dialog_material_path") + onAccepted: + { + var result = Cura.ContainerManager.importMaterialContainer(fileUrl); + + messageDialog.title = catalog.i18nc("@title:window", "Import Material"); + messageDialog.text = catalog.i18nc("@info:status Don't translate the XML tags or !", "Could not import material %1: %2").arg(fileUrl).arg(result.message); + if (result.status == "success") + { + messageDialog.icon = StandardIcon.Information; + messageDialog.text = catalog.i18nc("@info:status Don't translate the XML tag !", "Successfully imported material %1").arg(fileUrl); + } + else if (result.status == "duplicate") + { + messageDialog.icon = StandardIcon.Warning; + } + else + { + messageDialog.icon = StandardIcon.Critical; + } + messageDialog.open(); + CuraApplication.setDefaultPath("dialog_material_path", folder); + } + } + + FileDialog + { + id: exportMaterialDialog + title: catalog.i18nc("@title:window", "Export Material") + selectExisting: false + nameFilters: Cura.ContainerManager.getContainerNameFilters("material") + folder: CuraApplication.getDefaultPath("dialog_material_path") + onAccepted: + { + var result = Cura.ContainerManager.exportContainer(base.currentItem.root_material_id, selectedNameFilter, fileUrl); + + messageDialog.title = catalog.i18nc("@title:window", "Export Material"); + if (result.status == "error") + { + messageDialog.icon = StandardIcon.Critical; + messageDialog.text = catalog.i18nc("@info:status Don't translate the XML tags and !", "Failed to export material to %1: %2").arg(fileUrl).arg(result.message); + messageDialog.open(); + } + else if (result.status == "success") + { + messageDialog.icon = StandardIcon.Information; + messageDialog.text = catalog.i18nc("@info:status Don't translate the XML tag !", "Successfully exported material to %1").arg(result.path); + messageDialog.open(); + } + CuraApplication.setDefaultPath("dialog_material_path", folder); + } + } + + MessageDialog + { + id: messageDialog + } +} diff --git a/resources/qml/Preferences/Materials/MaterialsSlot.qml b/resources/qml/Preferences/Materials/MaterialsSlot.qml new file mode 100644 index 0000000000..2f4847103b --- /dev/null +++ b/resources/qml/Preferences/Materials/MaterialsSlot.qml @@ -0,0 +1,115 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Layouts 1.3 +import QtQuick.Dialogs 1.2 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Rectangle +{ + id: materialSlot + property var material: null + property var hovered: false + property var is_favorite: material != null && material.is_favorite + + height: UM.Theme.getSize("favorites_row").height + width: parent.width + color: material != null ? (base.currentItem.root_material_id == material.root_material_id ? UM.Theme.getColor("favorites_row_selected") : "transparent") : "transparent" + + Rectangle + { + id: swatch + color: material != null ? material.color_code : "transparent" + border.width: UM.Theme.getSize("default_lining").width + border.color: "black" + width: UM.Theme.getSize("favorites_button_icon").width + height: UM.Theme.getSize("favorites_button_icon").height + anchors.verticalCenter: materialSlot.verticalCenter + anchors.left: materialSlot.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + } + Label + { + text: material != null ? material.brand + " " + material.name : "" + verticalAlignment: Text.AlignVCenter + height: parent.height + anchors.left: swatch.right + anchors.verticalCenter: materialSlot.verticalCenter + anchors.leftMargin: UM.Theme.getSize("narrow_margin").width + font.italic: Cura.MachineManager.currentRootMaterialId[Cura.ExtruderManager.activeExtruderIndex] == material.root_material_id + } + MouseArea + { + anchors.fill: parent + onClicked: + { + materialList.currentBrand = material.brand + materialList.currentType = material.brand + "_" + material.material + base.currentItem = material + } + hoverEnabled: true + onEntered: { materialSlot.hovered = true } + onExited: { materialSlot.hovered = false } + } + Button + { + id: favorite_button + text: "" + implicitWidth: UM.Theme.getSize("favorites_button").width + implicitHeight: UM.Theme.getSize("favorites_button").height + visible: materialSlot.hovered || materialSlot.is_favorite || favorite_button.hovered + anchors + { + right: materialSlot.right + verticalCenter: materialSlot.verticalCenter + } + onClicked: + { + if (materialSlot.is_favorite) + { + base.materialManager.removeFavorite(material.root_material_id) + return + } + base.materialManager.addFavorite(material.root_material_id) + return + } + style: ButtonStyle + { + background: Item { } + } + UM.RecolorImage + { + anchors + { + verticalCenter: favorite_button.verticalCenter + horizontalCenter: favorite_button.horizontalCenter + } + width: UM.Theme.getSize("favorites_button_icon").width + height: UM.Theme.getSize("favorites_button_icon").height + color: + { + if (favorite_button.hovered) + { + return UM.Theme.getColor("primary_hover") + } + else + { + if (materialSlot.is_favorite) + { + return UM.Theme.getColor("primary") + } + else + { + UM.Theme.getColor("text_inactive") + } + } + } + source: materialSlot.is_favorite ? UM.Theme.getIcon("favorites_star_full") : UM.Theme.getIcon("favorites_star_empty") + } + } +} \ No newline at end of file diff --git a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml new file mode 100644 index 0000000000..b5054591c0 --- /dev/null +++ b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml @@ -0,0 +1,141 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Uranium is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Layouts 1.3 +import QtQuick.Dialogs 1.2 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Item +{ + id: material_type_section + property var materialType + property var expanded: materialList.expandedTypes.indexOf(materialType.brand + "_" + materialType.name) > -1 + property var colorsModel: materialType.colors + height: childrenRect.height + width: parent.width + Rectangle + { + id: material_type_header_background + color: + { + if(!expanded && materialType.brand + "_" + materialType.name == materialList.currentType) + { + return UM.Theme.getColor("favorites_row_selected") + } + else + { + return "transparent" + } + } + width: parent.width + height: material_type_header.height + } + Rectangle + { + id: material_type_header_border + color: UM.Theme.getColor("favorites_header_bar") + anchors.bottom: material_type_header.bottom + anchors.left: material_type_header.left + height: UM.Theme.getSize("default_lining").height + width: material_type_header.width + } + Row + { + id: material_type_header + width: parent.width + leftPadding: UM.Theme.getSize("default_margin").width + anchors + { + left: parent.left + } + Label + { + text: materialType.name + height: UM.Theme.getSize("favorites_row").height + width: parent.width - parent.leftPadding - UM.Theme.getSize("favorites_button").width + id: material_type_name + verticalAlignment: Text.AlignVCenter + } + Button + { + text: "" + implicitWidth: UM.Theme.getSize("favorites_button").width + implicitHeight: UM.Theme.getSize("favorites_button").height + UM.RecolorImage { + anchors + { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + color: "black" + source: material_type_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") + } + style: ButtonStyle + { + background: Rectangle + { + anchors.fill: parent + color: "transparent" + } + } + } + } + MouseArea + { + anchors.fill: material_type_header + onPressed: + { + const identifier = materialType.brand + "_" + materialType.name; + const i = materialList.expandedTypes.indexOf(identifier) + if (i > -1) + { + // Remove it + materialList.expandedTypes.splice(i, 1) + material_type_section.expanded = false + } + else + { + // Add it + materialList.expandedTypes.push(identifier) + material_type_section.expanded = true + } + UM.Preferences.setValue("cura/expanded_types", materialList.expandedTypes.join(";")); + } + } + Column + { + height: material_type_section.expanded ? childrenRect.height : 0 + visible: material_type_section.expanded + width: parent.width + anchors.top: material_type_header.bottom + Repeater + { + model: colorsModel + delegate: MaterialsSlot + { + material: model + } + } + } + + Connections + { + target: UM.Preferences + onPreferenceChanged: + { + if (preference !== "cura/expanded_types" && preference !== "cura/expanded_brands") + { + return; + } + + expanded = materialList.expandedTypes.indexOf(materialType.brand + "_" + materialType.name) > -1 + } + } +} \ No newline at end of file diff --git a/resources/qml/Preferences/MaterialView.qml b/resources/qml/Preferences/Materials/MaterialsView.qml similarity index 97% rename from resources/qml/Preferences/MaterialView.qml rename to resources/qml/Preferences/Materials/MaterialsView.qml index 97184ab558..56fa12877f 100644 --- a/resources/qml/Preferences/MaterialView.qml +++ b/resources/qml/Preferences/Materials/MaterialsView.qml @@ -8,6 +8,8 @@ import QtQuick.Dialogs 1.2 import UM 1.2 as UM import Cura 1.0 as Cura +import ".." // Access to ReadOnlyTextArea.qml + TabView { id: base @@ -189,6 +191,7 @@ TabView ReadOnlyTextField { id: colorLabel; + width: parent.width - colorSelector.width - parent.spacing text: properties.color_name; readOnly: !base.editingEnabled onEditingFinished: base.setMetaDataEntry("color_name", properties.color_name, text) @@ -565,25 +568,25 @@ TabView // don't change when new name is the same if (old_name == new_name) { - return; + return } // update the values - base.materialManager.setMaterialName(base.currentMaterialNode, new_name); - materialProperties.name = new_name; + base.materialManager.setMaterialName(base.currentMaterialNode, new_name) + properties.name = new_name } // update the type of the material - function updateMaterialType (old_type, new_type) + function updateMaterialType(old_type, new_type) { - base.setMetaDataEntry("material", old_type, new_type); - materialProperties.material= new_type; + base.setMetaDataEntry("material", old_type, new_type) + properties.material = new_type } // update the brand of the material - function updateMaterialBrand (old_brand, new_brand) + function updateMaterialBrand(old_brand, new_brand) { - base.setMetaDataEntry("brand", old_brand, new_brand); - materialProperties.brand = new_brand; + base.setMetaDataEntry("brand", old_brand, new_brand) + properties.brand = new_brand } } diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml deleted file mode 100644 index e2e3edec2f..0000000000 --- a/resources/qml/Preferences/MaterialsPage.qml +++ /dev/null @@ -1,572 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Uranium is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 1.4 -import QtQuick.Layouts 1.3 -import QtQuick.Dialogs 1.2 - -import UM 1.2 as UM -import Cura 1.0 as Cura - - -Item -{ - id: base - - property QtObject materialManager: CuraApplication.getMaterialManager() - property var resetEnabled: false // Keep PreferencesDialog happy - - UM.I18nCatalog { id: catalog; name: "cura"; } - - Cura.MaterialManagementModel - { - id: materialsModel - } - - Label - { - id: titleLabel - - anchors - { - top: parent.top - left: parent.left - right: parent.right - margins: 5 * screenScaleFactor - } - - font.pointSize: 18 - text: catalog.i18nc("@title:tab", "Materials") - } - - property var hasCurrentItem: materialListView.currentItem != null - - property var currentItem: - { // is soon to be overwritten - var current_index = materialListView.currentIndex; - return materialsModel.getItem(current_index); - } - - property var isCurrentItemActivated: - { - const extruder_position = Cura.ExtruderManager.activeExtruderIndex; - const root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; - return base.currentItem.root_material_id == root_material_id; - } - - Component.onCompleted: - { - // Select the activated material when this page shows up - const extruder_position = Cura.ExtruderManager.activeExtruderIndex; - const active_root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; - var itemIndex = -1; - for (var i = 0; i < materialsModel.rowCount(); ++i) - { - var item = materialsModel.getItem(i); - if (item.root_material_id == active_root_material_id) - { - itemIndex = i; - break; - } - } - materialListView.currentIndex = itemIndex; - } - - Row // Button Row - { - id: buttonRow - anchors - { - left: parent.left - right: parent.right - top: titleLabel.bottom - } - height: childrenRect.height - - // Activate button - Button - { - text: catalog.i18nc("@action:button", "Activate") - iconName: "list-activate" - enabled: !isCurrentItemActivated - onClicked: - { - forceActiveFocus() - - const extruder_position = Cura.ExtruderManager.activeExtruderIndex; - Cura.MachineManager.setMaterial(extruder_position, base.currentItem.container_node); - } - } - - // Create button - Button - { - text: catalog.i18nc("@action:button", "Create") - iconName: "list-add" - onClicked: - { - forceActiveFocus(); - base.newRootMaterialIdToSwitchTo = base.materialManager.createMaterial(); - base.toActivateNewMaterial = true; - } - } - - // Duplicate button - Button - { - text: catalog.i18nc("@action:button", "Duplicate"); - iconName: "list-add" - enabled: base.hasCurrentItem - onClicked: - { - forceActiveFocus(); - base.newRootMaterialIdToSwitchTo = base.materialManager.duplicateMaterial(base.currentItem.container_node); - base.toActivateNewMaterial = true; - } - } - - // Remove button - Button - { - text: catalog.i18nc("@action:button", "Remove") - iconName: "list-remove" - enabled: base.hasCurrentItem && !base.currentItem.is_read_only && !base.isCurrentItemActivated - onClicked: - { - forceActiveFocus(); - confirmRemoveMaterialDialog.open(); - } - } - - // Import button - Button - { - text: catalog.i18nc("@action:button", "Import") - iconName: "document-import" - onClicked: - { - forceActiveFocus(); - importMaterialDialog.open(); - } - visible: true - } - - // Export button - Button - { - text: catalog.i18nc("@action:button", "Export") - iconName: "document-export" - onClicked: - { - forceActiveFocus(); - exportMaterialDialog.open(); - } - enabled: currentItem != null - } - } - - property string newRootMaterialIdToSwitchTo: "" - property bool toActivateNewMaterial: false - - // This connection makes sure that we will switch to the new - Connections - { - target: materialsModel - onItemsChanged: - { - var currentItemId = base.currentItem == null ? "" : base.currentItem.root_material_id; - var position = Cura.ExtruderManager.activeExtruderIndex; - - // try to pick the currently selected item; it may have been moved - if (base.newRootMaterialIdToSwitchTo == "") - { - base.newRootMaterialIdToSwitchTo = currentItemId; - } - - for (var idx = 0; idx < materialsModel.rowCount(); ++idx) - { - var item = materialsModel.getItem(idx); - if (item.root_material_id == base.newRootMaterialIdToSwitchTo) - { - // Switch to the newly created profile if needed - materialListView.currentIndex = idx; - materialListView.activateDetailsWithIndex(materialListView.currentIndex); - if (base.toActivateNewMaterial) - { - Cura.MachineManager.setMaterial(position, item.container_node); - } - base.newRootMaterialIdToSwitchTo = ""; - base.toActivateNewMaterial = false; - return - } - } - - materialListView.currentIndex = 0; - materialListView.activateDetailsWithIndex(materialListView.currentIndex); - if (base.toActivateNewMaterial) - { - Cura.MachineManager.setMaterial(position, materialsModel.getItem(0).container_node); - } - base.newRootMaterialIdToSwitchTo = ""; - base.toActivateNewMaterial = false; - } - } - - MessageDialog - { - id: confirmRemoveMaterialDialog - - icon: StandardIcon.Question; - title: catalog.i18nc("@title:window", "Confirm Remove") - text: catalog.i18nc("@label (%1 is object name)", "Are you sure you wish to remove %1? This cannot be undone!").arg(base.currentItem.name) - standardButtons: StandardButton.Yes | StandardButton.No - modality: Qt.ApplicationModal - - onYes: - { - base.materialManager.removeMaterial(base.currentItem.container_node); - } - } - - FileDialog - { - id: importMaterialDialog - title: catalog.i18nc("@title:window", "Import Material") - selectExisting: true - nameFilters: Cura.ContainerManager.getContainerNameFilters("material") - folder: CuraApplication.getDefaultPath("dialog_material_path") - onAccepted: - { - var result = Cura.ContainerManager.importMaterialContainer(fileUrl); - - messageDialog.title = catalog.i18nc("@title:window", "Import Material"); - messageDialog.text = catalog.i18nc("@info:status Don't translate the XML tags or !", "Could not import material %1: %2").arg(fileUrl).arg(result.message); - if (result.status == "success") - { - messageDialog.icon = StandardIcon.Information; - messageDialog.text = catalog.i18nc("@info:status Don't translate the XML tag !", "Successfully imported material %1").arg(fileUrl); - } - else if (result.status == "duplicate") - { - messageDialog.icon = StandardIcon.Warning; - } - else - { - messageDialog.icon = StandardIcon.Critical; - } - messageDialog.open(); - CuraApplication.setDefaultPath("dialog_material_path", folder); - } - } - - FileDialog - { - id: exportMaterialDialog - title: catalog.i18nc("@title:window", "Export Material") - selectExisting: false - nameFilters: Cura.ContainerManager.getContainerNameFilters("material") - folder: CuraApplication.getDefaultPath("dialog_material_path") - onAccepted: - { - var result = Cura.ContainerManager.exportContainer(base.currentItem.root_material_id, selectedNameFilter, fileUrl); - - messageDialog.title = catalog.i18nc("@title:window", "Export Material"); - if (result.status == "error") - { - messageDialog.icon = StandardIcon.Critical; - messageDialog.text = catalog.i18nc("@info:status Don't translate the XML tags and !", "Failed to export material to %1: %2").arg(fileUrl).arg(result.message); - messageDialog.open(); - } - else if (result.status == "success") - { - messageDialog.icon = StandardIcon.Information; - messageDialog.text = catalog.i18nc("@info:status Don't translate the XML tag !", "Successfully exported material to %1").arg(result.path); - messageDialog.open(); - } - CuraApplication.setDefaultPath("dialog_material_path", folder); - } - } - - MessageDialog - { - id: messageDialog - } - - - Item { - id: contentsItem - - anchors - { - top: titleLabel.bottom - left: parent.left - right: parent.right - bottom: parent.bottom - margins: 5 * screenScaleFactor - bottomMargin: 0 - } - - clip: true - } - - Item - { - anchors - { - top: buttonRow.bottom - topMargin: UM.Theme.getSize("default_margin").height - left: parent.left - right: parent.right - bottom: parent.bottom - } - - SystemPalette { id: palette } - - Label - { - id: captionLabel - anchors - { - top: parent.top - left: parent.left - } - visible: text != "" - text: - { - var caption = catalog.i18nc("@action:label", "Printer") + ": " + Cura.MachineManager.activeMachineName; - if (Cura.MachineManager.hasVariants) - { - caption += ", " + Cura.MachineManager.activeDefinitionVariantsName + ": " + Cura.MachineManager.activeVariantName; - } - return caption; - } - width: materialScrollView.width - elide: Text.ElideRight - } - - ScrollView - { - id: materialScrollView - anchors - { - top: captionLabel.visible ? captionLabel.bottom : parent.top - topMargin: captionLabel.visible ? UM.Theme.getSize("default_margin").height : 0 - bottom: parent.bottom - left: parent.left - } - - Rectangle - { - parent: viewport - anchors.fill: parent - color: palette.light - } - - width: true ? (parent.width * 0.4) | 0 : parent.width - frameVisible: true - - ListView - { - id: materialListView - - model: materialsModel - - section.property: "brand" - section.criteria: ViewSection.FullString - section.delegate: Rectangle - { - width: materialScrollView.width - height: childrenRect.height - color: palette.light - - Label - { - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_lining").width - text: section - font.bold: true - color: palette.text - } - } - - delegate: Rectangle - { - width: materialScrollView.width - height: childrenRect.height - color: ListView.isCurrentItem ? palette.highlight : (model.index % 2) ? palette.base : palette.alternateBase - - Row - { - id: materialRow - spacing: (UM.Theme.getSize("default_margin").width / 2) | 0 - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - - property bool isCurrentItem: parent.ListView.isCurrentItem - - property bool isItemActivated: - { - const extruder_position = Cura.ExtruderManager.activeExtruderIndex; - const root_material_id = Cura.MachineManager.currentRootMaterialId[extruder_position]; - return model.root_material_id == root_material_id; - } - - Rectangle - { - width: Math.floor(parent.height * 0.8) - height: Math.floor(parent.height * 0.8) - color: model.color_code - border.color: materialRow.isCurrentItem ? palette.highlightedText : palette.text; - anchors.verticalCenter: parent.verticalCenter - } - Label - { - width: Math.floor((parent.width * 0.3)) - text: model.material - elide: Text.ElideRight - font.italic: materialRow.isItemActivated - color: materialRow.isCurrentItem ? palette.highlightedText : palette.text; - } - Label - { - text: (model.name != model.material) ? model.name : "" - elide: Text.ElideRight - font.italic: materialRow.isItemActivated - color: materialRow.isCurrentItem ? palette.highlightedText : palette.text; - } - } - - MouseArea - { - anchors.fill: parent - onClicked: - { - parent.ListView.view.currentIndex = model.index; - } - } - } - - function activateDetailsWithIndex(index) - { - var model = materialsModel.getItem(index); - base.currentItem = model; - materialDetailsView.containerId = model.container_id; - materialDetailsView.currentMaterialNode = model.container_node; - - detailsPanel.updateMaterialPropertiesObject(); - } - - onCurrentIndexChanged: - { - forceActiveFocus(); // causes the changed fields to be saved - activateDetailsWithIndex(currentIndex); - } - } - } - - - Item - { - id: detailsPanel - - anchors - { - left: materialScrollView.right - leftMargin: UM.Theme.getSize("default_margin").width - top: parent.top - bottom: parent.bottom - right: parent.right - } - - function updateMaterialPropertiesObject() - { - var currentItem = materialsModel.getItem(materialListView.currentIndex); - - materialProperties.name = currentItem.name ? currentItem.name : "Unknown"; - materialProperties.guid = currentItem.guid; - materialProperties.container_id = currentItem.container_id; - - materialProperties.brand = currentItem.brand ? currentItem.brand : "Unknown"; - materialProperties.material = currentItem.material ? currentItem.material : "Unknown"; - materialProperties.color_name = currentItem.color_name ? currentItem.color_name : "Yellow"; - materialProperties.color_code = currentItem.color_code ? currentItem.color_code : "yellow"; - - materialProperties.description = currentItem.description ? currentItem.description : ""; - materialProperties.adhesion_info = currentItem.adhesion_info ? currentItem.adhesion_info : ""; - - materialProperties.density = currentItem.density ? currentItem.density : 0.0; - materialProperties.diameter = currentItem.diameter ? currentItem.diameter : 0.0; - materialProperties.approximate_diameter = currentItem.approximate_diameter ? currentItem.approximate_diameter : "0"; - } - - Item - { - anchors.fill: parent - - Item // Material title Label - { - id: profileName - - width: parent.width - height: childrenRect.height - - Label { - text: materialProperties.name - font: UM.Theme.getFont("large") - } - } - - MaterialView // Material detailed information view below the title Label - { - id: materialDetailsView - anchors - { - left: parent.left - right: parent.right - top: profileName.bottom - topMargin: UM.Theme.getSize("default_margin").height - bottom: parent.bottom - } - - editingEnabled: base.currentItem != null && !base.currentItem.is_read_only - - properties: materialProperties - containerId: base.currentItem != null ? base.currentItem.container_id : "" - currentMaterialNode: base.currentItem.container_node - - property alias pane: base - } - - QtObject - { - id: materialProperties - - property string guid: "00000000-0000-0000-0000-000000000000" - property string container_id: "Unknown"; - property string name: "Unknown"; - property string profile_type: "Unknown"; - property string brand: "Unknown"; - property string material: "Unknown"; // This needs to be named as "material" to be consistent with - // the material container's metadata entry - - property string color_name: "Yellow"; - property color color_code: "yellow"; - - property real density: 0.0; - property real diameter: 0.0; - property string approximate_diameter: "0"; - - property real spool_cost: 0.0; - property real spool_weight: 0.0; - property real spool_length: 0.0; - property real cost_per_meter: 0.0; - - property string description: ""; - property string adhesion_info: ""; - } - } - } - } -} diff --git a/resources/qml/Preferences/ProfilesPage.qml b/resources/qml/Preferences/ProfilesPage.qml index ba0c2848a5..52c69b780e 100644 --- a/resources/qml/Preferences/ProfilesPage.qml +++ b/resources/qml/Preferences/ProfilesPage.qml @@ -16,7 +16,7 @@ Item property QtObject qualityManager: CuraApplication.getQualityManager() property var resetEnabled: false // Keep PreferencesDialog happy - property var extrudersModel: Cura.ExtrudersModel {} + property var extrudersModel: CuraApplication.getExtrudersModel() UM.I18nCatalog { id: catalog; name: "cura"; } @@ -173,6 +173,7 @@ Item id: createQualityDialog title: catalog.i18nc("@title:window", "Create Profile") object: "" + explanation: catalog.i18nc("@info", "Please provide a name for this profile.") onAccepted: { base.newQualityNameToSelect = newName; // We want to switch to the new profile once it's created @@ -188,21 +189,27 @@ Item Connections { target: qualitiesModel - onItemsChanged: { + onItemsChanged: + { var toSelectItemName = base.currentItem == null ? "" : base.currentItem.name; - if (newQualityNameToSelect != "") { + if (newQualityNameToSelect != "") + { toSelectItemName = newQualityNameToSelect; } var newIdx = -1; // Default to nothing if nothing can be found - if (toSelectItemName != "") { + if (toSelectItemName != "") + { // Select the required quality name if given - for (var idx = 0; idx < qualitiesModel.rowCount(); ++idx) { + for (var idx = 0; idx < qualitiesModel.count; ++idx) + { var item = qualitiesModel.getItem(idx); - if (item.name == toSelectItemName) { + if (item.name == toSelectItemName) + { // Switch to the newly created profile if needed newIdx = idx; - if (base.toActivateNewQuality) { + if (base.toActivateNewQuality) + { // Activate this custom quality if required Cura.MachineManager.setQualityChangesGroup(item.quality_changes_group); } @@ -370,6 +377,7 @@ Item width: true ? (parent.width * 0.4) | 0 : parent.width frameVisible: true + clip: true ListView { @@ -382,9 +390,11 @@ Item var selectedItemName = Cura.MachineManager.activeQualityOrQualityChangesName; // Select the required quality name if given - for (var idx = 0; idx < qualitiesModel.rowCount(); idx++) { + for (var idx = 0; idx < qualitiesModel.count; idx++) + { var item = qualitiesModel.getItem(idx); - if (item.name == selectedItemName) { + if (item.name == selectedItemName) + { currentIndex = idx; break; } @@ -400,7 +410,7 @@ Item { anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_lining").width - text: section == "true" ? catalog.i18nc("@label", "Protected profiles") : catalog.i18nc("@label", "Custom profiles") + text: section == "true" ? catalog.i18nc("@label", "Default profiles") : catalog.i18nc("@label", "Custom profiles") font.bold: true } } @@ -463,7 +473,7 @@ Item Label { text: base.currentItemName - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") } } diff --git a/resources/qml/Preferences/SettingVisibilityPage.qml b/resources/qml/Preferences/SettingVisibilityPage.qml index 0f39a3c047..3f7571a170 100644 --- a/resources/qml/Preferences/SettingVisibilityPage.qml +++ b/resources/qml/Preferences/SettingVisibilityPage.qml @@ -25,11 +25,7 @@ UM.PreferencesPage function reset() { - UM.Preferences.resetPreference("general/visible_settings") - - // After calling this function update Setting visibility preset combobox. - // Reset should set default setting preset ("Basic") - visibilityPreset.currentIndex = 1 + settingVisibilityPresetsModel.setActivePreset("basic") } resetEnabled: true; @@ -54,7 +50,7 @@ UM.PreferencesPage { return Qt.Unchecked } - else if(definitionsModel.visibleCount == definitionsModel.rowCount(null)) + else if(definitionsModel.visibleCount == definitionsModel.count) { return Qt.Checked } @@ -110,25 +106,27 @@ UM.PreferencesPage right: parent.right } - model: settingVisibilityPresetsModel + model: settingVisibilityPresetsModel.items textRole: "name" currentIndex: { - // Load previously selected preset. - var index = settingVisibilityPresetsModel.find("id", settingVisibilityPresetsModel.activePreset) - if (index == -1) + var idx = -1; + for(var i = 0; i < settingVisibilityPresetsModel.items.length; ++i) { - return 0 + if(settingVisibilityPresetsModel.items[i].presetId == settingVisibilityPresetsModel.activePreset) + { + idx = i; + break; + } } - - return index + return idx; } onActivated: { - var preset_id = settingVisibilityPresetsModel.getItem(index).id; - settingVisibilityPresetsModel.setActivePreset(preset_id); + var preset_id = settingVisibilityPresetsModel.items[index].presetId + settingVisibilityPresetsModel.setActivePreset(preset_id) } } diff --git a/resources/qml/PrepareSidebar.qml b/resources/qml/PrepareSidebar.qml deleted file mode 100644 index 703cbb8844..0000000000 --- a/resources/qml/PrepareSidebar.qml +++ /dev/null @@ -1,613 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 2.0 -import QtQuick.Layouts 1.3 - -import UM 1.2 as UM -import Cura 1.0 as Cura -import "Menus" -import "Menus/ConfigurationMenu" - -Rectangle -{ - id: base - - property int currentModeIndex - property bool hideSettings: PrintInformation.preSliced - property bool hideView: Cura.MachineManager.activeMachineName == "" - - // Is there an output device for this printer? - property bool isNetworkPrinter: Cura.MachineManager.activeMachineNetworkKey != "" - property bool printerConnected: Cura.MachineManager.printerConnected - property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands - property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null - - property variant printDuration: PrintInformation.currentPrintTime - property variant printMaterialLengths: PrintInformation.materialLengths - property variant printMaterialWeights: PrintInformation.materialWeights - property variant printMaterialCosts: PrintInformation.materialCosts - property variant printMaterialNames: PrintInformation.materialNames - - color: UM.Theme.getColor("sidebar") - UM.I18nCatalog { id: catalog; name:"cura"} - - Timer { - id: tooltipDelayTimer - interval: 500 - repeat: false - property var item - property string text - - onTriggered: - { - base.showTooltip(base, {x: 0, y: item.y}, text); - } - } - - function showTooltip(item, position, text) - { - tooltip.text = text; - position = item.mapToItem(base, position.x - UM.Theme.getSize("default_arrow").width, position.y); - tooltip.show(position); - } - - function hideTooltip() - { - tooltip.hide(); - } - - function strPadLeft(string, pad, length) { - return (new Array(length + 1).join(pad) + string).slice(-length); - } - - function getPrettyTime(time) - { - var hours = Math.floor(time / 3600) - time -= hours * 3600 - var minutes = Math.floor(time / 60); - time -= minutes * 60 - var seconds = Math.floor(time); - - var finalTime = strPadLeft(hours, "0", 2) + ':' + strPadLeft(minutes,'0',2)+ ':' + strPadLeft(seconds,'0',2); - return finalTime; - } - - MouseArea - { - anchors.fill: parent - acceptedButtons: Qt.AllButtons - - onWheel: - { - wheel.accepted = true; - } - } - - MachineSelection - { - id: machineSelection - width: base.width - configSelection.width - separator.width - height: UM.Theme.getSize("sidebar_header").height - anchors.top: base.top - anchors.left: parent.left - } - - Rectangle - { - id: separator - visible: configSelection.visible - width: visible ? Math.round(UM.Theme.getSize("sidebar_lining_thin").height / 2) : 0 - height: UM.Theme.getSize("sidebar_header").height - color: UM.Theme.getColor("sidebar_lining_thin") - anchors.left: machineSelection.right - } - - ConfigurationSelection - { - id: configSelection - visible: isNetworkPrinter && printerConnected - width: visible ? Math.round(base.width * 0.15) : 0 - height: UM.Theme.getSize("sidebar_header").height - anchors.top: base.top - anchors.right: parent.right - panelWidth: base.width - } - - SidebarHeader { - id: header - width: parent.width - visible: !hideSettings && (machineExtruderCount.properties.value > 1 || Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariants) - anchors.top: machineSelection.bottom - - onShowTooltip: base.showTooltip(item, location, text) - onHideTooltip: base.hideTooltip() - } - - Rectangle { - id: headerSeparator - width: parent.width - visible: settingsModeSelection.visible && header.visible - height: visible ? UM.Theme.getSize("sidebar_lining").height : 0 - color: UM.Theme.getColor("sidebar_lining") - anchors.top: header.bottom - anchors.topMargin: visible ? UM.Theme.getSize("sidebar_margin").height : 0 - } - - onCurrentModeIndexChanged: - { - UM.Preferences.setValue("cura/active_mode", currentModeIndex); - if(modesListModel.count > base.currentModeIndex) - { - sidebarContents.replace(modesListModel.get(base.currentModeIndex).item, { "replace": true }) - } - } - - Label - { - id: settingsModeLabel - text: !hideSettings ? catalog.i18nc("@label:listbox", "Print Setup") : catalog.i18nc("@label:listbox", "Print Setup disabled\nG-code files cannot be modified") - renderType: Text.NativeRendering - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - anchors.top: hideSettings ? machineSelection.bottom : headerSeparator.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - width: Math.round(parent.width * 0.45) - font: UM.Theme.getFont("large") - color: UM.Theme.getColor("text") - visible: !hideView - } - - // Settings mode selection toggle - Rectangle - { - id: settingsModeSelection - color: "transparent" - - width: Math.round(parent.width * 0.55) - height: UM.Theme.getSize("sidebar_header_mode_toggle").height - - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - anchors.top: - { - if (settingsModeLabel.contentWidth >= parent.width - width - UM.Theme.getSize("sidebar_margin").width * 2) - { - return settingsModeLabel.bottom; - } - else - { - return headerSeparator.bottom; - } - } - - visible: !hideSettings && !hideView - - Component - { - id: wizardDelegate - - Button - { - id: control - - height: settingsModeSelection.height - width: Math.round(parent.width / 2) - - anchors.left: parent.left - anchors.leftMargin: model.index * Math.round(settingsModeSelection.width / 2) - anchors.verticalCenter: parent.verticalCenter - - ButtonGroup.group: modeMenuGroup - - checkable: true - checked: base.currentModeIndex == index - onClicked: base.currentModeIndex = index - - onHoveredChanged: - { - if (hovered) - { - tooltipDelayTimer.item = settingsModeSelection - tooltipDelayTimer.text = model.tooltipText - tooltipDelayTimer.start() - } - else - { - tooltipDelayTimer.stop() - base.hideTooltip() - } - } - - background: Rectangle - { - border.width: control.checked ? UM.Theme.getSize("default_lining").width * 2 : UM.Theme.getSize("default_lining").width - border.color: (control.checked || control.pressed) ? UM.Theme.getColor("action_button_active_border") : control.hovered ? UM.Theme.getColor("action_button_hovered_border"): UM.Theme.getColor("action_button_border") - - // for some reason, QtQuick decided to use the color of the background property as text color for the contentItem, so here it is - color: (control.checked || control.pressed) ? UM.Theme.getColor("action_button_active") : control.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") - } - - contentItem: Label - { - text: model.text - font: UM.Theme.getFont("default") - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - renderType: Text.NativeRendering - elide: Text.ElideRight - color: - { - if(control.pressed) - { - return UM.Theme.getColor("action_button_active_text"); - } - else if(control.hovered) - { - return UM.Theme.getColor("action_button_hovered_text"); - } - return UM.Theme.getColor("action_button_text"); - } - } - } - } - - ButtonGroup - { - id: modeMenuGroup - } - - ListView - { - id: modesList - property var index: 0 - model: modesListModel - delegate: wizardDelegate - anchors.top: parent.top - anchors.left: parent.left - width: parent.width - } - } - - StackView - { - id: sidebarContents - - anchors.bottom: footerSeparator.top - anchors.top: settingsModeSelection.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - anchors.left: base.left - anchors.right: base.right - visible: !hideSettings - - replaceEnter: Transition { - PropertyAnimation { - property: "opacity" - from: 0 - to:1 - duration: 100 - } - } - - replaceExit: Transition { - PropertyAnimation { - property: "opacity" - from: 1 - to:0 - duration: 100 - } - } - } - - Loader - { - anchors.bottom: footerSeparator.top - anchors.top: headerSeparator.bottom - anchors.left: base.left - anchors.right: base.right - source: "SidebarContents.qml" - } - - Rectangle - { - id: footerSeparator - width: parent.width - height: UM.Theme.getSize("sidebar_lining").height - color: UM.Theme.getColor("sidebar_lining") - anchors.bottom: printSpecs.top - anchors.bottomMargin: Math.round(UM.Theme.getSize("sidebar_margin").height * 2 + UM.Theme.getSize("progressbar").height + UM.Theme.getFont("default_bold").pixelSize) - } - - Item - { - id: printSpecs - anchors.left: parent.left - anchors.bottom: parent.bottom - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - anchors.bottomMargin: UM.Theme.getSize("sidebar_margin").height - height: timeDetails.height + costSpec.height - width: base.width - (saveButton.buttonRowWidth + UM.Theme.getSize("sidebar_margin").width) - clip: true - - Label - { - id: timeDetails - anchors.left: parent.left - anchors.bottom: costSpec.top - font: UM.Theme.getFont("large") - color: UM.Theme.getColor("text_subtext") - text: (!base.printDuration || !base.printDuration.valid) ? catalog.i18nc("@label Hours and minutes", "00h 00min") : base.printDuration.getDisplayString(UM.DurationFormat.Short) - renderType: Text.NativeRendering - - MouseArea - { - id: timeDetailsMouseArea - anchors.fill: parent - hoverEnabled: true - - onEntered: - { - if(base.printDuration.valid && !base.printDuration.isTotalDurationZero) - { - // All the time information for the different features is achieved - var print_time = PrintInformation.getFeaturePrintTimes(); - var total_seconds = parseInt(base.printDuration.getDisplayString(UM.DurationFormat.Seconds)) - - // A message is created and displayed when the user hover the time label - var tooltip_html = "%1
".arg(catalog.i18nc("@tooltip", "Time specification")); - for(var feature in print_time) - { - if(!print_time[feature].isTotalDurationZero) - { - tooltip_html += "" + - "".arg(print_time[feature].getDisplayString(UM.DurationFormat.ISO8601).slice(0,-3)) + - "".arg(Math.round(100 * parseInt(print_time[feature].getDisplayString(UM.DurationFormat.Seconds)) / total_seconds)) + - ""; - } - } - tooltip_html += "
" + feature + ":  %1  %1%
"; - - base.showTooltip(parent, Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), tooltip_html); - } - } - onExited: - { - base.hideTooltip(); - } - } - } - - Label - { - function formatRow(items) - { - var row_html = ""; - for(var item = 0; item < items.length; item++) - { - if (item == 0) - { - row_html += "%1".arg(items[item]); - } - else - { - row_html += "  %1".arg(items[item]); - } - } - row_html += ""; - return row_html; - } - - function getSpecsData() - { - var lengths = []; - var total_length = 0; - var weights = []; - var total_weight = 0; - var costs = []; - var total_cost = 0; - var some_costs_known = false; - var names = []; - if(base.printMaterialLengths) - { - for(var index = 0; index < base.printMaterialLengths.length; index++) - { - if(base.printMaterialLengths[index] > 0) - { - names.push(base.printMaterialNames[index]); - lengths.push(base.printMaterialLengths[index].toFixed(2)); - weights.push(String(Math.round(base.printMaterialWeights[index]))); - var cost = base.printMaterialCosts[index] == undefined ? 0 : base.printMaterialCosts[index].toFixed(2); - costs.push(cost); - if(cost > 0) - { - some_costs_known = true; - } - - total_length += base.printMaterialLengths[index]; - total_weight += base.printMaterialWeights[index]; - total_cost += base.printMaterialCosts[index]; - } - } - } - if(lengths.length == 0) - { - lengths = ["0.00"]; - weights = ["0"]; - costs = ["0.00"]; - } - - var tooltip_html = "%1
".arg(catalog.i18nc("@label", "Cost specification")); - for(var index = 0; index < lengths.length; index++) - { - tooltip_html += formatRow([ - "%1:".arg(names[index]), - catalog.i18nc("@label m for meter", "%1m").arg(lengths[index]), - catalog.i18nc("@label g for grams", "%1g").arg(weights[index]), - "%1 %2".arg(UM.Preferences.getValue("cura/currency")).arg(costs[index]), - ]); - } - if(lengths.length > 1) - { - tooltip_html += formatRow([ - catalog.i18nc("@label", "Total:"), - catalog.i18nc("@label m for meter", "%1m").arg(total_length.toFixed(2)), - catalog.i18nc("@label g for grams", "%1g").arg(Math.round(total_weight)), - "%1 %2".arg(UM.Preferences.getValue("cura/currency")).arg(total_cost.toFixed(2)), - ]); - } - tooltip_html += "
"; - tooltipText = tooltip_html; - - return tooltipText - } - - id: costSpec - anchors.left: parent.left - anchors.bottom: parent.bottom - font: UM.Theme.getFont("very_small") - renderType: Text.NativeRendering - color: UM.Theme.getColor("text_subtext") - elide: Text.ElideMiddle - width: parent.width - property string tooltipText - text: - { - var lengths = []; - var weights = []; - var costs = []; - var someCostsKnown = false; - if(base.printMaterialLengths) { - for(var index = 0; index < base.printMaterialLengths.length; index++) - { - if(base.printMaterialLengths[index] > 0) - { - lengths.push(base.printMaterialLengths[index].toFixed(2)); - weights.push(String(Math.round(base.printMaterialWeights[index]))); - var cost = base.printMaterialCosts[index] == undefined ? 0 : base.printMaterialCosts[index].toFixed(2); - costs.push(cost); - if(cost > 0) - { - someCostsKnown = true; - } - } - } - } - if(lengths.length == 0) - { - lengths = ["0.00"]; - weights = ["0"]; - costs = ["0.00"]; - } - var result = lengths.join(" + ") + "m / ~ " + weights.join(" + ") + "g"; - if(someCostsKnown) - { - result += " / ~ " + costs.join(" + ") + " " + UM.Preferences.getValue("cura/currency"); - } - return result; - } - MouseArea - { - id: costSpecMouseArea - anchors.fill: parent - hoverEnabled: true - - onEntered: - { - - if(base.printDuration.valid && !base.printDuration.isTotalDurationZero) - { - var show_data = costSpec.getSpecsData() - - base.showTooltip(parent, Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), show_data); - } - } - onExited: - { - base.hideTooltip(); - } - } - } - } - - // SaveButton is actually the bottom footer panel. - SaveButton - { - id: saveButton - implicitWidth: base.width - anchors.top: footerSeparator.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - anchors.bottom: parent.bottom - } - - SidebarTooltip - { - id: tooltip - } - - // Setting mode: Recommended or Custom - ListModel - { - id: modesListModel - } - - SidebarSimple - { - id: sidebarSimple - visible: false - - onShowTooltip: base.showTooltip(item, location, text) - onHideTooltip: base.hideTooltip() - } - - SidebarAdvanced - { - id: sidebarAdvanced - visible: false - - onShowTooltip: base.showTooltip(item, location, text) - onHideTooltip: base.hideTooltip() - } - - Component.onCompleted: - { - modesListModel.append({ - text: catalog.i18nc("@title:tab", "Recommended"), - tooltipText: catalog.i18nc("@tooltip", "Recommended Print Setup

Print with the recommended settings for the selected printer, material and quality."), - item: sidebarSimple - }) - modesListModel.append({ - text: catalog.i18nc("@title:tab", "Custom"), - tooltipText: catalog.i18nc("@tooltip", "Custom Print Setup

Print with finegrained control over every last bit of the slicing process."), - item: sidebarAdvanced - }) - sidebarContents.replace(modesListModel.get(base.currentModeIndex).item, { "immediate": true }) - - var index = Math.round(UM.Preferences.getValue("cura/active_mode")) - if(index) - { - currentModeIndex = index; - } - } - - UM.SettingPropertyProvider - { - id: machineExtruderCount - - containerStackId: Cura.MachineManager.activeMachineId - key: "machine_extruder_count" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: machineHeatedBed - - containerStackId: Cura.MachineManager.activeMachineId - key: "machine_heated_bed" - watchedProperties: [ "value" ] - storeIndex: 0 - } -} diff --git a/resources/qml/PrimaryButton.qml b/resources/qml/PrimaryButton.qml new file mode 100644 index 0000000000..fca63d2cdb --- /dev/null +++ b/resources/qml/PrimaryButton.qml @@ -0,0 +1,20 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 + +import UM 1.4 as UM +import Cura 1.1 as Cura + + +Cura.ActionButton +{ + shadowEnabled: true + shadowColor: enabled ? UM.Theme.getColor("primary_button_shadow"): UM.Theme.getColor("action_button_disabled_shadow") + color: UM.Theme.getColor("primary_button") + textColor: UM.Theme.getColor("primary_button_text") + outlineColor: "transparent" + disabledColor: UM.Theme.getColor("action_button_disabled") + textDisabledColor: UM.Theme.getColor("action_button_disabled_text") + hoverColor: UM.Theme.getColor("primary_button_hover") +} \ No newline at end of file diff --git a/resources/qml/PrintMonitor.qml b/resources/qml/PrintMonitor.qml index 7727f9cb52..d44acf0adb 100644 --- a/resources/qml/PrintMonitor.qml +++ b/resources/qml/PrintMonitor.qml @@ -11,136 +11,176 @@ import Cura 1.0 as Cura import "PrinterOutput" -Column + +Item { - id: printMonitor + id: base + UM.I18nCatalog { id: catalog; name: "cura"} + + function showTooltip(item, position, text) + { + tooltip.text = text; + position = item.mapToItem(base, position.x - UM.Theme.getSize("default_arrow").width, position.y); + tooltip.show(position); + } + + function hideTooltip() + { + tooltip.hide(); + } + + function strPadLeft(string, pad, length) { + return (new Array(length + 1).join(pad) + string).slice(-length); + } + + function getPrettyTime(time) + { + var hours = Math.floor(time / 3600) + time -= hours * 3600 + var minutes = Math.floor(time / 60); + time -= minutes * 60 + var seconds = Math.floor(time); + + var finalTime = strPadLeft(hours, "0", 2) + ":" + strPadLeft(minutes, "0", 2) + ":" + strPadLeft(seconds, "0", 2); + return finalTime; + } + property var connectedDevice: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null property var activePrinter: connectedDevice != null ? connectedDevice.activePrinter : null property var activePrintJob: activePrinter != null ? activePrinter.activePrintJob: null - Cura.ExtrudersModel + PrintSetupTooltip { - id: extrudersModel - simpleNames: true + id: tooltip } - OutputDeviceHeader + Column { - outputDevice: connectedDevice - } + id: printMonitor - Rectangle - { - color: UM.Theme.getColor("sidebar_lining") - width: parent.width - height: childrenRect.height + anchors.fill: parent - Flow + property var extrudersModel: CuraApplication.getExtrudersModel() + + OutputDeviceHeader { - id: extrudersGrid - spacing: UM.Theme.getSize("sidebar_lining_thin").width + outputDevice: connectedDevice + } + + Rectangle + { + color: UM.Theme.getColor("wide_lining") width: parent.width + height: childrenRect.height - Repeater + Flow { - id: extrudersRepeater - model: activePrinter!=null ? activePrinter.extruders : null + id: extrudersGrid + spacing: UM.Theme.getSize("thick_lining").width + width: parent.width - ExtruderBox + Repeater { - color: UM.Theme.getColor("sidebar") - width: index == machineExtruderCount.properties.value - 1 && index % 2 == 0 ? extrudersGrid.width : Math.round(extrudersGrid.width / 2 - UM.Theme.getSize("sidebar_lining_thin").width / 2) - extruderModel: modelData + id: extrudersRepeater + model: activePrinter != null ? activePrinter.extruders : null + + ExtruderBox + { + color: UM.Theme.getColor("main_background") + width: index == machineExtruderCount.properties.value - 1 && index % 2 == 0 ? extrudersGrid.width : Math.round(extrudersGrid.width / 2 - UM.Theme.getSize("thick_lining").width / 2) + extruderModel: modelData + } } } } - } - Rectangle - { - color: UM.Theme.getColor("sidebar_lining") - width: parent.width - height: UM.Theme.getSize("sidebar_lining_thin").width - } - - HeatedBedBox - { - visible: { - if(activePrinter != null && activePrinter.bedTemperature != -1) - { - return true - } - return false - } - printerModel: activePrinter - } - - UM.SettingPropertyProvider - { - id: bedTemperature - containerStackId: Cura.MachineManager.activeMachineId - key: "material_bed_temperature" - watchedProperties: ["value", "minimum_value", "maximum_value", "resolve"] - storeIndex: 0 - - property var resolve: Cura.MachineManager.activeStackId != Cura.MachineManager.activeMachineId ? properties.resolve : "None" - } - - UM.SettingPropertyProvider - { - id: machineExtruderCount - containerStackId: Cura.MachineManager.activeMachineId - key: "machine_extruder_count" - watchedProperties: ["value"] - } - - ManualPrinterControl - { - printerModel: activePrinter - visible: activePrinter != null ? activePrinter.canControlManually : false - } - - - MonitorSection - { - label: catalog.i18nc("@label", "Active print") - width: base.width - visible: activePrinter != null - } - - - MonitorItem - { - label: catalog.i18nc("@label", "Job Name") - value: activePrintJob != null ? activePrintJob.name : "" - width: base.width - visible: activePrinter != null - } - - MonitorItem - { - label: catalog.i18nc("@label", "Printing Time") - value: activePrintJob != null ? getPrettyTime(activePrintJob.timeTotal) : "" - width: base.width - visible: activePrinter != null - } - - MonitorItem - { - label: catalog.i18nc("@label", "Estimated time left") - value: activePrintJob != null ? getPrettyTime(activePrintJob.timeTotal - activePrintJob.timeElapsed) : "" - visible: + Rectangle { - if(activePrintJob == null) + color: UM.Theme.getColor("wide_lining") + width: parent.width + height: UM.Theme.getSize("thick_lining").width + } + + HeatedBedBox + { + visible: { + if(activePrinter != null && activePrinter.bedTemperature != -1) + { + return true + } return false } - - return (activePrintJob.state == "printing" || - activePrintJob.state == "resuming" || - activePrintJob.state == "pausing" || - activePrintJob.state == "paused") + printerModel: activePrinter + } + + UM.SettingPropertyProvider + { + id: bedTemperature + containerStack: Cura.MachineManager.activeMachine + key: "material_bed_temperature" + watchedProperties: ["value", "minimum_value", "maximum_value", "resolve"] + storeIndex: 0 + + property var resolve: Cura.MachineManager.activeStack != Cura.MachineManager.activeMachine ? properties.resolve : "None" + } + + UM.SettingPropertyProvider + { + id: machineExtruderCount + containerStack: Cura.MachineManager.activeMachine + key: "machine_extruder_count" + watchedProperties: ["value"] + } + + ManualPrinterControl + { + printerModel: activePrinter + visible: activePrinter != null ? activePrinter.canControlManually : false + } + + + MonitorSection + { + label: catalog.i18nc("@label", "Active print") + width: base.width + visible: activePrinter != null + } + + + MonitorItem + { + label: catalog.i18nc("@label", "Job Name") + value: activePrintJob != null ? activePrintJob.name : "" + width: base.width + visible: activePrinter != null + } + + MonitorItem + { + label: catalog.i18nc("@label", "Printing Time") + value: activePrintJob != null ? getPrettyTime(activePrintJob.timeTotal) : "" + width: base.width + visible: activePrinter != null + } + + MonitorItem + { + label: catalog.i18nc("@label", "Estimated time left") + value: activePrintJob != null ? getPrettyTime(activePrintJob.timeTotal - activePrintJob.timeElapsed) : "" + visible: + { + if(activePrintJob == null) + { + return false + } + + return (activePrintJob.state == "printing" || + activePrintJob.state == "resuming" || + activePrintJob.state == "pausing" || + activePrintJob.state == "paused") + } + width: base.width } - width: base.width } -} +} \ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml new file mode 100644 index 0000000000..98bb5c0405 --- /dev/null +++ b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml @@ -0,0 +1,131 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.0 + +import UM 1.3 as UM +import Cura 1.0 as Cura + + +Item +{ + id: customPrintSetup + + property real padding: UM.Theme.getSize("default_margin").width + property bool multipleExtruders: extrudersModel.count > 1 + + property var extrudersModel: CuraApplication.getExtrudersModel() + + // Profile selector row + GlobalProfileSelector + { + id: globalProfileRow + anchors + { + top: parent.top + topMargin: parent.padding + left: parent.left + leftMargin: parent.padding + right: parent.right + rightMargin: parent.padding + } + } + + UM.TabRow + { + id: tabBar + + visible: multipleExtruders // The tab row is only visible when there are more than 1 extruder + + anchors + { + top: globalProfileRow.bottom + topMargin: UM.Theme.getSize("default_margin").height + left: parent.left + leftMargin: parent.padding + right: parent.right + rightMargin: parent.padding + } + + Repeater + { + id: repeater + model: extrudersModel + delegate: UM.TabRowButton + { + contentItem: Item + { + Cura.ExtruderIcon + { + anchors.horizontalCenter: parent.horizontalCenter + materialColor: model.color + extruderEnabled: model.enabled + } + } + onClicked: + { + Cura.ExtruderManager.setActiveExtruderIndex(tabBar.currentIndex) + } + } + } + + //When active extruder changes for some other reason, switch tabs. + //Don't directly link currentIndex to Cura.ExtruderManager.activeExtruderIndex! + //This causes a segfault in Qt 5.11. Something with VisualItemModel removing index -1. We have to use setCurrentIndex instead. + Connections + { + target: Cura.ExtruderManager + onActiveExtruderChanged: + { + tabBar.setCurrentIndex(Cura.ExtruderManager.activeExtruderIndex); + } + } + + //When the model of the extruders is rebuilt, the list of extruders is briefly emptied and rebuilt. + //This causes the currentIndex of the tab to be in an invalid position which resets it to 0. + //Therefore we need to change it back to what it was: The active extruder index. + Connections + { + target: repeater.model + onModelChanged: + { + tabBar.setCurrentIndex(Cura.ExtruderManager.activeExtruderIndex) + } + } + } + + Rectangle + { + anchors + { + top: tabBar.visible ? tabBar.bottom : globalProfileRow.bottom + topMargin: -UM.Theme.getSize("default_lining").width + left: parent.left + leftMargin: parent.padding + right: parent.right + rightMargin: parent.padding + bottom: parent.bottom + } + z: tabBar.z - 1 + // Don't show the border when only one extruder + + border.color: tabBar.visible ? UM.Theme.getColor("lining") : "transparent" + border.width: UM.Theme.getSize("default_lining").width + + color: UM.Theme.getColor("main_background") + Cura.SettingView + { + anchors + { + fill: parent + topMargin: UM.Theme.getSize("default_margin").height + leftMargin: UM.Theme.getSize("default_margin").width + // Small space for the scrollbar + rightMargin: UM.Theme.getSize("narrow_margin").width + // Compensate for the negative margin in the parent + bottomMargin: UM.Theme.getSize("default_lining").width + } + } + } +} diff --git a/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml b/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml new file mode 100644 index 0000000000..32c07a52a6 --- /dev/null +++ b/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml @@ -0,0 +1,100 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.1 +import QtQuick.Controls.Styles 1.1 +import QtQuick.Layouts 1.2 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Item +{ + id: globalProfileRow + height: childrenRect.height + + Label + { + id: globalProfileLabel + anchors + { + top: parent.top + bottom: parent.bottom + left: parent.left + right: globalProfileSelection.left + } + text: catalog.i18nc("@label", "Profile") + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text") + verticalAlignment: Text.AlignVCenter + } + + ToolButton + { + id: globalProfileSelection + + text: generateActiveQualityText() + width: UM.Theme.getSize("print_setup_big_item").width + height: UM.Theme.getSize("print_setup_big_item").height + anchors + { + top: parent.top + right: parent.right + } + tooltip: Cura.MachineManager.activeQualityOrQualityChangesName + style: UM.Theme.styles.print_setup_header_button + activeFocusOnPress: true + menu: Cura.ProfileMenu { } + + function generateActiveQualityText() + { + var result = Cura.MachineManager.activeQualityOrQualityChangesName + if (Cura.MachineManager.isActiveQualityExperimental) + { + result += " (Experimental)" + } + + if (Cura.MachineManager.isActiveQualitySupported) + { + if (Cura.MachineManager.activeQualityLayerHeight > 0) + { + result += " " + result += " - " + result += Cura.MachineManager.activeQualityLayerHeight + "mm" + result += "" + } + } + + return result + } + + UM.SimpleButton + { + id: customisedSettings + + visible: Cura.MachineManager.hasUserSettings + width: UM.Theme.getSize("print_setup_icon").width + height: UM.Theme.getSize("print_setup_icon").height + + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: Math.round(UM.Theme.getSize("setting_preferences_button_margin").width - UM.Theme.getSize("thick_margin").width) + + color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button"); + iconSource: UM.Theme.getIcon("star") + + onClicked: + { + forceActiveFocus(); + Cura.Actions.manageProfiles.trigger() + } + onEntered: + { + var content = catalog.i18nc("@tooltip","Some setting/override values are different from the values stored in the profile.\n\nClick to open the profile manager.") + base.showTooltip(globalProfileRow, Qt.point(-UM.Theme.getSize("default_margin").width, 0), content) + } + onExited: base.hideTooltip() + } + } +} \ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/PrintSetupSelector.qml b/resources/qml/PrintSetupSelector/PrintSetupSelector.qml new file mode 100644 index 0000000000..48ac07679d --- /dev/null +++ b/resources/qml/PrintSetupSelector/PrintSetupSelector.qml @@ -0,0 +1,35 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.0 + +import UM 1.3 as UM +import Cura 1.0 as Cura + +Cura.ExpandableComponent +{ + id: printSetupSelector + + property bool preSlicedData: PrintInformation.preSliced + + contentPadding: UM.Theme.getSize("default_lining").width + contentHeaderTitle: catalog.i18nc("@label", "Print settings") + enabled: !preSlicedData + disabledText: catalog.i18nc("@label shown when we load a Gcode file", "Print setup disabled. G code file can not be modified.") + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + headerItem: PrintSetupSelectorHeader {} + + property var extrudersModel: CuraApplication.getExtrudersModel() + + contentItem: PrintSetupSelectorContents {} + + onExpandedChanged: UM.Preferences.setValue("view/settings_visible", expanded) + Component.onCompleted: expanded = UM.Preferences.getValue("view/settings_visible") +} \ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml b/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml new file mode 100644 index 0000000000..7da0e92bb9 --- /dev/null +++ b/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml @@ -0,0 +1,216 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.3 as UM +import Cura 1.0 as Cura + +import "Recommended" +import "Custom" + +Item +{ + id: content + + width: UM.Theme.getSize("print_setup_widget").width - 2 * UM.Theme.getSize("default_margin").width + height: contents.height + buttonRow.height + + enum Mode + { + Recommended = 0, + Custom = 1 + } + + // Set the current mode index to the value that is stored in the preferences or Recommended mode otherwise. + property int currentModeIndex: + { + var index = Math.round(UM.Preferences.getValue("cura/active_mode")) + + if (index != null && !isNaN(index)) + { + return index + } + return PrintSetupSelectorContents.Mode.Recommended + } + onCurrentModeIndexChanged: UM.Preferences.setValue("cura/active_mode", currentModeIndex) + + Item + { + id: contents + // Use the visible property instead of checking the currentModeIndex. That creates a binding that + // evaluates the new height every time the visible property changes. + height: recommendedPrintSetup.visible ? recommendedPrintSetup.height : customPrintSetup.height + + anchors + { + top: parent.top + left: parent.left + right: parent.right + } + + RecommendedPrintSetup + { + id: recommendedPrintSetup + anchors + { + left: parent.left + right: parent.right + top: parent.top + } + visible: currentModeIndex == PrintSetupSelectorContents.Mode.Recommended + } + + CustomPrintSetup + { + id: customPrintSetup + anchors + { + left: parent.left + right: parent.right + top: parent.top + } + height: UM.Preferences.getValue("view/settings_list_height") - UM.Theme.getSize("default_margin").height + Connections + { + target: UM.Preferences + onPreferenceChanged: + { + if (preference !== "view/settings_list_height" && preference !== "general/window_height" && preference !== "general/window_state") + { + return; + } + + customPrintSetup.height = + Math.min + ( + UM.Preferences.getValue("view/settings_list_height"), + base.height - (customPrintSetup.mapToItem(null, 0, 0).y + buttonRow.height + UM.Theme.getSize("default_margin").height) + ); + } + } + visible: currentModeIndex == PrintSetupSelectorContents.Mode.Custom + } + } + + Rectangle + { + id: buttonsSeparator + + // The buttonsSeparator is inside the contents. This is to avoid a double line in the bottom + anchors.bottom: contents.bottom + width: parent.width + height: UM.Theme.getSize("default_lining").height + color: UM.Theme.getColor("lining") + } + + Item + { + id: buttonRow + property real padding: UM.Theme.getSize("default_margin").width + height: recommendedButton.height + 2 * padding + (draggableArea.visible ? draggableArea.height : 0) + + anchors + { + bottom: parent.bottom + left: parent.left + right: parent.right + } + + Cura.SecondaryButton + { + id: recommendedButton + anchors.top: parent.top + anchors.left: parent.left + anchors.margins: parent.padding + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@button", "Recommended") + iconSource: UM.Theme.getIcon("arrow_left") + visible: currentModeIndex == PrintSetupSelectorContents.Mode.Custom + onClicked: currentModeIndex = PrintSetupSelectorContents.Mode.Recommended + } + + Cura.SecondaryButton + { + anchors.top: parent.top + anchors.right: parent.right + anchors.margins: UM.Theme.getSize("default_margin").width + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@button", "Custom") + iconSource: UM.Theme.getIcon("arrow_right") + isIconOnRightSide: true + visible: currentModeIndex == PrintSetupSelectorContents.Mode.Recommended + onClicked: currentModeIndex = PrintSetupSelectorContents.Mode.Custom + } + + //Invisible area at the bottom with which you can resize the panel. + MouseArea + { + id: draggableArea + anchors + { + left: parent.left + right: parent.right + bottom: parent.bottom + } + height: childrenRect.height + cursorShape: Qt.SplitVCursor + visible: currentModeIndex == PrintSetupSelectorContents.Mode.Custom + drag + { + target: parent + axis: Drag.YAxis + } + onMouseYChanged: + { + if(drag.active) + { + // position of mouse relative to dropdown align vertical centre of mouse area to cursor + // v------------------------------v v------------v + var h = mouseY + buttonRow.y + content.y - height / 2 | 0; + if(h < 200 * screenScaleFactor) //Enforce a minimum size. + { + h = 200 * screenScaleFactor; + } + + //Absolute mouse Y position in the window, to prevent it from going outside the window. + var mouse_absolute_y = mapToGlobal(mouseX, mouseY).y - UM.Preferences.getValue("general/window_top"); + if(mouse_absolute_y > base.height) + { + h -= mouse_absolute_y - base.height; + } + + UM.Preferences.setValue("view/settings_list_height", h); + } + } + + Rectangle + { + width: parent.width + height: UM.Theme.getSize("narrow_margin").height + color: UM.Theme.getColor("secondary") + + Rectangle + { + anchors.bottom: parent.top + width: parent.width + height: UM.Theme.getSize("default_lining").height + color: UM.Theme.getColor("lining") + } + + UM.RecolorImage + { + width: UM.Theme.getSize("drag_icon").width + height: UM.Theme.getSize("drag_icon").height + anchors.centerIn: parent + + source: UM.Theme.getIcon("resize") + color: UM.Theme.getColor("small_button_text") + } + } + } + } +} \ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml b/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml new file mode 100644 index 0000000000..96b244d803 --- /dev/null +++ b/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml @@ -0,0 +1,88 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import UM 1.3 as UM +import Cura 1.0 as Cura + +RowLayout +{ + property string enabledText: catalog.i18nc("@label:Should be short", "On") + property string disabledText: catalog.i18nc("@label:Should be short", "Off") + + Cura.IconWithText + { + source: UM.Theme.getIcon("category_layer_height") + text: + { + if (Cura.MachineManager.activeStack) + { + var text = Cura.MachineManager.activeQualityOrQualityChangesName + if (!Cura.MachineManager.hasNotSupportedQuality) + { + text += " " + layerHeight.properties.value + "mm" + text += Cura.MachineManager.isActiveQualityExperimental ? " - " + catalog.i18nc("@label", "Experimental") : "" + } + return text + } + return "" + } + font: UM.Theme.getFont("medium") + + UM.SettingPropertyProvider + { + id: layerHeight + containerStack: Cura.MachineManager.activeStack + key: "layer_height" + watchedProperties: ["value"] + } + } + + Cura.IconWithText + { + source: UM.Theme.getIcon("category_infill") + text: Cura.MachineManager.activeStack ? parseInt(infillDensity.properties.value) + "%" : "0%" + font: UM.Theme.getFont("medium") + + UM.SettingPropertyProvider + { + id: infillDensity + containerStack: Cura.MachineManager.activeStack + key: "infill_sparse_density" + watchedProperties: ["value"] + } + } + + Cura.IconWithText + { + source: UM.Theme.getIcon("category_support") + text: supportEnabled.properties.value == "True" ? enabledText : disabledText + font: UM.Theme.getFont("medium") + + UM.SettingPropertyProvider + { + id: supportEnabled + containerStack: Cura.MachineManager.activeMachine + key: "support_enable" + watchedProperties: ["value"] + } + } + + Cura.IconWithText + { + source: UM.Theme.getIcon("category_adhesion") + text: platformAdhesionType.properties.value != "skirt" && platformAdhesionType.properties.value != "none" ? enabledText : disabledText + font: UM.Theme.getFont("medium") + + UM.SettingPropertyProvider + { + id: platformAdhesionType + containerStack: Cura.MachineManager.activeMachine + key: "adhesion_type" + watchedProperties: [ "value"] + } + } +} \ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml new file mode 100644 index 0000000000..941199707c --- /dev/null +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml @@ -0,0 +1,101 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.2 as UM +import Cura 1.0 as Cura + + +// +// Adhesion +// +Item +{ + id: enableAdhesionRow + height: childrenRect.height + + property real labelColumnWidth: Math.round(width / 3) + + Cura.IconWithText + { + id: enableAdhesionRowTitle + anchors.top: parent.top + anchors.left: parent.left + source: UM.Theme.getIcon("category_adhesion") + text: catalog.i18nc("@label", "Adhesion") + font: UM.Theme.getFont("medium") + width: labelColumnWidth + } + + Item + { + id: enableAdhesionContainer + height: enableAdhesionCheckBox.height + + anchors + { + left: enableAdhesionRowTitle.right + right: parent.right + verticalCenter: enableAdhesionRowTitle.verticalCenter + } + + CheckBox + { + id: enableAdhesionCheckBox + anchors.verticalCenter: parent.verticalCenter + + property alias _hovered: adhesionMouseArea.containsMouse + + //: Setting enable printing build-plate adhesion helper checkbox + style: UM.Theme.styles.checkbox + enabled: recommendedPrintSetup.settingsEnabled + + visible: platformAdhesionType.properties.enabled == "True" + checked: platformAdhesionType.properties.value != "skirt" && platformAdhesionType.properties.value != "none" + + MouseArea + { + id: adhesionMouseArea + anchors.fill: parent + hoverEnabled: true + + onClicked: + { + var adhesionType = "skirt" + if (!parent.checked) + { + // Remove the "user" setting to see if the rest of the stack prescribes a brim or a raft + platformAdhesionType.removeFromContainer(0) + adhesionType = platformAdhesionType.properties.value + if(adhesionType == "skirt" || adhesionType == "none") + { + // If the rest of the stack doesn't prescribe an adhesion-type, default to a brim + adhesionType = "brim" + } + } + platformAdhesionType.setPropertyValue("value", adhesionType) + } + + onEntered: + { + base.showTooltip(enableAdhesionCheckBox, Qt.point(-enableAdhesionContainer.x - UM.Theme.getSize("thick_margin").width, 0), + catalog.i18nc("@label", "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards.")); + } + onExited: base.hideTooltip() + } + } + } + + UM.SettingPropertyProvider + { + id: platformAdhesionType + containerStack: Cura.MachineManager.activeMachine + removeUnusedValue: false //Doesn't work with settings that are resolved. + key: "adhesion_type" + watchedProperties: [ "value", "enabled" ] + storeIndex: 0 + } +} \ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml new file mode 100644 index 0000000000..19f199fea6 --- /dev/null +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml @@ -0,0 +1,255 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.2 as UM +import Cura 1.0 as Cura + + +// +// Infill +// +Item +{ + id: infillRow + height: childrenRect.height + + property real labelColumnWidth: Math.round(width / 3) + + // Create a binding to update the icon when the infill density changes + Binding + { + target: infillRowTitle + property: "source" + value: + { + var density = parseInt(infillDensity.properties.value) + if (parseInt(infillSteps.properties.value) != 0) + { + return UM.Theme.getIcon("gradual") + } + if (density <= 0) + { + return UM.Theme.getIcon("hollow") + } + if (density < 40) + { + return UM.Theme.getIcon("sparse") + } + if (density < 90) + { + return UM.Theme.getIcon("dense") + } + return UM.Theme.getIcon("solid") + } + } + + // We use a binding to make sure that after manually setting infillSlider.value it is still bound to the property provider + Binding + { + target: infillSlider + property: "value" + value: parseInt(infillDensity.properties.value) + } + + // Here are the elements that are shown in the left column + Cura.IconWithText + { + id: infillRowTitle + anchors.top: parent.top + anchors.left: parent.left + source: UM.Theme.getIcon("category_infill") + text: catalog.i18nc("@label", "Infill") + " (%)" + font: UM.Theme.getFont("medium") + width: labelColumnWidth + } + + Item + { + id: infillSliderContainer + height: childrenRect.height + + anchors + { + left: infillRowTitle.right + right: parent.right + verticalCenter: infillRowTitle.verticalCenter + } + + Slider + { + id: infillSlider + + width: parent.width + height: UM.Theme.getSize("print_setup_slider_handle").height // The handle is the widest element of the slider + + minimumValue: 0 + maximumValue: 100 + stepSize: 1 + tickmarksEnabled: true + + // disable slider when gradual support is enabled + enabled: parseInt(infillSteps.properties.value) == 0 + + // set initial value from stack + value: parseInt(infillDensity.properties.value) + + style: SliderStyle + { + //Draw line + groove: Item + { + Rectangle + { + height: UM.Theme.getSize("print_setup_slider_groove").height + width: control.width - UM.Theme.getSize("print_setup_slider_handle").width + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") + } + } + + handle: Rectangle + { + id: handleButton + color: control.enabled ? UM.Theme.getColor("primary") : UM.Theme.getColor("quality_slider_unavailable") + implicitWidth: UM.Theme.getSize("print_setup_slider_handle").width + implicitHeight: implicitWidth + radius: Math.round(implicitWidth / 2) + } + + tickmarks: Repeater + { + id: repeater + model: control.maximumValue / control.stepSize + 1 + + Rectangle + { + color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") + implicitWidth: UM.Theme.getSize("print_setup_slider_tickmarks").width + implicitHeight: UM.Theme.getSize("print_setup_slider_tickmarks").height + anchors.verticalCenter: parent.verticalCenter + + // Do not use Math.round otherwise the tickmarks won't be aligned + x: ((styleData.handleWidth / 2) - (implicitWidth / 2) + (index * ((repeater.width - styleData.handleWidth) / (repeater.count-1)))) + radius: Math.round(implicitWidth / 2) + visible: (index % 10) == 0 // Only show steps of 10% + + Label + { + text: index + font: UM.Theme.getFont("default") + visible: (index % 20) == 0 // Only show steps of 20% + anchors.horizontalCenter: parent.horizontalCenter + y: UM.Theme.getSize("thin_margin").height + renderType: Text.NativeRendering + color: UM.Theme.getColor("quality_slider_available") + } + } + } + } + + onValueChanged: + { + // Don't round the value if it's already the same + if (parseInt(infillDensity.properties.value) == infillSlider.value) + { + return + } + + // Round the slider value to the nearest multiple of 10 (simulate step size of 10) + var roundedSliderValue = Math.round(infillSlider.value / 10) * 10 + + // Update the slider value to represent the rounded value + infillSlider.value = roundedSliderValue + + // Update value only if the Recomended mode is Active, + // Otherwise if I change the value in the Custom mode the Recomended view will try to repeat + // same operation + var active_mode = UM.Preferences.getValue("cura/active_mode") + + if (active_mode == 0 || active_mode == "simple") + { + Cura.MachineManager.setSettingForAllExtruders("infill_sparse_density", "value", roundedSliderValue) + Cura.MachineManager.resetSettingForAllExtruders("infill_line_distance") + } + } + } + } + + // Gradual Support Infill Checkbox + CheckBox + { + id: enableGradualInfillCheckBox + property alias _hovered: enableGradualInfillMouseArea.containsMouse + + anchors.top: infillSliderContainer.bottom + anchors.topMargin: UM.Theme.getSize("wide_margin").height + anchors.left: infillSliderContainer.left + + text: catalog.i18nc("@label", "Gradual infill") + style: UM.Theme.styles.checkbox + enabled: recommendedPrintSetup.settingsEnabled + visible: infillSteps.properties.enabled == "True" + checked: parseInt(infillSteps.properties.value) > 0 + + MouseArea + { + id: enableGradualInfillMouseArea + + anchors.fill: parent + hoverEnabled: true + enabled: true + + property var previousInfillDensity: parseInt(infillDensity.properties.value) + + onClicked: + { + // Set to 90% only when enabling gradual infill + var newInfillDensity; + if (parseInt(infillSteps.properties.value) == 0) + { + previousInfillDensity = parseInt(infillDensity.properties.value) + newInfillDensity = 90 + } else { + newInfillDensity = previousInfillDensity + } + Cura.MachineManager.setSettingForAllExtruders("infill_sparse_density", "value", String(newInfillDensity)) + + var infill_steps_value = 0 + if (parseInt(infillSteps.properties.value) == 0) + { + infill_steps_value = 5 + } + + Cura.MachineManager.setSettingForAllExtruders("gradual_infill_steps", "value", infill_steps_value) + } + + onEntered: base.showTooltip(enableGradualInfillCheckBox, Qt.point(-infillSliderContainer.x - UM.Theme.getSize("thick_margin").width, 0), + catalog.i18nc("@label", "Gradual infill will gradually increase the amount of infill towards the top.")) + + onExited: base.hideTooltip() + } + } + + UM.SettingPropertyProvider + { + id: infillDensity + containerStackId: Cura.MachineManager.activeStackId + key: "infill_sparse_density" + watchedProperties: [ "value" ] + storeIndex: 0 + } + + UM.SettingPropertyProvider + { + id: infillSteps + containerStackId: Cura.MachineManager.activeStackId + key: "gradual_infill_steps" + watchedProperties: ["value", "enabled"] + storeIndex: 0 + } +} \ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml new file mode 100644 index 0000000000..6885f8c041 --- /dev/null +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml @@ -0,0 +1,81 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Item +{ + id: recommendedPrintSetup + + height: childrenRect.height + 2 * padding + + property Action configureSettings + + property bool settingsEnabled: Cura.ExtruderManager.activeExtruderStackId || extrudersEnabledCount.properties.value == 1 + property real padding: UM.Theme.getSize("thick_margin").width + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + Column + { + width: parent.width - 2 * parent.padding + spacing: UM.Theme.getSize("wide_margin").height + + anchors + { + left: parent.left + right: parent.right + top: parent.top + margins: parent.padding + } + + // TODO + property real firstColumnWidth: Math.round(width / 3) + + RecommendedQualityProfileSelector + { + width: parent.width + // TODO Create a reusable component with these properties to not define them separately for each component + labelColumnWidth: parent.firstColumnWidth + } + + RecommendedInfillDensitySelector + { + width: parent.width + // TODO Create a reusable component with these properties to not define them separately for each component + labelColumnWidth: parent.firstColumnWidth + } + + RecommendedSupportSelector + { + width: parent.width + // TODO Create a reusable component with these properties to not define them separately for each component + labelColumnWidth: parent.firstColumnWidth + } + + RecommendedAdhesionSelector + { + width: parent.width + // TODO Create a reusable component with these properties to not define them separately for each component + labelColumnWidth: parent.firstColumnWidth + } + } + + UM.SettingPropertyProvider + { + id: extrudersEnabledCount + containerStack: Cura.MachineManager.activeMachine + key: "extruders_enabled_count" + watchedProperties: [ "value" ] + storeIndex: 0 + } +} diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml new file mode 100644 index 0000000000..801e76382b --- /dev/null +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml @@ -0,0 +1,455 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.2 as UM +import Cura 1.0 as Cura + + +// +// Quality profile +// +Item +{ + id: qualityRow + height: childrenRect.height + + property real labelColumnWidth: Math.round(width / 3) + property real settingsColumnWidth: width - labelColumnWidth + + Timer + { + id: qualitySliderChangeTimer + interval: 50 + running: false + repeat: false + onTriggered: + { + var item = Cura.QualityProfilesDropDownMenuModel.getItem(qualitySlider.value); + Cura.MachineManager.activeQualityGroup = item.quality_group; + } + } + + Component.onCompleted: qualityModel.update() + + Connections + { + target: Cura.QualityProfilesDropDownMenuModel + onItemsChanged: qualityModel.update() + } + + Connections { + target: base + onVisibleChanged: + { + // update needs to be called when the widgets are visible, otherwise the step width calculation + // will fail because the width of an invisible item is 0. + if (visible) + { + qualityModel.update(); + } + } + } + + ListModel + { + id: qualityModel + + property var totalTicks: 0 + property var availableTotalTicks: 0 + property var existingQualityProfile: 0 + + property var qualitySliderActiveIndex: 0 + property var qualitySliderStepWidth: 0 + property var qualitySliderAvailableMin: 0 + property var qualitySliderAvailableMax: 0 + property var qualitySliderMarginRight: 0 + + function update () + { + reset() + + var availableMin = -1 + var availableMax = -1 + + for (var i = 0; i < Cura.QualityProfilesDropDownMenuModel.rowCount(); i++) + { + var qualityItem = Cura.QualityProfilesDropDownMenuModel.getItem(i) + + // Add each quality item to the UI quality model + qualityModel.append(qualityItem) + + // Set selected value + if (Cura.MachineManager.activeQualityType == qualityItem.quality_type) + { + // set to -1 when switching to user created profile so all ticks are clickable + if (Cura.MachineManager.hasCustomQuality) + { + qualityModel.qualitySliderActiveIndex = -1 + } + else + { + qualityModel.qualitySliderActiveIndex = i + } + + qualityModel.existingQualityProfile = 1 + } + + // Set min available + if (qualityItem.available && availableMin == -1) + { + availableMin = i + } + + // Set max available + if (qualityItem.available) + { + availableMax = i + } + } + + // Set total available ticks for active slider part + if (availableMin != -1) + { + qualityModel.availableTotalTicks = availableMax - availableMin + 1 + } + + // Calculate slider values + calculateSliderStepWidth(qualityModel.totalTicks) + calculateSliderMargins(availableMin, availableMax, qualityModel.totalTicks) + + qualityModel.qualitySliderAvailableMin = availableMin + qualityModel.qualitySliderAvailableMax = availableMax + } + + function calculateSliderStepWidth (totalTicks) + { + // Do not use Math.round otherwise the tickmarks won't be aligned + qualityModel.qualitySliderStepWidth = totalTicks != 0 ? + ((settingsColumnWidth - UM.Theme.getSize("print_setup_slider_handle").width) / (totalTicks)) : 0 + } + + function calculateSliderMargins (availableMin, availableMax, totalTicks) + { + if (availableMin == -1 || (availableMin == 0 && availableMax == 0)) + { + // Do not use Math.round otherwise the tickmarks won't be aligned + qualityModel.qualitySliderMarginRight = settingsColumnWidth + } + else if (availableMin == availableMax) + { + // Do not use Math.round otherwise the tickmarks won't be aligned + qualityModel.qualitySliderMarginRight = (totalTicks - availableMin) * qualitySliderStepWidth + } + else + { + // Do not use Math.round otherwise the tickmarks won't be aligned + qualityModel.qualitySliderMarginRight = (totalTicks - availableMax) * qualitySliderStepWidth + } + } + + function reset () { + qualityModel.clear() + qualityModel.availableTotalTicks = 0 + qualityModel.existingQualityProfile = 0 + + // check, the ticks count cannot be less than zero + qualityModel.totalTicks = Math.max(0, Cura.QualityProfilesDropDownMenuModel.rowCount() - 1) + } + } + + // Here are the elements that are shown in the left column + Item + { + id: titleRow + width: labelColumnWidth + height: childrenRect.height + + Cura.IconWithText + { + id: qualityRowTitle + source: UM.Theme.getIcon("category_layer_height") + text: catalog.i18nc("@label", "Layer Height") + font: UM.Theme.getFont("medium") + anchors.left: parent.left + anchors.right: customisedSettings.left + } + + UM.SimpleButton + { + id: customisedSettings + + visible: Cura.SimpleModeSettingsManager.isProfileCustomized || Cura.MachineManager.hasCustomQuality + height: visible ? UM.Theme.getSize("print_setup_icon").height : 0 + width: height + anchors + { + right: parent.right + rightMargin: UM.Theme.getSize("default_margin").width + leftMargin: UM.Theme.getSize("default_margin").width + verticalCenter: parent.verticalCenter + } + + color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button") + iconSource: UM.Theme.getIcon("reset") + + onClicked: + { + // if the current profile is user-created, switch to a built-in quality + Cura.MachineManager.resetToUseDefaultQuality() + } + onEntered: + { + var tooltipContent = catalog.i18nc("@tooltip","You have modified some profile settings. If you want to change these go to custom mode.") + base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("thick_margin").width, 0), tooltipContent) + } + onExited: base.hideTooltip() + } + } + + // Show titles for the each quality slider ticks + Item + { + anchors.left: speedSlider.left + anchors.top: speedSlider.bottom + height: childrenRect.height + + Repeater + { + model: qualityModel + + Label + { + anchors.verticalCenter: parent.verticalCenter + anchors.top: parent.top + // The height has to be set manually, otherwise it's not automatically calculated in the repeater + height: UM.Theme.getSize("default_margin").height + color: (Cura.MachineManager.activeMachine != null && Cura.QualityProfilesDropDownMenuModel.getItem(index).available) ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") + text: + { + var result = "" + if(Cura.MachineManager.activeMachine != null) + { + result = Cura.QualityProfilesDropDownMenuModel.getItem(index).layer_height + + if(result == undefined) + { + result = ""; + } + else + { + result = Number(Math.round(result + "e+2") + "e-2"); //Round to 2 decimals. Javascript makes this difficult... + if (result == undefined || result != result) //Parse failure. + { + result = ""; + } + } + } + return result + } + + x: + { + // Make sure the text aligns correctly with each tick + if (qualityModel.totalTicks == 0) + { + // If there is only one tick, align it centrally + return Math.round(((settingsColumnWidth) - width) / 2) + } + else if (index == 0) + { + return Math.round(settingsColumnWidth / qualityModel.totalTicks) * index + } + else if (index == qualityModel.totalTicks) + { + return Math.round(settingsColumnWidth / qualityModel.totalTicks) * index - width + } + else + { + return Math.round((settingsColumnWidth / qualityModel.totalTicks) * index - (width / 2)) + } + } + font: UM.Theme.getFont("default") + } + } + } + + // Print speed slider + // Two sliders are created, one at the bottom with the unavailable qualities + // and the other at the top with the available quality profiles and so the handle to select them. + Item + { + id: speedSlider + height: childrenRect.height + + anchors + { + left: titleRow.right + right: parent.right + verticalCenter: titleRow.verticalCenter + } + + // Draw unavailable slider + Slider + { + id: unavailableSlider + + width: parent.width + height: qualitySlider.height // Same height as the slider that is on top + updateValueWhileDragging : false + tickmarksEnabled: true + + minimumValue: 0 + // maximumValue must be greater than minimumValue to be able to see the handle. While the value is strictly + // speaking not always correct, it seems to have the correct behavior (switching from 0 available to 1 available) + maximumValue: qualityModel.totalTicks + stepSize: 1 + + style: SliderStyle + { + //Draw Unvailable line + groove: Item + { + Rectangle + { + height: UM.Theme.getSize("print_setup_slider_groove").height + width: control.width - UM.Theme.getSize("print_setup_slider_handle").width + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + color: UM.Theme.getColor("quality_slider_unavailable") + } + } + + handle: Item {} + + tickmarks: Repeater + { + id: qualityRepeater + model: qualityModel.totalTicks > 0 ? qualityModel : 0 + + Rectangle + { + color: Cura.QualityProfilesDropDownMenuModel.getItem(index).available ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") + implicitWidth: UM.Theme.getSize("print_setup_slider_tickmarks").width + implicitHeight: UM.Theme.getSize("print_setup_slider_tickmarks").height + anchors.verticalCenter: parent.verticalCenter + + // Do not use Math.round otherwise the tickmarks won't be aligned + x: ((UM.Theme.getSize("print_setup_slider_handle").width / 2) - (implicitWidth / 2) + (qualityModel.qualitySliderStepWidth * index)) + radius: Math.round(implicitWidth / 2) + } + } + } + + // Create a mouse area on top of the unavailable profiles to show a specific tooltip + MouseArea + { + anchors.fill: parent + hoverEnabled: true + enabled: !Cura.MachineManager.hasCustomQuality + onEntered: + { + var tooltipContent = catalog.i18nc("@tooltip", "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile") + base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("thick_margin").width, customisedSettings.height), tooltipContent) + } + onExited: base.hideTooltip() + } + } + + // Draw available slider + Slider + { + id: qualitySlider + + width: qualityModel.qualitySliderStepWidth * (qualityModel.availableTotalTicks - 1) + UM.Theme.getSize("print_setup_slider_handle").width + height: UM.Theme.getSize("print_setup_slider_handle").height // The handle is the widest element of the slider + enabled: qualityModel.totalTicks > 0 && !Cura.SimpleModeSettingsManager.isProfileCustomized + visible: qualityModel.availableTotalTicks > 0 + updateValueWhileDragging : false + + anchors + { + right: parent.right + rightMargin: qualityModel.qualitySliderMarginRight + } + + minimumValue: qualityModel.qualitySliderAvailableMin >= 0 ? qualityModel.qualitySliderAvailableMin : 0 + // maximumValue must be greater than minimumValue to be able to see the handle. While the value is strictly + // speaking not always correct, it seems to have the correct behavior (switching from 0 available to 1 available) + maximumValue: qualityModel.qualitySliderAvailableMax >= 1 ? qualityModel.qualitySliderAvailableMax : 1 + stepSize: 1 + + value: qualityModel.qualitySliderActiveIndex + + style: SliderStyle + { + // Draw Available line + groove: Item + { + Rectangle + { + height: UM.Theme.getSize("print_setup_slider_groove").height + width: control.width - UM.Theme.getSize("print_setup_slider_handle").width + anchors.verticalCenter: parent.verticalCenter + + // Do not use Math.round otherwise the tickmarks won't be aligned + x: UM.Theme.getSize("print_setup_slider_handle").width / 2 + color: UM.Theme.getColor("quality_slider_available") + } + } + + handle: Rectangle + { + id: qualityhandleButton + color: UM.Theme.getColor("primary") + implicitWidth: UM.Theme.getSize("print_setup_slider_handle").width + implicitHeight: implicitWidth + radius: Math.round(implicitWidth / 2) + visible: !Cura.SimpleModeSettingsManager.isProfileCustomized && !Cura.MachineManager.hasCustomQuality && qualityModel.existingQualityProfile + } + } + + onValueChanged: + { + // only change if an active machine is set and the slider is visible at all. + if (Cura.MachineManager.activeMachine != null && visible) + { + // prevent updating during view initializing. Trigger only if the value changed by user + if (qualitySlider.value != qualityModel.qualitySliderActiveIndex && qualityModel.qualitySliderActiveIndex != -1) + { + // start updating with short delay + qualitySliderChangeTimer.start() + } + } + } + + // This mouse area is only used to capture the onHover state and don't propagate it to the unavailable mouse area + MouseArea + { + anchors.fill: parent + hoverEnabled: true + acceptedButtons: Qt.NoButton + enabled: !Cura.MachineManager.hasCustomQuality + } + } + + // This mouse area will only take the mouse events and show a tooltip when the profile in use is + // a user created profile + MouseArea + { + anchors.fill: parent + hoverEnabled: true + visible: Cura.MachineManager.hasCustomQuality + + onEntered: + { + var tooltipContent = catalog.i18nc("@tooltip", "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab") + base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("thick_margin").width, customisedSettings.height), tooltipContent) + } + onExited: base.hideTooltip() + } + } +} \ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml new file mode 100644 index 0000000000..7e115667c3 --- /dev/null +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml @@ -0,0 +1,334 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls 2.3 as Controls2 + +import UM 1.2 as UM +import Cura 1.0 as Cura + + +// +// Enable support +// +Item +{ + id: enableSupportRow + height: childrenRect.height + + property real labelColumnWidth: Math.round(width / 3) + + Cura.IconWithText + { + id: enableSupportRowTitle + anchors.top: parent.top + anchors.left: parent.left + visible: enableSupportCheckBox.visible + source: UM.Theme.getIcon("category_support") + text: catalog.i18nc("@label", "Support") + font: UM.Theme.getFont("medium") + width: labelColumnWidth + } + + Item + { + id: enableSupportContainer + height: enableSupportCheckBox.height + + anchors + { + left: enableSupportRowTitle.right + right: parent.right + verticalCenter: enableSupportRowTitle.verticalCenter + } + + CheckBox + { + id: enableSupportCheckBox + anchors.verticalCenter: parent.verticalCenter + + property alias _hovered: enableSupportMouseArea.containsMouse + + style: UM.Theme.styles.checkbox + enabled: recommendedPrintSetup.settingsEnabled + + visible: supportEnabled.properties.enabled == "True" + checked: supportEnabled.properties.value == "True" + + MouseArea + { + id: enableSupportMouseArea + anchors.fill: parent + hoverEnabled: true + + onClicked: supportEnabled.setPropertyValue("value", supportEnabled.properties.value != "True") + + onEntered: + { + base.showTooltip(enableSupportCheckBox, Qt.point(-enableSupportContainer.x - UM.Theme.getSize("thick_margin").width, 0), + catalog.i18nc("@label", "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing.")) + } + onExited: base.hideTooltip() + } + } + + Controls2.ComboBox + { + id: supportExtruderCombobox + + height: UM.Theme.getSize("print_setup_big_item").height + anchors + { + left: enableSupportCheckBox.right + right: parent.right + leftMargin: UM.Theme.getSize("thick_margin").width + rightMargin: UM.Theme.getSize("thick_margin").width + verticalCenter: parent.verticalCenter + } + + enabled: recommendedPrintSetup.settingsEnabled + visible: enableSupportCheckBox.visible && (supportEnabled.properties.value == "True") && (extrudersEnabledCount.properties.value > 1) + textRole: "name" // this solves that the combobox isn't populated in the first time Cura is started + + model: extruderModel + + // knowing the extruder position, try to find the item index in the model + function getIndexByPosition(position) + { + var itemIndex = -1 // if position is not found, return -1 + for (var item_index in model.items) + { + var item = model.getItem(item_index) + if (item.index == position) + { + itemIndex = item_index + break + } + } + return itemIndex + } + + onActivated: + { + if (model.getItem(index).enabled) + { + forceActiveFocus(); + supportExtruderNr.setPropertyValue("value", model.getItem(index).index); + } else + { + currentIndex = supportExtruderNr.properties.value; // keep the old value + } + } + + currentIndex: supportExtruderNr.properties.value + + property string color: "#fff" + Connections + { + target: extruderModel + onModelChanged: + { + supportExtruderCombobox.color = supportExtruderCombobox.model.getItem(supportExtruderCombobox.currentIndex).color + } + } + onCurrentIndexChanged: supportExtruderCombobox.color = supportExtruderCombobox.model.getItem(supportExtruderCombobox.currentIndex).color + + Binding + { + target: supportExtruderCombobox + property: "currentIndex" + value: supportExtruderCombobox.getIndexByPosition(supportExtruderNr.properties.value) + // Sometimes when the value is already changed, the model is still being built. + // The when clause ensures that the current index is not updated when this happens. + when: supportExtruderCombobox.model.count > 0 + } + + indicator: UM.RecolorImage + { + id: downArrow + x: supportExtruderCombobox.width - width - supportExtruderCombobox.rightPadding + y: supportExtruderCombobox.topPadding + Math.round((supportExtruderCombobox.availableHeight - height) / 2) + + source: UM.Theme.getIcon("arrow_bottom") + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + sourceSize.width: width + 5 * screenScaleFactor + sourceSize.height: width + 5 * screenScaleFactor + + color: UM.Theme.getColor("setting_control_button") + } + + background: Rectangle + { + color: + { + if (!enabled) + { + return UM.Theme.getColor("setting_control_disabled") + } + if (supportExtruderCombobox.hovered || base.activeFocus) + { + return UM.Theme.getColor("setting_control_highlight") + } + return UM.Theme.getColor("setting_control") + } + radius: UM.Theme.getSize("setting_control_radius").width + border.width: UM.Theme.getSize("default_lining").width + border.color: + { + if (!enabled) + { + return UM.Theme.getColor("setting_control_disabled_border") + } + if (supportExtruderCombobox.hovered || supportExtruderCombobox.activeFocus) + { + return UM.Theme.getColor("setting_control_border_highlight") + } + return UM.Theme.getColor("setting_control_border") + } + } + + contentItem: Controls2.Label + { + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("setting_unit_margin").width + anchors.right: downArrow.left + rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width + + text: supportExtruderCombobox.currentText + textFormat: Text.PlainText + renderType: Text.NativeRendering + font: UM.Theme.getFont("default") + color: enabled ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_disabled_text") + + elide: Text.ElideLeft + verticalAlignment: Text.AlignVCenter + + background: UM.RecolorImage + { + id: swatch + height: Math.round(parent.height / 2) + width: height + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + anchors.rightMargin: UM.Theme.getSize("thin_margin").width + + sourceSize.width: width + sourceSize.height: height + source: UM.Theme.getIcon("extruder_button") + color: supportExtruderCombobox.color + } + } + + popup: Controls2.Popup + { + y: supportExtruderCombobox.height - UM.Theme.getSize("default_lining").height + width: supportExtruderCombobox.width + implicitHeight: contentItem.implicitHeight + 2 * UM.Theme.getSize("default_lining").width + padding: UM.Theme.getSize("default_lining").width + + contentItem: ListView + { + clip: true + implicitHeight: contentHeight + model: supportExtruderCombobox.popup.visible ? supportExtruderCombobox.delegateModel : null + currentIndex: supportExtruderCombobox.highlightedIndex + + Controls2.ScrollIndicator.vertical: Controls2.ScrollIndicator { } + } + + background: Rectangle + { + color: UM.Theme.getColor("setting_control") + border.color: UM.Theme.getColor("setting_control_border") + } + } + + delegate: Controls2.ItemDelegate + { + width: supportExtruderCombobox.width - 2 * UM.Theme.getSize("default_lining").width + height: supportExtruderCombobox.height + highlighted: supportExtruderCombobox.highlightedIndex == index + + contentItem: Controls2.Label + { + anchors.fill: parent + anchors.leftMargin: UM.Theme.getSize("setting_unit_margin").width + anchors.rightMargin: UM.Theme.getSize("setting_unit_margin").width + + text: model.name + renderType: Text.NativeRendering + color: + { + if (model.enabled) + { + UM.Theme.getColor("setting_control_text") + } + else + { + UM.Theme.getColor("action_button_disabled_text"); + } + } + font: UM.Theme.getFont("default") + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width + + background: UM.RecolorImage + { + id: swatch + height: Math.round(parent.height / 2) + width: height + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + anchors.rightMargin: UM.Theme.getSize("thin_margin").width + + sourceSize.width: width + sourceSize.height: height + source: UM.Theme.getIcon("extruder_button") + color: supportExtruderCombobox.model.getItem(index).color + } + } + + background: Rectangle + { + color: parent.highlighted ? UM.Theme.getColor("setting_control_highlight") : "transparent" + border.color: parent.highlighted ? UM.Theme.getColor("setting_control_border_highlight") : "transparent" + } + } + } + } + + property var extruderModel: CuraApplication.getExtrudersModel() + + + UM.SettingPropertyProvider + { + id: supportEnabled + containerStack: Cura.MachineManager.activeMachine + key: "support_enable" + watchedProperties: [ "value", "enabled", "description" ] + storeIndex: 0 + } + + UM.SettingPropertyProvider + { + id: supportExtruderNr + containerStack: Cura.MachineManager.activeMachine + key: "support_extruder_nr" + watchedProperties: [ "value" ] + storeIndex: 0 + } + + UM.SettingPropertyProvider + { + id: machineExtruderCount + containerStack: Cura.MachineManager.activeMachine + key: "machine_extruder_count" + watchedProperties: ["value"] + storeIndex: 0 + } +} \ No newline at end of file diff --git a/resources/qml/SidebarTooltip.qml b/resources/qml/PrintSetupTooltip.qml similarity index 87% rename from resources/qml/SidebarTooltip.qml rename to resources/qml/PrintSetupTooltip.qml index 29199481f6..6b1538d849 100644 --- a/resources/qml/SidebarTooltip.qml +++ b/resources/qml/PrintSetupTooltip.qml @@ -2,9 +2,7 @@ // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.3 import UM 1.0 as UM @@ -36,14 +34,15 @@ UM.PointingRectangle { } } base.opacity = 1; - target = Qt.point(40 , position.y + Math.round(UM.Theme.getSize("tooltip_arrow_margins").height / 2)) + target = Qt.point(position.x + 1, position.y + Math.round(UM.Theme.getSize("tooltip_arrow_margins").height / 2)) } function hide() { base.opacity = 0; } - Label { + Label + { id: label; anchors { top: parent.top; @@ -57,5 +56,6 @@ UM.PointingRectangle { textFormat: Text.RichText font: UM.Theme.getFont("default"); color: UM.Theme.getColor("tooltip_text"); + renderType: Text.NativeRendering } } diff --git a/resources/qml/PrinterOutput/ExtruderBox.qml b/resources/qml/PrinterOutput/ExtruderBox.qml index 56c86f1034..a19c02b0dd 100644 --- a/resources/qml/PrinterOutput/ExtruderBox.qml +++ b/resources/qml/PrinterOutput/ExtruderBox.qml @@ -12,8 +12,10 @@ Item property alias color: background.color property var extruderModel property var position: index + property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null + implicitWidth: parent.width - implicitHeight: UM.Theme.getSize("sidebar_extruder_box").height + implicitHeight: UM.Theme.getSize("print_setup_extruder_box").height UM.SettingPropertyProvider { @@ -23,7 +25,7 @@ Item watchedProperties: ["value", "minimum_value", "maximum_value", "resolve"] storeIndex: 0 - property var resolve: Cura.MachineManager.activeStackId != Cura.MachineManager.activeMachineId ? properties.resolve : "None" + property var resolve: Cura.MachineManager.activeStack != Cura.MachineManager.activeMachine ? properties.resolve : "None" } Rectangle @@ -45,7 +47,7 @@ Item { id: extruderTargetTemperature text: Math.round(extruderModel.targetHotendTemperature) + "°C" - font: UM.Theme.getFont("small") + font: UM.Theme.getFont("default_bold") color: UM.Theme.getColor("text_inactive") anchors.right: parent.right anchors.rightMargin: UM.Theme.getSize("default_margin").width @@ -78,7 +80,7 @@ Item id: extruderCurrentTemperature text: Math.round(extruderModel.hotendTemperature) + "°C" color: UM.Theme.getColor("text") - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") anchors.right: extruderTargetTemperature.left anchors.top: parent.top anchors.margins: UM.Theme.getSize("default_margin").width @@ -324,7 +326,7 @@ Item return UM.Theme.getColor("action_button_text"); } } - font: UM.Theme.getFont("action_button") + font: UM.Theme.getFont("medium") text: { if(extruderModel == null) diff --git a/resources/qml/PrinterOutput/HeatedBedBox.qml b/resources/qml/PrinterOutput/HeatedBedBox.qml index 9de66ad0be..77421c8aad 100644 --- a/resources/qml/PrinterOutput/HeatedBedBox.qml +++ b/resources/qml/PrinterOutput/HeatedBedBox.qml @@ -1,10 +1,10 @@ // Copyright (c) 2017 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 +import QtQuick 2.10 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Layouts 1.3 import UM 1.2 as UM import Cura 1.0 as Cura @@ -12,12 +12,13 @@ import Cura 1.0 as Cura Item { implicitWidth: parent.width - height: visible ? UM.Theme.getSize("sidebar_extruder_box").height : 0 + height: visible ? UM.Theme.getSize("print_setup_extruder_box").height : 0 property var printerModel + property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null Rectangle { - color: UM.Theme.getColor("sidebar") + color: UM.Theme.getColor("main_background") anchors.fill: parent Label //Build plate label. @@ -34,7 +35,7 @@ Item { id: bedTargetTemperature text: printerModel != null ? printerModel.targetBedTemperature + "°C" : "" - font: UM.Theme.getFont("small") + font: UM.Theme.getFont("default_bold") color: UM.Theme.getColor("text_inactive") anchors.right: parent.right anchors.rightMargin: UM.Theme.getSize("default_margin").width @@ -66,7 +67,7 @@ Item { id: bedCurrentTemperature text: printerModel != null ? printerModel.bedTemperature + "°C" : "" - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") color: UM.Theme.getColor("text") anchors.right: bedTargetTemperature.left anchors.top: parent.top @@ -114,7 +115,7 @@ Item { return false; //Can't preheat if not connected. } - if (!connectedPrinter.acceptsCommands) + if (connectedPrinter == null || !connectedPrinter.acceptsCommands) { return false; //Not allowed to do anything. } @@ -319,7 +320,7 @@ Item return UM.Theme.getColor("action_button_text"); } } - font: UM.Theme.getFont("action_button") + font: UM.Theme.getFont("medium") text: { if(printerModel == null) diff --git a/resources/qml/PrinterOutput/ManualPrinterControl.qml b/resources/qml/PrinterOutput/ManualPrinterControl.qml index 70961a2eb2..106ae7db03 100644 --- a/resources/qml/PrinterOutput/ManualPrinterControl.qml +++ b/resources/qml/PrinterOutput/ManualPrinterControl.qml @@ -1,103 +1,26 @@ // Copyright (c) 2017 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 +import QtQuick 2.10 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Layouts 1.3 -import UM 1.2 as UM +import UM 1.3 as UM import Cura 1.0 as Cura +import "." + + Item { - property var printerModel + property var printerModel: null property var activePrintJob: printerModel != null ? printerModel.activePrintJob : null + property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null + implicitWidth: parent.width implicitHeight: childrenRect.height - Component - { - id: monitorButtonStyle - - ButtonStyle - { - background: Rectangle - { - border.width: UM.Theme.getSize("default_lining").width - border.color: - { - if(!control.enabled) - { - return UM.Theme.getColor("action_button_disabled_border"); - } - else if(control.pressed) - { - return UM.Theme.getColor("action_button_active_border"); - } - else if(control.hovered) - { - return UM.Theme.getColor("action_button_hovered_border"); - } - return UM.Theme.getColor("action_button_border"); - } - color: - { - if(!control.enabled) - { - return UM.Theme.getColor("action_button_disabled"); - } - else if(control.pressed) - { - return UM.Theme.getColor("action_button_active"); - } - else if(control.hovered) - { - return UM.Theme.getColor("action_button_hovered"); - } - return UM.Theme.getColor("action_button"); - } - Behavior on color - { - ColorAnimation - { - duration: 50 - } - } - } - - label: Item - { - UM.RecolorImage - { - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - width: Math.floor(control.width / 2) - height: Math.floor(control.height / 2) - sourceSize.width: width - sourceSize.height: width - color: - { - if(!control.enabled) - { - return UM.Theme.getColor("action_button_disabled_text"); - } - else if(control.pressed) - { - return UM.Theme.getColor("action_button_active_text"); - } - else if(control.hovered) - { - return UM.Theme.getColor("action_button_hovered_text"); - } - return UM.Theme.getColor("action_button_text"); - } - source: control.iconSource - } - } - } - } - Column { enabled: @@ -180,7 +103,7 @@ Item Layout.preferredWidth: width Layout.preferredHeight: height iconSource: UM.Theme.getIcon("arrow_top"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -197,7 +120,7 @@ Item Layout.preferredWidth: width Layout.preferredHeight: height iconSource: UM.Theme.getIcon("arrow_left"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -214,7 +137,7 @@ Item Layout.preferredWidth: width Layout.preferredHeight: height iconSource: UM.Theme.getIcon("arrow_right"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -231,7 +154,7 @@ Item Layout.preferredWidth: width Layout.preferredHeight: height iconSource: UM.Theme.getIcon("arrow_bottom"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -248,7 +171,7 @@ Item Layout.preferredWidth: width Layout.preferredHeight: height iconSource: UM.Theme.getIcon("home"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -278,7 +201,7 @@ Item Button { iconSource: UM.Theme.getIcon("arrow_top"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -291,7 +214,7 @@ Item Button { iconSource: UM.Theme.getIcon("home"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -304,7 +227,7 @@ Item Button { iconSource: UM.Theme.getIcon("arrow_bottom"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -356,72 +279,7 @@ Item checked: distancesRow.currentDistance == model.value onClicked: distancesRow.currentDistance = model.value - style: ButtonStyle { - background: Rectangle { - border.width: control.checked ? UM.Theme.getSize("default_lining").width * 2 : UM.Theme.getSize("default_lining").width - border.color: - { - if(!control.enabled) - { - return UM.Theme.getColor("action_button_disabled_border"); - } - else if (control.checked || control.pressed) - { - return UM.Theme.getColor("action_button_active_border"); - } - else if(control.hovered) - { - return UM.Theme.getColor("action_button_hovered_border"); - } - return UM.Theme.getColor("action_button_border"); - } - color: - { - if(!control.enabled) - { - return UM.Theme.getColor("action_button_disabled"); - } - else if (control.checked || control.pressed) - { - return UM.Theme.getColor("action_button_active"); - } - else if (control.hovered) - { - return UM.Theme.getColor("action_button_hovered"); - } - return UM.Theme.getColor("action_button"); - } - Behavior on color { ColorAnimation { duration: 50; } } - Label { - anchors.left: parent.left - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - anchors.leftMargin: UM.Theme.getSize("default_lining").width * 2 - anchors.rightMargin: UM.Theme.getSize("default_lining").width * 2 - color: - { - if(!control.enabled) - { - return UM.Theme.getColor("action_button_disabled_text"); - } - else if (control.checked || control.pressed) - { - return UM.Theme.getColor("action_button_active_text"); - } - else if (control.hovered) - { - return UM.Theme.getColor("action_button_hovered_text"); - } - return UM.Theme.getColor("action_button_text"); - } - font: UM.Theme.getFont("default") - text: control.text - horizontalAlignment: Text.AlignHCenter - elide: Text.ElideMiddle - } - } - label: Item { } - } + style: UM.Theme.styles.monitor_checkable_button_style } } } @@ -462,7 +320,7 @@ Item if (printerModel == null) { return false // Can't send custom commands if not connected. } - if (!connectedPrinter.acceptsCommands) { + if (connectedPrinter == null || !connectedPrinter.acceptsCommands) { return false // Not allowed to do anything } if (connectedPrinter.jobState == "printing" || connectedPrinter.jobState == "pre_print" || connectedPrinter.jobState == "resuming" || connectedPrinter.jobState == "pausing" || connectedPrinter.jobState == "paused" || connectedPrinter.jobState == "error" || connectedPrinter.jobState == "offline") { @@ -551,4 +409,4 @@ Item } ExclusiveGroup { id: distanceGroup } } -} \ No newline at end of file +} diff --git a/resources/qml/PrinterOutput/MonitorItem.qml b/resources/qml/PrinterOutput/MonitorItem.qml index cad8d2f7f3..a26ec20f64 100644 --- a/resources/qml/PrinterOutput/MonitorItem.qml +++ b/resources/qml/PrinterOutput/MonitorItem.qml @@ -15,6 +15,8 @@ Item property string value: "" height: childrenRect.height; + property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null + Row { height: UM.Theme.getSize("setting_control").height diff --git a/resources/qml/PrinterOutput/MonitorSection.qml b/resources/qml/PrinterOutput/MonitorSection.qml index 6ed762362d..1d9df777b6 100644 --- a/resources/qml/PrinterOutput/MonitorSection.qml +++ b/resources/qml/PrinterOutput/MonitorSection.qml @@ -1,10 +1,10 @@ // Copyright (c) 2017 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 +import QtQuick 2.10 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Layouts 1.3 import UM 1.2 as UM import Cura 1.0 as Cura @@ -13,7 +13,8 @@ Item { id: base property string label - height: childrenRect.height; + height: childrenRect.height + Rectangle { color: UM.Theme.getColor("setting_category") @@ -26,8 +27,8 @@ Item anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width text: label - font: UM.Theme.getFont("setting_category") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("setting_category_text") } } -} \ No newline at end of file +} diff --git a/resources/qml/PrinterOutput/OutputDeviceHeader.qml b/resources/qml/PrinterOutput/OutputDeviceHeader.qml index 03e6d78699..47f855266b 100644 --- a/resources/qml/PrinterOutput/OutputDeviceHeader.qml +++ b/resources/qml/PrinterOutput/OutputDeviceHeader.qml @@ -14,31 +14,39 @@ Item implicitHeight: Math.floor(childrenRect.height + UM.Theme.getSize("default_margin").height * 2) property var outputDevice: null + Connections + { + target: Cura.MachineManager + onGlobalContainerChanged: + { + outputDevice = Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null; + } + } + Rectangle { height: childrenRect.height color: UM.Theme.getColor("setting_category") - property var activePrinter: outputDevice != null ? outputDevice.activePrinter : null Label { id: outputDeviceNameLabel - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") color: UM.Theme.getColor("text") anchors.left: parent.left anchors.top: parent.top anchors.margins: UM.Theme.getSize("default_margin").width - text: outputDevice != null ? activePrinter.name : "" + text: outputDevice != null ? outputDevice.activePrinter.name : "" } Label { id: outputDeviceAddressLabel text: (outputDevice != null && outputDevice.address != null) ? outputDevice.address : "" - font: UM.Theme.getFont("small") + font: UM.Theme.getFont("default_bold") color: UM.Theme.getColor("text_inactive") - anchors.top: parent.top - anchors.right: parent.right + anchors.top: outputDeviceNameLabel.bottom + anchors.left: parent.left anchors.margins: UM.Theme.getSize("default_margin").width } @@ -46,7 +54,7 @@ Item { text: outputDevice != null ? "" : catalog.i18nc("@info:status", "The printer is not connected.") color: outputDevice != null && outputDevice.acceptsCommands ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_disabled_text") - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") wrapMode: Text.WordWrap anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width diff --git a/resources/qml/PrinterSelector/MachineSelector.qml b/resources/qml/PrinterSelector/MachineSelector.qml new file mode 100644 index 0000000000..e9452f4d35 --- /dev/null +++ b/resources/qml/PrinterSelector/MachineSelector.qml @@ -0,0 +1,182 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Cura.ExpandablePopup +{ + id: machineSelector + + property bool isNetworkPrinter: Cura.MachineManager.activeMachineHasNetworkConnection + property bool isCloudPrinter: Cura.MachineManager.activeMachineHasCloudConnection + property bool isGroup: Cura.MachineManager.activeMachineIsGroup + + contentPadding: UM.Theme.getSize("default_lining").width + contentAlignment: Cura.ExpandablePopup.ContentAlignment.AlignLeft + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + headerItem: Cura.IconWithText + { + text: + { + if (isNetworkPrinter && Cura.MachineManager.activeMachineNetworkGroupName != "") + { + return Cura.MachineManager.activeMachineNetworkGroupName + } + return Cura.MachineManager.activeMachineName + } + source: + { + if (isGroup) + { + return UM.Theme.getIcon("printer_group") + } + else if (isNetworkPrinter || isCloudPrinter) + { + return UM.Theme.getIcon("printer_single") + } + else + { + return "" + } + } + font: UM.Theme.getFont("medium") + iconColor: UM.Theme.getColor("machine_selector_printer_icon") + iconSize: source != "" ? UM.Theme.getSize("machine_selector_icon").width: 0 + + UM.RecolorImage + { + anchors + { + bottom: parent.bottom + left: parent.left + leftMargin: UM.Theme.getSize("thick_margin").width + } + + source: + { + if (isNetworkPrinter) + { + return UM.Theme.getIcon("printer_connected") + } + else if (isCloudPrinter) + { + return UM.Theme.getIcon("printer_cloud_connected") + } + else + { + return "" + } + } + + width: UM.Theme.getSize("printer_status_icon").width + height: UM.Theme.getSize("printer_status_icon").height + + color: UM.Theme.getColor("primary") + visible: isNetworkPrinter || isCloudPrinter + + // Make a themable circle in the background so we can change it in other themes + Rectangle + { + id: iconBackground + anchors.centerIn: parent + // Make it a bit bigger so there is an outline + width: parent.width + 2 * UM.Theme.getSize("default_lining").width + height: parent.height + 2 * UM.Theme.getSize("default_lining").height + radius: Math.round(width / 2) + color: UM.Theme.getColor("main_background") + z: parent.z - 1 + } + } + } + + contentItem: Item + { + id: popup + width: UM.Theme.getSize("machine_selector_widget_content").width + + ScrollView + { + id: scroll + width: parent.width + clip: true + leftPadding: UM.Theme.getSize("default_lining").width + rightPadding: UM.Theme.getSize("default_lining").width + + MachineSelectorList + { + // Can't use parent.width since the parent is the flickable component and not the ScrollView + width: scroll.width - scroll.leftPadding - scroll.rightPadding + property real maximumHeight: UM.Theme.getSize("machine_selector_widget_content").height - buttonRow.height + + // We use an extra property here, since we only want to to be informed about the content size changes. + onContentHeightChanged: + { + scroll.height = Math.min(contentHeight, maximumHeight) + popup.height = scroll.height + buttonRow.height + } + + Component.onCompleted: + { + scroll.height = Math.min(contentHeight, maximumHeight) + popup.height = scroll.height + buttonRow.height + } + + } + } + + Rectangle + { + id: separator + + anchors.top: scroll.bottom + width: parent.width + height: UM.Theme.getSize("default_lining").height + color: UM.Theme.getColor("lining") + } + + Row + { + id: buttonRow + + // The separator is inside the buttonRow. This is to avoid some weird behaviours with the scroll bar. + anchors.top: separator.top + anchors.horizontalCenter: parent.horizontalCenter + padding: UM.Theme.getSize("default_margin").width + spacing: UM.Theme.getSize("default_margin").width + + Cura.SecondaryButton + { + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@button", "Add printer") + onClicked: + { + toggleContent() + Cura.Actions.addMachine.trigger() + } + } + + Cura.SecondaryButton + { + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@button", "Manage printers") + onClicked: + { + toggleContent() + Cura.Actions.configureMachines.trigger() + } + } + } + } +} diff --git a/resources/qml/PrinterSelector/MachineSelectorButton.qml b/resources/qml/PrinterSelector/MachineSelectorButton.qml new file mode 100644 index 0000000000..39e63d27c3 --- /dev/null +++ b/resources/qml/PrinterSelector/MachineSelectorButton.qml @@ -0,0 +1,103 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 + +import UM 1.1 as UM +import Cura 1.0 as Cura + +Button +{ + id: machineSelectorButton + + width: parent.width + height: UM.Theme.getSize("action_button").height + leftPadding: UM.Theme.getSize("thick_margin").width + rightPadding: UM.Theme.getSize("thick_margin").width + checkable: true + hoverEnabled: true + + property var outputDevice: null + property var printerTypesList: [] + + function updatePrinterTypesList() + { + printerTypesList = (checked && (outputDevice != null)) ? outputDevice.uniquePrinterTypes : [] + } + + contentItem: Item + { + width: machineSelectorButton.width - machineSelectorButton.leftPadding + height: UM.Theme.getSize("action_button").height + + Label + { + id: buttonText + anchors + { + left: parent.left + right: printerTypes.left + verticalCenter: parent.verticalCenter + } + text: machineSelectorButton.text + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("medium") + visible: text != "" + renderType: Text.NativeRendering + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + Row + { + id: printerTypes + width: childrenRect.width + + anchors + { + right: parent.right + verticalCenter: parent.verticalCenter + } + spacing: UM.Theme.getSize("narrow_margin").width + + Repeater + { + model: printerTypesList + delegate: Cura.PrinterTypeLabel + { + text: Cura.MachineManager.getAbbreviatedMachineName(modelData) + } + } + } + } + + background: Rectangle + { + id: backgroundRect + color: machineSelectorButton.hovered ? UM.Theme.getColor("action_button_hovered") : "transparent" + radius: UM.Theme.getSize("action_button_radius").width + border.width: UM.Theme.getSize("default_lining").width + border.color: machineSelectorButton.checked ? UM.Theme.getColor("primary") : "transparent" + } + + onClicked: + { + toggleContent() + Cura.MachineManager.setActiveMachine(model.id) + } + + Connections + { + target: outputDevice + onUniqueConfigurationsChanged: updatePrinterTypesList() + } + + Connections + { + target: Cura.MachineManager + onOutputDevicesChanged: updatePrinterTypesList() + } + + Component.onCompleted: updatePrinterTypesList() +} diff --git a/resources/qml/PrinterSelector/MachineSelectorList.qml b/resources/qml/PrinterSelector/MachineSelectorList.qml new file mode 100644 index 0000000000..49d9d31f2b --- /dev/null +++ b/resources/qml/PrinterSelector/MachineSelectorList.qml @@ -0,0 +1,46 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +ListView +{ + id: listView + model: Cura.GlobalStacksModel {} + section.property: "hasRemoteConnection" + property real contentHeight: childrenRect.height + + section.delegate: Label + { + text: section == "true" ? catalog.i18nc("@label", "Connected printers") : catalog.i18nc("@label", "Preset printers") + width: parent.width + height: UM.Theme.getSize("action_button").height + leftPadding: UM.Theme.getSize("default_margin").width + renderType: Text.NativeRendering + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text_medium") + verticalAlignment: Text.AlignVCenter + } + + delegate: MachineSelectorButton + { + text: model.name + width: listView.width + outputDevice: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null + + checked: + { + // If the machine has a remote connection + var result = Cura.MachineManager.activeMachineId == model.id + if (Cura.MachineManager.activeMachineHasRemoteConnection) + { + result |= Cura.MachineManager.activeMachineNetworkGroupName == model.metadata["group_name"] + } + return result + } + } +} diff --git a/resources/qml/PrinterTypeLabel.qml b/resources/qml/PrinterTypeLabel.qml new file mode 100644 index 0000000000..cfc9e56513 --- /dev/null +++ b/resources/qml/PrinterTypeLabel.qml @@ -0,0 +1,35 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 + +import UM 1.1 as UM + +// This component creates a label with the abbreviated name of a printer, with a rectangle surrounding the label. +// It is created in a separated place in order to be reused whenever needed. +Item +{ + property alias text: printerTypeLabel.text + + width: UM.Theme.getSize("printer_type_label").width + height: UM.Theme.getSize("printer_type_label").height + + Rectangle + { + anchors.fill: parent + color: UM.Theme.getColor("printer_type_label_background") + radius: UM.Theme.getSize("checkbox_radius").width + } + + Label + { + id: printerTypeLabel + text: "CFFFP" // As an abbreviated name of the Custom FFF Printer + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + renderType: Text.NativeRendering + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + } +} \ No newline at end of file diff --git a/resources/qml/RoundedRectangle.qml b/resources/qml/RoundedRectangle.qml new file mode 100644 index 0000000000..3ca05e2125 --- /dev/null +++ b/resources/qml/RoundedRectangle.qml @@ -0,0 +1,72 @@ +import QtQuick 2.7 + +import UM 1.2 as UM + +// The rounded rectangle works mostly like a regular rectangle, but provides the option to have rounded corners on only one side of the rectangle. +Item +{ + id: roundedRectangle + // As per the regular rectangle + property color color: "transparent" + + // As per regular rectangle + property int radius: UM.Theme.getSize("default_radius").width + + // On what side should the corners be shown 5 can be used if no radius is needed. + // 1 is down, 2 is left, 3 is up and 4 is right. + property int cornerSide: RoundedRectangle.Direction.None + + // Simple object to ensure that border.width and border.color work + property BorderGroup border: BorderGroup {} + + enum Direction + { + None = 0, + Down = 1, + Left = 2, + Up = 3, + Right = 4, + All = 5 + } + + Rectangle + { + id: background + anchors.fill: parent + radius: cornerSide != RoundedRectangle.Direction.None ? parent.radius : 0 + color: parent.color + border.width: parent.border.width + border.color: parent.border.color + } + + // The item that covers 2 of the corners to make them not rounded. + Rectangle + { + visible: cornerSide != RoundedRectangle.Direction.None && cornerSide != RoundedRectangle.Direction.All + height: cornerSide % 2 ? parent.radius: parent.height + width: cornerSide % 2 ? parent.width : parent.radius + color: parent.color + anchors + { + right: cornerSide == RoundedRectangle.Direction.Left ? parent.right: undefined + bottom: cornerSide == RoundedRectangle.Direction.Up ? parent.bottom: undefined + } + + border.width: parent.border.width + border.color: parent.border.color + + Rectangle + { + color: roundedRectangle.color + height: cornerSide % 2 ? roundedRectangle.border.width: roundedRectangle.height - 2 * roundedRectangle.border.width + width: cornerSide % 2 ? roundedRectangle.width - 2 * roundedRectangle.border.width: roundedRectangle.border.width + anchors + { + right: cornerSide == RoundedRectangle.Direction.Right ? parent.right : undefined + bottom: cornerSide == RoundedRectangle.Direction.Down ? parent.bottom: undefined + horizontalCenter: cornerSide % 2 ? parent.horizontalCenter: undefined + verticalCenter: cornerSide % 2 ? undefined: parent.verticalCenter + } + } + } +} diff --git a/resources/qml/SaveButton.qml b/resources/qml/SaveButton.qml deleted file mode 100644 index 0e0eec7277..0000000000 --- a/resources/qml/SaveButton.qml +++ /dev/null @@ -1,407 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 - -import UM 1.1 as UM - -Item { - id: base; - UM.I18nCatalog { id: catalog; name:"cura"} - - property real progress: UM.Backend.progress - property int backendState: UM.Backend.state - property bool activity: CuraApplication.platformActivity - - property alias buttonRowWidth: saveRow.width - - property string fileBaseName - property string statusText: - { - if(!activity) - { - return catalog.i18nc("@label:PrintjobStatus", "Please load a 3D model"); - } - - if (base.backendState == "undefined") { - return "" - } - - switch(base.backendState) - { - case 1: - return catalog.i18nc("@label:PrintjobStatus", "Ready to slice"); - case 2: - return catalog.i18nc("@label:PrintjobStatus", "Slicing..."); - case 3: - return catalog.i18nc("@label:PrintjobStatus %1 is target operation","Ready to %1").arg(UM.OutputDeviceManager.activeDeviceShortDescription); - case 4: - return catalog.i18nc("@label:PrintjobStatus", "Unable to Slice"); - case 5: - return catalog.i18nc("@label:PrintjobStatus", "Slicing unavailable"); - default: - return ""; - } - } - - function sliceOrStopSlicing() { - try { - if ([1, 5].indexOf(base.backendState) != -1) { - CuraApplication.backend.forceSlice(); - } else { - CuraApplication.backend.stopSlicing(); - } - } catch (e) { - console.log('Could not start or stop slicing', e) - } - } - - Label { - id: statusLabel - width: parent.width - 2 * UM.Theme.getSize("sidebar_margin").width - anchors.top: parent.top - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - - color: UM.Theme.getColor("text") - font: UM.Theme.getFont("default_bold") - text: statusText; - } - - Rectangle { - id: progressBar - width: parent.width - 2 * UM.Theme.getSize("sidebar_margin").width - height: UM.Theme.getSize("progressbar").height - anchors.top: statusLabel.bottom - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height / 4) - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - radius: UM.Theme.getSize("progressbar_radius").width - color: UM.Theme.getColor("progressbar_background") - - Rectangle { - width: Math.max(parent.width * base.progress) - height: parent.height - color: UM.Theme.getColor("progressbar_control") - radius: UM.Theme.getSize("progressbar_radius").width - visible: (base.backendState != "undefined" && base.backendState == 2) ? true : false - } - } - - // Shortcut for "save as/print/..." - Action { - shortcut: "Ctrl+P" - onTriggered: - { - // only work when the button is enabled - if (saveToButton.enabled) { - saveToButton.clicked(); - } - // prepare button - if (prepareButton.enabled) { - sliceOrStopSlicing(); - } - } - } - - Item { - id: saveRow - width: { - // using childrenRect.width directly causes a binding loop, because setting the width affects the childrenRect - var children_width = UM.Theme.getSize("default_margin").width; - for (var index in children) - { - var child = children[index]; - if(child.visible) - { - children_width += child.width + child.anchors.rightMargin; - } - } - return Math.min(children_width, base.width - UM.Theme.getSize("sidebar_margin").width); - } - height: saveToButton.height - anchors.bottom: parent.bottom - anchors.bottomMargin: UM.Theme.getSize("sidebar_margin").height - anchors.right: parent.right - clip: true - - Row { - id: additionalComponentsRow - anchors.top: parent.top - anchors.right: saveToButton.visible ? saveToButton.left : (prepareButton.visible ? prepareButton.left : parent.right) - anchors.rightMargin: UM.Theme.getSize("default_margin").width - - spacing: UM.Theme.getSize("default_margin").width - } - - Component.onCompleted: { - saveRow.addAdditionalComponents("saveButton") - } - - Connections { - target: CuraApplication - onAdditionalComponentsChanged: saveRow.addAdditionalComponents("saveButton") - } - - function addAdditionalComponents (areaId) { - if(areaId == "saveButton") { - for (var component in CuraApplication.additionalComponents["saveButton"]) { - CuraApplication.additionalComponents["saveButton"][component].parent = additionalComponentsRow - } - } - } - - Connections { - target: UM.Preferences - onPreferenceChanged: - { - var autoSlice = UM.Preferences.getValue("general/auto_slice"); - prepareButton.autoSlice = autoSlice; - saveToButton.autoSlice = autoSlice; - } - } - - // Prepare button, only shows if auto_slice is off - Button { - id: prepareButton - - tooltip: [1, 5].indexOf(base.backendState) != -1 ? catalog.i18nc("@info:tooltip","Slice current printjob") : catalog.i18nc("@info:tooltip","Cancel slicing process") - // 1 = not started, 2 = Processing - enabled: base.backendState != "undefined" && ([1, 2].indexOf(base.backendState) != -1) && base.activity - visible: base.backendState != "undefined" && !autoSlice && ([1, 2, 4].indexOf(base.backendState) != -1) && base.activity - property bool autoSlice - height: UM.Theme.getSize("save_button_save_to_button").height - - anchors.top: parent.top - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - - // 1 = not started, 4 = error, 5 = disabled - text: [1, 4, 5].indexOf(base.backendState) != -1 ? catalog.i18nc("@label:Printjob", "Prepare") : catalog.i18nc("@label:Printjob", "Cancel") - onClicked: - { - sliceOrStopSlicing(); - } - - style: ButtonStyle { - background: Rectangle - { - border.width: UM.Theme.getSize("default_lining").width - border.color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_border"); - else if(control.pressed) - return UM.Theme.getColor("action_button_active_border"); - else if(control.hovered) - return UM.Theme.getColor("action_button_hovered_border"); - else - return UM.Theme.getColor("action_button_border"); - } - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled"); - else if(control.pressed) - return UM.Theme.getColor("action_button_active"); - else if(control.hovered) - return UM.Theme.getColor("action_button_hovered"); - else - return UM.Theme.getColor("action_button"); - } - - Behavior on color { ColorAnimation { duration: 50; } } - - implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("sidebar_margin").width * 2) - - Label { - id: actualLabel - anchors.centerIn: parent - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_text"); - else if(control.pressed) - return UM.Theme.getColor("action_button_active_text"); - else if(control.hovered) - return UM.Theme.getColor("action_button_hovered_text"); - else - return UM.Theme.getColor("action_button_text"); - } - font: UM.Theme.getFont("action_button") - text: control.text; - } - } - label: Item { } - } - } - - Button { - id: saveToButton - - tooltip: UM.OutputDeviceManager.activeDeviceDescription; - // 3 = done, 5 = disabled - enabled: base.backendState != "undefined" && (base.backendState == 3 || base.backendState == 5) && base.activity == true - visible: base.backendState != "undefined" && autoSlice || ((base.backendState == 3 || base.backendState == 5) && base.activity == true) - property bool autoSlice - height: UM.Theme.getSize("save_button_save_to_button").height - - anchors.top: parent.top - anchors.right: deviceSelectionMenu.visible ? deviceSelectionMenu.left : parent.right - anchors.rightMargin: deviceSelectionMenu.visible ? -3 * UM.Theme.getSize("default_lining").width : UM.Theme.getSize("sidebar_margin").width - - text: UM.OutputDeviceManager.activeDeviceShortDescription - onClicked: - { - forceActiveFocus(); - UM.OutputDeviceManager.requestWriteToDevice(UM.OutputDeviceManager.activeDevice, PrintInformation.jobName, { "filter_by_machine": true, "preferred_mimetype":Printer.preferredOutputMimetype }); - } - - style: ButtonStyle { - background: Rectangle - { - border.width: UM.Theme.getSize("default_lining").width - border.color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_border"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_pressed_border"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_hovered_border"); - else - return UM.Theme.getColor("print_button_ready_border"); - } - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_pressed"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_hovered"); - else - return UM.Theme.getColor("print_button_ready"); - } - - Behavior on color { ColorAnimation { duration: 50; } } - - implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("sidebar_margin").width * 2) - - Label { - id: actualLabel - anchors.centerIn: parent - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_text"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_text"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_text"); - else - return UM.Theme.getColor("print_button_ready_text"); - } - font: UM.Theme.getFont("action_button") - text: control.text; - } - } - label: Item { } - } - } - - Button { - id: deviceSelectionMenu - tooltip: catalog.i18nc("@info:tooltip","Select the active output device"); - anchors.top: parent.top - anchors.right: parent.right - - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - width: UM.Theme.getSize("save_button_save_to_button").height - height: UM.Theme.getSize("save_button_save_to_button").height - // 3 = Done, 5 = Disabled - enabled: base.backendState != "undefined" && (base.backendState == 3 || base.backendState == 5) && base.activity == true - visible: base.backendState != "undefined" && (devicesModel.deviceCount > 1) && (base.backendState == 3 || base.backendState == 5) && base.activity == true - - - style: ButtonStyle { - background: Rectangle { - id: deviceSelectionIcon - border.width: UM.Theme.getSize("default_lining").width - border.color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_border"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_pressed_border"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_hovered_border"); - else - return UM.Theme.getColor("print_button_ready_border"); - } - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_pressed"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_hovered"); - else - return UM.Theme.getColor("print_button_ready"); - } - Behavior on color { ColorAnimation { duration: 50; } } - anchors.left: parent.left - anchors.leftMargin: Math.round(UM.Theme.getSize("save_button_text_margin").width / 2); - width: parent.height - height: parent.height - - UM.RecolorImage { - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: height - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_text"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_text"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_text"); - else - return UM.Theme.getColor("print_button_ready_text"); - } - source: UM.Theme.getIcon("arrow_bottom"); - } - } - label: Label{ } - } - - menu: Menu { - id: devicesMenu; - Instantiator { - model: devicesModel; - MenuItem { - text: model.description - checkable: true; - checked: model.id == UM.OutputDeviceManager.activeDevice; - exclusiveGroup: devicesMenuGroup; - onTriggered: { - UM.OutputDeviceManager.setActiveDevice(model.id); - } - } - onObjectAdded: devicesMenu.insertItem(index, object) - onObjectRemoved: devicesMenu.removeItem(object) - } - ExclusiveGroup { id: devicesMenuGroup; } - } - } - UM.OutputDevicesModel { id: devicesModel; } - } -} diff --git a/resources/qml/SecondaryButton.qml b/resources/qml/SecondaryButton.qml new file mode 100644 index 0000000000..f03d8acdfa --- /dev/null +++ b/resources/qml/SecondaryButton.qml @@ -0,0 +1,20 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 + +import UM 1.4 as UM +import Cura 1.1 as Cura + + +Cura.ActionButton +{ + shadowEnabled: true + shadowColor: enabled ? UM.Theme.getColor("secondary_button_shadow"): UM.Theme.getColor("action_button_disabled_shadow") + color: UM.Theme.getColor("secondary_button") + textColor: UM.Theme.getColor("secondary_button_text") + outlineColor: "transparent" + disabledColor: UM.Theme.getColor("action_button_disabled") + textDisabledColor: UM.Theme.getColor("action_button_disabled_text") + hoverColor: UM.Theme.getColor("secondary_button_hover") +} \ No newline at end of file diff --git a/resources/qml/Settings/SettingCategory.qml b/resources/qml/Settings/SettingCategory.qml index 419285d893..18c5820832 100644 --- a/resources/qml/Settings/SettingCategory.qml +++ b/resources/qml/Settings/SettingCategory.qml @@ -12,46 +12,39 @@ Button id: base anchors.left: parent.left anchors.right: parent.right - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width + // To avoid overlaping with the scrollBars + anchors.rightMargin: 2 * UM.Theme.getSize("thin_margin").width + hoverEnabled: true + background: Rectangle { + id: backgroundRectangle implicitHeight: UM.Theme.getSize("section").height - color: { - if (base.color) { - return base.color; - } else if (!base.enabled) { - return UM.Theme.getColor("setting_category_disabled"); - } else if (base.hovered && base.checkable && base.checked) { - return UM.Theme.getColor("setting_category_active_hover"); - } else if (base.pressed || (base.checkable && base.checked)) { - return UM.Theme.getColor("setting_category_active"); - } else if (base.hovered) { - return UM.Theme.getColor("setting_category_hover"); - } else { - return UM.Theme.getColor("setting_category"); + color: + { + if (base.color) + { + return base.color } + else if (!base.enabled) + { + return UM.Theme.getColor("setting_category_disabled") + } + else if (base.hovered && base.checkable && base.checked) + { + return UM.Theme.getColor("setting_category_active_hover") + } + else if (base.pressed || (base.checkable && base.checked)) + { + return UM.Theme.getColor("setting_category_active") + } + else if (base.hovered) + { + return UM.Theme.getColor("setting_category_hover") + } + return UM.Theme.getColor("setting_category") } Behavior on color { ColorAnimation { duration: 50; } } - Rectangle - { - height: UM.Theme.getSize("default_lining").height - width: parent.width - anchors.bottom: parent.bottom - color: { - if (!base.enabled) { - return UM.Theme.getColor("setting_category_disabled_border"); - } else if ((base.hovered || base.activeFocus) && base.checkable && base.checked) { - return UM.Theme.getColor("setting_category_active_hover_border"); - } else if (base.pressed || (base.checkable && base.checked)) { - return UM.Theme.getColor("setting_category_active_border"); - } else if (base.hovered || base.activeFocus) { - return UM.Theme.getColor("setting_category_hover_border"); - } else { - return UM.Theme.getColor("setting_category_border"); - } - } - } } signal showTooltip(string text) @@ -63,38 +56,47 @@ Button property var focusItem: base - contentItem: Item { + contentItem: Item + { anchors.fill: parent - anchors.left: parent.left - Label { + Label + { + id: settingNameLabel anchors { left: parent.left leftMargin: 2 * UM.Theme.getSize("default_margin").width + UM.Theme.getSize("section_icon").width - right: parent.right; - verticalCenter: parent.verticalCenter; + right: parent.right + verticalCenter: parent.verticalCenter } text: definition.label + textFormat: Text.PlainText renderType: Text.NativeRendering - font: UM.Theme.getFont("setting_category") + font: UM.Theme.getFont("medium_bold") color: { - if (!base.enabled) { - return UM.Theme.getColor("setting_category_disabled_text"); - } else if ((base.hovered || base.activeFocus) && base.checkable && base.checked) { - return UM.Theme.getColor("setting_category_active_hover_text"); - } else if (base.pressed || (base.checkable && base.checked)) { - return UM.Theme.getColor("setting_category_active_text"); - } else if (base.hovered || base.activeFocus) { - return UM.Theme.getColor("setting_category_hover_text"); - } else { - return UM.Theme.getColor("setting_category_text"); + if (!base.enabled) + { + return UM.Theme.getColor("setting_category_disabled_text") + } else if ((base.hovered || base.activeFocus) && base.checkable && base.checked) + { + return UM.Theme.getColor("setting_category_active_hover_text") + } else if (base.pressed || (base.checkable && base.checked)) + { + return UM.Theme.getColor("setting_category_active_text") + } else if (base.hovered || base.activeFocus) + { + return UM.Theme.getColor("setting_category_hover_text") + } else + { + return UM.Theme.getColor("setting_category_text") } } fontSizeMode: Text.HorizontalFit minimumPointSize: 8 } + UM.RecolorImage { id: category_arrow @@ -103,22 +105,8 @@ Button anchors.rightMargin: UM.Theme.getSize("default_margin").width width: UM.Theme.getSize("standard_arrow").width height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width sourceSize.height: width - color: - { - if (!base.enabled) { - return UM.Theme.getColor("setting_category_disabled_text"); - } else if ((base.hovered || base.activeFocus) && base.checkable && base.checked) { - return UM.Theme.getColor("setting_category_active_hover_text"); - } else if (base.pressed || (base.checkable && base.checked)) { - return UM.Theme.getColor("setting_category_active_text"); - } else if (base.hovered || base.activeFocus) { - return UM.Theme.getColor("setting_category_hover_text"); - } else { - return UM.Theme.getColor("setting_category_text"); - } - } + color: UM.Theme.getColor("setting_control_button") source: base.checked ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") } } @@ -128,24 +116,30 @@ Button id: icon anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.leftMargin: UM.Theme.getSize("thin_margin").width color: { - if (!base.enabled) { - return UM.Theme.getColor("setting_category_disabled_text"); - } else if((base.hovered || base.activeFocus) && base.checkable && base.checked) { - return UM.Theme.getColor("setting_category_active_hover_text"); - } else if(base.pressed || (base.checkable && base.checked)) { - return UM.Theme.getColor("setting_category_active_text"); - } else if(base.hovered || base.activeFocus) { - return UM.Theme.getColor("setting_category_hover_text"); - } else { - return UM.Theme.getColor("setting_category_text"); + if (!base.enabled) + { + return UM.Theme.getColor("setting_category_disabled_text") } + else if((base.hovered || base.activeFocus) && base.checkable && base.checked) + { + return UM.Theme.getColor("setting_category_active_hover_text") + } + else if(base.pressed || (base.checkable && base.checked)) + { + return UM.Theme.getColor("setting_category_active_text") + } + else if(base.hovered || base.activeFocus) + { + return UM.Theme.getColor("setting_category_hover_text") + } + return UM.Theme.getColor("setting_category_text") } source: UM.Theme.getIcon(definition.icon) - width: UM.Theme.getSize("section_icon").width; - height: UM.Theme.getSize("section_icon").height; + width: UM.Theme.getSize("section_icon").width + height: UM.Theme.getSize("section_icon").height sourceSize.width: width + 15 * screenScaleFactor sourceSize.height: width + 15 * screenScaleFactor } @@ -155,31 +149,28 @@ Button onClicked: { - if (definition.expanded) { - settingDefinitionsModel.collapse(definition.key); - } else { - settingDefinitionsModel.expandRecursive(definition.key); + if (definition.expanded) + { + settingDefinitionsModel.collapse(definition.key) + } + else + { + settingDefinitionsModel.expandRecursive(definition.key) } //Set focus so that tab navigation continues from this point on. //NB: This must be set AFTER collapsing/expanding the category so that the scroll position is correct. - forceActiveFocus(); + forceActiveFocus() } onActiveFocusChanged: { - if(activeFocus) + if (activeFocus) { - base.focusReceived(); + base.focusReceived() } } - Keys.onTabPressed: - { - base.setActiveFocusToNextSetting(true) - } - Keys.onBacktabPressed: - { - base.setActiveFocusToNextSetting(false) - } + Keys.onTabPressed: base.setActiveFocusToNextSetting(true) + Keys.onBacktabPressed: base.setActiveFocusToNextSetting(false) UM.SimpleButton { @@ -189,9 +180,10 @@ Button height: Math.round(base.height * 0.6) width: Math.round(base.height * 0.6) - anchors { + anchors + { right: inheritButton.visible ? inheritButton.left : parent.right - // use 1.9 as the factor because there is a 0.1 difference between the settings and inheritance warning icons + // Use 1.9 as the factor because there is a 0.1 difference between the settings and inheritance warning icons rightMargin: inheritButton.visible ? Math.round(UM.Theme.getSize("default_margin").width / 2) : category_arrow.width + Math.round(UM.Theme.getSize("default_margin").width * 1.9) verticalCenter: parent.verticalCenter } @@ -200,9 +192,7 @@ Button hoverColor: UM.Theme.getColor("setting_control_button_hover") iconSource: UM.Theme.getIcon("settings") - onClicked: { - Cura.Actions.configureSettingVisibility.trigger(definition) - } + onClicked: Cura.Actions.configureSettingVisibility.trigger(definition) } UM.SimpleButton @@ -235,25 +225,17 @@ Button onClicked: { - settingDefinitionsModel.expandRecursive(definition.key); - base.checked = true; - base.showAllHiddenInheritedSettings(definition.key); + settingDefinitionsModel.expandRecursive(definition.key) + base.checked = true + base.showAllHiddenInheritedSettings(definition.key) } color: UM.Theme.getColor("setting_control_button") hoverColor: UM.Theme.getColor("setting_control_button_hover") iconSource: UM.Theme.getIcon("notice") - onEntered: - { - base.showTooltip(catalog.i18nc("@label","Some hidden settings use values different from their normal calculated value.\n\nClick to make these settings visible.")) - } + onEntered: base.showTooltip(catalog.i18nc("@label","Some hidden settings use values different from their normal calculated value.\n\nClick to make these settings visible.")) - onExited: - { - base.hideTooltip(); - } - - UM.I18nCatalog { id: catalog; name: "cura" } + onExited: base.hideTooltip() } } diff --git a/resources/qml/Settings/SettingCheckBox.qml b/resources/qml/Settings/SettingCheckBox.qml index d37754d27c..0c7321d08a 100644 --- a/resources/qml/Settings/SettingCheckBox.qml +++ b/resources/qml/Settings/SettingCheckBox.qml @@ -28,37 +28,40 @@ SettingItem // 3: material -> user changed material in materials page // 4: variant // 5: machine - var value; - if ((base.resolve != "None") && (stackLevel != 0) && (stackLevel != 1)) { + var value + if ((base.resolve != "None") && (stackLevel != 0) && (stackLevel != 1)) + { // We have a resolve function. Indicates that the setting is not settable per extruder and that // we have to choose between the resolved value (default) and the global value // (if user has explicitly set this). - value = base.resolve; - } else { - value = propertyProvider.properties.value; + value = base.resolve + } + else + { + value = propertyProvider.properties.value } switch(value) { case "True": - return true; + return true case "False": - return false; + return false default: - return value; + return value } } Keys.onSpacePressed: { - forceActiveFocus(); - propertyProvider.setPropertyValue("value", !checked); + forceActiveFocus() + propertyProvider.setPropertyValue("value", !checked) } onClicked: { - forceActiveFocus(); - propertyProvider.setPropertyValue("value", !checked); + forceActiveFocus() + propertyProvider.setPropertyValue("value", !checked) } Keys.onTabPressed: @@ -72,9 +75,9 @@ SettingItem onActiveFocusChanged: { - if(activeFocus) + if (activeFocus) { - base.focusReceived(); + base.focusReceived() } } @@ -90,37 +93,38 @@ SettingItem color: { - if(!enabled) + if (!enabled) { return UM.Theme.getColor("setting_control_disabled") } - if(control.containsMouse || control.activeFocus) + if (control.containsMouse || control.activeFocus) { return UM.Theme.getColor("setting_control_highlight") } return UM.Theme.getColor("setting_control") } + radius: UM.Theme.getSize("setting_control_radius").width border.width: UM.Theme.getSize("default_lining").width border.color: { - if(!enabled) + if (!enabled) { return UM.Theme.getColor("setting_control_disabled_border") } - if(control.containsMouse || control.activeFocus) + if (control.containsMouse || control.activeFocus) { return UM.Theme.getColor("setting_control_border_highlight") } return UM.Theme.getColor("setting_control_border") } - UM.RecolorImage { + UM.RecolorImage + { anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter width: Math.round(parent.width / 2.5) height: Math.round(parent.height / 2.5) - sourceSize.width: width sourceSize.height: width color: !enabled ? UM.Theme.getColor("setting_control_disabled_text") : UM.Theme.getColor("setting_control_text"); source: UM.Theme.getIcon("check") diff --git a/resources/qml/Settings/SettingComboBox.qml b/resources/qml/Settings/SettingComboBox.qml index 5d283d5ebb..768872d2f7 100644 --- a/resources/qml/Settings/SettingComboBox.qml +++ b/resources/qml/Settings/SettingComboBox.qml @@ -1,5 +1,5 @@ -// Copyright (c) 2015 Ultimaker B.V. -// Uranium is released under the terms of the LGPLv3 or higher. +// Copyright (c) 2019 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 import QtQuick.Controls 2.0 @@ -24,25 +24,30 @@ SettingItem { color: { - if (!enabled) { + if (!enabled) + { return UM.Theme.getColor("setting_control_disabled") } - if (control.hovered || control.activeFocus) { + if (control.hovered || control.activeFocus) + { return UM.Theme.getColor("setting_control_highlight") } return UM.Theme.getColor("setting_control") } + radius: UM.Theme.getSize("setting_control_radius").width border.width: UM.Theme.getSize("default_lining").width border.color: { - if (!enabled) { + if (!enabled) + { return UM.Theme.getColor("setting_control_disabled_border") } - if (control.hovered || control.activeFocus) { + if (control.hovered || control.activeFocus) + { return UM.Theme.getColor("setting_control_border_highlight") } @@ -62,7 +67,7 @@ SettingItem sourceSize.width: width + 5 * screenScaleFactor sourceSize.height: width + 5 * screenScaleFactor - color: UM.Theme.getColor("setting_control_text") + color: UM.Theme.getColor("setting_control_button") } contentItem: Label @@ -73,6 +78,7 @@ SettingItem anchors.right: downArrow.left text: control.currentText + textFormat: Text.PlainText renderType: Text.NativeRendering font: UM.Theme.getFont("default") color: !enabled ? UM.Theme.getColor("setting_control_disabled_text") : UM.Theme.getColor("setting_control_text") @@ -80,13 +86,15 @@ SettingItem verticalAlignment: Text.AlignVCenter } - popup: Popup { + popup: Popup + { y: control.height - UM.Theme.getSize("default_lining").height width: control.width implicitHeight: contentItem.implicitHeight + 2 * UM.Theme.getSize("default_lining").width padding: UM.Theme.getSize("default_lining").width - contentItem: ListView { + contentItem: ListView + { clip: true implicitHeight: contentHeight model: control.popup.visible ? control.delegateModel : null @@ -95,7 +103,8 @@ SettingItem ScrollIndicator.vertical: ScrollIndicator { } } - background: Rectangle { + background: Rectangle + { color: UM.Theme.getColor("setting_control") border.color: UM.Theme.getColor("setting_control_border") } @@ -115,6 +124,7 @@ SettingItem anchors.rightMargin: UM.Theme.getSize("setting_unit_margin").width text: modelData.value + textFormat: Text.PlainText renderType: Text.NativeRendering color: control.contentItem.color font: UM.Theme.getFont("default") @@ -161,19 +171,23 @@ SettingItem { // FIXME this needs to go away once 'resolve' is combined with 'value' in our data model. var value = undefined; - if ((base.resolve != "None") && (base.stackLevel != 0) && (base.stackLevel != 1)) { + if ((base.resolve != "None") && (base.stackLevel != 0) && (base.stackLevel != 1)) + { // We have a resolve function. Indicates that the setting is not settable per extruder and that // we have to choose between the resolved value (default) and the global value // (if user has explicitly set this). value = base.resolve; } - if (value == undefined) { + if (value == undefined) + { value = propertyProvider.properties.value; } - for(var i = 0; i < control.model.length; ++i) { - if(control.model[i].key == value) { + for(var i = 0; i < control.model.length; ++i) + { + if(control.model[i].key == value) + { return i; } } diff --git a/resources/qml/Settings/SettingExtruder.qml b/resources/qml/Settings/SettingExtruder.qml index 4c00a60d0e..7162744ae5 100644 --- a/resources/qml/Settings/SettingExtruder.qml +++ b/resources/qml/Settings/SettingExtruder.qml @@ -17,10 +17,16 @@ SettingItem id: control anchors.fill: parent - model: Cura.ExtrudersModel + property var extrudersModel: CuraApplication.getExtrudersModel() + + model: extrudersModel + + Connections { - onModelChanged: { - control.color = getItem(control.currentIndex).color; + target: extrudersModel + onModelChanged: + { + control.color = extrudersModel.getItem(control.currentIndex).color } } @@ -104,7 +110,7 @@ SettingItem sourceSize.width: width + 5 * screenScaleFactor sourceSize.height: width + 5 * screenScaleFactor - color: UM.Theme.getColor("setting_control_text"); + color: UM.Theme.getColor("setting_control_button"); } background: Rectangle @@ -113,14 +119,15 @@ SettingItem { if (!enabled) { - return UM.Theme.getColor("setting_control_disabled"); + return UM.Theme.getColor("setting_control_disabled") } if (control.hovered || base.activeFocus) { - return UM.Theme.getColor("setting_control_highlight"); + return UM.Theme.getColor("setting_control_highlight") } - return UM.Theme.getColor("setting_control"); + return UM.Theme.getColor("setting_control") } + radius: UM.Theme.getSize("setting_control_radius").width border.width: UM.Theme.getSize("default_lining").width border.color: { @@ -145,6 +152,7 @@ SettingItem rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width text: control.currentText + textFormat: Text.PlainText renderType: Text.NativeRendering font: UM.Theme.getFont("default") color: enabled ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_disabled_text") @@ -152,31 +160,31 @@ SettingItem elide: Text.ElideLeft verticalAlignment: Text.AlignVCenter - background: Rectangle + background: UM.RecolorImage { id: swatch - height: Math.round(UM.Theme.getSize("setting_control").height / 2) + height: Math.round(parent.height / 2) width: height - anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - anchors.margins: Math.round(UM.Theme.getSize("default_margin").width / 4) - - border.width: UM.Theme.getSize("default_lining").width - border.color: enabled ? UM.Theme.getColor("setting_control_border") : UM.Theme.getColor("setting_control_disabled_border") - radius: Math.round(width / 2) + anchors.rightMargin: UM.Theme.getSize("thin_margin").width + sourceSize.width: width + sourceSize.height: height + source: UM.Theme.getIcon("extruder_button") color: control.color } } - popup: Popup { + popup: Popup + { y: control.height - UM.Theme.getSize("default_lining").height width: control.width implicitHeight: contentItem.implicitHeight + 2 * UM.Theme.getSize("default_lining").width padding: UM.Theme.getSize("default_lining").width - contentItem: ListView { + contentItem: ListView + { clip: true implicitHeight: contentHeight model: control.popup.visible ? control.delegateModel : null @@ -185,7 +193,8 @@ SettingItem ScrollIndicator.vertical: ScrollIndicator { } } - background: Rectangle { + background: Rectangle + { color: UM.Theme.getColor("setting_control") border.color: UM.Theme.getColor("setting_control_border") } @@ -207,9 +216,11 @@ SettingItem renderType: Text.NativeRendering color: { - if (model.enabled) { + if (model.enabled) + { UM.Theme.getColor("setting_control_text") - } else { + } else + { UM.Theme.getColor("action_button_disabled_text"); } } @@ -218,20 +229,18 @@ SettingItem verticalAlignment: Text.AlignVCenter rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width - background: Rectangle + background: UM.RecolorImage { id: swatch - height: Math.round(UM.Theme.getSize("setting_control").height / 2) + height: Math.round(parent.height / 2) width: height - anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - anchors.margins: Math.round(UM.Theme.getSize("default_margin").width / 4) - - border.width: UM.Theme.getSize("default_lining").width - border.color: enabled ? UM.Theme.getColor("setting_control_border") : UM.Theme.getColor("setting_control_disabled_border") - radius: Math.round(width / 2) + anchors.rightMargin: UM.Theme.getSize("thin_margin").width + sourceSize.width: width + sourceSize.height: height + source: UM.Theme.getIcon("extruder_button") color: control.model.getItem(index).color } } diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index 48b3cd306d..6bfcd66557 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -10,10 +10,15 @@ import Cura 1.0 as Cura import "." -Item { - id: base; +Item +{ + id: base height: UM.Theme.getSize("section").height + anchors.left: parent.left + anchors.right: parent.right + // To avoid overlaping with the scrollBars + anchors.rightMargin: 2 * UM.Theme.getSize("thin_margin").width property alias contents: controlContainer.children property alias hovered: mouse.containsMouse @@ -23,11 +28,12 @@ Item { property var showLinkedSettingIcon: true property var doDepthIndentation: true property var doQualityUserSettingEmphasis: true + property var settingKey: definition.key //Used to detect each individual setting more easily in Squish GUI tests. // Create properties to put property provider stuff in (bindings break in qt 5.5.1 otherwise) property var state: propertyProvider.properties.state // There is no resolve property if there is only one stack. - property var resolve: Cura.MachineManager.activeStackId != Cura.MachineManager.activeMachineId ? propertyProvider.properties.resolve : "None" + property var resolve: Cura.MachineManager.activeStackId !== Cura.MachineManager.activeMachineId ? propertyProvider.properties.resolve : "None" property var stackLevels: propertyProvider.stackLevels property var stackLevel: stackLevels[0] @@ -43,25 +49,25 @@ Item { var affected_by = settingDefinitionsModel.getRequires(definition.key, "value") var affected_by_list = "" - for(var i in affected_by) + for (var i in affected_by) { affected_by_list += "
  • %1
  • \n".arg(affected_by[i].label) } var affects_list = "" - for(var i in affects) + for (var i in affects) { affects_list += "
  • %1
  • \n".arg(affects[i].label) } var tooltip = "%1\n

    %2

    ".arg(definition.label).arg(definition.description) - if(affects_list != "") + if (affects_list != "") { tooltip += "
    %1\n
      \n%2
    ".arg(catalog.i18nc("@label Header for list of settings.", "Affects")).arg(affects_list) } - if(affected_by_list != "") + if (affected_by_list != "") { tooltip += "
    %1\n
      \n%2
    ".arg(catalog.i18nc("@label Header for list of settings.", "Affected By")).arg(affected_by_list) } @@ -71,52 +77,57 @@ Item { MouseArea { - id: mouse; + id: mouse - anchors.fill: parent; + anchors.fill: parent - acceptedButtons: Qt.RightButton; + acceptedButtons: Qt.RightButton hoverEnabled: true; - onClicked: base.contextMenuRequested(); + onClicked: base.contextMenuRequested() - onEntered: { - hoverTimer.start(); + onEntered: + { + hoverTimer.start() } - onExited: { - if(controlContainer.item && controlContainer.item.hovered) { - return; + onExited: + { + if (controlContainer.item && controlContainer.item.hovered) + { + return } - hoverTimer.stop(); - base.hideTooltip(); + hoverTimer.stop() + base.hideTooltip() } - Timer { - id: hoverTimer; - interval: 500; - repeat: false; + Timer + { + id: hoverTimer + interval: 500 + repeat: false onTriggered: { - base.showTooltip(base.tooltipText); + base.showTooltip(base.tooltipText) } } Label { - id: label; + id: label - anchors.left: parent.left; - anchors.leftMargin: doDepthIndentation ? Math.round((UM.Theme.getSize("section_icon_column").width + 5) + ((definition.depth - 1) * UM.Theme.getSize("setting_control_depth_margin").width)) : 0 - anchors.right: settingControls.left; + anchors.left: parent.left + anchors.leftMargin: doDepthIndentation ? Math.round(UM.Theme.getSize("thin_margin").width + ((definition.depth - 1) * UM.Theme.getSize("setting_control_depth_margin").width)) : 0 + anchors.right: settingControls.left anchors.verticalCenter: parent.verticalCenter text: definition.label - elide: Text.ElideMiddle; + elide: Text.ElideMiddle renderType: Text.NativeRendering + textFormat: Text.PlainText - color: UM.Theme.getColor("setting_control_text"); + color: UM.Theme.getColor("setting_control_text") opacity: (definition.visible) ? 1 : 0.5 // emphasize the setting if it has a value in the user or quality profile font: base.doQualityUserSettingEmphasis && base.stackLevel != undefined && base.stackLevel <= 1 ? UM.Theme.getFont("default_italic") : UM.Theme.getFont("default") @@ -127,11 +138,12 @@ Item { id: settingControls height: Math.round(parent.height / 2) - spacing: Math.round(UM.Theme.getSize("sidebar_margin").height / 2) + spacing: Math.round(UM.Theme.getSize("thick_margin").height / 2) - anchors { + anchors + { right: controlContainer.left - rightMargin: Math.round(UM.Theme.getSize("sidebar_margin").width / 2) + rightMargin: Math.round(UM.Theme.getSize("thick_margin").width / 2) verticalCenter: parent.verticalCenter } @@ -139,7 +151,7 @@ Item { { id: linkedSettingIcon; - visible: Cura.MachineManager.activeStackId != Cura.MachineManager.activeMachineId && (!definition.settable_per_extruder || String(globalPropertyProvider.properties.limit_to_extruder) != "-1") && base.showLinkedSettingIcon + visible: Cura.MachineManager.activeStack != Cura.MachineManager.activeMachine && (!definition.settable_per_extruder || String(globalPropertyProvider.properties.limit_to_extruder) != "-1") && base.showLinkedSettingIcon height: parent.height; width: height; @@ -149,123 +161,128 @@ Item { iconSource: UM.Theme.getIcon("link") - onEntered: { - hoverTimer.stop(); - var tooltipText = catalog.i18nc("@label", "This setting is always shared between all extruders. Changing it here will change the value for all extruders."); - if ((resolve != "None") && (stackLevel != 0)) { + onEntered: + { + hoverTimer.stop() + var tooltipText = catalog.i18nc("@label", "This setting is always shared between all extruders. Changing it here will change the value for all extruders.") + if ((resolve != "None") && (stackLevel != 0)) + { // We come here if a setting has a resolve and the setting is not manually edited. - tooltipText += " " + catalog.i18nc("@label", "The value is resolved from per-extruder values ") + "[" + Cura.ExtruderManager.getInstanceExtruderValues(definition.key) + "]."; + tooltipText += " " + catalog.i18nc("@label", "The value is resolved from per-extruder values ") + "[" + Cura.ExtruderManager.getInstanceExtruderValues(definition.key) + "]." } - base.showTooltip(tooltipText); + base.showTooltip(tooltipText) } - onExited: base.showTooltip(base.tooltipText); + onExited: base.showTooltip(base.tooltipText) } UM.SimpleButton { - id: revertButton; + id: revertButton visible: base.stackLevel == 0 && base.showRevertButton - height: parent.height; - width: height; + height: parent.height + width: height color: UM.Theme.getColor("setting_control_button") hoverColor: UM.Theme.getColor("setting_control_button_hover") iconSource: UM.Theme.getIcon("reset") - onClicked: { + onClicked: + { revertButton.focus = true - if (externalResetHandler) { + if (externalResetHandler) + { externalResetHandler(propertyProvider.key) - } else { + } + else + { Cura.MachineManager.clearUserSettingAllCurrentStacks(propertyProvider.key) } } - onEntered: { hoverTimer.stop(); base.showTooltip(catalog.i18nc("@label", "This setting has a value that is different from the profile.\n\nClick to restore the value of the profile.")) } - onExited: base.showTooltip(base.tooltipText); + onEntered: + { + hoverTimer.stop() + base.showTooltip(catalog.i18nc("@label", "This setting has a value that is different from the profile.\n\nClick to restore the value of the profile.")) + } + onExited: base.showTooltip(base.tooltipText) } UM.SimpleButton { // This button shows when the setting has an inherited function, but is overriden by profile. - id: inheritButton; + id: inheritButton // Inherit button needs to be visible if; // - User made changes that override any loaded settings // - This setting item uses inherit button at all // - The type of the value of any deeper container is an "object" (eg; is a function) visible: { - if(!base.showInheritButton) + if (!base.showInheritButton) { - return false; + return false } - if(!propertyProvider.properties.enabled) + if (!propertyProvider.properties.enabled) { // Note: This is not strictly necessary since a disabled setting is hidden anyway. // But this will cause the binding to be re-evaluated when the enabled property changes. - return false; + return false } // There are no settings with any warning. - if(Cura.SettingInheritanceManager.settingsWithInheritanceWarning.length == 0) + if (Cura.SettingInheritanceManager.settingsWithInheritanceWarning.length === 0) { - return false; + return false } // This setting has a resolve value, so an inheritance warning doesn't do anything. - if(resolve != "None") + if (resolve !== "None") { return false } // If the setting does not have a limit_to_extruder property (or is -1), use the active stack. - if(globalPropertyProvider.properties.limit_to_extruder == null || String(globalPropertyProvider.properties.limit_to_extruder) == "-1") + if (globalPropertyProvider.properties.limit_to_extruder === null || String(globalPropertyProvider.properties.limit_to_extruder) === "-1") { - return Cura.SettingInheritanceManager.settingsWithInheritanceWarning.indexOf(definition.key) >= 0; + return Cura.SettingInheritanceManager.settingsWithInheritanceWarning.indexOf(definition.key) >= 0 } // Setting does have a limit_to_extruder property, so use that one instead. if (definition.key === undefined) { // Observed when loading workspace, probably when SettingItems are removed. - return false; + return false } - return Cura.SettingInheritanceManager.getOverridesForExtruder(definition.key, String(globalPropertyProvider.properties.limit_to_extruder)).indexOf(definition.key) >= 0; + return Cura.SettingInheritanceManager.getOverridesForExtruder(definition.key, String(globalPropertyProvider.properties.limit_to_extruder)).indexOf(definition.key) >= 0 } - height: parent.height; - width: height; + height: parent.height + width: height - onClicked: { - focus = true; + onClicked: + { + focus = true // Get the most shallow function value (eg not a number) that we can find. var last_entry = propertyProvider.stackLevels[propertyProvider.stackLevels.length - 1] for (var i = 1; i < base.stackLevels.length; i++) { - var has_setting_function = typeof(propertyProvider.getPropertyValue("value", base.stackLevels[i])) == "object"; + var has_setting_function = typeof(propertyProvider.getPropertyValue("value", base.stackLevels[i])) == "object" if(has_setting_function) { last_entry = propertyProvider.stackLevels[i] - break; + break } } - if((last_entry == 4 || last_entry == 11) && base.stackLevel == 0 && base.stackLevels.length == 2) + if ((last_entry == 4 || last_entry == 11) && base.stackLevel == 0 && base.stackLevels.length == 2) { // Special case of the inherit reset. If only the definition (4th or 11th) container) and the first // entry (user container) are set, we can simply remove the container. propertyProvider.removeFromContainer(0) } - else if(last_entry - 1 == base.stackLevel) - { - // Another special case. The setting that is overriden is only 1 instance container deeper, - // so we can remove it. - propertyProvider.removeFromContainer(last_entry - 1) - } else { // Put that entry into the "top" instance container. @@ -281,26 +298,23 @@ Item { color: UM.Theme.getColor("setting_control_button") hoverColor: UM.Theme.getColor("setting_control_button_hover") - iconSource: UM.Theme.getIcon("formula"); + iconSource: UM.Theme.getIcon("formula") onEntered: { hoverTimer.stop(); base.showTooltip(catalog.i18nc("@label", "This setting is normally calculated, but it currently has an absolute value set.\n\nClick to restore the calculated value.")) } - onExited: base.showTooltip(base.tooltipText); + onExited: base.showTooltip(base.tooltipText) } } Item { - id: controlContainer; + id: controlContainer enabled: propertyProvider.isValueUsed - anchors.right: parent.right; - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - anchors.verticalCenter: parent.verticalCenter; - width: UM.Theme.getSize("setting_control").width; + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + width: UM.Theme.getSize("setting_control").width height: UM.Theme.getSize("setting_control").height } } - - UM.I18nCatalog { id: catalog; name: "cura" } } diff --git a/resources/qml/Settings/SettingOptionalExtruder.qml b/resources/qml/Settings/SettingOptionalExtruder.qml index 2d4f25125f..b73c7498ae 100644 --- a/resources/qml/Settings/SettingOptionalExtruder.qml +++ b/resources/qml/Settings/SettingOptionalExtruder.qml @@ -1,5 +1,5 @@ -// Copyright (c) 2016 Ultimaker B.V. -// Uranium is released under the terms of the LGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 import QtQuick.Controls 2.0 @@ -12,15 +12,24 @@ SettingItem id: base property var focusItem: control + // Somehow if we directory set control.model to CuraApplication.getExtrudersModelWithOptional() + // and in the Connections.onModelChanged use control.model as a reference, it will complain about + // non-existing properties such as "onModelChanged" and "getItem". I guess if we access the model + // via "control.model", it gives back a generic/abstract model instance. To avoid this, we add + // this extra property to keep the ExtrudersModel and use this in the rest of the code. + property var extrudersWithOptionalModel: CuraApplication.getExtrudersModelWithOptional() + contents: ComboBox { id: control anchors.fill: parent - model: Cura.ExtrudersModel + model: base.extrudersWithOptionalModel + + Connections { - onModelChanged: control.color = getItem(control.currentIndex).color - addOptionalExtruder: true + target: base.extrudersWithOptionalModel + onModelChanged: control.color = base.extrudersWithOptionalModel.getItem(control.currentIndex).color } textRole: "name" @@ -31,12 +40,15 @@ SettingItem { forceActiveFocus(); propertyProvider.setPropertyValue("value", model.getItem(index).index); - } else + } + else { if (propertyProvider.properties.value == -1) { - control.currentIndex = model.rowCount() - 1; // we know the last item is "Not overriden" - } else { + control.currentIndex = model.count - 1; // we know the last item is "Not overriden" + } + else + { control.currentIndex = propertyProvider.properties.value; // revert to the old value } } @@ -99,7 +111,7 @@ SettingItem sourceSize.width: width + 5 * screenScaleFactor sourceSize.height: width + 5 * screenScaleFactor - color: UM.Theme.getColor("setting_control_text"); + color: UM.Theme.getColor("setting_control_button"); } background: Rectangle @@ -116,6 +128,7 @@ SettingItem } return UM.Theme.getColor("setting_control"); } + radius: UM.Theme.getSize("setting_control_radius").width border.width: UM.Theme.getSize("default_lining").width border.color: { @@ -140,6 +153,7 @@ SettingItem rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width text: control.currentText + textFormat: Text.PlainText renderType: Text.NativeRendering font: UM.Theme.getFont("default") color: enabled ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_disabled_text") @@ -147,20 +161,18 @@ SettingItem elide: Text.ElideRight verticalAlignment: Text.AlignVCenter - background: Rectangle + background: UM.RecolorImage { id: swatch - height: Math.round(UM.Theme.getSize("setting_control").height / 2) + height: Math.round(parent.height / 2) width: height - anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - anchors.margins: Math.round(UM.Theme.getSize("default_margin").width / 4) - - border.width: UM.Theme.getSize("default_lining").width - border.color: enabled ? UM.Theme.getColor("setting_control_border") : UM.Theme.getColor("setting_control_disabled_border") - radius: Math.round(width / 2) + anchors.rightMargin: UM.Theme.getSize("thin_margin").width + sourceSize.width: width + sourceSize.height: height + source: UM.Theme.getIcon("extruder_button") color: control.color } } @@ -199,6 +211,7 @@ SettingItem anchors.rightMargin: UM.Theme.getSize("setting_unit_margin").width text: model.name + textFormat: Text.PlainText renderType: Text.NativeRendering color: { @@ -213,20 +226,18 @@ SettingItem verticalAlignment: Text.AlignVCenter rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width - background: Rectangle + background: UM.RecolorImage { id: swatch - height: Math.round(UM.Theme.getSize("setting_control").height / 2) + height: Math.round(parent.height / 2) width: height - anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - anchors.margins: Math.round(UM.Theme.getSize("default_margin").width / 4) - - border.width: UM.Theme.getSize("default_lining").width - border.color: enabled ? UM.Theme.getColor("setting_control_border") : UM.Theme.getColor("setting_control_disabled_border") - radius: Math.round(width / 2) + anchors.rightMargin: UM.Theme.getSize("thin_margin").width + sourceSize.width: width + sourceSize.height: height + source: UM.Theme.getIcon("extruder_button") color: control.model.getItem(index).color } } diff --git a/resources/qml/Settings/SettingTextField.qml b/resources/qml/Settings/SettingTextField.qml index c2c04ce36c..770ef53900 100644 --- a/resources/qml/Settings/SettingTextField.qml +++ b/resources/qml/Settings/SettingTextField.qml @@ -32,6 +32,7 @@ SettingItem anchors.fill: parent + radius: UM.Theme.getSize("setting_control_radius").width border.width: Math.round(UM.Theme.getSize("default_lining").width) border.color: { @@ -81,10 +82,10 @@ SettingItem Rectangle { - anchors.fill: parent; - anchors.margins: Math.round(UM.Theme.getSize("default_lining").width); + anchors.fill: parent + anchors.margins: Math.round(UM.Theme.getSize("default_lining").width) color: UM.Theme.getColor("setting_control_highlight") - opacity: !control.hovered ? 0 : propertyProvider.properties.validationState == "ValidatorState.Valid" ? 1.0 : 0.35; + opacity: !control.hovered ? 0 : propertyProvider.properties.validationState == "ValidatorState.Valid" ? 1.0 : 0.35 } Label @@ -94,6 +95,7 @@ SettingItem anchors.verticalCenter: parent.verticalCenter text: definition.unit + textFormat: Text.PlainText renderType: Text.NativeRendering color: UM.Theme.getColor("setting_unit") font: UM.Theme.getFont("default") @@ -144,20 +146,21 @@ SettingItem } color: !enabled ? UM.Theme.getColor("setting_control_disabled_text") : UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default"); + font: UM.Theme.getFont("default") - selectByMouse: true; + selectByMouse: true - maximumLength: (definition.type == "str" || definition.type == "[int]") ? -1 : 10; + maximumLength: (definition.type == "str" || definition.type == "[int]") ? -1 : 10 clip: true; //Hide any text that exceeds the width of the text box. - validator: RegExpValidator { regExp: (definition.type == "[int]") ? /^\[?(\s*-?[0-9]{0,9}\s*,)*(\s*-?[0-9]{0,9})\s*\]?$/ : (definition.type == "int") ? /^-?[0-9]{0,10}$/ : (definition.type == "float") ? /^-?[0-9]{0,9}[.,]?[0-9]{0,10}$/ : /^.*$/ } // definition.type property from parent loader used to disallow fractional number entry + validator: RegExpValidator { regExp: (definition.type == "[int]") ? /^\[?(\s*-?[0-9]{0,9}\s*,)*(\s*-?[0-9]{0,9})\s*\]?$/ : (definition.type == "int") ? /^-?[0-9]{0,10}$/ : (definition.type == "float") ? /^-?[0-9]{0,9}[.,]?[0-9]{0,3}$/ : /^.*$/ } // definition.type property from parent loader used to disallow fractional number entry Binding { target: input property: "text" - value: { + value: + { // Stacklevels // 0: user -> unsaved change // 1: quality changes -> saved change @@ -166,13 +169,15 @@ SettingItem // 4: variant // 5: machine_changes // 6: machine - if ((base.resolve != "None" && base.resolve) && (stackLevel != 0) && (stackLevel != 1)) { + if ((base.resolve != "None" && base.resolve) && (stackLevel != 0) && (stackLevel != 1)) + { // We have a resolve function. Indicates that the setting is not settable per extruder and that // we have to choose between the resolved value (default) and the global value // (if user has explicitly set this). - return base.resolve; - } else { - return propertyProvider.properties.value; + return base.resolve + } + else { + return propertyProvider.properties.value } } when: !input.activeFocus @@ -181,16 +186,17 @@ SettingItem MouseArea { id: mouseArea - anchors.fill: parent; + anchors.fill: parent cursorShape: Qt.IBeamCursor onPressed: { - if(!input.activeFocus) { - base.focusGainedByClick = true; - input.forceActiveFocus(); + if (!input.activeFocus) + { + base.focusGainedByClick = true + input.forceActiveFocus() } - mouse.accepted = false; + mouse.accepted = false } } } diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index e17f11bf99..972cbcdbb1 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -1,5 +1,5 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Uranium is released under the terms of the LGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 import QtQuick.Controls 1.1 @@ -13,155 +13,28 @@ import "../Menus" Item { - id: base; + id: settingsView property QtObject settingVisibilityPresetsModel: CuraApplication.getSettingVisibilityPresetsModel() property Action configureSettings property bool findingSettings - signal showTooltip(Item item, point location, string text) - signal hideTooltip() - - Item - { - id: globalProfileRow - height: UM.Theme.getSize("sidebar_setup").height - visible: !sidebar.hideSettings - - anchors - { - top: parent.top - left: parent.left - leftMargin: Math.round(UM.Theme.getSize("sidebar_margin").width) - right: parent.right - rightMargin: Math.round(UM.Theme.getSize("sidebar_margin").width) - } - - Label - { - id: globalProfileLabel - text: catalog.i18nc("@label","Profile:"); - width: Math.round(parent.width * 0.45 - UM.Theme.getSize("sidebar_margin").width - 2) - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - verticalAlignment: Text.AlignVCenter - anchors.top: parent.top - anchors.bottom: parent.bottom - } - - ToolButton - { - id: globalProfileSelection - - text: generateActiveQualityText() - enabled: !header.currentExtruderVisible || header.currentExtruderIndex > -1 - width: Math.round(parent.width * 0.55) - height: UM.Theme.getSize("setting_control").height - anchors.left: globalProfileLabel.right - anchors.right: parent.right - tooltip: Cura.MachineManager.activeQualityOrQualityChangesName - style: UM.Theme.styles.sidebar_header_button - activeFocusOnPress: true - menu: ProfileMenu { } - - function generateActiveQualityText () { - var result = Cura.MachineManager.activeQualityOrQualityChangesName; - - if (Cura.MachineManager.isActiveQualitySupported) { - if (Cura.MachineManager.activeQualityLayerHeight > 0) { - result += " " - result += " - " - result += Cura.MachineManager.activeQualityLayerHeight + "mm" - result += "" - } - } - - return result - } - - UM.SimpleButton - { - id: customisedSettings - - visible: Cura.MachineManager.hasUserSettings - height: Math.round(parent.height * 0.6) - width: Math.round(parent.height * 0.6) - - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: Math.round(UM.Theme.getSize("setting_preferences_button_margin").width - UM.Theme.getSize("sidebar_margin").width) - - color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button"); - iconSource: UM.Theme.getIcon("star"); - - onClicked: - { - forceActiveFocus(); - Cura.Actions.manageProfiles.trigger() - } - onEntered: - { - var content = catalog.i18nc("@tooltip","Some setting/override values are different from the values stored in the profile.\n\nClick to open the profile manager.") - base.showTooltip(globalProfileRow, Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), content) - } - onExited: base.hideTooltip() - } - } - } - - ToolButton - { - id: settingVisibilityMenu - - width: height - height: UM.Theme.getSize("setting_control").height - anchors - { - top: globalProfileRow.bottom - topMargin: UM.Theme.getSize("sidebar_margin").height - right: parent.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - } - style: ButtonStyle - { - background: Item { - UM.RecolorImage { - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: width - color: control.enabled ? UM.Theme.getColor("setting_category_text") : UM.Theme.getColor("setting_category_disabled_text") - source: UM.Theme.getIcon("menu") - } - } - label: Label{} - } - menu: SettingVisibilityPresetsMenu - { - onShowAllSettings: - { - definitionsModel.setAllVisible(true); - filter.updateDefinitionModel(); - } - } - } Rectangle { id: filterContainer visible: true + radius: UM.Theme.getSize("setting_control_radius").width border.width: Math.round(UM.Theme.getSize("default_lining").width) border.color: { - if(hoverMouseArea.containsMouse || clearFilterButton.containsMouse) + if (hoverMouseArea.containsMouse || clearFilterButton.containsMouse) { - return UM.Theme.getColor("setting_control_border_highlight"); + return UM.Theme.getColor("setting_control_border_highlight") } else { - return UM.Theme.getColor("setting_control_border"); + return UM.Theme.getColor("setting_control_border") } } @@ -169,16 +42,12 @@ Item anchors { - top: globalProfileRow.bottom - topMargin: UM.Theme.getSize("sidebar_margin").height + top: parent.top left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width right: settingVisibilityMenu.left - rightMargin: Math.floor(UM.Theme.getSize("default_margin").width / 2) + rightMargin: UM.Theme.getSize("default_margin").width } - height: visible ? UM.Theme.getSize("setting_control").height : 0 - Behavior on height { NumberAnimation { duration: 100 } } - + height: UM.Theme.getSize("print_setup_big_item").height Timer { id: settingsSearchTimer @@ -190,19 +59,19 @@ Item TextField { - id: filter; + id: filter height: parent.height anchors.left: parent.left anchors.right: clearFilterButton.left - anchors.rightMargin: Math.round(UM.Theme.getSize("sidebar_margin").width) + anchors.rightMargin: Math.round(UM.Theme.getSize("thick_margin").width) - placeholderText: catalog.i18nc("@label:textbox", "Search...") + placeholderText: "" + "
    " + catalog.i18nc("@label:textbox", "search settings") style: TextFieldStyle { - textColor: UM.Theme.getColor("setting_control_text"); - placeholderTextColor: UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default"); + textColor: UM.Theme.getColor("setting_control_text") + placeholderTextColor: UM.Theme.getColor("setting_filter_field") + font: UM.Theme.getFont("default_italic") background: Item {} } @@ -216,38 +85,38 @@ Item onEditingFinished: { - definitionsModel.filter = {"i18n_label": "*" + text}; - findingSettings = (text.length > 0); - if(findingSettings != lastFindingSettings) + definitionsModel.filter = {"i18n_label": "*" + text} + findingSettings = (text.length > 0) + if (findingSettings != lastFindingSettings) { - updateDefinitionModel(); - lastFindingSettings = findingSettings; + updateDefinitionModel() + lastFindingSettings = findingSettings } } Keys.onEscapePressed: { - filter.text = ""; + filter.text = "" } function updateDefinitionModel() { - if(findingSettings) + if (findingSettings) { - expandedCategories = definitionsModel.expanded.slice(); - definitionsModel.expanded = [""]; // keep categories closed while to prevent render while making settings visible one by one - definitionsModel.showAncestors = true; - definitionsModel.showAll = true; - definitionsModel.expanded = ["*"]; + expandedCategories = definitionsModel.expanded.slice() + definitionsModel.expanded = [""] // keep categories closed while to prevent render while making settings visible one by one + definitionsModel.showAncestors = true + definitionsModel.showAll = true + definitionsModel.expanded = ["*"] } else { - if(expandedCategories) + if (expandedCategories) { - definitionsModel.expanded = expandedCategories; + definitionsModel.expanded = expandedCategories } - definitionsModel.showAncestors = false; - definitionsModel.showAll = false; + definitionsModel.showAncestors = false + definitionsModel.showAll = false } } } @@ -279,41 +148,93 @@ Item onClicked: { - filter.text = ""; - filter.forceActiveFocus(); + filter.text = "" + filter.forceActiveFocus() } } } + ToolButton + { + id: settingVisibilityMenu + + anchors + { + top: filterContainer.top + bottom: filterContainer.bottom + right: parent.right + rightMargin: UM.Theme.getSize("wide_margin").width + } + + style: ButtonStyle + { + background: Item + { + UM.RecolorImage + { + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + sourceSize.width: width + sourceSize.height: height + color: control.hovered ? UM.Theme.getColor("small_button_text_hover") : UM.Theme.getColor("small_button_text") + source: UM.Theme.getIcon("menu") + } + } + label: Label {} + } + + menu: SettingVisibilityPresetsMenu + { + onShowAllSettings: + { + definitionsModel.setAllVisible(true) + filter.updateDefinitionModel() + } + } + } + + // Mouse area that gathers the scroll events to not propagate it to the main view. + MouseArea + { + anchors.fill: scrollView + acceptedButtons: Qt.AllButtons + onWheel: wheel.accepted = true + } + ScrollView { - anchors.top: filterContainer.bottom; - anchors.bottom: parent.bottom; - anchors.right: parent.right; - anchors.left: parent.left; - anchors.topMargin: filterContainer.visible ? UM.Theme.getSize("sidebar_margin").height : 0 - Behavior on anchors.topMargin { NumberAnimation { duration: 100 } } + id: scrollView + anchors + { + top: filterContainer.bottom + topMargin: UM.Theme.getSize("default_margin").height + bottom: parent.bottom + right: parent.right + left: parent.left + } - style: UM.Theme.styles.scrollview; - flickableItem.flickableDirection: Flickable.VerticalFlick; - __wheelAreaScrollSpeed: 75; // Scroll three lines in one scroll event + style: UM.Theme.styles.scrollview + flickableItem.flickableDirection: Flickable.VerticalFlick + __wheelAreaScrollSpeed: 75 // Scroll three lines in one scroll event ListView { id: contents - spacing: Math.round(UM.Theme.getSize("default_lining").height); - cacheBuffer: 1000000; // Set a large cache to effectively just cache every list item. + spacing: UM.Theme.getSize("default_lining").height + cacheBuffer: 1000000 // Set a large cache to effectively just cache every list item. model: UM.SettingDefinitionsModel { - id: definitionsModel; + id: definitionsModel containerId: Cura.MachineManager.activeDefinitionId visibilityHandler: UM.SettingPreferenceVisibilityHandler { } exclude: ["machine_settings", "command_line_settings", "infill_mesh", "infill_mesh_order", "cutting_mesh", "support_mesh", "anti_overhang_mesh"] // TODO: infill_mesh settigns are excluded hardcoded, but should be based on the fact that settable_globally, settable_per_meshgroup and settable_per_extruder are false. expanded: CuraApplication.expandedCategories onExpandedChanged: { - if(!findingSettings) + if (!findingSettings) { // Do not change expandedCategories preference while filtering settings // because all categories are expanded while filtering @@ -329,7 +250,7 @@ Item { id: delegate - width: Math.round(UM.Theme.getSize("sidebar").width); + width: scrollView.width height: provider.properties.enabled == "True" ? UM.Theme.getSize("section").height : - contents.spacing Behavior on height { NumberAnimation { duration: 100 } } opacity: provider.properties.enabled == "True" ? 1 : 0 @@ -399,17 +320,17 @@ Item // machine gets changed. var activeMachineId = Cura.MachineManager.activeMachineId; - if(!model.settable_per_extruder) + if (!model.settable_per_extruder) { //Not settable per extruder or there only is global, so we must pick global. return activeMachineId; } - if(inheritStackProvider.properties.limit_to_extruder != null && inheritStackProvider.properties.limit_to_extruder >= 0) + if (inheritStackProvider.properties.limit_to_extruder != null && inheritStackProvider.properties.limit_to_extruder >= 0) { //We have limit_to_extruder, so pick that stack. return Cura.ExtruderManager.extruderIds[String(inheritStackProvider.properties.limit_to_extruder)]; } - if(Cura.ExtruderManager.activeExtruderStackId) + if (Cura.ExtruderManager.activeExtruderStackId) { //We're on an extruder tab. Pick the current extruder. return Cura.ExtruderManager.activeExtruderStackId; @@ -450,7 +371,7 @@ Item contextMenu.provider = provider contextMenu.popup(); } - onShowTooltip: base.showTooltip(delegate, { x: -UM.Theme.getSize("default_arrow").width, y: Math.round(delegate.height / 2) }, text) + onShowTooltip: base.showTooltip(delegate, Qt.point(- settingsView.x - UM.Theme.getSize("default_margin").width, 0), text) onHideTooltip: base.hideTooltip() onShowAllHiddenInheritedSettings: { @@ -471,14 +392,14 @@ Item } onSetActiveFocusToNextSetting: { - if(forward == undefined || forward) + if (forward == undefined || forward) { contents.currentIndex = contents.indexWithFocus + 1; while(contents.currentItem && contents.currentItem.height <= 0) { contents.currentIndex++; } - if(contents.currentItem) + if (contents.currentItem) { contents.currentItem.item.focusItem.forceActiveFocus(); } @@ -490,7 +411,7 @@ Item { contents.currentIndex--; } - if(contents.currentItem) + if (contents.currentItem) { contents.currentItem.item.focusItem.forceActiveFocus(); } @@ -637,17 +558,6 @@ Item onTriggered: Cura.Actions.configureSettingVisibility.trigger(contextMenu); } - MenuSeparator {} - MenuItem - { - text: catalog.i18nc("@action:inmenu", "Collapse All") - onTriggered: definitionsModel.collapseAll() - } - MenuItem - { - text: catalog.i18nc("@action:inmenu", "Expand All") - onTriggered: definitionsModel.expandRecursive() - } } UM.SettingPropertyProvider diff --git a/resources/qml/SidebarAdvanced.qml b/resources/qml/SidebarAdvanced.qml deleted file mode 100644 index ff5f545c80..0000000000 --- a/resources/qml/SidebarAdvanced.qml +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (c) 2015 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 2.0 - -import "Settings" - -SettingView { -} diff --git a/resources/qml/SidebarContents.qml b/resources/qml/SidebarContents.qml deleted file mode 100644 index 0b19bfe3c1..0000000000 --- a/resources/qml/SidebarContents.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2016 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -StackView -{ - id: sidebarContents - - delegate: StackViewDelegate - { - function transitionFinished(properties) - { - properties.exitItem.opacity = 1 - } - - pushTransition: StackViewTransition - { - PropertyAnimation - { - target: enterItem - property: "opacity" - from: 0 - to: 1 - duration: 100 - } - PropertyAnimation - { - target: exitItem - property: "opacity" - from: 1 - to: 0 - duration: 100 - } - } - } -} \ No newline at end of file diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml deleted file mode 100644 index 6ee33dd2f2..0000000000 --- a/resources/qml/SidebarHeader.qml +++ /dev/null @@ -1,617 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -import "Menus" - -Column -{ - id: base; - - property int currentExtruderIndex: Cura.ExtruderManager.activeExtruderIndex; - property bool currentExtruderVisible: extrudersList.visible; - property bool printerConnected: Cura.MachineManager.printerConnected - property bool hasManyPrinterTypes: - { - if (printerConnected) - { - if (Cura.MachineManager.printerOutputDevices[0].connectedPrintersTypeCount != null) - { - return Cura.MachineManager.printerOutputDevices[0].connectedPrintersTypeCount.length > 1; - } - } - return false; - } - property bool buildplateCompatibilityError: !Cura.MachineManager.variantBuildplateCompatible && !Cura.MachineManager.variantBuildplateUsable - property bool buildplateCompatibilityWarning: Cura.MachineManager.variantBuildplateUsable - - spacing: Math.round(UM.Theme.getSize("sidebar_margin").width * 0.9) - - signal showTooltip(Item item, point location, string text) - signal hideTooltip() - - Item - { - id: initialSeparator - anchors - { - left: parent.left - right: parent.right - } - visible: printerTypeSelectionRow.visible || buildplateRow.visible || extruderSelectionRow.visible - height: UM.Theme.getSize("default_lining").height - width: height - } - - // Printer Type Row - Item - { - id: printerTypeSelectionRow - height: UM.Theme.getSize("sidebar_setup").height - visible: printerConnected && hasManyPrinterTypes && !sidebar.hideSettings - - anchors - { - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - right: parent.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - } - - Label - { - id: configurationLabel - text: catalog.i18nc("@label", "Printer type"); - width: Math.round(parent.width * 0.4 - UM.Theme.getSize("default_margin").width) - height: parent.height - verticalAlignment: Text.AlignVCenter - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - } - - ToolButton - { - id: printerTypeSelection - text: Cura.MachineManager.activeMachineDefinitionName - tooltip: Cura.MachineManager.activeMachineDefinitionName - height: UM.Theme.getSize("setting_control").height - width: Math.round(parent.width * 0.7) + UM.Theme.getSize("sidebar_margin").width - anchors.right: parent.right - style: UM.Theme.styles.sidebar_header_button - activeFocusOnPress: true; - - menu: PrinterTypeMenu { } - } - } - - Rectangle { - id: headerSeparator - width: parent.width - visible: printerTypeSelectionRow.visible - height: visible ? UM.Theme.getSize("sidebar_lining").height : 0 - color: UM.Theme.getColor("sidebar_lining") - } - - // Extruder Row - Item - { - id: extruderSelectionRow - width: parent.width - height: Math.round(UM.Theme.getSize("sidebar_tabs").height * 2 / 3) - visible: machineExtruderCount.properties.value > 1 - - anchors - { - left: parent.left - leftMargin: Math.round(UM.Theme.getSize("sidebar_margin").width * 0.7) - right: parent.right - rightMargin: Math.round(UM.Theme.getSize("sidebar_margin").width * 0.7) - topMargin: UM.Theme.getSize("sidebar_margin").height - } - - ListView - { - id: extrudersList - property var index: 0 - - height: UM.Theme.getSize("sidebar_header_mode_tabs").height - width: Math.round(parent.width) - boundsBehavior: Flickable.StopAtBounds - - anchors - { - left: parent.left - leftMargin: Math.round(UM.Theme.getSize("default_margin").width / 2) - right: parent.right - rightMargin: Math.round(UM.Theme.getSize("default_margin").width / 2) - verticalCenter: parent.verticalCenter - } - - ExclusiveGroup { id: extruderMenuGroup; } - - orientation: ListView.Horizontal - - model: Cura.ExtrudersModel { id: extrudersModel; } - - Connections - { - target: Cura.MachineManager - onGlobalContainerChanged: forceActiveFocus() // Changing focus applies the currently-being-typed values so it can change the displayed setting values. - } - - delegate: Button - { - height: ListView.view.height - width: Math.round(ListView.view.width / extrudersModel.rowCount()) - - text: model.name - tooltip: model.name - exclusiveGroup: extruderMenuGroup - checked: base.currentExtruderIndex == index - - property bool extruder_enabled: true - - MouseArea - { - anchors.fill: parent - acceptedButtons: Qt.LeftButton | Qt.RightButton - onClicked: { - switch (mouse.button) { - case Qt.LeftButton: - extruder_enabled = Cura.MachineManager.getExtruder(model.index).isEnabled - if (extruder_enabled) - { - forceActiveFocus(); // Changing focus applies the currently-being-typed values so it can change the displayed setting values. - Cura.ExtruderManager.setActiveExtruderIndex(index); - } - break; - case Qt.RightButton: - extruder_enabled = Cura.MachineManager.getExtruder(model.index).isEnabled - extruderMenu.popup(); - break; - } - - } - } - - Menu - { - id: extruderMenu - - MenuItem { - text: catalog.i18nc("@action:inmenu", "Enable Extruder") - onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, true) - visible: !extruder_enabled // using an intermediate variable prevents an empty popup that occured now and then - } - - MenuItem { - text: catalog.i18nc("@action:inmenu", "Disable Extruder") - onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, false) - visible: extruder_enabled - enabled: Cura.MachineManager.numberExtrudersEnabled > 1 - } - } - - style: ButtonStyle - { - background: Item - { - function buttonBackgroundColor(index) - { - var extruder = Cura.MachineManager.getExtruder(index) - if (extruder.isEnabled) { - return (control.checked || control.pressed) ? UM.Theme.getColor("action_button_active") : - control.hovered ? UM.Theme.getColor("action_button_hovered") : - UM.Theme.getColor("action_button") - } else { - return UM.Theme.getColor("action_button_disabled") - } - } - - function buttonBorderColor(index) - { - var extruder = Cura.MachineManager.getExtruder(index) - if (extruder.isEnabled) { - return (control.checked || control.pressed) ? UM.Theme.getColor("action_button_active_border") : - control.hovered ? UM.Theme.getColor("action_button_hovered_border") : - UM.Theme.getColor("action_button_border") - } else { - return UM.Theme.getColor("action_button_disabled_border") - } - } - - function buttonColor(index) { - var extruder = Cura.MachineManager.getExtruder(index); - if (extruder.isEnabled) - { - return ( - control.checked || control.pressed) ? UM.Theme.getColor("action_button_active_text") : - control.hovered ? UM.Theme.getColor("action_button_hovered_text") : - UM.Theme.getColor("action_button_text"); - } else { - return UM.Theme.getColor("action_button_disabled_text"); - } - } - - Rectangle - { - anchors.fill: parent - border.width: control.checked ? UM.Theme.getSize("default_lining").width * 2 : UM.Theme.getSize("default_lining").width - border.color: buttonBorderColor(index) - color: buttonBackgroundColor(index) - Behavior on color { ColorAnimation { duration: 50; } } - } - - Item - { - id: extruderButtonFace - anchors.centerIn: parent - - width: { - var extruderTextWidth = extruderStaticText.visible ? extruderStaticText.width : 0; - var iconWidth = extruderIconItem.width; - return Math.round(extruderTextWidth + iconWidth + UM.Theme.getSize("default_margin").width / 2); - } - - // Static text "Extruder" - Label - { - id: extruderStaticText - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - - color: buttonColor(index) - - font: UM.Theme.getFont("large_nonbold") - text: catalog.i18nc("@label", "Extruder") - visible: width < (control.width - extruderIconItem.width - UM.Theme.getSize("default_margin").width) - elide: Text.ElideRight - } - - // Everthing for the extruder icon - Item - { - id: extruderIconItem - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - - property var sizeToUse: - { - var minimumWidth = control.width < UM.Theme.getSize("button").width ? control.width : UM.Theme.getSize("button").width; - var minimumHeight = control.height < UM.Theme.getSize("button").height ? control.height : UM.Theme.getSize("button").height; - var minimumSize = minimumWidth < minimumHeight ? minimumWidth : minimumHeight; - minimumSize -= Math.round(UM.Theme.getSize("default_margin").width / 2); - return minimumSize; - } - - width: sizeToUse - height: sizeToUse - - UM.RecolorImage { - id: mainCircle - anchors.fill: parent - - sourceSize.width: parent.width - sourceSize.height: parent.width - source: UM.Theme.getIcon("extruder_button") - - color: extruderNumberText.color - } - - Label - { - id: extruderNumberText - anchors.centerIn: parent - text: index + 1; - color: buttonColor(index) - font: UM.Theme.getFont("default_bold") - } - - // Material colour circle - // Only draw the filling colour of the material inside the SVG border. - Rectangle - { - id: materialColorCircle - - anchors - { - right: parent.right - top: parent.top - rightMargin: Math.round(parent.sizeToUse * 0.01) - topMargin: Math.round(parent.sizeToUse * 0.05) - } - - color: model.color - - width: Math.round(parent.width * 0.35) - height: Math.round(parent.height * 0.35) - radius: Math.round(width / 2) - - border.width: 1 - border.color: UM.Theme.getColor("extruder_button_material_border") - - opacity: !control.checked ? 0.6 : 1.0 - } - } - } - } - label: Item {} - } - } - } - } - - Item - { - id: variantRowSpacer - height: Math.round(UM.Theme.getSize("sidebar_margin").height / 4) - width: height - visible: !extruderSelectionRow.visible && !initialSeparator.visible - } - - // Material Row - Item - { - id: materialRow - height: UM.Theme.getSize("sidebar_setup").height - visible: Cura.MachineManager.hasMaterials && !sidebar.hideSettings - - anchors - { - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - right: parent.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - } - - Label - { - id: materialLabel - text: catalog.i18nc("@label", "Material"); - width: Math.round(parent.width * 0.45 - UM.Theme.getSize("default_margin").width) - height: parent.height - verticalAlignment: Text.AlignVCenter - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - } - - ToolButton - { - id: materialSelection - - property var activeExtruder: Cura.MachineManager.activeStack - property var hasActiveExtruder: activeExtruder != null - property var currentRootMaterialName: hasActiveExtruder ? activeExtruder.material.name : "" - - text: currentRootMaterialName - tooltip: currentRootMaterialName - visible: Cura.MachineManager.hasMaterials - enabled: !extrudersList.visible || base.currentExtruderIndex > -1 - height: UM.Theme.getSize("setting_control").height - width: Math.round(parent.width * 0.7) + UM.Theme.getSize("sidebar_margin").width - anchors.right: parent.right - style: UM.Theme.styles.sidebar_header_button - activeFocusOnPress: true; - menu: MaterialMenu - { - extruderIndex: base.currentExtruderIndex - } - - property var valueError: !isMaterialSupported() - property var valueWarning: ! Cura.MachineManager.isActiveQualitySupported - - function isMaterialSupported () - { - if (!hasActiveExtruder) - { - return false; - } - return Cura.ContainerManager.getContainerMetaDataEntry(activeExtruder.material.id, "compatible", "") == "True" - } - } - } - - //Variant row - Item - { - id: variantRow - height: UM.Theme.getSize("sidebar_setup").height - visible: Cura.MachineManager.hasVariants && !sidebar.hideSettings - - anchors - { - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - right: parent.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - } - - Label - { - id: variantLabel - text: Cura.MachineManager.activeDefinitionVariantsName; - width: Math.round(parent.width * 0.45 - UM.Theme.getSize("default_margin").width) - height: parent.height - verticalAlignment: Text.AlignVCenter - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - } - - ToolButton - { - id: variantSelection - text: Cura.MachineManager.activeVariantName - tooltip: Cura.MachineManager.activeVariantName; - visible: Cura.MachineManager.hasVariants - - height: UM.Theme.getSize("setting_control").height - width: Math.round(parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width) - anchors.right: parent.right - style: UM.Theme.styles.sidebar_header_button - activeFocusOnPress: true; - - menu: NozzleMenu { extruderIndex: base.currentExtruderIndex } - } - } - - Rectangle - { - id: buildplateSeparator - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - width: parent.width - 2 * UM.Theme.getSize("sidebar_margin").width - visible: buildplateRow.visible - height: visible ? UM.Theme.getSize("sidebar_lining_thin").height : 0 - color: UM.Theme.getColor("sidebar_lining") - } - - //Buildplate row - Item - { - id: buildplateRow - height: UM.Theme.getSize("sidebar_setup").height - // TODO Only show in dev mode. Remove check when feature ready - visible: CuraSDKVersion == "dev" ? Cura.MachineManager.hasVariantBuildplates && !sidebar.hideSettings : false - - anchors - { - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - right: parent.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - } - - Label - { - id: bulidplateLabel - text: catalog.i18nc("@label", "Build plate"); - width: Math.floor(parent.width * 0.45 - UM.Theme.getSize("default_margin").width) - height: parent.height - verticalAlignment: Text.AlignVCenter - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - } - - ToolButton - { - id: buildplateSelection - text: Cura.MachineManager.activeVariantBuildplateName - tooltip: Cura.MachineManager.activeVariantBuildplateName - visible: Cura.MachineManager.hasVariantBuildplates - - height: UM.Theme.getSize("setting_control").height - width: Math.floor(parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width) - anchors.right: parent.right - style: UM.Theme.styles.sidebar_header_button - activeFocusOnPress: true; - - menu: BuildplateMenu {} - - property var valueError: !Cura.MachineManager.variantBuildplateCompatible && !Cura.MachineManager.variantBuildplateUsable - property var valueWarning: Cura.MachineManager.variantBuildplateUsable - } - } - - // Material info row - Item - { - id: materialInfoRow - height: Math.round(UM.Theme.getSize("sidebar_setup").height / 2) - visible: (Cura.MachineManager.hasVariants || Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariantBuildplates) && !sidebar.hideSettings - - anchors - { - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - right: parent.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - } - - // TODO This was added to replace the buildplate selector. Remove this component when the feature is ready - Label - { - id: materialCompatibilityLabel - y: -Math.round(UM.Theme.getSize("sidebar_margin").height / 3) - anchors.left: parent.left - width: parent.width - materialCompatibilityLink.width - text: catalog.i18nc("@label", "Use glue with this material combination") - font: UM.Theme.getFont("very_small") - color: UM.Theme.getColor("text") - visible: CuraSDKVersion == "dev" ? false : buildplateCompatibilityError || buildplateCompatibilityWarning - wrapMode: Text.WordWrap - opacity: 0.5 - } - - Item - { - id: materialCompatibilityLink - height: UM.Theme.getSize("sidebar_setup").height - anchors.right: parent.right - width: childrenRect.width + UM.Theme.getSize("default_margin").width - - UM.RecolorImage { - id: warningImage - anchors.right: materialInfoLabel.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: parent.Bottom - source: UM.Theme.getIcon("warning") - width: UM.Theme.getSize("section_icon").width - height: UM.Theme.getSize("section_icon").height - sourceSize.width: width - sourceSize.height: height - color: UM.Theme.getColor("material_compatibility_warning") - visible: !Cura.MachineManager.isCurrentSetupSupported || buildplateCompatibilityError || buildplateCompatibilityWarning - } - - Label { - id: materialInfoLabel - wrapMode: Text.WordWrap - text: "" + catalog.i18nc("@label", "Check compatibility") + "" - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - linkColor: UM.Theme.getColor("text_link") - verticalAlignment: Text.AlignTop - anchors.top: parent.top - anchors.right: parent.right - anchors.bottom: parent.bottom - - MouseArea { - anchors.fill: parent - hoverEnabled: true - onClicked: { - // open the material URL with web browser - var url = "https://ultimaker.com/incoming-links/cura/material-compatibilty" - Qt.openUrlExternally(url); - } - onEntered: { - var content = catalog.i18nc("@tooltip", "Click to check the material compatibility on Ultimaker.com."); - base.showTooltip( - materialInfoRow, - Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), - catalog.i18nc("@tooltip", content) - ); - } - onExited: base.hideTooltip(); - } - } - } - } - - UM.SettingPropertyProvider - { - id: machineExtruderCount - - containerStackId: Cura.MachineManager.activeMachineId - key: "machine_extruder_count" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.I18nCatalog { id: catalog; name:"cura" } -} diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml deleted file mode 100644 index 4b229d9807..0000000000 --- a/resources/qml/SidebarSimple.qml +++ /dev/null @@ -1,1166 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 -import QtQuick.Layouts 1.3 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -Item -{ - id: base - - signal showTooltip(Item item, point location, string text); - signal hideTooltip(); - - property Action configureSettings; - property variant minimumPrintTime: PrintInformation.minimumPrintTime; - property variant maximumPrintTime: PrintInformation.maximumPrintTime; - property bool settingsEnabled: Cura.ExtruderManager.activeExtruderStackId || extrudersEnabledCount.properties.value == 1 - - Component.onCompleted: PrintInformation.enabled = true - Component.onDestruction: PrintInformation.enabled = false - UM.I18nCatalog { id: catalog; name: "cura" } - - ScrollView - { - visible: Cura.MachineManager.activeMachineName != "" // If no printers added then the view is invisible - anchors.fill: parent - style: UM.Theme.styles.scrollview - flickableItem.flickableDirection: Flickable.VerticalFlick - - Rectangle - { - width: childrenRect.width - height: childrenRect.height - color: UM.Theme.getColor("sidebar") - - // - // Quality profile - // - Item - { - id: qualityRow - - height: UM.Theme.getSize("sidebar_margin").height - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - anchors.right: parent.right - - Timer - { - id: qualitySliderChangeTimer - interval: 50 - running: false - repeat: false - onTriggered: - { - var item = Cura.QualityProfilesDropDownMenuModel.getItem(qualitySlider.value); - Cura.MachineManager.activeQualityGroup = item.quality_group; - } - } - - Component.onCompleted: qualityModel.update() - - Connections - { - target: Cura.QualityProfilesDropDownMenuModel - onItemsChanged: qualityModel.update() - } - - Connections { - target: base - onVisibleChanged: - { - // update needs to be called when the widgets are visible, otherwise the step width calculation - // will fail because the width of an invisible item is 0. - if (visible) - { - qualityModel.update(); - } - } - } - - ListModel - { - id: qualityModel - - property var totalTicks: 0 - property var availableTotalTicks: 0 - property var existingQualityProfile: 0 - - property var qualitySliderActiveIndex: 0 - property var qualitySliderStepWidth: 0 - property var qualitySliderAvailableMin: 0 - property var qualitySliderAvailableMax: 0 - property var qualitySliderMarginRight: 0 - - function update () - { - reset() - - var availableMin = -1 - var availableMax = -1 - - for (var i = 0; i < Cura.QualityProfilesDropDownMenuModel.rowCount(); i++) - { - var qualityItem = Cura.QualityProfilesDropDownMenuModel.getItem(i) - - // Add each quality item to the UI quality model - qualityModel.append(qualityItem) - - // Set selected value - if (Cura.MachineManager.activeQualityType == qualityItem.quality_type) - { - // set to -1 when switching to user created profile so all ticks are clickable - if (Cura.SimpleModeSettingsManager.isProfileUserCreated) - { - qualityModel.qualitySliderActiveIndex = -1 - } - else - { - qualityModel.qualitySliderActiveIndex = i - } - - qualityModel.existingQualityProfile = 1 - } - - // Set min available - if (qualityItem.available && availableMin == -1) - { - availableMin = i - } - - // Set max available - if (qualityItem.available) - { - availableMax = i - } - } - - // Set total available ticks for active slider part - if (availableMin != -1) - { - qualityModel.availableTotalTicks = availableMax - availableMin + 1 - } - - // Calculate slider values - calculateSliderStepWidth(qualityModel.totalTicks) - calculateSliderMargins(availableMin, availableMax, qualityModel.totalTicks) - - qualityModel.qualitySliderAvailableMin = availableMin - qualityModel.qualitySliderAvailableMax = availableMax - } - - function calculateSliderStepWidth (totalTicks) - { - qualityModel.qualitySliderStepWidth = totalTicks != 0 ? Math.round((base.width * 0.55) / (totalTicks)) : 0 - } - - function calculateSliderMargins (availableMin, availableMax, totalTicks) - { - if (availableMin == -1 || (availableMin == 0 && availableMax == 0)) - { - qualityModel.qualitySliderMarginRight = Math.round(base.width * 0.55) - } - else if (availableMin == availableMax) - { - qualityModel.qualitySliderMarginRight = Math.round((totalTicks - availableMin) * qualitySliderStepWidth) - } - else - { - qualityModel.qualitySliderMarginRight = Math.round((totalTicks - availableMax) * qualitySliderStepWidth) - } - } - - function reset () { - qualityModel.clear() - qualityModel.availableTotalTicks = 0 - qualityModel.existingQualityProfile = 0 - - // check, the ticks count cannot be less than zero - qualityModel.totalTicks = Math.max(0, Cura.QualityProfilesDropDownMenuModel.rowCount() - 1) - } - } - - Label - { - id: qualityRowTitle - text: catalog.i18nc("@label", "Layer Height") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - } - - // Show titles for the each quality slider ticks - Item - { - y: -5; - anchors.left: speedSlider.left - Repeater - { - model: qualityModel - - Label - { - anchors.verticalCenter: parent.verticalCenter - anchors.top: parent.top - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height / 2) - color: (Cura.MachineManager.activeMachine != null && Cura.QualityProfilesDropDownMenuModel.getItem(index).available) ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - text: - { - var result = "" - if(Cura.MachineManager.activeMachine != null) - { - result = Cura.QualityProfilesDropDownMenuModel.getItem(index).layer_height - - if(result == undefined) - { - result = ""; - } - else - { - result = Number(Math.round(result + "e+2") + "e-2"); //Round to 2 decimals. Javascript makes this difficult... - if (result == undefined || result != result) //Parse failure. - { - result = ""; - } - } - } - return result - } - - x: - { - // Make sure the text aligns correctly with each tick - if (qualityModel.totalTicks == 0) - { - // If there is only one tick, align it centrally - return Math.round(((base.width * 0.55) - width) / 2) - } - else if (index == 0) - { - return Math.round(base.width * 0.55 / qualityModel.totalTicks) * index - } - else if (index == qualityModel.totalTicks) - { - return Math.round(base.width * 0.55 / qualityModel.totalTicks) * index - width - } - else - { - return Math.round((base.width * 0.55 / qualityModel.totalTicks) * index - (width / 2)) - } - } - } - } - } - - //Print speed slider - Item - { - id: speedSlider - width: Math.round(base.width * 0.55) - height: UM.Theme.getSize("sidebar_margin").height - anchors.right: parent.right - anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - - // This Item is used only for tooltip, for slider area which is unavailable - Item - { - function showTooltip (showTooltip) - { - if (showTooltip) - { - var content = catalog.i18nc("@tooltip", "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile") - base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("sidebar_margin").width, customisedSettings.height), content) - } - else - { - base.hideTooltip() - } - } - - id: unavailableLineToolTip - height: 20 * screenScaleFactor // hovered area height - z: parent.z + 1 // should be higher, otherwise the area can be hovered - x: 0 - anchors.verticalCenter: qualitySlider.verticalCenter - - Rectangle - { - id: leftArea - width: - { - if (qualityModel.availableTotalTicks == 0) - { - return qualityModel.qualitySliderStepWidth * qualityModel.totalTicks - } - return qualityModel.qualitySliderStepWidth * qualityModel.qualitySliderAvailableMin - 10 - } - height: parent.height - color: "transparent" - - MouseArea - { - anchors.fill: parent - hoverEnabled: true - enabled: Cura.SimpleModeSettingsManager.isProfileUserCreated == false - onEntered: unavailableLineToolTip.showTooltip(true) - onExited: unavailableLineToolTip.showTooltip(false) - } - } - - Rectangle - { - id: rightArea - width: - { - if(qualityModel.availableTotalTicks == 0) - return 0 - - return qualityModel.qualitySliderMarginRight - 10 - } - height: parent.height - color: "transparent" - x: - { - if (qualityModel.availableTotalTicks == 0) - { - return 0 - } - - var leftUnavailableArea = qualityModel.qualitySliderStepWidth * qualityModel.qualitySliderAvailableMin - var totalGap = qualityModel.qualitySliderStepWidth * (qualityModel.availableTotalTicks -1) + leftUnavailableArea + 10 - - return totalGap - } - - MouseArea - { - anchors.fill: parent - hoverEnabled: true - enabled: Cura.SimpleModeSettingsManager.isProfileUserCreated == false - onEntered: unavailableLineToolTip.showTooltip(true) - onExited: unavailableLineToolTip.showTooltip(false) - } - } - } - - // Draw Unavailable line - Rectangle - { - id: groovechildrect - width: Math.round(base.width * 0.55) - height: 2 * screenScaleFactor - color: UM.Theme.getColor("quality_slider_unavailable") - anchors.verticalCenter: qualitySlider.verticalCenter - x: 0 - } - - // Draw ticks - Repeater - { - id: qualityRepeater - model: qualityModel.totalTicks > 0 ? qualityModel : 0 - - Rectangle - { - anchors.verticalCenter: parent.verticalCenter - color: Cura.QualityProfilesDropDownMenuModel.getItem(index).available ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - width: 1 * screenScaleFactor - height: 6 * screenScaleFactor - y: 0 - x: Math.round(qualityModel.qualitySliderStepWidth * index) - } - } - - Slider - { - id: qualitySlider - height: UM.Theme.getSize("sidebar_margin").height - anchors.bottom: speedSlider.bottom - enabled: qualityModel.totalTicks > 0 && !Cura.SimpleModeSettingsManager.isProfileCustomized - visible: qualityModel.availableTotalTicks > 0 - updateValueWhileDragging : false - - minimumValue: qualityModel.qualitySliderAvailableMin >= 0 ? qualityModel.qualitySliderAvailableMin : 0 - // maximumValue must be greater than minimumValue to be able to see the handle. While the value is strictly - // speaking not always correct, it seems to have the correct behavior (switching from 0 available to 1 available) - maximumValue: qualityModel.qualitySliderAvailableMax >= 1 ? qualityModel.qualitySliderAvailableMax : 1 - stepSize: 1 - - value: qualityModel.qualitySliderActiveIndex - - width: qualityModel.qualitySliderStepWidth * (qualityModel.availableTotalTicks - 1) - - anchors.right: parent.right - anchors.rightMargin: qualityModel.qualitySliderMarginRight - - style: SliderStyle - { - //Draw Available line - groove: Rectangle - { - implicitHeight: 2 * screenScaleFactor - color: UM.Theme.getColor("quality_slider_available") - radius: Math.round(height / 2) - } - handle: Item - { - Rectangle - { - id: qualityhandleButton - anchors.centerIn: parent - color: UM.Theme.getColor("quality_slider_available") - implicitWidth: 10 * screenScaleFactor - implicitHeight: implicitWidth - radius: Math.round(implicitWidth / 2) - visible: !Cura.SimpleModeSettingsManager.isProfileCustomized && !Cura.SimpleModeSettingsManager.isProfileUserCreated && qualityModel.existingQualityProfile - } - } - } - - onValueChanged: - { - // only change if an active machine is set and the slider is visible at all. - if (Cura.MachineManager.activeMachine != null && visible) - { - // prevent updating during view initializing. Trigger only if the value changed by user - if (qualitySlider.value != qualityModel.qualitySliderActiveIndex && qualityModel.qualitySliderActiveIndex != -1) - { - // start updating with short delay - qualitySliderChangeTimer.start() - } - } - } - } - - MouseArea - { - id: speedSliderMouseArea - anchors.fill: parent - hoverEnabled: true - enabled: Cura.SimpleModeSettingsManager.isProfileUserCreated - - onEntered: - { - var content = catalog.i18nc("@tooltip","A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab") - base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("sidebar_margin").width, customisedSettings.height), content) - } - onExited: - { - base.hideTooltip(); - } - } - } - - Label - { - id: speedLabel - anchors.top: speedSlider.bottom - - anchors.left: parent.left - - text: catalog.i18nc("@label", "Print Speed") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - width: Math.round(UM.Theme.getSize("sidebar").width * 0.35) - elide: Text.ElideRight - } - - Label - { - anchors.bottom: speedLabel.bottom - anchors.left: speedSlider.left - - text: catalog.i18nc("@label", "Slower") - font: UM.Theme.getFont("default") - color: (qualityModel.availableTotalTicks > 1) ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - horizontalAlignment: Text.AlignLeft - } - - Label - { - anchors.bottom: speedLabel.bottom - anchors.right: speedSlider.right - - text: catalog.i18nc("@label", "Faster") - font: UM.Theme.getFont("default") - color: (qualityModel.availableTotalTicks > 1) ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - horizontalAlignment: Text.AlignRight - } - - UM.SimpleButton - { - id: customisedSettings - - visible: Cura.SimpleModeSettingsManager.isProfileCustomized || Cura.SimpleModeSettingsManager.isProfileUserCreated - height: Math.round(speedSlider.height * 0.8) - width: Math.round(speedSlider.height * 0.8) - - anchors.verticalCenter: speedSlider.verticalCenter - anchors.right: speedSlider.left - anchors.rightMargin: Math.round(UM.Theme.getSize("sidebar_margin").width / 2) - - color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button"); - iconSource: UM.Theme.getIcon("reset"); - - onClicked: - { - // if the current profile is user-created, switch to a built-in quality - Cura.MachineManager.resetToUseDefaultQuality() - } - onEntered: - { - var content = catalog.i18nc("@tooltip","You have modified some profile settings. If you want to change these go to custom mode.") - base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("sidebar_margin").width, customisedSettings.height), content) - } - onExited: base.hideTooltip() - } - } - - // - // Infill - // - Item - { - id: infillCellLeft - - anchors.top: qualityRow.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height * 2 - anchors.left: parent.left - - width: Math.round(UM.Theme.getSize("sidebar").width * .45) - UM.Theme.getSize("sidebar_margin").width - - Label - { - id: infillLabel - text: catalog.i18nc("@label", "Infill") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - - anchors.top: parent.top - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height * 1.7) - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - } - } - - Item - { - id: infillCellRight - - height: infillSlider.height + UM.Theme.getSize("sidebar_margin").height + enableGradualInfillCheckBox.visible * (enableGradualInfillCheckBox.height + UM.Theme.getSize("sidebar_margin").height) - width: Math.round(UM.Theme.getSize("sidebar").width * .55) - - anchors.left: infillCellLeft.right - anchors.top: infillCellLeft.top - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - - Label { - id: selectedInfillRateText - - //anchors.top: parent.top - anchors.left: infillSlider.left - anchors.leftMargin: Math.round((infillSlider.value / infillSlider.stepSize) * (infillSlider.width / (infillSlider.maximumValue / infillSlider.stepSize)) - 10 * screenScaleFactor) - anchors.right: parent.right - - text: parseInt(infillDensity.properties.value) + "%" - horizontalAlignment: Text.AlignLeft - - color: infillSlider.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - } - - // We use a binding to make sure that after manually setting infillSlider.value it is still bound to the property provider - Binding { - target: infillSlider - property: "value" - value: parseInt(infillDensity.properties.value) - } - - Slider - { - id: infillSlider - - anchors.top: selectedInfillRateText.bottom - anchors.left: parent.left - anchors.right: infillIcon.left - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - - height: UM.Theme.getSize("sidebar_margin").height - width: parseInt(infillCellRight.width - UM.Theme.getSize("sidebar_margin").width - style.handleWidth) - - minimumValue: 0 - maximumValue: 100 - stepSize: 1 - tickmarksEnabled: true - - // disable slider when gradual support is enabled - enabled: parseInt(infillSteps.properties.value) == 0 - - // set initial value from stack - value: parseInt(infillDensity.properties.value) - - onValueChanged: { - - // Don't round the value if it's already the same - if (parseInt(infillDensity.properties.value) == infillSlider.value) { - return - } - - // Round the slider value to the nearest multiple of 10 (simulate step size of 10) - var roundedSliderValue = Math.round(infillSlider.value / 10) * 10 - - // Update the slider value to represent the rounded value - infillSlider.value = roundedSliderValue - - // Update value only if the Recomended mode is Active, - // Otherwise if I change the value in the Custom mode the Recomended view will try to repeat - // same operation - var active_mode = UM.Preferences.getValue("cura/active_mode") - - if (active_mode == 0 || active_mode == "simple") - { - Cura.MachineManager.setSettingForAllExtruders("infill_sparse_density", "value", roundedSliderValue) - Cura.MachineManager.resetSettingForAllExtruders("infill_line_distance") - } - } - - style: SliderStyle - { - groove: Rectangle { - id: groove - implicitWidth: 200 * screenScaleFactor - implicitHeight: 2 * screenScaleFactor - color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - radius: 1 - } - - handle: Item { - Rectangle { - id: handleButton - anchors.centerIn: parent - color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - implicitWidth: 10 * screenScaleFactor - implicitHeight: 10 * screenScaleFactor - radius: 10 * screenScaleFactor - } - } - - tickmarks: Repeater { - id: repeater - model: control.maximumValue / control.stepSize + 1 - - // check if a tick should be shown based on it's index and wether the infill density is a multiple of 10 (slider step size) - function shouldShowTick (index) { - if (index % 10 == 0) { - return true - } - return false - } - - Rectangle { - anchors.verticalCenter: parent.verticalCenter - color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - width: 1 * screenScaleFactor - height: 6 * screenScaleFactor - y: 0 - x: Math.round(styleData.handleWidth / 2 + index * ((repeater.width - styleData.handleWidth) / (repeater.count-1))) - visible: shouldShowTick(index) - } - } - } - } - - Rectangle - { - id: infillIcon - - width: Math.round((parent.width / 5) - (UM.Theme.getSize("sidebar_margin").width)) - height: width - - anchors.right: parent.right - anchors.top: parent.top - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height / 2) - - // we loop over all density icons and only show the one that has the current density and steps - Repeater - { - id: infillIconList - model: infillModel - anchors.fill: parent - - function activeIndex () { - for (var i = 0; i < infillModel.count; i++) { - var density = Math.round(infillDensity.properties.value) - var steps = Math.round(infillSteps.properties.value) - var infillModelItem = infillModel.get(i) - - if (infillModelItem != "undefined" - && density >= infillModelItem.percentageMin - && density <= infillModelItem.percentageMax - && steps >= infillModelItem.stepsMin - && steps <= infillModelItem.stepsMax - ){ - return i - } - } - return -1 - } - - Rectangle - { - anchors.fill: parent - visible: infillIconList.activeIndex() == index - - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("quality_slider_unavailable") - - UM.RecolorImage { - anchors.fill: parent - anchors.margins: 2 * screenScaleFactor - sourceSize.width: width - sourceSize.height: width - source: UM.Theme.getIcon(model.icon) - color: UM.Theme.getColor("quality_slider_unavailable") - } - } - } - } - - // Gradual Support Infill Checkbox - CheckBox { - id: enableGradualInfillCheckBox - property alias _hovered: enableGradualInfillMouseArea.containsMouse - - anchors.top: infillSlider.bottom - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height / 2) // closer to slider since it belongs to the same category - anchors.left: infillCellRight.left - - style: UM.Theme.styles.checkbox - enabled: base.settingsEnabled - visible: infillSteps.properties.enabled == "True" - checked: parseInt(infillSteps.properties.value) > 0 - - MouseArea { - id: enableGradualInfillMouseArea - - anchors.fill: parent - hoverEnabled: true - enabled: true - - property var previousInfillDensity: parseInt(infillDensity.properties.value) - - onClicked: { - // Set to 90% only when enabling gradual infill - var newInfillDensity; - if (parseInt(infillSteps.properties.value) == 0) { - previousInfillDensity = parseInt(infillDensity.properties.value) - newInfillDensity = 90; - } else { - newInfillDensity = previousInfillDensity; - } - Cura.MachineManager.setSettingForAllExtruders("infill_sparse_density", "value", String(newInfillDensity)) - - var infill_steps_value = 0; - if (parseInt(infillSteps.properties.value) == 0) - infill_steps_value = 5; - - Cura.MachineManager.setSettingForAllExtruders("gradual_infill_steps", "value", infill_steps_value) - } - - onEntered: { - base.showTooltip(enableGradualInfillCheckBox, Qt.point(-infillCellRight.x, 0), - catalog.i18nc("@label", "Gradual infill will gradually increase the amount of infill towards the top.")) - } - - onExited: { - base.hideTooltip() - } - } - - Label { - id: gradualInfillLabel - anchors.left: enableGradualInfillCheckBox.right - anchors.leftMargin: Math.round(UM.Theme.getSize("sidebar_margin").width / 2) - text: catalog.i18nc("@label", "Enable gradual") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - } - } - - // Infill list model for mapping icon - ListModel - { - id: infillModel - Component.onCompleted: - { - infillModel.append({ - percentageMin: -1, - percentageMax: 0, - stepsMin: -1, - stepsMax: 0, - icon: "hollow" - }) - infillModel.append({ - percentageMin: 0, - percentageMax: 40, - stepsMin: -1, - stepsMax: 0, - icon: "sparse" - }) - infillModel.append({ - percentageMin: 40, - percentageMax: 89, - stepsMin: -1, - stepsMax: 0, - icon: "dense" - }) - infillModel.append({ - percentageMin: 90, - percentageMax: 9999999999, - stepsMin: -1, - stepsMax: 0, - icon: "solid" - }) - infillModel.append({ - percentageMin: 0, - percentageMax: 9999999999, - stepsMin: 1, - stepsMax: 9999999999, - icon: "gradual" - }) - } - } - } - - // - // Enable support - // - Label - { - id: enableSupportLabel - visible: enableSupportCheckBox.visible - - anchors.top: infillCellRight.bottom - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height * 1.5) - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - anchors.right: infillCellLeft.right - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - anchors.verticalCenter: enableSupportCheckBox.verticalCenter - - text: catalog.i18nc("@label", "Generate Support"); - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - elide: Text.ElideRight - } - - CheckBox - { - id: enableSupportCheckBox - property alias _hovered: enableSupportMouseArea.containsMouse - - anchors.top: enableSupportLabel.top - anchors.left: infillCellRight.left - - style: UM.Theme.styles.checkbox; - enabled: base.settingsEnabled - - visible: supportEnabled.properties.enabled == "True" - checked: supportEnabled.properties.value == "True"; - - MouseArea - { - id: enableSupportMouseArea - anchors.fill: parent - hoverEnabled: true - enabled: true - onClicked: - { - // The value is a string "True" or "False" - supportEnabled.setPropertyValue("value", supportEnabled.properties.value != "True"); - } - onEntered: - { - base.showTooltip(enableSupportCheckBox, Qt.point(-enableSupportCheckBox.x, 0), - catalog.i18nc("@label", "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing.")); - } - onExited: - { - base.hideTooltip(); - } - } - } - - ComboBox - { - id: supportExtruderCombobox - visible: enableSupportCheckBox.visible && (supportEnabled.properties.value == "True") && (extrudersEnabledCount.properties.value > 1) - model: extruderModel - - property string color_override: "" // for manually setting values - property string color: // is evaluated automatically, but the first time is before extruderModel being filled - { - var current_extruder = extruderModel.get(currentIndex); - color_override = ""; - if (current_extruder === undefined) return "" - return (current_extruder.color) ? current_extruder.color : ""; - } - - textRole: "text" // this solves that the combobox isn't populated in the first time Cura is started - - anchors.top: enableSupportCheckBox.top - //anchors.topMargin: ((supportEnabled.properties.value === "True") && (machineExtruderCount.properties.value > 1)) ? UM.Theme.getSize("sidebar_margin").height : 0 - anchors.left: enableSupportCheckBox.right - anchors.leftMargin: Math.round(UM.Theme.getSize("sidebar_margin").width / 2) - - width: Math.round(UM.Theme.getSize("sidebar").width * .55) - Math.round(UM.Theme.getSize("sidebar_margin").width / 2) - enableSupportCheckBox.width - height: ((supportEnabled.properties.value == "True") && (machineExtruderCount.properties.value > 1)) ? UM.Theme.getSize("setting_control").height : 0 - - Behavior on height { NumberAnimation { duration: 100 } } - - style: UM.Theme.styles.combobox_color - enabled: base.settingsEnabled - property alias _hovered: supportExtruderMouseArea.containsMouse - - currentIndex: - { - if (supportExtruderNr.properties == null) - { - return Cura.MachineManager.defaultExtruderPosition; - } - else - { - var extruder = parseInt(supportExtruderNr.properties.value); - if ( extruder === -1) - { - return Cura.MachineManager.defaultExtruderPosition; - } - return extruder; - } - } - - onActivated: - { - // Send the extruder nr as a string. - supportExtruderNr.setPropertyValue("value", String(index)); - } - MouseArea - { - id: supportExtruderMouseArea - anchors.fill: parent - hoverEnabled: true - enabled: base.settingsEnabled - acceptedButtons: Qt.NoButton - onEntered: - { - base.showTooltip(supportExtruderCombobox, Qt.point(-supportExtruderCombobox.x, 0), - catalog.i18nc("@label", "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air.")); - } - onExited: - { - base.hideTooltip(); - } - } - - function updateCurrentColor() - { - var current_extruder = extruderModel.get(currentIndex); - if (current_extruder !== undefined) { - supportExtruderCombobox.color_override = current_extruder.color; - } - } - - } - - Label - { - id: adhesionHelperLabel - visible: adhesionCheckBox.visible - - text: catalog.i18nc("@label", "Build Plate Adhesion") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - elide: Text.ElideRight - - anchors { - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - right: infillCellLeft.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - verticalCenter: adhesionCheckBox.verticalCenter - } - } - - CheckBox - { - id: adhesionCheckBox - property alias _hovered: adhesionMouseArea.containsMouse - - anchors.top: enableSupportCheckBox.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - anchors.left: infillCellRight.left - - //: Setting enable printing build-plate adhesion helper checkbox - style: UM.Theme.styles.checkbox; - enabled: base.settingsEnabled - - visible: platformAdhesionType.properties.enabled == "True" - checked: platformAdhesionType.properties.value != "skirt" && platformAdhesionType.properties.value != "none" - - MouseArea - { - id: adhesionMouseArea - anchors.fill: parent - hoverEnabled: true - enabled: base.settingsEnabled - onClicked: - { - var adhesionType = "skirt"; - if(!parent.checked) - { - // Remove the "user" setting to see if the rest of the stack prescribes a brim or a raft - platformAdhesionType.removeFromContainer(0); - adhesionType = platformAdhesionType.properties.value; - if(adhesionType == "skirt" || adhesionType == "none") - { - // If the rest of the stack doesn't prescribe an adhesion-type, default to a brim - adhesionType = "brim"; - } - } - platformAdhesionType.setPropertyValue("value", adhesionType); - } - onEntered: - { - base.showTooltip(adhesionCheckBox, Qt.point(-adhesionCheckBox.x, 0), - catalog.i18nc("@label", "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards.")); - } - onExited: - { - base.hideTooltip(); - } - } - } - - ListModel - { - id: extruderModel - Component.onCompleted: populateExtruderModel() - } - - //: Model used to populate the extrudelModel - Cura.ExtrudersModel - { - id: extruders - onModelChanged: populateExtruderModel() - } - - Item - { - id: tipsCell - anchors.top: adhesionCheckBox.visible ? adhesionCheckBox.bottom : (enableSupportCheckBox.visible ? supportExtruderCombobox.bottom : infillCellRight.bottom) - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height * 2) - anchors.left: parent.left - width: parent.width - height: tipsText.contentHeight * tipsText.lineCount - - Label - { - id: tipsText - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - anchors.top: parent.top - wrapMode: Text.WordWrap - text: catalog.i18nc("@label", "Need help improving your prints?
    Read the Ultimaker Troubleshooting Guides").arg("https://ultimaker.com/en/troubleshooting") - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - linkColor: UM.Theme.getColor("text_link") - onLinkActivated: Qt.openUrlExternally(link) - } - } - - UM.SettingPropertyProvider - { - id: infillExtruderNumber - containerStackId: Cura.MachineManager.activeStackId - key: "infill_extruder_nr" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: infillDensity - containerStackId: Cura.MachineManager.activeStackId - key: "infill_sparse_density" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: infillSteps - containerStackId: Cura.MachineManager.activeStackId - key: "gradual_infill_steps" - watchedProperties: ["value", "enabled"] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: platformAdhesionType - containerStackId: Cura.MachineManager.activeMachineId - key: "adhesion_type" - watchedProperties: [ "value", "enabled" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: supportEnabled - containerStackId: Cura.MachineManager.activeMachineId - key: "support_enable" - watchedProperties: [ "value", "enabled", "description" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: extrudersEnabledCount - containerStackId: Cura.MachineManager.activeMachineId - key: "extruders_enabled_count" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: supportExtruderNr - containerStackId: Cura.MachineManager.activeMachineId - key: "support_extruder_nr" - watchedProperties: [ "value" ] - storeIndex: 0 - } - } - } - - function populateExtruderModel() - { - extruderModel.clear(); - for(var extruderNumber = 0; extruderNumber < extruders.rowCount() ; extruderNumber++) - { - extruderModel.append({ - text: extruders.getItem(extruderNumber).name, - color: extruders.getItem(extruderNumber).color - }) - } - supportExtruderCombobox.updateCurrentColor(); - } -} diff --git a/resources/qml/ToolTip.qml b/resources/qml/ToolTip.qml new file mode 100644 index 0000000000..e82caf01b2 --- /dev/null +++ b/resources/qml/ToolTip.qml @@ -0,0 +1,63 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.0 as UM +import Cura 1.0 as Cura + +ToolTip +{ + enum ContentAlignment + { + AlignLeft, + AlignRight + } + + // Defines the alignment of the content, by default to the left + property int contentAlignment: Cura.ToolTip.ContentAlignment.AlignRight + + property alias tooltipText: tooltip.text + property var targetPoint: Qt.point(parent.x, y + Math.round(height/2)) + + id: tooltip + text: "" + delay: 500 + font: UM.Theme.getFont("default") + + // If the text is not set, just set the height to 0 to prevent it from showing + height: text != "" ? label.contentHeight + 2 * UM.Theme.getSize("thin_margin").width: 0 + + x: + { + if (contentAlignment == Cura.ToolTip.ContentAlignment.AlignLeft) + { + return (label.width + Math.round(UM.Theme.getSize("default_arrow").width * 1.2) + padding * 2) * -1 + } + return parent.width + Math.round(UM.Theme.getSize("default_arrow").width * 1.2 + padding) + } + + y: Math.round(parent.height / 2 - label.height / 2 ) - padding + + padding: UM.Theme.getSize("thin_margin").width + + background: UM.PointingRectangle + { + id: backgroundRect + color: UM.Theme.getColor("tooltip") + target: Qt.point(targetPoint.x - tooltip.x, targetPoint.y - tooltip.y) + arrowSize: UM.Theme.getSize("default_arrow").width + } + + contentItem: Label + { + id: label + text: tooltip.text + font: tooltip.font + wrapMode: Text.Wrap + textFormat: Text.RichText + color: UM.Theme.getColor("tooltip_text") + renderType: Text.NativeRendering + } +} \ No newline at end of file diff --git a/resources/qml/Toolbar.qml b/resources/qml/Toolbar.qml index a04b3650df..33481b9183 100644 --- a/resources/qml/Toolbar.qml +++ b/resources/qml/Toolbar.qml @@ -2,96 +2,159 @@ // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.3 import UM 1.2 as UM import Cura 1.0 as Cura Item { - id: base; + id: base - width: buttons.width; + width: buttons.width height: buttons.height property int activeY - Column + Item { - id: buttons; + id: buttons + width: parent.visible ? toolButtons.width : 0 + height: childrenRect.height - anchors.bottom: parent.bottom - anchors.left: parent.left - spacing: UM.Theme.getSize("button_lining").width + Behavior on width { NumberAnimation { duration: 100 } } - Repeater + // Used to create a rounded rectangle behind the toolButtons + Rectangle { - id: repeat - - model: UM.ToolModel { } - width: childrenRect.width - height: childrenRect.height - Button + anchors { - text: model.name + (model.shortcut ? (" (" + model.shortcut + ")") : "") - iconSource: (UM.Theme.getIcon(model.icon) != "") ? UM.Theme.getIcon(model.icon) : "file:///" + model.location + "/" + model.icon - checkable: true - checked: model.active - enabled: model.enabled && UM.Selection.hasSelection && UM.Controller.toolsEnabled - style: UM.Theme.styles.tool_button + fill: toolButtons + leftMargin: -radius - border.width + rightMargin: -border.width + topMargin: -border.width + bottomMargin: -border.width + } + radius: UM.Theme.getSize("default_radius").width + color: UM.Theme.getColor("lining") + } - onCheckedChanged: + Column + { + id: toolButtons + + anchors.top: parent.top + anchors.right: parent.right + spacing: UM.Theme.getSize("default_lining").height + + Repeater + { + id: repeat + + model: UM.ToolModel { id: toolsModel } + width: childrenRect.width + height: childrenRect.height + + delegate: ToolbarButton { - if (checked) + text: model.name + (model.shortcut ? (" (" + model.shortcut + ")") : "") + checkable: true + checked: model.active + enabled: model.enabled && UM.Selection.hasSelection && UM.Controller.toolsEnabled + + isTopElement: toolsModel.getItem(0).id == model.id + isBottomElement: toolsModel.getItem(toolsModel.count - 1).id == model.id + + toolItem: UM.RecolorImage { - base.activeY = y; + source: UM.Theme.getIcon(model.icon) != "" ? UM.Theme.getIcon(model.icon) : "file:///" + model.location + "/" + model.icon + color: UM.Theme.getColor("icon") + + sourceSize: UM.Theme.getSize("button_icon") } - } - //Workaround since using ToolButton's onClicked would break the binding of the checked property, instead - //just catch the click so we do not trigger that behaviour. - MouseArea - { - anchors.fill: parent; - onClicked: + onCheckedChanged: { - forceActiveFocus() //First grab focus, so all the text fields are updated - if(parent.checked) + if (checked) { - UM.Controller.setActiveTool(null); + base.activeY = y; } - else + } + + //Workaround since using ToolButton's onClicked would break the binding of the checked property, instead + //just catch the click so we do not trigger that behaviour. + MouseArea + { + anchors.fill: parent; + onClicked: { - UM.Controller.setActiveTool(model.id); + forceActiveFocus() //First grab focus, so all the text fields are updated + if(parent.checked) + { + UM.Controller.setActiveTool(null); + } + else + { + UM.Controller.setActiveTool(model.id); + } } } } } } - Item { height: UM.Theme.getSize("default_margin").height; width: UM.Theme.getSize("default_lining").width; visible: extruders.count > 0 } - - Repeater + // Used to create a rounded rectangle behind the extruderButtons + Rectangle { - id: extruders - width: childrenRect.width - height: childrenRect.height - property var _model: Cura.ExtrudersModel { id: extrudersModel } - model: _model.items.length > 1 ? _model : 0 - ExtruderButton { extruder: model } + anchors + { + fill: extruderButtons + leftMargin: -radius - border.width + rightMargin: -border.width + topMargin: -border.width + bottomMargin: -border.width + } + radius: UM.Theme.getSize("default_radius").width + color: UM.Theme.getColor("lining") + visible: extrudersModel.items.length > 1 + } + + Column + { + id: extruderButtons + + anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.top: toolButtons.bottom + anchors.right: parent.right + spacing: UM.Theme.getSize("default_lining").height + + Repeater + { + id: extruders + width: childrenRect.width + height: childrenRect.height + model: extrudersModel.items.length > 1 ? extrudersModel : 0 + + delegate: ExtruderButton + { + extruder: model + isTopElement: extrudersModel.getItem(0).id == model.id + isBottomElement: extrudersModel.getItem(extrudersModel.rowCount() - 1).id == model.id + } + } } } + property var extrudersModel: CuraApplication.getExtrudersModel() + UM.PointingRectangle { - id: panelBorder; + id: panelBorder - anchors.left: parent.right; - anchors.leftMargin: UM.Theme.getSize("default_margin").width; - anchors.top: base.top; + anchors.left: parent.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.top: base.top anchors.topMargin: base.activeY - z: buttons.z -1 + z: buttons.z - 1 target: Qt.point(parent.right, base.activeY + Math.round(UM.Theme.getSize("button").height/2)) arrowSize: UM.Theme.getSize("default_arrow").width @@ -100,14 +163,14 @@ Item { if (panel.item && panel.width > 0) { - return Math.max(panel.width + 2 * UM.Theme.getSize("default_margin").width); + return Math.max(panel.width + 2 * UM.Theme.getSize("default_margin").width) } else { return 0; } } - height: panel.item ? panel.height + 2 * UM.Theme.getSize("default_margin").height : 0; + height: panel.item ? panel.height + 2 * UM.Theme.getSize("default_margin").height : 0 opacity: panel.item && panel.width > 0 ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 100 } } @@ -125,11 +188,11 @@ Item { id: panel - x: UM.Theme.getSize("default_margin").width; - y: UM.Theme.getSize("default_margin").height; + x: UM.Theme.getSize("default_margin").width + y: UM.Theme.getSize("default_margin").height source: UM.ActiveTool.valid ? UM.ActiveTool.activeToolPanel : "" - enabled: UM.Controller.toolsEnabled; + enabled: UM.Controller.toolsEnabled } } diff --git a/resources/qml/ToolbarButton.qml b/resources/qml/ToolbarButton.qml new file mode 100644 index 0000000000..b3f84bba1d --- /dev/null +++ b/resources/qml/ToolbarButton.qml @@ -0,0 +1,106 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Button +{ + id: base + + property alias toolItem: contentItemLoader.sourceComponent + + // These two properties indicate whether the toolbar button is at the top of the toolbar column or at the bottom. + // If it is somewhere in the middle, then both has to be false. If there is only one element in the column, then + // both properties have to be set to true. This is used to create a rounded corner. + property bool isTopElement: false + property bool isBottomElement: false + + hoverEnabled: true + + background: Rectangle + { + implicitWidth: UM.Theme.getSize("button").width + implicitHeight: UM.Theme.getSize("button").height + color: + { + if (base.checked && base.hovered) + { + return UM.Theme.getColor("toolbar_button_active_hover") + } + else if (base.checked) + { + return UM.Theme.getColor("toolbar_button_active") + } + else if(base.hovered) + { + return UM.Theme.getColor("toolbar_button_hover") + } + return UM.Theme.getColor("toolbar_background") + } + radius: UM.Theme.getSize("default_radius").width + + Rectangle + { + id: topSquare + anchors + { + left: parent.left + right: parent.right + top: parent.top + } + height: parent.radius + color: parent.color + visible: !base.isTopElement + } + + Rectangle + { + id: bottomSquare + anchors + { + left: parent.left + right: parent.right + bottom: parent.bottom + } + height: parent.radius + color: parent.color + visible: !base.isBottomElement + } + + Rectangle + { + id: leftSquare + anchors + { + left: parent.left + top: parent.top + bottom: parent.bottom + } + width: parent.radius + color: parent.color + } + } + + contentItem: Item + { + opacity: parent.enabled ? 1.0 : 0.2 + Loader + { + id: contentItemLoader + anchors.centerIn: parent + width: UM.Theme.getSize("button_icon").width + height: UM.Theme.getSize("button_icon").height + } + } + + Cura.ToolTip + { + id: tooltip + tooltipText: base.text + visible: base.hovered + } +} diff --git a/resources/qml/Topbar.qml b/resources/qml/Topbar.qml deleted file mode 100644 index 17819dbd27..0000000000 --- a/resources/qml/Topbar.qml +++ /dev/null @@ -1,247 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 - -import UM 1.4 as UM -import Cura 1.0 as Cura -import "Menus" - -Rectangle -{ - id: base - anchors.left: parent.left - anchors.right: parent.right - height: UM.Theme.getSize("sidebar_header").height - color: UM.Controller.activeStage.stageId == "MonitorStage" ? UM.Theme.getColor("topbar_background_color_monitoring") : UM.Theme.getColor("topbar_background_color") - - property bool printerConnected: Cura.MachineManager.printerConnected - property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands - - property int rightMargin: UM.Theme.getSize("sidebar").width + UM.Theme.getSize("default_margin").width; - property int allItemsWidth: 0; - - function updateMarginsAndSizes() { - if (UM.Preferences.getValue("cura/sidebar_collapsed")) - { - rightMargin = UM.Theme.getSize("default_margin").width; - } - else - { - rightMargin = UM.Theme.getSize("sidebar").width + UM.Theme.getSize("default_margin").width; - } - allItemsWidth = ( - logo.width + UM.Theme.getSize("topbar_logo_right_margin").width + - UM.Theme.getSize("topbar_logo_right_margin").width + stagesMenuContainer.width + - UM.Theme.getSize("default_margin").width + viewModeButton.width + - rightMargin); - } - - UM.I18nCatalog - { - id: catalog - name:"cura" - } - - Image - { - id: logo - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: parent.verticalCenter - - source: UM.Theme.getImage("logo"); - width: UM.Theme.getSize("logo").width; - height: UM.Theme.getSize("logo").height; - - sourceSize.width: width; - sourceSize.height: height; - } - - Row - { - id: stagesMenuContainer - anchors.left: logo.right - anchors.leftMargin: UM.Theme.getSize("topbar_logo_right_margin").width - spacing: UM.Theme.getSize("default_margin").width - - // The topbar is dynamically filled with all available stages - Repeater - { - id: stagesMenu - - model: UM.StageModel{} - - delegate: Button - { - text: model.name - checkable: true - checked: model.active - exclusiveGroup: topbarMenuGroup - style: (model.stage.iconSource != "") ? UM.Theme.styles.topbar_header_tab_no_overlay : UM.Theme.styles.topbar_header_tab - height: UM.Theme.getSize("sidebar_header").height - onClicked: UM.Controller.setActiveStage(model.id) - iconSource: model.stage.iconSource - - property color overlayColor: "transparent" - property string overlayIconSource: "" - } - } - - ExclusiveGroup { id: topbarMenuGroup } - } - - // View orientation Item - Row - { - id: viewOrientationControl - height: 30 - - spacing: 2 - visible: UM.Controller.activeStage.stageId != "MonitorStage" - - anchors - { - verticalCenter: base.verticalCenter - right: viewModeButton.left - rightMargin: UM.Theme.getSize("default_margin").width - } - - // #1 3d view - Button - { - iconSource: UM.Theme.getIcon("view_3d") - style: UM.Theme.styles.small_tool_button - anchors.verticalCenter: viewOrientationControl.verticalCenter - onClicked:UM.Controller.rotateView("3d", 0) - visible: base.width - allItemsWidth - 4 * this.width > 0 - } - - // #2 Front view - Button - { - iconSource: UM.Theme.getIcon("view_front") - style: UM.Theme.styles.small_tool_button - anchors.verticalCenter: viewOrientationControl.verticalCenter - onClicked: UM.Controller.rotateView("home", 0); - visible: base.width - allItemsWidth - 3 * this.width > 0 - } - - // #3 Top view - Button - { - iconSource: UM.Theme.getIcon("view_top") - style: UM.Theme.styles.small_tool_button - anchors.verticalCenter: viewOrientationControl.verticalCenter - onClicked: UM.Controller.rotateView("y", 90) - visible: base.width - allItemsWidth - 2 * this.width > 0 - } - - // #4 Left view - Button - { - iconSource: UM.Theme.getIcon("view_left") - style: UM.Theme.styles.small_tool_button - anchors.verticalCenter: viewOrientationControl.verticalCenter - onClicked: UM.Controller.rotateView("x", 90) - visible: base.width - allItemsWidth - 1 * this.width > 0 - } - - // #5 Right view - Button - { - iconSource: UM.Theme.getIcon("view_right") - style: UM.Theme.styles.small_tool_button - anchors.verticalCenter: viewOrientationControl.verticalCenter - onClicked: UM.Controller.rotateView("x", -90) - visible: base.width - allItemsWidth > 0 - } - } - - ComboBox - { - id: viewModeButton - - anchors { - verticalCenter: parent.verticalCenter - right: parent.right - rightMargin: rightMargin - } - - style: UM.Theme.styles.combobox - visible: UM.Controller.activeStage.stageId != "MonitorStage" - - model: UM.ViewModel { } - textRole: "name" - - // update the model's active index - function updateItemActiveFlags () { - currentIndex = getActiveIndex() - for (var i = 0; i < model.rowCount(); i++) { - model.getItem(i).active = (i == currentIndex) - } - } - - // get the index of the active model item on start - function getActiveIndex () { - for (var i = 0; i < model.rowCount(); i++) { - if (model.getItem(i).active) { - return i - } - } - return 0 - } - - // set the active index - function setActiveIndex (index) { - UM.Controller.setActiveView(index) - // the connection to UM.ActiveView will trigger update so there is no reason to call it manually here - } - - onCurrentIndexChanged: - { - if (model.getItem(currentIndex).id != undefined) - viewModeButton.setActiveIndex(model.getItem(currentIndex).id) - } - currentIndex: getActiveIndex() - - // watch the active view proxy for changes made from the menu item - Connections - { - target: UM.ActiveView - onActiveViewChanged: viewModeButton.updateItemActiveFlags() - } - } - - Loader - { - id: view_panel - - anchors.top: viewModeButton.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.right: viewModeButton.right - - property var buttonTarget: Qt.point(viewModeButton.x + Math.round(viewModeButton.width / 2), viewModeButton.y + Math.round(viewModeButton.height / 2)) - - height: childrenRect.height - width: childrenRect.width - - source: UM.ActiveView.valid ? UM.ActiveView.activeViewPanel : ""; - } - - // Expand or collapse sidebar - Connections - { - target: Cura.Actions.expandSidebar - onTriggered: updateMarginsAndSizes() - } - - Component.onCompleted: - { - updateMarginsAndSizes(); - } - -} diff --git a/resources/qml/ViewOrientationButton.qml b/resources/qml/ViewOrientationButton.qml new file mode 100644 index 0000000000..5d72de9a8d --- /dev/null +++ b/resources/qml/ViewOrientationButton.qml @@ -0,0 +1,15 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 + +import UM 1.4 as UM + +UM.SimpleButton +{ + width: UM.Theme.getSize("small_button").width + height: UM.Theme.getSize("small_button").height + hoverColor: UM.Theme.getColor("small_button_text_hover") + color: UM.Theme.getColor("small_button_text") + iconMargin: UM.Theme.getSize("thick_lining").width +} \ No newline at end of file diff --git a/resources/qml/ViewOrientationControls.qml b/resources/qml/ViewOrientationControls.qml new file mode 100644 index 0000000000..51ed6e3dcb --- /dev/null +++ b/resources/qml/ViewOrientationControls.qml @@ -0,0 +1,48 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 +import QtQuick.Controls.Styles 1.1 + +import UM 1.4 as UM + +// A row of buttons that control the view direction +Row +{ + id: viewOrientationControl + + spacing: UM.Theme.getSize("narrow_margin").width + height: childrenRect.height + width: childrenRect.width + + ViewOrientationButton + { + iconSource: UM.Theme.getIcon("view_3d") + onClicked: UM.Controller.rotateView("3d", 0) + } + + ViewOrientationButton + { + iconSource: UM.Theme.getIcon("view_front") + onClicked: UM.Controller.rotateView("home", 0) + } + + ViewOrientationButton + { + iconSource: UM.Theme.getIcon("view_top") + onClicked: UM.Controller.rotateView("y", 90) + } + + ViewOrientationButton + { + iconSource: UM.Theme.getIcon("view_left") + onClicked: UM.Controller.rotateView("x", 90) + } + + ViewOrientationButton + { + iconSource: UM.Theme.getIcon("view_right") + onClicked: UM.Controller.rotateView("x", -90) + } +} diff --git a/resources/qml/ViewsSelector.qml b/resources/qml/ViewsSelector.qml new file mode 100644 index 0000000000..0e9be649db --- /dev/null +++ b/resources/qml/ViewsSelector.qml @@ -0,0 +1,133 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Cura.ExpandablePopup +{ + id: viewSelector + + contentPadding: UM.Theme.getSize("default_lining").width + contentAlignment: Cura.ExpandablePopup.ContentAlignment.AlignLeft + + property var viewModel: UM.ViewModel + { + onDataChanged: updateActiveView() + } + + property var activeView: null + + function updateActiveView() + { + for (var index in viewModel.items) + { + if (viewModel.items[index].active) + { + activeView = viewModel.items[index] + return + } + } + activeView = null + } + + Component.onCompleted: + { + if (activeView == null) + { + UM.Controller.setActiveView(viewModel.getItem(0).id) + } + } + + headerItem: Item + { + Label + { + id: title + text: catalog.i18nc("@label", "View types") + verticalAlignment: Text.AlignVCenter + height: parent.height + elide: Text.ElideRight + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering + } + + Label + { + text: viewSelector.activeView ? viewSelector.activeView.name : "" + verticalAlignment: Text.AlignVCenter + anchors + { + left: title.right + leftMargin: UM.Theme.getSize("default_margin").width + right: parent.right + } + height: parent.height + elide: Text.ElideRight + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + } + } + + contentItem: Column + { + id: viewSelectorPopup + width: viewSelector.width - 2 * viewSelector.contentPadding + + // For some reason the height/width of the column gets set to 0 if this is not set... + Component.onCompleted: + { + height = implicitHeight + width = viewSelector.width - 2 * viewSelector.contentPadding + } + + Repeater + { + id: viewsList + model: viewSelector.viewModel + + delegate: Button + { + id: viewsSelectorButton + text: model.name + width: parent.width - viewSelectorPopup.leftPadding - viewSelectorPopup.rightPadding + height: UM.Theme.getSize("action_button").height + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + checkable: true + checked: viewSelector.activeView != null ? viewSelector.activeView.id == id : false + + contentItem: Label + { + id: buttonText + text: viewsSelectorButton.text + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("medium") + renderType: Text.NativeRendering + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + background: Rectangle + { + id: backgroundRect + color: viewsSelectorButton.hovered ? UM.Theme.getColor("action_button_hovered") : "transparent" + radius: UM.Theme.getSize("action_button_radius").width + border.width: UM.Theme.getSize("default_lining").width + border.color: viewsSelectorButton.checked ? UM.Theme.getColor("primary") : "transparent" + } + + onClicked: + { + toggleContent() + UM.Controller.setActiveView(id) + } + } + } + } +} \ No newline at end of file diff --git a/resources/qml/qmldir b/resources/qml/qmldir new file mode 100644 index 0000000000..62997cc27a --- /dev/null +++ b/resources/qml/qmldir @@ -0,0 +1,19 @@ +module Cura + +MachineSelector 1.0 MachineSelector.qml +CustomConfigurationSelector 1.0 CustomConfigurationSelector.qml +PrintSetupSelector 1.0 PrintSetupSelector.qml +ActionButton 1.0 ActionButton.qml +MaterialMenu 1.0 MaterialMenu.qml +NozzleMenu 1.0 NozzleMenu.qml +ActionPanelWidget 1.0 ActionPanelWidget.qml +IconWithText 1.0 IconWithText.qml +OutputDevicesActionButton 1.0 OutputDevicesActionButton.qml +ExpandableComponent 1.0 ExpandableComponent.qml +PrinterTypeLabel 1.0 PrinterTypeLabel.qml +ViewsSelector 1.0 ViewsSelector.qml +ToolbarButton 1.0 ToolbarButton.qml +SettingView 1.0 SettingView.qml +ProfileMenu 1.0 ProfileMenu.qml +CheckBoxWithTooltip 1.0 CheckBoxWithTooltip.qml +ToolTip 1.0 ToolTip.qml diff --git a/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg b/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg index 1d406e4387..875812f950 100644 --- a/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg @@ -4,10 +4,10 @@ name = Fine definition = abax_pri3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = -1 +weight = 0 material = generic_pla [values] diff --git a/resources/quality/abax_pri3/apri3_pla_high.inst.cfg b/resources/quality/abax_pri3/apri3_pla_high.inst.cfg index 20d2c024aa..ed614faecd 100644 --- a/resources/quality/abax_pri3/apri3_pla_high.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = abax_pri3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg b/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg index 0a4d1f1c62..855335780e 100644 --- a/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = abax_pri3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg b/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg index 6d0fdd40d2..55bfc6a755 100644 --- a/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg @@ -4,10 +4,10 @@ name = Fine definition = abax_pri5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = -1 +weight = 0 material = generic_pla [values] diff --git a/resources/quality/abax_pri5/apri5_pla_high.inst.cfg b/resources/quality/abax_pri5/apri5_pla_high.inst.cfg index 212c92e7d1..4d6abb7f78 100644 --- a/resources/quality/abax_pri5/apri5_pla_high.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = abax_pri5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg b/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg index 8a1338f28c..a23f1808a1 100644 --- a/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = abax_pri5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/abax_titan/atitan_pla_fast.inst.cfg b/resources/quality/abax_titan/atitan_pla_fast.inst.cfg index 71740ede84..bd099abec2 100644 --- a/resources/quality/abax_titan/atitan_pla_fast.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_fast.inst.cfg @@ -4,10 +4,10 @@ name = Fine definition = abax_titan [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = -1 +weight = 0 material = generic_pla [values] diff --git a/resources/quality/abax_titan/atitan_pla_high.inst.cfg b/resources/quality/abax_titan/atitan_pla_high.inst.cfg index 73cd31f3fd..49482953cf 100644 --- a/resources/quality/abax_titan/atitan_pla_high.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = abax_titan [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/abax_titan/atitan_pla_normal.inst.cfg b/resources/quality/abax_titan/atitan_pla_normal.inst.cfg index c356e197ce..65cfb075f0 100644 --- a/resources/quality/abax_titan/atitan_pla_normal.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = abax_titan [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_draft.inst.cfg b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_draft.inst.cfg new file mode 100644 index 0000000000..47d6d80527 --- /dev/null +++ b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_draft.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Draft +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_abs + +[values] +cool_fan_enabled = False +adhesion_type = brim diff --git a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_high.inst.cfg b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_high.inst.cfg new file mode 100644 index 0000000000..5f8e38800c --- /dev/null +++ b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_high.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = High +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_abs + +[values] +cool_fan_enabled = False +adhesion_type = brim diff --git a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_normal.inst.cfg b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_normal.inst.cfg new file mode 100644 index 0000000000..9fc17d2294 --- /dev/null +++ b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_normal.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Normal +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_abs + +[values] +cool_fan_enabled = False +adhesion_type = brim + diff --git a/resources/quality/anycubic_4max/anycubic_4max_draft.inst.cfg b/resources/quality/anycubic_4max/anycubic_4max_draft.inst.cfg new file mode 100644 index 0000000000..3d3f9fdca6 --- /dev/null +++ b/resources/quality/anycubic_4max/anycubic_4max_draft.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Draft +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +global_quality = True + +[values] +layer_height = 0.3 + diff --git a/resources/quality/anycubic_4max/anycubic_4max_high.inst.cfg b/resources/quality/anycubic_4max/anycubic_4max_high.inst.cfg new file mode 100644 index 0000000000..f30a53af78 --- /dev/null +++ b/resources/quality/anycubic_4max/anycubic_4max_high.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = High +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +global_quality = True + +[values] +layer_height = 0.15 + diff --git a/resources/quality/anycubic_4max/anycubic_4max_normal.inst.cfg b/resources/quality/anycubic_4max/anycubic_4max_normal.inst.cfg new file mode 100644 index 0000000000..e687709bd2 --- /dev/null +++ b/resources/quality/anycubic_4max/anycubic_4max_normal.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Normal +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +global_quality = True + +[values] +layer_height = 0.2 diff --git a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_draft.inst.cfg b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_draft.inst.cfg new file mode 100644 index 0000000000..69c5b4684c --- /dev/null +++ b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Draft +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_hips + +[values] + diff --git a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_high.inst.cfg b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_high.inst.cfg new file mode 100644 index 0000000000..7fcdbf065e --- /dev/null +++ b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_high.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = High +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_hips + +[values] + diff --git a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_normal.inst.cfg b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_normal.inst.cfg new file mode 100644 index 0000000000..dd1babf627 --- /dev/null +++ b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_normal.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Normal +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_hips + +[values] + diff --git a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_draft.inst.cfg b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_draft.inst.cfg new file mode 100644 index 0000000000..84b11721de --- /dev/null +++ b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_draft.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Draft +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_petg + +[values] +material_print_temperature = =default_material_print_temperature + 35 +material_bed_temperature = 70 +cool_fan_enabled = False + +speed_print = 30 diff --git a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_high.inst.cfg b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_high.inst.cfg new file mode 100644 index 0000000000..90277985bb --- /dev/null +++ b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_high.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = High +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_petg + +[values] +material_print_temperature = =default_material_print_temperature + 35 +material_bed_temperature = 70 +cool_fan_enabled = False + +speed_print = 30 diff --git a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_normal.inst.cfg b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_normal.inst.cfg new file mode 100644 index 0000000000..3ce5342684 --- /dev/null +++ b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_normal.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Normal +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_petg + +[values] +material_print_temperature = =default_material_print_temperature + 35 +material_bed_temperature = 70 +cool_fan_enabled = False + +speed_print = 30 diff --git a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_draft.inst.cfg b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_draft.inst.cfg new file mode 100644 index 0000000000..9fce900fc2 --- /dev/null +++ b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_draft.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Draft +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_pla + +[values] + + diff --git a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_high.inst.cfg b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_high.inst.cfg new file mode 100644 index 0000000000..5bc075d316 --- /dev/null +++ b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_high.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = High +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_pla + +[values] + diff --git a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_normal.inst.cfg b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_normal.inst.cfg new file mode 100644 index 0000000000..50fd145fd2 --- /dev/null +++ b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_normal.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Normal +definition = anycubic_4max + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_pla + +[values] + diff --git a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg index bb47f68574..dddc657296 100644 --- a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg +++ b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg @@ -4,10 +4,11 @@ name = Draft definition = anycubic_i3_mega [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = 0 +weight = -2 +global_quality = True [values] acceleration_enabled = True diff --git a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg index a3ae98deba..87ec96ed96 100644 --- a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg +++ b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg @@ -4,10 +4,11 @@ name = High definition = anycubic_i3_mega [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 2 +weight = 1 +global_quality = True [values] acceleration_enabled = True diff --git a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg index 13846b9702..526cb9bc5e 100644 --- a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg +++ b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg @@ -4,10 +4,11 @@ name = Normal definition = anycubic_i3_mega [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 1 +weight = 0 +global_quality = True [values] acceleration_enabled = True diff --git a/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg index 10c8bc553f..c5ccd5a864 100644 --- a/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg index b09ceb8872..b2a5811bfa 100644 --- a/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg index c2425a6d86..8c727d9bd3 100644 --- a/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg index 038fd02fff..07f6404f62 100644 --- a/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg index e9512e30f8..df42b0ee3b 100644 --- a/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg index fb6ec6c89f..dca42bc4c0 100644 --- a/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg index 572e83d4b3..a5099b36b8 100644 --- a/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg index f4a45dd43a..cad98cba5c 100644 --- a/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg index d927ab0851..dcf7974c4c 100644 --- a/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg index fc877df05d..4eec6d3d4f 100644 --- a/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg index 586133a500..a94bfab748 100644 --- a/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg index e84b2eaa87..83fe257b96 100644 --- a/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg index f661e58b6d..06e337be77 100644 --- a/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg index 31b9c094df..e2f002343e 100644 --- a/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg index 8c3ca85124..0e026befb2 100644 --- a/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg index a1d80774a1..2638a06d89 100644 --- a/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg index 465ea6090a..89b6720617 100644 --- a/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg index e872561b90..68c9f5102b 100644 --- a/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg index 5626ed58de..fd1a1ece09 100644 --- a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg index f74918ef4f..909a23edeb 100644 --- a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_abs variant = 0.25mm thermoplastic extruder diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg index d4dd85b09d..b66931ef40 100644 --- a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg index ab72092035..d29b3acf65 100644 --- a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_abs variant = 0.4mm thermoplastic extruder diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg index d15efb770f..dc910c5e06 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg index 7467da765f..2792261dd6 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg index caa6b71a4a..498afd9772 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg index 9eea2177a8..66b467de07 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_abs variant = 0.8mm thermoplastic extruder diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg index 17f2acd8d1..d030257fb0 100644 --- a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg index 8215eb2f50..c606e778b6 100644 --- a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = dsm_arnitel2045_175 variant = 0.4mm thermoplastic extruder diff --git a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg index f92fc49981..77a1c7312c 100644 --- a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg index 1681e83279..8f9d28bbac 100644 --- a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = -4 diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg index 95d1f3b37e..9faeef3b42 100644 --- a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg index 6bb348282e..3dae1d45d7 100644 --- a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg index 3e212b2446..61000f0912 100644 --- a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg index 0cf82847a0..4d4cf5e37d 100644 --- a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_hips variant = 0.25mm thermoplastic extruder diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg index a9664cf9d1..76071d46bc 100644 --- a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg index 8101fb6dd8..304f38e105 100644 --- a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_hips variant = 0.4mm thermoplastic extruder diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg index f009383ad8..5aaede062d 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg index 1adbbb0fb9..75a4b94541 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg index d3e6df227f..391c87f28c 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg index 0b019d555f..415951f4ee 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_hips variant = 0.8mm thermoplastic extruder diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg index 9eb5d5c4e9..f75dd933a6 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg index e0100d37ec..e95037c242 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_nylon variant = 0.25mm thermoplastic extruder diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg index d4b261b99f..4896d60aca 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg index 7d899ae927..803cb2b849 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_nylon variant = 0.4mm thermoplastic extruder diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg index 21e6d357b0..7217d3524d 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg index 15128584e1..8a7b46a817 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg index 1d78bd0f1d..41dd55cfce 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg index 95be159ff2..75cd29e4a3 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_nylon variant = 0.8mm thermoplastic extruder diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg index c45194e18b..66c425078d 100644 --- a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg index 248517d769..eea872ed0f 100644 --- a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_pc variant = 0.25mm thermoplastic extruder diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg index 8c46693c91..12327636a7 100644 --- a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg index a0b71f1f0a..70c4f68135 100644 --- a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_pc variant = 0.4mm thermoplastic extruder diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg index 04f01db6ba..cd4f112370 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg index 53e21ec4d0..9fae8bfe23 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg index 0b2b9dcb26..bebffc072b 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg index 173ad406f3..40c47b24a1 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_pc variant = 0.8mm thermoplastic extruder diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg index 9dc7adfc88..3b6e326495 100644 --- a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg index 019af9d905..17efcfc1ce 100644 --- a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_petg variant = 0.25mm thermoplastic extruder diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg index 93388787e6..9c6840d5ba 100644 --- a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg index ed17ccce31..9fe00be066 100644 --- a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_petg variant = 0.4mm thermoplastic extruder diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg index 754c55caf5..6da3d2100a 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg index 81b1de32a2..c6d45d5faa 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg index 86e93c8a32..4a06499b5f 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg index 08f918f59b..2ab3fe3340 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_petg variant = 0.8mm thermoplastic extruder diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg index 4841f9f368..7d19528283 100644 --- a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg index 3ba36f9436..994f9b886a 100644 --- a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg index 7c785a750a..f8227cfcd9 100644 --- a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg index b24394daf0..385b79e368 100644 --- a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg index 6443f2d526..b99a972195 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg index 51a93f76d9..31fd7ddb8a 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = -4 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg index 2f72d9d158..c93923e70a 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg index 431f7c0fff..98e2a9bbbb 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg index fe21c17e22..444ac7bbc4 100644 --- a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg index 6525991986..0b03607e34 100644 --- a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_pva variant = 0.25mm thermoplastic extruder diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg index cdf8f8cae7..b08e0d2671 100644 --- a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg index e7267735e4..32ce160df1 100644 --- a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_pva variant = 0.4mm thermoplastic extruder diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg index fc35e14fc6..a6fdd82b5c 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg index 0e1b8b1241..496ecc085d 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg index 249cf6485e..e440fdfe3f 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg index a6c0a89fcc..c1ad10abe1 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_pva variant = 0.8mm thermoplastic extruder diff --git a/resources/quality/coarse.inst.cfg b/resources/quality/coarse.inst.cfg index e9b8156a70..3f5e3f47ce 100644 --- a/resources/quality/coarse.inst.cfg +++ b/resources/quality/coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = fdmprinter [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/dagoma/dagoma_discoeasy200_pla_fast.inst.cfg b/resources/quality/dagoma/dagoma_discoeasy200_pla_fast.inst.cfg index a302f5b513..89c5c957f6 100644 --- a/resources/quality/dagoma/dagoma_discoeasy200_pla_fast.inst.cfg +++ b/resources/quality/dagoma/dagoma_discoeasy200_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = dagoma_discoeasy200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/dagoma/dagoma_discoeasy200_pla_fine.inst.cfg b/resources/quality/dagoma/dagoma_discoeasy200_pla_fine.inst.cfg index b26eb1d910..5b24e6edcf 100644 --- a/resources/quality/dagoma/dagoma_discoeasy200_pla_fine.inst.cfg +++ b/resources/quality/dagoma/dagoma_discoeasy200_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = dagoma_discoeasy200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/dagoma/dagoma_discoeasy200_pla_standard.inst.cfg b/resources/quality/dagoma/dagoma_discoeasy200_pla_standard.inst.cfg index 9ec56f696a..c9bc62a72a 100644 --- a/resources/quality/dagoma/dagoma_discoeasy200_pla_standard.inst.cfg +++ b/resources/quality/dagoma/dagoma_discoeasy200_pla_standard.inst.cfg @@ -4,7 +4,7 @@ name = Standard definition = dagoma_discoeasy200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/dagoma/dagoma_global_fast.inst.cfg b/resources/quality/dagoma/dagoma_global_fast.inst.cfg index 28569387f2..a37d3fb579 100644 --- a/resources/quality/dagoma/dagoma_global_fast.inst.cfg +++ b/resources/quality/dagoma/dagoma_global_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = dagoma_discoeasy200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/dagoma/dagoma_global_fine.inst.cfg b/resources/quality/dagoma/dagoma_global_fine.inst.cfg index 1f7d577c1b..4815dc44cd 100644 --- a/resources/quality/dagoma/dagoma_global_fine.inst.cfg +++ b/resources/quality/dagoma/dagoma_global_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = dagoma_discoeasy200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/dagoma/dagoma_global_standard.inst.cfg b/resources/quality/dagoma/dagoma_global_standard.inst.cfg index 167062c1d7..5be7fb75c9 100644 --- a/resources/quality/dagoma/dagoma_global_standard.inst.cfg +++ b/resources/quality/dagoma/dagoma_global_standard.inst.cfg @@ -4,7 +4,7 @@ name = Standard definition = dagoma_discoeasy200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/dagoma/dagoma_neva_magis_pla_fast.inst.cfg b/resources/quality/dagoma/dagoma_magis_pla_fast.inst.cfg similarity index 84% rename from resources/quality/dagoma/dagoma_neva_magis_pla_fast.inst.cfg rename to resources/quality/dagoma/dagoma_magis_pla_fast.inst.cfg index e52cba165c..99a1f9e61b 100644 --- a/resources/quality/dagoma/dagoma_neva_magis_pla_fast.inst.cfg +++ b/resources/quality/dagoma/dagoma_magis_pla_fast.inst.cfg @@ -1,10 +1,10 @@ [general] version = 4 name = Fast -definition = dagoma_neva_magis +definition = dagoma_magis [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/dagoma/dagoma_neva_magis_pla_fine.inst.cfg b/resources/quality/dagoma/dagoma_magis_pla_fine.inst.cfg similarity index 71% rename from resources/quality/dagoma/dagoma_neva_magis_pla_fine.inst.cfg rename to resources/quality/dagoma/dagoma_magis_pla_fine.inst.cfg index 033cfbc8fa..12e7f2c62f 100644 --- a/resources/quality/dagoma/dagoma_neva_magis_pla_fine.inst.cfg +++ b/resources/quality/dagoma/dagoma_magis_pla_fine.inst.cfg @@ -1,10 +1,10 @@ [general] version = 4 name = Fine -definition = dagoma_neva_magis +definition = dagoma_magis [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/dagoma/dagoma_neva_magis_pla_standard.inst.cfg b/resources/quality/dagoma/dagoma_magis_pla_standard.inst.cfg similarity index 84% rename from resources/quality/dagoma/dagoma_neva_magis_pla_standard.inst.cfg rename to resources/quality/dagoma/dagoma_magis_pla_standard.inst.cfg index d07d5b58d5..62054acb4e 100644 --- a/resources/quality/dagoma/dagoma_neva_magis_pla_standard.inst.cfg +++ b/resources/quality/dagoma/dagoma_magis_pla_standard.inst.cfg @@ -1,10 +1,10 @@ [general] version = 4 name = Standard -definition = dagoma_neva_magis +definition = dagoma_magis [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/dagoma/dagoma_neva_pla_fast.inst.cfg b/resources/quality/dagoma/dagoma_neva_pla_fast.inst.cfg index efdf2f7d32..ea024726ac 100644 --- a/resources/quality/dagoma/dagoma_neva_pla_fast.inst.cfg +++ b/resources/quality/dagoma/dagoma_neva_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = dagoma_neva [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/dagoma/dagoma_neva_pla_fine.inst.cfg b/resources/quality/dagoma/dagoma_neva_pla_fine.inst.cfg index 50915db112..a69798ff2e 100644 --- a/resources/quality/dagoma/dagoma_neva_pla_fine.inst.cfg +++ b/resources/quality/dagoma/dagoma_neva_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = dagoma_neva [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/dagoma/dagoma_neva_pla_standard.inst.cfg b/resources/quality/dagoma/dagoma_neva_pla_standard.inst.cfg index ed67800eac..fd92ed4416 100644 --- a/resources/quality/dagoma/dagoma_neva_pla_standard.inst.cfg +++ b/resources/quality/dagoma/dagoma_neva_pla_standard.inst.cfg @@ -4,7 +4,7 @@ name = Standard definition = dagoma_neva [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg index f540400575..9ac0791b7d 100644 --- a/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast (beta) definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg index 2214813913..43d6bfb778 100644 --- a/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal (beta) definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg index c196209553..7116247ca3 100644 --- a/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fine (beta) definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 material = generic_abs [values] diff --git a/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg index 332e1890c6..9b968e1a47 100644 --- a/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine (beta) definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg index 674174c0bd..68846ce68b 100644 --- a/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast (beta) definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg index f8887810d5..6f63b0f5b4 100755 --- a/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg index 99030a084b..2d76f87d66 100755 --- a/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg index d6d853466a..6495b09042 100755 --- a/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fine definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 global_quality = True [values] diff --git a/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg index a3bafadeec..7bd4591064 100755 --- a/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg index 84c6e66f61..a13d029c1a 100755 --- a/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg index c4f884486e..d5387f3014 100644 --- a/resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg index 714d4e3517..b41eb9d81f 100644 --- a/resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg index 774b8969c0..ceaeb4667e 100644 --- a/resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fine definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 material = generic_pla [values] diff --git a/resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg index 58470ed650..ba82feb97d 100644 --- a/resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg index 9c00877c24..f312c27233 100644 --- a/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/draft.inst.cfg b/resources/quality/draft.inst.cfg index ac1d9ec52f..9fe798dfd4 100644 --- a/resources/quality/draft.inst.cfg +++ b/resources/quality/draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = fdmprinter [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/extra_coarse.inst.cfg b/resources/quality/extra_coarse.inst.cfg index 2a1a203d22..1a9ade143d 100644 --- a/resources/quality/extra_coarse.inst.cfg +++ b/resources/quality/extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = fdmprinter [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = -4 diff --git a/resources/quality/extra_fast.inst.cfg b/resources/quality/extra_fast.inst.cfg index da890f1653..1fcc9bc42d 100644 --- a/resources/quality/extra_fast.inst.cfg +++ b/resources/quality/extra_fast.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = fdmprinter [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg index f2628e16df..ddcdc0632d 100644 --- a/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg @@ -4,11 +4,11 @@ definition = fabtotum name = Fast Quality [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 -material = fabtotum_abs +material = generic_abs [values] adhesion_type = raft diff --git a/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg b/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg index d750eb98a3..66faed5084 100644 --- a/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg @@ -4,11 +4,11 @@ definition = fabtotum name = High Quality [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 -material = fabtotum_abs +material = generic_abs [values] adhesion_type = raft diff --git a/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg index 7db9682c8a..2bd980889b 100644 --- a/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg @@ -4,11 +4,11 @@ definition = fabtotum name = Normal Quality [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 -material = fabtotum_abs +material = generic_abs [values] adhesion_type = raft diff --git a/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg index b6629d1fac..cec7056ff1 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg @@ -4,11 +4,11 @@ name = Fast Quality definition = fabtotum [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 -material = fabtotum_nylon +material = generic_nylon [values] adhesion_type = raft diff --git a/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg index f819f2bbd5..d5a893c408 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg @@ -4,11 +4,11 @@ name = High Quality definition = fabtotum [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 -material = fabtotum_nylon +material = generic_nylon [values] adhesion_type = raft diff --git a/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg index 8e0ed4f93c..7fe1b8b8f3 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg @@ -4,11 +4,11 @@ name = Normal Quality definition = fabtotum [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 -material = fabtotum_nylon +material = generic_nylon [values] adhesion_type = raft diff --git a/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg index dce262216a..5ebe5bbdc2 100644 --- a/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg @@ -4,11 +4,11 @@ definition = fabtotum name = Fast Quality [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 -material = fabtotum_pla +material = generic_pla [values] adhesion_type = skirt diff --git a/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg b/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg index 2dce693235..5d5b582b82 100644 --- a/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg @@ -4,11 +4,11 @@ definition = fabtotum name = High Quality [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 -material = fabtotum_pla +material = generic_pla [values] adhesion_type = skirt diff --git a/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg index 01f730c2e8..1c510293a1 100644 --- a/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg @@ -4,11 +4,11 @@ definition = fabtotum name = Normal Quality [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 -material = fabtotum_pla +material = generic_pla [values] adhesion_type = skirt diff --git a/resources/quality/fabtotum/fabtotum_tpu_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_tpu_fast.inst.cfg index be8d2e3e3a..21a0c9bc09 100644 --- a/resources/quality/fabtotum/fabtotum_tpu_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_tpu_fast.inst.cfg @@ -5,8 +5,8 @@ name = Fast Quality [metadata] type = quality -setting_version = 5 -material = fabtotum_tpu +setting_version = 7 +material = generic_tpu quality_type = fast weight = -1 diff --git a/resources/quality/fabtotum/fabtotum_tpu_high.inst.cfg b/resources/quality/fabtotum/fabtotum_tpu_high.inst.cfg index 2dcaa15bd3..dd27372a07 100644 --- a/resources/quality/fabtotum/fabtotum_tpu_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_tpu_high.inst.cfg @@ -5,8 +5,8 @@ name = High Quality [metadata] type = quality -setting_version = 5 -material = fabtotum_tpu +setting_version = 7 +material = generic_tpu quality_type = high weight = 1 diff --git a/resources/quality/fabtotum/fabtotum_tpu_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_tpu_normal.inst.cfg index e680038e26..b7eefeeeeb 100644 --- a/resources/quality/fabtotum/fabtotum_tpu_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_tpu_normal.inst.cfg @@ -5,8 +5,8 @@ name = Normal Quality [metadata] type = quality -setting_version = 5 -material = fabtotum_TPU +setting_version = 7 +material = generic_tpu quality_type = normal weight = 0 diff --git a/resources/quality/fast.inst.cfg b/resources/quality/fast.inst.cfg index 7568c42e8f..d92eeb3ed2 100644 --- a/resources/quality/fast.inst.cfg +++ b/resources/quality/fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = fdmprinter [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_dual_normal.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_dual_normal.inst.cfg similarity index 96% rename from resources/quality/gmax15plus/gmax15plus_pla_dual_normal.inst.cfg rename to resources/quality/gmax15plus/gmax15plus_global_dual_normal.inst.cfg index 7fd2ab2296..7ea63ba7f9 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_dual_normal.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_dual_normal.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Dual Normal Layers definition = gmax15plus_dual [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = -1 +weight = 0 +global_quality = True [values] layer_height = 0.2 @@ -64,7 +65,6 @@ ooze_shield_enabled = True prime_tower_enable = False prime_tower_position_x = 350 prime_tower_position_y = 350 -prime_tower_min_volume = 18 switch_extruder_retraction_amount = 6 switch_extruder_retraction_speeds = 60 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_dual_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_dual_thick.inst.cfg similarity index 96% rename from resources/quality/gmax15plus/gmax15plus_pla_dual_thick.inst.cfg rename to resources/quality/gmax15plus/gmax15plus_global_dual_thick.inst.cfg index 30a99ef243..95182aad2d 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_dual_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_dual_thick.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Dual Thick Layers definition = gmax15plus_dual [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = course weight = -2 +global_quality = True [values] layer_height = 0.28 @@ -64,7 +65,6 @@ ooze_shield_enabled = True prime_tower_enable = False prime_tower_position_x = 350 prime_tower_position_y = 350 -prime_tower_min_volume = 18 switch_extruder_retraction_amount = 6 switch_extruder_retraction_speeds = 60 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_dual_thin.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_dual_thin.inst.cfg similarity index 96% rename from resources/quality/gmax15plus/gmax15plus_pla_dual_thin.inst.cfg rename to resources/quality/gmax15plus/gmax15plus_global_dual_thin.inst.cfg index decafac241..05e9a84bb4 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_dual_thin.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_dual_thin.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Dual Thin Layers definition = gmax15plus_dual [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 +global_quality = True [values] layer_height = 0.16 @@ -64,7 +65,6 @@ ooze_shield_enabled = True prime_tower_enable = False prime_tower_position_x = 350 prime_tower_position_y = 350 -prime_tower_min_volume = 18 switch_extruder_retraction_amount = 6 switch_extruder_retraction_speeds = 60 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_dual_very_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_dual_very_thick.inst.cfg similarity index 96% rename from resources/quality/gmax15plus/gmax15plus_pla_dual_very_thick.inst.cfg rename to resources/quality/gmax15plus/gmax15plus_global_dual_very_thick.inst.cfg index a74bdfdd78..fd986e6c1f 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_dual_very_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_dual_very_thick.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Dual Very Thick Layers definition = gmax15plus_dual [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra_course weight = -3 +global_quality = True [values] layer_height = 0.32 @@ -63,7 +64,6 @@ ooze_shield_enabled = True prime_tower_enable = False prime_tower_position_x = 350 prime_tower_position_y = 350 -prime_tower_min_volume = 18 switch_extruder_retraction_amount = 6 switch_extruder_retraction_speeds = 60 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_normal.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_normal.inst.cfg similarity index 95% rename from resources/quality/gmax15plus/gmax15plus_pla_normal.inst.cfg rename to resources/quality/gmax15plus/gmax15plus_global_normal.inst.cfg index ddf5a4c491..fa50fcee4c 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_normal.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_normal.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Normal Layers definition = gmax15plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = -1 +weight = 0 +global_quality = True [values] layer_height = 0.2 @@ -57,3 +58,5 @@ top_thickness = 1 bottom_layers = 2 wall_line_count = 2 z_seam_corner = z_seam_corner_none + + diff --git a/resources/quality/gmax15plus/gmax15plus_pla_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_thick.inst.cfg similarity index 93% rename from resources/quality/gmax15plus/gmax15plus_pla_thick.inst.cfg rename to resources/quality/gmax15plus/gmax15plus_global_thick.inst.cfg index e6cb2b5854..e5fd46edbc 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_thick.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Thick Layers definition = gmax15plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = course weight = -2 +global_quality = True [values] layer_height = 0.28 @@ -56,4 +57,4 @@ top_layers = 3 top_thickness = 1 bottom_layers = 2 wall_line_count = 2 -z_seam_corner = z_seam_corner_none +z_seam_corner = z_seam_corner_none \ No newline at end of file diff --git a/resources/quality/gmax15plus/gmax15plus_pla_thin.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_thin.inst.cfg similarity index 92% rename from resources/quality/gmax15plus/gmax15plus_pla_thin.inst.cfg rename to resources/quality/gmax15plus/gmax15plus_global_thin.inst.cfg index d119539d32..cc19a478e5 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_thin.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_thin.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Thin Layers definition = gmax15plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 +global_quality = True [values] layer_height = 0.16 @@ -56,4 +57,4 @@ top_layers = 5 top_thickness = 1 bottom_layers = 3 wall_line_count = 2 -z_seam_corner = z_seam_corner_none +z_seam_corner = z_seam_corner_none \ No newline at end of file diff --git a/resources/quality/gmax15plus/gmax15plus_pla_very_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_very_thick.inst.cfg similarity index 93% rename from resources/quality/gmax15plus/gmax15plus_pla_very_thick.inst.cfg rename to resources/quality/gmax15plus/gmax15plus_global_very_thick.inst.cfg index 884029a4ae..0c2661b3fd 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_very_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_very_thick.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Very Thick Layers definition = gmax15plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra_course weight = -3 +global_quality = True [values] layer_height = 0.32 @@ -55,4 +56,4 @@ top_layers = 3 top_thickness = 1 bottom_layers = 2 wall_line_count = 2 -z_seam_corner = z_seam_corner_none +z_seam_corner = z_seam_corner_none \ No newline at end of file diff --git a/resources/quality/high.inst.cfg b/resources/quality/high.inst.cfg index 1b687bf5e4..8d306c9de4 100644 --- a/resources/quality/high.inst.cfg +++ b/resources/quality/high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = fdmprinter [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg index 6a50e24678..a9138ec70b 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg index 2c8a43874a..227072b3a1 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg index 264c95c933..a8bcd8d4b0 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg @@ -4,7 +4,7 @@ name = Medium definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg index dfdfc2458c..7dd26b4f70 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg @@ -4,7 +4,7 @@ name = Medium definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg index 68eec0c753..055e804c9c 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg index 46f81d0c1a..7909892c18 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg index f614b7cc3c..979158fdcf 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg index 5525899ea7..8cc3108d0e 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg index 28b4307cea..5620ac43f8 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg @@ -4,7 +4,7 @@ name = Medium definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg index 52a8594505..4c6d81e643 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg @@ -4,7 +4,7 @@ name = Medium definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg index bf3d409050..3eb99a52ea 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg @@ -4,7 +4,7 @@ name = UltraFine definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultrahigh weight = 2 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg index 676ea84825..4a044228c0 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg @@ -4,7 +4,7 @@ name = UltraFine definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultrahigh weight = 2 diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg index 819501c727..62fe55a619 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg index 0f312aa62d..f808d5657f 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg index 25d0e65d74..c09bbed35e 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg @@ -4,7 +4,7 @@ name = Medium definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg index ebe5ab620c..27bfbbaf58 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg @@ -4,7 +4,7 @@ name = UltraFine definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultrahigh weight = 2 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg index edba5e79ce..bda943ccb3 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg index 899af00b78..17a61de974 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg index 9b7ae123df..310d93a32a 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg index 96888821e3..4d738769b4 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg @@ -4,7 +4,7 @@ name = Low definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg index c8f27f6a8f..55593d7bc2 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg index a121d921cc..a270353100 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg index 211da57f0c..9efb3ccb63 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg index 5879a76012..8c41234af8 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg index 0b437327d8..957d009be3 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg @@ -4,7 +4,7 @@ name = Low definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg index ca5ac5bd0e..546572b2a6 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg index cd6ee5356e..743cc19a20 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = kemiq_q2_gama [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg index 345fdc2f0d..ece0fa19c7 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = kemiq_q2_gama [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg index bafc8f0016..71338c8c5f 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = kemiq_q2_gama [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg index c8aa72def2..60066b5f28 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg @@ -4,7 +4,7 @@ name = Low definition = kemiq_q2_gama [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg index 62c43104e1..42ded06db1 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = kemiq_q2_gama [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_draft.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_draft.inst.cfg index 5bb967b78a..6e430754cf 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_draft.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_fast.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_fast.inst.cfg index 30641b863a..71af7efca1 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_fast.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_high.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_high.inst.cfg index 746b579c70..adc8128e6f 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_high.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_normal.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_normal.inst.cfg index e4ab115bc5..c66aec810e 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_normal.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_superdraft.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_superdraft.inst.cfg index d8a7607c5c..9d8d46e5ca 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_superdraft.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_thickerdraft.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_thickerdraft.inst.cfg index 44cad5a198..058fb2fa3c 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_thickerdraft.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_ultra.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_ultra.inst.cfg index 995074f330..6cbd615d48 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_ultra.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_verydraft.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_verydraft.inst.cfg index 373908b2bd..5c4dfe8a86 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_verydraft.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_verydraft.inst.cfg @@ -4,10 +4,10 @@ name = Low Detail Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 material = generic_abs [values] diff --git a/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg index e53aa86a94..dd99af5356 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg index 4379d9fdcb..20ea357fba 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg index a9a5720e14..5d6e1ed7b7 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg index 96b982e86a..c573ba3eb2 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg index 0550efd603..9e9181b195 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg index 9a0454fc75..54cec5c3f0 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg index 76eaa3463f..d8aded3c63 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg index 42c670920f..84a5bd316a 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Low Detail Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 global_quality = True [values] diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_draft.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_draft.inst.cfg index 96144c193f..6aad899773 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_draft.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_fast.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_fast.inst.cfg index f390034a1f..05917d9769 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_fast.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_high.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_high.inst.cfg index 693c6efc08..e2fe95f8d8 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_high.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_normal.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_normal.inst.cfg index 09c5c2b14d..387a051d64 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_normal.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_superdraft.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_superdraft.inst.cfg index 0faec6b357..f659c78f80 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_superdraft.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_thickerdraft.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_thickerdraft.inst.cfg index 988082f783..9e19c78b35 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_thickerdraft.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_ultra.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_ultra.inst.cfg index 4eb84672e7..5ae85d1eef 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_ultra.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_verydraft.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_verydraft.inst.cfg index 2f33760afa..627f70badb 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_verydraft.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_verydraft.inst.cfg @@ -4,8 +4,8 @@ name = Low Detail Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 material = generic_petg diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_draft.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_draft.inst.cfg index 9a26d1b2a1..7f970601b7 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_draft.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_fast.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_fast.inst.cfg index ef4d002ce3..b4f5ea7388 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_fast.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_high.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_high.inst.cfg index 6ff347a7cc..7bc3141980 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_high.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_normal.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_normal.inst.cfg index b6aa938b94..c7eb38439c 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_normal.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_superdraft.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_superdraft.inst.cfg index 8a4b63691f..ce0604c7cc 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_superdraft.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_thickerdraft.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_thickerdraft.inst.cfg index 98a8363c85..5ef6b1027d 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_thickerdraft.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_ultra.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_ultra.inst.cfg index 5a334bd9c1..2a24855305 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_ultra.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_verydraft.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_verydraft.inst.cfg index 7d96a9f56d..24c6c205fa 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_verydraft.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_verydraft.inst.cfg @@ -4,10 +4,10 @@ name = Low Detail Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 material = generic_pla [values] diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_draft.inst.cfg index ef579a567e..7364bdaa36 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_fast.inst.cfg index 33296bf677..fd1e5b9a6a 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_high.inst.cfg index e282847f14..836be1bad9 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_normal.inst.cfg index 2979f574a4..30672cda4a 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_superdraft.inst.cfg index 2d4d3c7461..1ef32bd44c 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_thickerdraft.inst.cfg index ed43dec3ae..9a2c26b034 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_ultra.inst.cfg index eb556fe862..d4bf86569b 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_verydraft.inst.cfg index 279f58d64f..b0f626bdaf 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_verydraft.inst.cfg @@ -4,10 +4,10 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 material = generic_abs [values] diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg index 1d81d7535e..6e3de45b42 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg index 6a5a041244..db7a7f891f 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg index 65925a1ea4..145c1a2fd2 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg index 0ac150c117..3b264639ad 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg index b02910cf12..030d82ec0f 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg index 46434555ad..a075cd54a1 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg index dfb4942b29..6846f451b1 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg index 79d9c8abb9..adee263981 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 global_quality = True [values] diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_draft.inst.cfg index 4d7d1cd848..fd1cb1969e 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_fast.inst.cfg index 1a18df9651..350ecb9e6c 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_high.inst.cfg index ac0ca29caa..661690da24 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_normal.inst.cfg index 32c5e33f0d..b056628016 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_superdraft.inst.cfg index 26f260f861..5fe909d1b8 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_thickerdraft.inst.cfg index b5bcc7d455..e423d179e0 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_ultra.inst.cfg index 6fc41e34b6..6e3dc051de 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_verydraft.inst.cfg index 8f568d3948..ca6bd27c56 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_verydraft.inst.cfg @@ -4,8 +4,8 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 material = generic_nylon diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_draft.inst.cfg index 76b210eba1..e33d685f11 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_fast.inst.cfg index 53a099f42d..e348f871b2 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_high.inst.cfg index 1a6193fbaf..311c7b23f8 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_normal.inst.cfg index 72e94d1828..4c6f55d812 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_superdraft.inst.cfg index 13914d07e7..13e57bf86a 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_thickerdraft.inst.cfg index d02a793b25..c2e07310d1 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_ultra.inst.cfg index 41b3821727..41bc8a8431 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_verydraft.inst.cfg index 23b72a3a3b..50b10e3078 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_verydraft.inst.cfg @@ -4,10 +4,10 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 material = generic_pc [values] diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_draft.inst.cfg index c2c8889127..107dfc3d24 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_fast.inst.cfg index 881311d395..6e55583184 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_high.inst.cfg index f9f1e169cb..f809902f60 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_normal.inst.cfg index 026279f012..770a51e1dd 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_superdraft.inst.cfg index 3ff71bf416..e2116bdd85 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_thickerdraft.inst.cfg index 5524ec59ea..ce902318f8 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_ultra.inst.cfg index 99d1da45c7..6b5d2604d0 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_verydraft.inst.cfg index 99874f0571..b777e97444 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_verydraft.inst.cfg @@ -4,8 +4,8 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 material = generic_petg diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_draft.inst.cfg index a64020a89e..f1080c776c 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_fast.inst.cfg index 994d6ff0fd..7b7525f007 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_high.inst.cfg index 9f64ce57f0..d0bfe599a4 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_high.inst.cfg @@ -4,8 +4,8 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 material = generic_pla diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_normal.inst.cfg index afbc03d5af..07b08619d1 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_superdraft.inst.cfg index ec30cfe2b9..74a03b7cbc 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_thickerdraft.inst.cfg index 916285385d..fc3ec719d0 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_ultra.inst.cfg index 5d627b6d35..316c4a2d17 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_verydraft.inst.cfg index 9f22fb3692..fbbefb9937 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_verydraft.inst.cfg @@ -4,7 +4,7 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality material = generic_pla weight = 0 diff --git a/resources/quality/normal.inst.cfg b/resources/quality/normal.inst.cfg index f32c87bc60..b8828f07e0 100644 --- a/resources/quality/normal.inst.cfg +++ b/resources/quality/normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = fdmprinter [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/nwa3d_a5/nwa3d_a5_best.inst.cfg b/resources/quality/nwa3d_a5/nwa3d_a5_best.inst.cfg new file mode 100644 index 0000000000..0024fb140e --- /dev/null +++ b/resources/quality/nwa3d_a5/nwa3d_a5_best.inst.cfg @@ -0,0 +1,133 @@ +[general] +version = 4 +name = Best Quality +definition = nwa3d_a5 + +[metadata] +setting_version = 7 +type = quality +quality_type = best +weight = 1 +global_quality = True + +[values] +layer_height = 0.08 +layer_height_0 = 0.24 +line_width = 0.4 +wall_line_width_0 = 100 +initial_layer_line_width_factor = 100 +wall_thickness = 0.8 +wall_0_wipe_dist = 0.2 +roofing_layer_count = 1 +top_bottom_thickness = 0.6 +top_thickness = 0.8 +top_layers = 5 +bottom_thickness = 0.6 +bottom_layers = 3 +top_bottom_pattern = lines +top_bottom_pattern_0 = lines +wall_0_inset = 0 +optimize_wall_printing_order = False +outer_inset_first = False +alternate_extra_perimeter = False +travel_compensate_overlapping_walls_enabled = True +travel_compensate_overlapping_walls_0_enabled = True +travel_compensate_overlapping_walls_x_enabled = True +wall_min_flow = 0 +fill_perimeter_gaps = everywhere +filter_out_tiny_gaps = True +fill_outline_gaps = True +xy_offset = 0 +skin_no_small_gaps_heuristic = True +skin_outline_count = 1 +ironing_enabled = False +infill_sparse_density = 20 +zig_zaggify_infill = False +infill_multiplier = 1 +infill_wall_line_count = 0 +infill_overlap = 10 +skin_overlap = 5 +infill_wipe_dist = 0.1 +gradual_infill_steps = 0 +infill_before_walls = False +infill_support_enabled = False +max_skin_angle_for_expansion = 90 +material_diameter = 1.75 +default_material_print_temperature = 220 +material_print_temperature = 220 +material_print_temperature_layer_0 = 220 +material_initial_print_temperature = 220 +material_final_print_temperature = 220 +default_material_bed_temperature = 0 +material_bed_temperature = 0 +material_flow = 100 +retraction_enable = True +retract_at_layer_change = False +retraction_amount = 5 +retraction_speed = 45 +retraction_extra_prime_amount = 0 +retraction_min_travel = 0.8 +retraction_count_max = 90 +retraction_extrusion_window = 5 +limit_support_retractions = True +switch_extruder_retraction_amount = 16 +switch_extruder_retraction_speeds = 20 +speed_print = 30 +speed_travel = 150 +speed_layer_0 = 10 +speed_travel_layer_0 = 50 +max_feedrate_z_override = 0 +speed_slowdown_layers = 2 +speed_equalize_flow_enabled = False +acceleration_enabled = False +acceleration_roofing = 3000 +jerk_enabled = False +retraction_combing = off +travel_retract_before_outer_wall = False +retraction_hop_enabled = False +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_0 = 0 +cool_fan_full_at_height = 0.24 +cool_lift_head = False +support_enable = True +support_type = everywhere +support_angle = 50 +support_pattern = grid +support_wall_count = 0 +zig_zaggify_support = False +support_infill_rate = 20 +support_infill_angle = 0 +support_brim_enable = True +support_brim_line_count = 5 +support_z_distance = 0.18 +support_xy_distance = 0.7 +support_xy_distance_overhang = 0.2 +support_bottom_stair_step_height = 0.3 +support_bottom_stair_step_width = 5.0 +support_join_distance = 2.0 +support_offset = 0.2 +gradual_support_infill_steps = 0 +support_roof_enable = True +support_bottom_enable = False +support_roof_height = 0.45 +support_roof_density = 45 +support_roof_pattern = lines +support_fan_enable = False +support_use_towers = True +support_tower_diameter = 3 +support_tower_roof_angle = 65 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 3 +meshfix_union_all = True +meshfix_union_all_remove_holes = False +meshfix_extensive_stitching = False +meshfix_keep_open_polygons = False +multiple_mesh_overlap = 0.16 +carve_multiple_volumes = False + + + + + diff --git a/resources/quality/nwa3d_a5/nwa3d_a5_fast.inst.cfg b/resources/quality/nwa3d_a5/nwa3d_a5_fast.inst.cfg new file mode 100644 index 0000000000..400dff7dff --- /dev/null +++ b/resources/quality/nwa3d_a5/nwa3d_a5_fast.inst.cfg @@ -0,0 +1,128 @@ +[general] +version = 4 +name = Fast Quality +definition = nwa3d_a5 + +[metadata] +setting_version = 7 +type = quality +quality_type = fast +weight = -1 +global_quality = True + +[values] +layer_height = 0.24 +layer_height_0 = 0.24 +line_width = 0.4 +wall_line_width_0 = 100 +initial_layer_line_width_factor = 100 +wall_thickness = 0.8 +wall_0_wipe_dist = 0.2 +roofing_layer_count = 1 +top_bottom_thickness = 0.6 +top_thickness = 0.8 +top_layers = 5 +bottom_thickness = 0.6 +bottom_layers = 3 +top_bottom_pattern = lines +top_bottom_pattern_0 = lines +wall_0_inset = 0 +optimize_wall_printing_order = False +outer_inset_first = False +alternate_extra_perimeter = False +travel_compensate_overlapping_walls_enabled = True +travel_compensate_overlapping_walls_0_enabled = True +travel_compensate_overlapping_walls_x_enabled = True +wall_min_flow = 0 +fill_perimeter_gaps = everywhere +filter_out_tiny_gaps = True +fill_outline_gaps = True +xy_offset = 0 +skin_no_small_gaps_heuristic = True +skin_outline_count = 1 +ironing_enabled = False +infill_sparse_density = 15 +zig_zaggify_infill = False +infill_multiplier = 1 +infill_wall_line_count = 0 +infill_overlap = 10 +skin_overlap = 5 +infill_wipe_dist = 0.1 +gradual_infill_steps = 0 +infill_before_walls = False +infill_support_enabled = False +max_skin_angle_for_expansion = 90 +material_diameter = 1.75 +default_material_print_temperature = 220 +material_print_temperature = 220 +material_print_temperature_layer_0 = 220 +material_initial_print_temperature = 220 +material_final_print_temperature = 220 +default_material_bed_temperature = 0 +material_bed_temperature = 0 +material_flow = 100 +retraction_enable = True +retract_at_layer_change = False +retraction_amount = 5 +retraction_speed = 45 +retraction_extra_prime_amount = 0 +retraction_min_travel = 0.8 +retraction_count_max = 90 +retraction_extrusion_window = 5 +limit_support_retractions = True +switch_extruder_retraction_amount = 16 +switch_extruder_retraction_speeds = 20 +speed_print = 60 +speed_travel = 150 +speed_layer_0 = 10 +speed_travel_layer_0 = 50 +max_feedrate_z_override = 0 +speed_slowdown_layers = 2 +speed_equalize_flow_enabled = False +acceleration_enabled = False +acceleration_roofing = 3000 +jerk_enabled = False +retraction_combing = off +travel_retract_before_outer_wall = False +retraction_hop_enabled = False +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_0 = 0 +cool_fan_full_at_height = 0.48 +cool_lift_head = False +support_enable = True +support_type = everywhere +support_angle = 50 +support_pattern = grid +support_wall_count = 0 +zig_zaggify_support = False +support_infill_rate = 15 +support_infill_angle = 0 +support_brim_enable = True +support_brim_line_count = 5 +support_z_distance = 0.3 +support_xy_distance = 0.7 +support_xy_distance_overhang = 0.2 +support_bottom_stair_step_height = 0.3 +support_bottom_stair_step_width = 5.0 +support_join_distance = 2.0 +support_offset = 0.2 +gradual_support_infill_steps = 0 +support_roof_enable = True +support_bottom_enable = False +support_roof_height = 0.45 +support_roof_density = 45 +support_roof_pattern = lines +support_fan_enable = False +support_use_towers = True +support_tower_diameter = 3 +support_tower_roof_angle = 65 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 3 +meshfix_union_all = True +meshfix_union_all_remove_holes = False +meshfix_extensive_stitching = False +meshfix_keep_open_polygons = False +multiple_mesh_overlap = 0.16 +carve_multiple_volumes = False diff --git a/resources/quality/nwa3d_a5/nwa3d_a5_normal.inst.cfg b/resources/quality/nwa3d_a5/nwa3d_a5_normal.inst.cfg new file mode 100644 index 0000000000..635cde4494 --- /dev/null +++ b/resources/quality/nwa3d_a5/nwa3d_a5_normal.inst.cfg @@ -0,0 +1,128 @@ +[general] +version = 4 +name = Normal Quality +definition = nwa3d_a5 + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +global_quality = True + +[values] +layer_height = 0.16 +layer_height_0 = 0.24 +line_width = 0.4 +wall_line_width_0 = 100 +initial_layer_line_width_factor = 100 +wall_thickness = 0.8 +wall_0_wipe_dist = 0.2 +roofing_layer_count = 1 +top_bottom_thickness = 0.6 +top_thickness = 0.8 +top_layers = 5 +bottom_thickness = 0.6 +bottom_layers = 3 +top_bottom_pattern = lines +top_bottom_pattern_0 = lines +wall_0_inset = 0 +optimize_wall_printing_order = False +outer_inset_first = False +alternate_extra_perimeter = False +travel_compensate_overlapping_walls_enabled = True +travel_compensate_overlapping_walls_0_enabled = True +travel_compensate_overlapping_walls_x_enabled = True +wall_min_flow = 0 +fill_perimeter_gaps = everywhere +filter_out_tiny_gaps = True +fill_outline_gaps = True +xy_offset = 0 +skin_no_small_gaps_heuristic = True +skin_outline_count = 1 +ironing_enabled = False +infill_sparse_density = 20 +zig_zaggify_infill = False +infill_multiplier = 1 +infill_wall_line_count = 0 +infill_overlap = 10 +skin_overlap = 5 +infill_wipe_dist = 0.1 +gradual_infill_steps = 0 +infill_before_walls = False +infill_support_enabled = False +max_skin_angle_for_expansion = 90 +material_diameter = 1.75 +default_material_print_temperature = 220 +material_print_temperature = 220 +material_print_temperature_layer_0 = 220 +material_initial_print_temperature = 220 +material_final_print_temperature = 220 +default_material_bed_temperature = 0 +material_bed_temperature = 0 +material_flow = 100 +retraction_enable = True +retract_at_layer_change = False +retraction_amount = 5 +retraction_speed = 45 +retraction_extra_prime_amount = 0 +retraction_min_travel = 0.8 +retraction_count_max = 90 +retraction_extrusion_window = 5 +limit_support_retractions = True +switch_extruder_retraction_amount = 16 +switch_extruder_retraction_speeds = 20 +speed_print = 50 +speed_travel = 150 +speed_layer_0 = 10 +speed_travel_layer_0 = 50 +max_feedrate_z_override = 0 +speed_slowdown_layers = 2 +speed_equalize_flow_enabled = False +acceleration_enabled = False +acceleration_roofing = 3000 +jerk_enabled = False +retraction_combing = off +travel_retract_before_outer_wall = False +retraction_hop_enabled = False +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_0 = 0 +cool_fan_full_at_height = 0.32 +cool_lift_head = False +support_enable = True +support_type = everywhere +support_angle = 50 +support_pattern = grid +support_wall_count = 0 +zig_zaggify_support = False +support_infill_rate = 20 +support_infill_angle = 0 +support_brim_enable = True +support_brim_line_count = 5 +support_z_distance = 0.21 +support_xy_distance = 0.7 +support_xy_distance_overhang = 0.2 +support_bottom_stair_step_height = 0.3 +support_bottom_stair_step_width = 5.0 +support_join_distance = 2.0 +support_offset = 0.2 +gradual_support_infill_steps = 0 +support_roof_enable = True +support_bottom_enable = False +support_roof_height = 0.45 +support_roof_density = 45 +support_roof_pattern = lines +support_fan_enable = False +support_use_towers = True +support_tower_diameter = 3 +support_tower_roof_angle = 65 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 3 +meshfix_union_all = True +meshfix_union_all_remove_holes = False +meshfix_extensive_stitching = False +meshfix_keep_open_polygons = False +multiple_mesh_overlap = 0.16 +carve_multiple_volumes = False diff --git a/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg new file mode 100644 index 0000000000..dab819cc38 --- /dev/null +++ b/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Coarse +definition = peopoly_moai + +[metadata] +setting_version = 7 +type = quality +quality_type = coarse +weight = 3 + +[values] +layer_height = 0.08 +speed_print = 90 +speed_travel = 120 +speed_travel_layer_0 = 100 +speed_wall = 90 diff --git a/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg new file mode 100644 index 0000000000..feb005e39c --- /dev/null +++ b/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Draft +definition = peopoly_moai + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 + +[values] +layer_height = 0.1 +speed_print = 85 +speed_travel = 120 +speed_travel_layer_0 = 100 +speed_wall = 85 +speed_slowdown_layers = 2 diff --git a/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg new file mode 100644 index 0000000000..46bd8f4a63 --- /dev/null +++ b/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Extra High +definition = peopoly_moai + +[metadata] +setting_version = 7 +type = quality +quality_type = extra_high +weight = 0 + +[values] +layer_height = 0.02 +speed_print = 185 +speed_travel = 185 +speed_travel_layer_0 = 100 +speed_wall = 185 +speed_slowdown_layers = 5 diff --git a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg index 36b5f21ff8..2b951c6e4e 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg @@ -1,17 +1,18 @@ [general] version = 4 -name = Extra Fine +name = High definition = peopoly_moai [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 [values] -infill_sparse_density = 70 -layer_height = 0.05 -top_bottom_thickness = 0.4 -wall_thickness = 0.4 -speed_print = 150 +layer_height = 0.04 +speed_print = 140 +speed_travel = 140 +speed_travel_layer_0 = 100 +speed_wall = 140 +speed_slowdown_layers = 4 diff --git a/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg deleted file mode 100644 index 48ffd07f33..0000000000 --- a/resources/quality/peopoly_moai/peopoly_moai_max.inst.cfg +++ /dev/null @@ -1,17 +0,0 @@ -[general] -version = 4 -name = Maximum Quality -definition = peopoly_moai - -[metadata] -setting_version = 5 -type = quality -quality_type = extra_high -weight = 2 - -[values] -infill_sparse_density = 70 -layer_height = 0.025 -top_bottom_thickness = 0.4 -wall_thickness = 0.4 -speed_print = 200 diff --git a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg index f5fe799ac3..b965862a16 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg @@ -1,17 +1,17 @@ [general] version = 4 -name = Fine +name = Normal definition = peopoly_moai [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 [values] -infill_sparse_density = 70 -layer_height = 0.1 -top_bottom_thickness = 0.4 -wall_thickness = 0.4 -speed_print = 100 +layer_height = 0.06 +speed_print = 120 +speed_travel = 120 +speed_travel_layer_0 = 100 +speed_wall = 120 diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg index b059b3c65f..250c3bd1d5 100644 --- a/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg +++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = tevo_blackwidow [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -25,7 +25,6 @@ support_angle = 60 support_enable = True support_interface_enable = True support_pattern = triangles -support_roof_enable = True support_type = everywhere support_use_towers = False support_xy_distance = 0.7 diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg index 6a6c605c00..0dff2b94ca 100644 --- a/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg +++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tevo_blackwidow [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -25,7 +25,6 @@ support_angle = 60 support_enable = True support_interface_enable = True support_pattern = triangles -support_roof_enable = True support_type = everywhere support_use_towers = False support_xy_distance = 0.7 diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg index 7cba03853f..e5b9290cad 100644 --- a/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg +++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tevo_blackwidow [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -25,7 +25,6 @@ support_angle = 60 support_enable = True support_interface_enable = True support_pattern = triangles -support_roof_enable = True support_type = everywhere support_use_towers = False support_xy_distance = 0.7 diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.2_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.2_abs_high.inst.cfg new file mode 100644 index 0000000000..2fa65465ff --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.2_abs_high.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_abs +variant = 0.2mm + +[values] + + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.3_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.3_abs_high.inst.cfg new file mode 100644 index 0000000000..9297c03ae6 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.3_abs_high.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_abs +variant = 0.3mm + +[values] + + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.4_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.4_abs_high.inst.cfg new file mode 100644 index 0000000000..f3a6a263a8 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.4_abs_high.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_abs +variant = 0.4mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.4_abs_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.4_abs_normal.inst.cfg new file mode 100644 index 0000000000..5bb1cde436 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.4_abs_normal.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_abs +variant = 0.4mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_draft.inst.cfg new file mode 100644 index 0000000000..d83e4e6b4c --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_draft.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_abs +variant = 0.5mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_high.inst.cfg new file mode 100644 index 0000000000..b3a9fc36c6 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_high.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_abs +variant = 0.5mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_normal.inst.cfg new file mode 100644 index 0000000000..6432b76d72 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_normal.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_abs +variant = 0.5mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_coarse.inst.cfg new file mode 100644 index 0000000000..0c5a2c8a5d --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_coarse.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = coarse +weight = -3 +material = generic_abs +variant = 0.6mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_draft.inst.cfg new file mode 100644 index 0000000000..361aba7d6a --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_draft.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_abs +variant = 0.6mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_high.inst.cfg new file mode 100644 index 0000000000..bbc11d52a0 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_high.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_abs +variant = 0.6mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_normal.inst.cfg new file mode 100644 index 0000000000..7ac4620015 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_normal.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_abs +variant = 0.6mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_coarse.inst.cfg new file mode 100644 index 0000000000..3653ff729a --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_coarse.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = coarse +weight = -3 +material = generic_abs +variant = 0.8mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_draft.inst.cfg new file mode 100644 index 0000000000..4c9de95353 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_draft.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_abs +variant = 0.8mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_high.inst.cfg new file mode 100644 index 0000000000..7b29215d51 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_high.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_abs +variant = 0.8mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_normal.inst.cfg new file mode 100644 index 0000000000..439445ef85 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_normal.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_abs +variant = 0.8mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_coarse.inst.cfg new file mode 100644 index 0000000000..5b1d5ce3e6 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_coarse.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = coarse +weight = -3 +material = generic_abs +variant = 1.0mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_draft.inst.cfg new file mode 100644 index 0000000000..e79205dc3f --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_draft.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_abs +variant = 1.0mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_extra_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_extra_coarse.inst.cfg new file mode 100644 index 0000000000..ba0a3cd096 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_extra_coarse.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Extra Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = extra coarse +weight = -4 +material = generic_abs +variant = 1.0mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_high.inst.cfg new file mode 100644 index 0000000000..001e03a182 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_high.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_abs +variant = 1.0mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_normal.inst.cfg new file mode 100644 index 0000000000..b1d8837cc6 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_normal.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_abs +variant = 1.0mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.2_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.2_petg_high.inst.cfg new file mode 100644 index 0000000000..5ccbfc8ac3 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.2_petg_high.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_petg +variant = 0.2mm + +[values] + + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.3_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.3_petg_high.inst.cfg new file mode 100644 index 0000000000..3f8e4ee63b --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.3_petg_high.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_petg +variant = 0.3mm + +[values] + + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.4_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.4_petg_high.inst.cfg new file mode 100644 index 0000000000..7514b8828b --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.4_petg_high.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_petg +variant = 0.4mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.4_petg_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.4_petg_normal.inst.cfg new file mode 100644 index 0000000000..cbc8cf34fa --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.4_petg_normal.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_petg +variant = 0.4mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_draft.inst.cfg new file mode 100644 index 0000000000..31c17f31f3 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_draft.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_petg +variant = 0.5mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_high.inst.cfg new file mode 100644 index 0000000000..e5d69c80aa --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_high.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_petg +variant = 0.5mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_normal.inst.cfg new file mode 100644 index 0000000000..828b2a7b83 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_normal.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_petg +variant = 0.5mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_coarse.inst.cfg new file mode 100644 index 0000000000..1bdd2da466 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_coarse.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = coarse +weight = -3 +material = generic_petg +variant = 0.6mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_draft.inst.cfg new file mode 100644 index 0000000000..bf1ecff90b --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_draft.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_petg +variant = 0.6mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_high.inst.cfg new file mode 100644 index 0000000000..258f3a1b40 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_high.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_petg +variant = 0.6mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_normal.inst.cfg new file mode 100644 index 0000000000..d6d0013fe7 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_normal.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_petg +variant = 0.6mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_coarse.inst.cfg new file mode 100644 index 0000000000..d1200760c0 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_coarse.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = coarse +weight = -3 +material = generic_petg +variant = 0.8mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_draft.inst.cfg new file mode 100644 index 0000000000..9446747467 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_draft.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_petg +variant = 0.8mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_high.inst.cfg new file mode 100644 index 0000000000..9cc1e992e1 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_high.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_petg +variant = 0.8mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_normal.inst.cfg new file mode 100644 index 0000000000..87ffb204a0 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_normal.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_petg +variant = 0.8mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_coarse.inst.cfg new file mode 100644 index 0000000000..1832dbf90d --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_coarse.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = coarse +weight = -3 +material = generic_petg +variant = 1.0mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_draft.inst.cfg new file mode 100644 index 0000000000..5c331d5d5f --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_draft.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_petg +variant = 1.0mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_extra_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_extra_coarse.inst.cfg new file mode 100644 index 0000000000..f438db32af --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_extra_coarse.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Extra Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = extra coarse +weight = -4 +material = generic_petg +variant = 1.0mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_high.inst.cfg new file mode 100644 index 0000000000..250b3be05d --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_high.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_petg +variant = 1.0mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_normal.inst.cfg new file mode 100644 index 0000000000..8389757165 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_normal.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_petg +variant = 1.0mm + +[values] + diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.2_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.2_pla_high.inst.cfg new file mode 100644 index 0000000000..d277521cff --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.2_pla_high.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_pla +variant = 0.2mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.3_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.3_pla_high.inst.cfg new file mode 100644 index 0000000000..cf47f42844 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.3_pla_high.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_pla +variant = 0.3mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.4_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.4_pla_high.inst.cfg new file mode 100644 index 0000000000..f7871f6d65 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.4_pla_high.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_pla +variant = 0.4mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.4_pla_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.4_pla_normal.inst.cfg new file mode 100644 index 0000000000..4610ee23b4 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.4_pla_normal.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_pla +variant = 0.4mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_draft.inst.cfg new file mode 100644 index 0000000000..ec35a3757c --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Draft +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_pla +variant = 0.5mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_high.inst.cfg new file mode 100644 index 0000000000..58de6bb4a0 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_high.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_pla +variant = 0.5mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_normal.inst.cfg new file mode 100644 index 0000000000..3673a5ee3b --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_normal.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_pla +variant = 0.5mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_draft.inst.cfg new file mode 100644 index 0000000000..9765868619 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Draft +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_pla +variant = 0.6mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_high.inst.cfg new file mode 100644 index 0000000000..53887ab16e --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_high.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_pla +variant = 0.6mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_normal.inst.cfg new file mode 100644 index 0000000000..f9beaadd51 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_normal.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_pla +variant = 0.6mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_coarse.inst.cfg new file mode 100644 index 0000000000..4317e7796e --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_coarse.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = coarse +weight = -3 +material = generic_pla +variant = 0.8mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_draft.inst.cfg new file mode 100644 index 0000000000..2054c48f17 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Draft +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_pla +variant = 0.8mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_high.inst.cfg new file mode 100644 index 0000000000..6e2dfecbef --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_high.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_pla +variant = 0.8mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_normal.inst.cfg new file mode 100644 index 0000000000..05c8ecaa53 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_normal.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_pla +variant = 0.8mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_coarse.inst.cfg new file mode 100644 index 0000000000..972c16c777 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_coarse.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = coarse +weight = -3 +material = generic_pla +variant = 1.0mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_draft.inst.cfg new file mode 100644 index 0000000000..52efa5b8bb --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Draft +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_pla +variant = 1.0mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_extra_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_extra_coarse.inst.cfg new file mode 100644 index 0000000000..2e7e047ed5 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_extra_coarse.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Extra Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = extra coarse +weight = -4 +material = generic_pla +variant = 1.0mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_high.inst.cfg new file mode 100644 index 0000000000..18ea58c1a8 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_high.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = high +weight = 1 +material = generic_pla +variant = 1.0mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_normal.inst.cfg new file mode 100644 index 0000000000..b814c59b0f --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_normal.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_pla +variant = 1.0mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Coarse_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Coarse_Quality.inst.cfg new file mode 100644 index 0000000000..2cca0b9225 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Coarse_Quality.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = coarse +weight = -3 +global_quality = True + +[values] +layer_height = 0.4 +layer_height_0 = =layer_height \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Draft_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Draft_Quality.inst.cfg new file mode 100644 index 0000000000..d88a6c95a3 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Draft_Quality.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Draft +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +global_quality = True + +[values] +layer_height = 0.25 +layer_height_0 = =layer_height \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Extra_Coarse_Quality.inst.cfg new file mode 100644 index 0000000000..8e34a42f62 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Extra_Coarse_Quality.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Extra Coarse +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = extra coarse +weight = -4 +global_quality = True + +[values] +layer_height = 0.5 +layer_height_0 = =layer_height \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_High_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_High_Quality.inst.cfg new file mode 100644 index 0000000000..160af128ce --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_High_Quality.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version =6 +type = quality +quality_type = high +weight = 1 +global_quality = True + +[values] +layer_height = 0.1 +layer_height_0 = 0.1 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Normal_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..dd4a262fbf --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Normal_Quality.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +global_quality = True + +[values] +layer_height = 0.2 +layer_height_0 = 0.25 \ No newline at end of file diff --git a/resources/quality/tizyx_k25/tizyx_k25_normal.inst.cfg b/resources/quality/tizyx/tizyx_k25/tizyx_k25_normal.inst.cfg similarity index 73% rename from resources/quality/tizyx_k25/tizyx_k25_normal.inst.cfg rename to resources/quality/tizyx/tizyx_k25/tizyx_k25_normal.inst.cfg index 8c6349d27a..1a09737baa 100644 --- a/resources/quality/tizyx_k25/tizyx_k25_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_k25/tizyx_k25_normal.inst.cfg @@ -5,7 +5,7 @@ definition = tizyx_k25 [metadata] quality_type = normal -setting_version = 5 +setting_version = 7 type = quality global_quality = True @@ -13,19 +13,15 @@ global_quality = True adhesion_type = skirt skirt_line_count = 2 skirt_gap = 2 -cool_fan_speed_0 = 100 fill_outline_gaps = True -infill_angles = [0,90 ] infill_sparse_density = 15 -layer_height = 0.2 -layer_height_0 = 0.25 material_diameter = 1.75 retraction_amount = 2.5 retraction_min_travel = 2 retraction_speed = 30 -skin_angles = [0,90] speed_print = 60 speed_topbottom = 50 speed_wall_0 = 40 top_layers = 4 wall_line_count = 2 +cool_min_layer_time = 11 diff --git a/resources/quality/ultimaker2/um2_draft.inst.cfg b/resources/quality/ultimaker2/um2_draft.inst.cfg index 8c34d2c09d..121f6f0404 100644 --- a/resources/quality/ultimaker2/um2_draft.inst.cfg +++ b/resources/quality/ultimaker2/um2_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2/um2_fast.inst.cfg b/resources/quality/ultimaker2/um2_fast.inst.cfg index 084ed05f92..8dc9b56082 100644 --- a/resources/quality/ultimaker2/um2_fast.inst.cfg +++ b/resources/quality/ultimaker2/um2_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2/um2_high.inst.cfg b/resources/quality/ultimaker2/um2_high.inst.cfg index 83bb6bb972..5bb17480b6 100644 --- a/resources/quality/ultimaker2/um2_high.inst.cfg +++ b/resources/quality/ultimaker2/um2_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2/um2_normal.inst.cfg b/resources/quality/ultimaker2/um2_normal.inst.cfg index febee8581f..1235fe27db 100644 --- a/resources/quality/ultimaker2/um2_normal.inst.cfg +++ b/resources/quality/ultimaker2/um2_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg index ff830ae660..544deae3a2 100644 --- a/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -15,7 +15,6 @@ variant = 0.25 mm cool_min_layer_time = 5 cool_min_speed = 10 infill_sparse_density = 22 -layer_height = 0.06 speed_layer_0 = =round(speed_print * 30 / 30) speed_print = 30 top_bottom_thickness = 0.72 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg index 94ea62a7ca..f32deec07a 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -15,7 +15,6 @@ variant = 0.4 mm cool_min_layer_time = 5 cool_min_speed = 10 infill_sparse_density = 18 -layer_height = 0.15 speed_layer_0 = =round(speed_print * 30 / 60) speed_print = 60 speed_topbottom = =math.ceil(speed_print * 30 / 60) diff --git a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg index 03de437ee2..8c50d00108 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -15,7 +15,6 @@ variant = 0.4 mm cool_min_layer_time = 5 cool_min_speed = 10 infill_sparse_density = 22 -layer_height = 0.06 speed_layer_0 = =round(speed_print * 30 / 50) speed_print = 50 speed_topbottom = =math.ceil(speed_print * 20 / 50) diff --git a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg index 836d866eab..e2edba3039 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -15,7 +15,6 @@ variant = 0.4 mm cool_min_layer_time = 5 cool_min_speed = 10 infill_sparse_density = 20 -layer_height = 0.1 speed_layer_0 = =round(speed_print * 30 / 50) speed_print = 50 speed_topbottom = =math.ceil(speed_print * 20 / 50) diff --git a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg index de55623c0f..170ccb06b2 100644 --- a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg @@ -4,9 +4,9 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = normal +quality_type = fast weight = 0 material = generic_pla variant = 0.6 mm @@ -15,7 +15,6 @@ variant = 0.6 mm cool_min_layer_time = 5 cool_min_speed = 10 infill_sparse_density = 20 -layer_height = 0.15 speed_layer_0 = =round(speed_print * 30 / 55) speed_print = 55 speed_topbottom = =math.ceil(speed_print * 20 / 55) diff --git a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg index c96260d52f..1b5bb17054 100644 --- a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg @@ -4,9 +4,9 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = fast +quality_type = draft weight = -1 material = generic_pla variant = 0.8 mm @@ -15,7 +15,6 @@ variant = 0.8 mm cool_min_layer_time = 5 cool_min_speed = 10 infill_sparse_density = 20 -layer_height = 0.2 speed_layer_0 = =round(speed_print * 30 / 40) speed_print = 40 speed_wall_0 = =math.ceil(speed_print * 25 / 40) diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg index 886daf58e2..b2e7e246d5 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -17,7 +17,6 @@ cool_min_layer_time = 3 cool_min_layer_time_fan_speed_max = 15 cool_min_speed = 10 infill_sparse_density = 22 -layer_height = 0.06 speed_layer_0 = =round(speed_print * 30 / 30) speed_print = 30 top_bottom_thickness = 0.72 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg index b727acc510..13d2593e5f 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -17,7 +17,6 @@ cool_min_layer_time = 3 cool_min_layer_time_fan_speed_max = 15 cool_min_speed = 10 infill_sparse_density = 18 -layer_height = 0.15 speed_layer_0 = =round(speed_print * 30 / 55) speed_print = 55 speed_topbottom = =math.ceil(speed_print * 30 / 55) diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg index 20e217315b..03e21b62cf 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -17,7 +17,6 @@ cool_min_layer_time = 3 cool_min_layer_time_fan_speed_max = 15 cool_min_speed = 10 infill_sparse_density = 22 -layer_height = 0.06 speed_layer_0 = =round(speed_print * 30 / 45) speed_print = 45 speed_wall = =math.ceil(speed_print * 30 / 45) diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg index 853a87c751..5713c9202f 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -17,7 +17,6 @@ cool_min_layer_time = 3 cool_min_layer_time_fan_speed_max = 15 cool_min_speed = 10 infill_sparse_density = 20 -layer_height = 0.1 speed_layer_0 = =round(speed_print * 30 / 45) speed_print = 45 speed_wall = =math.ceil(speed_print * 30 / 45) diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg index 6d3ef94b9d..7ccbadb29d 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg @@ -4,9 +4,9 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = normal +quality_type = fast weight = 0 material = generic_abs variant = 0.6 mm @@ -17,7 +17,6 @@ cool_min_layer_time = 3 cool_min_layer_time_fan_speed_max = 20 cool_min_speed = 20 infill_sparse_density = 20 -layer_height = 0.15 speed_infill = =math.ceil(speed_print * 55 / 40) speed_layer_0 = =round(speed_print * 30 / 40) speed_print = 40 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg index 7b39ce966a..0c961f2dc3 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg @@ -4,9 +4,9 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = fast +quality_type = draft weight = -1 material = generic_abs variant = 0.8 mm @@ -17,7 +17,6 @@ cool_min_layer_time = 3 cool_min_layer_time_fan_speed_max = 25 cool_min_speed = 15 infill_sparse_density = 20 -layer_height = 0.2 speed_layer_0 = =round(speed_print * 30 / 40) speed_print = 40 top_bottom_thickness = 1.2 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg index eca5070eb9..590e2c4ff0 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = -1 +weight = 1 material = generic_cpe variant = 0.25 mm @@ -17,7 +17,6 @@ cool_min_layer_time = 2 cool_min_layer_time_fan_speed_max = 15 cool_min_speed = 15 infill_sparse_density = 22 -layer_height = 0.06 speed_layer_0 = =round(speed_print * 30 / 30) speed_print = 30 top_bottom_thickness = 0.72 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg index 1e181e23d1..ee65c14ac3 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -17,7 +17,6 @@ cool_min_layer_time = 3 cool_min_layer_time_fan_speed_max = 15 cool_min_speed = 10 infill_sparse_density = 18 -layer_height = 0.15 speed_layer_0 = =round(speed_print * 30 / 45) speed_print = 45 speed_travel = 150 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg index 9ffb8a05bb..26f8b4ba24 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -17,7 +17,6 @@ cool_min_layer_time = 2 cool_min_layer_time_fan_speed_max = 15 cool_min_speed = 15 infill_sparse_density = 22 -layer_height = 0.06 speed_layer_0 = =round(speed_print * 30 / 45) speed_print = 45 speed_wall = =math.ceil(speed_print * 30 / 45) diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg index ee7101f2ec..79eb50c3fa 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -17,7 +17,6 @@ cool_min_layer_time = 3 cool_min_layer_time_fan_speed_max = 15 cool_min_speed = 10 infill_sparse_density = 20 -layer_height = 0.1 speed_layer_0 = =round(speed_print * 30 / 45) speed_print = 45 speed_wall = =math.ceil(speed_print * 30 / 45) diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg index d2de84eae6..35e6644a07 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg @@ -4,9 +4,9 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = normal +quality_type = fast weight = 0 material = generic_cpe variant = 0.6 mm @@ -17,7 +17,6 @@ cool_min_layer_time = 5 cool_min_layer_time_fan_speed_max = 20 cool_min_speed = 8 infill_sparse_density = 20 -layer_height = 0.15 speed_layer_0 = =round(speed_print * 30 / 40) speed_print = 40 top_bottom_thickness = 1.2 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg index 581dc0368d..ec300d3aad 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg @@ -4,9 +4,9 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = fast +quality_type = draft weight = -1 material = generic_cpe variant = 0.8 mm @@ -17,7 +17,6 @@ cool_min_layer_time = 3 cool_min_layer_time_fan_speed_max = 25 cool_min_speed = 8 infill_sparse_density = 20 -layer_height = 0.2 speed_layer_0 = =round(speed_print * 30 / 40) speed_print = 40 top_bottom_thickness = 1.2 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg index 7549c0081d..6147f5d138 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -20,7 +20,6 @@ cool_min_speed = 8 infill_overlap = 5 infill_sparse_density = 30 layer_0_z_overlap = 0.22 -layer_height = 0.2 line_width = 0.38 raft_airgap = 0.37 raft_base_line_spacing = 1.6 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg index b1e5552562..fa54b0f89e 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg @@ -4,9 +4,9 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = normal +quality_type = fast weight = 0 material = generic_cpe_plus variant = 0.4 mm @@ -20,7 +20,6 @@ cool_min_speed = 8 infill_overlap = 5 infill_sparse_density = 30 layer_0_z_overlap = 0.22 -layer_height = 0.15 line_width = 0.38 raft_airgap = 0.37 raft_base_line_spacing = 1.6 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg index 616f13f110..f795f07013 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg @@ -4,9 +4,9 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = draft +quality_type = slightlycoarse weight = -2 material = generic_cpe_plus variant = 0.6 mm @@ -20,7 +20,6 @@ cool_min_speed = 8 infill_overlap = 5 infill_sparse_density = 35 layer_0_z_overlap = 0.22 -layer_height = 0.3 line_width = 0.57 raft_airgap = 0.37 raft_base_line_spacing = 2.4 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg index d28dc76af8..faf1b2d18d 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg @@ -4,9 +4,9 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = normal +quality_type = draft weight = 0 material = generic_cpe_plus variant = 0.6 mm @@ -20,7 +20,6 @@ cool_min_speed = 8 infill_overlap = 5 infill_sparse_density = 35 layer_0_z_overlap = 0.22 -layer_height = 0.22 line_width = 0.57 raft_airgap = 0.37 raft_base_line_spacing = 2.4 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg index 1c4fa746ad..5edd73eeba 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg @@ -4,9 +4,9 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = draft +quality_type = slightlycoarse weight = -2 material = generic_cpe_plus variant = 0.8 mm @@ -20,7 +20,6 @@ cool_min_layer_time = 3 infill_overlap = 5 infill_sparse_density = 40 layer_0_z_overlap = 0.22 -layer_height = 0.3 raft_airgap = 0.37 raft_base_line_width = 1.6 raft_interface_line_spacing = 1.8 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg index e40d6efc58..7772ba72d6 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg @@ -4,9 +4,9 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = normal +quality_type = draft weight = 0 material = generic_cpe_plus variant = 0.8 mm @@ -20,7 +20,6 @@ cool_min_layer_time = 3 infill_overlap = 5 infill_sparse_density = 40 layer_0_z_overlap = 0.22 -layer_height = 0.2 raft_airgap = 0.37 raft_base_line_width = 1.6 raft_interface_line_spacing = 1.8 diff --git a/resources/quality/ultimaker2_plus/um2p_global_Coarse_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Coarse_Quality.inst.cfg index a10cb4030c..9cfbefa641 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Coarse_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse Quality definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -4 diff --git a/resources/quality/ultimaker2_plus/um2p_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Draft_Quality.inst.cfg index 5645bbee0b..1f4f9af746 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Draft_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Draft Quality definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Extra_Coarse_Quality.inst.cfg index d9afc804ba..0aba820d7e 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Extra_Coarse_Quality.inst.cfg @@ -4,9 +4,9 @@ name = Extra Coarse Quality definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = extra coarse +quality_type = extracoarse weight = -3 global_quality = True diff --git a/resources/quality/ultimaker2_plus/um2p_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Fast_Quality.inst.cfg index 7fd6d54c87..29e649ffe0 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Fast_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_global_High_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_High_Quality.inst.cfg index ade183d14a..12f449fbd1 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_High_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 global_quality = True [values] diff --git a/resources/quality/ultimaker2_plus/um2p_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Normal_Quality.inst.cfg index 76c7b8163c..908d0e42ab 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_global_Slightly_Coarse_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Slightly_Coarse_Quality.inst.cfg new file mode 100644 index 0000000000..35dbbeedd7 --- /dev/null +++ b/resources/quality/ultimaker2_plus/um2p_global_Slightly_Coarse_Quality.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Coarse Quality +definition = ultimaker2_plus + +[metadata] +setting_version = 6 +type = quality +quality_type = slightlycoarse +weight = -4 +global_quality = True + +[values] +layer_height = 0.3 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg index 2cab693c74..0389a8fec3 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -20,7 +20,6 @@ cool_min_speed = 15 infill_overlap = 5 infill_sparse_density = 25 layer_0_z_overlap = 0.1 -layer_height = 0.06 raft_airgap = 0.15 raft_base_line_width = 0.5 raft_interface_line_spacing = 0.7 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg index f61a29a35a..f227afc3e9 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -20,7 +20,6 @@ cool_min_speed = 15 infill_overlap = 5 infill_sparse_density = 25 layer_0_z_overlap = 0.1 -layer_height = 0.1 raft_airgap = 0.15 raft_base_line_width = 0.5 raft_interface_line_spacing = 0.7 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg index 341dc7422f..c903c03394 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg @@ -4,9 +4,9 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = fast +quality_type = draft weight = -1 material = generic_nylon variant = 0.4 mm @@ -19,7 +19,6 @@ cool_min_speed = 15 infill_overlap = 5 infill_sparse_density = 30 layer_0_z_overlap = 0.22 -layer_height = 0.2 raft_airgap = 0.57 raft_base_line_spacing = 1.6 raft_base_line_width = 0.8 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg index 63bc156e15..fd4f6c0513 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg @@ -4,9 +4,9 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = normal +quality_type = fast weight = 0 material = generic_nylon variant = 0.4 mm @@ -19,7 +19,6 @@ cool_min_speed = 15 infill_overlap = 5 infill_sparse_density = 30 layer_0_z_overlap = 0.22 -layer_height = 0.15 raft_airgap = 0.57 raft_base_line_spacing = 1.6 raft_base_line_width = 0.8 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg index 8aea23fb50..3aaa8f9485 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg @@ -4,9 +4,9 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = fast +quality_type = slightlycoarse weight = -1 material = generic_nylon variant = 0.6 mm @@ -19,7 +19,6 @@ cool_min_speed = 15 infill_overlap = 5 infill_sparse_density = 35 layer_0_z_overlap = 0.22 -layer_height = 0.3 raft_airgap = 0.44 raft_base_line_spacing = 2.4 raft_base_line_width = 1.2 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg index 28ccd6ffcf..d863dda7d9 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg @@ -4,9 +4,9 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = normal +quality_type = fast weight = 0 material = generic_nylon variant = 0.6 mm @@ -19,7 +19,6 @@ cool_min_speed = 15 infill_overlap = 5 infill_sparse_density = 35 layer_0_z_overlap = 0.22 -layer_height = 0.15 raft_airgap = 0.44 raft_base_line_spacing = 2.4 raft_base_line_width = 1.2 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg index f868313ba9..4b039087e8 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg @@ -4,9 +4,9 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = draft +quality_type = slightlycoarse weight = -2 material = generic_nylon variant = 0.8 mm @@ -19,7 +19,6 @@ cool_min_speed = 15 infill_overlap = 5 infill_sparse_density = 40 layer_0_z_overlap = 0.25 -layer_height = 0.3 raft_airgap = 0.44 raft_base_line_width = 1.6 raft_interface_line_spacing = 1.8 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg index c30d849553..0cd87ce0e2 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg @@ -4,9 +4,9 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = normal +quality_type = draft weight = 0 material = generic_nylon variant = 0.8 mm @@ -19,7 +19,6 @@ cool_min_speed = 15 infill_overlap = 5 infill_sparse_density = 40 layer_0_z_overlap = 0.25 -layer_height = 0.2 raft_airgap = 0.44 raft_base_line_width = 1.6 raft_interface_line_spacing = 1.8 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg index 08b60eeb20..b95d11ea6f 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -21,7 +21,6 @@ cool_min_speed = 15 infill_overlap = 5 infill_sparse_density = 25 layer_0_z_overlap = 0.2 -layer_height = 0.06 raft_airgap = 0.25 raft_base_line_spacing = 1 raft_base_line_width = 0.5 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg index dbc36f0c25..90c0987ddf 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -21,7 +21,6 @@ cool_min_speed = 15 infill_overlap = 5 infill_sparse_density = 25 layer_0_z_overlap = 0.2 -layer_height = 0.1 raft_airgap = 0.25 raft_base_line_spacing = 1 raft_base_line_width = 0.5 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg index 18f299b64d..d530103a1c 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg @@ -4,9 +4,9 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = fast +quality_type = draft weight = -1 material = generic_pc variant = 0.4 mm @@ -20,7 +20,6 @@ cool_min_speed = 8 infill_overlap = 5 infill_sparse_density = 30 layer_0_z_overlap = 0.3 -layer_height = 0.2 raft_airgap = 0.35 raft_base_line_spacing = 1.6 raft_base_line_width = 0.8 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg index 9ebb46c4d3..43b6363236 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -20,7 +20,6 @@ cool_min_speed = 8 infill_overlap = 5 infill_sparse_density = 30 layer_0_z_overlap = 0.3 -layer_height = 0.1 raft_airgap = 0.35 raft_base_line_spacing = 1.6 raft_base_line_width = 0.8 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg index 47f84fe790..577180dfcb 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg @@ -4,9 +4,9 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = fast +quality_type = slightlycoarse weight = -1 material = generic_pc variant = 0.6 mm @@ -20,7 +20,6 @@ cool_min_speed = 8 infill_overlap = 5 infill_sparse_density = 35 layer_0_z_overlap = 0.22 -layer_height = 0.3 raft_airgap = 0.52 raft_base_line_spacing = 2.4 raft_base_line_width = 1.2 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg index 2c857435c5..dce492e90b 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg @@ -4,9 +4,9 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = normal +quality_type = fast weight = 0 material = generic_pc variant = 0.6 mm @@ -20,7 +20,6 @@ cool_min_speed = 8 infill_overlap = 5 infill_sparse_density = 35 layer_0_z_overlap = 0.22 -layer_height = 0.15 raft_airgap = 0.52 raft_base_line_spacing = 2.4 raft_base_line_width = 1.2 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg index 6450d9fe56..dcd83b8679 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg @@ -4,9 +4,9 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = draft +quality_type = extracoarse weight = -2 material = generic_pc variant = 0.8 mm @@ -20,7 +20,6 @@ cool_min_layer_time = 3 infill_overlap = 5 infill_sparse_density = 40 layer_0_z_overlap = 0.22 -layer_height = 0.5 raft_airgap = 0.47 raft_base_line_width = 1.6 raft_interface_line_spacing = 1.8 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg index 91c990712e..43f35b62f0 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg @@ -4,9 +4,9 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = normal +quality_type = draft weight = 0 material = generic_pc variant = 0.8 mm @@ -20,7 +20,6 @@ cool_min_layer_time = 3 infill_overlap = 5 infill_sparse_density = 40 layer_0_z_overlap = 0.22 -layer_height = 0.2 raft_airgap = 0.47 raft_base_line_width = 1.6 raft_interface_line_spacing = 1.8 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg index 4266bcd46b..4f80772074 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -39,7 +39,6 @@ jerk_support_interface = =jerk_topbottom jerk_topbottom = =math.ceil(jerk_print * 5 / 25) jerk_wall = =math.ceil(jerk_print * 10 / 25) jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -layer_height = 0.15 line_width = =machine_nozzle_size * 0.95 multiple_mesh_overlap = 0 retraction_count_max = 12 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg index b995c92922..afe476adec 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg index a9e4917fa2..7cec6b1bd1 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -39,7 +39,6 @@ jerk_support_interface = =jerk_topbottom jerk_topbottom = =math.ceil(jerk_print * 5 / 25) jerk_wall = =math.ceil(jerk_print * 10 / 25) jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -layer_height = 0.2 line_width = =machine_nozzle_size * 0.95 multiple_mesh_overlap = 0 retraction_count_max = 12 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg index 2fec539e2f..9d8d10cd11 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -39,7 +39,6 @@ jerk_support_interface = =jerk_topbottom jerk_topbottom = =math.ceil(jerk_print * 5 / 25) jerk_wall = =math.ceil(jerk_print * 10 / 25) jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -layer_height = 0.15 line_width = =machine_nozzle_size * 0.95 multiple_mesh_overlap = 0 retraction_count_max = 12 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg index 2bba1be3d4..c76e73990b 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg @@ -4,9 +4,9 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = fast +quality_type = draft weight = -2 material = generic_pp variant = 0.8 mm @@ -39,7 +39,6 @@ jerk_support_interface = =jerk_topbottom jerk_topbottom = =math.ceil(jerk_print * 5 / 25) jerk_wall = =math.ceil(jerk_print * 10 / 25) jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -layer_height = 0.2 line_width = =machine_nozzle_size * 0.95 multiple_mesh_overlap = 0 retraction_count_max = 12 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg index 15f7577bdb..e570aafe07 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg @@ -4,9 +4,9 @@ name = Extra Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality -quality_type = draft +quality_type = slightlycoarse weight = -3 material = generic_pp variant = 0.8 mm @@ -39,7 +39,6 @@ jerk_support_interface = =jerk_topbottom jerk_topbottom = =math.ceil(jerk_print * 5 / 25) jerk_wall = =math.ceil(jerk_print * 10 / 25) jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10) -layer_height = 0.3 line_width = =machine_nozzle_size * 0.95 multiple_mesh_overlap = 0 retraction_count_max = 12 diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg index e0c016abee..86da345cb9 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -20,7 +20,6 @@ cool_min_layer_time = 7 cool_min_speed = 15 infill_sparse_density = 10 layer_0_z_overlap = 0.1 -layer_height = 0.06 raft_airgap = 0.2 raft_base_line_spacing = 1 raft_interface_line_spacing = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg index 127f281913..a9c9765bcd 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg index c39ea9cec3..9a13f180ce 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -19,7 +19,6 @@ cool_fan_speed_min = =cool_fan_speed * 35 / 60 cool_min_speed = 15 infill_sparse_density = 10 layer_0_z_overlap = 0.12 -layer_height = 0.12 line_width = 0.57 raft_airgap = 0.24 raft_base_line_spacing = 1.2 diff --git a/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg index 5139a1fea8..fc56bc41e5 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg index 4e81b4f39e..c2a687a4d6 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg index 04dc2ec79b..8194d1a510 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg index e08fa27dc9..fb8212a4a0 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg @@ -4,12 +4,13 @@ name = Fine - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 material = generic_pc variant = AA 0.25 +is_experimental = True [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg index 8dbca3cd05..39416d4bb1 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg index 6e9bbdce27..e6b10560c3 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg @@ -4,12 +4,13 @@ name = Fine - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 material = generic_pp variant = AA 0.25 +is_experimental = True [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.25_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_TPLA_Normal_Quality.inst.cfg index 768864bfef..c83d3a1f49 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_TPLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_TPLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg index 8877912a33..150be3bdcd 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg index 926cfd6995..f9d1110512 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg index 9ceab110e9..40229c1307 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -17,6 +17,7 @@ machine_nozzle_cool_down_speed = 0.8 machine_nozzle_heat_up_speed = 1.5 material_standby_temperature = 100 material_print_temperature = =default_material_print_temperature - 5 +material_print_temperature_layer_0 = =material_print_temperature + 15 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 prime_tower_enable = False diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg index e5b699c35f..df13a81211 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -14,6 +14,7 @@ variant = AA 0.4 [values] machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 +material_print_temperature_layer_0 = =material_print_temperature + 10 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 material_standby_temperature = 100 diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg index a1fc6b7e6f..d102abe5ee 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -12,6 +12,7 @@ material = generic_bam variant = AA 0.4 [values] +brim_replaces_support = False cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed machine_nozzle_cool_down_speed = 0.75 @@ -26,6 +27,7 @@ speed_wall = =math.ceil(speed_print * 50 / 70) speed_wall_0 = =math.ceil(speed_wall * 35 / 50) top_bottom_thickness = 1 wall_thickness = 1 +support_brim_enable = True support_interface_enable = True support_interface_density = =min(extruderValues('material_surface_energy')) support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg index ac21cce120..57ec919e46 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -12,6 +12,7 @@ material = generic_bam variant = AA 0.4 [values] +brim_replaces_support = False cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed machine_nozzle_cool_down_speed = 0.75 @@ -25,6 +26,7 @@ speed_wall = =math.ceil(speed_print * 40 / 80) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) top_bottom_thickness = 1 wall_thickness = 1 +support_brim_enable = True support_interface_enable = True support_interface_density = =min(extruderValues('material_surface_energy')) support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg index 290ee6c4db..c5782aa9bc 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -12,6 +12,7 @@ material = generic_bam variant = AA 0.4 [values] +brim_replaces_support = False cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed cool_min_speed = 7 @@ -21,6 +22,7 @@ material_print_temperature = =default_material_print_temperature - 10 prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 skin_overlap = 10 speed_layer_0 = =math.ceil(speed_print * 20 / 70) +support_brim_enable = True support_interface_enable = True support_interface_density = =min(extruderValues('material_surface_energy')) support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg index 4e94789a6b..37801626bd 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg index d93915d721..4bf87820fb 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg index 082152c50f..cbb3085d85 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg index 889b94e001..ed87e6d4ed 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg index 1891a274c8..1a15755577 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg index e4cfdb67fc..2cba7b1ccf 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg index cec4b950cf..e927a79c10 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg index 892083b264..d9a7649123 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg index 2e4b8f8dcc..0139970339 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg index 9b271c47cd..094a7c0ff5 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg index 16c0b6febb..8bb0002b84 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg index 17661efbb8..f7c733c212 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg index 96acf403a5..e6ac6a7cb6 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg index f9159b5fca..e50cd7fc02 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg index d175e99ad6..5f837fce0e 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg index 557a449022..ccba414b57 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg index 16626dc544..e4cbb6ed35 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg index 7f50a2a6f0..96d1a3436a 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg index 507afc5526..a7d5fa0586 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg index 05febab06d..bb6b6cb06c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg index 4efa5199cb..6ca1e6fe3e 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg index ad03df5d86..e34a8ba625 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg index d8d51dd716..d363667af7 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg index 9959a39457..4efb7d9e78 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg index 5c68557e9b..d461a3187e 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg index 90556ea487..b451c22489 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg index b83db28e0b..0a3bd45c38 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -31,11 +31,11 @@ line_width = =machine_nozzle_size * 0.95 machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.5 machine_nozzle_heat_up_speed = 2.5 -material_final_print_temperature = =material_print_temperature - 21 +material_final_print_temperature = =material_print_temperature material_flow = 106 -material_initial_print_temperature = =material_print_temperature - 16 +material_initial_print_temperature = =material_print_temperature material_print_temperature = =default_material_print_temperature + 2 -material_print_temperature_layer_0 = =default_material_print_temperature + 2 +material_print_temperature_layer_0 = =material_print_temperature + 15 material_standby_temperature = 100 multiple_mesh_overlap = 0 prime_tower_wipe_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg index 09b2a49838..42adf63e8c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -31,11 +31,11 @@ line_width = =machine_nozzle_size * 0.95 machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.5 machine_nozzle_heat_up_speed = 2.5 -material_final_print_temperature = =material_print_temperature - 21 +material_final_print_temperature = =material_print_temperature material_flow = 106 -material_initial_print_temperature = =material_print_temperature - 16 +material_initial_print_temperature = =material_print_temperature material_print_temperature = =default_material_print_temperature + 2 -material_print_temperature_layer_0 = =default_material_print_temperature + 2 +material_print_temperature_layer_0 = =material_print_temperature + 15 material_standby_temperature = 100 multiple_mesh_overlap = 0 prime_tower_wipe_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg index 911d5c977b..a5804ad2e1 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -30,10 +30,10 @@ line_width = =machine_nozzle_size * 0.95 machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.5 machine_nozzle_heat_up_speed = 2.5 -material_final_print_temperature = =material_print_temperature - 21 +material_final_print_temperature = =material_print_temperature material_flow = 106 -material_initial_print_temperature = =material_print_temperature - 16 -material_print_temperature_layer_0 = =default_material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 17 material_standby_temperature = 100 multiple_mesh_overlap = 0 prime_tower_wipe_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg index e71ea07531..051b5bba36 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg index 39aa103631..dcbe8ca1b0 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg index 3a08643086..1a0c746b20 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg index 73df9637f7..add4025786 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg @@ -4,12 +4,13 @@ name = Fast - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 material = generic_cpe_plus variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg index d59bfe7cea..654447e5dc 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Sprint - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 material = generic_cpe_plus variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg index 368317019f..86d145cf39 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Extra Fast - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 material = generic_cpe_plus variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg index 170643275c..243bf8f437 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg index 5b3cb52f18..78362aa1d8 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg index fff96ba9fc..44f254b613 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg index e9b0873716..be1245b58a 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg index 7518acc7f0..9d15b69dbc 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg index 040632efec..d2b22cd418 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg index 5b81532977..4e9c8c9376 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg @@ -4,12 +4,13 @@ name = Fast - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = 0 +weight = -2 material = generic_pc variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg index 317b89ea85..69661c91b6 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Sprint - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft -weight = -2 +weight = -4 material = generic_pc variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg index 2fd6bd7609..1fefa5a141 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Extra Fast - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -1 +weight = -3 material = generic_pc variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg index 9b861030d8..d8133eee5f 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg index 42a499f22c..35b675fd10 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg index d1f3937244..fed141f8e9 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg index 19496565bc..a6fe2c9e8e 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg index aeee3b4e09..bd2a09c3cc 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg index fcd4fcd999..68765f839b 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Draft_Print.inst.cfg index 3f679870fd..2224917fc1 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Superdraft_Print.inst.cfg index 17dbd1faf9..e4b3355579 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Verydraft_Print.inst.cfg index 624496a9ec..026372156c 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg index b6e6fdecb6..d30a6db38c 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -25,11 +25,11 @@ jerk_support = =math.ceil(jerk_print * 25 / 25) jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25) machine_nozzle_cool_down_speed = 0.5 machine_nozzle_heat_up_speed = 2.5 -material_final_print_temperature = =material_print_temperature - 21 +material_final_print_temperature = =material_print_temperature material_flow = 105 -material_initial_print_temperature = =material_print_temperature - 16 +material_initial_print_temperature = =material_print_temperature material_print_temperature = =default_material_print_temperature - 2 -material_print_temperature_layer_0 = =material_print_temperature + 4 +material_print_temperature_layer_0 = =material_print_temperature + 19 material_standby_temperature = 100 multiple_mesh_overlap = 0.2 prime_tower_enable = True diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg index b64d37310e..28fffe945a 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 @@ -26,11 +26,11 @@ jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25) layer_height = 0.4 machine_nozzle_cool_down_speed = 0.5 machine_nozzle_heat_up_speed = 2.5 -material_final_print_temperature = =material_print_temperature - 21 +material_final_print_temperature = =material_print_temperature material_flow = 105 -material_initial_print_temperature = =material_print_temperature - 16 +material_initial_print_temperature = =material_print_temperature material_print_temperature = =default_material_print_temperature + 2 -material_print_temperature_layer_0 = =material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature +15 material_standby_temperature = 100 multiple_mesh_overlap = 0.2 prime_tower_enable = True diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg index d9e8f9ec2e..35bc994931 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 @@ -26,10 +26,10 @@ jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25) layer_height = 0.3 machine_nozzle_cool_down_speed = 0.5 machine_nozzle_heat_up_speed = 2.5 -material_final_print_temperature = =material_print_temperature - 21 +material_final_print_temperature = =material_print_temperature material_flow = 105 -material_initial_print_temperature = =material_print_temperature - 16 -material_print_temperature_layer_0 = =material_print_temperature + 2 +material_initial_print_temperature = =material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 17 material_standby_temperature = 100 multiple_mesh_overlap = 0.2 prime_tower_enable = True diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg index 816238fe69..a99a0abdf5 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -12,7 +12,9 @@ material = generic_pva variant = BB 0.4 [values] +brim_replaces_support = False material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 20 +support_brim_enable = True diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg index 58d5d58802..4fd5c14f5d 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -12,8 +12,10 @@ material = generic_pva variant = BB 0.4 [values] +brim_replaces_support = False material_print_temperature = =default_material_print_temperature + 5 material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 15 +support_brim_enable = True support_infill_sparse_thickness = 0.3 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg index 3d7a54564a..6d80217cd5 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -12,6 +12,8 @@ material = generic_pva variant = BB 0.4 [values] +brim_replaces_support = False material_standby_temperature = 100 prime_tower_enable = False +support_brim_enable = True support_infill_sparse_thickness = 0.18 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg index ffd99ed9ef..8068af6f22 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -12,5 +12,7 @@ material = generic_pva variant = BB 0.4 [values] +brim_replaces_support = False material_standby_temperature = 100 prime_tower_enable = False +support_brim_enable = True diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg index 51c27f6a14..090baba2c8 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -12,5 +12,7 @@ material = generic_pva variant = BB 0.8 [values] +brim_replaces_support = False material_print_temperature = =default_material_print_temperature + 5 material_standby_temperature = 100 +support_brim_enable = True diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg index 3f645a2a50..47a82e01a3 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 @@ -12,6 +12,8 @@ material = generic_pva variant = BB 0.8 [values] +brim_replaces_support = False layer_height = 0.4 material_standby_temperature = 100 +support_brim_enable = True support_interface_height = 0.9 diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg index 285b9bb9ed..a8d0e494cb 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 @@ -12,7 +12,9 @@ material = generic_pva variant = BB 0.8 [values] +brim_replaces_support = False layer_height = 0.3 material_standby_temperature = 100 +support_brim_enable = True support_infill_sparse_thickness = 0.3 support_interface_height = 1.2 diff --git a/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg index a421203220..936406fce6 100644 --- a/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg index 2ecf7526a2..14b214da5a 100644 --- a/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg index ce5497bd39..b9c2c19d8c 100644 --- a/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 global_quality = True [values] diff --git a/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg index afadda378a..ab9127f26d 100644 --- a/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg index f88f5df85f..36d9f932f1 100644 --- a/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg index df626dc724..3eaf8191a2 100644 --- a/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_original/umo_global_Coarse_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Coarse_Quality.inst.cfg index 34f3a2a901..2ebfb1e2c7 100644 --- a/resources/quality/ultimaker_original/umo_global_Coarse_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse Quality definition = ultimaker_original [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/ultimaker_original/umo_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Draft_Quality.inst.cfg index ed8c0ddb97..b246ba12ea 100644 --- a/resources/quality/ultimaker_original/umo_global_Draft_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Draft Quality definition = ultimaker_original [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_original/umo_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Extra_Coarse_Quality.inst.cfg index 1ad10ac4db..da8c6a9b39 100644 --- a/resources/quality/ultimaker_original/umo_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Extra_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse Quality definition = ultimaker_original [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = -4 diff --git a/resources/quality/ultimaker_original/umo_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Fast_Quality.inst.cfg index 6c83239164..db03a7f18c 100644 --- a/resources/quality/ultimaker_original/umo_global_Fast_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_original [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_original/umo_global_High_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_High_Quality.inst.cfg index 19752f07bf..ec1b593f7e 100644 --- a/resources/quality/ultimaker_original/umo_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_original [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_original/umo_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Normal_Quality.inst.cfg index a7dedc9b88..9b39c97682 100644 --- a/resources/quality/ultimaker_original/umo_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_original [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg index f2e05b08e8..1b46116686 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg index 2068ed51c0..0beec0fba4 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -12,6 +12,7 @@ material = generic_cpe variant = AA 0.25 [values] +retraction_combing_max_distance = 50 retraction_extrusion_window = 0.5 speed_infill = =math.ceil(speed_print * 40 / 55) speed_topbottom = =math.ceil(speed_print * 30 / 55) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_Nylon_Normal_Quality.inst.cfg index 3a8ed8e773..7623872d07 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_Nylon_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg index 55d53c6c71..e09ea57792 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg @@ -4,12 +4,13 @@ name = Fine - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 material = generic_pc variant = AA 0.25 +is_experimental = True [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg index a06f2158fe..e284ac277a 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg index c925845dc1..a8c5f08448 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg @@ -4,12 +4,13 @@ name = Fine - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 material = generic_pp variant = AA 0.25 +is_experimental = True [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_TPLA_Normal_Quality.inst.cfg index e9628225bc..27c9c1d63e 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_TPLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_TPLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg index b86c61b3a2..5d2e8767ba 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg index f3c099724a..7e5fcc0ab6 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg index 8d016a2ee4..829939b2a6 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg index 6ce623b66e..a6a51aca4c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg index 1c316da6ba..b49dbd674d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -12,6 +12,7 @@ material = generic_bam variant = AA 0.4 [values] +brim_replaces_support = False cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed machine_nozzle_cool_down_speed = 0.75 @@ -26,6 +27,7 @@ speed_wall = =math.ceil(speed_print * 50 / 70) speed_wall_0 = =math.ceil(speed_wall * 35 / 50) top_bottom_thickness = 1 wall_thickness = 1 +support_brim_enable = True support_interface_enable = True support_interface_density = =min(extruderValues('material_surface_energy')) support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg index 2913a021f0..6d4f7206f3 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -12,6 +12,7 @@ material = generic_bam variant = AA 0.4 [values] +brim_replaces_support = False cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed machine_nozzle_cool_down_speed = 0.75 @@ -25,6 +26,7 @@ speed_wall = =math.ceil(speed_print * 40 / 80) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) top_bottom_thickness = 1 wall_thickness = 1 +support_brim_enable = True support_interface_enable = True support_interface_density = =min(extruderValues('material_surface_energy')) support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg index 65c922fe6f..e590a56028 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -12,6 +12,7 @@ material = generic_bam variant = AA 0.4 [values] +brim_replaces_support = False cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed cool_min_speed = 7 @@ -22,6 +23,7 @@ material_print_temperature = =default_material_print_temperature - 10 prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 skin_overlap = 10 speed_layer_0 = =math.ceil(speed_print * 20 / 70) +support_brim_enable = True support_interface_enable = True support_interface_density = =min(extruderValues('material_surface_energy')) support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg index 421fcdf095..aa32861ddb 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -29,7 +29,7 @@ material_print_temperature_layer_0 = =material_print_temperature multiple_mesh_overlap = 0 prime_tower_enable = True prime_tower_wipe_enabled = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_extrusion_window = 1 retraction_hop = 0.2 retraction_hop_enabled = False diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg index 536c6c97b8..26edd2d8a7 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -29,7 +29,7 @@ material_print_temperature_layer_0 = =material_print_temperature multiple_mesh_overlap = 0 prime_tower_enable = True prime_tower_wipe_enabled = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_extrusion_window = 1 retraction_hop = 0.2 retraction_hop_enabled = False diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg index 77182c21e1..e200c3b078 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -31,7 +31,7 @@ material_print_temperature_layer_0 = =material_print_temperature multiple_mesh_overlap = 0 prime_tower_enable = True prime_tower_wipe_enabled = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_extrusion_window = 1 retraction_hop = 0.2 retraction_hop_enabled = False diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg index d779baf315..dc665ae114 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -31,7 +31,7 @@ material_print_temperature_layer_0 = =material_print_temperature multiple_mesh_overlap = 0 prime_tower_enable = True prime_tower_wipe_enabled = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_extrusion_window = 1 retraction_hop = 0.2 retraction_hop_enabled = False diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg index c51e5652e1..311c335a86 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -15,6 +15,7 @@ variant = AA 0.4 material_print_temperature = =default_material_print_temperature + 10 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 skin_overlap = 20 speed_print = 60 speed_layer_0 = =math.ceil(speed_print * 20 / 60) @@ -24,5 +25,5 @@ speed_wall_0 = =math.ceil(speed_wall * 35 / 45) wall_thickness = 1 -infill_pattern = zigzag +infill_pattern = triangles speed_infill = =math.ceil(speed_print * 50 / 60) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg index b80d3ccf22..02122a40fa 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -16,11 +16,12 @@ cool_min_speed = 7 material_print_temperature = =default_material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 speed_print = 60 speed_layer_0 = =math.ceil(speed_print * 20 / 60) speed_topbottom = =math.ceil(speed_print * 30 / 60) speed_wall = =math.ceil(speed_print * 40 / 60) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) -infill_pattern = zigzag +infill_pattern = triangles speed_infill = =math.ceil(speed_print * 50 / 60) \ No newline at end of file diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg index c90eedaec3..54ab48e88d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -18,10 +18,11 @@ machine_nozzle_heat_up_speed = 1.5 material_print_temperature = =default_material_print_temperature - 5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 speed_print = 50 speed_layer_0 = =math.ceil(speed_print * 20 / 50) speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 30 / 50) -infill_pattern = zigzag +infill_pattern = triangles speed_infill = =math.ceil(speed_print * 40 / 50) \ No newline at end of file diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg index e098b0ffb4..be9b43b1b8 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -16,10 +16,11 @@ machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 speed_print = 55 speed_layer_0 = =math.ceil(speed_print * 20 / 55) speed_topbottom = =math.ceil(speed_print * 30 / 55) speed_wall = =math.ceil(speed_print * 30 / 55) -infill_pattern = zigzag +infill_pattern = triangles speed_infill = =math.ceil(speed_print * 45 / 55) \ No newline at end of file diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg index 991ad30a5a..03fe4f4b8a 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg index 695ce2c8fb..bd078f7e4d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg index e55867efe5..45506f4152 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg index 41e28c51d5..c159402e3f 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg index 5d03e1c980..f6713fd4e9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg index b630ab6232..fbc5328d80 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg index 1c080c3b47..d6e002c7f1 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg index 79ce686da5..0f708b16db 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg index c7a4864328..ca4ef6bd9b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg index 42048fa297..56cb57cb08 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg index b7ad8bd5c4..44b643d529 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg index 911fa9a0a8..aa737dc1ea 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg index 68558bcf93..d008bb37fc 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg index 1145d1900f..b0c00f2c07 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg index c0b094f0a2..835c53eaef 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg index 280e5c4bfb..8be35d2ae2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg index 304c170b55..460fd73afa 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg index cd5c598d4f..3488756cb6 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg index 2522c0f20f..dc2b844d90 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg index 1a01303a12..ec93e5ec23 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -30,11 +30,11 @@ line_width = =machine_nozzle_size * 0.95 machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.5 machine_nozzle_heat_up_speed = 2.5 -material_final_print_temperature = =material_print_temperature - 21 +material_final_print_temperature = =material_print_temperature material_flow = 106 -material_initial_print_temperature = =material_print_temperature - 16 +material_initial_print_temperature = =material_print_temperature material_print_temperature = =default_material_print_temperature + 2 -material_print_temperature_layer_0 = =default_material_print_temperature + 2 +material_print_temperature_layer_0 = =material_print_temperature + 15 material_standby_temperature = 100 multiple_mesh_overlap = 0 prime_tower_wipe_enabled = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg index 226eedf431..eff47b9c20 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -30,11 +30,11 @@ line_width = =machine_nozzle_size * 0.95 machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.5 machine_nozzle_heat_up_speed = 2.5 -material_final_print_temperature = =material_print_temperature - 21 +material_final_print_temperature = =material_print_temperature material_flow = 106 -material_initial_print_temperature = =material_print_temperature - 16 +material_initial_print_temperature = =material_print_temperature material_print_temperature = =default_material_print_temperature + 2 -material_print_temperature_layer_0 = =default_material_print_temperature + 2 +material_print_temperature_layer_0 = =material_print_temperature + 15 material_standby_temperature = 100 multiple_mesh_overlap = 0 prime_tower_wipe_enabled = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg index 5bf258f34a..62e543977c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -30,10 +30,10 @@ line_width = =machine_nozzle_size * 0.95 machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.5 machine_nozzle_heat_up_speed = 2.5 -material_final_print_temperature = =material_print_temperature - 21 +material_final_print_temperature = =material_print_temperature material_flow = 106 -material_initial_print_temperature = =material_print_temperature - 16 -material_print_temperature_layer_0 = =default_material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 17 material_standby_temperature = 100 multiple_mesh_overlap = 0 prime_tower_wipe_enabled = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg new file mode 100644 index 0000000000..6222dcdc7b --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg @@ -0,0 +1,36 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_abs +variant = AA 0.4 +buildplate = Aluminum + +[values] +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_print_temperature = =default_material_print_temperature + 20 +material_initial_print_temperature = =material_print_temperature - 15 +material_final_print_temperature = =material_print_temperature - 20 +prime_tower_enable = False +skin_overlap = 20 +speed_print = 60 +speed_layer_0 = 20 +speed_topbottom = =math.ceil(speed_print * 35 / 60) +speed_wall = =math.ceil(speed_print * 45 / 60) +speed_wall_0 = =math.ceil(speed_wall * 35 / 45) +wall_thickness = 1 + +infill_line_width = =round(line_width * 0.4 / 0.35, 2) +speed_infill = =math.ceil(speed_print * 50 / 60) + +material_bed_temperature_layer_0 = 100 +default_material_bed_temperature = 90 +prime_blob_enable = False +layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Fast_Print.inst.cfg new file mode 100644 index 0000000000..2bf17429fa --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Fast_Print.inst.cfg @@ -0,0 +1,35 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = fast +weight = -1 +material = generic_abs +variant = AA 0.4 +buildplate = Aluminum + +[values] +cool_min_speed = 7 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_print_temperature = =default_material_print_temperature + 15 +material_initial_print_temperature = =material_print_temperature - 15 +material_final_print_temperature = =material_print_temperature - 20 +prime_tower_enable = False +speed_print = 60 +speed_layer_0 = 20 +speed_topbottom = =math.ceil(speed_print * 30 / 60) +speed_wall = =math.ceil(speed_print * 40 / 60) +speed_wall_0 = =math.ceil(speed_wall * 30 / 40) + +infill_line_width = =round(line_width * 0.4 / 0.35, 2) +speed_infill = =math.ceil(speed_print * 45 / 60) + +material_bed_temperature_layer_0 = 100 +default_material_bed_temperature = 90 +prime_blob_enable = False +layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_High_Quality.inst.cfg index 9a3eef5762..7d7f4b2aaa 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -14,21 +14,21 @@ buildplate = Aluminum [values] cool_min_speed = 12 -layer_height_0 = 0.17 machine_nozzle_cool_down_speed = 0.8 machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 90 -material_bed_temperature_layer_0 = 100 material_print_temperature = =default_material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature - 15 material_final_print_temperature = =material_print_temperature - 20 -prime_blob_enable = False prime_tower_enable = False speed_print = 50 -speed_layer_0 = =math.ceil(speed_print * 20 / 50) +speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 30 / 50) infill_line_width = =round(line_width * 0.4 / 0.35, 2) speed_infill = =math.ceil(speed_print * 40 / 50) +material_bed_temperature_layer_0 = 100 +default_material_bed_temperature = 90 +prime_blob_enable = False +layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..6d78d9d027 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Normal_Quality.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_abs +variant = AA 0.4 +buildplate = Aluminum + +[values] +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_print_temperature = =default_material_print_temperature + 10 +material_initial_print_temperature = =material_print_temperature - 15 +material_final_print_temperature = =material_print_temperature - 20 +prime_tower_enable = False +speed_print = 55 +speed_layer_0 = 20 +speed_topbottom = =math.ceil(speed_print * 30 / 55) +speed_wall = =math.ceil(speed_print * 30 / 55) + +infill_line_width = =round(line_width * 0.4 / 0.35, 2) +speed_infill = =math.ceil(speed_print * 40 / 55) + +material_bed_temperature_layer_0 = 100 +default_material_bed_temperature = 90 +prime_blob_enable = False +layer_height_0 = 0.17 + diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg new file mode 100644 index 0000000000..c02317792c --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg @@ -0,0 +1,54 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_cpe_plus +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +cool_fan_speed_max = 80 +cool_min_speed = 5 +infill_line_width = =round(line_width * 0.35 / 0.35, 2) +infill_overlap = 0 +infill_wipe_dist = 0 +jerk_enabled = True +jerk_print = 25 +machine_min_cool_heat_time_window = 15 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =material_print_temperature +multiple_mesh_overlap = 0 +prime_tower_enable = True +prime_tower_wipe_enabled = True +retraction_combing_max_distance = 50 +retraction_extrusion_window = 1 +retraction_hop = 0.2 +retraction_hop_enabled = False +retraction_hop_only_when_collides = True +skin_overlap = 20 +speed_layer_0 = 20 +speed_print = 50 +speed_topbottom = =math.ceil(speed_print * 40 / 50) + +speed_wall = =math.ceil(speed_print * 50 / 50) +speed_wall_0 = =math.ceil(speed_wall * 40 / 50) +support_bottom_distance = =support_z_distance +support_z_distance = =layer_height +wall_0_inset = 0 +wall_thickness = 1 + +material_bed_temperature_layer_0 = 115 +default_material_bed_temperature = 105 +prime_blob_enable = False +layer_height_0 = 0.17 + diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Fast_Print.inst.cfg new file mode 100644 index 0000000000..57be60501c --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Fast_Print.inst.cfg @@ -0,0 +1,52 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = fast +weight = -1 +material = generic_cpe_plus +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +cool_fan_speed_max = 80 +cool_min_speed = 6 +infill_line_width = =round(line_width * 0.35 / 0.35, 2) +infill_overlap = 0 +infill_wipe_dist = 0 +jerk_enabled = True +jerk_print = 25 +machine_min_cool_heat_time_window = 15 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =material_print_temperature +multiple_mesh_overlap = 0 +prime_tower_enable = True +prime_tower_wipe_enabled = True +retraction_combing_max_distance = 50 +retraction_extrusion_window = 1 +retraction_hop = 0.2 +retraction_hop_enabled = False +retraction_hop_only_when_collides = True +skin_overlap = 20 +speed_layer_0 = 20 +speed_print = 45 +speed_topbottom = =math.ceil(speed_print * 35 / 45) + +speed_wall = =math.ceil(speed_print * 45 / 45) +speed_wall_0 = =math.ceil(speed_wall * 35 / 45) +support_bottom_distance = =support_z_distance +support_z_distance = =layer_height +wall_0_inset = 0 + +material_bed_temperature_layer_0 = 115 +default_material_bed_temperature = 105 +prime_blob_enable = False +layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_High_Quality.inst.cfg index 8b0b08f731..44235b30eb 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -22,27 +22,23 @@ infill_overlap = 0 infill_wipe_dist = 0 jerk_enabled = True jerk_print = 25 -layer_height_0 = 0.17 machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 105 -material_bed_temperature_layer_0 = 115 material_final_print_temperature = =material_print_temperature - 10 material_initial_print_temperature = =material_print_temperature - 5 material_print_temperature = =default_material_print_temperature + 2 material_print_temperature_layer_0 = =material_print_temperature multiple_mesh_overlap = 0 -prime_blob_enable = False prime_tower_enable = True prime_tower_wipe_enabled = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_extrusion_window = 1 retraction_hop = 0.2 retraction_hop_enabled = False retraction_hop_only_when_collides = True skin_overlap = 20 -speed_layer_0 = =math.ceil(speed_print * 20 / 40) +speed_layer_0 = 20 speed_print = 40 speed_topbottom = =math.ceil(speed_print * 30 / 35) @@ -51,3 +47,9 @@ speed_wall_0 = =math.ceil(speed_wall * 30 / 35) support_bottom_distance = =support_z_distance support_z_distance = =layer_height wall_0_inset = 0 + +material_bed_temperature_layer_0 = 115 +default_material_bed_temperature = 105 +prime_blob_enable = False +layer_height_0 = 0.17 + diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..a0b5af8679 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Normal_Quality.inst.cfg @@ -0,0 +1,54 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_cpe_plus +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +cool_fan_speed_max = 50 +cool_min_speed = 7 +infill_line_width = =round(line_width * 0.35 / 0.35, 2) +infill_overlap = 0 +infill_wipe_dist = 0 +jerk_enabled = True +jerk_print = 25 +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =material_print_temperature +multiple_mesh_overlap = 0 +prime_tower_enable = True +prime_tower_wipe_enabled = True +retraction_combing_max_distance = 50 +retraction_extrusion_window = 1 +retraction_hop = 0.2 +retraction_hop_enabled = False +retraction_hop_only_when_collides = True +skin_overlap = 20 +speed_layer_0 = 20 +speed_print = 40 +speed_topbottom = =math.ceil(speed_print * 30 / 35) + +speed_wall = =math.ceil(speed_print * 35 / 40) +speed_wall_0 = =math.ceil(speed_wall * 30 / 35) +support_bottom_distance = =support_z_distance +support_z_distance = =layer_height +wall_0_inset = 0 + +material_bed_temperature_layer_0 = 115 +default_material_bed_temperature = 105 +prime_blob_enable = False +layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg new file mode 100644 index 0000000000..52f22f807f --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg @@ -0,0 +1,35 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_cpe +variant = AA 0.4 +buildplate = Aluminum + +[values] +material_print_temperature = =default_material_print_temperature + 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 +skin_overlap = 20 +speed_print = 60 +speed_layer_0 = 20 +speed_topbottom = =math.ceil(speed_print * 35 / 60) +speed_wall = =math.ceil(speed_print * 45 / 60) +speed_wall_0 = =math.ceil(speed_wall * 35 / 45) +wall_thickness = 1 + + +infill_pattern = triangles +speed_infill = =math.ceil(speed_print * 50 / 60) + +material_bed_temperature_layer_0 = 90 +default_material_bed_temperature = 80 +prime_blob_enable = False +layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg new file mode 100644 index 0000000000..117a9e0273 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg @@ -0,0 +1,33 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = fast +weight = -1 +material = generic_cpe +variant = AA 0.4 +buildplate = Aluminum + +[values] +cool_min_speed = 7 +material_print_temperature = =default_material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature - 5 +material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 +speed_print = 60 +speed_layer_0 = 20 +speed_topbottom = =math.ceil(speed_print * 30 / 60) +speed_wall = =math.ceil(speed_print * 40 / 60) +speed_wall_0 = =math.ceil(speed_wall * 30 / 40) + +infill_pattern = triangles +speed_infill = =math.ceil(speed_print * 50 / 60) + +material_bed_temperature_layer_0 = 90 +default_material_bed_temperature = 80 +prime_blob_enable = False +layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg index 6299071194..d25ab9f605 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -14,19 +14,21 @@ buildplate = Aluminum [values] cool_min_speed = 12 -layer_height_0 = 0.17 machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 80 -material_bed_temperature_layer_0 = 90 material_print_temperature = =default_material_print_temperature - 5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 -prime_blob_enable = False +retraction_combing_max_distance = 50 speed_print = 50 -speed_layer_0 = =math.ceil(speed_print * 20 / 50) +speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 30 / 50) -infill_pattern = zigzag -speed_infill = =math.ceil(speed_print * 40 / 50) \ No newline at end of file +infill_pattern = triangles +speed_infill = =math.ceil(speed_print * 40 / 50) + +material_bed_temperature_layer_0 = 90 +default_material_bed_temperature = 80 +prime_blob_enable = False +layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..bafc867d14 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg @@ -0,0 +1,32 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_cpe +variant = AA 0.4 +buildplate = Aluminum + +[values] +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_initial_print_temperature = =material_print_temperature - 5 +material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 +speed_print = 55 +speed_layer_0 = 20 +speed_topbottom = =math.ceil(speed_print * 30 / 55) +speed_wall = =math.ceil(speed_print * 30 / 55) + +infill_pattern = triangles +speed_infill = =math.ceil(speed_print * 45 / 55) + +material_bed_temperature_layer_0 = 90 +default_material_bed_temperature = 80 +prime_blob_enable = False +layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Draft_Print.inst.cfg new file mode 100644 index 0000000000..ddaef82dcc --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Draft_Print.inst.cfg @@ -0,0 +1,69 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_pc +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +adhesion_type = brim +brim_width = 20 +cool_fan_full_at_height = =layer_height_0 + layer_height +cool_fan_speed_max = 90 +cool_min_layer_time_fan_speed_max = 5 +cool_min_speed = 6 +infill_line_width = =round(line_width * 0.4 / 0.35, 2) +infill_overlap = 0 +infill_overlap_mm = 0.05 +infill_pattern = triangles +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_print_temperature = =default_material_print_temperature + 10 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +ooze_shield_angle = 40 +prime_tower_enable = True +prime_tower_wipe_enabled = True +raft_airgap = 0.25 +raft_interface_thickness = =max(layer_height * 1.5, 0.225) +retraction_count_max = 80 +retraction_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_overlap = 30 +speed_layer_0 = 25 +speed_print = 50 +speed_topbottom = 25 +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 25 / 40) +support_bottom_distance = =support_z_distance +support_interface_density = 87.5 +support_interface_pattern = lines +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +wall_0_inset = 0 +wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) +wall_thickness = 1.2 + +material_bed_temperature_layer_0 = 125 +default_material_bed_temperature = 115 +prime_blob_enable = False +layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Fast_Print.inst.cfg new file mode 100644 index 0000000000..5c85a32af0 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Fast_Print.inst.cfg @@ -0,0 +1,69 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = fast +weight = -1 +material = generic_pc +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +adhesion_type = brim +brim_width = 20 +cool_fan_full_at_height = =layer_height_0 + layer_height +cool_fan_speed_max = 85 +cool_min_layer_time_fan_speed_max = 5 +cool_min_speed = 7 +infill_line_width = =round(line_width * 0.4 / 0.35, 2) +infill_overlap_mm = 0.05 +infill_pattern = triangles +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_print_temperature = =default_material_print_temperature + 10 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +ooze_shield_angle = 40 +prime_tower_enable = True +prime_tower_wipe_enabled = True +raft_airgap = 0.25 +raft_interface_thickness = =max(layer_height * 1.5, 0.225) +retraction_count_max = 80 +retraction_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_overlap = 30 +speed_layer_0 = 25 +speed_print = 50 +speed_topbottom = 25 + +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 25 / 40) +support_bottom_distance = =support_z_distance +support_interface_density = 87.5 +support_interface_pattern = lines +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +wall_0_inset = 0 +wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) +wall_thickness = 1.2 + +material_bed_temperature_layer_0 = 125 +default_material_bed_temperature = 115 +prime_blob_enable = False +layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_High_Quality.inst.cfg index 2afaf21de1..dbeed2dfe9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -16,7 +16,7 @@ buildplate = Aluminum acceleration_enabled = True acceleration_print = 4000 adhesion_type = brim -brim_width = 10 +brim_width = 20 cool_fan_full_at_height = =layer_height_0 + layer_height cool_fan_speed_max = 50 cool_min_layer_time_fan_speed_max = 5 @@ -28,19 +28,15 @@ infill_pattern = triangles infill_wipe_dist = 0.1 jerk_enabled = True jerk_print = 25 -layer_height_0 = 0.17 machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature = 115 -material_bed_temperature_layer_0 = 125 material_final_print_temperature = =material_print_temperature - 10 material_initial_print_temperature = =material_print_temperature - 5 material_print_temperature = =default_material_print_temperature - 10 material_standby_temperature = 100 multiple_mesh_overlap = 0 ooze_shield_angle = 40 -prime_blob_enable = False prime_tower_enable = True prime_tower_wipe_enabled = True raft_airgap = 0.25 @@ -52,9 +48,9 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = =math.ceil(speed_print * 25 / 50) +speed_layer_0 = 25 speed_print = 50 -speed_topbottom = =math.ceil(speed_print * 25 / 50) +speed_topbottom = 25 speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) @@ -68,4 +64,7 @@ wall_0_inset = 0 wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) wall_thickness = 1.2 - +material_bed_temperature_layer_0 = 125 +default_material_bed_temperature = 115 +prime_blob_enable = False +layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..3694db3f76 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Normal_Quality.inst.cfg @@ -0,0 +1,68 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_pc +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +adhesion_type = brim +brim_width = 20 +cool_fan_full_at_height = =layer_height_0 + layer_height +cool_fan_speed_max = 50 +cool_min_layer_time_fan_speed_max = 5 +cool_min_speed = 5 +infill_line_width = =round(line_width * 0.4 / 0.35, 2) +infill_overlap = 0 +infill_pattern = triangles +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +ooze_shield_angle = 40 +prime_tower_enable = True +prime_tower_wipe_enabled = True +raft_airgap = 0.25 +raft_interface_thickness = =max(layer_height * 1.5, 0.225) +retraction_count_max = 80 +retraction_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_overlap = 30 +speed_layer_0 = 25 +speed_print = 50 +speed_topbottom = 25 + +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 25 / 40) +support_bottom_distance = =support_z_distance +support_interface_density = 87.5 +support_interface_pattern = lines +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +wall_0_inset = 0 +wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) +wall_thickness = 1.2 + +material_bed_temperature_layer_0 = 125 +default_material_bed_temperature = 115 +prime_blob_enable = False +layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Draft_Print.inst.cfg new file mode 100644 index 0000000000..f50c38f892 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Draft_Print.inst.cfg @@ -0,0 +1,65 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_pp +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 20 +cool_fan_speed_max = 100 +cool_min_layer_time = 7 +cool_min_layer_time_fan_speed_max = 7 +cool_min_speed = 2.5 +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_overlap = 0 +infill_pattern = tetrahedral +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +line_width = =machine_nozzle_size * 0.95 +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_bed_temperature_layer_0 = =material_bed_temperature +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_print_temperature = =default_material_print_temperature - 5 +material_print_temperature_layer_0 = =material_print_temperature + 5 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_enable = False +prime_tower_size = 16 +prime_tower_wipe_enabled = True +retraction_count_max = 12 +retraction_extra_prime_amount = 0.8 +retraction_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 18 +speed_equalize_flow_enabled = True +speed_layer_0 = 15 +speed_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 25) +speed_travel_layer_0 = 50 +speed_wall = =math.ceil(speed_print * 25 / 25) +speed_wall_0 = =math.ceil(speed_wall * 25 / 25) +support_angle = 50 +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +wall_0_inset = 0 +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 + +default_material_bed_temperature = 95 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Fast_Print.inst.cfg new file mode 100644 index 0000000000..8f07b2a6a9 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Fast_Print.inst.cfg @@ -0,0 +1,67 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = fast +weight = -1 +material = generic_pp +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 20 +cool_fan_speed_max = 100 +cool_min_layer_time = 7 +cool_min_layer_time_fan_speed_max = 7 +cool_min_speed = 2.5 +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_overlap = 0 +infill_pattern = tetrahedral +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +line_width = =machine_nozzle_size * 0.95 +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_bed_temperature_layer_0 = =material_bed_temperature +material_final_print_temperature = =material_print_temperature - 12 +material_initial_print_temperature = =material_print_temperature - 2 +material_print_temperature = =default_material_print_temperature - 13 +material_print_temperature_layer_0 = =material_print_temperature + 3 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_enable = False +prime_tower_size = 16 +prime_tower_wipe_enabled = True +retraction_count_max = 12 +retraction_extra_prime_amount = 0.8 +retraction_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 18 +speed_equalize_flow_enabled = True +speed_layer_0 = 15 +speed_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 25) + +speed_travel_layer_0 = 50 +speed_wall = =math.ceil(speed_print * 25 / 25) +speed_wall_0 = =math.ceil(speed_wall * 25 / 25) +support_angle = 50 +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +top_bottom_thickness = 1.1 +wall_0_inset = 0 +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 + +default_material_bed_temperature = 95 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..440d8cbfe6 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Normal_Quality.inst.cfg @@ -0,0 +1,68 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = normal +weight = 0 +material = generic_pp +variant = AA 0.4 +buildplate = Aluminum + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 20 +cool_fan_speed_max = 100 +cool_min_layer_time = 7 +cool_min_layer_time_fan_speed_max = 7 +cool_min_speed = 2.5 +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_overlap = 0 +infill_pattern = tetrahedral +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +line_width = =machine_nozzle_size * 0.95 +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +material_bed_temperature_layer_0 = =material_bed_temperature +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_print_temperature = =default_material_print_temperature - 15 +material_print_temperature_layer_0 = =material_print_temperature + 3 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_enable = False +prime_tower_size = 16 +prime_tower_wipe_enabled = True +retraction_count_max = 12 +retraction_extra_prime_amount = 0.8 +retraction_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 18 +speed_equalize_flow_enabled = True +speed_layer_0 = 15 +speed_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 25) + +speed_travel_layer_0 = 50 +speed_wall = =math.ceil(speed_print * 25 / 25) +speed_wall_0 = =math.ceil(speed_wall * 25 / 25) +support_angle = 50 +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +top_bottom_thickness = 1 +wall_0_inset = 0 +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 + +default_material_bed_temperature = 95 + diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Draft_Print.inst.cfg index 911fc6e78e..56a16595e8 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Superdraft_Print.inst.cfg index 0fcdac4a85..77c0031feb 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Verydraft_Print.inst.cfg index e3346bbd1d..5a4ee5c515 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg index e78006689b..a1c4479973 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg @@ -4,12 +4,13 @@ name = Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 material = generic_cpe_plus variant = AA 0.8 +is_experimental = True [values] brim_width = 14 @@ -22,7 +23,7 @@ material_print_temperature = =default_material_print_temperature - 10 material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 prime_tower_enable = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg index c6d0962157..3bde53d593 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Sprint - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 material = generic_cpe_plus variant = AA 0.8 +is_experimental = True [values] brim_width = 14 @@ -22,7 +23,7 @@ material_print_temperature = =default_material_print_temperature - 5 material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 prime_tower_enable = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg index b80f773594..159c909ba5 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Extra Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 material = generic_cpe_plus variant = AA 0.8 +is_experimental = True [values] brim_width = 14 @@ -22,7 +23,7 @@ material_print_temperature = =default_material_print_temperature - 7 material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 prime_tower_enable = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Draft_Print.inst.cfg index 532aacabf7..af016c06da 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -17,6 +17,7 @@ line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 15 material_standby_temperature = 100 prime_tower_enable = True +retraction_combing_max_distance = 50 speed_print = 40 speed_topbottom = =math.ceil(speed_print * 25 / 40) speed_wall = =math.ceil(speed_print * 30 / 40) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Superdraft_Print.inst.cfg index 55b9ae8315..17036438a9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 @@ -17,6 +17,7 @@ line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 20 material_standby_temperature = 100 prime_tower_enable = True +retraction_combing_max_distance = 50 speed_print = 45 speed_topbottom = =math.ceil(speed_print * 30 / 45) speed_wall = =math.ceil(speed_print * 40 / 45) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Verydraft_Print.inst.cfg index 01761062a4..2973abfdd3 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 @@ -17,6 +17,7 @@ line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 17 material_standby_temperature = 100 prime_tower_enable = True +retraction_combing_max_distance = 50 speed_print = 40 speed_topbottom = =math.ceil(speed_print * 25 / 40) speed_wall = =math.ceil(speed_print * 30 / 40) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Draft_Print.inst.cfg index 2108839d3f..7760ffa89e 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Superdraft_Print.inst.cfg index 0702d174a0..2499e6b3d2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Verydraft_Print.inst.cfg index d02d410ed6..2e611aeecc 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg index 0ed4e3d994..2ac89416aa 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg @@ -4,12 +4,13 @@ name = Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = 0 +weight = -2 material = generic_pc variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg index 53bf1d3107..31db0f93dd 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Sprint - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft -weight = -2 +weight = -4 material = generic_pc variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg index d9c45c2634..2ef532a8b9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Extra Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -1 +weight = -3 material = generic_pc variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Draft_Print.inst.cfg index 7db4e96311..ecfab94ef3 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Superdraft_Print.inst.cfg index c59f015b5d..38f3c9c9d9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Verydraft_Print.inst.cfg index 6fdff8bf8d..b4b65ee5f7 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Draft_Print.inst.cfg index fee58b367d..9a413c42c1 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Superdraft_Print.inst.cfg index aaa810e864..0286f482cf 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Verydraft_Print.inst.cfg index 5b8aa6d2e1..ed53d87b78 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Draft_Print.inst.cfg index 50dead746b..790ff4a922 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Superdraft_Print.inst.cfg index 0bdb088f8c..9111bb5804 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Verydraft_Print.inst.cfg index c7cb5902a2..af0fb786d2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Draft_Print.inst.cfg index e8c58ce32c..479aab6e7c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -23,11 +23,11 @@ jerk_support = =math.ceil(jerk_print * 25 / 25) jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25) machine_nozzle_cool_down_speed = 0.5 machine_nozzle_heat_up_speed = 2.5 -material_final_print_temperature = =material_print_temperature - 21 +material_final_print_temperature = =material_print_temperature material_flow = 105 -material_initial_print_temperature = =material_print_temperature - 16 +material_initial_print_temperature = =material_print_temperature material_print_temperature = =default_material_print_temperature - 2 -material_print_temperature_layer_0 = =material_print_temperature + 4 +material_print_temperature_layer_0 = =material_print_temperature + 19 material_standby_temperature = 100 multiple_mesh_overlap = 0.2 prime_tower_enable = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg index ff723c4ed4..2b2f280730 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 @@ -24,11 +24,11 @@ jerk_support = =math.ceil(jerk_print * 25 / 25) jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25) machine_nozzle_cool_down_speed = 0.5 machine_nozzle_heat_up_speed = 2.5 -material_final_print_temperature = =material_print_temperature - 21 +material_final_print_temperature = =material_print_temperature material_flow = 105 -material_initial_print_temperature = =material_print_temperature - 16 +material_initial_print_temperature = =material_print_temperature material_print_temperature = =default_material_print_temperature + 2 -material_print_temperature_layer_0 = =material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 15 material_standby_temperature = 100 multiple_mesh_overlap = 0.2 prime_tower_enable = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Verydraft_Print.inst.cfg index 7e36e9d354..ef38d96aea 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 @@ -24,10 +24,10 @@ jerk_support = =math.ceil(jerk_print * 25 / 25) jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25) machine_nozzle_cool_down_speed = 0.5 machine_nozzle_heat_up_speed = 2.5 -material_final_print_temperature = =material_print_temperature - 21 +material_final_print_temperature = =material_print_temperature material_flow = 105 -material_initial_print_temperature = =material_print_temperature - 16 -material_print_temperature_layer_0 = =material_print_temperature + 2 +material_initial_print_temperature = =material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 17 material_standby_temperature = 100 multiple_mesh_overlap = 0.2 prime_tower_enable = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg index 3d984e1dff..e0dd599317 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -13,15 +13,16 @@ variant = AA 0.8 buildplate = Aluminum [values] -layer_height_0 = 0.3 line_width = =machine_nozzle_size * 0.875 -material_bed_temperature = 90 -material_bed_temperature_layer_0 = 100 material_print_temperature = =default_material_print_temperature + 20 material_standby_temperature = 100 -prime_blob_enable = False speed_print = 50 speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) retract_at_layer_change = False + +material_bed_temperature_layer_0 = 100 +default_material_bed_temperature = 90 +prime_blob_enable = False +layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..0ca1b63c0b --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Superdraft_Print.inst.cfg @@ -0,0 +1,28 @@ +[general] +version = 4 +name = Sprint +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = superdraft +weight = -4 +material = generic_abs +variant = AA 0.8 +buildplate = Aluminum + +[values] +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature + 25 +material_standby_temperature = 100 +speed_print = 50 +speed_topbottom = =math.ceil(speed_print * 30 / 50) +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 30 / 40) +retract_at_layer_change = False + +material_bed_temperature_layer_0 = 100 +default_material_bed_temperature = 90 +prime_blob_enable = False +layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..1611c3fedd --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Verydraft_Print.inst.cfg @@ -0,0 +1,28 @@ +[general] +version = 4 +name = Extra Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = verydraft +weight = -3 +material = generic_abs +variant = AA 0.8 +buildplate = Aluminum + +[values] +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature + 22 +material_standby_temperature = 100 +speed_print = 50 +speed_topbottom = =math.ceil(speed_print * 30 / 50) +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 30 / 40) +retract_at_layer_change = False + +material_bed_temperature_layer_0 = 100 +default_material_bed_temperature = 90 +prime_blob_enable = False +layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg index 6fd60c197a..6b0f12f8dc 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg @@ -4,34 +4,31 @@ name = Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 material = generic_cpe_plus variant = AA 0.8 buildplate = Aluminum +is_experimental = True [values] brim_width = 14 cool_fan_full_at_height = =layer_height_0 + 14 * layer_height infill_before_walls = True -layer_height_0 = 0.3 line_width = =machine_nozzle_size * 0.9375 machine_nozzle_cool_down_speed = 0.9 machine_nozzle_heat_up_speed = 1.4 -material_bed_temperature = 105 -material_bed_temperature_layer_0 = 115 material_print_temperature = =default_material_print_temperature - 10 material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 -prime_blob_enable = False prime_tower_enable = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 -speed_layer_0 = =math.ceil(speed_print * 15 / 50) +speed_layer_0 = 15 speed_print = 50 speed_slowdown_layers = 15 speed_topbottom = =math.ceil(speed_print * 35 / 50) @@ -41,3 +38,8 @@ support_bottom_distance = =support_z_distance support_line_width = =round(line_width * 0.6 / 0.7, 2) support_z_distance = =layer_height top_bottom_thickness = 1.2 + +material_bed_temperature_layer_0 = 115 +default_material_bed_temperature = 105 +prime_blob_enable = False +layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..78ad1f6eac --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg @@ -0,0 +1,44 @@ +[general] +version = 4 +name = Sprint +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = superdraft +weight = -4 +material = generic_cpe_plus +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 14 +cool_fan_full_at_height = =layer_height_0 + 7 * layer_height +infill_before_walls = True +line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 1.4 +material_print_temperature = =default_material_print_temperature - 5 +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +prime_tower_enable = True +retraction_combing_max_distance = 50 +retraction_hop = 0.1 +retraction_hop_enabled = False +skin_overlap = 0 +speed_layer_0 = 15 +speed_print = 50 +speed_slowdown_layers = 8 +speed_topbottom = =math.ceil(speed_print * 35 / 50) +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 35 / 40) +support_bottom_distance = =support_z_distance +support_line_width = =round(line_width * 0.6 / 0.7, 2) +support_z_distance = =layer_height +top_bottom_thickness = 1.2 + +material_bed_temperature_layer_0 = 115 +default_material_bed_temperature = 105 +prime_blob_enable = False +layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..7be2cdbcc8 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg @@ -0,0 +1,44 @@ +[general] +version = 4 +name = Extra Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = verydraft +weight = -3 +material = generic_cpe_plus +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 14 +cool_fan_full_at_height = =layer_height_0 + 9 * layer_height +infill_before_walls = True +line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 1.4 +material_print_temperature = =default_material_print_temperature - 7 +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +prime_tower_enable = True +retraction_combing_max_distance = 50 +retraction_hop = 0.1 +retraction_hop_enabled = False +skin_overlap = 0 +speed_layer_0 = 15 +speed_print = 50 +speed_slowdown_layers = 10 +speed_topbottom = =math.ceil(speed_print * 35 / 50) +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 35 / 40) +support_bottom_distance = =support_z_distance +support_line_width = =round(line_width * 0.6 / 0.7, 2) +support_z_distance = =layer_height +top_bottom_thickness = 1.2 + +material_bed_temperature_layer_0 = 115 +default_material_bed_temperature = 105 +prime_blob_enable = False +layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg index 37aa25f9d8..67132b67fc 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -14,16 +14,18 @@ buildplate = Aluminum [values] brim_width = 15 -layer_height_0 = 0.3 line_width = =machine_nozzle_size * 0.875 -material_bed_temperature = 80 -material_bed_temperature_layer_0 = 90 material_print_temperature = =default_material_print_temperature + 15 material_standby_temperature = 100 -prime_blob_enable = False prime_tower_enable = True +retraction_combing_max_distance = 50 speed_print = 40 speed_topbottom = =math.ceil(speed_print * 25 / 40) speed_wall = =math.ceil(speed_print * 30 / 40) -jerk_travel = 50 \ No newline at end of file +jerk_travel = 50 + +material_bed_temperature_layer_0 = 90 +default_material_bed_temperature = 80 +prime_blob_enable = False +layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..49e70af112 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg @@ -0,0 +1,32 @@ +[general] +version = 4 +name = Sprint +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = superdraft +weight = -4 +material = generic_cpe +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 15 +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature + 20 +material_standby_temperature = 100 +prime_tower_enable = True +retraction_combing_max_distance = 50 +speed_print = 45 +speed_topbottom = =math.ceil(speed_print * 30 / 45) +speed_wall = =math.ceil(speed_print * 40 / 45) +speed_wall_0 = =math.ceil(speed_wall * 30 / 40) + +jerk_travel = 50 + +material_bed_temperature_layer_0 = 90 +default_material_bed_temperature = 80 +prime_blob_enable = False +layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..9d781092b1 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = Extra Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = verydraft +weight = -3 +material = generic_cpe +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 15 +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature + 17 +material_standby_temperature = 100 +prime_tower_enable = True +retraction_combing_max_distance = 50 +speed_print = 40 +speed_topbottom = =math.ceil(speed_print * 25 / 40) +speed_wall = =math.ceil(speed_print * 30 / 40) + +jerk_travel = 50 + +material_bed_temperature_layer_0 = 90 +default_material_bed_temperature = 80 +prime_blob_enable = False +layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg index 9ebf2ea151..04170b3ba2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg @@ -4,33 +4,35 @@ name = Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = 0 +weight = -2 material = generic_pc variant = AA 0.8 buildplate = Aluminum +is_experimental = True [values] brim_width = 10 cool_fan_full_at_height = =layer_height_0 + 14 * layer_height infill_before_walls = True -layer_height_0 = 0.3 line_width = =machine_nozzle_size * 0.875 -material_bed_temperature = 115 -material_bed_temperature_layer_0 = 125 material_print_temperature = =default_material_print_temperature - 5 material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 -prime_blob_enable = False raft_airgap = 0.5 raft_margin = 15 skin_overlap = 0 -speed_layer_0 = =math.ceil(speed_print * 15 / 50) +speed_layer_0 = 15 speed_print = 50 speed_slowdown_layers = 15 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) support_line_width = =round(line_width * 0.6 / 0.7, 2) + +material_bed_temperature_layer_0 = 125 +default_material_bed_temperature = 115 +prime_blob_enable = False +layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..90b7afdb8d --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg @@ -0,0 +1,36 @@ +[general] +version = 4 +name = Sprint +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = superdraft +weight = -4 +material = generic_pc +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 10 +cool_fan_full_at_height = =layer_height_0 + 7 * layer_height +infill_before_walls = True +line_width = =machine_nozzle_size * 0.875 +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +raft_airgap = 0.5 +raft_margin = 15 +skin_overlap = 0 +speed_layer_0 = 15 +speed_print = 50 +speed_slowdown_layers = 8 +speed_topbottom = =math.ceil(speed_print * 25 / 50) +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 30 / 40) +support_line_width = =round(line_width * 0.6 / 0.7, 2) + +material_bed_temperature_layer_0 = 125 +default_material_bed_temperature = 115 +prime_blob_enable = False +layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..f9b93eac37 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg @@ -0,0 +1,38 @@ +[general] +version = 4 +name = Extra Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = verydraft +weight = -3 +material = generic_pc +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 10 +cool_fan_full_at_height = =layer_height_0 + 9 * layer_height +infill_before_walls = True +line_width = =machine_nozzle_size * 0.875 +material_print_temperature = =default_material_print_temperature - 2 +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +raft_airgap = 0.5 +raft_margin = 15 +skin_overlap = 0 +speed_layer_0 = 15 +speed_print = 50 +speed_slowdown_layers = 10 +speed_topbottom = =math.ceil(speed_print * 25 / 50) +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 30 / 40) +support_line_width = =round(line_width * 0.6 / 0.7, 2) + +material_bed_temperature_layer_0 = 125 +default_material_bed_temperature = 115 +prime_blob_enable = False +layer_height_0 = 0.3 + diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg index 94bede16bd..3569aac74b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -23,14 +23,13 @@ infill_pattern = tetrahedral jerk_prime_tower = =math.ceil(jerk_print * 25 / 25) jerk_support = =math.ceil(jerk_print * 25 / 25) jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25) -material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_bed_temperature_layer_0 = =material_bed_temperature material_print_temperature = =default_material_print_temperature - 2 material_print_temperature_layer_0 = =default_material_print_temperature + 2 material_standby_temperature = 100 multiple_mesh_overlap = 0.2 prime_tower_enable = True prime_tower_flow = 100 -prime_tower_min_volume = 10 retract_at_layer_change = False retraction_count_max = 12 retraction_extra_prime_amount = 0.5 @@ -51,3 +50,5 @@ travel_compensate_overlapping_walls_0_enabled = False wall_0_wipe_dist = =line_width * 2 wall_line_width_x = =round(line_width * 0.8 / 0.8, 2) wall_thickness = 1.6 + +default_material_bed_temperature = 95 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..0e10a17210 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg @@ -0,0 +1,55 @@ +[general] +version = 4 +name = Sprint +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = superdraft +weight = -4 +material = generic_pp +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 25 +cool_min_layer_time_fan_speed_max = 6 +cool_min_speed = 17 +top_skin_expand_distance = =line_width * 2 +infill_before_walls = True +infill_line_width = =round(line_width * 0.7 / 0.8, 2) +infill_pattern = tetrahedral +jerk_prime_tower = =math.ceil(jerk_print * 25 / 25) +jerk_support = =math.ceil(jerk_print * 25 / 25) +jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25) +material_bed_temperature_layer_0 = =material_bed_temperature +material_print_temperature = =default_material_print_temperature + 2 +material_print_temperature_layer_0 = =default_material_print_temperature + 2 +material_standby_temperature = 100 +multiple_mesh_overlap = 0.2 +prime_tower_enable = True +prime_tower_flow = 100 +retract_at_layer_change = False +retraction_count_max = 12 +retraction_extra_prime_amount = 0.5 +retraction_hop = 0.5 +retraction_min_travel = 1.5 +retraction_prime_speed = 15 +skin_line_width = =round(line_width * 0.78 / 0.8, 2) + +speed_wall_x = =math.ceil(speed_wall * 30 / 30) +support_bottom_distance = =support_z_distance +support_line_width = =round(line_width * 0.7 / 0.8, 2) +support_offset = =line_width +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 45 +top_bottom_thickness = 1.6 +travel_compensate_overlapping_walls_0_enabled = False +wall_0_wipe_dist = =line_width * 2 +wall_line_width_x = =round(line_width * 0.8 / 0.8, 2) +wall_thickness = 1.6 + +default_material_bed_temperature = 95 + diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..79d58f56f4 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg @@ -0,0 +1,53 @@ +[general] +version = 4 +name = Extra Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = verydraft +weight = -3 +material = generic_pp +variant = AA 0.8 +buildplate = Aluminum + +[values] +brim_width = 25 +cool_min_layer_time_fan_speed_max = 6 +cool_min_speed = 17 +top_skin_expand_distance = =line_width * 2 +infill_before_walls = True +infill_line_width = =round(line_width * 0.7 / 0.8, 2) +infill_pattern = tetrahedral +jerk_prime_tower = =math.ceil(jerk_print * 25 / 25) +jerk_support = =math.ceil(jerk_print * 25 / 25) +jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25) +material_bed_temperature_layer_0 = =material_bed_temperature +material_print_temperature_layer_0 = =default_material_print_temperature + 2 +material_standby_temperature = 100 +multiple_mesh_overlap = 0.2 +prime_tower_enable = True +prime_tower_flow = 100 +retract_at_layer_change = False +retraction_count_max = 12 +retraction_extra_prime_amount = 0.5 +retraction_hop = 0.5 +retraction_min_travel = 1.5 +retraction_prime_speed = 15 +skin_line_width = =round(line_width * 0.78 / 0.8, 2) + +speed_wall_x = =math.ceil(speed_wall * 30 / 30) +support_bottom_distance = =support_z_distance +support_line_width = =round(line_width * 0.7 / 0.8, 2) +support_offset = =line_width +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 45 +top_bottom_thickness = 1.6 +travel_compensate_overlapping_walls_0_enabled = False +wall_0_wipe_dist = =line_width * 2 +wall_line_width_x = =round(line_width * 0.8 / 0.8, 2) +wall_thickness = 1.6 + +default_material_bed_temperature = 95 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg index 3997943db1..804e9fd62b 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -12,7 +12,9 @@ material = generic_pva variant = BB 0.4 [values] +brim_replaces_support = False material_print_temperature = =default_material_print_temperature + 10 material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 20 +support_brim_enable = True diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg index 52fcca9934..52a571c4f1 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -12,8 +12,10 @@ material = generic_pva variant = BB 0.4 [values] +brim_replaces_support = False material_print_temperature = =default_material_print_temperature + 5 material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 15 +support_brim_enable = True support_infill_sparse_thickness = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg index bc183a4549..e8e293c81b 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -12,6 +12,8 @@ material = generic_pva variant = BB 0.4 [values] +brim_replaces_support = False material_standby_temperature = 100 prime_tower_enable = False +support_brim_enable = True support_infill_sparse_thickness = 0.18 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg index 0d5cc5bcfc..b512b47514 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -12,5 +12,7 @@ material = generic_pva variant = BB 0.4 [values] +brim_replaces_support = False material_standby_temperature = 100 prime_tower_enable = False +support_brim_enable = True diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg index 465c526f2c..04015fe0f8 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -12,5 +12,7 @@ material = generic_pva variant = BB 0.8 [values] +brim_replaces_support = False material_print_temperature = =default_material_print_temperature + 5 material_standby_temperature = 100 +support_brim_enable = True diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg index b3f6df39f9..8d79e8fafe 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 @@ -12,5 +12,7 @@ material = generic_pva variant = BB 0.8 [values] +brim_replaces_support = False material_standby_temperature = 100 +support_brim_enable = True support_interface_height = 0.9 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg index d6ef272a4d..31663ab192 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 @@ -12,6 +12,8 @@ material = generic_pva variant = BB 0.8 [values] +brim_replaces_support = False material_standby_temperature = 100 +support_brim_enable = True support_infill_sparse_thickness = 0.3 support_interface_height = 1.2 diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFCPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFCPE_Draft_Print.inst.cfg new file mode 100644 index 0000000000..e3ecf51f13 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFCPE_Draft_Print.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_cffcpe +variant = CC 0.6 + +[values] +adhesion_type = skirt +cool_fan_enabled = True +cool_min_layer_time = 7 +cool_min_layer_time_fan_speed_max = 15 +cool_min_speed = 6 +infill_line_width = =line_width +initial_layer_line_width_factor = 130.0 +line_width = =machine_nozzle_size * (0.58/0.6) +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +skin_overlap = 20 +support_bottom_distance = =support_z_distance / 2 +support_top_distance = =support_z_distance +support_z_distance = =layer_height * 2 +wall_line_width_x = =line_width diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFPA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFPA_Draft_Print.inst.cfg new file mode 100644 index 0000000000..f73379dd3d --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFPA_Draft_Print.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_cffpa +variant = CC 0.6 + +[values] +adhesion_type = skirt +cool_fan_enabled = True +cool_min_layer_time = 7 +cool_min_layer_time_fan_speed_max = 15 +cool_min_speed = 6 +infill_line_width = =line_width +initial_layer_line_width_factor = 130.0 +line_width = =machine_nozzle_size * (0.58/0.6) +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +skin_overlap = 20 +support_bottom_distance = =support_z_distance / 2 +support_top_distance = =support_z_distance +support_z_distance = =layer_height * 2 +wall_line_width_x = =line_width diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFCPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFCPE_Draft_Print.inst.cfg new file mode 100644 index 0000000000..906f22a66f --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFCPE_Draft_Print.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_gffcpe +variant = CC 0.6 + +[values] +adhesion_type = brim +cool_fan_enabled = True +cool_min_layer_time = 7 +cool_min_layer_time_fan_speed_max = 15 +cool_min_speed = 6 +infill_line_width = =line_width +initial_layer_line_width_factor = 130.0 +line_width = =machine_nozzle_size * (0.58/0.6) +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +skin_overlap = 20 +support_bottom_distance = =support_z_distance / 2 +support_top_distance = =support_z_distance +support_z_distance = =layer_height * 2 +wall_line_width_x = =line_width diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFPA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFPA_Draft_Print.inst.cfg new file mode 100644 index 0000000000..e411fa877b --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFPA_Draft_Print.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -2 +material = generic_gffpa +variant = CC 0.6 + +[values] +adhesion_type = brim +cool_fan_enabled = True +cool_min_layer_time = 7 +cool_min_layer_time_fan_speed_max = 15 +cool_min_speed = 6 +infill_line_width = =line_width +initial_layer_line_width_factor = 130.0 +line_width = =machine_nozzle_size * (0.58/0.6) +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +skin_overlap = 20 +support_bottom_distance = =support_z_distance / 2 +support_top_distance = =support_z_distance +support_z_distance = =layer_height * 2 +wall_line_width_x = =line_width diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_PLA_Draft_Print.inst.cfg new file mode 100644 index 0000000000..156799aa6f --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_PLA_Draft_Print.inst.cfg @@ -0,0 +1,43 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = draft +weight = -3 +material = generic_pla +variant = CC 0.6 +is_experimental = True + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =100 +cool_min_speed = 2 +gradual_infill_step_height = =3 * layer_height +infill_line_width = =round(line_width * 0.65 / 0.75, 2) +infill_pattern = triangles +line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_final_print_temperature = =max(-273.15, material_print_temperature - 15) +material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) +material_print_temperature = =default_material_print_temperature + 10 +material_standby_temperature = 100 +prime_tower_enable = True +retract_at_layer_change = False +speed_print = 45 +speed_topbottom = =math.ceil(speed_print * 35 / 45) +speed_wall = =math.ceil(speed_print * 40 / 45) +speed_wall_x = =speed_wall +speed_wall_0 = =math.ceil(speed_wall * 35 / 40) +support_angle = 70 +support_line_width = =line_width * 0.75 +support_pattern = ='triangles' +support_xy_distance = =wall_line_width_0 * 1.5 +top_bottom_thickness = =layer_height * 4 +wall_line_width = =round(line_width * 0.75 / 0.75, 2) +wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) +wall_thickness = =wall_line_width_0 + wall_line_width_x diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_PLA_Fast_Print.inst.cfg new file mode 100644 index 0000000000..f69093ff02 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_PLA_Fast_Print.inst.cfg @@ -0,0 +1,43 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = quality +quality_type = fast +weight = -2 +material = generic_pla +variant = CC 0.6 +is_experimental = True + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =100 +cool_min_speed = 2 +gradual_infill_step_height = =3 * layer_height +infill_line_width = =round(line_width * 0.65 / 0.75, 2) +infill_pattern = triangles +line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_final_print_temperature = =max(-273.15, material_print_temperature - 15) +material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) +material_print_temperature = =default_material_print_temperature + 10 +material_standby_temperature = 100 +prime_tower_enable = True +retract_at_layer_change = False +speed_print = 45 +speed_topbottom = =math.ceil(speed_print * 35 / 45) +speed_wall = =math.ceil(speed_print * 40 / 45) +speed_wall_x = =speed_wall +speed_wall_0 = =math.ceil(speed_wall * 35 / 40) +support_angle = 70 +support_line_width = =line_width * 0.75 +support_pattern = ='triangles' +support_xy_distance = =wall_line_width_0 * 1.5 +top_bottom_thickness = =layer_height * 4 +wall_line_width = =round(line_width * 0.75 / 0.75, 2) +wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) +wall_thickness = =wall_line_width_0 + wall_line_width_x diff --git a/resources/quality/ultimaker_s5/um_s5_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Draft_Quality.inst.cfg index ed5303637b..6d5e9cce24 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Draft_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Fast_Quality.inst.cfg index ee9c6a8409..64fa64c463 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Fast_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_global_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_High_Quality.inst.cfg index cd1c269b1d..0f15089757 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_High_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 global_quality = True [values] diff --git a/resources/quality/ultimaker_s5/um_s5_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Normal_Quality.inst.cfg index 099ba7c584..f31a3e5ee3 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_global_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Superdraft_Quality.inst.cfg index 4c0bd40bd1..d97e906d8e 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Superdraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_global_Verydraft_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Verydraft_Quality.inst.cfg index ec4ec910ff..4a6a431e5f 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Verydraft_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/vertex_delta_k8800/k8800_ABS_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_ABS_Extreme_Quality.inst.cfg index 70aac3f666..d1547719f3 100644 --- a/resources/quality/vertex_delta_k8800/k8800_ABS_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_ABS_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_ABS_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_ABS_High_Quality.inst.cfg index 564b330132..169fda1f47 100644 --- a/resources/quality/vertex_delta_k8800/k8800_ABS_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_ABS_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_ABS_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_ABS_Normal_Quality.inst.cfg index e2f740a60a..a2a298542e 100644 --- a/resources/quality/vertex_delta_k8800/k8800_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/vertex_delta_k8800/k8800_Global_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_Global_Extreme_Quality.inst.cfg index 48e80b5512..f82194c911 100644 --- a/resources/quality/vertex_delta_k8800/k8800_Global_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_Global_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_Global_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_Global_High_Quality.inst.cfg index 496144772c..9d8f5fa98d 100644 --- a/resources/quality/vertex_delta_k8800/k8800_Global_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_Global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_Global_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_Global_Normal_Quality.inst.cfg index 75ae5f15e6..08bc3aa522 100644 --- a/resources/quality/vertex_delta_k8800/k8800_Global_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_Global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/vertex_delta_k8800/k8800_PET_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PET_Extreme_Quality.inst.cfg index 8309106d9f..09c3902405 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PET_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PET_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_PET_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PET_High_Quality.inst.cfg index 6efaa3299f..058ed545b7 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PET_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PET_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_PET_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PET_Normal_Quality.inst.cfg index bd3b0c35fb..595f2be25f 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PET_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PET_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/vertex_delta_k8800/k8800_PLA_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PLA_Extreme_Quality.inst.cfg index d10b4c3f8d..9ec084e758 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PLA_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PLA_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_PLA_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PLA_High_Quality.inst.cfg index ede77b0dfe..9f1bd25564 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PLA_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_PLA_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PLA_Normal_Quality.inst.cfg index a75cff6968..b60c8d8496 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/vertex_delta_k8800/k8800_TPU_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_TPU_Extreme_Quality.inst.cfg index bee6b3bf11..567de3a73b 100644 --- a/resources/quality/vertex_delta_k8800/k8800_TPU_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_TPU_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_TPU_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_TPU_High_Quality.inst.cfg index 8b0f87cc77..dbcb27b229 100644 --- a/resources/quality/vertex_delta_k8800/k8800_TPU_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_TPU_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_TPU_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_TPU_Normal_Quality.inst.cfg index bd4e04744f..975556bb86 100644 --- a/resources/quality/vertex_delta_k8800/k8800_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_TPU_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/zyyx/zyyx_agile_global_fast.inst.cfg b/resources/quality/zyyx/zyyx_agile_global_fast.inst.cfg index 67e350b39e..a795485a6d 100644 --- a/resources/quality/zyyx/zyyx_agile_global_fast.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_global_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = 1 diff --git a/resources/quality/zyyx/zyyx_agile_global_fine.inst.cfg b/resources/quality/zyyx/zyyx_agile_global_fine.inst.cfg index 58e13b22c5..6133c0aa99 100644 --- a/resources/quality/zyyx/zyyx_agile_global_fine.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_global_fine.inst.cfg @@ -4,10 +4,10 @@ name = Fine definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fine -weight = 3 +weight = 1 global_quality = True [values] diff --git a/resources/quality/zyyx/zyyx_agile_global_normal.inst.cfg b/resources/quality/zyyx/zyyx_agile_global_normal.inst.cfg index cb4e042e7b..4a5bfc7d47 100644 --- a/resources/quality/zyyx/zyyx_agile_global_normal.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_global_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 global_quality = True [values] diff --git a/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg index c7d7faf575..ec89e83337 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg @@ -4,11 +4,11 @@ name = Fast definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = 1 -material = zyyx_pro_flex +material = generic_tpu [values] layer_height = 0.3 diff --git a/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg index 1e0cc16df0..e9ce3c7244 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg @@ -4,11 +4,11 @@ name = Fine definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fine -weight = 3 -material = zyyx_pro_flex +weight = 1 +material = generic_tpu [values] layer_height = 0.12 diff --git a/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg index 8f7be7b481..81d7bcd308 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg @@ -4,11 +4,11 @@ name = Normal definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 -material = zyyx_pro_flex +weight = 0 +material = generic_tpu [values] layer_height = 0.2 diff --git a/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg index 7ac7dc89b5..f805c0f3be 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg @@ -4,11 +4,11 @@ name = Fast definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = 1 -material = zyyx_pro_pla +material = generic_pla [values] layer_height = 0.3 diff --git a/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg index 98033908f6..9647938cf6 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg @@ -4,11 +4,11 @@ name = Fine definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fine -weight = 3 -material = zyyx_pro_pla +weight = 1 +material = generic_pla [values] layer_height = 0.1 diff --git a/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg index b694bd9172..af2a32384c 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg @@ -4,11 +4,11 @@ name = Normal definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 -material = zyyx_pro_pla +weight = 0 +material = generic_pla [values] layer_height = 0.2 diff --git a/resources/setting_visibility/advanced.cfg b/resources/setting_visibility/advanced.cfg index 9cee353f0c..f26a67b3c1 100644 --- a/resources/setting_visibility/advanced.cfg +++ b/resources/setting_visibility/advanced.cfg @@ -124,6 +124,7 @@ brim_outside_only prime_tower_enable prime_tower_position_x prime_tower_position_y +prime_tower_brim_enable [meshfix] diff --git a/resources/setting_visibility/expert.cfg b/resources/setting_visibility/expert.cfg index 0ca2cbab70..d83a7775c5 100644 --- a/resources/setting_visibility/expert.cfg +++ b/resources/setting_visibility/expert.cfg @@ -110,7 +110,6 @@ material_extrusion_cool_down_speed default_material_bed_temperature material_bed_temperature material_bed_temperature_layer_0 -material_diameter material_adhesion_tendency material_surface_energy material_flow @@ -244,6 +243,7 @@ support_offset support_infill_sparse_thickness gradual_support_infill_steps gradual_support_infill_step_height +minimum_support_area support_interface_enable support_roof_enable support_bottom_enable @@ -255,6 +255,7 @@ support_interface_density support_roof_density support_bottom_density support_interface_pattern +minimum_interface_area support_use_towers support_tower_diameter support_minimal_diameter @@ -298,6 +299,7 @@ prime_tower_position_x prime_tower_position_y prime_tower_flow prime_tower_wipe_enabled +prime_tower_brim_enable ooze_shield_enabled ooze_shield_angle ooze_shield_dist @@ -360,7 +362,6 @@ coasting_min_volume coasting_speed skin_alternate_rotation cross_infill_pocket_size -cross_infill_apply_pockets_alternatingly spaghetti_infill_enabled spaghetti_infill_stepped spaghetti_max_infill_angle @@ -377,30 +378,6 @@ magic_fuzzy_skin_point_density magic_fuzzy_skin_point_dist flow_rate_max_extrusion_offset flow_rate_extrusion_offset_factor -wireframe_enabled -wireframe_height -wireframe_roof_inset -wireframe_printspeed -wireframe_printspeed_bottom -wireframe_printspeed_up -wireframe_printspeed_down -wireframe_printspeed_flat -wireframe_flow -wireframe_flow_connection -wireframe_flow_flat -wireframe_top_delay -wireframe_bottom_delay -wireframe_flat_delay -wireframe_up_half_speed -wireframe_top_jump -wireframe_fall_down -wireframe_drag_along -wireframe_strategy -wireframe_straight_before_down -wireframe_roof_fall_down -wireframe_roof_drag_along -wireframe_roof_outer_delay -wireframe_nozzle_clearance adaptive_layer_height_enabled adaptive_layer_height_variation adaptive_layer_height_variation_step diff --git a/resources/themes/cura-dark/icons/sign_in_to_cloud.svg b/resources/themes/cura-dark/icons/sign_in_to_cloud.svg new file mode 100644 index 0000000000..09ba300b6a --- /dev/null +++ b/resources/themes/cura-dark/icons/sign_in_to_cloud.svg @@ -0,0 +1,16 @@ + + + + Group-cloud Copy + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-dark/icons/tab_status_unknown.svg b/resources/themes/cura-dark/icons/tab_status_unknown.svg deleted file mode 100644 index d20218bc00..0000000000 --- a/resources/themes/cura-dark/icons/tab_status_unknown.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - Unknown - Created with Sketch. - - - - - - - - \ No newline at end of file diff --git a/resources/themes/cura-dark/images/logo.svg b/resources/themes/cura-dark/images/logo.svg deleted file mode 100644 index 92ffe4ca0c..0000000000 --- a/resources/themes/cura-dark/images/logo.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/resources/themes/cura-dark/theme.json b/resources/themes/cura-dark/theme.json index 26e6c2ac8b..aed45e8a71 100644 --- a/resources/themes/cura-dark/theme.json +++ b/resources/themes/cura-dark/theme.json @@ -5,22 +5,31 @@ }, "colors": { - "sidebar": [39, 44, 48, 255], + "main_background": [39, 44, 48, 255], + "message_background": [39, 44, 48, 255], + "wide_lining": [31, 36, 39, 255], + "thick_lining": [255, 255, 255, 30], "lining": [64, 69, 72, 255], - "viewport_overlay": [0, 6, 9, 222], + "viewport_overlay": [30, 36, 39, 255], "primary": [12, 169, 227, 255], "primary_hover": [48, 182, 231, 255], "primary_text": [255, 255, 255, 204], "border": [127, 127, 127, 255], - "secondary": [241, 242, 242, 255], + "secondary": [95, 95, 95, 255], - "topbar_background_color": [0, 0, 0, 0], - "topbar_background_color_monitoring": [31, 36, 39, 255], + "icon": [204, 204, 204, 255], + "toolbar_background": [39, 44, 48, 255], + "toolbar_button_active": [95, 95, 95, 255], + "toolbar_button_hover": [95, 95, 95, 255], + "toolbar_button_active_hover": [95, 95, 95, 255], - "topbar_button_text_active": [255, 255, 255, 255], - "topbar_button_text_inactive": [128, 128, 128, 255], - "topbar_button_text_hovered": [255, 255, 255, 255], + "main_window_header_button_text_inactive": [128, 128, 128, 255], + "main_window_header_button_text_hovered": [255, 255, 255, 255], + + "machine_selector_bar": [39, 44, 48, 255], + "machine_selector_active": [39, 44, 48, 255], + "machine_selector_printer_icon": [204, 204, 204, 255], "text": [255, 255, 255, 204], "text_detail": [255, 255, 255, 172], @@ -33,17 +42,10 @@ "text_scene": [255, 255, 255, 162], "text_scene_hover": [255, 255, 255, 204], + "printer_type_label_background": [95, 95, 95, 255], + "error": [212, 31, 53, 255], - "sidebar_header_bar": [39, 44, 48, 255], - "sidebar_header_active": [39, 44, 48, 255], - "sidebar_header_hover": [68, 72, 75, 255], - "sidebar_header_highlight": [68, 192, 255, 255], - "sidebar_header_highlight_hover": [68, 192, 255, 255], - "sidebar_header_text_active": [255, 255, 255, 255], - "sidebar_header_text_hover": [255, 255, 255, 255], - "sidebar_header_text_inactive": [255, 255, 255, 127], - "sidebar_lining": [31, 36, 39, 255], - "sidebar_lining_thin": [255, 255, 255, 30], + "disabled": [32, 32, 32, 255], "button": [39, 44, 48, 255], "button_hover": [39, 44, 48, 255], @@ -101,11 +103,11 @@ "scrollbar_handle_hover": [255, 255, 255, 255], "scrollbar_handle_down": [255, 255, 255, 255], - "setting_category": [39, 44, 48, 255], - "setting_category_disabled": [39, 44, 48, 255], - "setting_category_hover": [39, 44, 48, 255], - "setting_category_active": [39, 44, 48, 255], - "setting_category_active_hover": [39, 44, 48, 255], + "setting_category": [75, 80, 83, 255], + "setting_category_disabled": [75, 80, 83, 255], + "setting_category_hover": [75, 80, 83, 255], + "setting_category_active": [75, 80, 83, 255], + "setting_category_active_hover": [75, 80, 83, 255], "setting_category_text": [255, 255, 255, 152], "setting_category_disabled_text": [255, 255, 255, 101], "setting_category_hover_text": [255, 255, 255, 204], @@ -142,9 +144,7 @@ "slider_groove_border": [127, 127, 127, 255], "slider_groove_fill": [245, 245, 245, 255], "slider_handle": [255, 255, 255, 255], - "slider_handle_hover": [77, 182, 226, 255], "slider_handle_active": [68, 192, 255, 255], - "slider_handle_border": [39, 44, 48, 255], "slider_text_background": [255, 255, 255, 255], "checkbox": [43, 48, 52, 255], @@ -207,20 +207,50 @@ "layerview_support_interface": [64, 192, 255, 255], "layerview_nozzle": [181, 166, 66, 120], - "configuration_item": [0, 0, 0, 0], - "configuration_item_active": [12, 169, 227, 179], - "configuration_item_text": [255, 255, 255, 255], - "configuration_item_text_active": [255, 255, 255, 255], - "configuration_item_border": [255, 255, 255, 255], - "configuration_item_border_active": [12, 169, 227, 179], - "configuration_item_border_hover": [12, 169, 227, 179], - "material_compatibility_warning": [255, 255, 255, 255], "quality_slider_unavailable": [179, 179, 179, 255], "quality_slider_available": [255, 255, 255, 255], - "quality_slider_handle": [255, 255, 255, 255], - "quality_slider_handle_hover": [127, 127, 127, 255], - "quality_slider_text": [255, 255, 255, 255] + + "toolbox_header_button_text_active": [255, 255, 255, 255], + "toolbox_header_button_text_inactive": [128, 128, 128, 255], + "toolbox_header_button_text_hovered": [255, 255, 255, 255], + + "monitor_printer_family_tag": [86, 86, 106, 255], + "monitor_text_primary": [229, 229, 229, 255], + "monitor_text_disabled": [102, 102, 102, 255], + "monitor_text_link": [103, 160, 252, 255], + "monitor_icon_primary": [229, 229, 229, 255], + "monitor_icon_accent": [51, 53, 54, 255], + "monitor_icon_disabled": [102, 102, 102, 255], + + "monitor_secondary_button_hover": [80, 80, 80, 255], + "monitor_secondary_button": [92, 92, 92, 255], + "monitor_secondary_button_text": [250, 250, 250, 255], + "monitor_secondary_button_shadow": [74, 74, 74, 255], + + "monitor_card_border": [102, 102, 102, 255], + "monitor_card_background": [51, 53, 54, 255], + "monitor_card_hover": [84, 89, 95, 255], + + "monitor_stage_background": [30, 36, 39, 255], + "monitor_stage_background_fade": [30, 36, 39, 102], + + "monitor_progress_bar_fill": [50, 130, 255, 255], + "monitor_progress_bar_deactive": [102, 102, 102, 255], + "monitor_progress_bar_empty": [67, 67, 67, 255], + + "monitor_tooltip": [25, 25, 25, 255], + "monitor_tooltip_text": [229, 229, 229, 255], + "monitor_context_menu": [67, 67, 67, 255], + "monitor_context_menu_hover": [30, 102, 215, 255], + + "monitor_skeleton_loading": [102, 102, 102, 255], + "monitor_placeholder_image": [102, 102, 102, 255], + "monitor_image_overlay": [0, 0, 0, 255], + "monitor_shadow": [4, 10, 13, 255], + + "monitor_carousel_dot": [119, 119, 119, 255], + "monitor_carousel_dot_current": [216, 216, 216, 255] } } diff --git a/resources/themes/cura-light/icons/buildplate.svg b/resources/themes/cura-light/icons/buildplate.svg index 9e61296958..7505c8204e 100644 --- a/resources/themes/cura-light/icons/buildplate.svg +++ b/resources/themes/cura-light/icons/buildplate.svg @@ -1,17 +1,9 @@ - - - icn_buildplate - Created with Sketch. - - - - - - - - - - + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/circle_outline.svg b/resources/themes/cura-light/icons/circle_outline.svg new file mode 100644 index 0000000000..3a8fb197f3 --- /dev/null +++ b/resources/themes/cura-light/icons/circle_outline.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/clock.svg b/resources/themes/cura-light/icons/clock.svg new file mode 100644 index 0000000000..0b6cb78881 --- /dev/null +++ b/resources/themes/cura-light/icons/clock.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/themes/cura-light/icons/connected.svg b/resources/themes/cura-light/icons/connected.svg deleted file mode 100644 index 18423bb6c4..0000000000 --- a/resources/themes/cura-light/icons/connected.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/resources/themes/cura-light/icons/disconnected.svg b/resources/themes/cura-light/icons/disconnected.svg deleted file mode 100644 index 019dff117e..0000000000 --- a/resources/themes/cura-light/icons/disconnected.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/resources/themes/cura-light/icons/external_link.svg b/resources/themes/cura-light/icons/external_link.svg new file mode 100644 index 0000000000..a2130fb97b --- /dev/null +++ b/resources/themes/cura-light/icons/external_link.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/extruder_button.svg b/resources/themes/cura-light/icons/extruder_button.svg index e3c01b6a0a..c79ba5c5df 100644 --- a/resources/themes/cura-light/icons/extruder_button.svg +++ b/resources/themes/cura-light/icons/extruder_button.svg @@ -1,64 +1,9 @@ - - - - - - image/svg+xml - - Artboard 3 Copy - - - - - - Artboard 3 Copy - Created with Sketch. - - - + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/favorites_star_empty.svg b/resources/themes/cura-light/icons/favorites_star_empty.svg new file mode 100644 index 0000000000..bb1205e7a7 --- /dev/null +++ b/resources/themes/cura-light/icons/favorites_star_empty.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/resources/themes/cura-light/icons/favorites_star_full.svg b/resources/themes/cura-light/icons/favorites_star_full.svg new file mode 100644 index 0000000000..aad45c5d02 --- /dev/null +++ b/resources/themes/cura-light/icons/favorites_star_full.svg @@ -0,0 +1,6 @@ + + + + + diff --git a/resources/themes/cura-light/icons/info.svg b/resources/themes/cura-light/icons/info.svg new file mode 100644 index 0000000000..9896b3dac8 --- /dev/null +++ b/resources/themes/cura-light/icons/info.svg @@ -0,0 +1,13 @@ + + + + Icon/ info + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/printer_cloud_connected.svg b/resources/themes/cura-light/icons/printer_cloud_connected.svg new file mode 100644 index 0000000000..3bc94a05e7 --- /dev/null +++ b/resources/themes/cura-light/icons/printer_cloud_connected.svg @@ -0,0 +1,11 @@ + + + + Artboard Copy 2 + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_connected.svg b/resources/themes/cura-light/icons/printer_connected.svg similarity index 100% rename from resources/themes/cura-light/icons/tab_status_connected.svg rename to resources/themes/cura-light/icons/printer_connected.svg diff --git a/resources/themes/cura-light/icons/printer_group.svg b/resources/themes/cura-light/icons/printer_group.svg index 614bea90b8..5e439faca4 100644 --- a/resources/themes/cura-light/icons/printer_group.svg +++ b/resources/themes/cura-light/icons/printer_group.svg @@ -1,12 +1,20 @@ - - - icn_groupPrinters + + + Icon/ group printer/ disconnected Created with Sketch. - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/printer_single.svg b/resources/themes/cura-light/icons/printer_single.svg index f7dc83987d..69c4e212bc 100644 --- a/resources/themes/cura-light/icons/printer_single.svg +++ b/resources/themes/cura-light/icons/printer_single.svg @@ -1,13 +1,12 @@ - - - icn_singlePrinter + + + Icon/ single printer/ disconnected Created with Sketch. - - - - - + + + + diff --git a/resources/themes/cura-light/icons/printing_guideline.svg b/resources/themes/cura-light/icons/printing_guideline.svg new file mode 100644 index 0000000000..d306d046f9 --- /dev/null +++ b/resources/themes/cura-light/icons/printing_guideline.svg @@ -0,0 +1,9 @@ + + + + Icon/ guideline on hover + Created with Sketch. + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/resize.svg b/resources/themes/cura-light/icons/resize.svg new file mode 100644 index 0000000000..d6a16649e1 --- /dev/null +++ b/resources/themes/cura-light/icons/resize.svg @@ -0,0 +1,15 @@ + + + + Group + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/search.svg b/resources/themes/cura-light/icons/search.svg index 8272991300..a9ccb612fd 100644 --- a/resources/themes/cura-light/icons/search.svg +++ b/resources/themes/cura-light/icons/search.svg @@ -1,4 +1,21 @@ - - - + + + + Shape + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/sign_in_to_cloud.svg b/resources/themes/cura-light/icons/sign_in_to_cloud.svg new file mode 100644 index 0000000000..27471fddce --- /dev/null +++ b/resources/themes/cura-light/icons/sign_in_to_cloud.svg @@ -0,0 +1,16 @@ + + + + Group-cloud + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/spool.svg b/resources/themes/cura-light/icons/spool.svg new file mode 100644 index 0000000000..0d8ae42d9d --- /dev/null +++ b/resources/themes/cura-light/icons/spool.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/themes/cura-light/icons/star_empty.svg b/resources/themes/cura-light/icons/star_empty.svg new file mode 100644 index 0000000000..39b5791e91 --- /dev/null +++ b/resources/themes/cura-light/icons/star_empty.svg @@ -0,0 +1,11 @@ + + + + Star Copy 8 + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/star_filled.svg b/resources/themes/cura-light/icons/star_filled.svg new file mode 100644 index 0000000000..d4e161f6c6 --- /dev/null +++ b/resources/themes/cura-light/icons/star_filled.svg @@ -0,0 +1,11 @@ + + + + Star Copy 7 + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_busy.svg b/resources/themes/cura-light/icons/tab_status_busy.svg deleted file mode 100644 index debe4f6360..0000000000 --- a/resources/themes/cura-light/icons/tab_status_busy.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - Busy - Created with Sketch. - - - - - - - - \ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_finished.svg b/resources/themes/cura-light/icons/tab_status_finished.svg deleted file mode 100644 index 2519f2f862..0000000000 --- a/resources/themes/cura-light/icons/tab_status_finished.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - Wait cleanup - Created with Sketch. - - - - - - - - \ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_paused.svg b/resources/themes/cura-light/icons/tab_status_paused.svg deleted file mode 100644 index bab6c9ca6b..0000000000 --- a/resources/themes/cura-light/icons/tab_status_paused.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - paused - Created with Sketch. - - - - - - - - \ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_stopped.svg b/resources/themes/cura-light/icons/tab_status_stopped.svg deleted file mode 100644 index c9b150db3a..0000000000 --- a/resources/themes/cura-light/icons/tab_status_stopped.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - Aborted - Created with Sketch. - - - - - - - - \ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_unknown.svg b/resources/themes/cura-light/icons/tab_status_unknown.svg deleted file mode 100644 index 9f413baffc..0000000000 --- a/resources/themes/cura-light/icons/tab_status_unknown.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - Unknown - Created with Sketch. - - - - - - - - \ No newline at end of file diff --git a/resources/themes/cura-light/icons/warning.svg b/resources/themes/cura-light/icons/warning.svg index ae8a7a6430..14b7d797d0 100644 --- a/resources/themes/cura-light/icons/warning.svg +++ b/resources/themes/cura-light/icons/warning.svg @@ -1,4 +1,11 @@ - - - + + + + Icon/warning-s + Created with Sketch. + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/images/logo.svg b/resources/themes/cura-light/images/logo.svg index 5fa5895443..814b157e2a 100644 --- a/resources/themes/cura-light/images/logo.svg +++ b/resources/themes/cura-light/images/logo.svg @@ -12,61 +12,26 @@ viewBox="0 0 82 18" version="1.1" id="svg12" - sodipodi:docname="logo.svg" - inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"> - - - - image/svg+xml - - - - - - - + sodipodi:docname="logo2.svg" + inkscape:version="0.92.3 (2405546, 2018-03-11)"> + id="path4"/> + id="path6"/> + id="path8"/> + id="path10" /> diff --git a/resources/themes/cura-light/styles.qml b/resources/themes/cura-light/styles.qml index b71ddd2d86..121f604362 100755 --- a/resources/themes/cura-light/styles.qml +++ b/resources/themes/cura-light/styles.qml @@ -1,16 +1,20 @@ -// Copyright (c) 2017 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.1 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 +import QtQuick 2.10 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM -QtObject { - property Component sidebar_header_button: Component { - ButtonStyle { - background: Rectangle { +QtObject +{ + property Component print_setup_header_button: Component + { + ButtonStyle + { + background: Rectangle + { color: { if(control.enabled) @@ -34,6 +38,7 @@ QtObject { } } + radius: UM.Theme.getSize("setting_control_radius").width border.width: Theme.getSize("default_lining").width border.color: { @@ -61,20 +66,21 @@ QtObject { return Theme.getColor("setting_control_disabled_border"); } } - UM.RecolorImage { + UM.RecolorImage + { id: downArrow anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right anchors.rightMargin: Theme.getSize("default_margin").width width: Theme.getSize("standard_arrow").width height: Theme.getSize("standard_arrow").height - sourceSize.width: width sourceSize.height: width - color: control.enabled ? Theme.getColor("setting_category_text") : Theme.getColor("setting_category_disabled_text") + color: control.enabled ? Theme.getColor("setting_control_button") : Theme.getColor("setting_category_disabled_text") source: Theme.getIcon("arrow_bottom") } - Label { - id: sidebarComboBoxLabel + Label + { + id: printSetupComboBoxLabel color: control.enabled ? Theme.getColor("setting_control_text") : Theme.getColor("setting_control_disabled_text") text: control.text; elide: Text.ElideRight; @@ -90,178 +96,92 @@ QtObject { } } - property Component topbar_header_tab_no_overlay: Component { - ButtonStyle { - background: Rectangle { - implicitHeight: Theme.getSize("topbar_button").height - implicitWidth: Theme.getSize("topbar_button").width - color: "transparent" - anchors.fill: parent + property Component main_window_header_tab: Component + { + ButtonStyle + { + // This property will be back-propagated when the width of the label is calculated + property var buttonWidth: 0 + background: Item + { + implicitHeight: control.height + implicitWidth: buttonWidth Rectangle { - id: underline + id: buttonFace + implicitHeight: parent.height + implicitWidth: parent.width + radius: UM.Theme.getSize("action_button_radius").width - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom - width: parent.width - height: Theme.getSize("sidebar_header_highlight").height - color: control.checked ? UM.Theme.getColor("sidebar_header_highlight") : UM.Theme.getColor("sidebar_header_highlight_hover") - visible: control.hovered || control.checked - } - } - - label: Rectangle { - implicitHeight: Theme.getSize("topbar_button_icon").height - implicitWidth: Theme.getSize("topbar_button").width - color: "transparent" - anchors.fill: parent - - Item - { - anchors.centerIn: parent - width: Math.round(textLabel.width + icon.width + Theme.getSize("default_margin").width / 2) - Label + color: { - id: textLabel - text: control.text - anchors.right: icon.visible ? icon.left : parent.right - anchors.rightMargin: icon.visible ? Math.round(Theme.getSize("default_margin").width / 2) : 0 - anchors.verticalCenter: parent.verticalCenter; - font: control.checked ? UM.Theme.getFont("large") : UM.Theme.getFont("large_nonbold") - color: + if (control.checked) { - if(control.hovered) - { - return UM.Theme.getColor("topbar_button_text_hovered"); - } - if(control.checked) - { - return UM.Theme.getColor("topbar_button_text_active"); - } - else - { - return UM.Theme.getColor("topbar_button_text_inactive"); - } + return UM.Theme.getColor("main_window_header_button_background_active") + } + else + { + if (control.hovered) + { + return UM.Theme.getColor("main_window_header_button_background_hovered") + } + return UM.Theme.getColor("main_window_header_button_background_inactive") } - } - Image - { - id: icon - visible: control.iconSource != "" - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - opacity: !control.enabled ? 0.2 : 1.0 - source: control.iconSource - width: visible ? Theme.getSize("topbar_button_icon").width : 0 - height: Theme.getSize("topbar_button_icon").height - - sourceSize: Theme.getSize("topbar_button_icon") - } - } - } - } - } - - property Component topbar_header_tab: Component { - ButtonStyle { - background: Item { - implicitHeight: Theme.getSize("topbar_button").height - implicitWidth: Theme.getSize("topbar_button").width + Theme.getSize("topbar_button_icon").width - - Rectangle { - id: buttonFace; - anchors.fill: parent; - - color: "transparent" - Behavior on color { ColorAnimation { duration: 50; } } - - Rectangle { - id: underline; - - anchors.horizontalCenter: parent.horizontalCenter - anchors.bottom: parent.bottom - width: Theme.getSize("topbar_button").width + Theme.getSize("topbar_button_icon").width - height: Theme.getSize("sidebar_header_highlight").height - color: control.checked ? UM.Theme.getColor("sidebar_header_highlight") : UM.Theme.getColor("sidebar_header_highlight_hover") - visible: control.hovered || control.checked } } } label: Item { - implicitHeight: Theme.getSize("topbar_button_icon").height - implicitWidth: Theme.getSize("topbar_button").width + Theme.getSize("topbar_button_icon").width - Item + id: contents + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + height: control.height + width: buttonLabel.width + 4 * UM.Theme.getSize("default_margin").width + + Label { + id: buttonLabel + text: control.text + anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter; - width: childrenRect.width - height: Theme.getSize("topbar_button_icon").height - Label + font: UM.Theme.getFont("medium") + color: { - id: button_label - text: control.text; - anchors.verticalCenter: parent.verticalCenter; - font: control.checked ? UM.Theme.getFont("large") : UM.Theme.getFont("large_nonbold") - color: + if (control.checked) { - if(control.hovered) + return UM.Theme.getColor("main_window_header_button_text_active") + } + else + { + if (control.hovered) { - return UM.Theme.getColor("topbar_button_text_hovered"); - } - if(control.checked) - { - return UM.Theme.getColor("topbar_button_text_active"); - } - else - { - return UM.Theme.getColor("topbar_button_text_inactive"); + return UM.Theme.getColor("main_window_header_button_text_hovered") } + return UM.Theme.getColor("main_window_header_button_text_inactive") } } - UM.RecolorImage - { - visible: control.iconSource != "" - id: icon - anchors.left: button_label.right - anchors.leftMargin: (icon.visible || overlayIcon.visible) ? Theme.getSize("default_margin").width : 0 - color: UM.Theme.getColor("text_emphasis") - opacity: !control.enabled ? 0.2 : 1.0 - source: control.iconSource - width: visible ? Theme.getSize("topbar_button_icon").width : 0 - height: Theme.getSize("topbar_button_icon").height - - sourceSize: Theme.getSize("topbar_button_icon") - } - UM.RecolorImage - { - id: overlayIcon - anchors.left: button_label.right - anchors.leftMargin: (icon.visible || overlayIcon.visible) ? Theme.getSize("default_margin").width : 0 - visible: control.overlayIconSource != "" && control.iconSource != "" - color: control.overlayColor - opacity: !control.enabled ? 0.2 : 1.0 - source: control.overlayIconSource - width: visible ? Theme.getSize("topbar_button_icon").width : 0 - height: Theme.getSize("topbar_button_icon").height - - sourceSize: Theme.getSize("topbar_button_icon") - } + } + Component.onCompleted: + { + buttonWidth = width } } } } - property Component tool_button: Component { - ButtonStyle { - background: Item { - implicitWidth: Theme.getSize("button").width; - implicitHeight: Theme.getSize("button").height; + property Component tool_button: Component + { + ButtonStyle + { + background: Item + { + implicitWidth: Theme.getSize("button").width + implicitHeight: Theme.getSize("button").height - UM.PointingRectangle { + UM.PointingRectangle + { id: button_tooltip anchors.left: parent.right @@ -280,23 +200,25 @@ QtObject { Behavior on width { NumberAnimation { duration: 100; } } Behavior on opacity { NumberAnimation { duration: 100; } } - Label { + Label + { id: button_tip anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter; + anchors.verticalCenter: parent.verticalCenter - text: control.text; - font: Theme.getFont("button_tooltip"); - color: Theme.getColor("tooltip_text"); + text: control.text + font: Theme.getFont("default") + color: Theme.getColor("tooltip_text") } } - Rectangle { - id: buttonFace; + Rectangle + { + id: buttonFace - anchors.fill: parent; - property bool down: control.pressed || (control.checkable && control.checked); + anchors.fill: parent + property bool down: control.pressed || (control.checkable && control.checked) color: { @@ -306,87 +228,35 @@ QtObject { } else if(control.checkable && control.checked && control.hovered) { - return Theme.getColor("button_active_hover"); + return Theme.getColor("toolbar_button_active_hover") } else if(control.pressed || (control.checkable && control.checked)) { - return Theme.getColor("button_active"); + return Theme.getColor("toolbar_button_active") } else if(control.hovered) { - return Theme.getColor("button_hover"); - } - else - { - return Theme.getColor("button"); + return Theme.getColor("toolbar_button_hover") } + return Theme.getColor("toolbar_background") } Behavior on color { ColorAnimation { duration: 50; } } - border.width: (control.hasOwnProperty("needBorder") && control.needBorder) ? 2 * screenScaleFactor : 0 - border.color: Theme.getColor("tool_button_border") - - UM.RecolorImage { - id: tool_button_arrow - anchors.right: parent.right; - anchors.rightMargin: Theme.getSize("button").width - Math.round(Theme.getSize("button_icon").width / 4) - anchors.bottom: parent.bottom; - anchors.bottomMargin: Theme.getSize("button").height - Math.round(Theme.getSize("button_icon").height / 4) - width: Theme.getSize("standard_arrow").width - height: Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: width - visible: control.menu != null; - color: - { - if(control.checkable && control.checked && control.hovered) - { - return Theme.getColor("button_text_active_hover"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("button_text_active"); - } - else if(control.hovered) - { - return Theme.getColor("button_text_hover"); - } - else - { - return Theme.getColor("button_text"); - } - } - source: Theme.getIcon("arrow_bottom") - } + border.width: (control.hasOwnProperty("needBorder") && control.needBorder) ? Theme.getSize("default_lining").width : 0 + border.color: Theme.getColor("lining") } } - label: Item { - UM.RecolorImage { - anchors.centerIn: parent; - opacity: !control.enabled ? 0.2 : 1.0 - source: control.iconSource; - width: Theme.getSize("button_icon").width; - height: Theme.getSize("button_icon").height; - color: - { - if(control.checkable && control.checked && control.hovered) - { - return Theme.getColor("button_text_active_hover"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("button_text_active"); - } - else if(control.hovered) - { - return Theme.getColor("button_text_hover"); - } - else - { - return Theme.getColor("button_text"); - } - } + label: Item + { + UM.RecolorImage + { + anchors.centerIn: parent + opacity: control.enabled ? 1.0 : 0.2 + source: control.iconSource + width: Theme.getSize("button_icon").width + height: Theme.getSize("button_icon").height + color: Theme.getColor("icon") sourceSize: Theme.getSize("button_icon") } @@ -394,119 +264,19 @@ QtObject { } } - property Component small_tool_button: Component { - ButtonStyle { - background: Item { - implicitWidth: Theme.getSize("small_button").width; - implicitHeight: Theme.getSize("small_button").height; - - Rectangle { - id: smallButtonFace; - - anchors.fill: parent; - property bool down: control.pressed || (control.checkable && control.checked); - - color: - { - if(control.customColor !== undefined && control.customColor !== null) - { - return control.customColor - } - else if(control.checkable && control.checked && control.hovered) - { - return Theme.getColor("small_button_active_hover"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("small_button_active"); - } - else if(control.hovered) - { - return Theme.getColor("small_button_hover"); - } - else - { - return Theme.getColor("small_button"); - } - } - Behavior on color { ColorAnimation { duration: 50; } } - - border.width: (control.hasOwnProperty("needBorder") && control.needBorder) ? 2 * screenScaleFactor : 0 - border.color: Theme.getColor("tool_button_border") - - UM.RecolorImage { - id: smallToolButtonArrow - - width: 5 - height: 5 - sourceSize.width: 5 - sourceSize.height: 5 - visible: control.menu != null; - color: - { - if(control.checkable && control.checked && control.hovered) - { - return Theme.getColor("small_button_text_active_hover"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("small_button_text_active"); - } - else if(control.hovered) - { - return Theme.getColor("small_button_text_hover"); - } - else - { - return Theme.getColor("small_button_text"); - } - } - source: Theme.getIcon("arrow_bottom") - } - } - } - - label: Item { - UM.RecolorImage { - anchors.centerIn: parent; - opacity: !control.enabled ? 0.2 : 1.0 - source: control.iconSource; - width: Theme.getSize("small_button_icon").width; - height: Theme.getSize("small_button_icon").height; - color: - { - if(control.checkable && control.checked && control.hovered) - { - return Theme.getColor("small_button_text_active_hover"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("small_button_text_active"); - } - else if(control.hovered) - { - return Theme.getColor("small_button_text_hover"); - } - else - { - return Theme.getColor("small_button_text"); - } - } - - sourceSize: Theme.getSize("small_button_icon") - } - } - } - } - - property Component progressbar: Component{ - ProgressBarStyle { - background: Rectangle { + property Component progressbar: Component + { + ProgressBarStyle + { + background: Rectangle + { implicitWidth: Theme.getSize("message").width - (Theme.getSize("default_margin").width * 2) implicitHeight: Theme.getSize("progressbar").height color: control.hasOwnProperty("backgroundColor") ? control.backgroundColor : Theme.getColor("progressbar_background") + radius: Theme.getSize("progressbar_radius").width } - progress: Rectangle { + progress: Rectangle + { color: { if(control.indeterminate) @@ -523,14 +293,16 @@ QtObject { } } radius: Theme.getSize("progressbar_radius").width - Rectangle{ + Rectangle + { radius: Theme.getSize("progressbar_radius").width color: control.hasOwnProperty("controlColor") ? control.controlColor : Theme.getColor("progressbar_control") width: Theme.getSize("progressbar_control").width height: Theme.getSize("progressbar_control").height visible: control.indeterminate - SequentialAnimation on x { + SequentialAnimation on x + { id: xAnim property int animEndPoint: Theme.getSize("message").width - Math.round((Theme.getSize("default_margin").width * 2.5)) - Theme.getSize("progressbar_control").width running: control.indeterminate && control.visible @@ -543,194 +315,41 @@ QtObject { } } - property Component sidebar_category: Component { - ButtonStyle { - background: Rectangle { - anchors.fill: parent; - anchors.left: parent.left - anchors.leftMargin: Theme.getSize("sidebar_margin").width - anchors.right: parent.right - anchors.rightMargin: Theme.getSize("sidebar_margin").width - implicitHeight: Theme.getSize("section").height; - color: { - if(control.color) { - return control.color; - } else if(!control.enabled) { - return Theme.getColor("setting_category_disabled"); - } else if(control.hovered && control.checkable && control.checked) { - return Theme.getColor("setting_category_active_hover"); - } else if(control.pressed || (control.checkable && control.checked)) { - return Theme.getColor("setting_category_active"); - } else if(control.hovered) { - return Theme.getColor("setting_category_hover"); - } else { - return Theme.getColor("setting_category"); - } - } - Behavior on color { ColorAnimation { duration: 50; } } - Rectangle { - height: Theme.getSize("default_lining").height - width: parent.width - anchors.bottom: parent.bottom - color: { - if(!control.enabled) { - return Theme.getColor("setting_category_disabled_border"); - } else if((control.hovered || control.activeFocus) && control.checkable && control.checked) { - return Theme.getColor("setting_category_active_hover_border"); - } else if(control.pressed || (control.checkable && control.checked)) { - return Theme.getColor("setting_category_active_border"); - } else if(control.hovered || control.activeFocus) { - return Theme.getColor("setting_category_hover_border"); - } else { - return Theme.getColor("setting_category_border"); - } - } - } - } - label: Item { - anchors.fill: parent; - anchors.left: parent.left - Item{ - id: icon; - anchors.left: parent.left - height: parent.height - width: Theme.getSize("section_icon_column").width - UM.RecolorImage { - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: Theme.getSize("sidebar_margin").width - color: - { - if(!control.enabled) - { - return Theme.getColor("setting_category_disabled_text"); - } - else if((control.hovered || control.activeFocus) && control.checkable && control.checked) - { - return Theme.getColor("setting_category_active_hover_text"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("setting_category_active_text"); - } - else if(control.hovered || control.activeFocus) - { - return Theme.getColor("setting_category_hover_text"); - } - else - { - return Theme.getColor("setting_category_text"); - } - } - source: control.iconSource; - width: Theme.getSize("section_icon").width; - height: Theme.getSize("section_icon").height; - sourceSize.width: width + 15 * screenScaleFactor - sourceSize.height: width + 15 * screenScaleFactor - } - } - - Label { - anchors { - left: icon.right; - leftMargin: Theme.getSize("default_margin").width; - right: parent.right; - verticalCenter: parent.verticalCenter; - } - text: control.text; - font: Theme.getFont("setting_category"); - color: - { - if(!control.enabled) - { - return Theme.getColor("setting_category_disabled_text"); - } - else if((control.hovered || control.activeFocus) && control.checkable && control.checked) - { - return Theme.getColor("setting_category_active_hover_text"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("setting_category_active_text"); - } - else if(control.hovered || control.activeFocus) - { - return Theme.getColor("setting_category_hover_text"); - } - else - { - return Theme.getColor("setting_category_text"); - } - } - fontSizeMode: Text.HorizontalFit; - minimumPointSize: 8 - } - UM.RecolorImage { - id: category_arrow - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: Theme.getSize("default_margin").width * 3 - Math.round(width / 2) - width: Theme.getSize("standard_arrow").width - height: Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: width - color: - { - if(!control.enabled) - { - return Theme.getColor("setting_category_disabled_text"); - } - else if((control.hovered || control.activeFocus) && control.checkable && control.checked) - { - return Theme.getColor("setting_category_active_hover_text"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("setting_category_active_text"); - } - else if(control.hovered || control.activeFocus) - { - return Theme.getColor("setting_category_hover_text"); - } - else - { - return Theme.getColor("setting_category_text"); - } - } - source: control.checked ? Theme.getIcon("arrow_bottom") : Theme.getIcon("arrow_left") - } - } - } - } - - property Component scrollview: Component { - ScrollViewStyle { + property Component scrollview: Component + { + ScrollViewStyle + { decrementControl: Item { } incrementControl: Item { } transientScrollBars: false - scrollBarBackground: Rectangle { + scrollBarBackground: Rectangle + { implicitWidth: Theme.getSize("scrollbar").width radius: Math.round(implicitWidth / 2) - color: Theme.getColor("scrollbar_background"); + color: Theme.getColor("scrollbar_background") } - handle: Rectangle { + handle: Rectangle + { id: scrollViewHandle - implicitWidth: Theme.getSize("scrollbar").width; + implicitWidth: Theme.getSize("scrollbar").width radius: Math.round(implicitWidth / 2) - color: styleData.pressed ? Theme.getColor("scrollbar_handle_down") : styleData.hovered ? Theme.getColor("scrollbar_handle_hover") : Theme.getColor("scrollbar_handle"); + color: styleData.pressed ? Theme.getColor("scrollbar_handle_down") : styleData.hovered ? Theme.getColor("scrollbar_handle_hover") : Theme.getColor("scrollbar_handle") Behavior on color { ColorAnimation { duration: 50; } } } } } - property Component combobox: Component { - ComboBoxStyle { + property Component combobox: Component + { + ComboBoxStyle + { - background: Rectangle { + background: Rectangle + { implicitHeight: Theme.getSize("setting_control").height; implicitWidth: Theme.getSize("setting_control").width; @@ -739,30 +358,33 @@ QtObject { border.width: Theme.getSize("default_lining").width; border.color: control.hovered ? Theme.getColor("setting_control_border_highlight") : Theme.getColor("setting_control_border"); + radius: UM.Theme.getSize("setting_control_radius").width } - label: Item { - - Label { - anchors.left: parent.left; + label: Item + { + Label + { + anchors.left: parent.left anchors.leftMargin: Theme.getSize("default_lining").width - anchors.right: downArrow.left; - anchors.rightMargin: Theme.getSize("default_lining").width; - anchors.verticalCenter: parent.verticalCenter; + anchors.right: downArrow.left + anchors.rightMargin: Theme.getSize("default_lining").width + anchors.verticalCenter: parent.verticalCenter - text: control.currentText; + text: control.currentText font: Theme.getFont("default"); - color: !enabled ? Theme.getColor("setting_control_disabled_text") : Theme.getColor("setting_control_text"); + color: !enabled ? Theme.getColor("setting_control_disabled_text") : Theme.getColor("setting_control_text") - elide: Text.ElideRight; - verticalAlignment: Text.AlignVCenter; + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter } - UM.RecolorImage { + UM.RecolorImage + { id: downArrow - anchors.right: parent.right; - anchors.rightMargin: Theme.getSize("default_lining").width * 2; - anchors.verticalCenter: parent.verticalCenter; + anchors.right: parent.right + anchors.rightMargin: Theme.getSize("default_lining").width * 2 + anchors.verticalCenter: parent.verticalCenter source: Theme.getIcon("arrow_bottom") width: Theme.getSize("standard_arrow").width @@ -770,26 +392,31 @@ QtObject { sourceSize.width: width + 5 * screenScaleFactor sourceSize.height: width + 5 * screenScaleFactor - color: Theme.getColor("setting_control_text"); + color: Theme.getColor("setting_control_button"); } } } } // Combobox with items with colored rectangles - property Component combobox_color: Component { + property Component combobox_color: Component + { - ComboBoxStyle { + ComboBoxStyle + { - background: Rectangle { + background: Rectangle + { color: !enabled ? UM.Theme.getColor("setting_control_disabled") : control._hovered ? UM.Theme.getColor("setting_control_highlight") : UM.Theme.getColor("setting_control") border.width: UM.Theme.getSize("default_lining").width border.color: !enabled ? UM.Theme.getColor("setting_control_disabled_border") : control._hovered ? UM.Theme.getColor("setting_control_border_highlight") : UM.Theme.getColor("setting_control_border") + radius: UM.Theme.getSize("setting_control_radius").width } - label: Item { - - Label { + label: Item + { + Label + { anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_lining").width anchors.right: swatch.left @@ -804,20 +431,23 @@ QtObject { verticalAlignment: Text.AlignVCenter } - Rectangle { + UM.RecolorImage + { id: swatch - height: Math.round(UM.Theme.getSize("setting_control").height / 2) + height: Math.round(control.height / 2) width: height anchors.right: downArrow.left anchors.verticalCenter: parent.verticalCenter - anchors.margins: Math.round(UM.Theme.getSize("default_margin").width / 4) - radius: Math.round(width / 2) - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") + anchors.rightMargin: UM.Theme.getSize("default_margin").width + + sourceSize.width: width + sourceSize.height: height + source: UM.Theme.getIcon("extruder_button") color: (control.color_override !== "") ? control.color_override : control.color } - UM.RecolorImage { + UM.RecolorImage + { id: downArrow anchors.right: parent.right anchors.rightMargin: UM.Theme.getSize("default_lining").width * 2 @@ -829,33 +459,36 @@ QtObject { sourceSize.width: width + 5 * screenScaleFactor sourceSize.height: width + 5 * screenScaleFactor - color: UM.Theme.getColor("setting_control_text") + color: UM.Theme.getColor("setting_control_button") } } } } - property Component checkbox: Component { - CheckBoxStyle { + property Component checkbox: Component + { + CheckBoxStyle + { background: Item { } - indicator: Rectangle { - implicitWidth: Theme.getSize("checkbox").width; - implicitHeight: Theme.getSize("checkbox").height; + indicator: Rectangle + { + implicitWidth: Theme.getSize("checkbox").width + implicitHeight: Theme.getSize("checkbox").height - color: (control.hovered || control._hovered) ? Theme.getColor("checkbox_hover") : Theme.getColor("checkbox"); + color: (control.hovered || control._hovered) ? Theme.getColor("checkbox_hover") : (control.enabled ? Theme.getColor("checkbox") : Theme.getColor("checkbox_disabled")) Behavior on color { ColorAnimation { duration: 50; } } - radius: control.exclusiveGroup ? Math.round(Theme.getSize("checkbox").width / 2) : 0 + radius: control.exclusiveGroup ? Math.round(Theme.getSize("checkbox").width / 2) : Theme.getSize("checkbox_radius").width - border.width: Theme.getSize("default_lining").width; - border.color: (control.hovered || control._hovered) ? Theme.getColor("checkbox_border_hover") : Theme.getColor("checkbox_border"); + border.width: Theme.getSize("default_lining").width + border.color: (control.hovered || control._hovered) ? Theme.getColor("checkbox_border_hover") : Theme.getColor("checkbox_border") - UM.RecolorImage { + UM.RecolorImage + { anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter width: Math.round(parent.width / 2.5) height: Math.round(parent.height / 2.5) - sourceSize.width: width sourceSize.height: width color: Theme.getColor("checkbox_mark") source: control.exclusiveGroup ? Theme.getIcon("dot") : Theme.getIcon("check") @@ -863,98 +496,74 @@ QtObject { Behavior on opacity { NumberAnimation { duration: 100; } } } } - label: Label { + label: Label + { text: control.text color: Theme.getColor("checkbox_text") font: Theme.getFont("default") elide: Text.ElideRight + renderType: Text.NativeRendering } } } - property Component partially_checkbox: Component { - CheckBoxStyle { + property Component partially_checkbox: Component + { + CheckBoxStyle + { background: Item { } - indicator: Rectangle { - implicitWidth: Theme.getSize("checkbox").width; - implicitHeight: Theme.getSize("checkbox").height; + indicator: Rectangle + { + implicitWidth: Theme.getSize("checkbox").width + implicitHeight: Theme.getSize("checkbox").height color: (control.hovered || control._hovered) ? Theme.getColor("checkbox_hover") : Theme.getColor("checkbox"); Behavior on color { ColorAnimation { duration: 50; } } - radius: control.exclusiveGroup ? Math.round(Theme.getSize("checkbox").width / 2) : 0 + radius: control.exclusiveGroup ? Math.round(Theme.getSize("checkbox").width / 2) : UM.Theme.getSize("checkbox_radius").width border.width: Theme.getSize("default_lining").width; border.color: (control.hovered || control._hovered) ? Theme.getColor("checkbox_border_hover") : Theme.getColor("checkbox_border"); - UM.RecolorImage { + UM.RecolorImage + { anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter width: Math.round(parent.width / 2.5) height: Math.round(parent.height / 2.5) - sourceSize.width: width sourceSize.height: width color: Theme.getColor("checkbox_mark") - source: { - if (control.checkbox_state == 2){ - return Theme.getIcon("solid") + source: + { + if (control.checkbox_state == 2) + { + return Theme.getIcon("solid"); } - else{ - return control.exclusiveGroup ? Theme.getIcon("dot") : Theme.getIcon("check") + else + { + return control.exclusiveGroup ? Theme.getIcon("dot") : Theme.getIcon("check"); } } opacity: control.checked Behavior on opacity { NumberAnimation { duration: 100; } } } } - label: Label { - text: control.text; - color: Theme.getColor("checkbox_text"); - font: Theme.getFont("default"); + label: Label + { + text: control.text + color: Theme.getColor("checkbox_text") + font: Theme.getFont("default") } } } - property Component slider: Component { - SliderStyle { - groove: Rectangle { - implicitWidth: control.width; - implicitHeight: Theme.getSize("slider_groove").height; - - color: Theme.getColor("slider_groove"); - border.width: Theme.getSize("default_lining").width; - border.color: Theme.getColor("slider_groove_border"); - - radius: Math.round(width / 2); - - Rectangle { - anchors { - left: parent.left; - top: parent.top; - bottom: parent.bottom; - } - color: Theme.getColor("slider_groove_fill"); - width: Math.round((control.value / (control.maximumValue - control.minimumValue)) * parent.width); - radius: Math.round(width / 2); - } - } - handle: Rectangle { - width: Theme.getSize("slider_handle").width; - height: Theme.getSize("slider_handle").height; - color: control.hovered ? Theme.getColor("slider_handle_hover") : Theme.getColor("slider_handle"); - border.width: Theme.getSize("default_lining").width - border.color: control.hovered ? Theme.getColor("slider_handle_hover_border") : Theme.getColor("slider_handle_border") - radius: Math.round(Theme.getSize("slider_handle").width / 2); //Round. - Behavior on color { ColorAnimation { duration: 50; } } - } - } - } - - property Component text_field: Component { - TextFieldStyle { - textColor: Theme.getColor("setting_control_text"); + property Component text_field: Component + { + TextFieldStyle + { + textColor: Theme.getColor("setting_control_text") placeholderTextColor: Theme.getColor("setting_control_text") - font: Theme.getFont("default"); + font: Theme.getFont("default") background: Rectangle { @@ -963,10 +572,12 @@ QtObject { border.width: Theme.getSize("default_lining").width; border.color: control.hovered ? Theme.getColor("setting_control_border_highlight") : Theme.getColor("setting_control_border"); + radius: UM.Theme.getSize("setting_control_radius").width color: Theme.getColor("setting_validation_ok"); - Label { + Label + { anchors.right: parent.right; anchors.rightMargin: Theme.getSize("setting_unit_margin").width; anchors.verticalCenter: parent.verticalCenter; @@ -974,12 +585,14 @@ QtObject { text: control.unit ? control.unit : "" color: Theme.getColor("setting_unit"); font: Theme.getFont("default"); + renderType: Text.NativeRendering } } } } - property Component sidebar_action_button: Component { + property Component print_setup_action_button: Component + { ButtonStyle { background: Rectangle @@ -988,28 +601,44 @@ QtObject { border.color: { if(!control.enabled) + { return UM.Theme.getColor("action_button_disabled_border"); + } else if(control.pressed) + { return UM.Theme.getColor("action_button_active_border"); + } else if(control.hovered) + { return UM.Theme.getColor("action_button_hovered_border"); + } else + { return UM.Theme.getColor("action_button_border"); + } } color: { if(!control.enabled) + { return UM.Theme.getColor("action_button_disabled"); + } else if(control.pressed) + { return UM.Theme.getColor("action_button_active"); + } else if(control.hovered) + { return UM.Theme.getColor("action_button_hovered"); + } else + { return UM.Theme.getColor("action_button"); + } } - Behavior on color { ColorAnimation { duration: 50; } } + Behavior on color { ColorAnimation { duration: 50 } } - implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("sidebar_margin").width * 2) + implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("thick_margin").width * 2) Label { @@ -1018,15 +647,23 @@ QtObject { color: { if(!control.enabled) + { return UM.Theme.getColor("action_button_disabled_text"); + } else if(control.pressed) + { return UM.Theme.getColor("action_button_active_text"); + } else if(control.hovered) + { return UM.Theme.getColor("action_button_hovered_text"); + } else + { return UM.Theme.getColor("action_button_text"); + } } - font: UM.Theme.getFont("action_button") + font: UM.Theme.getFont("medium") text: control.text } } @@ -1034,7 +671,8 @@ QtObject { } } - property Component toolbox_action_button: Component { + property Component toolbox_action_button: Component + { ButtonStyle { background: Rectangle @@ -1045,17 +683,17 @@ QtObject { { if (control.installed) { - return UM.Theme.getColor("action_button_disabled") + return UM.Theme.getColor("action_button_disabled"); } else { if (control.hovered) { - return UM.Theme.getColor("primary_hover") + return UM.Theme.getColor("primary_hover"); } else { - return UM.Theme.getColor("primary") + return UM.Theme.getColor("primary"); } } @@ -1068,17 +706,17 @@ QtObject { { if (control.installed) { - return UM.Theme.getColor("action_button_disabled_text") + return UM.Theme.getColor("action_button_disabled_text"); } else { if (control.hovered) { - return UM.Theme.getColor("button_text_hover") + return UM.Theme.getColor("button_text_hover"); } else { - return UM.Theme.getColor("button_text") + return UM.Theme.getColor("button_text"); } } } @@ -1088,4 +726,153 @@ QtObject { } } } + + property Component monitor_button_style: Component + { + ButtonStyle + { + background: Rectangle + { + border.width: UM.Theme.getSize("default_lining").width + border.color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled_border"); + } + else if(control.pressed) + { + return UM.Theme.getColor("action_button_active_border"); + } + else if(control.hovered) + { + return UM.Theme.getColor("action_button_hovered_border"); + } + return UM.Theme.getColor("action_button_border"); + } + color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled"); + } + else if(control.pressed) + { + return UM.Theme.getColor("action_button_active"); + } + else if(control.hovered) + { + return UM.Theme.getColor("action_button_hovered"); + } + return UM.Theme.getColor("action_button"); + } + Behavior on color + { + ColorAnimation + { + duration: 50 + } + } + } + + label: Item + { + UM.RecolorImage + { + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + width: Math.floor(control.width / 2) + height: Math.floor(control.height / 2) + sourceSize.height: width + color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled_text"); + } + else if(control.pressed) + { + return UM.Theme.getColor("action_button_active_text"); + } + else if(control.hovered) + { + return UM.Theme.getColor("action_button_hovered_text"); + } + return UM.Theme.getColor("action_button_text"); + } + source: control.iconSource + } + } + } + } + + property Component monitor_checkable_button_style: Component + { + ButtonStyle { + background: Rectangle { + border.width: control.checked ? UM.Theme.getSize("default_lining").width * 2 : UM.Theme.getSize("default_lining").width + border.color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled_border"); + } + else if (control.checked || control.pressed) + { + return UM.Theme.getColor("action_button_active_border"); + } + else if(control.hovered) + { + return UM.Theme.getColor("action_button_hovered_border"); + } + return UM.Theme.getColor("action_button_border"); + } + color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled"); + } + else if (control.checked || control.pressed) + { + return UM.Theme.getColor("action_button_active"); + } + else if (control.hovered) + { + return UM.Theme.getColor("action_button_hovered"); + } + return UM.Theme.getColor("action_button"); + } + Behavior on color { ColorAnimation { duration: 50; } } + Label { + anchors.left: parent.left + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + anchors.leftMargin: UM.Theme.getSize("default_lining").width * 2 + anchors.rightMargin: UM.Theme.getSize("default_lining").width * 2 + color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled_text"); + } + else if (control.checked || control.pressed) + { + return UM.Theme.getColor("action_button_active_text"); + } + else if (control.hovered) + { + return UM.Theme.getColor("action_button_hovered_text"); + } + return UM.Theme.getColor("action_button_text"); + } + font: UM.Theme.getFont("default") + text: control.text + horizontalAlignment: Text.AlignHCenter + elide: Text.ElideMiddle + } + } + label: Item { } + } + } } diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index 7bcdafce98..acf2bbd3e9 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -6,15 +6,45 @@ "fonts": { "large": { "size": 1.35, - "weight": 63, + "weight": 40, "family": "Noto Sans" }, - "large_nonbold": { + "large_ja_JP": { "size": 1.35, "weight": 50, "family": "Noto Sans" }, + "large_zh_CN": { + "size": 1.35, + "weight": 50, + "family": "Noto Sans" + }, + "large_zh_TW": { + "size": 1.35, + "weight": 50, + "family": "Noto Sans" + }, + "large_bold": { + "size": 1.35, + "weight": 63, + "family": "Noto Sans" + }, "medium": { + "size": 1.16, + "weight": 40, + "family": "Noto Sans" + }, + "medium_ja_JP": { + "size": 1.16, + "weight": 50, + "family": "Noto Sans" + }, + "medium_zh_CN": { + "size": 1.16, + "weight": 50, + "family": "Noto Sans" + }, + "medium_zh_TW": { "size": 1.16, "weight": 50, "family": "Noto Sans" @@ -25,43 +55,86 @@ "family": "Noto Sans" }, "default": { + "size": 0.95, + "weight": 40, + "family": "Noto Sans" + }, + "default_ja_JP": { + "size": 1.0, + "weight": 50, + "family": "Noto Sans" + }, + "default_zh_CN": { + "size": 1.0, + "weight": 50, + "family": "Noto Sans" + }, + "default_zh_TW": { "size": 1.0, "weight": 50, "family": "Noto Sans" }, "default_bold": { + "size": 0.95, + "weight": 63, + "family": "Noto Sans" + }, + "default_bold_ja_JP": { + "size": 1.0, + "weight": 63, + "family": "Noto Sans" + }, + "default_bold_zh_CN": { + "size": 1.0, + "weight": 63, + "family": "Noto Sans" + }, + "default_bold_zh_TW": { "size": 1.0, "weight": 63, "family": "Noto Sans" }, "default_italic": { - "size": 1.15, + "size": 0.95, + "weight": 40, + "italic": true, + "family": "Noto Sans" + }, + "default_italic_ja_JP": { + "size": 1.0, + "weight": 50, + "italic": true, + "family": "Noto Sans" + }, + "default_italic_zh_CN": { + "size": 1.0, + "weight": 50, + "italic": true, + "family": "Noto Sans" + }, + "default_italic_zh_TW": { + "size": 1.0, "weight": 50, "italic": true, "family": "Noto Sans" }, "small": { - "size": 1.0, - "weight": 63, + "size": 0.7, + "weight": 40, "family": "Noto Sans" }, - "very_small": { - "size": 1.0, + "small_ja_JP": { + "size": 0.7, "weight": 50, "family": "Noto Sans" }, - "button_tooltip": { - "size": 1.0, + "small_zh_CN": { + "size": 0.7, "weight": 50, "family": "Noto Sans" }, - "setting_category": { - "size": 1.15, - "weight": 63, - "family": "Noto Sans" - }, - "action_button": { - "size": 1.15, + "small_zh_TW": { + "size": 0.7, "weight": 50, "family": "Noto Sans" } @@ -69,46 +142,73 @@ "colors": { - "sidebar": [255, 255, 255, 255], + "main_background": [255, 255, 255, 255], + "wide_lining": [245, 245, 245, 255], + "thick_lining": [127, 127, 127, 255], "lining": [192, 193, 194, 255], - "viewport_overlay": [0, 0, 0, 192], + "viewport_overlay": [246, 246, 246, 255], - "primary": [12, 169, 227, 255], + "primary": [50, 130, 255, 255], + "primary_shadow": [64, 47, 205, 255], "primary_hover": [48, 182, 231, 255], "primary_text": [255, 255, 255, 255], "border": [127, 127, 127, 255], - "secondary": [245, 245, 245, 255], + "secondary": [240, 240, 240, 255], + "secondary_shadow": [216, 216, 216, 255], - "topbar_background_color": [255, 255, 255, 0], - "topbar_background_color_monitoring": [255, 255, 255, 255], + "icon": [8, 7, 63, 255], - "topbar_button_text_active": [0, 0, 0, 255], - "topbar_button_text_inactive": [128, 128, 128, 255], - "topbar_button_text_hovered": [0, 0, 0, 255], + "primary_button": [38, 113, 231, 255], + "primary_button_shadow": [27, 95, 202, 255], + "primary_button_hover": [81, 145, 247, 255], + "primary_button_text": [255, 255, 255, 255], - "text": [0, 0, 0, 255], + "secondary_button": [240, 240, 240, 255], + "secondary_button_shadow": [216, 216, 216, 255], + "secondary_button_hover": [228, 228, 228, 255], + "secondary_button_text": [30, 102, 215, 255], + + "main_window_header_background": [8, 7, 63, 255], + "main_window_header_background_gradient": [25, 23, 91, 255], + "main_window_header_button_text_active": [8, 7, 63, 255], + "main_window_header_button_text_inactive": [255, 255, 255, 255], + "main_window_header_button_text_hovered": [255, 255, 255, 255], + "main_window_header_button_background_active": [255, 255, 255, 255], + "main_window_header_button_background_inactive": [255, 255, 255, 0], + "main_window_header_button_background_hovered": [117, 114, 159, 255], + + "account_widget_outline_active": [70, 66, 126, 255], + + "machine_selector_bar": [31, 36, 39, 255], + "machine_selector_active": [68, 72, 75, 255], + "machine_selector_hover": [68, 72, 75, 255], + "machine_selector_text_active": [255, 255, 255, 255], + "machine_selector_printer_icon": [8, 7, 63, 255], + + "action_panel_secondary": [27, 95, 202, 255], + + "toolbar_background": [255, 255, 255, 255], + + "printer_type_label_background": [228, 228, 242, 255], + + "text": [25, 25, 25, 255], "text_detail": [174, 174, 174, 128], - "text_link": [12, 169, 227, 255], + "text_link": [50, 130, 255, 255], "text_inactive": [174, 174, 174, 255], - "text_hover": [70, 84, 113, 255], - "text_pressed": [12, 169, 227, 255], + "text_pressed": [50, 130, 255, 255], "text_subtext": [0, 0, 0, 255], "text_medium": [128, 128, 128, 255], "text_emphasis": [255, 255, 255, 255], - "text_scene": [31, 36, 39, 255], - "text_scene_hover": [70, 84, 113, 255], + "text_scene": [102, 102, 102, 255], + "text_scene_hover": [123, 123, 113, 255], "error": [255, 140, 0, 255], - "sidebar_header_bar": [31, 36, 39, 255], - "sidebar_header_active": [68, 72, 75, 255], - "sidebar_header_hover": [68, 72, 75, 255], - "sidebar_header_highlight": [68, 192, 255, 255], - "sidebar_header_highlight_hover": [68, 192, 255, 255], - "sidebar_header_text_inactive": [255, 255, 255, 255], - "sidebar_header_text_active": [255, 255, 255, 255], - "sidebar_header_text_hover": [255, 255, 255, 255], - "sidebar_lining": [245, 245, 245, 255], - "sidebar_lining_thin": [127, 127, 127, 255], + "warning": [245, 166, 35, 255], + "disabled": [229, 229, 229, 255], + + "toolbar_button_hover": [232, 242, 252, 255], + "toolbar_button_active": [232, 242, 252, 255], + "toolbar_button_active_hover": [232, 242, 252, 255], "button": [31, 36, 39, 255], "button_hover": [68, 72, 75, 255], @@ -118,15 +218,13 @@ "button_text_hover": [255, 255, 255, 255], "button_text_active": [255, 255, 255, 255], "button_text_active_hover": [255, 255, 255, 255], - "button_disabled": [31, 36, 39, 255], - "button_disabled_text": [255, 255, 255, 101], - "small_button": [31, 36, 39, 0], - "small_button_hover": [68, 72, 75, 255], - "small_button_active": [68, 72, 75, 255], - "small_button_active_hover": [68, 72, 75, 255], - "small_button_text": [31, 36, 39, 197], - "small_button_text_hover": [255, 255, 255, 255], + "small_button": [0, 0, 0, 0], + "small_button_hover": [102, 102, 102, 255], + "small_button_active": [10, 8, 80, 255], + "small_button_active_hover": [10, 8, 80, 255], + "small_button_text": [102, 102, 102, 255], + "small_button_text_hover": [8, 7, 63, 255], "small_button_text_active": [255, 255, 255, 255], "small_button_text_active_hover": [255, 255, 255, 255], @@ -136,60 +234,55 @@ "extruder_button_material_border": [255, 255, 255, 255], + "rating_star": [90, 90, 90, 255], + "sync_button_text": [120, 120, 120, 255], "sync_button_text_hovered": [0, 0, 0, 255], "action_button": [255, 255, 255, 255], "action_button_text": [0, 0, 0, 255], "action_button_border": [127, 127, 127, 255], - "action_button_hovered": [255, 255, 255, 255], + "action_button_hovered": [232, 242, 252, 255], "action_button_hovered_text": [31, 36, 39, 255], - "action_button_hovered_border": [12, 169, 227, 255], + "action_button_hovered_border": [50, 130, 255, 255], "action_button_active": [255, 255, 255, 255], "action_button_active_text": [0, 0, 0, 255], - "action_button_active_border": [12, 169, 227, 255], + "action_button_active_border": [50, 130, 255, 255], "action_button_disabled": [245, 245, 245, 255], "action_button_disabled_text": [127, 127, 127, 255], "action_button_disabled_border": [245, 245, 245, 255], - - "print_button_ready": [12, 169, 227, 255], - "print_button_ready_border": [12, 169, 227, 255], - "print_button_ready_text": [255, 255, 255, 255], - "print_button_ready_hovered": [30, 186, 245, 243], - "print_button_ready_hovered_border": [30, 186, 245, 243], - "print_button_ready_pressed": [30, 186, 245, 243], - "print_button_ready_pressed_border": [30, 186, 245, 243], + "action_button_shadow": [223, 223, 223, 255], + "action_button_disabled_shadow": [228, 228, 228, 255], "scrollbar_background": [255, 255, 255, 255], - "scrollbar_handle": [31, 36, 39, 255], - "scrollbar_handle_hover": [12, 159, 227, 255], - "scrollbar_handle_down": [12, 159, 227, 255], + "scrollbar_handle": [10, 8, 80, 255], + "scrollbar_handle_hover": [50, 130, 255, 255], + "scrollbar_handle_down": [50, 130, 255, 255], - "setting_category": [245, 245, 245, 255], + "setting_category": [240, 240, 240, 255], "setting_category_disabled": [255, 255, 255, 255], - "setting_category_hover": [245, 245, 245, 255], - "setting_category_active": [245, 245, 245, 255], - "setting_category_active_hover": [245, 245, 245, 255], - "setting_category_text": [31, 36, 39, 255], + "setting_category_hover": [232, 242, 252, 255], + "setting_category_active": [240, 240, 240, 255], + "setting_category_active_hover": [232, 242, 252, 255], + "setting_category_text": [35, 35, 35, 255], "setting_category_disabled_text": [24, 41, 77, 101], - "setting_category_hover_text": [31, 36, 39, 255], - "setting_category_active_text": [31, 36, 39, 255], - "setting_category_active_hover_text": [31, 36, 39, 255], - "setting_category_border": [245, 245, 245, 255], - "setting_category_disabled_border": [245, 245, 245, 255], - "setting_category_hover_border": [12, 159, 227, 255], - "setting_category_active_border": [245, 245, 245, 255], - "setting_category_active_hover_border": [12, 159, 227, 255], + "setting_category_hover_text": [35, 35, 35, 255], + "setting_category_active_text": [35, 35, 35, 255], + "setting_category_active_hover_text": [35, 35, 35, 255], + "setting_category_border": [240, 240, 240, 255], + "setting_category_disabled_border": [240, 240, 240, 255], + "setting_category_hover_border": [50, 130, 255, 255], + "setting_category_active_border": [50, 130, 255, 255], + "setting_category_active_hover_border": [50, 130, 255, 255], "setting_control": [255, 255, 255, 255], "setting_control_selected": [31, 36, 39, 255], "setting_control_highlight": [255, 255, 255, 255], - "setting_control_border": [127, 127, 127, 255], - "setting_control_border_highlight": [12, 169, 227, 255], - "setting_control_text": [27, 27, 27, 255], - "setting_control_depth_line": [127, 127, 127, 255], - "setting_control_button": [127, 127, 127, 255], - "setting_control_button_hover": [70, 84, 113, 255], + "setting_control_border": [199, 199, 199, 255], + "setting_control_border_highlight": [50, 130, 255, 255], + "setting_control_text": [35, 35, 35, 255], + "setting_control_button": [102, 102, 102, 255], + "setting_control_button_hover": [8, 7, 63, 255], "setting_control_disabled": [245, 245, 245, 255], "setting_control_disabled_text": [127, 127, 127, 255], "setting_control_disabled_border": [127, 127, 127, 255], @@ -199,66 +292,45 @@ "setting_validation_warning_background": [255, 145, 62, 255], "setting_validation_warning": [127, 127, 127, 255], "setting_validation_ok": [255, 255, 255, 255], + "setting_filter_field" : [153, 153, 153, 255], - "material_compatibility_warning": [0, 0, 0, 255], + "material_compatibility_warning": [243, 166, 59, 255], "progressbar_background": [245, 245, 245, 255], - "progressbar_control": [31, 36, 39, 255], + "progressbar_control": [50, 130, 255, 255], - "slider_groove": [245, 245, 245, 255], - "slider_groove_border": [127, 127, 127, 255], - "slider_groove_fill": [127, 127, 127, 255], - "slider_handle": [0, 0, 0, 255], - "slider_handle_hover": [77, 182, 226, 255], - "slider_handle_active": [68, 192, 255, 255], - "slider_handle_border": [39, 44, 48, 255], + "slider_groove": [223, 223, 223, 255], + "slider_groove_fill": [8, 7, 63, 255], + "slider_handle": [8, 7, 63, 255], + "slider_handle_active": [50, 130, 255, 255], "slider_text_background": [255, 255, 255, 255], "quality_slider_unavailable": [179, 179, 179, 255], "quality_slider_available": [0, 0, 0, 255], - "quality_slider_handle": [0, 0, 0, 255], - "quality_slider_handle_hover": [127, 127, 127, 255], - "quality_slider_text": [0, 0, 0, 255], "checkbox": [255, 255, 255, 255], "checkbox_hover": [255, 255, 255, 255], - "checkbox_border": [64, 69, 72, 255], - "checkbox_border_hover": [12, 169, 227, 255], - "checkbox_mark": [119, 122, 124, 255], - "checkbox_text": [27, 27, 27, 255], + "checkbox_border": [199, 199, 199, 255], + "checkbox_border_hover": [50, 130, 255, 255], + "checkbox_mark": [50, 130, 255, 255], + "checkbox_disabled": [223, 223, 223, 255], + "checkbox_text": [35, 35, 35, 255], - "mode_switch": [255, 255, 255, 255], - "mode_switch_hover": [255, 255, 255, 255], - "mode_switch_border": [127, 127, 127, 255], - "mode_switch_border_hover": [12, 169, 227, 255], - "mode_switch_handle": [31, 36, 39, 255], - "mode_switch_text": [31, 36, 39, 255], - "mode_switch_text_hover": [31, 36, 39, 255], - "mode_switch_text_checked": [12, 169, 227, 255], - - "tooltip": [68, 192, 255, 255], + "tooltip": [25, 25, 25, 255], "tooltip_text": [255, 255, 255, 255], - "tool_button_border": [255, 255, 255, 0], - "message_background": [255, 255, 255, 255], - "message_shadow": [0, 0, 0, 120], - "message_border": [127, 127, 127, 255], - "message_text": [0, 0, 0, 255], - "message_button": [12, 169, 227, 255], - "message_button_hover": [12, 169, 227, 255], - "message_button_active": [12, 169, 227, 255], - "message_button_text": [255, 255, 255, 255], - "message_button_text_hover": [255, 255, 255, 255], - "message_button_text_active": [255, 255, 255, 255], - "message_progressbar_background": [200, 200, 200, 255], - "message_progressbar_control": [77, 182, 226, 255], + "message_border": [192, 193, 194, 255], + "message_close": [102, 102, 102, 255], + "message_close_hover": [8, 7, 63, 255], + "message_progressbar_background": [245, 245, 245, 255], + "message_progressbar_control": [50, 130, 255, 255], "tool_panel_background": [255, 255, 255, 255], "status_offline": [0, 0, 0, 255], "status_ready": [0, 205, 0, 255], - "status_busy": [12, 169, 227, 255], + "status_busy": [50, 130, 255, 255], "status_paused": [255, 140, 0, 255], "status_stopped": [236, 82, 80, 255], "status_unknown": [127, 127, 127, 255], @@ -269,8 +341,8 @@ "z_axis": [0, 255, 0, 255], "all_axis": [255, 255, 255, 255], - "viewport_background": [245, 245, 245, 255], - "volume_outline": [12, 169, 227, 255], + "viewport_background": [250, 250, 250, 255], + "volume_outline": [50, 130, 255, 255], "buildplate": [244, 244, 244, 255], "buildplate_grid": [129, 131, 134, 255], "buildplate_grid_minor": [230, 230, 231, 255], @@ -283,78 +355,143 @@ "model_overhang": [255, 0, 0, 255], "model_unslicable": [122, 122, 122, 255], "model_unslicable_alt": [172, 172, 127, 255], - "model_selection_outline": [12, 169, 227, 255], + "model_selection_outline": [50, 130, 255, 255], "model_non_printing": [122, 122, 122, 255], "xray": [26, 26, 62, 255], "xray_error": [255, 0, 0, 255], "layerview_ghost": [32, 32, 32, 96], - "layerview_none": [255, 255, 255, 255], - "layerview_inset_0": [255, 0, 0, 255], - "layerview_inset_x": [0, 255, 0, 255], - "layerview_skin": [255, 255, 0, 255], - "layerview_support": [0, 255, 255, 255], - "layerview_skirt": [0, 255, 255, 255], - "layerview_infill": [255, 192, 0, 255], - "layerview_support_infill": [0, 255, 255, 255], - "layerview_move_combing": [0, 0, 255, 255], - "layerview_move_retraction": [128, 128, 255, 255], + "layerview_none": [255, 255, 255, 255], + "layerview_inset_0": [255, 0, 0, 255], + "layerview_inset_x": [0, 255, 0, 255], + "layerview_skin": [255, 255, 0, 255], + "layerview_support": [0, 255, 255, 255], + "layerview_skirt": [0, 255, 255, 255], + "layerview_infill": [255, 192, 0, 255], + "layerview_support_infill": [0, 255, 255, 255], + "layerview_move_combing": [0, 0, 255, 255], + "layerview_move_retraction": [128, 128, 255, 255], "layerview_support_interface": [64, 192, 255, 255], + "layerview_prime_tower": [0, 255, 255, 255], "layerview_nozzle": [181, 166, 66, 50], - "configuration_item": [255, 255, 255, 0], - "configuration_item_active": [12, 169, 227, 32], - "configuration_item_text": [0, 0, 0, 255], - "configuration_item_text_active": [0, 0, 0, 255], - "configuration_item_border": [127, 127, 127, 255], - "configuration_item_border_active": [12, 169, 227, 32], - "configuration_item_border_hover": [12, 169, 227, 255], - - "tab_status_connected": [12, 169, 227, 255], + "tab_status_connected": [50, 130, 255, 255], "tab_status_disconnected": [200, 200, 200, 255], - "printer_config_matched": [12, 169, 227, 255], - "printer_config_mismatch": [127, 127, 127, 255] + "printer_config_matched": [50, 130, 255, 255], + "printer_config_mismatch": [127, 127, 127, 255], + + "toolbox_header_button_text_active": [0, 0, 0, 255], + "toolbox_header_button_text_inactive": [0, 0, 0, 255], + "toolbox_header_button_text_hovered": [0, 0, 0, 255], + + "favorites_header_bar": [245, 245, 245, 255], + "favorites_header_hover": [245, 245, 245, 255], + "favorites_header_text": [31, 36, 39, 255], + "favorites_header_text_hover": [31, 36, 39, 255], + "favorites_row_selected": [196, 239, 255, 255], + + "monitor_printer_family_tag": [228, 228, 242, 255], + "monitor_text_primary": [65, 64, 84, 255], + "monitor_text_disabled": [238, 238, 238, 255], + "monitor_text_link": [50, 130, 255, 255], + "monitor_icon_primary": [10, 8, 80, 255], + "monitor_icon_accent": [255, 255, 255, 255], + "monitor_icon_disabled": [238, 238, 238, 255], + + "monitor_secondary_button_hover": [228, 228, 228, 255], + "monitor_secondary_button": [240, 240, 240, 255], + "monitor_secondary_button_text": [30, 102, 215, 255], + "monitor_secondary_button_shadow": [216, 216, 216, 255], + + "monitor_card_border": [192, 193, 194, 255], + "monitor_card_background": [255, 255, 255, 255], + "monitor_card_hover": [232, 242, 252, 255], + + "monitor_stage_background": [246, 246, 246, 255], + "monitor_stage_background_fade": [246, 246, 246, 102], + + "monitor_progress_bar_fill": [50, 130, 255, 255], + "monitor_progress_bar_deactive": [192, 193, 194, 255], + "monitor_progress_bar_empty": [245, 245, 245, 255], + + "monitor_tooltip": [25, 25, 25, 255], + "monitor_tooltip_text": [255, 255, 255, 255], + "monitor_context_menu": [255, 255, 255, 255], + "monitor_context_menu_hover": [245, 245, 245, 255], + + "monitor_skeleton_loading": [238, 238, 238, 255], + "monitor_placeholder_image": [230, 230, 230, 255], + "monitor_image_overlay": [0, 0, 0, 255], + "monitor_shadow": [220, 220, 220, 255], + + "monitor_carousel_dot": [216, 216, 216, 255], + "monitor_carousel_dot_current": [119, 119, 119, 255] }, "sizes": { - "window_minimum_size": [70, 50], + "window_minimum_size": [100, 60], + "main_window_header": [0.0, 4.0], + "main_window_header_button": [8, 2.35], + "main_window_header_button_icon": [1.2, 1.2], + + "stage_menu": [0.0, 4.0], + + "account_button": [12, 2.5], + + "print_setup_widget": [38.0, 30.0], + "print_setup_mode_toggle": [0.0, 2.0], + "print_setup_extruder_box": [0.0, 6.0], + "print_setup_slider_groove": [0.16, 0.16], + "print_setup_slider_handle": [1.0, 1.0], + "print_setup_slider_tickmarks": [0.32, 0.32], + "print_setup_big_item": [28, 2.5], + "print_setup_icon": [1.2, 1.2], + "drag_icon": [1.416, 0.25], + + "expandable_component_content_header": [0.0, 3.0], + + "configuration_selector": [35.0, 4.0], + "configuration_selector_mode_tabs": [1.0, 3.0], + + "action_panel_widget": [26.0, 0.0], + "action_panel_information_widget": [20.0, 0.0], + + "machine_selector_widget": [20.0, 4.0], + "machine_selector_widget_content": [25.0, 32.0], + "machine_selector_icon": [2.66, 2.66], + + "views_selector": [23.0, 4.0], + + "printer_type_label": [3.5, 1.5], + + "default_radius": [0.25, 0.25], + + "wide_lining": [0.5, 0.5], + "thick_lining": [0.2, 0.2], "default_lining": [0.08, 0.08], + "default_arrow": [0.8, 0.8], - "logo": [7.6, 1.6], + "logo": [8, 1.75], - "default_margin": [1.0, 1.0], "wide_margin": [2.0, 2.0], + "thick_margin": [1.71, 1.43], + "default_margin": [1.0, 1.0], + "thin_margin": [0.71, 0.71], "narrow_margin": [0.5, 0.5], - "window_margin": [1.0, 1.0], - "extruder_button_material_margin": [0.70, 0.9], - "extruder_button_material": [0.75, 0.75], + "extruder_icon": [2.33, 2.33], - "sidebar": [35.0, 10.0], - "sidebar_margin": [1.71, 1.43], - "sidebar_margin_thin": [0.71, 0.71], - "sidebar_header": [0.0, 4.0], - "sidebar_header_highlight": [0.25, 0.25], - "sidebar_header_mode_toggle": [0.0, 2.0], - "sidebar_header_mode_tabs": [0.0, 3.0], - "sidebar_lining": [0.5, 0.5], - "sidebar_lining_thin": [0.2, 0.2], - "sidebar_setup": [0.0, 2.0], - "sidebar_tabs": [0.0, 3.5], - "sidebar_inputfields": [0.0, 2.0], - "sidebar_extruder_box": [0.0, 6.0], - "simple_mode_infill_caption": [0.0, 5.0], - "simple_mode_infill_height": [0.0, 8.0], - - "section": [0.0, 2.2], + "section": [0.0, 2], "section_icon": [1.6, 1.6], "section_icon_column": [2.8, 0.0], + "rating_star": [1.0, 1.0], "setting": [25.0, 1.8], - "setting_control": [10.0, 2.0], + "setting_control": [11.0, 2.0], + "setting_control_radius": [0.15, 0.15], "setting_control_depth_margin": [1.4, 0.0], "setting_preferences_button_margin": [4, 0.0], "setting_control_margin": [0.0, 0.0], @@ -362,52 +499,49 @@ "setting_text_maxwidth": [40.0, 0.0], "standard_list_lineheight": [1.5, 1.5], - "standard_list_input": [20.0, 25.0], - "standard_arrow": [0.8, 0.8], + "standard_arrow": [1.0, 1.0], "button": [4, 4], "button_icon": [2.5, 2.5], "button_lining": [0, 0], + "action_button": [15.0, 2.5], + "action_button_icon": [1.0, 1.0], + "action_button_radius": [0.15, 0.15], + "small_button": [2, 2], "small_button_icon": [1.5, 1.5], - "printer_status_icon": [1.8, 1.8], - "printer_sync_icon": [1.2, 1.2], + "favorites_row": [2, 2], + "favorites_button": [2, 2], + "favorites_button_icon": [1.2, 1.2], - "topbar_logo_right_margin": [3, 0], - "topbar_button": [8, 4], - "topbar_button_icon": [1.2, 1.2], + "printer_status_icon": [1.0, 1.0], + "printer_sync_icon": [1.2, 1.2], "button_tooltip": [1.0, 1.3], "button_tooltip_arrow": [0.25, 0.25], "tool_button_border": [1.0, 0], - "progressbar": [26.0, 0.4], - "progressbar_radius": [0, 0], - "progressbar_control": [8.0, 0.4], + "progressbar": [26.0, 0.75], + "progressbar_radius": [0.15, 0.15], + "progressbar_control": [8.0, 0.75], "scrollbar": [0.75, 0.5], - "quality_slider_bar": [1, 0.2], + "slider_groove": [0.5, 0.5], + "slider_groove_radius": [0.15, 0.15], + "slider_handle": [1.5, 1.5], + "slider_layerview_size": [1.0, 26.0], - "slider_groove": [0.3, 0.3], - "slider_handle": [1.0, 1.0], - "slider_layerview_size": [1.0, 22.0], - "slider_layerview_background": [4.0, 0.0], - "slider_layerview_margin": [1.0, 1.5], - - "layerview_menu_size": [15, 20], - "layerview_menu_size_material_color_mode": [15, 16], - "layerview_menu_size_collapsed": [15, 6], - "layerview_menu_size_compatibility": [22, 22.0], - "layerview_menu_size_compatibility_collapsed": [15, 3.5], + "layerview_menu_size": [16.0, 4.0], "layerview_legend_size": [1.0, 1.0], "layerview_row": [11.0, 1.5], "layerview_row_spacing": [0.0, 0.5], - "checkbox": [2.0, 2.0], + "checkbox": [1.5, 1.5], + "checkbox_radius": [0.08, 0.08], "tooltip": [20.0, 10.0], "tooltip_margins": [1.0, 1.0], @@ -427,10 +561,9 @@ "message": [30.0, 5.0], "message_close": [1, 1], - "message_button": [6.0, 1.8], - "message_shadow": [0, 0], - "message_margin": [0, 1.0], - "message_inner_margin": [1.5, 1.5], + "message_radius": [0.25, 0.25], + "message_action_button": [0, 2.0], + "message_image": [15.0, 5.0], "infill_button_margin": [0.5, 0.5], @@ -451,14 +584,29 @@ "toolbox_detail_header": [1.0, 14.0], "toolbox_detail_tile": [1.0, 8.0], "toolbox_back_column": [6.0, 1.0], - "toolbox_back_button": [4.0, 2.0], + "toolbox_back_button": [6.0, 2.0], "toolbox_installed_tile": [1.0, 8.0], "toolbox_property_label": [1.0, 2.0], - "toolbox_heading_label": [1.0, 4.0], + "toolbox_heading_label": [1.0, 3.8], "toolbox_header": [1.0, 4.0], + "toolbox_header_highlight": [0.25, 0.25], "toolbox_progress_bar": [8.0, 0.5], "toolbox_chart_row": [1.0, 2.0], "toolbox_action_button": [8.0, 2.5], - "toolbox_loader": [2.0, 2.0] + "toolbox_loader": [2.0, 2.0], + + "avatar_image": [6.8, 6.8], + + "monitor_config_override_box": [1.0, 14.0], + "monitor_extruder_circle": [2.75, 2.75], + "monitor_text_line": [1.5, 1.5], + "monitor_text_line_large": [2.33, 2.33], + "monitor_thick_lining": [0.16, 0.16], + "monitor_corner_radius": [0.3, 0.3], + "monitor_shadow_radius": [0.4, 0.4], + "monitor_shadow_offset": [0.15, 0.15], + "monitor_empty_state_offset": [5.6, 5.6], + "monitor_empty_state_size": [35.0, 25.0], + "monitor_external_link_icon": [1.16, 1.16] } } diff --git a/resources/variants/cartesio_0.25.inst.cfg b/resources/variants/cartesio_0.25.inst.cfg index b3aae8a393..24203fa0d3 100644 --- a/resources/variants/cartesio_0.25.inst.cfg +++ b/resources/variants/cartesio_0.25.inst.cfg @@ -5,7 +5,7 @@ definition = cartesio [metadata] author = Cartesio -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/cartesio_0.4.inst.cfg b/resources/variants/cartesio_0.4.inst.cfg index 5cea5823c4..6b980110b7 100644 --- a/resources/variants/cartesio_0.4.inst.cfg +++ b/resources/variants/cartesio_0.4.inst.cfg @@ -5,7 +5,7 @@ definition = cartesio [metadata] author = Cartesio -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/cartesio_0.8.inst.cfg b/resources/variants/cartesio_0.8.inst.cfg index b4009cf9ed..62669929dc 100644 --- a/resources/variants/cartesio_0.8.inst.cfg +++ b/resources/variants/cartesio_0.8.inst.cfg @@ -5,7 +5,7 @@ definition = cartesio [metadata] author = Cartesio -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_hyb35.inst.cfg b/resources/variants/fabtotum_hyb35.inst.cfg index d3f0077792..bf00512c8f 100644 --- a/resources/variants/fabtotum_hyb35.inst.cfg +++ b/resources/variants/fabtotum_hyb35.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_lite04.inst.cfg b/resources/variants/fabtotum_lite04.inst.cfg index 226c136564..cb4f7e4d34 100644 --- a/resources/variants/fabtotum_lite04.inst.cfg +++ b/resources/variants/fabtotum_lite04.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_lite06.inst.cfg b/resources/variants/fabtotum_lite06.inst.cfg index 62e3014b60..9f0e3fe145 100644 --- a/resources/variants/fabtotum_lite06.inst.cfg +++ b/resources/variants/fabtotum_lite06.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_pro02.inst.cfg b/resources/variants/fabtotum_pro02.inst.cfg index 3e4661ee2c..b80f80155b 100644 --- a/resources/variants/fabtotum_pro02.inst.cfg +++ b/resources/variants/fabtotum_pro02.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_pro04.inst.cfg b/resources/variants/fabtotum_pro04.inst.cfg index 3fe140f8be..7a0afdccb2 100644 --- a/resources/variants/fabtotum_pro04.inst.cfg +++ b/resources/variants/fabtotum_pro04.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_pro06.inst.cfg b/resources/variants/fabtotum_pro06.inst.cfg index fcb5c71ef0..6330b2e77c 100644 --- a/resources/variants/fabtotum_pro06.inst.cfg +++ b/resources/variants/fabtotum_pro06.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_pro08.inst.cfg b/resources/variants/fabtotum_pro08.inst.cfg index bef04734eb..412bbf7410 100644 --- a/resources/variants/fabtotum_pro08.inst.cfg +++ b/resources/variants/fabtotum_pro08.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/felixtec4_0.25.inst.cfg b/resources/variants/felixtec4_0.25.inst.cfg index 7d8bca94b0..7a158bcc80 100644 --- a/resources/variants/felixtec4_0.25.inst.cfg +++ b/resources/variants/felixtec4_0.25.inst.cfg @@ -6,7 +6,7 @@ definition = felixtec4dual [metadata] author = kerog777 type = variant -setting_version = 5 +setting_version = 7 hardware_type = nozzle [values] diff --git a/resources/variants/felixtec4_0.35.inst.cfg b/resources/variants/felixtec4_0.35.inst.cfg index f061aa1cbc..35850afa7a 100644 --- a/resources/variants/felixtec4_0.35.inst.cfg +++ b/resources/variants/felixtec4_0.35.inst.cfg @@ -6,7 +6,7 @@ definition = felixtec4dual [metadata] author = kerog777 type = variant -setting_version = 5 +setting_version = 7 hardware_type = nozzle [values] diff --git a/resources/variants/felixtec4_0.50.inst.cfg b/resources/variants/felixtec4_0.50.inst.cfg index 3c68c42dae..d4ee356132 100644 --- a/resources/variants/felixtec4_0.50.inst.cfg +++ b/resources/variants/felixtec4_0.50.inst.cfg @@ -7,7 +7,7 @@ definition = felixtec4dual author = kerog777 type = variant hardware_type = nozzle -setting_version = 5 +setting_version = 7 [values] machine_nozzle_size = 0.5 diff --git a/resources/variants/felixtec4_0.70.inst.cfg b/resources/variants/felixtec4_0.70.inst.cfg index 3a52644714..b5dfc3758c 100644 --- a/resources/variants/felixtec4_0.70.inst.cfg +++ b/resources/variants/felixtec4_0.70.inst.cfg @@ -7,7 +7,7 @@ definition = felixtec4dual author = kerog777 type = variant hardware_type = nozzle -setting_version = 5 +setting_version = 7 [values] machine_nozzle_size = 0.70 diff --git a/resources/variants/gmax15plus_025_e3d.inst.cfg b/resources/variants/gmax15plus_025_e3d.inst.cfg index 8a6b37067d..42d692d5df 100644 --- a/resources/variants/gmax15plus_025_e3d.inst.cfg +++ b/resources/variants/gmax15plus_025_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_04_e3d.inst.cfg b/resources/variants/gmax15plus_04_e3d.inst.cfg index a2f779f426..fca1fd837d 100644 --- a/resources/variants/gmax15plus_04_e3d.inst.cfg +++ b/resources/variants/gmax15plus_04_e3d.inst.cfg @@ -5,9 +5,9 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.4 +machine_nozzle_size = 0.4 \ No newline at end of file diff --git a/resources/variants/gmax15plus_05_e3d.inst.cfg b/resources/variants/gmax15plus_05_e3d.inst.cfg index 68ee111aa1..9c514dea8f 100644 --- a/resources/variants/gmax15plus_05_e3d.inst.cfg +++ b/resources/variants/gmax15plus_05_e3d.inst.cfg @@ -5,9 +5,9 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.5 +machine_nozzle_size = 0.5 \ No newline at end of file diff --git a/resources/variants/gmax15plus_05_jhead.inst.cfg b/resources/variants/gmax15plus_05_jhead.inst.cfg index 6d0b084969..29dded70e2 100644 --- a/resources/variants/gmax15plus_05_jhead.inst.cfg +++ b/resources/variants/gmax15plus_05_jhead.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_06_e3d.inst.cfg b/resources/variants/gmax15plus_06_e3d.inst.cfg index 987e882a09..18569ff55a 100644 --- a/resources/variants/gmax15plus_06_e3d.inst.cfg +++ b/resources/variants/gmax15plus_06_e3d.inst.cfg @@ -5,9 +5,9 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.6 +machine_nozzle_size = 0.6 \ No newline at end of file diff --git a/resources/variants/gmax15plus_08_e3d.inst.cfg b/resources/variants/gmax15plus_08_e3d.inst.cfg index bf59b47da0..5ec1ce6916 100644 --- a/resources/variants/gmax15plus_08_e3d.inst.cfg +++ b/resources/variants/gmax15plus_08_e3d.inst.cfg @@ -5,9 +5,9 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.8 +machine_nozzle_size = 0.8 \ No newline at end of file diff --git a/resources/variants/gmax15plus_10_jhead.inst.cfg b/resources/variants/gmax15plus_10_jhead.inst.cfg index 47355f344c..81c8ce2fcc 100644 --- a/resources/variants/gmax15plus_10_jhead.inst.cfg +++ b/resources/variants/gmax15plus_10_jhead.inst.cfg @@ -5,9 +5,9 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.5 +machine_nozzle_size = 0.5 \ No newline at end of file diff --git a/resources/variants/gmax15plus_12_e3d.inst.cfg b/resources/variants/gmax15plus_12_e3d.inst.cfg new file mode 100644 index 0000000000..3381f53cd0 --- /dev/null +++ b/resources/variants/gmax15plus_12_e3d.inst.cfg @@ -0,0 +1,13 @@ +[general] +name = 1.2mm E3D Volcano +version = 4 +definition = gmax15plus + +[metadata] +author = gcreate +setting_version = 7 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.2 \ No newline at end of file diff --git a/resources/variants/gmax15plus_dual_025_e3d.inst.cfg b/resources/variants/gmax15plus_dual_025_e3d.inst.cfg index 750a5381b3..a3d22f8629 100644 --- a/resources/variants/gmax15plus_dual_025_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_025_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_04_e3d.inst.cfg b/resources/variants/gmax15plus_dual_04_e3d.inst.cfg index 4b5a71c53b..4338432b10 100644 --- a/resources/variants/gmax15plus_dual_04_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_04_e3d.inst.cfg @@ -5,9 +5,9 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.4 +machine_nozzle_size = 0.4 \ No newline at end of file diff --git a/resources/variants/gmax15plus_dual_05_e3d.inst.cfg b/resources/variants/gmax15plus_dual_05_e3d.inst.cfg index 05d9a88d54..1c1151324c 100644 --- a/resources/variants/gmax15plus_dual_05_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_05_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_05_jhead.inst.cfg b/resources/variants/gmax15plus_dual_05_jhead.inst.cfg index 54a237e848..ce2e9546be 100644 --- a/resources/variants/gmax15plus_dual_05_jhead.inst.cfg +++ b/resources/variants/gmax15plus_dual_05_jhead.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_06_e3d.inst.cfg b/resources/variants/gmax15plus_dual_06_e3d.inst.cfg index 39c41be968..ec2f378ff5 100644 --- a/resources/variants/gmax15plus_dual_06_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_06_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_08_e3d.inst.cfg b/resources/variants/gmax15plus_dual_08_e3d.inst.cfg index 1f2d7b9790..06f9969302 100644 --- a/resources/variants/gmax15plus_dual_08_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_08_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_10_jhead.inst.cfg b/resources/variants/gmax15plus_dual_10_jhead.inst.cfg index cf615bb874..6fefc37862 100644 --- a/resources/variants/gmax15plus_dual_10_jhead.inst.cfg +++ b/resources/variants/gmax15plus_dual_10_jhead.inst.cfg @@ -5,9 +5,9 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.5 +machine_nozzle_size = 1.0 diff --git a/resources/variants/imade3d_jellybox_0.4.inst.cfg b/resources/variants/imade3d_jellybox_0.4.inst.cfg index 2bd0f578cf..18481a8342 100644 --- a/resources/variants/imade3d_jellybox_0.4.inst.cfg +++ b/resources/variants/imade3d_jellybox_0.4.inst.cfg @@ -5,7 +5,7 @@ definition = imade3d_jellybox [metadata] author = IMADE3D -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg b/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg index 6a93cdf13d..2f4d35676e 100644 --- a/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg +++ b/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg @@ -5,7 +5,7 @@ definition = imade3d_jellybox [metadata] author = IMADE3D -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_evy_0.2.inst.cfg b/resources/variants/tizyx_evy_0.2.inst.cfg new file mode 100644 index 0000000000..802031778c --- /dev/null +++ b/resources/variants/tizyx_evy_0.2.inst.cfg @@ -0,0 +1,14 @@ +[general] +name = 0.2mm +version = 4 +definition = tizyx_evy + +[metadata] +author = TiZYX +setting_version = 5 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 + diff --git a/resources/variants/tizyx_evy_0.3.inst.cfg b/resources/variants/tizyx_evy_0.3.inst.cfg new file mode 100644 index 0000000000..10c4fae6d4 --- /dev/null +++ b/resources/variants/tizyx_evy_0.3.inst.cfg @@ -0,0 +1,13 @@ +[general] +name = 0.3mm +version = 4 +definition = tizyx_evy + +[metadata] +author = TiZYX +setting_version = 5 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/tizyx_evy_0.4.inst.cfg b/resources/variants/tizyx_evy_0.4.inst.cfg new file mode 100644 index 0000000000..e5e0e6eb8f --- /dev/null +++ b/resources/variants/tizyx_evy_0.4.inst.cfg @@ -0,0 +1,13 @@ +[general] +name = 0.4mm +version = 4 +definition = tizyx_evy + +[metadata] +author = TiZYX +setting_version = 5 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/tizyx_evy_0.5.inst.cfg b/resources/variants/tizyx_evy_0.5.inst.cfg new file mode 100644 index 0000000000..e0ec423b5f --- /dev/null +++ b/resources/variants/tizyx_evy_0.5.inst.cfg @@ -0,0 +1,14 @@ +[general] +name = 0.5mm +version = 4 +definition = tizyx_evy + +[metadata] +author = TiZYX +setting_version = 5 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 + diff --git a/resources/variants/tizyx_evy_0.6.inst.cfg b/resources/variants/tizyx_evy_0.6.inst.cfg new file mode 100644 index 0000000000..a72ae828f9 --- /dev/null +++ b/resources/variants/tizyx_evy_0.6.inst.cfg @@ -0,0 +1,13 @@ +[general] +name = 0.6mm +version = 4 +definition = tizyx_evy + +[metadata] +author = TiZYX +setting_version = 5 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/tizyx_evy_0.8.inst.cfg b/resources/variants/tizyx_evy_0.8.inst.cfg new file mode 100644 index 0000000000..584c8b7c19 --- /dev/null +++ b/resources/variants/tizyx_evy_0.8.inst.cfg @@ -0,0 +1,13 @@ +[general] +name = 0.8mm +version = 4 +definition = tizyx_evy + +[metadata] +author = TiZYX +setting_version = 5 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/tizyx_evy_1.0.inst.cfg b/resources/variants/tizyx_evy_1.0.inst.cfg new file mode 100644 index 0000000000..8949667197 --- /dev/null +++ b/resources/variants/tizyx_evy_1.0.inst.cfg @@ -0,0 +1,13 @@ +[general] +name = 1.0mm +version = 4 +definition = tizyx_evy + +[metadata] +author = TiZYX +setting_version = 5 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/tizyx_k25_0.2.inst.cfg b/resources/variants/tizyx_k25_0.2.inst.cfg new file mode 100644 index 0000000000..589d50f93c --- /dev/null +++ b/resources/variants/tizyx_k25_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2 mm +version = 4 +definition = tizyx_k25 + +[metadata] +setting_version = 7 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/tizyx_k25_0.3.inst.cfg b/resources/variants/tizyx_k25_0.3.inst.cfg new file mode 100644 index 0000000000..41612baa4d --- /dev/null +++ b/resources/variants/tizyx_k25_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3 mm +version = 4 +definition = tizyx_k25 + +[metadata] +setting_version = 7 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/tizyx_k25_0.4.inst.cfg b/resources/variants/tizyx_k25_0.4.inst.cfg new file mode 100644 index 0000000000..b3fca877b3 --- /dev/null +++ b/resources/variants/tizyx_k25_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4 mm +version = 4 +definition = tizyx_k25 + +[metadata] +setting_version = 7 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/tizyx_k25_0.5.inst.cfg b/resources/variants/tizyx_k25_0.5.inst.cfg new file mode 100644 index 0000000000..e0dd4f1054 --- /dev/null +++ b/resources/variants/tizyx_k25_0.5.inst.cfg @@ -0,0 +1,13 @@ +[general] +name = 0.5 mm +version = 4 +definition = tizyx_k25 + +[metadata] +setting_version = 7 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 + diff --git a/resources/variants/tizyx_k25_0.6.inst.cfg b/resources/variants/tizyx_k25_0.6.inst.cfg new file mode 100644 index 0000000000..d2aebe4695 --- /dev/null +++ b/resources/variants/tizyx_k25_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6 mm +version = 4 +definition = tizyx_k25 + +[metadata] +setting_version = 7 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/tizyx_k25_0.8.inst.cfg b/resources/variants/tizyx_k25_0.8.inst.cfg new file mode 100644 index 0000000000..5a425988ee --- /dev/null +++ b/resources/variants/tizyx_k25_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8 mm +version = 4 +definition = tizyx_k25 + +[metadata] +setting_version = 7 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/tizyx_k25_1.0.inst.cfg b/resources/variants/tizyx_k25_1.0.inst.cfg new file mode 100644 index 0000000000..01c8944960 --- /dev/null +++ b/resources/variants/tizyx_k25_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0 mm +version = 4 +definition = tizyx_k25 + +[metadata] +setting_version = 7 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/ultimaker2_0.25.inst.cfg b/resources/variants/ultimaker2_0.25.inst.cfg index a58b4d9a56..87bb0a237d 100644 --- a/resources/variants/ultimaker2_0.25.inst.cfg +++ b/resources/variants/ultimaker2_0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_0.4.inst.cfg b/resources/variants/ultimaker2_0.4.inst.cfg index 46845d974e..b50cc32eca 100644 --- a/resources/variants/ultimaker2_0.4.inst.cfg +++ b/resources/variants/ultimaker2_0.4.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_0.6.inst.cfg b/resources/variants/ultimaker2_0.6.inst.cfg index f9ab1f1358..fac65ed284 100644 --- a/resources/variants/ultimaker2_0.6.inst.cfg +++ b/resources/variants/ultimaker2_0.6.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_0.8.inst.cfg b/resources/variants/ultimaker2_0.8.inst.cfg index 3d9c273783..9177e8e6ee 100644 --- a/resources/variants/ultimaker2_0.8.inst.cfg +++ b/resources/variants/ultimaker2_0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_0.25.inst.cfg b/resources/variants/ultimaker2_extended_0.25.inst.cfg index f5471fc505..eceb659e21 100644 --- a/resources/variants/ultimaker2_extended_0.25.inst.cfg +++ b/resources/variants/ultimaker2_extended_0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_0.4.inst.cfg b/resources/variants/ultimaker2_extended_0.4.inst.cfg index a7d03f2408..e3dad7fd56 100644 --- a/resources/variants/ultimaker2_extended_0.4.inst.cfg +++ b/resources/variants/ultimaker2_extended_0.4.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_0.6.inst.cfg b/resources/variants/ultimaker2_extended_0.6.inst.cfg index 25c180e07e..82a5c08362 100644 --- a/resources/variants/ultimaker2_extended_0.6.inst.cfg +++ b/resources/variants/ultimaker2_extended_0.6.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_0.8.inst.cfg b/resources/variants/ultimaker2_extended_0.8.inst.cfg index c33f483da3..4f9d1d8889 100644 --- a/resources/variants/ultimaker2_extended_0.8.inst.cfg +++ b/resources/variants/ultimaker2_extended_0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg index c65940251c..034d094e86 100644 --- a/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg index 7493f2af44..976e129393 100644 --- a/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg index c4a3ab6340..b7cbe8fa62 100644 --- a/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg index e77ec2a5c2..437e107e89 100644 --- a/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_plus_0.25.inst.cfg b/resources/variants/ultimaker2_plus_0.25.inst.cfg index 7fd7f3980f..0880159d03 100644 --- a/resources/variants/ultimaker2_plus_0.25.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_plus_0.4.inst.cfg b/resources/variants/ultimaker2_plus_0.4.inst.cfg index 544728f8a4..4543c148bb 100644 --- a/resources/variants/ultimaker2_plus_0.4.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.4.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle @@ -12,5 +12,5 @@ hardware_type = nozzle machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 1.05 speed_wall = =round(speed_print / 1.25, 1) -speed_wall_0 = =1 if speed_wall < 10 else (speed_wall - 10) +speed_wall_0 = =max(speed_wall - 10, 1) speed_topbottom = =round(speed_print / 2.25, 1) diff --git a/resources/variants/ultimaker2_plus_0.6.inst.cfg b/resources/variants/ultimaker2_plus_0.6.inst.cfg index d8fea055e5..57ff6714a7 100644 --- a/resources/variants/ultimaker2_plus_0.6.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.6.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_plus_0.8.inst.cfg b/resources/variants/ultimaker2_plus_0.8.inst.cfg index 3ae902ac2f..0fd1b50c5f 100644 --- a/resources/variants/ultimaker2_plus_0.8.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_aa0.25.inst.cfg b/resources/variants/ultimaker3_aa0.25.inst.cfg index b46fdf5dfb..1dadf10e91 100644 --- a/resources/variants/ultimaker3_aa0.25.inst.cfg +++ b/resources/variants/ultimaker3_aa0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_aa0.8.inst.cfg b/resources/variants/ultimaker3_aa0.8.inst.cfg index 56740233dd..2d3f210019 100644 --- a/resources/variants/ultimaker3_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_aa0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle @@ -40,7 +40,7 @@ material_standby_temperature = 100 multiple_mesh_overlap = 0 prime_tower_enable = False prime_tower_wipe_enabled = True -retract_at_layer_change = True +retract_at_layer_change = =not magic_spiralize retraction_amount = 6.5 retraction_count_max = 25 retraction_extrusion_window = 1 diff --git a/resources/variants/ultimaker3_aa04.inst.cfg b/resources/variants/ultimaker3_aa04.inst.cfg index ce91e89d26..b5a250184f 100644 --- a/resources/variants/ultimaker3_aa04.inst.cfg +++ b/resources/variants/ultimaker3_aa04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_bb0.8.inst.cfg b/resources/variants/ultimaker3_bb0.8.inst.cfg index ace0bf3a94..df5b654e2e 100644 --- a/resources/variants/ultimaker3_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_bb0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_bb04.inst.cfg b/resources/variants/ultimaker3_bb04.inst.cfg index d571cabc9b..70e2a5faa8 100644 --- a/resources/variants/ultimaker3_bb04.inst.cfg +++ b/resources/variants/ultimaker3_bb04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_aa0.25.inst.cfg b/resources/variants/ultimaker3_extended_aa0.25.inst.cfg index 714b017653..5a9292ad1f 100644 --- a/resources/variants/ultimaker3_extended_aa0.25.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg index f72c96b551..03b5b0753d 100644 --- a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_aa04.inst.cfg b/resources/variants/ultimaker3_extended_aa04.inst.cfg index f354784fc6..8303eca4e6 100644 --- a/resources/variants/ultimaker3_extended_aa04.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg index fe760c93b8..13bb67d108 100644 --- a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_bb04.inst.cfg b/resources/variants/ultimaker3_extended_bb04.inst.cfg index 742dc9896e..36191bd054 100644 --- a/resources/variants/ultimaker3_extended_bb04.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_aa0.25.inst.cfg b/resources/variants/ultimaker_s5_aa0.25.inst.cfg index 643513faad..e2ed3defe9 100644 --- a/resources/variants/ultimaker_s5_aa0.25.inst.cfg +++ b/resources/variants/ultimaker_s5_aa0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_aa0.8.inst.cfg b/resources/variants/ultimaker_s5_aa0.8.inst.cfg index eca8c400d0..84b3802fef 100644 --- a/resources/variants/ultimaker_s5_aa0.8.inst.cfg +++ b/resources/variants/ultimaker_s5_aa0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_aa04.inst.cfg b/resources/variants/ultimaker_s5_aa04.inst.cfg index b5b694d0c1..88dbc25d91 100644 --- a/resources/variants/ultimaker_s5_aa04.inst.cfg +++ b/resources/variants/ultimaker_s5_aa04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_aluminum.inst.cfg b/resources/variants/ultimaker_s5_aluminum.inst.cfg index 1018b7e5ab..65b0a6da68 100644 --- a/resources/variants/ultimaker_s5_aluminum.inst.cfg +++ b/resources/variants/ultimaker_s5_aluminum.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = buildplate diff --git a/resources/variants/ultimaker_s5_bb0.8.inst.cfg b/resources/variants/ultimaker_s5_bb0.8.inst.cfg index c1c5c1a10b..d05ce74f61 100644 --- a/resources/variants/ultimaker_s5_bb0.8.inst.cfg +++ b/resources/variants/ultimaker_s5_bb0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_bb04.inst.cfg b/resources/variants/ultimaker_s5_bb04.inst.cfg index b5ff8d51f6..2d3bc42a50 100644 --- a/resources/variants/ultimaker_s5_bb04.inst.cfg +++ b/resources/variants/ultimaker_s5_bb04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_cc06.inst.cfg b/resources/variants/ultimaker_s5_cc06.inst.cfg new file mode 100644 index 0000000000..f64e3b9055 --- /dev/null +++ b/resources/variants/ultimaker_s5_cc06.inst.cfg @@ -0,0 +1,46 @@ +[general] +name = CC 0.6 +version = 4 +definition = ultimaker_s5 + +[metadata] +setting_version = 7 +type = variant +hardware_type = nozzle + +[values] +brim_width = 7 +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_id = CC 0.6 +machine_nozzle_size = 0.6 +raft_acceleration = =acceleration_print +raft_airgap = 0.3 +raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 +raft_interface_line_spacing = =raft_interface_line_width + 0.2 +raft_interface_line_width = =line_width * 2 +raft_interface_thickness = =layer_height * 1.5 +raft_jerk = =jerk_print +raft_margin = 15 +raft_surface_layers = 2 +retraction_count_max = 25 +retraction_min_travel = =line_width * 2 +retraction_prime_speed = =retraction_speed +speed_infill = =speed_print +speed_layer_0 = 20 +speed_print = 45 +speed_support = =speed_topbottom +speed_topbottom = =math.ceil(speed_print * 25 / 45) +speed_travel_layer_0 = 50 +speed_wall = =math.ceil(speed_print * 30 / 45) +speed_wall_0 = =math.ceil(speed_wall * 25 / 30) +speed_wall_x = =speed_wall +support_angle = 60 +support_bottom_distance = =support_z_distance / 2 +support_pattern = zigzag +support_top_distance = =support_z_distance +support_use_towers = True +support_z_distance = =layer_height * 2 +switch_extruder_prime_speed = =switch_extruder_retraction_speeds +switch_extruder_retraction_amount = =machine_heat_zone_length +top_bottom_thickness = =layer_height * 6 +wall_thickness = =line_width * 3 diff --git a/resources/variants/ultimaker_s5_glass.inst.cfg b/resources/variants/ultimaker_s5_glass.inst.cfg index d74eb3c6c9..87196e5e9b 100644 --- a/resources/variants/ultimaker_s5_glass.inst.cfg +++ b/resources/variants/ultimaker_s5_glass.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = buildplate diff --git a/scripts/check_gcode_buffer.py b/scripts/check_gcode_buffer.py new file mode 100755 index 0000000000..2024ce2214 --- /dev/null +++ b/scripts/check_gcode_buffer.py @@ -0,0 +1,527 @@ +#!/usr/bin/env python3 +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import copy +import math +import os +import sys +from typing import Dict, List, Optional, Tuple + + +# ==================================== +# Constants and Default Values +# ==================================== +DEFAULT_BUFFER_FILLING_RATE_IN_C_PER_S = 50.0 # The buffer filling rate in #commands/s +DEFAULT_BUFFER_SIZE = 15 # The buffer size in #commands +MINIMUM_PLANNER_SPEED = 0.05 + +#Setting values for Ultimaker S5. +MACHINE_MAX_FEEDRATE_X = 300 +MACHINE_MAX_FEEDRATE_Y = 300 +MACHINE_MAX_FEEDRATE_Z = 40 +MACHINE_MAX_FEEDRATE_E = 45 +MACHINE_MAX_ACCELERATION_X = 9000 +MACHINE_MAX_ACCELERATION_Y = 9000 +MACHINE_MAX_ACCELERATION_Z = 100 +MACHINE_MAX_ACCELERATION_E = 10000 +MACHINE_MAX_JERK_XY = 20 +MACHINE_MAX_JERK_Z = 0.4 +MACHINE_MAX_JERK_E = 5 +MACHINE_MINIMUM_FEEDRATE = 0.001 +MACHINE_ACCELERATION = 3000 + +## Gets the code and number from the given g-code line. +def get_code_and_num(gcode_line: str) -> Tuple[str, str]: + gcode_line = gcode_line.strip() + cmd_code = gcode_line[0].upper() + cmd_num = str(gcode_line[1:]) + return cmd_code, cmd_num + +## Fetches arguments such as X1 Y2 Z3 from the given part list and returns a +# dict. +def get_value_dict(parts: List[str]) -> Dict[str, str]: + value_dict = {} + for p in parts: + p = p.strip() + if not p: + continue + code, num = get_code_and_num(p) + value_dict[code] = num + return value_dict + + +# ============================ +# Math Functions - Begin +# ============================ + +def calc_distance(pos1, pos2): + delta = {k: pos1[k] - pos2[k] for k in pos1} + distance = 0 + for value in delta.values(): + distance += value ** 2 + distance = math.sqrt(distance) + return distance + +## Given the initial speed, the target speed, and the acceleration, calculate +# the distance that's neede for the acceleration to finish. +def calc_acceleration_distance(init_speed: float, target_speed: float, acceleration: float) -> float: + if acceleration == 0: + return 0.0 + return (target_speed ** 2 - init_speed ** 2) / (2 * acceleration) + +## Gives the time it needs to accelerate from an initial speed to reach a final +# distance. +def calc_acceleration_time_from_distance(initial_feedrate: float, distance: float, acceleration: float) -> float: + discriminant = initial_feedrate ** 2 - 2 * acceleration * -distance + #If the discriminant is negative, we're moving in the wrong direction. + #Making the discriminant 0 then gives the extremum of the parabola instead of the intersection. + discriminant = max(0, discriminant) + return (-initial_feedrate + math.sqrt(discriminant)) / acceleration + +## Calculates the point at which you must start braking. +# +# This gives the distance from the start of a line at which you must start +# decelerating (at a rate of `-acceleration`) if you started at speed +# `initial_feedrate` and accelerated until this point and want to end at the +# `final_feedrate` after a total travel of `distance`. This can be used to +# compute the intersection point between acceleration and deceleration in the +# cases where the trapezoid has no plateau (i.e. never reaches maximum speed). +def calc_intersection_distance(initial_feedrate: float, final_feedrate: float, acceleration: float, distance: float) -> float: + if acceleration == 0: + return 0 + return (2 * acceleration * distance - initial_feedrate * initial_feedrate + final_feedrate * final_feedrate) / (4 * acceleration) + +## Calculates the maximum speed that is allowed at this point when you must be +# able to reach target_velocity using the acceleration within the allotted +# distance. +def calc_max_allowable_speed(acceleration: float, target_velocity: float, distance: float) -> float: + return math.sqrt(target_velocity * target_velocity - 2 * acceleration * distance) + + +class Command: + def __init__(self, cmd_str: str) -> None: + self._cmd_str = cmd_str # type: str + + self.estimated_exec_time = 0.0 # type: float + + self._cmd_process_function_map = { + "G": self._handle_g, + "M": self._handle_m, + "T": self._handle_t, + } + + self._is_comment = False # type: bool + self._is_empty = False # type: bool + + #Fields taken from CuraEngine's implementation. + self._recalculate = False + self._accelerate_until = 0 + self._decelerate_after = 0 + self._initial_feedrate = 0 + self._final_feedrate = 0 + self._entry_speed = 0 + self._max_entry_speed =0 + self._nominal_length = False + self._nominal_feedrate = 0 + self._max_travel = 0 + self._distance = 0 + self._acceleration = 0 + self._delta = [0, 0, 0] + self._abs_delta = [0, 0, 0] + + ## Calculate the velocity-time trapezoid function for this move. + # + # Each move has a three-part function mapping time to velocity. + def calculate_trapezoid(self, entry_factor, exit_factor): + initial_feedrate = self._nominal_feedrate * entry_factor + final_feedrate = self._nominal_feedrate * exit_factor + + #How far are we accelerating and how far are we decelerating? + accelerate_distance = calc_acceleration_distance(initial_feedrate, self._nominal_feedrate, self._acceleration) + decelerate_distance = calc_acceleration_distance(self._nominal_feedrate, final_feedrate, -self._acceleration) + plateau_distance = self._distance - accelerate_distance - decelerate_distance #And how far in between at max speed? + + #Is the plateau negative size? That means no cruising, and we'll have to + #use intersection_distance to calculate when to abort acceleration and + #start braking in order to reach the final_rate exactly at the end of + #this command. + if plateau_distance < 0: + accelerate_distance = calc_intersection_distance(initial_feedrate, final_feedrate, self._acceleration, self._distance) + accelerate_distance = max(accelerate_distance, 0) #Due to rounding errors. + accelerate_distance = min(accelerate_distance, self._distance) + plateau_distance = 0 + + self._accelerate_until = accelerate_distance + self._decelerate_after = accelerate_distance + plateau_distance + self._initial_feedrate = initial_feedrate + self._final_feedrate = final_feedrate + + @property + def is_command(self) -> bool: + return not self._is_comment and not self._is_empty + + def __str__(self) -> str: + if self._is_comment or self._is_empty: + return self._cmd_str + + info = "t=%s" % (self.estimated_exec_time) + + return self._cmd_str.strip() + " ; --- " + info + os.linesep + + ## Estimates the execution time of this command and calculates the state + # after this command is executed. + def parse(self) -> None: + line = self._cmd_str.strip() + if not line: + self._is_empty = True + return + if line.startswith(";"): + self._is_comment = True + return + + # Remove comment + line = line.split(";", 1)[0].strip() + + parts = line.split(" ") + cmd_code, cmd_num = get_code_and_num(parts[0]) + cmd_num = int(cmd_num) + + func = self._cmd_process_function_map.get(cmd_code) + if func is None: + print("!!! no handle function for command type [%s]" % cmd_code) + return + func(cmd_num, parts) + + def _handle_g(self, cmd_num: int, parts: List[str]) -> None: + self.estimated_exec_time = 0.0 + + # G10: Retract. Make this behave as if it's a retraction of 25mm. + if cmd_num == 10: + #TODO: If already retracted, this shouldn't add anything to the time. + cmd_num = 1 + parts = ["G1", "E" + str(buf.current_position[3] - 25)] + # G11: Unretract. Make this behave as if it's an unretraction of 25mm. + elif cmd_num == 11: + #TODO: If already unretracted, this shouldn't add anything to the time. + cmd_num = 1 + parts = ["G1", "E" + str(buf.current_position[3] + 25)] + + # G0 and G1: Move + if cmd_num in (0, 1): + # Move + if len(parts) > 0: + value_dict = get_value_dict(parts[1:]) + + new_position = copy.deepcopy(buf.current_position) + new_position[0] = float(value_dict.get("X", new_position[0])) + new_position[1] = float(value_dict.get("Y", new_position[1])) + new_position[2] = float(value_dict.get("Z", new_position[2])) + new_position[3] = float(value_dict.get("E", new_position[3])) + buf.current_feedrate = float(value_dict.get("F", buf.current_feedrate * 60.0)) / 60.0 + if buf.current_feedrate < MACHINE_MINIMUM_FEEDRATE: + buf.current_feedrate = MACHINE_MINIMUM_FEEDRATE + + self._delta = [ + new_position[0] - buf.current_position[0], + new_position[1] - buf.current_position[1], + new_position[2] - buf.current_position[2], + new_position[3] - buf.current_position[3] + ] + self._abs_delta = [abs(x) for x in self._delta] + self._max_travel = max(self._abs_delta) + if self._max_travel > 0: + self._nominal_feedrate = buf.current_feedrate + self._distance = math.sqrt(self._abs_delta[0] ** 2 + self._abs_delta[1] ** 2 + self._abs_delta[2] ** 2) + if self._distance == 0: + self._distance = self._abs_delta[3] + + current_feedrate = [d * self._nominal_feedrate / self._distance for d in self._delta] + current_abs_feedrate = [abs(f) for f in current_feedrate] + feedrate_factor = min(1.0, MACHINE_MAX_FEEDRATE_X) + feedrate_factor = min(feedrate_factor, MACHINE_MAX_FEEDRATE_Y) + feedrate_factor = min(feedrate_factor, buf.max_z_feedrate) + feedrate_factor = min(feedrate_factor, MACHINE_MAX_FEEDRATE_E) + #TODO: XY_FREQUENCY_LIMIT + + current_feedrate = [f * feedrate_factor for f in current_feedrate] + current_abs_feedrate = [f * feedrate_factor for f in current_abs_feedrate] + self._nominal_feedrate *= feedrate_factor + + self._acceleration = MACHINE_ACCELERATION + max_accelerations = [MACHINE_MAX_ACCELERATION_X, MACHINE_MAX_ACCELERATION_Y, MACHINE_MAX_ACCELERATION_Z, MACHINE_MAX_ACCELERATION_E] + for n in range(len(max_accelerations)): + if self._acceleration * self._abs_delta[n] / self._distance > max_accelerations[n]: + self._acceleration = max_accelerations[n] + + vmax_junction = MACHINE_MAX_JERK_XY / 2 + vmax_junction_factor = 1.0 + if current_abs_feedrate[2] > buf.max_z_jerk / 2: + vmax_junction = min(vmax_junction, buf.max_z_jerk) + if current_abs_feedrate[3] > buf.max_e_jerk / 2: + vmax_junction = min(vmax_junction, buf.max_e_jerk) + vmax_junction = min(vmax_junction, self._nominal_feedrate) + safe_speed = vmax_junction + + if buf.previous_nominal_feedrate > 0.0001: + xy_jerk = math.sqrt((current_feedrate[0] - buf.previous_feedrate[0]) ** 2 + (current_feedrate[1] - buf.previous_feedrate[1]) ** 2) + vmax_junction = self._nominal_feedrate + if xy_jerk > MACHINE_MAX_JERK_XY: + vmax_junction_factor = MACHINE_MAX_JERK_XY / xy_jerk + if abs(current_feedrate[2] - buf.previous_feedrate[2]) > MACHINE_MAX_JERK_Z: + vmax_junction_factor = min(vmax_junction_factor, (MACHINE_MAX_JERK_Z / abs(current_feedrate[2] - buf.previous_feedrate[2]))) + if abs(current_feedrate[3] - buf.previous_feedrate[3]) > MACHINE_MAX_JERK_E: + vmax_junction_factor = min(vmax_junction_factor, (MACHINE_MAX_JERK_E / abs(current_feedrate[3] - buf.previous_feedrate[3]))) + vmax_junction = min(buf.previous_nominal_feedrate, vmax_junction * vmax_junction_factor) #Limit speed to max previous speed. + + self._max_entry_speed = vmax_junction + v_allowable = calc_max_allowable_speed(-self._acceleration, MINIMUM_PLANNER_SPEED, self._distance) + self._entry_speed = min(vmax_junction, v_allowable) + self._nominal_length = self._nominal_feedrate <= v_allowable + self._recalculate = True + + buf.previous_feedrate = current_feedrate + buf.previous_nominal_feedrate = self._nominal_feedrate + buf.current_position = new_position + + self.calculate_trapezoid(self._entry_speed / self._nominal_feedrate, safe_speed / self._nominal_feedrate) + + self.estimated_exec_time = -1 #Signal that we need to include this in our second pass. + + # G4: Dwell, pause the machine for a period of time. + elif cmd_num == 4: + # Pnnn is time to wait in milliseconds (P0 wait until all previous moves are finished) + cmd, num = get_code_and_num(parts[1]) + num = float(num) + if cmd == "P": + if num > 0: + self.estimated_exec_time = num + + def _handle_m(self, cmd_num: int, parts: List[str]) -> None: + self.estimated_exec_time = 0.0 + + # M203: Set maximum feedrate. Only Z is supported. Assume 0 execution time. + if cmd_num == 203: + value_dict = get_value_dict(parts[1:]) + buf.max_z_feedrate = value_dict.get("Z", buf.max_z_feedrate) + + # M204: Set default acceleration. Assume 0 execution time. + if cmd_num == 204: + value_dict = get_value_dict(parts[1:]) + buf.acceleration = value_dict.get("S", buf.acceleration) + + # M205: Advanced settings, we only set jerks for Griffin. Assume 0 execution time. + if cmd_num == 205: + value_dict = get_value_dict(parts[1:]) + buf.max_xy_jerk = value_dict.get("XY", buf.max_xy_jerk) + buf.max_z_jerk = value_dict.get("Z", buf.max_z_jerk) + buf.max_e_jerk = value_dict.get("E", buf.max_e_jerk) + + def _handle_t(self, cmd_num: int, parts: List[str]) -> None: + # Tn: Switching extruder. Assume 0 seconds. Actually more like 2. + self.estimated_exec_time = 0.0 + + +class CommandBuffer: + def __init__(self, all_lines: List[str], + buffer_filling_rate: float = DEFAULT_BUFFER_FILLING_RATE_IN_C_PER_S, + buffer_size: int = DEFAULT_BUFFER_SIZE + ) -> None: + self._all_lines = all_lines + self._all_commands = list() + + self._buffer_filling_rate = buffer_filling_rate # type: float + self._buffer_size = buffer_size # type: int + + self.acceleration = 3000 + self.current_position = [0, 0, 0, 0] + self.current_feedrate = 0 + self.max_xy_jerk = MACHINE_MAX_JERK_XY + self.max_z_jerk = MACHINE_MAX_JERK_Z + self.max_e_jerk = MACHINE_MAX_JERK_E + self.max_z_feedrate = MACHINE_MAX_FEEDRATE_Z + + # If the buffer can depletes less than this amount time, it can be filled up in time. + lower_bound_buffer_depletion_time = self._buffer_size / self._buffer_filling_rate # type: float + + self._detection_time_frame = lower_bound_buffer_depletion_time + self._code_count_limit = self._buffer_size + self.total_time = 0.0 + + self.previous_feedrate = [0, 0, 0, 0] + self.previous_nominal_feedrate = 0 + + print("Command speed: %s" % buffer_filling_rate) + print("Code Limit: %s" % self._code_count_limit) + + self._bad_frame_ranges = [] + + def process(self) -> None: + buf.total_time = 0.0 + cmd0_idx = 0 + total_frame_time = 0.0 + cmd_count = 0 + for idx, line in enumerate(self._all_lines): + cmd = Command(line) + cmd.parse() + if not cmd.is_command: + continue + self._all_commands.append(cmd) + + #Second pass: Reverse kernel. + kernel_commands = [None, None, None] + for cmd in reversed(self._all_commands): + if cmd.estimated_exec_time >= 0: + continue #Not a movement command. + kernel_commands[2] = kernel_commands[1] + kernel_commands[1] = kernel_commands[0] + kernel_commands[0] = cmd + self.reverse_pass_kernel(kernel_commands[0], kernel_commands[1], kernel_commands[2]) + + #Third pass: Forward kernel. + kernel_commands = [None, None, None] + for cmd in self._all_commands: + if cmd.estimated_exec_time >= 0: + continue #Not a movement command. + kernel_commands[0] = kernel_commands[1] + kernel_commands[1] = kernel_commands[2] + kernel_commands[2] = cmd + self.forward_pass_kernel(kernel_commands[0], kernel_commands[1], kernel_commands[2]) + self.forward_pass_kernel(kernel_commands[1], kernel_commands[2], None) + + #Fourth pass: Recalculate the commands that have _recalculate set. + previous = None + current = None + for current in self._all_commands: + if current.estimated_exec_time >= 0: + current = None + continue #Not a movement command. + + if previous: + #Recalculate if current command entry or exit junction speed has changed. + if previous._recalculate or current._recalculate: + #Note: Entry and exit factors always >0 by all previous logic operators. + previous.calculate_trapezoid(previous._entry_speed / previous._nominal_feedrate, current._entry_speed / previous._nominal_feedrate) + previous._recalculate = False + + previous = current + if current is not None and current.estimated_exec_time >= 0: + current.calculate_trapezoid(current._entry_speed / current._nominal_feedrate, MINIMUM_PLANNER_SPEED / current._nominal_feedrate) + current._recalculate = False + + #Fifth pass: Compute time for movement commands. + for cmd in self._all_commands: + if cmd.estimated_exec_time >= 0: + continue #Not a movement command. + plateau_distance = cmd._decelerate_after - cmd._accelerate_until + cmd.estimated_exec_time = calc_acceleration_time_from_distance(cmd._initial_feedrate, cmd._accelerate_until, cmd._acceleration) + cmd.estimated_exec_time += plateau_distance / cmd._nominal_feedrate + cmd.estimated_exec_time += calc_acceleration_time_from_distance(cmd._final_feedrate, (cmd._distance - cmd._decelerate_after), cmd._acceleration) + + for idx, cmd in enumerate(self._all_commands): + cmd_count += 1 + if idx > cmd0_idx or idx == 0: + buf.total_time += cmd.estimated_exec_time + total_frame_time += cmd.estimated_exec_time + + if total_frame_time > 1: + # Find the next starting command which makes the total execution time of the frame to be less than + # 1 second. + cmd0_idx += 1 + total_frame_time -= self._all_commands[cmd0_idx].estimated_exec_time + cmd_count -= 1 + while total_frame_time > 1: + cmd0_idx += 1 + total_frame_time -= self._all_commands[cmd0_idx].estimated_exec_time + cmd_count -= 1 + + # If within the current time frame the code count exceeds the limit, record that. + if total_frame_time <= self._detection_time_frame and cmd_count > self._code_count_limit: + need_to_append = True + if self._bad_frame_ranges: + last_item = self._bad_frame_ranges[-1] + if last_item["start_line"] == cmd0_idx: + last_item["end_line"] = idx + last_item["cmd_count"] = cmd_count + last_item["time"] = total_frame_time + need_to_append = False + if need_to_append: + self._bad_frame_ranges.append({"start_line": cmd0_idx, + "end_line": idx, + "cmd_count": cmd_count, + "time": total_frame_time}) + + def reverse_pass_kernel(self, previous: Optional[Command], current: Optional[Command], next: Optional[Command]) -> None: + if not current or not next: + return + + #If entry speed is already at the maximum entry speed, no need to + #recheck. The command is cruising. If not, the command is in state of + #acceleration or deceleration. Reset entry speed to maximum and check + #for maximum allowable speed reductions to ensure maximum possible + #planned speed. + if current._entry_speed != current._max_entry_speed: + #If nominal length is true, max junction speed is guaranteed to be + #reached. Only compute for max allowable speed if block is + #decelerating and nominal length is false. + if not current._nominal_length and current._max_entry_speed > next._max_entry_speed: + current._entry_speed = min(current._max_entry_speed, calc_max_allowable_speed(-current._acceleration, next._entry_speed, current._distance)) + else: + current._entry_speed = current._max_entry_speed + current._recalculate = True + + def forward_pass_kernel(self, previous: Optional[Command], current: Optional[Command], next: Optional[Command]) -> None: + if not previous: + return + + #If the previous command is an acceleration command, but it is not long + #enough to complete the full speed change within the command, we need to + #adjust the entry speed accordingly. Entry speeds have already been + #reset, maximised and reverse planned by the reverse planner. If nominal + #length is set, max junction speed is guaranteed to be reached. No need + #to recheck. + if not previous._nominal_length: + if previous._entry_speed < current._entry_speed: + entry_speed = min(current._entry_speed, calc_max_allowable_speed(-previous._acceleration, previous._entry_speed, previous._distance)) + + if current._entry_speed != entry_speed: + current._entry_speed = entry_speed + current._recalculate = True + + def to_file(self, file_name: str) -> None: + all_lines = [str(c) for c in self._all_commands] + with open(file_name, "w", encoding = "utf-8") as f: + f.writelines(all_lines) + f.write(";---TOTAL ESTIMATED TIME:" + str(self.total_time)) + + def report(self) -> None: + for item in self._bad_frame_ranges: + print("Potential buffer underrun from line {start_line} to {end_line}, code count = {code_count}, in {time}s ({speed} cmd/s)".format( + start_line = item["start_line"], + end_line = item["end_line"], + code_count = item["cmd_count"], + time = round(item["time"], 4), + speed = round(item["cmd_count"] / item["time"], 2))) + print("Total predicted number of buffer underruns:", len(self._bad_frame_ranges)) + + +if __name__ == "__main__": + if len(sys.argv) < 2 or 3 < len(sys.argv): + print("Usage: